{"version":3,"sources":["images/cover-1.jpg","images/cover-2.jpg","Authentication.js","Helpers/FetchData.js","Constants.js","api/ResponseHandler.js","api/BudgetDataAccessor.js","api/AccountsDataAccessor.js","api/CategoryDataAccessor.js","api/TransactionDataAccessor.js","api/UserDataAccessor.js","api/ReportDataAccessor.js","api/ScheduleDataAccessor.js","api/AuthenticationDataAccessor.js","api/InvestmentDataAccessor.js","api/TagDataAccessor.js","context.js","components/header/navbar.js","components/header/userInfo.js","components/header/infobar.js","components/header/header.js","Helpers/AuthorisedArea.js","components/controls/controlLabel.js","components/controls/controlText.js","components/controls/selectInput.js","components/controls/button.js","Helpers/Formatter.js","components/controls/textInput.js","components/controls/checkboxInput.js","components/controls/loaderDisplay.js","components/accounts.js","components/controls/dateInput.js","components/controls/currencyInput.js","components/subcomponents/categoryEditor.js","components/subcomponents/budgetEditor.js","components/accountEditor.js","components/reports.js","components/budget.js","components/transactionsRow.js","components/transactions.js","components/subcomponents/accountsEditor.js","components/attachments.js","components/controls/multiSelectInput.js","components/transactionLineEditor.js","components/transactionEditor.js","components/transactionBox.js","components/controls/contextMenu.js","components/futureBox.js","components/charts/lineChart.js","components/shared/panelHeader.js","components/dashboard.js","components/debug.js","components/subcomponents/timezoneEditor.js","components/user.js","components/scheduledFutureList.js","components/scheduledPastList.js","components/scheduleDateEditor.js","components/scheduleAmountEditor.js","components/schedule.js","components/scheduledItemEdit.js","components/schedulesItem.js","components/schedules.js","components/controls/staticLabel.js","components/controls/booleanDisplay.js","components/categories.js","components/budgets.js","components/scheduleCalendarCellEvent.js","components/scheduleCalendarCell.js","components/scheduleCalendar.js","components/controls/radioInout.js","components/reports/balanceTrend.js","components/charts/barChart.js","components/reports/budgetTrend.js","components/charts/doughnutChart.js","components/reports/categoryAmountReport.js","components/transactionSearch.js","components/security.js","components/thirdparties.js","components/thirdparty.js","components/emailValidation.js","components/import.js","components/reports/categoriesovertime.js","components/investments.js","components/investmentEditor.js","components/tags.js","components/tag.js","components/routeManager.js","components/accountBox.js","components/budgetBox.js","components/quicktransaction.js","components/leftInfoBar.js","components/register.js","components/login.js","components/recover.js","components/home.js","components/mainLayout.js","App.js","index.js"],"names":["module","exports","Auth","parseJwt","token","indexOf","base64","split","replace","JSON","parse","window","atob","isValidToken","nowEpoch","Math","floor","Date","getTime","expiry","decoded","exp","console","log","expiryEpoch","hasExpired","logout","localStorage","getItem","localStorageToken","email","getFieldFromToken","firstname","surname","isAuthenticated","defaultAccount","isAdmin","result","Object","keys","forEach","splitItem","match","values","role","fieldName","splitToken","reply","char","removeItem","login","Username","setItem","sub","fetchData","async","_ref","method","URL","data","contentType","config","headers","Authorization","url","axios","AccountTypes","TransactionTypes","DataTypes","ButtonIcons","SAVE","React","createElement","FontAwesomeIcon","icon","faFloppyDisk","OK","faCheck","CANCEL","faXmark","DELETE","faTrashCan","EDIT","faPenToSquare","BACK","faBackwardStep","ADD","faPlus","LOGIN","faRightToBracket","CREATE","ATTACH","faPaperclip","LINK","SEARCH","faMagnifyingGlass","HOME","faHouse","TRANSACTION","faCreditCard","ACCOUNTS","faFileInvoiceDollar","THIRDPARTIES","faPeopleArrows","SCHEDULES","faClock","CALENDAR","faCalendarDays","INVESTMENTS","faMoneyBillTrendUp","BUDGETS","faSunPlantWilt","REPORTING","faPieChart","LOGOUT","faRightFromBracket","SETTINGS","faScrewdriverWrench","TRENDUP","faArrowTrendUp","TRENDDOWN","faArrowTrendDown","EXPAND","faAnglesDown","COLLAPS","faAnglesUp","VIEW","faEye","YES","NO","ChartColours","Server","ApiURL","HandleResponse","response","Promise","resolve","status","toString","charAt","ok","message","json","then","errorText","description","hasOwnProperty","responseState","isSuccess","accountUrl","BudgetDataAcessor","reject","catch","err","id","budgetId","budgetNumber","AccountDataAccessor","account","request","name","accountTypeId","openingDate","openingBalance","isFavourite","defaultSubCategoryId","defaultBudgetId","isActive","canQuickTransaction","IncluedDeactivated","includeDeleted","includeBalances","FilterAccountType","CategoryDataAcessor","fromSubCategoryId","toSubCategoryId","saveTransactionUrl","TransactionDataAccessor","filter","transactionId","fileData","searchRequest","scheduleId","paymentNumber","payload","transaction","userUrl","UserDataAcessor","balanceHistoryUrl","accountId","historicDays","historicDaysFromNow","budgetTypeId","subCategoryId","fromDate","toDate","granularity","includeCurrent","categoryId","ScheduleDataAccessor","variationId","year","month","loginURL","AuthenticationDataAccessor","userName","password","username","validationId","investmentUrl","InvestmentChartPeriod","tagUrl","TagDataAccessor","tagId","Context","createContext","Provider","Component","constructor","_this","arguments","this","state","ResetAll","clearCache","setState","_defaultAccountId","lastSelectedDate","user","authStatus","displayName","validateEmail","validateEmailAddress","lastSaveGuid","cacheStore","allAccountsList","allAccountsListLoaded","budgets","budgetsLoaded","categoriesLoaded","categories","forecastBalanceDataLoaded","forecastBalanceData","historicBalanceDataLoaded","historicBalanceData","recentTransactions","recentTransactionsLoaded","transactions","transactionsLoaded","upcomingTransactions","upcomingTransactionsLoaded","timezones","timezonesLoaded","investments","investmentsLoaded","investmentBalance","investmentBalanceLoaded","tags","tagsLoaded","setCache","cacheName","value","store","_lastPollValue","setLastSelectedDate","newDate","pollForChanges","UserDataAccessor","pollChanges","getDashboardHistoricBalanceReport","getDashboardForcastBalanceReport","getRecentTransactions","getAllAccounts","getDefaultAccount","setDefaultAccount","defaultAccountId","changeAuthenticated","newState","simpleAccountList","quickAccountList","bankAccounts","bankAccountsLoaded","getUser","registerUser","getTimezones","saveUser","changePassword","getInvestments","forceUpdate","InvestmentDataAccessor","sum","reduce","accumalator","current","volumeOwned","investmentType","price","getInvestment","saveInvestment","getInvestmentChart","getChart","getBudgets","getBudget","getBudgetTransactions","saveBudget","deleteBudget","saveTag","Save","getTags","getTag","getDetailedTags","quickAccountListLoaded","getAccount","saveAccount","deleteAccount","updateSimpleAccountList","getQuickAccounts","accounts","quicks","item","map","saveQuickTransaction","debitAccountId","historyPromise","forecastPromise","transPromise","accountsPromise","all","getCategories","saveCategory","mergeSubCategory","oldSubCategoryId","newSubCategoryId","saveSubcategory","changeCategoryState","getSchedule","saveSchedule","schedule","e","deleteSchedule","skipScheduledTransaction","skipIt","scheduleVariation","unSkipScheduledTransaction","payScheduledTransaction","pay","variation","deleteScheduleVariation","deleteVariation","scheduleCalendar","calendar","transactionHistoricDays","saveTransaction","transactionLines","success","addAttachment","formData","bulkUpdateTransactions","transactionSearch","search","deleteTransaction","matchTransactions","requestObject","limitResultCount","getTransactions","getUpcoming","getTransaction","getTransactionForSchedule","length","ReportDataAccessor","getBalanceHistory","chartData","getForecastBalanceReport","getBalanceForecast","getHistoricBalanceReport","getCategoriesOverTimeReport","getCategoriesOverTime","getCategoryAmountReport","getCategoryAmount","getBudgetReport","render","props","children","Consumer","NavBar","super","expanded","handleLogout","bind","toastManager","pathname","location","context","history","push","add","appearance","autoDismiss","pauseOnHover","setExpanded","iconStyle","paddingRight","Fragment","Navbar","expand","fixed","className","Brand","as","Link","to","Toggle","aria-controls","onClick","Collapse","Nav","exact","NavDropdown","alignRight","title","Item","Divider","style","contextType","withRouter","withToastManager","UserInfo","InfoBar","Container","Header","AuthorisedArea","requiredAdmin","isAuthorised","showError","ControlLabel","fontWeight","marginLeft","marginBottom","marginTop","color","fontSize","opacity","text","ControlText","paddingTop","paddingBottom","minHeight","SelectInput","selectedItem","displayOptions","buildDisplayOptions","options","componentName","isViewMode","onChange","setSelectedItem","label","allowBlank","blank","splice","componentDidMount","textBasedOnValue","handleCreate","input","confirmAlert","customUI","onClose","Button","componentWillReceiveProps","nextProps","newValue","currentValue","find","isCreatable","CreatableSelect","isLoading","placeholder","onCreateOption","isDisabled","readOnly","Select","isMulti","help","buttonText","isBusy","Loader","type","height","Btn","variant","disabled","size","defaultProps","minDate","sortByDate","itemDateAParam","itemDateBParam","itemDateA","itemDateB","dateA","moment","isMoment","dateB","diff","sortMethod","itemA","itemB","nameA","toUpperCase","nameB","sortByDateDesc","formatMoney","amount","decimalCount","undefined","decimal","thousands","abs","isNaN","negativeSign","i","parseInt","Number","toFixed","j","substr","slice","getDayNumberFromDate","date","getDate","isNumberic","allowDecimal","numeric","roundUpToNearestPowerOfTen","ceil","TextInput","dataType","target","handleKeyPress","charCode","enterPressed","Form","Control","required","onKeyPress","CheckboxInput","c","r","random","Check","checked","LoaderDisplay","textAlign","width","Accounts","selectedTypeId","searchString","filteredAccounts","includeInactive","onSelect","updateList","accountType","toLowerCase","includes","sort","a","b","textA","textB","ReactGA","pageview","selectedType","params","itemStyle","cursor","Row","Col","md","display","justifyContent","index","key","balance","DateInput","handleDateChange","userTimezoneOffset","getTimezoneOffset","isValidDate","dateString","displayDate","d","ye","Intl","DateTimeFormat","format","mo","da","day","monthOnly","DatePicker","dateFormat","selected","showMonthYearPicker","CurrencyInput","parseFloat","CategoryEditor","rawCategoryData","categoryDisplayOptions","subCategoryDisplayOptions","selectedCategoryId","selectedSubCategoryId","populateListsBasedOnSelectedSubCategoryId","getSortedCategories","categoriesReply","isDeleted","handleControlChange","subCategories","subcategories","element","subCategoryList","displayCategoryLabel","prefix","displaySubCategoryLabel","xs","prerequisit","BudgetEditor","selectedBudgetId","budgetDisplayOptions","displayBudgetLabel","AccountEditor","now","selectedId","defaultSubcategoryId","controlName","goBack","handleCancel","buttonSpacingStyle","padding","float","Reports","Budget","budget","allowanceAmount","startDate","endDate","primaryAccountId","accountList","periods","transactionsLoading","componentDidUpdate","prevProps","originalBudget","cloneDeep","schedules","selectedPeriod","currentBudgetNumber","getTransactionsForBudget","handleChange","property","handlePeriodChange","cancelClick","onTransactionSelect","deleteClick","delete","varient","saveClick","startDayNumber","right","transactionDate","creditAccountName","subCategoryName","span","offset","borderTop","borderBottom","transactionTotal","TransactionsLine","thisAccountId","payee","calculatePayee","transactionType","calculateTransactionType","isDebit","calculateIfIsDebit","newProps","debitAccountName","direction","debitAccountTypeId","creditAccountTypeId","transactionTypeMultiplier","transactionTypeId","deposit","payment","amountColumn","descriptionColumn","isSplit","categoryName","Moment","runningBalance","Account","searchText","selectedAccountId","selectedDuration","configureAnchors","scrollDuration","goToAnchor","t","onDurationChange","lastDate","ScrollableAnchor","filtered","formattedDate","showHeader","TransactionsRow","AccountsEditor","selectedDebitAccountId","selectedCreditAccountId","debitAccountOptions","creditAccountOptions","UpdateAccountSelectionsBasedOnTransactionType","creditAccountId","creditType","debitType","lg","actionButtonText","Attachments","attachments","attachment","uploadedDate","fileName","href","uri","MultiSelectInput","_this$props$values","_this$state$values","join","defaultValue","TransactionLineEditor","lineIndex","alignItems","allowDelete","onDelete","TransactionEditor","uploadVisible","selectedFile","scheduleName","scheduleFrequency","transactionTypes","addLine","removeLine","loadData","_result$data$tags","originalData","_data$tags","currentDr","currentCr","newDr","newCr","lines","selectedAccount","defaultCategoryId","onChangeFileHandler","preventDefault","files","handleUpload","FormData","append","handleCloseAttachment","handleControlLineChange","line","prevSubCategoryId","backClick","transbox","borderStyle","borderColor","borderWidth","attachmentClick","_saveRequest$tags","saveRequest","Modal","aria-labelledby","centered","show","onHide","animation","closeButton","Title","Body","Footer","TransactionBox","SelectItem","mainDiv","whiteSpace","overflow","textOverflow","valueDiv","transactionDescriptionText","budgetName","workOutDescription","ContextMenu","items","CustomToggle","forwardRef","ref","paddingLeft","Dropdown","Menu","displayText","callback","FutureBox","getFutureTransactions","LimitResultCount","PayNow","SkipPayment","Pay","View","sortByDateAsc","enabled","textBit","creditAccount","debitAccount","subCategory","dueDays","LineChart","datasets","showGrid","maxValue","minValue","referenceValue","forceXZero","dataset","dataMax","max","dataMin","min","graphMin","graphMax","off","gradientOffset","ResponsiveContainer","AreaChart","margin","top","left","bottom","CartesianGrid","strokeDasharray","XAxis","dataKey","angle","textAnchor","YAxis","domain","Tooltip","ReferenceLine","y","stroke","x1","y1","x2","y2","stopColor","stopOpacity","Area","animationDuration","dot","strokeWidth","fill","fillOpacity","PanelHeader","link","Dashboard","goToTop","chartHolder","historicData","futureData","isForecast","Debug","refreshAccounts","TimezoneEditor","rawData","countries","countryId","selectedTimezoneId","setSelectedItems","rawDataItem","selectedCountryId","populateTimezones","handleCountryChange","handleTimezoneChange","timezoneId","User","accountName","onSave","userAccountName","ScheduledFutureList","scheduledDisplayCount","totalScheduled","moreClick","payItemClick","scheduleNumber","showDateEditorClick","showAmountEditorClick","skipPayment","variations","newAmount","removeVariation","SchedulePastList","sm","formattedPaidDate","relatedTransaction","unSkipPayment","statusLink","relatedTransactionId","ScheduleDateEditor","isVisible","currentDate","maximumAllowedDate","minimumAllowedDate","applyAll","UNSAFE_componentWillReceiveProps","event","maximumAllowedMoveDate","minimumAllowedMoveDate","handleClose","handleSave","continueChange","callbackMethod","ScheduleAmountEditor","currentAmount","ScheduledTransaction","isNew","eventAmountEditorShowing","eventDateEditorShowing","selectedEvent","recurrenceTypeId","scheduleStart","recurrenceEndTypeId","scheduleEnd","numberOfTransactions","subcategoryId","dayNumber","monthNumber","weekdayOnlyTypeId","recurrenceTypes","recurrenceEndTypes","weekdayOnlyTypes","showEventAmountEditor","showEventDateEditor","loadSchedule","handleModalReply","didSave","upcoming","isPayable","passed","_ref2","removeVariationConfirmed","showSchedule","weekday","Array","getDay","getDayNameFromDate","getMonth","ScheduledPastList","SheduledItemEdit","SchedulesItem","displayAccount","transactionIcon","displayAmount","dueDisplay","showDate","Schedules","scheduleList","filteredList","Create","prevDate","showDateHeader","StaticLabel","textStyle","BooleanDisplay","trueDisplay","falseDisplay","Categories","categoryList","selectedRowId","categoryModalVisible","subcategoryModalVisible","mergeModalVisible","newCategoryName","newCategoryIsIncome","mergeToSubcategoryId","isSubcategory","deletedFlag","thisCategory","category","thisSubCategory","newSubs","handleSaveCategory","IncomeCategory","handleSaveSubcategory","newSubcategoryName","selectedSubcategoryId","handleMerge","showCategoryModal","incomeCategory","showSubcategoryModal","showMergeModal","handleShow","z","index2","usages","Budgets","primaryAccountName","budgetType","budgetAmount","used","ScheduleCalendarCellEvent","isSkipped","textDecoration","SchedueCalendarCell","eventStyle","Badge","pill","isToday","events","showSkipped","paidDate","ScheduleCalendar","showPaid","selectedDate","getData","getFullYear","changeFilterValue","field","cellStyle","cellContentStyle","background","borderBottomWidth","borderBottomColor","borderBottomStyle","weeks","week","days","isInSelectedMonth","ScheduleCalendarCell","dayNumberOfWeek","thisMonth","RadioInput","selectedValue","option","custom","BalanceForecast","_this$props$location","_this$props$location$","populateData","functionName","onPeriodChange","onChangeAccount","handleTypeChange","BarChart","darkenColor","hex","amt","num","g","BC","formatter","Bar","activeBar","Rectangle","entry","Cell","BudgetTrend","selectedBudgetTypeId","budgetList","backgroundColours","labels","instances","stack","lineTension","backgroundColor","hoverBackgroundColor","hoverBorderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","percentageUsed","handleBudgetChange","DoughnutChart","PieChart","Pie","isAnimationActive","cx","cy","outerRadius","innerRadius","nameKey","CategoryAmountReport","advancedSelection","reportRange","getReport","subcategory","TransactionSearch","handleCheckboxChange","prevState","bulkUpdateTransactionIds","dateTypesSelection","amountTypeSelection","accountFilter","subCategorySelection","exactDate","datePeriod","exactValueOption","valueRangeOption","exactValue","bulkUpdateTags","bulkUpdateAmount","bulkUpdateTransactionDate","bulkUpdateDescription","bulkUpdateSubCategoryId","bulkUpdateBudgetId","URLSearchParams","entries","from","acc","handleSearch","handleBulkUpdate","_this$state$bulkUpdat","tagIds","transactionAmount","transactionIds","handleClear","marginRight","_item$tags","x","stopPropagation","Security","currentPassword","newPassword","retypePassword","isValid","ThirdParties","thirdparties","defaultSubcategory","defaultCategory","defaultBudget","ThirdParty","transactionRequest","handleDelete","deleteAllowed","EmailValidation","Import","nowrap","imported","thirdParty","matched","importedTransaction","matchedTransaction","Match","CategoriesOverTime","dateRange","getHistoricDateRange","displayLabel","numberOfDays","today","setDate","granular","getMonday","getFirstDayOfMonth","formattedToday","toISOString","monday","Investments","populateChart","amounts","populateGrid","investmentId","startValue","endValue","valueChange","percentageChange","changeUp","totalValue","code","percentageChange1hour","percentageChange24hours","percentageChange7days","InvestmentEditor","investment","volume","change24Hr","investmentTypeId","investmentTypes","historicPrices","deleteInvestment","Tags","SelectTag","assignedTransactions","assignedSchedules","deactivated","transactionSum","NumberFormat","minimumFractionDigits","maximumFractionDigits","Tag","isCreating","tag","loadTag","_this$state$tag","_this$state$tag2","_this$state$tag3","total","totalsByCategorySubcategory","Description","Amount","typeMultiplier","RouteManager","Switch","Route","path","component","investmentEditor","Transactions","exaxt","Schedule","ScheduledItemEdit","SchedueCalendar","BalanceTrend","AccountBox","BudgetBox","budgetItemStyle","percentage","ProgressBar","round","QuickTransaction","selectedAmount","save","LeftInfoBar","handleToggle","expandedKeys","accountPayload","Accordion","defaultActiveKey","eventKey","in","Register","confirmpassword","handleRegister","Group","retypepassword","Login","handleLogin","authenticateCredentials","controlId","Recover","pin","awaitPin","handleSend","sendPasswordResetCode","handlePin","Home","displayMessage","getId","searchParams","p","LoginRegister","DisplayMessage","Image","src","cover2","fluid","pull","cover1","MainLayout","checkChanges","initialize","App","ToastProvider","autoDismissTimeout","placement","BrowserRouter","ReactDOM","HttpsRedirect","document","getElementById"],"mappings":"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","file":"static/js/main.69f17f1c.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/cover-1.b51534ad.jpg\";","module.exports = __webpack_public_path__ + \"static/media/cover-2.48ca80f7.jpg\";","/* global localStorage:false, window:false */\r\n// import AuthenticationDataAccessor from './api/AuthenticationDataAccessor';\r\n\r\nconst NotFound = -1;\r\nconst DateMultiplier = 1000;\r\n\r\nconst Auth = (function Auth() {\r\n // Parse the JWT token so that we can get the data from it.\r\n function parseJwt(token) {\r\n // Is there a token?\r\n if (!token) { return ''; }\r\n // Do we have the separator?\r\n if (token.indexOf('.') === NotFound) { return ''; }\r\n // Token is made of two parts. Header info, and payload. Let's split it and take the payload.\r\n const tokenPayloadSection = token.split('.')[1];\r\n // Clean up the base64 text.\r\n const base64 = tokenPayloadSection.replace('-', '+').replace('_', '/');\r\n // Return the payload, decoded.\r\n return JSON.parse(window.atob(base64));\r\n }\r\n\r\n // Get the Expiry date from the JWT Token\r\n function expiryEpoch() {\r\n if (Auth.token()) {\r\n // Decode the token.\r\n const decoded = parseJwt(Auth.token());\r\n if (decoded) {\r\n const exp = decoded.exp;\r\n if(!exp) {\r\n console.log(\"No exp in token. It seems bad. Returning -1 from expiryEpoch... Will cause logout.\")\r\n return -1;\r\n }\r\n return decoded.exp;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n // Validate that the token is valid and current.\r\n function isValidToken() {\r\n // First... do we have a token?\r\n if (!Auth.token()) {\r\n return false;\r\n }\r\n\r\n // We have a token, let;'s now check it.\r\n const nowEpoch = Math.floor(new Date().getTime() / DateMultiplier);\r\n const expiry = expiryEpoch();\r\n // Current date is greater than the expiry?\r\n const hasExpired = (expiry < 0) || nowEpoch > expiry;\r\n\r\n if (hasExpired) {\r\n console.log('Token has expired. Will execute Logout to make sure that everythis is in the correct state.');\r\n // Token seems invalid... Let's clear the login details.\r\n Auth.logout();\r\n // and fail.\r\n return false;\r\n }\r\n return !hasExpired;\r\n }\r\n\r\n // Properties of the Authentication object, easily accessable.\r\n Auth.token = function token() {\r\n return localStorage.getItem(Auth.localStorageToken);\r\n };\r\n Auth.email = function email() {\r\n return Auth.getFieldFromToken('email');\r\n };\r\n Auth.firstname = function firstname() {\r\n return Auth.getFieldFromToken('given_name');\r\n };\r\n Auth.surname = function surname() {\r\n return Auth.getFieldFromToken('family_name');\r\n };\r\n Auth.isAuthenticated = function isAuthenticated() {\r\n return isValidToken(); // Logged in is true if we have a valid token.\r\n };\r\n Auth.defaultAccount = function defaultAccount() {\r\n return Auth.getFieldFromToken('defaultAccountId');\r\n }\r\n\r\n Auth.isAdmin = function isAdmin() {\r\n // Decode the JWT\r\n const decoded = parseJwt(Auth.token());\r\n let result = false;\r\n // Get each item from the JWT into an array.\r\n const splitToken = Object.keys(decoded);\r\n // Iterate through each item..\r\n splitToken.forEach((splitItem) => {\r\n // and see if it has the word 'roles'.\r\n if (splitItem.match(/.*role$/)) {\r\n // Sprit the item into an array...\r\n const roles = Object.values(decoded[splitItem]);\r\n // Iterate though each roles...\r\n roles.forEach((role) => {\r\n // And see if it's set to Admin.\r\n if (role === 'Admin') {\r\n // If so, return true.\r\n result = true;\r\n }\r\n });\r\n }\r\n });\r\n // Not matching admin tag found in the token, so... not an admin.\r\n return result;\r\n };\r\n\r\n\r\n Auth.getFieldFromToken = function(fieldName) {\r\n const decoded = parseJwt(Auth.token());\r\n const splitToken = Object.keys(decoded);\r\n let reply = \"\";\r\n\r\n splitToken.forEach((splitItem) => {\r\n if(splitItem === fieldName) {\r\n const value = Object.values(decoded[splitItem]);\r\n value.forEach((char) => {\r\n reply = reply + char;\r\n })\r\n }\r\n });\r\n return reply;\r\n\r\n };\r\n\r\n\r\n Auth.logout = function logout() {\r\n localStorage.removeItem(Auth.localStorageToken);\r\n };\r\n\r\n\r\n Auth.login = function login(Username, token) {\r\n\r\n localStorage.setItem(Auth.localStorageToken, token);\r\n const sub = Auth.getFieldFromToken(\"sub\");\r\n if(Username !== sub) {\r\n console.log(`Token sub ${sub} doesn't match login name ${Username}. Logging out`);\r\n Auth.logout()\r\n }\r\n };\r\n\r\n return Auth;\r\n}());\r\n\r\nAuth.localStorageToken = 'AccuFinance_JWTToken';\r\n// Auth.localStorageEmail = 'AccuFinance_Email';\r\n// Auth.localStorageFirstname = 'AccuFinance_Firstname';\r\n// Auth.localStorageSurname = 'AccuFinance_Surname';\r\n\r\nexport default Auth;\r\n","/* global fetch:false */\r\nimport Auth from '../Authentication';\r\nimport axios from 'axios'\r\n\r\nasync function fetchData ({ method = 'GET', URL, data = {}, contentType = 'application/json'}) {\r\n\r\n const config = {\r\n method: method,\r\n headers: { Authorization: `Bearer ${Auth.token()}`, 'content-type': contentType },\r\n url: URL,\r\n data: data\r\n };\r\n const res = await axios(config)\r\n return res\r\n\r\n};\r\n\r\nexport default fetchData;\r\n","import React from 'react'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faFloppyDisk } from '@fortawesome/free-regular-svg-icons';\r\nimport { \r\n faPlus, \r\n faXmark, \r\n faTrashCan, \r\n faPaperclip, \r\n faBackwardStep, \r\n faPenToSquare, \r\n faMagnifyingGlass, \r\n faRightToBracket, \r\n faCheck, \r\n faHouse, \r\n faCreditCard, \r\n faFileInvoiceDollar, \r\n faPeopleArrows, \r\n faClock, \r\n faCalendarDays, \r\n faMoneyBillTrendUp, \r\n faSunPlantWilt, \r\n faPieChart, \r\n faRightFromBracket, \r\n faScrewdriverWrench, \r\n faArrowTrendUp, \r\n faArrowTrendDown,\r\n faAnglesDown,\r\n faAnglesUp,\r\n faEye,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\r\n\r\nconst Server = {\r\n ApiURL: 'https://api.accufinance.com',\r\n //ApiURL: 'https://localhost:5001',\r\n };\r\n\r\n\r\n export const AccountTypes = {\r\n BANKACCOUNT: 1,\r\n THIRDPARTY: 2\r\n }\r\n\r\n\r\n export const TransactionTypes = {\r\n PAYMENT: 1,\r\n DEPOSIT: 2,\r\n TRANSFER: 3\r\n }\r\n\r\n export const DataTypes = {\r\n TEXT: 1,\r\n NUMBER: 2,\r\n }\r\n\r\n export const BudgetTypes = {\r\n WEEKLY: 1,\r\n MONTHLY: 2\r\n }\r\n\r\n export const WeekendOnlyTypes = {\r\n NO: 1,\r\n FRIDAY: 2,\r\n MONDAY: 3\r\n }\r\n\r\n export const ButtonIcons = {\r\n SAVE: , // \"fas fa-save\",\r\n OK: ,\r\n CANCEL: ,\r\n DELETE: ,\r\n EDIT: ,\r\n BACK: ,\r\n ADD: ,\r\n LOGIN: ,\r\n CREATE: ,\r\n ATTACH: ,\r\n LINK: \"fas fa-link\",\r\n SEARCH: ,\r\n HOME: ,\r\n TRANSACTION: ,\r\n ACCOUNTS: ,\r\n THIRDPARTIES: ,\r\n SCHEDULES: ,\r\n CALENDAR: ,\r\n INVESTMENTS: ,\r\n BUDGETS: ,\r\n REPORTING: ,\r\n LOGOUT: ,\r\n SETTINGS: ,\r\n TRENDUP: ,\r\n TRENDDOWN: ,\r\n EXPAND: ,\r\n COLLAPS: ,\r\n VIEW: ,\r\n YES: ,\r\n NO: ,\r\n\r\n }\r\n\r\n export const ChartColours = [\r\n \"#00876C\", \"#599D71\", \"#8DB37C\", \"#BDC88E\", \"#EBDDA8\", \"#E6BB7F\", \"#E39661\", \"#DE6D52\", \"#D43D51\",\r\n \"#B84D4D\", \"#A23E3F\", \"#8B2D2D\", \"#731D1D\", \"#5A0E0E\", \"#440000\", \"#2E0000\", \"#FFD700\", \"#FF8C00\",\r\n \"#FF4500\", \"#FF1493\", \"#FF69B4\", \"#DB7093\", \"#C71585\", \"#8B0000\", \"#A52A2A\", \"#B22222\", \"#DC143C\",\r\n \"#FF6347\", \"#FF7F50\", \"#FF4500\", \"#FFA07A\", \"#FA8072\", \"#E9967A\", \"#FF8C00\", \"#FFD700\", \"#DAA520\",\r\n \"#EEE8AA\", \"#F0E68C\", \"#BDB76B\", \"#556B2F\", \"#6B8E23\", \"#808000\", \"#9ACD32\", \"#32CD32\", \"#00FF00\",\r\n \"#7FFF00\", \"#7CFC00\", \"#00FF7F\", \"#ADFF2F\", \"#98FB98\", \"#00FA9A\", \"#90EE90\", \"#66CDAA\", \"#20B2AA\",\r\n \"#3CB371\", \"#2E8B57\", \"#008B8B\", \"#008080\", \"#40E0D0\", \"#48D1CC\", \"#AFEEEE\", \"#7FFFD4\", \"#00CED1\",\r\n \"#5F9EA0\", \"#4682B4\", \"#B0E0E6\", \"#B0C4DE\", \"#ADD8E6\", \"#87CEEB\", \"#87CEFA\", \"#00BFFF\", \"#1E90FF\",\r\n \"#6495ED\", \"#4169E1\", \"#0000FF\", \"#0000CD\", \"#00008B\", \"#000080\", \"#191970\", \"#8A2BE2\", \"#9370DB\",\r\n \"#8B008B\", \"#9400D3\", \"#9932CC\", \"#BA55D3\", \"#800080\", \"#D8BFD8\", \"#DDA0DD\", \"#DA70D6\", \"#EE82EE\",\r\n \"#FF00FF\", \"#FF00FF\", \"#FF1493\", \"#FF69B4\", \"#FFB6C1\", \"#FFA07A\", \"#FF7F50\", \"#FF6347\", \"#FF4500\",\r\n \"#FF0000\", \"#DC143C\", \"#B22222\", \"#A52A2A\", \"#8B0000\", \"#800000\"\r\n];\r\n \r\n export default Server;","export const HandleResponse = (response) => {\r\n return new Promise((resolve) => {\r\n\r\n if(response.status.toString().charAt(0) === '5') {\r\n console.log(\"Unhandled exception from API!\")\r\n resolve(\r\n { \r\n ok: false, \r\n message: \"Unhandled exception has occured\" \r\n })\r\n return\r\n }\r\n\r\n\r\n // Handle bad request\r\n if(response.status.toString() === \"400\") {\r\n response.json()\r\n .then((data) => {\r\n let errorText = data.description ? data.description : \"Ensure all fields are completed\"\r\n \r\n resolve(\r\n { \r\n ok: false, \r\n message: errorText\r\n })\r\n \r\n })\r\n return\r\n }\r\n\r\n if(!response.data.hasOwnProperty('responseState')){\r\n console.log(\"Object is missing redponse state or responseState\")\r\n }\r\n\r\n if(response.status.toString().charAt(0) !== '2')\r\n {\r\n console.log(\"HTTP code was not OK. Rejecting.\", response.status)\r\n resolve(\r\n { \r\n ok: false, \r\n message: \"Some other erroroccured. Can show status\", \r\n })\r\n }\r\n\r\n \r\n const reply = {\r\n ok: response.data.responseState.isSuccess, \r\n message: response.data.responseState.description, \r\n data: response.data.data\r\n }\r\n resolve (reply)\r\n });\r\n}\r\n ","import fetchData from '../Helpers/FetchData'\r\nimport Server from '../Constants'\r\nimport { HandleResponse } from './ResponseHandler' \r\n\r\nconst accountUrl = `${Server.ApiURL}/api/budgets`;\r\n\r\nclass BudgetDataAcessor {\r\n\r\n static getBudgets() {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: accountUrl,\r\n method: 'GET'\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static getBudget(id) {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: `${Server.ApiURL}/api/budget/${id}`,\r\n method: 'GET'\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static getBudgetTransactions(budgetId, budgetNumber) {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: `${Server.ApiURL}/api/budget/${budgetId}/transactions/${budgetNumber}`,\r\n method: 'GET'\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static saveBudget(data) {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: `${Server.ApiURL}/api/budget`,\r\n method: 'POST',\r\n data: data\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static deleteBudget(id) {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: `${Server.ApiURL}/api/budget/${id}`,\r\n method: 'DELETE'\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport default BudgetDataAcessor;","import fetchData from '../Helpers/FetchData'\r\nimport Server from '../Constants'\r\nimport { HandleResponse } from './ResponseHandler' \r\n\r\nconst accountUrl = `${Server.ApiURL}/api/accounts`;\r\n\r\nclass AccountDataAccessor {\r\n\r\n \r\n static saveAccount(account) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/account`,\r\n method: 'POST',\r\n data : {\r\n id: account.id,\r\n name: account.name,\r\n accountTypeId: account.accountTypeId,\r\n openingDate: account.openingDate,\r\n openingBalance: account.openingBalance,\r\n isFavourite: account.isFavourite,\r\n defaultSubCategoryId: account.defaultSubCategoryId,\r\n defaultBudgetId: account.defaultBudgetId,\r\n isActive: account.isActive,\r\n canQuickTransaction: account.canQuickTransaction\r\n }\r\n }\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n\r\n static getAllAccounts() {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: accountUrl,\r\n method: 'POST',\r\n data : {\r\n IncluedDeactivated: true,\r\n includeDeleted: false,\r\n includeBalances: true,\r\n FilterAccountType: null\r\n }\r\n }\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result.data)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static getAccount(id) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/account/${id}`,\r\n method: 'GET'\r\n }\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static deleteAccount(id) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/account/${id}`,\r\n method: 'DELETE'\r\n }\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n}\r\n\r\nexport default AccountDataAccessor;","import fetchData from '../Helpers/FetchData'\r\nimport Server from '../Constants'\r\nimport { HandleResponse } from './ResponseHandler' \r\n\r\nconst accountUrl = `${Server.ApiURL}/api/categories`;\r\n\r\nclass CategoryDataAcessor {\r\n\r\n static getCategories() {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: accountUrl,\r\n method: 'GET'\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static mergeSubCategory(fromSubCategoryId, toSubCategoryId) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL:`${Server.ApiURL}/api/subcategory/${fromSubCategoryId}/merge/${toSubCategoryId}`,\r\n method: 'POST'\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static saveCategory(data) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL:`${Server.ApiURL}/api/category`,\r\n method: 'POST',\r\n data: data\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static saveSubcategory(data) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL:`${Server.ApiURL}/api/subcategory`,\r\n method: 'POST',\r\n data: data\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static changeCategoryState(data) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL:`${Server.ApiURL}/api/category`,\r\n method: 'PATCH',\r\n data: data\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n}\r\n\r\nexport default CategoryDataAcessor;","import fetchData from '../Helpers/FetchData'\r\nimport Server from '../Constants'\r\nimport { HandleResponse } from './ResponseHandler' \r\n\r\nconst accountUrl = `${Server.ApiURL}/api/transactions`;\r\nconst saveTransactionUrl = `${Server.ApiURL}/api/transaction`;\r\n\r\n\r\nclass TransactionDataAccessor {\r\n\r\n static getTransactions(filter) {\r\n\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: accountUrl,\r\n method: 'POST',\r\n data: filter\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static getTransaction(transactionId) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/transaction/${transactionId}`,\r\n method: 'GET'\r\n };\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static addAttachment(id, fileData) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/attachment/${id}`,\r\n method: 'POST',\r\n data: fileData,\r\n contentType: 'multipart/form-data'\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static matchTransactions(id, fileData) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/import/${id}`,\r\n method: 'POST',\r\n data: fileData,\r\n contentType: 'multipart/form-data'\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static search(searchRequest) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/transaction/search`,\r\n method: 'POST',\r\n data: searchRequest\r\n };\r\n\r\n fetchData(request)\r\n .then((response) => {\r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n \r\n static getTransactionForSchedule(scheduleId, paymentNumber) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/transaction/schedule/${scheduleId}/paymentnumber/${paymentNumber}`,\r\n method: 'GET'\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static deleteTransaction(id) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/transaction/${id}`,\r\n method: 'DELETE'\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => {\r\n resolve(response)\r\n })\r\n })\r\n }\r\n\r\n static bulkUpdateTransactions(payload) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/transaction/bulkupdate`,\r\n method: 'POST',\r\n data: payload\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n\r\n static saveQuickTransaction(transaction) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/transaction/quick`,\r\n method: 'POST',\r\n data: transaction \r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static saveTransaction(transaction) {\r\n\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: saveTransactionUrl,\r\n method: 'POST',\r\n data: transaction \r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n console.log('Payload that failed', transaction)\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n}\r\n\r\nexport default TransactionDataAccessor;","import fetchData from '../Helpers/FetchData'\r\nimport Server from '../Constants'\r\nimport { HandleResponse } from './ResponseHandler' \r\n\r\nconst userUrl = `${Server.ApiURL}/api/user`;\r\n\r\nclass UserDataAcessor {\r\n\r\n static getUser() {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: userUrl,\r\n method: 'GET'\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static getTimezones() {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/timezones`,\r\n method: 'GET'\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static registerUser(data) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/register`,\r\n method: 'POST',\r\n data: data\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static saveUser(data) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: userUrl,\r\n method: 'POST',\r\n data: data\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n\r\n static changePassword(data) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/user/changepassword`,\r\n method: 'POST',\r\n data: data\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n\r\n static pollChanges() {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/heartbeat`,\r\n method: 'GET'\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport default UserDataAcessor;","import fetchData from '../Helpers/FetchData'\r\nimport Server from '../Constants'\r\nimport { HandleResponse } from './ResponseHandler' \r\n\r\nconst balanceHistoryUrl = `${Server.ApiURL}/api/report/balanceHistory`;\r\n\r\nclass BudgetDataAcessor {\r\n\r\n static getBalanceHistory(accountId, historicDays) {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: balanceHistoryUrl,\r\n method: 'POST',\r\n data: {\r\n accountId: accountId,\r\n historicDays: historicDays\r\n }\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n }) \r\n }\r\n\r\n\r\n static getBalanceForecast(accountId, historicDays) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/report/balanceforecast`,\r\n method: 'POST',\r\n data: {\r\n accountId: accountId,\r\n historicDaysFromNow: historicDays\r\n }\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static getBudgetReport(budgetTypeId, budgetId) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/report/budget`,\r\n method: 'POST',\r\n data: { budgetTypeId, budgetId }\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static getCategoriesOverTime(subCategoryId, fromDate, toDate, granularity, includeCurrent) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/report/categoriesovertime`,\r\n method: 'POST',\r\n data: { subCategoryId, fromDate, toDate, granularity, includeCurrent }\r\n };\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static getCategoryAmount(categoryId, fromDate, toDate, historicDays) {\r\n const data = { \r\n categoryId: categoryId, \r\n fromDate: fromDate, \r\n toDate: toDate, \r\n historicDays: historicDays \r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/report/categoryamount`,\r\n method: 'POST',\r\n data: data\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n\r\n}\r\n\r\nexport default BudgetDataAcessor;","import fetchData from '../Helpers/FetchData'\r\nimport Server from '../Constants'\r\nimport { HandleResponse } from './ResponseHandler' \r\n\r\nconst accountUrl = `${Server.ApiURL}/api/schedule`;\r\n\r\nclass ScheduleDataAccessor {\r\n\r\n static saveSchedule(data) {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: accountUrl,\r\n method: 'POST',\r\n data: data\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => {\r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n console.log('Payload that failed', data)\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static deleteSchedule(id) {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: `${Server.ApiURL}/api/schedule/${id}`,\r\n method: 'DELETE',\r\n };\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static getSchedule(id) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/schedule/${id}`,\r\n method: 'GET'\r\n };\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n\r\n static getUpcoming(filter) {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: `${Server.ApiURL}/api/schedule/upcoming`,\r\n method: 'POST',\r\n data: filter\r\n };\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static pay(scheduleId, paymentNumber) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/schedule/${scheduleId}/pay/${paymentNumber}`,\r\n method: 'POST',\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n });\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static variation(data) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/schedule/variation`,\r\n method: 'POST',\r\n data: data\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n });\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static deleteVariation(variationId) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/schedule/variation/${variationId}`,\r\n method: 'DELETE',\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n });\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static calendar(year, month) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/schedule/calendar/${year}/${month}`,\r\n method: 'GET',\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport default ScheduleDataAccessor;","import fetchData from '../Helpers/FetchData';\r\nimport Server from '../Constants'\r\nimport { HandleResponse } from './ResponseHandler' \r\n\r\n//const isReponseCodeOK = num => num.toString()[0] === '2';\r\nconst loginURL = `${Server.ApiURL}/token`;\r\n\r\nclass AuthenticationDataAccessor {\r\n \r\n static authenticateCredentials(userName, password) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: loginURL,\r\n method: 'POST',\r\n data: { username: userName, password },\r\n };\r\n\r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static sendPasswordResetCode(email) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/recover`,\r\n method: 'POST',\r\n data: { email: email }\r\n };\r\n\r\n fetchData(request)\r\n .then((response) => {\r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result);\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static validateEmailAddress(validationId) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/validateEmail/${validationId}`,\r\n method: 'GET'\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n\r\n })\r\n }\r\n}\r\n\r\nexport default AuthenticationDataAccessor;\r\n","import fetchData from '../Helpers/FetchData'\r\nimport Server from '../Constants'\r\nimport { HandleResponse } from './ResponseHandler' \r\n\r\nconst investmentUrl = `${Server.ApiURL}/api/investments`;\r\n\r\nclass BudgetDataAcessor {\r\n\r\n static getInvestments() {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: investmentUrl,\r\n method: 'GET'\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static getInvestment(id) {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: `${Server.ApiURL}/api/investment/${id}`,\r\n method: 'GET'\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static saveInvestment(data) {\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: `${Server.ApiURL}/api/investment`,\r\n method: 'POST',\r\n data: data\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n static getChart(historicDays) {\r\n\r\n return new Promise((resolve, reject) => {\r\n \r\n const request = {\r\n URL: `${Server.ApiURL}/api/investment/chart`,\r\n method: 'POST',\r\n data: { InvestmentChartPeriod: historicDays }\r\n };\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default BudgetDataAcessor;","import fetchData from '../Helpers/FetchData'\r\nimport Server from '../Constants'\r\nimport { HandleResponse } from './ResponseHandler' \r\n\r\nconst tagUrl = `${Server.ApiURL}/api/tags`;\r\n\r\nclass TagDataAccessor {\r\n\r\n static Save(data) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: tagUrl,\r\n method: 'POST',\r\n data\r\n }\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static getTags() {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: tagUrl,\r\n method: 'GET',\r\n }\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result.data)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static getTag(tagId) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: `${Server.ApiURL}/api/tags/${tagId}`,\r\n method: 'GET',\r\n }\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result.data)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n static getDetailedTags(data) {\r\n return new Promise((resolve, reject) => {\r\n const request = {\r\n URL: tagUrl + \"/detailed\",\r\n method: 'POST',\r\n data: data\r\n }\r\n \r\n fetchData(request) \r\n .then((response) => { \r\n HandleResponse(response)\r\n .then((result) => {\r\n resolve(result.data)\r\n })\r\n })\r\n .catch((err) => {\r\n console.log('Error caught!', err);\r\n reject(err);\r\n });\r\n })\r\n }\r\n\r\n\r\n}\r\n\r\nexport default TagDataAccessor;","import React from 'react';\r\nimport Auth from './Authentication';\r\nimport BudgetDataAcessor from './api/BudgetDataAccessor'\r\nimport AccountDataAccessor from './api/AccountsDataAccessor'\r\nimport CategoryDataAcessor from './api/CategoryDataAccessor'\r\nimport TransactionDataAccessor from './api/TransactionDataAccessor';\r\nimport UserDataAccessor from './api/UserDataAccessor'\r\nimport ReportDataAccessor from './api/ReportDataAccessor'\r\nimport ScheduleDataAccessor from './api/ScheduleDataAccessor'\r\nimport AuthenticationDataAccessor from './api/AuthenticationDataAccessor'\r\nimport InvestmentDataAccessor from './api/InvestmentDataAccessor'\r\nimport TagDataAccessor from './api/TagDataAccessor';\r\n\r\nconst Context = React.createContext();\r\n\r\nexport class Provider extends React.Component {\r\n\r\n state = {\r\n\r\n ResetAll: () => {\r\n return new Promise(() => {\r\n\r\n this.state.clearCache('allAccountsList')\r\n this.state.clearCache('budgets')\r\n this.state.clearCache('categories')\r\n this.state.clearCache('forecastBalanceData')\r\n this.state.clearCache('historicBalanceData')\r\n this.state.clearCache('recentTransactions')\r\n this.state.clearCache('transactions')\r\n this.state.clearCache('upcomingTransactions')\r\n this.state.clearCache('forecastBalanceData')\r\n this.state.clearCache('investments')\r\n this.state.clearCache('investmentBalance')\r\n this.state.clearCache('tags')\r\n this.setState({\r\n _defaultAccountId: null,\r\n lastSelectedDate: new Date(),\r\n user: { authStatus: false }\r\n })\r\n\r\n })\r\n \r\n },\r\n// ***********************************************************\r\n// User and Authentication\r\n//************************************************************\r\n \r\n // Variables.\r\n user: {\r\n authStatus : Auth.isAuthenticated(),\r\n displayName: Auth.firstname()\r\n },\r\n\r\n validateEmail: (id) => {\r\n return new Promise((resolve) => {\r\n AuthenticationDataAccessor.validateEmailAddress(id)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n \r\n },\r\n\r\n lastSaveGuid: null,\r\n\r\n cacheStore: {\r\n\r\n allAccountsList: [],\r\n allAccountsListLoaded: false,\r\n\r\n budgets: [],\r\n budgetsLoaded: false,\r\n\r\n categoriesLoaded: false,\r\n categories: [],\r\n\r\n forecastBalanceDataLoaded: false,\r\n forecastBalanceData: [],\r\n\r\n historicBalanceDataLoaded: false,\r\n historicBalanceData: [],\r\n\r\n recentTransactions: [],\r\n recentTransactionsLoaded: false,\r\n\r\n transactions: [],\r\n transactionsLoaded: false,\r\n\r\n upcomingTransactions: [],\r\n upcomingTransactionsLoaded: false,\r\n\r\n timezones: [],\r\n timezonesLoaded: false,\r\n\r\n investments: [],\r\n investmentsLoaded: false,\r\n\r\n investmentBalance: 0,\r\n investmentBalanceLoaded: false,\r\n\r\n tags: [],\r\n tagsLoaded: false\r\n\r\n\r\n },\r\n\r\n setCache: (cacheName, value) => {\r\n let store = this.state.cacheStore;\r\n store[cacheName] = value;\r\n store[`${cacheName}Loaded`] = true;\r\n this.setState({\r\n cacheStore : store\r\n })\r\n },\r\n\r\n clearCache: (cacheName) => {\r\n let store = this.state.cacheStore;\r\n store[cacheName] = [];\r\n store[`${cacheName}Loaded`] = false;\r\n this.setState({\r\n cacheStore : store\r\n })\r\n },\r\n\r\n _lastPollValue: null,\r\n _defaultAccountId: null,\r\n lastSelectedDate: new Date(),\r\n\r\n setLastSelectedDate: (newDate) => { \r\n this.setState({ lastSelectedDate: newDate })\r\n },\r\n\r\n pollForChanges: () => {\r\n return new Promise((resolve) => {\r\n if(this.state.isAuthenticated()) {\r\n UserDataAccessor.pollChanges()\r\n .then((result) => {\r\n if(result.data !== this.state._lastPollValue)\r\n {\r\n this.setState({\r\n _lastPollValue: result.data\r\n }, () => {\r\n\r\n this.state.clearCache('historicBalanceData')\r\n this.state.clearCache('forecastBalanceData')\r\n this.state.clearCache('recentTransactions')\r\n this.state.clearCache('upcomingTransactions')\r\n\r\n this.state.getDashboardHistoricBalanceReport(14)\r\n this.state.getDashboardForcastBalanceReport()\r\n this.state.getRecentTransactions(true, 5)\r\n this.state.getAllAccounts(true);\r\n })\r\n }\r\n })\r\n }\r\n resolve()\r\n })\r\n },\r\n\r\n getDefaultAccount: () => {\r\n return new Promise((resolve) => {\r\n if(this.state._defaultAccountId)\r\n { \r\n resolve(this.state._defaultAccountId)\r\n } \r\n else \r\n {\r\n this.setState({\r\n _defaultAccountId: Auth.defaultAccount(),\r\n }, () => { \r\n resolve(this.state._defaultAccountId) \r\n })\r\n }\r\n })\r\n },\r\n\r\n setDefaultAccount: (defaultAccountId) => {\r\n this.setState({\r\n _defaultAccountId: defaultAccountId\r\n }, () => {\r\n this.state.clearCache('historicBalanceData')\r\n this.state.clearCache('forecastBalanceData')\r\n })\r\n },\r\n\r\n // Methods\r\n changeAuthenticated: (newState) => {\r\n this.state.ResetAll()\r\n .then(() => {\r\n });\r\n\r\n if(newState === false) {\r\n \r\n Auth.logout();\r\n return\r\n }\r\n let user = this.state.user\r\n\r\n this.state.getDefaultAccount()\r\n .then((result ) => {\r\n user.defaultAccount = result\r\n user.displayName = Auth.firstname()\r\n user.authStatus = Auth.isAuthenticated()\r\n this.setState ({ \r\n user: user, \r\n });\r\n })\r\n },\r\n\r\n logout: () => {\r\n\r\n this.state.clearCache('historicBalanceData')\r\n this.state.clearCache('forecastBalanceData')\r\n\r\n this.setState( {\r\n budgets: [],\r\n budgetsLoaded: false,\r\n\r\n investments: [],\r\n investmentsLoaded: false,\r\n\r\n tags: [],\r\n tagsLoaded: false,\r\n\r\n allAccountsList: [],\r\n allAccountsListLoaded: false,\r\n\r\n simpleAccountList: [],\r\n quickAccountList: [],\r\n recentTransactions: [],\r\n upcomingTransactions: [],\r\n transactions: [],\r\n\r\n \r\n bankAccounts: [],\r\n bankAccountsLoaded: false,\r\n \r\n categories: [],\r\n categoriesLoaded: false,\r\n recentTransactionsLoaded: false,\r\n\r\n investmentBalance: 0,\r\n investmentBalanceLoaded: false,\r\n\r\n _defaultAccountId: null,\r\n \r\n user: {\r\n authStatus: false,\r\n defaultAccount: null,\r\n displayName: null\r\n },\r\n })\r\n Auth.logout();\r\n },\r\n\r\n isAuthenticated: () => {\r\n return this.state.user.authStatus\r\n },\r\n\r\n getUser: () => {\r\n return new Promise((resolve) => {\r\n UserDataAccessor.getUser() \r\n .then((data) => {\r\n resolve(data)\r\n })\r\n })\r\n },\r\n\r\n registerUser: (data) => {\r\n return new Promise((resolve, reject) => {\r\n UserDataAccessor.registerUser(data)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n\r\n getTimezones: () => {\r\n return new Promise((resolve) => {\r\n if(!this.state.cacheStore.timezonesLoaded) {\r\n UserDataAccessor.getTimezones()\r\n .then((data) => {\r\n this.state.setCache('timezones', data.data)\r\n resolve(data.data)\r\n })\r\n } else {\r\n resolve(this.state.cacheStore.timezones)\r\n }\r\n \r\n })\r\n },\r\n\r\n saveUser: (data) => {\r\n this.state.setDefaultAccount(data.defaultAccountId)\r\n\r\n return new Promise((resolve, reject) => {\r\n UserDataAccessor.saveUser(data)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n changePassword: (data) => {\r\n return new Promise((resolve, reject) => {\r\n UserDataAccessor.changePassword(data)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n// ***********************************************************\r\n// Investments\r\n//************************************************************\r\n getInvestments: (forceUpdate) => {\r\n return new Promise((resolve) => {\r\n if(!this.state.cacheStore.investmentsLoaded || forceUpdate) {\r\n InvestmentDataAccessor.getInvestments()\r\n .then((result) => {\r\n this.state.setCache('investments', result.data)\r\n var sum = result.data.reduce((accumalator, current) => accumalator + current.volumeOwned * current.investmentType.price, 0)\r\n this.state.setCache('investmentBalance', sum)\r\n resolve(result.data)\r\n })\r\n }\r\n else\r\n {\r\n resolve(this.state.cacheStore.investments)\r\n }\r\n })\r\n },\r\n getInvestment: (id) => {\r\n return new Promise((resolve) => {\r\n \r\n InvestmentDataAccessor.getInvestment(id)\r\n .then((result) => {\r\n resolve(result.data)\r\n })\r\n }\r\n )\r\n },\r\n\r\n saveInvestment: (data) => {\r\n return new Promise((resolve) => {\r\n InvestmentDataAccessor.saveInvestment(data)\r\n .then((result) => {\r\n this.state.getInvestments(true)\r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n getInvestmentChart: (historicDays) => {\r\n return new Promise((resolve) => {\r\n \r\n InvestmentDataAccessor.getChart(historicDays)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n }\r\n )\r\n },\r\n\r\n\r\n\r\n// ***********************************************************\r\n// Budgets\r\n//************************************************************\r\n \r\n getBudgets: (forceUpdate) => {\r\n return new Promise((resolve) => {\r\n if(!this.state.cacheStore.budgetsLoaded || forceUpdate) {\r\n BudgetDataAcessor.getBudgets() \r\n .then((result) => {\r\n this.state.setCache('budgets', result.data)\r\n resolve(result.data)\r\n })\r\n } \r\n else \r\n {\r\n resolve(this.state.cacheStore.budgets)\r\n }\r\n })\r\n },\r\n\r\n\r\n getBudget: (id) => {\r\n return new Promise((resolve) => {\r\n BudgetDataAcessor.getBudget(id)\r\n .then((result) => { \r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n getBudgetTransactions: (budgetId, budgetNumber) => {\r\n return new Promise((resolve) => {\r\n BudgetDataAcessor.getBudgetTransactions(budgetId, budgetNumber)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n saveBudget: (data) => {\r\n return new Promise((resolve) => {\r\n BudgetDataAcessor.saveBudget(data)\r\n .then((result) => {\r\n this.state.getBudgets(true)\r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n deleteBudget: (id) => {\r\n return new Promise((resolve) => {\r\n BudgetDataAcessor.deleteBudget(id)\r\n .then((result) => {\r\n this.state.getBudgets(true)\r\n resolve(result.data)\r\n })\r\n })\r\n },\r\n\r\n\r\n\r\n// ***********************************************************\r\n// Tags\r\n//************************************************************\r\n\r\n // Methods\r\n saveTag: (payload) => {\r\n return new Promise((resolve, reject) => {\r\n TagDataAccessor.Save(payload)\r\n .then((result) => {\r\n this.state.getTags(true)\r\n resolve(result)\r\n })\r\n \r\n });\r\n },\r\n getTags: (forceUpdate) => {\r\n return new Promise((resolve, reject) => {\r\n if(!this.state.cacheStore.tagsLoaded || forceUpdate) {\r\n TagDataAccessor.getTags()\r\n .then((result) => {\r\n this.state.setCache('tags', result)\r\n resolve(result)\r\n })\r\n } else {\r\n resolve(this.state.cacheStore.tags);\r\n }\r\n });\r\n },\r\n getTag: (tagId) => {\r\n return new Promise((resolve, reject) => {\r\n TagDataAccessor.getTag(tagId)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n\r\n });\r\n },\r\n getDetailedTags: (fromDate, toDate) => {\r\n return new Promise((resolve, reject) => {\r\n const payload = { fromDate, toDate };\r\n TagDataAccessor.getDetailedTags(payload)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n });\r\n },\r\n\r\n\r\n\r\n// ***********************************************************\r\n// Accounts\r\n//************************************************************\r\n \r\n // Variables.\r\n simpleAccountList: [],\r\n quickAccountList: [],\r\n quickAccountListLoaded: false,\r\n\r\n // Methods\r\n getAllAccounts: (forceUpdate) => {\r\n return new Promise((resolve, reject) => {\r\n if(!this.state.cacheStore.allAccountsListLoaded || forceUpdate) {\r\n AccountDataAccessor.getAllAccounts()\r\n .then((result) => {\r\n this.state.setCache('allAccountsList', result)\r\n resolve(result)\r\n })\r\n } else {\r\n resolve(this.state.cacheStore.allAccountsList);\r\n }\r\n });\r\n },\r\n\r\n \r\n getAccount: (id) => {\r\n return new Promise((resolve) => {\r\n AccountDataAccessor.getAccount(id)\r\n .then((result) => {\r\n resolve(result.data)\r\n }) \r\n })\r\n },\r\n\r\n\r\n saveAccount: (account) => {\r\n return new Promise((resolve, reject) => {\r\n AccountDataAccessor.saveAccount(account)\r\n .then((result) => {\r\n this.state.getAllAccounts(true)\r\n .then((data => {\r\n this.state.setCache('allAccountsList', data) \r\n }))\r\n // TODO: Need to update all the transactions currently cached.\r\n resolve(result)\r\n })\r\n .catch((err) => {\r\n reject(err)\r\n })\r\n })\r\n },\r\n\r\n deleteAccount: (id) => {\r\n return new Promise((resolve, reject) => {\r\n AccountDataAccessor.deleteAccount(id)\r\n .then((result) => {\r\n this.state.getAllAccounts(true)\r\n .then((data => {\r\n this.state.setCache('allAccountsList', data) \r\n }))\r\n // TODO: Need to update all the transactions currently cached.\r\n resolve(result)\r\n })\r\n .catch((err) => {\r\n reject(err)\r\n })\r\n })\r\n },\r\n\r\n updateSimpleAccountList: (data) => {\r\n this.setState({ simpleAccountList: data })\r\n },\r\n\r\n getQuickAccounts: () => {\r\n return new Promise((resolve) => {\r\n this.state.getAllAccounts(false)\r\n .then((accounts) => {\r\n const quicks = accounts.filter((item) => item.canQuickTransaction)\r\n .map((account) => {\r\n return account\r\n })\r\n resolve(quicks)\r\n })\r\n })\r\n },\r\n\r\n saveQuickTransaction: (transaction) => {\r\n return new Promise((resolve) => {\r\n this.state.getDefaultAccount()\r\n .then((defaultAccountId) => {\r\n\r\n // Inject current default account.\r\n const data = {...transaction, debitAccountId :defaultAccountId}\r\n // perform the same...\r\n TransactionDataAccessor.saveQuickTransaction(data)\r\n .then((data)=> {\r\n // Handle good result\r\n if(data.ok) {\r\n this.state.clearCache('historicBalanceData')\r\n this.state.clearCache('forecastBalanceData')\r\n this.state.clearCache('recentTransactions')\r\n this.state.clearCache('upcomingTransactions')\r\n\r\n var historyPromise = this.state.getDashboardHistoricBalanceReport(14)\r\n var forecastPromise = this.state.getDashboardForcastBalanceReport()\r\n var transPromise = this.state.getRecentTransactions(true, 5)\r\n var accountsPromise = this.state.getAllAccounts(true);\r\n\r\n Promise.all([historyPromise, forecastPromise, transPromise, accountsPromise])\r\n .then(() => {\r\n resolve(data) \r\n })\r\n } \r\n else // handle bad result\r\n {\r\n resolve(data)\r\n }\r\n })\r\n })\r\n })\r\n },\r\n \r\n\r\n// ***********************************************************\r\n// Category and Sub Categories\r\n//************************************************************\r\n \r\n // Methods\r\n getCategories: (forceUpdate, inludeDeleted=false) => {\r\n return new Promise((resolve) => {\r\n if(!this.state.cacheStore.categoriesLoaded || forceUpdate) {\r\n CategoryDataAcessor.getCategories()\r\n .then((result) => {\r\n this.state.setCache('categories', result.data)\r\n resolve(result.data)\r\n })\r\n } else {\r\n resolve(this.state.cacheStore.categories)\r\n }\r\n })\r\n },\r\n\r\n saveCategory: (data) => {\r\n return new Promise((resolve) => {\r\n CategoryDataAcessor.saveCategory(data)\r\n .then((result) => {\r\n this.state.getCategories(true)\r\n .then((data) => {\r\n this.state.setCache('categories', data)\r\n resolve(data);\r\n })\r\n \r\n })\r\n })\r\n },\r\n\r\n mergeSubCategory: (oldSubCategoryId, newSubCategoryId) => {\r\n return new Promise((resolve) => {\r\n CategoryDataAcessor.mergeSubCategory(oldSubCategoryId, newSubCategoryId)\r\n .then((result) => {\r\n this.state.getCategories(true)\r\n .then((data) => {\r\n this.state.setCache('categories', data)\r\n resolve(result);\r\n })\r\n \r\n })\r\n })\r\n },\r\n\r\n \r\n saveSubcategory: (data) => {\r\n return new Promise((resolve) => {\r\n CategoryDataAcessor.saveSubcategory(data)\r\n .then((result) => {\r\n this.state.getCategories(true)\r\n .then((data) => {\r\n this.state.setCache('categories', data)\r\n resolve(result)\r\n })\r\n \r\n })\r\n })\r\n },\r\n\r\n changeCategoryState: (newState) => {\r\n return new Promise((resolve) => {\r\n CategoryDataAcessor.changeCategoryState(newState)\r\n .then((result) => {\r\n this.state.getCategories(true)\r\n .then((data) => {\r\n this.state.setCache('categories', data)\r\n resolve(result)\r\n })\r\n \r\n \r\n })\r\n })\r\n },\r\n\r\n// ***********************************************************\r\n// Scheduled Transactions\r\n//************************************************************\r\n \r\n // Methods.\r\n getSchedule: (id) => {\r\n \r\n return new Promise((resolve) => {\r\n ScheduleDataAccessor.getSchedule(id)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n .catch((err) => {\r\n console.log(\"context: Error getting schedule\", err)\r\n })\r\n })\r\n },\r\n\r\n saveSchedule: (schedule) => {\r\n return new Promise((resolve) => {\r\n ScheduleDataAccessor.saveSchedule(schedule)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.state.clearCache('forecastBalanceData')\r\n this.state.clearCache('upcomingTransactions')\r\n }\r\n resolve(result)\r\n })\r\n .catch((e) => {\r\n console.log(\"Error saving schedule.\", e)\r\n })\r\n })\r\n },\r\n\r\n deleteSchedule: (id) => {\r\n return new Promise((resolve) => {\r\n ScheduleDataAccessor.deleteSchedule(id)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.state.clearCache('forecastBalanceData')\r\n this.state.clearCache('upcomingTransactions')\r\n }\r\n resolve(result)\r\n })\r\n .catch((e) => {\r\n console.log(\"Error deleting schedule.\", e)\r\n })\r\n })\r\n }, \r\n\r\n // This is a method that simply causes a variation based on an Skip request\r\n skipScheduledTransaction: (scheduleId, paymentNumber) => {\r\n\r\n const data = {\r\n scheduleId,\r\n paymentNumber,\r\n skipIt: true,\r\n }\r\n\r\n return this.state.scheduleVariation(data)\r\n\r\n },\r\n\r\n // This is a method that simply causes a variation based on an UnSkip request\r\n unSkipScheduledTransaction: (scheduleId, paymentNumber) => {\r\n\r\n const data = {\r\n scheduleId,\r\n paymentNumber,\r\n skipIt: false,\r\n }\r\n\r\n return this.state.scheduleVariation(data)\r\n\r\n },\r\n\r\n payScheduledTransaction: (scheduleId, paymentNumber) => {\r\n return new Promise((resolve) => {\r\n ScheduleDataAccessor.pay(scheduleId, paymentNumber)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.state.clearCache('historicBalanceData')\r\n this.state.clearCache('recentTransactions')\r\n this.state.clearCache('upcomingTransactions')\r\n\r\n this.state.getDashboardHistoricBalanceReport(14)\r\n this.state.getDashboardForcastBalanceReport()\r\n this.state.getRecentTransactions(true, 5)\r\n this.state.getAllAccounts(true);\r\n }\r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n scheduleVariation: (data) => {\r\n return new Promise((resolve) => {\r\n ScheduleDataAccessor.variation(data)\r\n .then((result) => {\r\n if(result.ok)\r\n {\r\n this.state.clearCache('upcomingTransactions')\r\n this.state.clearCache('forecastBalanceData')\r\n this.state.getDashboardForcastBalanceReport()\r\n }\r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n deleteScheduleVariation: (variationId) => {\r\n return new Promise((resolve) => {\r\n ScheduleDataAccessor.deleteVariation(variationId)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.state.clearCache('upcomingTransactions')\r\n this.state.clearCache('forecastBalanceData')\r\n this.state.getDashboardForcastBalanceReport()\r\n }\r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n scheduleCalendar: (year, month) => {\r\n return new Promise((resolve) => {\r\n ScheduleDataAccessor.calendar(year, month)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n\r\n },\r\n\r\n// ***********************************************************\r\n// Transactions\r\n//************************************************************\r\n \r\n transactionHistoricDays: -1,\r\n\r\n // Methods.\r\n saveTransaction: (transaction) => {\r\n return new Promise((resolve) => {\r\n TransactionDataAccessor.saveTransaction(transaction)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.state.getAllAccounts(true); // Because we saved a transaction. Accounts will have been effected.\r\n this.state.clearCache('forecastBalanceData')\r\n this.state.clearCache('historicBalanceData')\r\n this.state.clearCache('recentTransactions')\r\n this.state.clearCache('upcomingTransactions')\r\n \r\n this.state.getDashboardHistoricBalanceReport(14)\r\n this.state.getDashboardForcastBalanceReport()\r\n this.state.getRecentTransactions(true, 5)\r\n this.state.getBudgets(true)\r\n \r\n if(transaction.transactionLines.filter((item) => item.budgetId)) {\r\n // a transaction line has a budget.\r\n this.state.getBudgets(); // Because we saved a transaction. Budgets may have been effected.\r\n } \r\n } \r\n resolve(result); \r\n })\r\n .catch((e) => {\r\n console.log(\"Error captured while saving transaction.\", e)\r\n resolve({success: false, message: e});\r\n })\r\n })\r\n },\r\n\r\n addAttachment: (id, formData) => {\r\n return new Promise((resolve) => {\r\n TransactionDataAccessor.addAttachment(id, formData)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n\r\n },\r\n\r\n bulkUpdateTransactions: (request) => {\r\n\r\n return new Promise((resolve) => {\r\n TransactionDataAccessor.bulkUpdateTransactions(request)\r\n .then((result) => {\r\n resolve(result);\r\n })\r\n })\r\n },\r\n \r\n transactionSearch: (searchRequest) => {\r\n\r\n return new Promise((resolve) => {\r\n TransactionDataAccessor.search(searchRequest)\r\n .then((result) => { \r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n deleteTransaction: (id) => {\r\n return new Promise((resolve) => {\r\n TransactionDataAccessor.deleteTransaction(id)\r\n .then((result) => {\r\n resolve({success: true, message: \"saveTransaction OK\"});\r\n this.state.clearCache('forecastBalanceData')\r\n this.state.clearCache('historicBalanceData')\r\n this.state.clearCache('budgets')\r\n this.state.clearCache('recentTransactions')\r\n this.state.clearCache('upcomingTransactions')\r\n\r\n this.state.getAllAccounts(true); // Because we saved a transaction. Accounts will have been effected.\r\n this.state.getRecentTransactions(true, 5);\r\n this.state.getBudgets(); // Because we saved a transaction. Budgets may have been effected.\r\n \r\n })\r\n })\r\n },\r\n\r\n matchTransactions: (accountId, fileData) => {\r\n return new Promise((resolve, reject) => { \r\n\r\n TransactionDataAccessor.matchTransactions(accountId, fileData)\r\n .then((data) => resolve(data))\r\n\r\n })\r\n },\r\n\r\n getRecentTransactions: (forceUpdate, historicDaysFromNow) => \r\n {\r\n return new Promise((resolve, reject) => {\r\n\r\n if(!this.state.cacheStore.recentTransactionsLoaded || forceUpdate) {\r\n const requestObject = {\r\n limitResultCount: historicDaysFromNow\r\n }\r\n TransactionDataAccessor.getTransactions(requestObject)\r\n .then((data) => {\r\n this.state.setCache('recentTransactions', data.data)\r\n resolve(data.data) \r\n })\r\n } else {\r\n resolve(this.state.cacheStore.recentTransactions)\r\n } \r\n \r\n })\r\n },\r\n\r\n\r\n getUpcoming: (filter) => {\r\n return new Promise((resolve) => {\r\n if(this.state.cacheStore.upcomingTransactionsLoaded) {\r\n resolve(this.state.cacheStore.upcomingTransactions)\r\n }\r\n else\r\n {\r\n \r\n ScheduleDataAccessor.getUpcoming(filter)\r\n .then((data) => {\r\n this.state.setCache('upcomingTransactions', data.data)\r\n resolve(data.data)\r\n })\r\n }\r\n \r\n })\r\n },\r\n \r\n\r\n\r\n getTransactions: (filter) => \r\n {\r\n return new Promise((resolve) => {\r\n TransactionDataAccessor.getTransactions(filter)\r\n .then((data) => {\r\n this.state.setCache('transactions', data.data)\r\n resolve(data.data);\r\n\r\n })\r\n })\r\n },\r\n\r\n\r\n getTransaction: (transactionId) => {\r\n return new Promise((resolve) => {\r\n TransactionDataAccessor.getTransaction(transactionId)\r\n .then((result) => {\r\n resolve(result)\r\n })\r\n })\r\n },\r\n\r\n getTransactionForSchedule: (scheduleId, paymentNumber) =>{\r\n return new Promise((resolve) => {\r\n TransactionDataAccessor.getTransactionForSchedule(scheduleId, paymentNumber)\r\n .then((data) => {\r\n resolve(data.data)\r\n })\r\n })\r\n },\r\n \r\n\r\n// ***********************************************************\r\n// Reporting\r\n//************************************************************\r\n\r\n getDashboardHistoricBalanceReport: (historicDays, forceUpdate) => {\r\n return new Promise((resolve) => {\r\n this.state.getDefaultAccount()\r\n .then((accountId) => {\r\n if(!accountId || accountId.length === 0) {\r\n resolve([])\r\n return\r\n }\r\n if(this.state.cacheStore.historicBalanceDataLoaded && !forceUpdate)\r\n {\r\n resolve(this.state.cacheStore.historicBalanceData)\r\n }\r\n else{\r\n ReportDataAccessor.getBalanceHistory(accountId, historicDays)\r\n .then((result) => {\r\n this.state.setCache('historicBalanceData', result.data.chartData)\r\n resolve(result.data.chartData)\r\n })\r\n }\r\n })\r\n\r\n })\r\n },\r\n\r\n getForecastBalanceReport(accountId, historicDays) {\r\n return new Promise((resolve) => {\r\n ReportDataAccessor.getBalanceForecast(accountId, historicDays)\r\n .then((result) => {\r\n resolve(result.data.chartData)\r\n })\r\n })\r\n \r\n },\r\n\r\n getHistoricBalanceReport(accountId, historicDays) {\r\n return new Promise((resolve) => {\r\n ReportDataAccessor.getBalanceHistory(accountId, historicDays)\r\n .then((result) => {\r\n resolve(result.data.chartData)\r\n })\r\n })\r\n \r\n },\r\n\r\n getCategoriesOverTimeReport(subCategoryId, fromDate, toDate, granularity, includeCurrent) {\r\n return new Promise((resolve) => {\r\n ReportDataAccessor.getCategoriesOverTime(subCategoryId, fromDate, toDate, granularity, includeCurrent)\r\n .then((result) => {\r\n resolve(result.data)\r\n })\r\n })\r\n },\r\n \r\n getCategoryAmountReport(categoryId, fromDate, toDate, historicDays) {\r\n return new Promise((resolve) => {\r\n ReportDataAccessor.getCategoryAmount(categoryId, fromDate, toDate, historicDays)\r\n .then((result) => {\r\n resolve(result.data)\r\n })\r\n })\r\n \r\n },\r\n\r\n getDashboardForcastBalanceReport: (forceUpdate) => {\r\n return new Promise((resolve) => {\r\n this.state.getDefaultAccount()\r\n .then((accountId) => {\r\n if(!accountId || accountId.length === 0) {\r\n resolve([])\r\n return\r\n }\r\n if(this.state.cacheStore.forecastBalanceDataLoaded && !forceUpdate) {\r\n resolve(this.state.cacheStore.forecastBalanceData)\r\n }\r\n else\r\n {\r\n ReportDataAccessor.getBalanceForecast(accountId, 14)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.state.setCache('forecastBalanceData', result.data.chartData)\r\n }\r\n resolve(result)\r\n })\r\n }\r\n \r\n })\r\n\r\n })\r\n \r\n },\r\n\r\n getBudgetReport(budgetTypeId, budgetId) {\r\n return new Promise((resolve) => {\r\n ReportDataAccessor.getBudgetReport(budgetTypeId, budgetId)\r\n .then((result) => {\r\n resolve(result.data)\r\n })\r\n })\r\n \r\n },\r\n \r\n }\r\n\r\n\r\n render() {\r\n return (\r\n \r\n {this.props.children}\r\n \r\n )\r\n }\r\n}\r\n\r\nexport const Consumer = Context;","import React from 'react';\r\nimport { withRouter, Link } from 'react-router-dom';\r\nimport { Consumer } from '../../context';\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport { Nav, Navbar, NavDropdown } from 'react-bootstrap';\r\nimport Auth from '../../Authentication'\r\nimport { ButtonIcons } from '../../Constants';\r\n\r\n\r\nclass NavBar extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n expanded: false\r\n }\r\n\r\n this.handleLogout = this.handleLogout.bind(this);\r\n\r\n }\r\n\r\n handleLogout() {\r\n const { toastManager } = this.props;\r\n const { pathname } = this.props.location;\r\n this.context.changeAuthenticated(false);\r\n this.context.logout();\r\n \r\n if(pathname !== \"/\") {\r\n this.props.history.push(\"/\");\r\n }\r\n toastManager.add('You\\'re now logged out', {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n\r\n setExpanded(value) {\r\n this.setState({\r\n expanded: value\r\n })\r\n }\r\n\r\n render() {\r\n\r\n\r\n const isAuthenticated = Auth.isAuthenticated();\r\n\r\n const iconStyle = {\r\n paddingRight: \"6px\"\r\n }\r\n\r\n return (\r\n \r\n\r\n \r\n AccuFinance\r\n this.setExpanded(this.state.expanded ? false : \"expanded\")} />\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n }\r\n NavBar.contextType = Consumer;\r\n export default withRouter(withToastManager(NavBar));","import React from \"react\";\r\nimport { Consumer } from '../../context'\r\n\r\nclass UserInfo extends React.Component {\r\n render() {\r\n\r\n return(\r\n \r\n \r\n {value => { \r\n const isAuthenticated = value.user.authStatus\r\n if(isAuthenticated) return
Hello {value.user.displayName}
\r\n }}\r\n
\r\n
\r\n )\r\n }\r\n}\r\nUserInfo.contextType = Consumer\r\nexport default UserInfo;","import React from 'react';\r\nimport UserInfo from './userInfo';\r\nimport { Container } from 'react-bootstrap'\r\n\r\nclass InfoBar extends React.Component {\r\n render() {\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\nexport default InfoBar;","import React from 'react';\r\nimport NavBar from './navbar';\r\nimport InfoBar from './infobar';\r\nimport { Consumer } from '../../context';\r\n\r\nclass Header extends React.Component {\r\n \r\n render() {\r\n return(\r\n \r\n {value => {\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\nexport default Header;\r\n","import React from 'react';\r\nimport Auth from '../Authentication';\r\n\r\n\r\n// Method to validate that the user is authorised.\r\nconst isAuthorised = (requiredAdmin) => {\r\n // First, are we authenticated?\r\n const isAuthenticated = Auth.isAuthenticated();\r\n\r\n if (isAuthenticated) {\r\n if (!requiredAdmin) {\r\n return true;\r\n }\r\n if (Auth.isAdmin()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nconst AuthorisedArea = (props) => {\r\n const Authorised = isAuthorised(props.requiredAdmin);\r\n\r\n if (Authorised) {\r\n return props.children;\r\n }\r\n\r\n if (!props.showError) {\r\n return null;\r\n }\r\n\r\n return (\r\n
You are not authorised to see this page
\r\n );\r\n};\r\n\r\nexport default AuthorisedArea;\r\n","import React from 'react'\r\n\r\nclass ControlLabel extends React.Component {\r\n\r\n render() {\r\n\r\n const labelStyle = {\r\n fontWeight: '600',\r\n marginLeft: '0px',\r\n marginBottom: '2px',\r\n marginTop: '2px',\r\n color: \"black\",\r\n fontSize: \"12px\",\r\n opacity: \"60%\",\r\n\r\n }\r\n\r\n return(\r\n \r\n {this.props.text}\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default ControlLabel","import React from 'react'\r\n\r\nclass ControlText extends React.Component {\r\n\r\n render() {\r\n\r\n const controlStyle = {\r\n fontWeight: \"600\",\r\n fontSize: \"14px\",\r\n paddingTop: \"2px\",\r\n paddingBottom: \"10px\",\r\n // paddingLeft: \"8px\",\r\n minHeight: \"40px\"\r\n }\r\n\r\n return(\r\n
\r\n {this.props.text}\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default ControlText","import React from 'react'\r\nimport Select from 'react-select'\r\nimport CreatableSelect from 'react-select/creatable'\r\nimport { confirmAlert } from 'react-confirm-alert'; // Import\r\nimport 'react-confirm-alert/src/react-confirm-alert.css'; // Import css\r\nimport { Button } from 'react-bootstrap'\r\nimport ControlLabel from './controlLabel'\r\nimport ControlText from './controlText';\r\n\r\n\r\nclass SelectInput extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n selectedItem: null,\r\n displayOptions: this.buildDisplayOptions(this.props.options),\r\n componentName: this.props.name,\r\n isViewMode: this.props.isViewMode\r\n }\r\n this.onChange = this.onChange.bind(this);\r\n this.setSelectedItem = this.setSelectedItem.bind(this);\r\n\r\n }\r\n\r\n buildDisplayOptions(options) {\r\n const displayOptions = options ? options\r\n .map((item) => { \r\n return { \r\n value: item.id, \r\n label: item.value\r\n }\r\n }) : []\r\n\r\n if(this.props.allowBlank) {\r\n const blank = {\r\n value: null,\r\n label: \"None\"\r\n }\r\n displayOptions.splice(0,0, blank)\r\n }\r\n return displayOptions\r\n }\r\n\r\n componentDidMount() {\r\n\r\n if(this.props.value)\r\n this.setState({\r\n selectedItem: this.setSelectedItem(this.props.value)\r\n })\r\n }\r\n\r\n onChange(selectedItem) {\r\n console.log(\"SelectInput.onChange\", selectedItem)\r\n // Set the selected item, and then call the OnChange event to tell the parent that the selected value has changed.\r\n this.setState(\r\n { selectedItem }, \r\n () => { \r\n this.props.onChange(selectedItem?.value)\r\n });\r\n }\r\n\r\n /*\r\n returns the text/label for the selected item.\r\n */\r\n textBasedOnValue() {\r\n return this.state.selectedItem ? this.state.selectedItem.label : null;\r\n }\r\n\r\n handleCreate(input) {\r\n confirmAlert({\r\n customUI: ({ onClose }) => {\r\n return (\r\n
\r\n

Add new Third Party

\r\n

This will create a new Third Party, \"{input}\". Continue?

\r\n  \r\n {\r\n onClose();\r\n }}\r\n >\r\n Yes, Create it!\r\n \r\n
\r\n );\r\n }\r\n });\r\n }\r\n\r\n // This method handles updates to props that get triggered from the parent.\r\n componentWillReceiveProps(nextProps) {\r\n if(nextProps !== this.state) {\r\n \r\n const newValue = nextProps.value;\r\n const currentValue = this.state.selectedItem != null ? this.state.selectedItem.id : null\r\n\r\n let selectedItem = this.state.selectedItem;\r\n const displayOptions = this.buildDisplayOptions(nextProps.options)\r\n\r\n this.setState({ \r\n displayOptions: displayOptions\r\n }, () => {\r\n // Has the selected item changed?\r\n if(newValue !== currentValue) {\r\n selectedItem = this.setSelectedItem(newValue)\r\n } \r\n \r\n this.setState({\r\n selectedItem: selectedItem, \r\n });\r\n });\r\n }\r\n\r\n }\r\n\r\n setSelectedItem(id) {\r\n const item = this.state.displayOptions.find((item) => item.value === id);\r\n if(!item) {\r\n return {value: null, label: null}\r\n }\r\n return item;\r\n }\r\n\r\n render() {\r\n\r\n const text = this.textBasedOnValue();\r\n\r\n // Transform the options that the control uses to use value and label.\r\n // This is done, as the options comes in as id and value.\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n {!this.props.isViewMode &&\r\n
\r\n {this.props.isCreatable &&\r\n \r\n }\r\n\r\n { !this.props.isCreatable &&\r\n \r\n }\r\n
\r\n }\r\n {this.props.isViewMode &&\r\n \r\n }\r\n {!this.props.isViewMode && \r\n
\r\n {this.props.help}\r\n
\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default SelectInput","import React from 'react'\r\nimport { Button as Btn } from 'react-bootstrap'\r\nimport Loader from 'react-loader-spinner'\r\nimport PropTypes from 'prop-types';\r\n\r\n\r\nclass Button extends React.Component {\r\n\r\n render() {\r\n\r\n let buttonText = null\r\n\r\n if(this.props.isBusy) {\r\n buttonText = \r\n }\r\n else\r\n { \r\n const icon = this.props.icon ? this.props.icon : null;\r\n buttonText = {icon} {this.props.text}\r\n }\r\n\r\n\r\n return (\r\n
\r\n \r\n {buttonText}\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nButton.propTypes = {\r\n isBusy: PropTypes.bool,\r\n onClick: PropTypes.func.isRequired,\r\n disabled: PropTypes.bool,\r\n text: PropTypes.string.isRequired,\r\n variant: PropTypes.string,\r\n size: PropTypes.string\r\n}\r\n\r\nButton.defaultProps = {\r\n disabled: false,\r\n isBusy: false,\r\n variant: \"primary\",\r\n size: \"\"\r\n}\r\nexport default Button","import moment from 'moment';\r\n\r\nconst minDateValue = -8640000000000000;\r\nconst minDate = new Date(minDateValue);\r\n\r\nconst sortByDate = (itemDateAParam, itemDateBParam) => {\r\n const itemDateA = itemDateAParam || minDate;\r\n const itemDateB = itemDateBParam || minDate;\r\n const dateA = moment.isMoment(itemDateA) ? itemDateA : moment(new Date(itemDateA));\r\n const dateB = moment.isMoment(itemDateB) ? itemDateB : moment(new Date(itemDateB));\r\n return dateA.diff(dateB);\r\n};\r\n\r\nexport const sortMethod = (itemA, itemB) => {\r\n \r\n var nameA = itemA.toUpperCase(); // ignore upper and lowercase\r\n var nameB = itemB.toUpperCase(); // ignore upper and lowercase\r\n if (nameA < nameB) {\r\n return -1;\r\n }\r\n if (nameA > nameB) {\r\n return 1;\r\n }\r\n}\r\n\r\nexport const sortByDateDesc = (itemDateA, itemDateB) => sortByDate(itemDateB, itemDateA);\r\nexport const sortByDateAsc = (itemDateA, itemDateB) => sortByDate(itemDateA, itemDateB);\r\n\r\nexport function formatMoney(amount, decimalCount = 2, decimal = \".\", thousands = \",\") {\r\n try {\r\n decimalCount = Math.abs(decimalCount);\r\n decimalCount = isNaN(decimalCount) ? 2 : decimalCount;\r\n \r\n const negativeSign = amount < 0 ? \"-\" : \"\";\r\n \r\n let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(decimalCount)).toString();\r\n let j = (i.length > 3) ? i.length % 3 : 0;\r\n \r\n return negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\\d{3})(?=\\d)/g, \"$1\" + thousands) + (decimalCount ? decimal + Math.abs(amount - i).toFixed(decimalCount).slice(2) : \"\");\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n };\r\n\r\n\r\nexport function getDayNameFromDate(date) {\r\n var d = new Date(date);\r\n var weekday = new Array(7);\r\n weekday[0] = \"Sunday\";\r\n weekday[1] = \"Monday\";\r\n weekday[2] = \"Tuesday\";\r\n weekday[3] = \"Wednesday\";\r\n weekday[4] = \"Thursday\";\r\n weekday[5] = \"Friday\";\r\n weekday[6] = \"Saturday\";\r\n return weekday[d.getDay()];\r\n}\r\n\r\nexport function getMonthNameFromDate(date) {\r\n const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\r\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\r\n ];\r\n\r\n return monthNames[date.getMonth()];\r\n}\r\n\r\nexport function getDayNumberFromDate(date) {\r\n const days = [\"1st\", \"2nd\", \"3rd\", \"4th\", \"5th\", \"6th\", \"7th\", \"8th\", \"9th\", \"10th\", \"11th\", \"12th\", \"13th\", \"14th\", \"15th\",\r\n \"16th\", \"17th\", \"18th\", \"19th\", \"20th\", \"21st\", \"22nd\", \"23rd\", \"24th\", \"25th\", \"26th\", \"27th\", \"28th\", \"29th\", \"30th\", \"31st\"]\r\n return days[date.getDate() - 1];\r\n\r\n}\r\n\r\nexport function isNumberic(value, allowDecimal) {\r\n const numeric = Number(value)\r\n if(isNaN(numeric) === false) {\r\n if(allowDecimal===false) {\r\n if(value % 1 !== 0) {\r\n return false\r\n }\r\n return true\r\n }\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nexport function uuidv4() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & (0x3 | 0x8));\r\n return v.toString(16);\r\n });\r\n}\r\n\r\n// Rounds a number to the nearest 0, 00, 000 etc. Eg, 16213 will be 17000. -23, would be -100.\r\nexport function roundUpToNearestPowerOfTen(value) {\r\n const factor = 100;\r\n if (value >= 0) {\r\n return Math.ceil(value / factor) * factor;\r\n } else {\r\n return Math.floor(value / factor) * factor;\r\n }\r\n}\r\n\r\n","import React from 'react'\r\nimport { Form } from 'react-bootstrap'\r\nimport { DataTypes } from '../../Constants'\r\nimport { isNumberic } from '../../Helpers/Formatter'\r\nimport PropTypes from 'prop-types';\r\nimport ControlLabel from './controlLabel';\r\nimport ControlText from './controlText'\r\n\r\nclass TextInput extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n value: this.props.value ? this.props.value : '',\r\n dataType: this.props.dataType,\r\n isViewMode: this.props.isViewMode\r\n }\r\n this.onChange = this.onChange.bind(this);\r\n } \r\n\r\n onChange(e) {\r\n let value = e.target.value\r\n if(this.state.dataType === DataTypes.NUMBER) {\r\n if(isNumberic(value, false)) {\r\n value = Number(value);\r\n }\r\n }\r\n this.setState({ value })\r\n this.props.onChange(value);\r\n }\r\n\r\n handleKeyPress(e) {\r\n const code = e.charCode\r\n if(code === 13)\r\n {\r\n this.props.enterPressed()\r\n }\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n {!this.props.isViewMode &&\r\n this.handleKeyPress(e)}\r\n />\r\n }\r\n {this.props.isViewMode && \r\n \r\n \r\n }\r\n
\r\n {!this.props.isViewMode &&\r\n
\r\n {this.props.help}\r\n
\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nTextInput.propTypes = {\r\n placeholder: PropTypes.string,\r\n value: PropTypes.string,\r\n dataType: PropTypes.oneOf(['TEXT', 'NUMBER']).isRequired,\r\n isViewMode: PropTypes.bool,\r\n onChange: PropTypes.func.isRequired,\r\n enterPressed: PropTypes.func,\r\n label: PropTypes.string.isRequired,\r\n type: PropTypes.oneOf(['text', 'password'])\r\n}\r\n\r\n\r\nTextInput.defaultProps = {\r\n isViewMode: false,\r\n type: 'text'\r\n}\r\n\r\nexport default TextInput","import React from 'react'\r\nimport { Form } from 'react-bootstrap'\r\nimport { uuidv4 } from '../../Helpers/Formatter'\r\nimport ControlLabel from './controlLabel'\r\nimport ControlText from './controlText'\r\n\r\nclass CheckboxInput extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n value: this.props.value,\r\n id: this.props.id ? this.props.value : uuidv4()\r\n }\r\n // Set the value when the control was created.\r\n this.onChange = this.onChange.bind(this);\r\n } \r\n\r\n onChange(e) {\r\n this.setState({ value: !this.state.value})\r\n this.props.onChange(!this.state.value);\r\n }\r\n\r\n render() {\r\n const checkStyle = {\r\n paddingTop: \"6px\"\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n {!this.props.isViewMode &&\r\n this.onChange()}\r\n />\r\n }\r\n {this.props.isViewMode && \r\n \r\n }\r\n
\r\n {!this.props.isViewMode &&\r\n
\r\n {this.props.help}\r\n
\r\n }\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default CheckboxInput","import React from 'react'\r\nimport Loader from 'react-loader-spinner'\r\n\r\nclass LoaderDisplay extends React.Component {\r\n\r\n render() {\r\n\r\n const divStyle = {\r\n textAlign: \"center\"\r\n }\r\n \r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default LoaderDisplay","import React from 'react';\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport SelectInput from './controls/selectInput'\r\nimport Button from './controls/button'\r\nimport TextInput from './controls/textInput'\r\nimport CheckboxInput from './controls/checkboxInput'\r\nimport { Consumer } from '../context'\r\nimport { withRouter } from 'react-router-dom';\r\nimport LoaderDisplay from '../components/controls/loaderDisplay'\r\nimport ReactGA from 'react-ga';\r\nimport { ButtonIcons } from './../Constants'\r\nimport { formatMoney } from '../Helpers/Formatter';\r\n\r\nclass Accounts extends React.Component {\r\n static contextType = Consumer\r\n\r\n constructor(props, context) {\r\n super(props)\r\n this.context = context\r\n this.state = {\r\n isLoading: true,\r\n selectedTypeId: 1,\r\n searchString: null,\r\n filteredAccounts: [],\r\n includeInactive: false\r\n }\r\n\r\n this.onChange = this.onChange.bind(this);\r\n this.onSelect = this.onSelect.bind(this);\r\n this.search = this.search.bind(this);\r\n this.updateList = this.updateList.bind(this);\r\n }\r\n\r\n\r\n onChange(value) {\r\n this.props.history.push(`/accounts/${value}`)\r\n\r\n this.setState({\r\n selectedTypeId: value,\r\n }, () => this.updateList())\r\n }\r\n\r\n updateList() {\r\n this.context.getAllAccounts(false)\r\n .then((result) => {\r\n const filteredAccounts = result\r\n .filter(item => item.accountType === this.state.selectedTypeId || this.state.selectedTypeId === 0)\r\n .filter(item => item.name.toLowerCase().includes(this.state.searchString && this.state.searchString.toLowerCase()) || !this.state.searchString )\r\n .sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n\r\n this.setState({\r\n filteredAccounts,\r\n isLoading: false\r\n })\r\n })\r\n }\r\n\r\n\r\n onSelect(transactionId) {\r\n this.props.history.push(`/account/${transactionId}`);\r\n }\r\n\r\n search(text) {\r\n this.setState({\r\n searchString: text\r\n }, () => this.updateList())\r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n const selectedType = this.props.match.params.id\r\n if(selectedType) {\r\n this.onChange(parseInt(selectedType)) // Can fail if invalid item in query string?\r\n }\r\n this.updateList()\r\n }\r\n\r\n\r\n render() {\r\n\r\n // Grab the selected AccountId from the state. If the Link property passed the data, use it.\r\n\r\n console.log(this.state)\r\n\r\n const options = [\r\n {id: 0, value: 'All'},\r\n {id: 1, value: 'Bank Accounts'},\r\n {id: 2, value: 'Third Parties'},\r\n ]\r\n\r\n const itemStyle = {\r\n cursor: \"pointer\"\r\n }\r\n\r\n \r\n const buttonBarStyle = {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\"\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n this.onChange(value)}\r\n />\r\n \r\n \r\n this.search(value)}\r\n placeholder=\"Search Text\"\r\n label=\"Search\"\r\n />\r\n\r\n \r\n \r\n this.setState({ includeInactive: value})}\r\n label=\"Include Inactive\"\r\n />\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n {this.state.isLoading && \r\n \r\n } \r\n {!this.state.isLoading && \r\n
\r\n \r\n \r\n \r\n Account Name\r\n Balance\r\n Active\r\n Favourite\r\n \r\n {this.state.filteredAccounts.length === 0 &&\r\n
No accounts available
\r\n }\r\n {this.state.filteredAccounts\r\n .filter((item) => this.state.includeInactive || item.isActive === true)\r\n .map((item, index) => \r\n this.onSelect(item.id)} \r\n className=\"tableViewRowStyle\" \r\n style={itemStyle} \r\n >\r\n {item.name}\r\n $ {formatMoney(item.balance)}\r\n {item.isActive && {ButtonIcons.YES}}\r\n {item.isFavourite && {ButtonIcons.YES} }\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(Accounts);","import React from 'react'\r\nimport DatePicker from 'react-datepicker'\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport ControlLabel from './controlLabel';\r\nimport ControlText from './controlText';\r\n\r\nclass DateInput extends React.Component {\r\n\r\n\r\n handleDateChange(newDate) {\r\n if(newDate !== null) {\r\n const date = new Date(newDate)\r\n const userTimezoneOffset = date.getTimezoneOffset() * 60000;\r\n const reply = new Date(date.getTime() - userTimezoneOffset);\r\n this.props.onChange(reply)\r\n }\r\n }\r\n\r\n // Utility function to validate date strings\r\n isValidDate(dateString) {\r\n const date = new Date(dateString);\r\n return !isNaN(date.getTime());\r\n }\r\n\r\n\r\n render() {\r\n\r\n var displayDate = \"\" // Show blank if we have a null input.\r\n const validDate = this.isValidDate(this.props.value );\r\n\r\n if(validDate) {\r\n const d = new Date(this.props.value)\r\n const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d)\r\n const mo = new Intl.DateTimeFormat('en', { month: 'long' }).format(d)\r\n const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d)\r\n \r\n displayDate = this.props.value ? `${da} ${mo} ${ye}` : \"\" // Show blank if we have a null input.\r\n } \r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n {!this.props.monthOnly &&\r\n \r\n {!this.props.isViewMode && \r\n this.handleDateChange(e)}\r\n readOnly = {this.props.readOnly}\r\n />\r\n }\r\n {this.props.isViewMode &&\r\n \r\n }\r\n \r\n }\r\n {this.props.monthOnly &&\r\n this.handleDateChange(e)}\r\n readOnly = {this.props.readOnly}\r\n showMonthYearPicker\r\n />\r\n }\r\n
\r\n {!this.props.isViewMode && \r\n
\r\n {this.props.help}\r\n
\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default DateInput","import React from 'react'\r\nimport { isNumberic, formatMoney } from '../../Helpers/Formatter'\r\nimport ControlLabel from './controlLabel';\r\nimport ControlText from './controlText'\r\n\r\nclass CurrencyInput extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n value: this.props.value && Number.parseFloat(this.props.value).toFixed(2)\r\n }\r\n this.onChange = this.onChange.bind(this);\r\n }\r\n\r\n onChange(e) {\r\n \r\n let value = e.target.value\r\n if(!value)\r\n {\r\n this.setState({\r\n value: null\r\n })\r\n this.props.onChange(null);\r\n return\r\n }\r\n\r\n if(isNumberic(value, true)) {\r\n this.setState({ value })\r\n this.props.onChange(Number(value));\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if(nextProps !== this.state) {\r\n\r\n this.setState({\r\n value: nextProps.value,\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n\r\n const inputStyle = {\r\n textAlign : \"right\"\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n {!this.props.isViewMode &&\r\n \r\n
\r\n
\r\n $\r\n
\r\n \r\n
\r\n
\r\n {this.props.help}\r\n
\r\n
\r\n }\r\n {this.props.isViewMode && \r\n \r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default CurrencyInput","import React from 'react'\r\nimport SelectInput from '../controls/selectInput'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport { Consumer } from '../../context'\r\n\r\nclass CategoryEditor extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n rawCategoryData: [],\r\n categoryDisplayOptions: [],\r\n subCategoryDisplayOptions: [],\r\n selectedCategoryId: null,\r\n selectedSubCategoryId: null,\r\n }\r\n\r\n this.populateListsBasedOnSelectedSubCategoryId = this.populateListsBasedOnSelectedSubCategoryId.bind(this)\r\n this.getSortedCategories = this.getSortedCategories.bind(this)\r\n }\r\n\r\n // When component mounts, get the categories (raw) and setup the Select list data.\r\n componentDidMount() {\r\n // Get the raw category data from the store. This is the full list of categories and their subcategories.\r\n this.context.getCategories(false)\r\n .then((categoriesReply) => {\r\n // Store the raw categories, and create the initial list of Category display options.\r\n // Then also set the selected Category, if one is selected.\r\n this.setState({\r\n rawCategoryData: categoriesReply,\r\n categoryDisplayOptions: this.getSortedCategories(categoriesReply)\r\n }, () => { \r\n // And then if there's a selected sub category id, populate the drop downs accordingly.\r\n this.populateListsBasedOnSelectedSubCategoryId(this.props.value)\r\n })\r\n })\r\n }\r\n\r\n\r\n getSortedCategories(data) {\r\n return data\r\n .filter((item) => (item.isDeleted === false || item.id === this.state.selectedCategoryId )) // Only deleted items, and the selected one \r\n .sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n .map(item => (\r\n { id: item.id, value: item.name }\r\n ))\r\n }\r\n\r\n handleControlChange(fieldName, value) {\r\n // If the category changed, we need to repopulate the subcategories based on the selected category, \r\n // and then reset the selected sub category to null.\r\n if(fieldName === \"selectedCategoryId\") {\r\n const selectedCategory = this.state.rawCategoryData\r\n .find((item) => item.id === value)\r\n\r\n const subCategories = selectedCategory\r\n .subcategories\r\n .filter((item) => (item.isDeleted === false || item.id === this.state.selectedSubCategoryId))\r\n .map(item => ({ id : item.id, value: item.name }))\r\n\r\n this.setState(\r\n { \r\n subCategoryDisplayOptions: subCategories, \r\n selectedSubCategoryId: null,\r\n selectedCategoryId: value \r\n }, () => \r\n { \r\n this.props.onChange(null)\r\n }\r\n )\r\n }\r\n else\r\n {\r\n this.setState({\r\n selectedSubCategoryId: value\r\n }, () => { \r\n this.props.onChange(value)\r\n })\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.value === null)\r\n return;\r\n\r\n if(this.state.selectedSubCategoryId !== nextProps.value)\r\n {\r\n this.populateListsBasedOnSelectedSubCategoryId(nextProps.value)\r\n }\r\n }\r\n\r\n populateListsBasedOnSelectedSubCategoryId(subCategoryId) {\r\n // we need to work out the category, based on the selected sub category.\r\n\r\n // To do this, we need to find the selected sub category, but iterating through all the categories.\r\n this.state.rawCategoryData.forEach(element => {\r\n // If this category has subcategories....\r\n if(element.subcategories) {\r\n // See if we can find the subcategory in the list...\r\n const sub = element.subcategories.find((item) => item.id === subCategoryId)\r\n \r\n // If we found it....\r\n if(sub) {\r\n // Setup some east to use variables...\r\n const selectedCategoryId = sub.categoryId\r\n const subCategories = element.subcategories\r\n const selectedSubCategoryId = sub.id\r\n\r\n // Build the SubCategory list...\r\n const subCategoryList = subCategories.map((item) => ({id: item.id, value: item.name}));\r\n\r\n // And set the state.\r\n this.setState(\r\n { // First, set the display list...\r\n subCategoryDisplayOptions: subCategoryList,\r\n }, () => { // then set the selected options...\r\n this.setState({\r\n selectedSubCategoryId: selectedSubCategoryId,\r\n selectedCategoryId: selectedCategoryId\r\n }, () => { // then handle the changes.\r\n this.props.onChange(selectedSubCategoryId)\r\n })\r\n }\r\n )\r\n return;\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n render() {\r\n\r\n const displayCategoryLabel = this.props.prefix ? `${this.props.prefix} Category` : 'Category'\r\n const displaySubCategoryLabel = this.props.prefix ? `${this.props.prefix} Sub Category` : 'Sub Category'\r\n\r\n return (\r\n \r\n \r\n \r\n this.handleControlChange('selectedCategoryId', value)} \r\n isViewMode = {this.props.isViewMode}\r\n />\r\n \r\n \r\n this.handleControlChange(\"selectedSubCategoryId\", value)}\r\n isViewMode = {this.props.isViewMode}\r\n /> \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n}\r\nCategoryEditor.contextType = Consumer;\r\nexport default CategoryEditor","import React from 'react'\r\nimport SelectInput from '../controls/selectInput'\r\nimport { Consumer } from '../../context'\r\n\r\nclass BudgetEditor extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n selectedBudgetId: this.props.value,\r\n budgetDisplayOptions: [],\r\n }\r\n }\r\n\r\n onChange(value) {\r\n this.setState( {\r\n selectedBudgetId: value\r\n })\r\n this.props.onChange(value)\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if(this.state.selectedBudgetId !== nextProps.value) {\r\n this.setState({\r\n selectedBudgetId: nextProps.value\r\n })\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.context.getBudgets(false)\r\n .then((budgets) => {\r\n this.setState({\r\n budgetDisplayOptions: budgets.sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n .map(item => (\r\n { id: item.id, value: item.name }\r\n ))\r\n })\r\n })\r\n }\r\n\r\n\r\n render() {\r\n const displayBudgetLabel = this.props.prefix ? `${this.props.prefix} Budget` : 'Budget'\r\n\r\n return (\r\n \r\n this.onChange(value)}\r\n options={this.state.budgetDisplayOptions}\r\n allowBlank\r\n isViewMode={this.props.isViewMode}\r\n />\r\n \r\n )\r\n }\r\n\r\n}\r\nBudgetEditor.contextType = Consumer\r\nexport default BudgetEditor","import React from 'react'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport { Col, Row } from 'react-bootstrap'\r\nimport SelectInput from './controls/selectInput'\r\nimport DateInput from './controls/dateInput'\r\nimport TextInput from './controls/textInput'\r\nimport Button from './controls/button'\r\nimport CheckboxInput from './controls/checkboxInput'\r\nimport CurrencyInput from './controls/currencyInput'\r\nimport CategoryEditor from './subcomponents/categoryEditor'\r\nimport BudgetEditor from './subcomponents/budgetEditor'\r\nimport { Consumer } from '../context'\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport LoaderDisplay from './controls/loaderDisplay';\r\nimport { AccountTypes, ButtonIcons } from '../Constants'\r\nimport ReactGA from 'react-ga';\r\n\r\n\r\nclass AccountEditor extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n\r\n let account = {\r\n id: null,\r\n name: null,\r\n accountTypeId: null,\r\n date: Date.now(),\r\n openingBalance: null,\r\n defaultSubCategoryId: null,\r\n defaultBudgetId: null,\r\n isActive: true,\r\n isFavourite: false,\r\n canQuickTransaction: false,\r\n isLoading: false\r\n }\r\n\r\n this.state = {\r\n account,\r\n isLoading: false,\r\n selectedId: null\r\n }\r\n this.saveAccount = this.saveAccount.bind(this);\r\n \r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n const selectedId = this.props.match.params.id\r\n if(selectedId) {\r\n this.setState({\r\n isLoading: true\r\n })\r\n\r\n this.context.getAccount(selectedId)\r\n .then((result) => {\r\n const account = {\r\n name: result.name,\r\n accountTypeId: result.accountType,\r\n date: result.date,\r\n openingDate: result.openingDate,\r\n openingBalance: result.openingBalance,\r\n defaultSubCategoryId: result.defaultSubcategoryId,\r\n defaultBudgetId: result.defaultBudgetId,\r\n isActive: result.isActive,\r\n id: result.id,\r\n isFavourite: result.isFavourite,\r\n canQuickTransaction: result.canQuickTransaction\r\n }\r\n this.setState(\r\n { \r\n account, \r\n isLoading: false\r\n })\r\n })\r\n }\r\n }\r\n\r\n onChange(controlName, value) {\r\n var account = this.state.account\r\n account[controlName] = value\r\n\r\n this.setState({\r\n account\r\n })\r\n }\r\n\r\n saveAccount() {\r\n const { toastManager } = this.props;\r\n this.context.saveAccount(this.state.account)\r\n .then((result) => {\r\n this.props.history.goBack();\r\n toastManager.add(`Account, ${this.state.account.name}, Saved Successfully.`, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n })\r\n }\r\n\r\n handleCancel() {\r\n const { toastManager } = this.props;\r\n this.props.history.goBack();\r\n toastManager.add(`No changes were made.`, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n\r\n\r\n render() {\r\n\r\n const options = [\r\n {id: 1, value: 'Bank Account'},\r\n {id: 2, value: 'Third Party'},\r\n ]\r\n\r\n const buttonSpacingStyle = {\r\n padding: \"4px\",\r\n float: \"left\"\r\n }\r\n \r\n const buttonBarStyle = {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\"\r\n }\r\n\r\n if(this.state.isLoading) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n this.onChange('name', value)}\r\n /> \r\n \r\n \r\n this.onChange('accountTypeId', value)}\r\n value={this.state.account.accountTypeId}\r\n />\r\n \r\n \r\n \r\n \r\n {this.state.account.accountTypeId === AccountTypes.BANKACCOUNT &&\r\n \r\n \r\n this.onChange('openingDate', value)}\r\n value={this.state.account.openingDate}\r\n />\r\n \r\n \r\n this.onChange('openingBalance', value)}\r\n value={this.state.account.openingBalance}\r\n />\r\n \r\n \r\n }\r\n { this.state.account.accountTypeId &&\r\n \r\n this.onChange('isActive', value)}\r\n help=\"Account is active\"\r\n />\r\n \r\n }\r\n {this.state.account.accountTypeId === AccountTypes.BANKACCOUNT &&\r\n \r\n this.onChange('isFavourite', value)}\r\n help=\"Account is favourite\"\r\n />\r\n \r\n }\r\n {this.state.account.accountTypeId === AccountTypes.THIRDPARTY &&\r\n \r\n this.onChange('canQuickTransaction', value)}\r\n help=\"Enable Quick Transactions\"\r\n />\r\n \r\n }\r\n \r\n {this.state.account.accountTypeId === AccountTypes.THIRDPARTY &&\r\n \r\n \r\n this.onChange('defaultSubCategoryId', value)}\r\n value={this.state.account.defaultSubCategoryId}\r\n />\r\n \r\n \r\n this.onChange('defaultBudgetId', value)}\r\n value={this.state.account.defaultBudgetId}\r\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\nAccountEditor.contextType = Consumer\r\nexport default withToastManager(AccountEditor)","import React from 'react';\r\n\r\nclass Reports extends React.Component {\r\n render() {\r\n return (
\r\n

Reports

\r\n
)\r\n }\r\n}\r\n\r\nexport default Reports;\r\n","import React from 'react'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport TextInput from './controls/textInput'\r\nimport SelectInput from './controls/selectInput'\r\nimport CurrencyInput from './controls/currencyInput'\r\nimport DateInput from './controls/dateInput'\r\nimport Button from './controls/button'\r\nimport LoaderDisplay from './controls/loaderDisplay'\r\nimport { Consumer } from '../context'\r\nimport { AccountTypes, ButtonIcons } from '../Constants'\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport { withRouter } from 'react-router-dom';\r\nimport ReactGA from 'react-ga';\r\nimport moment from 'moment';\r\nimport { formatMoney, sortByDateDesc } from '../Helpers/Formatter'\r\nimport { confirmAlert } from 'react-confirm-alert'; \r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport 'react-confirm-alert/src/react-confirm-alert.css'; // Import css\r\n\r\n\r\nclass Budget extends React.Component {\r\n \r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n isLoading: true,\r\n isViewMode: true,\r\n budget :{\r\n id: this.props.match.params.id,\r\n name: null,\r\n allowanceAmount: null,\r\n startDate: null,\r\n endDate: null,\r\n budgetTypeId: null,\r\n primaryAccountId: null,\r\n },\r\n accountList: [],\r\n periods: [],\r\n transactions: [],\r\n transactionsLoading: true\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (this.props.match.params.id !== prevProps.match.params.id) {\r\n const budget = this.state.budget\r\n budget.id = this.props.match.params.id \r\n this.setState({ \r\n budget \r\n }, () => this.getBudget())\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n this.context.getAllAccounts(false)\r\n .then((data) => {\r\n const Accounts = data.filter((item) => item.accountType === AccountTypes.BANKACCOUNT)\r\n .sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n .map(item => ({ id: item.id, value: item.name }))\r\n\r\n this.setState({\r\n accountList: Accounts\r\n })\r\n })\r\n\r\n if(this.state.budget.id) {\r\n this.getBudget()\r\n } else {\r\n this.setState({\r\n isLoading: false\r\n })\r\n }\r\n\r\n }\r\n\r\n getBudget() {\r\n this.setState({ isLoading: true })\r\n \r\n this.context.getBudget(this.state.budget.id)\r\n .then((result) => {\r\n if(result.ok === false) {\r\n const { toastManager } = this.props;\r\n this.props.history.goBack();\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n return; \r\n }\r\n\r\n const payload = result.data\r\n\r\n const budget = {\r\n name: payload.name,\r\n allowanceAmount: payload.allowanceAmount,\r\n startDate: payload.startDate,\r\n endDate: payload.endDate,\r\n budgetTypeId: payload.budgetTypeId,\r\n primaryAccountId: payload.primaryAccountId,\r\n id: payload.id\r\n }\r\n\r\n this.setState({\r\n isLoading: false,\r\n budget,\r\n originalBudget: cloneDeep(budget)\r\n })\r\n\r\n const schedules = payload.schedule.map((schedule) => {\r\n return {\r\n id: schedule.budgetNumber,\r\n value: `${moment(new Date(schedule.fromDate)).format(\"Do MMMM YYYY\")} to ${moment(new Date(schedule.toDate)).format(\"Do MMMM YYYY\")}`\r\n }\r\n })\r\n\r\n this.setState({\r\n periods: schedules,\r\n selectedPeriod: payload.currentBudgetNumber\r\n }, () => this.getTransactionsForBudget())\r\n\r\n\r\n })\r\n }\r\n\r\n getTransactionsForBudget() {\r\n this.context.getBudgetTransactions(this.state.budget.id, this.state.selectedPeriod)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.setState({\r\n transactions: result.data,\r\n transactionsLoading: false\r\n })\r\n }\r\n else\r\n {\r\n const { toastManager } = this.props;\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n\r\n \r\n })\r\n }\r\n\r\n handleChange(property, value) {\r\n const budget = this.state.budget\r\n budget[property] = value\r\n\r\n this.setState({budget})\r\n }\r\n\r\n handlePeriodChange(budgetNumber) {\r\n this.setState({\r\n transactionsLoading: true,\r\n selectedPeriod: budgetNumber\r\n }, () => this.getTransactionsForBudget())\r\n }\r\n\r\n cancelClick() {\r\n this.setState({\r\n budget: cloneDeep(this.state.originalBudget),\r\n isViewMode: true\r\n })\r\n }\r\n\r\n onTransactionSelect(id) {\r\n this.props.history.push(`/transaction/${id}`);\r\n }\r\n\r\n deleteClick() {\r\n confirmAlert({\r\n customUI: ({ onClose }) => {\r\n return (\r\n
\r\n

Delete Budget

\r\n

Confirm you want to delete this budget

\r\n
\r\n );\r\n }\r\n });\r\n }\r\n\r\n\r\n delete() {\r\n const { toastManager } = this.props;\r\n this.context.deleteBudget(this.state.budget.id)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.props.history.goBack();\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n else \r\n {\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n })\r\n }\r\n\r\n saveClick() {\r\n const { toastManager } = this.props;\r\n\r\n this.setState({ isBusy: true })\r\n\r\n const payload = {\r\n id: this.state.budget.id,\r\n name: this.state.budget.name,\r\n allowanceAmount: this.state.budget.allowanceAmount,\r\n startDate: this.state.budget.startDate,\r\n endDate: this.state.budget.endDate,\r\n budgetTypeId: this.state.budget.budgetTypeId,\r\n primaryAccountId: this.state.budget.primaryAccountId,\r\n startDayNumber: 1\r\n }\r\n\r\n this.context.saveBudget(payload)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.setState({\r\n isViewMode: true\r\n })\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n } else {\r\n this.setState({\r\n isBusy: false\r\n })\r\n\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n })\r\n }\r\n\r\n\r\n render() {\r\n\r\n const buttonSpacingStyle = {\r\n padding: \"4px\",\r\n float: \"left\"\r\n }\r\n \r\n const buttonBarStyle = {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\"\r\n }\r\n\r\n const BudgetTypes = [\r\n {id: 1, value: 'Weekly'},\r\n {id: 2, value: 'Monthly'}\r\n ]\r\n\r\n const itemStyle = {\r\n cursor: \"pointer\"\r\n }\r\n if(this.state.isLoading) {\r\n return \r\n }\r\n\r\n const transactionTotal = () => {\r\n let value = 0;\r\n this.state.transactions.forEach(item => {\r\n value = value + item.amount\r\n })\r\n return value\r\n }\r\n\r\n const totalStyle = {\r\n borderTop: \"1px solid\",\r\n borderBottom: \"double\",\r\n fontSize: \"24px\",\r\n fontWeight: \"600\"\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n
Budget
\r\n
\r\n \r\n
\r\n \r\n \r\n this.handleChange('name', value)}\r\n help=\"Description of this Budget\"\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n this.handleChange('budgetTypeId', value)}\r\n help=\"Length a budget lasts\"\r\n options={BudgetTypes}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n \r\n \r\n this.handleChange('startDate', value)}\r\n help=\"Start date of this budget\"\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n this.handleChange('endDate', value)}\r\n help=\"End date of this budget\"\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n \r\n \r\n this.handleChange('primaryAccountId', value)}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n this.handleChange('allowanceAmount', value)}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n {this.state.isViewMode && \r\n
\r\n\r\n \r\n
\r\n
\r\n {this.state.budget.id &&\r\n
\r\n \r\n \r\n
Associated Transactions
\r\n
\r\n \r\n
\r\n \r\n \r\n this.handlePeriodChange(value)}\r\n help=\"Period for Transactions\"\r\n options={this.state.periods}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n Date\r\n To\r\n Category\r\n Amount\r\n \r\n {this.state.transactionsLoading && }\r\n {!this.state.transactionsLoading && \r\n \r\n this.state.transactions\r\n .sort((a,b) => sortByDateDesc(a.transactionDate,b.transactionDate))\r\n .map((item, index) => {\r\n return (\r\n this.onTransactionSelect(item.id)} className=\"tableViewRowStyle\" style={itemStyle} >\r\n {moment(new Date(item.transactionDate)).format(\"Do MMMM\")}\r\n {item.creditAccountName}\r\n {item.subCategoryName}\r\n {formatMoney(item.amount)}\r\n \r\n )\r\n })\r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n
{formatMoney(transactionTotal())}
\r\n \r\n
\r\n
\r\n }\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nBudget.contextType = Consumer\r\nexport default withToastManager(withRouter(Budget))","import React from 'react'\r\nimport { Col } from 'react-bootstrap'\r\nimport { AccountTypes } from '../Constants'\r\nimport Moment from 'react-moment'\r\nimport { TransactionTypes } from '../Constants'\r\n\r\nclass TransactionsLine extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n thisAccountId: this.props.thisAccountId,\r\n ...this.props.transaction,\r\n payee: this.calculatePayee(this.props.thisAccountId, this.props.transaction),\r\n transactionType: this.calculateTransactionType(this.props.thisAccountId, this.props.transaction),\r\n isDebit: this.calculateIfIsDebit(this.props.thisAccountId, this.props.transaction)\r\n }\r\n }\r\n\r\n \r\n componentWillReceiveProps(newProps) {\r\n\r\n this.setState( {\r\n ...newProps.transaction,\r\n payee: this.calculatePayee(newProps.thisAccountId, newProps.transaction),\r\n transactionType: this.calculateTransactionType(newProps.thisAccountId, newProps.transaction),\r\n isDebit: this.calculateIfIsDebit(newProps.thisAccountId, newProps.transaction)\r\n })\r\n\r\n }\r\n\r\n calculatePayee(thisAccountId, transaction) {\r\n return thisAccountId === transaction.debitAccountId ? transaction.creditAccountName : transaction.debitAccountName\r\n }\r\n\r\n calculateTransactionType(thisAccountId, transaction) {\r\n const direction = transaction.debitAccountId === thisAccountId ? 'to' : 'from'\r\n return `${transaction.transactionType} ${direction}`\r\n }\r\n\r\n calculateIfIsDebit(thisAccountId, transaction) {\r\n\r\n\r\n if(!thisAccountId) {\r\n return transaction.debitAccountTypeId == AccountTypes.BANKACCOUNT && transaction.creditAccountTypeId == AccountTypes.THIRDPARTY\r\n }\r\n\r\n if( thisAccountId === transaction.debitAccountId ) {\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n \r\n\r\n render() {\r\n\r\n const transactionTypeMultiplier = this.state.transactionTypeId === TransactionTypes.PAYMENT ? -1 : this.state.transactionTypeId === TransactionTypes.DEPOSIT ? 1 : 0;\r\n\r\n const deposit = \r\n const payment = \r\n const transfer = \r\n \r\n\r\n const amountColumn = \r\n \r\n {Number.parseFloat(this.state.amount).toFixed(2)}\r\n \r\n \r\n\r\n const descriptionColumn = \r\n \r\n {!this.state.isSplit && \r\n \r\n {this.state.categoryName} - {this.state.subCategoryName}\r\n \r\n }\r\n {this.state.isSplit &&\r\n \r\n Multiple Categories\r\n \r\n } \r\n
\r\n {this.state.description}\r\n \r\n\r\n\r\n return (\r\n \r\n {!this.state.thisAccountId &&\r\n \r\n {this.state.transactionDate}\r\n \r\n }\r\n \r\n \r\n {this.state.transactionType} {this.state.isDebit && payment}{this.state.isDebit === false && deposit}\r\n \r\n
\r\n \r\n {this.state.payee}\r\n \r\n {!this.state.thisAccountId &&\r\n \r\n  to {this.state.creditAccountName}\r\n \r\n \r\n }\r\n \r\n {descriptionColumn}\r\n {amountColumn}\r\n {this.state.thisAccountId &&\r\n \r\n \r\n {Number.parseFloat(this.state.runningBalance).toFixed(2)}\r\n \r\n \r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default TransactionsLine","import React from 'react'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport { withRouter } from 'react-router-dom';\r\nimport Moment from 'react-moment'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport { Consumer } from '../context'\r\nimport { AccountTypes } from '../Constants'\r\nimport TransactionsRow from './transactionsRow'\r\nimport SelectInput from '../components/controls/selectInput'\r\nimport TextInput from '../components/controls/textInput'\r\nimport LoaderDisplay from './controls/loaderDisplay'\r\nimport ReactGA from 'react-ga';\r\nimport ScrollableAnchor from 'react-scrollable-anchor';\r\nimport { configureAnchors, goToAnchor } from 'react-scrollable-anchor'\r\n\r\n\r\nclass Account extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n isLoading: true,\r\n searchText: null,\r\n transactions: [],\r\n accounts: [],\r\n selectedAccountId: this.props.match.params.id,\r\n selectedDuration: 30\r\n }\r\n\r\n this.onChange = this.onChange.bind(this)\r\n this.search = this.search.bind(this)\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n\r\n if (this.props.match.params.id !== prevProps.match.params.id) {\r\n this.setState({ selectedAccountId: this.props.match.params.id }, () => this.getTransactions())\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n configureAnchors({offset: -60, scrollDuration: 50})\r\n goToAnchor('mainSection', false)\r\n this.getTransactions()\r\n\r\n this.context.getAllAccounts(false)\r\n .then((result) => {\r\n const filteredAccounts = result\r\n .filter(item => item.accountType === AccountTypes.BANKACCOUNT)\r\n .sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 \r\n : 0;\r\n })\r\n .map(item => ({ id: item.id, value: item.name }))\r\n\r\n this.setState({\r\n accounts: filteredAccounts,\r\n isLoading: false\r\n })\r\n })\r\n\r\n }\r\n\r\n getTransactions() {\r\n\r\n this.setState( {\r\n isLoading: true\r\n })\r\n\r\n const request = {\r\n accountId: this.state.selectedAccountId,\r\n historicDaysFromNow: this.state.selectedDuration\r\n }\r\n\r\n this.context.getTransactions(request)\r\n .then((result) => {\r\n const t = result.map((item) => ({\r\n ...item\r\n }))\r\n this.setState({\r\n transactions: t,\r\n isLoading: false\r\n })\r\n })\r\n }\r\n\r\n search(text) {\r\n this.setState({ searchText: text })\r\n }\r\n\r\n onDurationChange(value) {\r\n this.setState( {\r\n selectedDuration: value\r\n }, () => this.getTransactions())\r\n }\r\n\r\n onChange(value) {\r\n this.props.history.push(`/transactions/${value}`);\r\n this.setState({\r\n selectedAccountId: value,\r\n isLoading: true,\r\n }, () => this.getTransactions())\r\n\r\n \r\n }\r\n \r\n onSelect(transactionId) {\r\n this.props.history.push(`/transaction/${transactionId}`);\r\n }\r\n\r\n \r\n calculatePayee(thisAccountId, transaction) {\r\n return thisAccountId === transaction.debitAccountId ? transaction.creditAccountName : transaction.debitAccountName\r\n }\r\n\r\n render() {\r\n const durations = [\r\n {id: 30, value: \"Past 30 days\"},\r\n {id: 60, value: \"Past 60 days\"},\r\n {id: 90, value: \"Past 90 days\"},\r\n {id: 180, value: \"Last 180 days\"},\r\n ]\r\n\r\n \r\n let lastDate = \"\";\r\n\r\n const itemStyle = {\r\n cursor: \"pointer\"\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 this.onChange(value)}\r\n /> \r\n \r\n \r\n this.onDurationChange(value)}\r\n /> \r\n \r\n \r\n this.search(value)} \r\n />\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n Transaction\r\n Description\r\n Amount\r\n Balance\r\n \r\n\r\n {this.state.isLoading && }\r\n\r\n {this.state.isLoading === false && \r\n this.state.transactions\r\n .filter((filtered) => \r\n (!this.state.searchText || \r\n (filtered.amount.toString().includes(this.state.searchText) || \r\n this.calculatePayee(this.state.selectedAccountId, filtered).includes(this.state.searchText))))\r\n .map((item, index) => {\r\n const formattedDate = {item.transactionDate};\r\n const showHeader = (lastDate !== item.transactionDate);\r\n lastDate = item.transactionDate\r\n\r\n return (\r\n \r\n {showHeader && \r\n \r\n \r\n {formattedDate}\r\n \r\n \r\n }\r\n\r\n this.onSelect(item.id)} className=\"tableViewRowStyle\" style={itemStyle}>\r\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\nAccount.contextType = Consumer\r\nexport default withRouter(Account)","import React from 'react'\r\nimport { Col, Row } from 'react-bootstrap'\r\nimport { Consumer } from '../../context'\r\nimport SelectInput from '../controls/selectInput'\r\nimport { AccountTypes, TransactionTypes } from '../../Constants'\r\n\r\nclass AccountsEditor extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n transactionTypeId: this.props.transactionTypeId,\r\n selectedDebitAccountId: null,\r\n selectedCreditAccountId: null,\r\n debitAccountOptions: [],\r\n creditAccountOptions: [],\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.UpdateAccountSelectionsBasedOnTransactionType(this.props.debitAccountId, this.props.creditAccountId)\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n\r\n if(nextProps.transactionTypeId !== this.state.transactionTypeId || nextProps.debitAccountId !== this.state.debitAccountId || nextProps.creditAccountId !== this.state.creditAccountId) {\r\n // Did the transaction type change? If so, we need to refresh the selects, before assigning any potential new selected items.\r\n if(nextProps.transactionTypeId !== this.state.transactionTypeId) {\r\n this.setState({ \r\n transactionTypeId: nextProps.transactionTypeId,\r\n }, () => this.UpdateAccountSelectionsBasedOnTransactionType(nextProps.debitAccountId, nextProps.creditAccountId)\r\n .then(() => {\r\n this.setState({\r\n debitAccountId: nextProps.debitAccountId,\r\n creditAccountId: nextProps.creditAccountId\r\n })\r\n })\r\n )\r\n return\r\n }\r\n\r\n if(nextProps.debitAccountId !== this.state.debitAccountId || nextProps.creditAccountId !== this.state.creditAccountId) {\r\n this.setState({\r\n debitAccountId: nextProps.debitAccountId,\r\n creditAccountId: nextProps.creditAccountId\r\n })\r\n }\r\n }\r\n }\r\n\r\n // Method to update the drop downs. Accepts account ids that MUST be included. Handles when editing a transaction where the account is no longer active.\r\n UpdateAccountSelectionsBasedOnTransactionType(debitAccountId, creditAccountId) {\r\n return new Promise((resolve) => {\r\n\r\n let creditType = AccountTypes.BANKACCOUNT;\r\n let debitType = AccountTypes.BANKACCOUNT;\r\n \r\n switch(this.state.transactionTypeId) {\r\n case TransactionTypes.PAYMENT:\r\n debitType = AccountTypes.BANKACCOUNT;\r\n creditType = AccountTypes.THIRDPARTY;\r\n break;\r\n case TransactionTypes.DEPOSIT:\r\n debitType = AccountTypes.THIRDPARTY;\r\n creditType = AccountTypes.BANKACCOUNT;\r\n break;\r\n default:\r\n creditType = AccountTypes.BANKACCOUNT;\r\n debitType = AccountTypes.BANKACCOUNT;\r\n }\r\n \r\n this.context.getAllAccounts(false)\r\n .then((result) => {\r\n const debitAccountOptions = result\r\n .filter(item => \r\n item.accountType === debitType && // Must be right type.\r\n (item.isActive === true || item.id === creditAccountId || item.id === debitAccountId) // Only active items, or if it's the selected one\r\n )\r\n .sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n .map(item => ({ id: item.id, value: item.name }))\r\n \r\n const creditAccountOptions = result\r\n .filter(item => \r\n item.accountType === creditType && \r\n (item.isActive === true || item.id === creditAccountId || item.id === debitAccountId)\r\n )\r\n .sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n .map(item => ({ id: item.id, value: item.name }))\r\n \r\n this.setState({\r\n debitAccountOptions,\r\n creditAccountOptions,\r\n creditAccountId: null,\r\n debitAccountId: null\r\n })\r\n resolve()\r\n });\r\n })\r\n }\r\n\r\n\r\n handleControlChange(fieldName, value) {\r\n this.props.onChange(fieldName, value);\r\n }\r\n\r\n\r\n render() {\r\n\r\n return(\r\n \r\n \r\n \r\n this.handleControlChange(\"debitAccountId\", value)}\r\n options={this.state.debitAccountOptions}\r\n isViewMode = {this.props.isViewMode}\r\n />\r\n \r\n \r\n this.handleControlChange(\"creditAccountId\", value)}\r\n options={this.state.creditAccountOptions}\r\n isCreatable={true}\r\n isViewMode = {this.props.isViewMode}\r\n />\r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nAccountsEditor.contextType = Consumer\r\nexport default AccountsEditor","import React from 'react';\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport {Row, Col} from 'react-bootstrap'\r\nimport Moment from 'react-moment'\r\n\r\nclass Attachments extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n attachments: this.props.attachments\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
Attachments
\r\n
\r\n \r\n Uploaded\r\n Description\r\n Filename\r\n Size\r\n \r\n \r\n {this.state.attachments.map((attachment, index) => \r\n \r\n {attachment.uploadedDate}\r\n {attachment.description}\r\n {attachment.fileName}\r\n {(attachment.size / 1024 / 1024).toFixed(2)} Mb\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 Attachments","import React from 'react'\r\nimport Select from 'react-select'\r\nimport { confirmAlert } from 'react-confirm-alert'; // Import\r\nimport 'react-confirm-alert/src/react-confirm-alert.css'; // Import css\r\nimport { Button } from 'react-bootstrap'\r\nimport ControlLabel from './controlLabel'\r\nimport ControlText from './controlText';\r\n\r\n\r\nclass MultiSelectInput extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n values: this.props.values ?? [],\r\n options: this.props.options,\r\n componentName: this.props.name,\r\n isViewMode: this.props.isViewMode,\r\n }\r\n this.onChange = this.onChange.bind(this);\r\n\r\n }\r\n\r\n onChange(values) {\r\n this.setState(\r\n { values }, \r\n () => { \r\n \r\n this.props.onChange(values)\r\n });\r\n }\r\n\r\n /*\r\n returns the text/label for the selected item.\r\n */\r\n textBasedOnValue() {\r\n return this.state.values?.map(item => item.label).join(\", \");\r\n }\r\n\r\n handleCreate(input) {\r\n confirmAlert({\r\n customUI: ({ onClose }) => {\r\n return (\r\n
\r\n

Add new Third Party

\r\n

This will create a new Third Party, \"{input}\". Continue?

\r\n  \r\n {\r\n onClose();\r\n }}\r\n >\r\n Yes, Create it!\r\n \r\n
\r\n );\r\n }\r\n });\r\n }\r\n\r\n // This method handles updates to props that get triggered from the parent.\r\n componentWillReceiveProps(nextProps) {\r\n if(nextProps !== this.state) {\r\n\r\n this.setState({\r\n values: nextProps.values,\r\n options: nextProps.options\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n\r\n const text = this.textBasedOnValue();\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n {!this.props.isViewMode &&\r\n
\r\n \r\n \r\n \r\n
\r\n }\r\n {this.props.isViewMode &&\r\n \r\n }\r\n {!this.props.isViewMode && \r\n
\r\n {this.props.help}\r\n
\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default MultiSelectInput","import React from 'react'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport CurrencyInput from './controls/currencyInput'\r\nimport Button from './controls/button'\r\nimport CategoryEditor from './subcomponents/categoryEditor'\r\nimport BudgetEditor from './subcomponents/budgetEditor'\r\nimport { Consumer } from '../context'\r\nimport { ButtonIcons } from '../Constants'\r\n\r\n\r\nclass TransactionLineEditor extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n lineIndex: this.props.lineIndex,\r\n subCategoryId: this.props.subCategoryId,\r\n budgetId: this.props.budgetId,\r\n amount: this.props.amount,\r\n }\r\n this.handleControlChange = this.handleControlChange.bind(this);\r\n }\r\n\r\n handleControlChange(fieldName, value) {\r\n this.setState({[fieldName]: value})\r\n this.props.onChange(this.state.lineIndex, fieldName, value)\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if(nextProps.budgetId !== this.state.budgetId) {\r\n this.setState({ budgetId: nextProps.budgetId})\r\n }\r\n if(nextProps.subCategoryId !== this.state.subCategoryId)\r\n {\r\n this.setState({ subCategoryId: nextProps.subCategoryId})\r\n }\r\n }\r\n\r\n render() {\r\n\r\n const currencyBoxStyle = {\r\n display: \"flex\",\r\n alignItems: \"center\"\r\n }\r\n\r\n return(\r\n \r\n \r\n \r\n this.handleControlChange(\"subCategoryId\", value)} \r\n isViewMode ={this.props.isViewMode}\r\n />\r\n \r\n \r\n this.handleControlChange(\"budgetId\", value)}\r\n isViewMode={this.props.isViewMode}\r\n />\r\n\r\n \r\n \r\n
\r\n
\r\n this.handleControlChange(\"amount\", value)}\r\n isViewMode={this.props.isViewMode}\r\n />\r\n
\r\n \r\n {this.props.allowDelete && !this.props.isViewMode &&\r\n
\r\n
\r\n }\r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nTransactionLineEditor.contextType = Consumer\r\nexport default TransactionLineEditor","import React from 'react'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport { withRouter } from 'react-router-dom';\r\nimport { Form, Row, Col, Modal } from 'react-bootstrap'\r\nimport { Consumer } from '../context'\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport { TransactionTypes, ButtonIcons } from '../Constants'\r\nimport AccountEditor from './subcomponents/accountsEditor'\r\nimport Attachments from './attachments'\r\nimport LoaderDisplay from './controls/loaderDisplay';\r\nimport ControlLabel from './controls/controlLabel'\r\nimport { confirmAlert } from 'react-confirm-alert'; \r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport 'react-confirm-alert/src/react-confirm-alert.css'; // Import css\r\nimport { formatMoney } from '../Helpers/Formatter'\r\n\r\nimport TextInput from './controls/textInput'\r\nimport DateInput from './controls/dateInput'\r\nimport SelectInput from './controls/selectInput'\r\nimport MultiSelectInput from './controls/multiSelectInput';\r\nimport Button from './controls/button'\r\n\r\nimport TransactionLineEditor from './transactionLineEditor'\r\n\r\nimport ReactGA from 'react-ga';\r\n\r\nimport { configureAnchors, goToAnchor } from 'react-scrollable-anchor'\r\nimport ScrollableAnchor from 'react-scrollable-anchor';\r\n\r\nclass TransactionEditor extends React.Component {\r\n\r\n static contextType = Consumer;\r\n\r\n constructor(props, context) {\r\n super(props);\r\n this.context = context;\r\n \r\n this.state = {\r\n isLoading: true,\r\n isBusy: false,\r\n isViewMode: false,\r\n uploadVisible: false,\r\n selectedFile: null,\r\n transaction: {\r\n id: null,\r\n transactionDate: this.context.lastSelectedDate,\r\n transactionTypeId: TransactionTypes.PAYMENT,\r\n debitAccountId: null,\r\n creditAccountId: null,\r\n description: null,\r\n transactionLines : [],\r\n scheduleId: null,\r\n scheduleName: null,\r\n scheduleFrequency: null,\r\n paymentNumber: null,\r\n attachments: [],\r\n tags: []\r\n },\r\n\r\n transactionTypes: [\r\n {id:1, value:\"Payment\"}, \r\n {id:2, value:\"Deposit\"}, \r\n {id:3, value:\"Transfer\"}\r\n ],\r\n\r\n tags: [],\r\n }\r\n\r\n this.handleControlChange = this.handleControlChange.bind(this);\r\n this.addLine = this.addLine.bind(this);\r\n this.removeLine = this.removeLine.bind(this);\r\n\r\n }\r\n\r\n componentDidMount() {\r\n configureAnchors({offset: -70, scrollDuration: 50})\r\n \r\n goToAnchor('mainSection', false)\r\n \r\n ReactGA.pageview(window.location.pathname);\r\n // Ensure we have data... so this will make sure the context is up to date.\r\n\r\n this.loadData()\r\n }\r\n\r\n loadData() {\r\n\r\n // Get the available tags for the user to populate the list of tags that the user can select.\r\n this.context.getTags(false)\r\n .then((tags) => {\r\n this.setState({\r\n tags: tags.sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n .map(item => (\r\n { value: item.id, label: item.name }\r\n ))\r\n })\r\n })\r\n\r\n\r\n this.context.getAllAccounts(false)\r\n .then(() => { // Once we have all the accounts... see if we need to load up a transaction\r\n\r\n // Check if we have an ID to edit. This is in the props.\r\n const selectedId = this.props.match.params.id\r\n const scheduleId = this.props.match.params.scheduleId\r\n const paymentNumber = parseInt(this.props.match.params.paymentNumber)\r\n\r\n // check we don't have bad data..\r\n if(selectedId && scheduleId)\r\n {\r\n const { toastManager } = this.props;\r\n this.props.history.goBack();\r\n toastManager.add(\"Cannot edit both a transaction, and a Schedule.\", {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n return\r\n }\r\n\r\n if(selectedId || scheduleId) {\r\n\r\n // We're editing something, so let's set the loading screen\r\n this.setState({\r\n isLoading: true,\r\n })\r\n\r\n // We're editing a transaction.\r\n if(selectedId) {\r\n this.context.getTransaction(selectedId)\r\n .then((result) => {\r\n if(result.ok === false) {\r\n const { toastManager } = this.props;\r\n this.props.history.goBack();\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n return \r\n }\r\n\r\n const transaction = {\r\n id: selectedId,\r\n transactionTypeId: result.data.transactionTypeId,\r\n transactionDate: result.data.date,\r\n debitAccountId: result.data.debitAccountId,\r\n creditAccountId: result.data.creditAccountId,\r\n description: result.data.description,\r\n transactionLines: result.data.transactionLines,\r\n attachments: result.data.attachments,\r\n scheduleId: result.data.scheduleId,\r\n scheduleName: result.data.scheduleName,\r\n scheduleFrequency: result.data.scheduleFrequency,\r\n tags: result.data.tags?.map(item => ({value: item.id, label: item.name}))\r\n }\r\n\r\n // Transaction loaded... so set the state and make sure we remember the initial state.\r\n this.setState({\r\n transaction,\r\n originalData: cloneDeep(transaction),\r\n isViewMode: true,\r\n isLoading: false\r\n })\r\n })\r\n }\r\n\r\n // We're paying a scheduled transaction which hasn't been created yet. So need to get the data\r\n if(scheduleId)\r\n {\r\n this.context.getTransactionForSchedule(scheduleId, paymentNumber)\r\n .then((data) => {\r\n\r\n if(data.ok === false) {\r\n const { toastManager } = this.props;\r\n this.props.history.goBack();\r\n toastManager.add(data.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n return \r\n }\r\n\r\n const transaction = {\r\n transactionTypeId: data.transactionTypeId,\r\n transactionDate: data.date,\r\n debitAccountId: data.debitAccountId,\r\n creditAccountId: data.creditAccountId,\r\n description: data.description,\r\n transactionLines: data.transactionLines,\r\n scheduleId: scheduleId,\r\n scheduleName: data.scheduleName,\r\n scheduleFrequency: data.scheduleFrequency,\r\n paymentNumber: paymentNumber,\r\n tags: data.tags?.map(item => ({value: item.id, label: item.name}))\r\n }\r\n\r\n this.setState({\r\n transaction,\r\n originalData: cloneDeep(transaction),\r\n isViewMode: false,\r\n isLoading: false\r\n })\r\n })\r\n }\r\n }\r\n else\r\n {\r\n this.addLine();\r\n\r\n this.context.getDefaultAccount()\r\n .then((defaultAccountId) => {\r\n let transaction = this.state.transaction\r\n transaction.debitAccountId = defaultAccountId;\r\n\r\n \r\n this.setState({\r\n transaction,\r\n originalData: cloneDeep(transaction),\r\n isLoading: false\r\n })\r\n })\r\n }\r\n })\r\n\r\n }\r\n\r\n\r\n handleControlChange(fieldName, value) {\r\n if(fieldName === \"transactionTypeId\") {\r\n\r\n let currentDr = this.state.transaction.debitAccountId\r\n let currentCr = this.state.transaction.creditAccountId\r\n let newDr = null\r\n let newCr = null\r\n\r\n if(this.state.transaction.transactionTypeId === TransactionTypes.PAYMENT && value === TransactionTypes.DEPOSIT)\r\n {\r\n newDr = currentCr\r\n newCr = currentDr\r\n } \r\n else\r\n if(this.state.transaction.transactionTypeId === TransactionTypes.PAYMENT && value === TransactionTypes.TRANSFER) {\r\n newDr = currentDr\r\n newCr = null\r\n }\r\n else\r\n if(this.state.transaction.transactionTypeId === TransactionTypes.DEPOSIT && value === TransactionTypes.PAYMENT) {\r\n newDr = currentCr\r\n newCr = currentDr\r\n }\r\n if(this.state.transaction.transactionTypeId === TransactionTypes.DEPOSIT && value === TransactionTypes.TRANSFER) {\r\n newDr = null\r\n newCr = currentCr\r\n }\r\n if(this.state.transaction.transactionTypeId === TransactionTypes.TRANSFER && value === TransactionTypes.DEPOSIT) {\r\n newDr = null\r\n newCr = currentDr\r\n }\r\n if(this.state.transaction.transactionTypeId === TransactionTypes.TRANSFER && value === TransactionTypes.PAYMENT) {\r\n newDr = currentDr\r\n newCr = null\r\n }\r\n \r\n let transaction = this.state.transaction\r\n transaction.transactionTypeId = value\r\n transaction.creditAccountId = newCr\r\n transaction.debitAccountId = newDr\r\n \r\n\r\n\r\n this.setState({ \r\n transaction\r\n });\r\n return\r\n }\r\n\r\n if(fieldName === \"debitAccountId\" || fieldName === \"creditAccountId\") {\r\n let lines = [...this.state.transaction.transactionLines]\r\n \r\n if(lines.length === 1) // Only update the sub category is there's only one item\r\n {\r\n const selectedAccount = this.context.cacheStore.allAccountsList.find((item) => item.id === value)\r\n\r\n if(selectedAccount.defaultSubcategoryId !== null) // This isn't amazing. Because if the selected account is actually a bank account, sub caty is null. Maybe there's a safer way to handle this.\r\n {\r\n lines[0].categoryId = selectedAccount.defaultCategoryId\r\n lines[0].subCategoryId = selectedAccount.defaultSubcategoryId\r\n lines[0].budgetId = selectedAccount.defaultBudgetId\r\n }\r\n }\r\n let transaction = this.state.transaction\r\n transaction.transactionLines = lines\r\n transaction[fieldName] = value\r\n\r\n this.setState({\r\n transaction\r\n });\r\n\r\n }\r\n\r\n if(fieldName === 'transactionDate') {\r\n this.context.setLastSelectedDate(value)\r\n }\r\n\r\n // if(fieldName === 'tags') {\r\n // let transaction = this.state.transaction;\r\n // transaction.tags = value?.map((option) => option.value); // Checking for null, as it can be empty.\r\n // this.setState({transaction});\r\n // return;\r\n // }\r\n\r\n if(fieldName === 'amount' || fieldName === 'subCategoryId' || fieldName === 'budgetId' || fieldName === 'categoryId') {\r\n \r\n let transaction = this.state.transaction\r\n \r\n let lines = [...transaction.transactionLines];\r\n lines[0][fieldName] = value;\r\n\r\n transaction.transactionLines = lines\r\n\r\n this.setState({transaction})\r\n }\r\n else\r\n {\r\n let transaction = this.state.transaction\r\n transaction[fieldName] = value\r\n this.setState({transaction});\r\n } \r\n }\r\n\r\n onChangeFileHandler(e) {\r\n e.preventDefault();\r\n\r\n this.setState({\r\n selectedFile: e.target.files[0]\r\n })\r\n }\r\n\r\n handleUpload() {\r\n\r\n const formData = new FormData() \r\n formData.append('formFile', this.state.selectedFile)\r\n formData.append('description', 'Hardcoded')\r\n formData.append('parentId', this.state.transaction.id)\r\n\r\n this.context.addAttachment(this.state.transaction.id, formData)\r\n .then((result) => {\r\n const { toastManager } = this.props;\r\n\r\n if(result) {\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n } \r\n this.setState({\r\n uploadVisible: false\r\n })\r\n })\r\n }\r\n\r\n handleCloseAttachment() {\r\n this.setState({\r\n uploadVisible: false\r\n })\r\n }\r\n\r\n delete() {\r\n this.setState( {\r\n isBusy: true\r\n })\r\n\r\n this.context.deleteTransaction(this.state.transaction.id)\r\n .then((result) => {\r\n this.setState({\r\n isBusy: false\r\n })\r\n const { toastManager } = this.props;\r\n if(result) {\r\n this.props.history.goBack();\r\n toastManager.add(\"Transaction Deleted Successfully.\", {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n } \r\n })\r\n }\r\n\r\n\r\n\r\n handleControlLineChange(index, fieldName, value) {\r\n\r\n let transaction = this.state.transaction\r\n\r\n\r\n let lines = [...transaction.transactionLines]\r\n let line = lines[index]\r\n line[fieldName] = value\r\n lines[index] = line\r\n\r\n transaction.transactionLines = lines\r\n\r\n this.setState({ transaction })\r\n }\r\n\r\n addLine() {\r\n\r\n let transaction = this.state.transaction\r\n\r\n // Try pre populate the new item with the previous category, as usually we only change the budget.\r\n let prevSubCategoryId = null\r\n if(transaction.transactionLines.length > 0) {\r\n const prevLine = transaction.transactionLines[transaction.transactionLines.length - 1] // Get the last item \r\n prevSubCategoryId = prevLine.subCategoryId\r\n }\r\n\r\n\r\n let lines = [...transaction.transactionLines, {\r\n amount: null,\r\n budgetId: null,\r\n categoryId: null,\r\n subCategoryId: prevSubCategoryId,\r\n id: null,\r\n }]\r\n\r\n transaction.transactionLines = lines\r\n\r\n this.setState({ transaction })\r\n }\r\n\r\n removeLine(index) {\r\n const transaction = cloneDeep(this.state.transaction)\r\n var lines = transaction.transactionLines;\r\n lines.splice(index,1)\r\n transaction.transactionLines = lines\r\n\r\n this.setState({ transaction })\r\n }\r\n\r\n render() {\r\n const cancelClick = () => {\r\n\r\n if(this.state.transaction.id)\r\n {\r\n this.setState({\r\n isViewMode: true,\r\n transaction: cloneDeep(this.state.originalData)\r\n })\r\n }\r\n else\r\n {\r\n this.props.history.goBack()\r\n }\r\n }\r\n\r\n const backClick = () => {\r\n this.props.history.goBack();\r\n }\r\n\r\n const attachmentClick = () => {\r\n this.setState({\r\n uploadVisible: true\r\n })\r\n }\r\n \r\n const deleteClick = () => {\r\n confirmAlert({\r\n customUI: ({ onClose }) => {\r\n return (\r\n
\r\n

Delete Transaction

\r\n

Confirm you want to delete this transaction

\r\n
\r\n );\r\n }\r\n });\r\n \r\n }\r\n\r\n const saveClick = () => {\r\n this.setState({\r\n isBusy: true\r\n })\r\n\r\n const saveRequest = this.state.transaction\r\n\r\n saveRequest.tags = saveRequest.tags?.map(item => (item.value))\r\n\r\n this.context.saveTransaction(saveRequest)\r\n .then((result) => {\r\n \r\n const { toastManager } = this.props;\r\n \r\n if(result.ok) {\r\n this.props.history.goBack();\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n } \r\n else \r\n {\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n\r\n this.setState({\r\n isBusy: false\r\n })\r\n \r\n }\r\n\r\n })\r\n }\r\n\r\n if(this.state.isLoading) {\r\n return \r\n }\r\n\r\n const transbox = {\r\n borderStyle: \"solid\",\r\n borderColor: \"lightgrey\",\r\n borderWidth: \"1px\",\r\n padding: \"5px\",\r\n marginBottom: \"10px\"\r\n }\r\n\r\n const buttonSpacingStyle = {\r\n padding: \"4px\",\r\n float: \"left\"\r\n }\r\n\r\n const buttonBarStyle = {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\"\r\n }\r\n\r\n const transactionValueStyle = {\r\n fontSize: \"32px\"\r\n }\r\n\r\n const transactionTotal = () => {\r\n let value = 0;\r\n this.state.transaction.transactionLines.forEach(item => {\r\n value = value + item.amount\r\n })\r\n return value\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
Transaction Editor
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n this.handleControlChange(\"transactionDate\", e)}\r\n isViewMode = {this.state.isViewMode}\r\n />\r\n \r\n \r\n \r\n
\r\n $ {formatMoney(transactionTotal())}\r\n \r\n \r\n this.handleControlChange(\"tags\", values)}\r\n isViewMode = {this.state.isViewMode}\r\n />\r\n \r\n
\r\n \r\n \r\n this.handleControlChange(\"description\", value)} \r\n help=\"A description of this transaction\"\r\n isViewMode = {this.state.isViewMode}\r\n />\r\n \r\n \r\n {this.state.transaction.scheduleId && \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n this.handleControlChange(\"transactionTypeId\", value)}\r\n isViewMode = {this.state.isViewMode}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.transaction.transactionLines.map((line, index) => \r\n \r\n
\r\n this.handleControlLineChange(index, fieldName, value)}\r\n subCategoryId={line.subCategoryId}\r\n budgetId={line.budgetId}\r\n amount={line.amount}\r\n allowDelete={index > 0}\r\n onDelete={() => this.removeLine(index)}\r\n isViewMode ={this.state.isViewMode}\r\n />\r\n
\r\n
\r\n )} \r\n {!this.state.isViewMode && \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.isViewMode && this.state.transaction.attachments && this.state.transaction.attachments.length &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n\r\n\r\n\r\n this.handleCloseAttachment()} \r\n animation={true}>\r\n \r\n \r\n Add Attachments\r\n \r\n \r\n \r\n \r\n this.onChangeFileHandler(e)}/>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n }\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nDebug.contextType = Consumer\r\nexport default Debug","import React from 'react'\r\nimport { Consumer } from '../../context'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport SelectInput from '../controls/selectInput'\r\n\r\nclass TimezoneEditor extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n rawData: [],\r\n countries: [],\r\n timezones: []\r\n }\r\n\r\n }\r\n\r\n componentDidMount() {\r\n this.context.getTimezones()\r\n .then((result) => {\r\n var countries = result.map(item => (\r\n { id: item.countryId, value: item.name }\r\n ))\r\n this.setState({\r\n rawData: result,\r\n countries,\r\n selectedTimezoneId: this.props.value\r\n }, () => {\r\n this.setSelectedItems()\r\n })\r\n })\r\n }\r\n\r\n setSelectedItems() {\r\n if(this.state.selectedTimezoneId) {\r\n // We have a timezone... need to find the country that this timezone belongs to...\r\n this.state.rawData.forEach((rawDataItem) => {\r\n const tz = rawDataItem.timezones.find((item) => item.id === this.state.selectedTimezoneId)\r\n if(tz) {\r\n this.setState({\r\n selectedCountryId: rawDataItem.countryId,\r\n }, () => this.populateTimezones(rawDataItem.countryId))\r\n }\r\n })\r\n }\r\n }\r\n\r\n handleCountryChange(countryId) {\r\n this.setState({\r\n selectedCountryId: countryId\r\n })\r\n this.populateTimezones(countryId)\r\n }\r\n\r\n\r\n populateTimezones(countryId) {\r\n var selectedCountry = this.state.rawData\r\n .find((item) => item.countryId === countryId)\r\n\r\n var timezones = selectedCountry.timezones\r\n .map(item => (\r\n { id: item.id, value: item.name }\r\n ))\r\n\r\n this.setState({\r\n timezones\r\n })\r\n }\r\n\r\n\r\n handleTimezoneChange(timezoneId) {\r\n this.setState({\r\n selectedTimezoneId: timezoneId\r\n }, () => this.props.onChange(timezoneId))\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n \r\n \r\n \r\n this.handleCountryChange(id) }\r\n />\r\n \r\n \r\n this.handleTimezoneChange(id) }\r\n />\r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n}\r\n\r\nTimezoneEditor.contextType = Consumer\r\nexport default TimezoneEditor","import React from 'react'\r\nimport { withRouter } from 'react-router-dom';\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport { Col, Row } from 'react-bootstrap'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport TextInput from './controls/textInput'\r\nimport SelectInput from './controls/selectInput'\r\nimport Button from './controls/button'\r\nimport TimezoneEditor from './subcomponents/timezoneEditor'\r\nimport { Consumer } from '../context'\r\nimport LoaderDisplay from './controls/loaderDisplay'\r\nimport { ButtonIcons } from '../Constants'\r\nimport ReactGA from 'react-ga';\r\n\r\nclass User extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n user: {\r\n id: null,\r\n firstname: null,\r\n surname: null,\r\n email: null,\r\n defaultAccountId: null,\r\n timezoneId: null,\r\n accountName: null\r\n },\r\n isLoading: true,\r\n isBusy: false\r\n }\r\n\r\n this.onChange = this.onChange.bind(this)\r\n this.onSave = this.onSave.bind(this)\r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n this.context.getAllAccounts(false)\r\n .then((result) => {\r\n const items = result\r\n .filter((item) => item.accountType === 1)\r\n .map(item => {\r\n return {\r\n id: item.id,\r\n value: item.name\r\n }\r\n })\r\n this.setState({\r\n accounts: items\r\n })\r\n })\r\n\r\n this.context.getUser(false) \r\n .then((result) => {\r\n if(result.ok) {\r\n const user = { \r\n firstname: result.data.firstname,\r\n surname: result.data.surname,\r\n email: result.data.email,\r\n defaultAccountId: result.data.defaultAccountId,\r\n timezoneId: result.data.timezoneId,\r\n userAccountName: result.data.userAccountName,\r\n id: result.data.id,\r\n }\r\n \r\n this.setState({\r\n isLoading: false,\r\n user\r\n })\r\n }\r\n else\r\n {\r\n this.props.history.goBack();\r\n const { toastManager } = this.props;\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n \r\n }\r\n })\r\n }\r\n\r\n\r\n onChange(controlName, value) {\r\n const user = this.state.user\r\n user[controlName] = value\r\n\r\n this.setState( {\r\n user\r\n })\r\n }\r\n\r\n\r\n onSave() {\r\n const { toastManager } = this.props;\r\n this.setState({\r\n isBusy: true\r\n })\r\n \r\n this.context.saveUser(this.state.user)\r\n .then((result) => {\r\n if(result.ok) {\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n })\r\n this.props.history.goBack()\r\n\r\n } else {\r\n this.setState({\r\n isBusy: false\r\n })\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n })\r\n }\r\n })\r\n }\r\n\r\n\r\n render() {\r\n if(this.state.isLoading)\r\n return \r\n\r\n const cancelClick = () => {\r\n this.props.history.goBack();\r\n }\r\n\r\n const buttonSpacingStyle = {\r\n padding: \"4px\",\r\n float: \"left\"\r\n }\r\n \r\n const buttonBarStyle = {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\"\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n
User Details
\r\n
\r\n \r\n
\r\n \r\n \r\n this.onChange('firstname', value)}\r\n />\r\n \r\n \r\n this.onChange('surname', value)}\r\n />\r\n \r\n \r\n \r\n \r\n this.onChange('email', value)}\r\n />\r\n \r\n \r\n \r\n \r\n this.onChange('defaultAccountId', value)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n this.onChange('timezoneId', value)}\r\n />\r\n \r\n \r\n \r\n \r\n You are part of a family account called {this.state.user.userAccountName} \r\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\nUser.contextType = Consumer\r\nexport default withRouter(withToastManager(User))","import React from 'react'\r\nimport { Row, Col, Button } from 'react-bootstrap'\r\nimport { Consumer } from '../context'\r\nimport Moment from 'react-moment'\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport { withRouter } from 'react-router-dom';\r\nimport ContextMenu from '../components/controls/contextMenu'\r\n\r\nclass ScheduledFutureList extends React.Component {\r\n constructor(props) {\r\n super(props) \r\n\r\n this.state = {\r\n scheduleId: this.props.match.params.id,\r\n scheduledDisplayCount: 6,\r\n schedule: this.props.schedule,\r\n totalScheduled: this.props.schedule.length\r\n }\r\n }\r\n\r\n moreClick() {\r\n this.setState({\r\n scheduledDisplayCount: this.state.scheduledDisplayCount + 5\r\n })\r\n }\r\n\r\n payItemClick(scheduleNumber) {\r\n this.props.history.push(`/transaction/schedule/${this.state.scheduleId}/${scheduleNumber}`);\r\n }\r\n\r\n render() {\r\n\r\n return(\r\n \r\n \r\n \r\n \r\n Upcoming Scheduled Transactions\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n Due Date\r\n Amount\r\n \r\n {this.state.schedule\r\n .slice(0, this.state.scheduledDisplayCount)\r\n .map((item, index) => {\r\n const formattedDate = {item.date}\r\n\r\n const options = [\r\n { displayText: \"Change Date\", callback: () => this.props.showDateEditorClick(item.paymentNumber) },\r\n { displayText: \"Change Amount\", callback: () => this.props.showAmountEditorClick(item.paymentNumber) },\r\n { displayText: \"Pay\", callback: () => this.payItemClick(item.paymentNumber) },\r\n { displayText: \"Skip Payment\", callback: () => this.props.skipPayment(item.paymentNumber) }\r\n ]\r\n\r\n if(item.variations && item.variations.length > 0) {\r\n options.push({ })\r\n item.variations.forEach(i => {\r\n\r\n let description = ''\r\n\r\n if(i.newDate) {\r\n description = 'date change to ' + i.newDate\r\n } else {\r\n description = 'amount change to ' + i.newAmount\r\n }\r\n\r\n options.push(\r\n { displayText: `Remove ${description}`, callback: () => this.props.removeVariation(i.id) }\r\n )\r\n })\r\n\r\n \r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n
\r\n {formattedDate}\r\n
\r\n
\r\n \r\n {Number.parseFloat(item.amount).toFixed(2)}\r\n
\r\n )\r\n }\r\n )}\r\n \r\n
\r\n \r\n \r\n (Showing {this.state.scheduledDisplayCount} of {this.props.totalScheduled} events) \r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\nScheduledFutureList.contextType = Consumer;\r\nexport default withRouter(withToastManager(ScheduledFutureList))\r\n\r\n\r\n\r\n","import React from 'react'\r\nimport { Row, Col, Button } from 'react-bootstrap'\r\nimport { Consumer } from '../context'\r\nimport Moment from 'react-moment'\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { Link } from 'react-router-dom';\r\nimport ContextMenu from '../components/controls/contextMenu'\r\n\r\nclass SchedulePastList extends React.Component {\r\n constructor(props) {\r\n super(props) \r\n\r\n this.state = {\r\n scheduleId: this.props.match.params.id,\r\n scheduledDisplayCount: 6,\r\n schedule: this.props.schedule,\r\n totalScheduled: this.props.schedule.length\r\n }\r\n }\r\n\r\n moreClick() {\r\n this.setState({\r\n scheduledDisplayCount: this.state.scheduledDisplayCount + 5\r\n })\r\n }\r\n\r\n render() {\r\n\r\n return(\r\n \r\n \r\n \r\n \r\n Completed and Past Transactions\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n Scheduled\r\n State\r\n Amount Paid\r\n \r\n {this.state.schedule\r\n .slice(0, this.state.scheduledDisplayCount)\r\n .map((item, index) => {\r\n let formattedPaidDate = ''\r\n if(item.relatedTransaction) {\r\n formattedPaidDate = {item.relatedTransaction.transactionDate}\r\n } else {\r\n formattedPaidDate = {item.date}\r\n }\r\n \r\n const options = [\r\n { displayText: \"Un-Skip\", callback: () => this.props.unSkipPayment(item.paymentNumber) },\r\n ]\r\n\r\n let statusLink =
Skipped
\r\n if(item.relatedTransactionId) {\r\n statusLink = Paid\r\n }\r\n return (\r\n \r\n \r\n {!item.relatedTransactionId &&\r\n \r\n }\r\n
\r\n {formattedPaidDate}\r\n
\r\n \r\n {statusLink}\r\n {item.relatedTransactionId && Number.parseFloat(item.relatedTransaction.amount).toFixed(2) || Number.parseFloat(item.amount).toFixed(2)}\r\n
\r\n )\r\n }\r\n )}\r\n \r\n
\r\n \r\n \r\n (Showing {this.state.scheduledDisplayCount} of {this.props.totalScheduled} events) \r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\nSchedulePastList.contextType = Consumer;\r\nexport default withRouter(withToastManager(SchedulePastList))\r\n\r\n\r\n\r\n","import React from 'react'\r\nimport { Button, Row, Col, Modal, Form } from 'react-bootstrap'\r\nimport DateInput from './controls/dateInput'\r\nimport TextInput from './controls/textInput'\r\nimport { Consumer } from '../context'\r\nimport Moment from 'react-moment'\r\n\r\nclass ScheduleDateEditor extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n scheduleId: null,\r\n paymentNumber: null,\r\n isVisible: false,\r\n currentDate: null,\r\n newDate: null,\r\n maximumAllowedDate: null,\r\n minimumAllowedDate: null,\r\n applyAll: false,\r\n description: null\r\n }\r\n }\r\n\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n if(newProps.event && (newProps.show !== this.state.isVisible || newProps.event.date !== this.state.currentDate)) {\r\n this.setState({\r\n isVisible: newProps.show,\r\n currentDate: newProps.event.date,\r\n scheduleId: newProps.event.scheduleId,\r\n paymentNumber: newProps.event.paymentNumber,\r\n maximumAllowedMoveDate: newProps.event.maximumAllowedMoveDate,\r\n minimumAllowedMoveDate: newProps.event.minimumAllowedMoveDate\r\n })\r\n }\r\n }\r\n\r\n handleChange(fieldName, value) {\r\n this.setState({\r\n [fieldName]: value\r\n })\r\n }\r\n\r\n handleClose() {\r\n this.setState({\r\n isVisible: false\r\n })\r\n }\r\n\r\n handleSave() {\r\n const data = {\r\n scheduleId: this.state.scheduleId,\r\n paymentNumber: this.state.paymentNumber,\r\n newDate: this.state.currentDate,\r\n description: this.state.description,\r\n continueChange: this.state.applyAll\r\n }\r\n\r\n console.log(\"Data\", data)\r\n this.context.scheduleVariation(data) \r\n .then((result) => {\r\n this.props.callbackMethod(true);\r\n this.setState({\r\n isVisible: false\r\n })\r\n })\r\n \r\n }\r\n\r\n\r\n render() {\r\n\r\n \r\n\r\n \r\n\r\n const event = this.props.event\r\n\r\n return (\r\n this.handleClose()} \r\n animation={true}\r\n >\r\n \r\n Scheduled Date Change\r\n \r\n {event &&\r\n \r\n \r\n \r\n \r\n

The date cannot overlap the next or previous scheduled payment. \r\n Therefore, the available range in which you can move this transaction \r\n is between {this.state.minimumAllowedMoveDate}, and the {this.state.maximumAllowedMoveDate},\r\n unless moving all future payments.\r\n

\r\n \r\n
\r\n \r\n \r\n this.handleChange(\"currentDate\", value)}\r\n help=\"The date on which this payment is scheduled\"\r\n startDate={this.state.minimumAllowedMoveDate}\r\n endDate={this.state.maximumAllowedMoveDate}\r\n />\r\n \r\n \r\n \r\n \r\n this.handleChange(\"description\", value)}\r\n\r\n />\r\n \r\n \r\n \r\n \r\n this.handleChange(\"applyAll\", event.target.checked)}\r\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\nScheduleDateEditor.contextType = Consumer\r\nexport default ScheduleDateEditor\r\n","import React from 'react'\r\nimport { Button, Row, Col, Modal } from 'react-bootstrap'\r\nimport CurrencyInput from './controls/currencyInput'\r\nimport {formatMoney} from '../Helpers/Formatter'\r\nimport { Consumer } from '../context'\r\nimport CheckboxInput from './controls/checkboxInput'\r\nimport TextInput from './controls/textInput'\r\n\r\nclass ScheduleAmountEditor extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n scheduleId: null,\r\n paymentNumber: null,\r\n isVisible: false,\r\n currentAmount: null,\r\n newAmount: null,\r\n applyAll: false,\r\n description: null,\r\n }\r\n }\r\n\r\n handleClose() {\r\n this.setState({\r\n isVisible: false\r\n })\r\n }\r\n\r\n handleChange(fieldName, value) {\r\n this.setState({\r\n [fieldName]: value\r\n })\r\n }\r\n\r\n handleSave() {\r\n const data = {\r\n scheduleId: this.state.scheduleId,\r\n paymentNumber: this.state.paymentNumber,\r\n newAmount: this.state.newAmount,\r\n continueChange: this.state.applyAll,\r\n description: this.state.description\r\n }\r\n this.context.scheduleVariation(data) \r\n .then((result) => {\r\n this.props.callbackMethod(true);\r\n this.setState({\r\n isVisible: false\r\n })\r\n })\r\n \r\n\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n if(newProps.event && (newProps.show !== this.state.isVisible || newProps.event.amount !== this.state.currentAmount)) {\r\n this.setState({\r\n isVisible: newProps.show,\r\n currentAmount: newProps.event.amount,\r\n scheduleId: newProps.event.scheduleId,\r\n paymentNumber: newProps.event.paymentNumber,\r\n applyAll: newProps.event.continueChange\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n this.handleClose()} \r\n animation={true}\r\n >\r\n \r\n Scheduled Amount\r\n \r\n \r\n \r\n \r\n

Current scheduled event amount: {formatMoney(this.state.currentAmount)}

\r\n \r\n
\r\n \r\n \r\n this.handleChange(\"newAmount\", value)}\r\n help=\"The current amount of this payment\"\r\n />\r\n \r\n \r\n \r\n \r\n this.handleChange(\"description\", value)}\r\n\r\n />\r\n \r\n \r\n \r\n \r\n this.handleChange('applyAll', value)}\r\n help=\"Apply to all future payments\"\r\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\nScheduleAmountEditor.contextType = Consumer\r\nexport default ScheduleAmountEditor\r\n","import React from 'react'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport {getDayNameFromDate, getMonthNameFromDate, getDayNumberFromDate} from '../Helpers/Formatter'\r\nimport { withRouter } from 'react-router-dom';\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport { Consumer } from '../context'\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport LoaderDisplay from './controls/loaderDisplay';\r\nimport { DataTypes, ButtonIcons } from '../Constants'\r\n\r\nimport TextInput from './controls/textInput'\r\nimport DateInput from './controls/dateInput'\r\nimport SelectInput from './controls/selectInput'\r\nimport CurrencyInput from './controls/currencyInput'\r\nimport AccountsEditor from './subcomponents/accountsEditor';\r\nimport CategoryEditor from './subcomponents/categoryEditor'\r\nimport BudgetEditor from './subcomponents/budgetEditor'\r\nimport Button from './controls/button'\r\nimport MultiSelectInput from './controls/multiSelectInput';\r\n\r\nimport cloneDeep from 'lodash/cloneDeep';\r\n\r\nimport ScheduledFutureList from './scheduledFutureList';\r\nimport ScheduledPastList from './scheduledPastList'\r\nimport ScheduleDateEditor from './scheduleDateEditor'\r\nimport ScheduleAmountEditor from './scheduleAmountEditor'\r\n\r\nimport { confirmAlert } from 'react-confirm-alert'; // Import\r\nimport 'react-confirm-alert/src/react-confirm-alert.css'; // Import css\r\n\r\nimport ReactGA from 'react-ga';\r\n\r\nclass ScheduledTransaction extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n \r\n this.state = {\r\n isLoading: false,\r\n isBusy: false,\r\n isNew: true,\r\n scheduledDisplayCount: 5,\r\n eventAmountEditorShowing: false,\r\n eventDateEditorShowing: false,\r\n selectedEvent: null,\r\n isViewMode: false,\r\n originalData: null,\r\n tags: [],\r\n schedule: {\r\n recurrenceTypeId: null,\r\n scheduleStart: null,\r\n recurrenceEndTypeId: 1,\r\n scheduleEnd: null,\r\n numberOfTransactions: null,\r\n description: null,\r\n transactionTypeId: 1,\r\n subcategoryId: null,\r\n budgetId: null,\r\n creditAccount: null,\r\n debitAccount: null,\r\n id: null,\r\n schedule: [],\r\n tags: [],\r\n dayNumber: null,\r\n monthNumber: null,\r\n weekdayOnlyTypeId: 1 // Default to 1, which is 'Never'\r\n },\r\n\r\n transactionTypes: [\r\n {id:1, value:\"Payment\"}, \r\n {id:2, value:\"Deposit\"}, \r\n {id:3, value:\"Transfer\"}\r\n ],\r\n recurrenceTypes: [\r\n {id:1, value:\"Once\"}, \r\n {id:2, value:\"Weekly\"}, \r\n {id:3, value:\"Fortnightly\"},\r\n {id:4, value:\"Monthly\"},\r\n {id:5, value:\"Every 2 months\"},\r\n {id:6, value:\"Quarterly\"},\r\n {id:7, value:\"Half Yearly\"},\r\n {id:8, value:\"Annually\"}\r\n ],\r\n recurrenceEndTypes: [\r\n {id:1, value:\"Never\"}, \r\n {id:2, value:\"Number of Payments\"}, \r\n {id:3, value:\"Date\"},\r\n ],\r\n weekdayOnlyTypes: [\r\n {id:1, value:\"No\"},\r\n {id:2, value:\"Preceding Friday\"},\r\n {id:3, value:\"Following Monday\"}\r\n ]\r\n }\r\n\r\n this.showEventAmountEditor = this.showEventAmountEditor.bind(this)\r\n this.showEventDateEditor = this.showEventDateEditor.bind(this)\r\n this.loadSchedule = this.loadSchedule.bind(this)\r\n this.handleModalReply = this.handleModalReply.bind(this)\r\n this.removeVariation = this.removeVariation.bind(this)\r\n this.skipPayment = this.skipPayment.bind(this)\r\n this.unSkipPayment = this.unSkipPayment.bind(this)\r\n\r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n this.loadSchedule()\r\n }\r\n\r\n \r\n handleModalReply(didSave) {\r\n if(didSave) {\r\n this.loadSchedule()\r\n }\r\n }\r\n \r\n\r\n loadSchedule() {\r\n const selectedId = this.props.match.params.id\r\n\r\n this.context.getTags(false)\r\n .then((tags) => {\r\n this.setState({\r\n tags: tags.sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n .map(item => (\r\n { value: item.id, label: item.name }\r\n ))\r\n })\r\n })\r\n\r\n if(selectedId) {\r\n this.setState( {\r\n isViewMode: true,\r\n selectedId: selectedId,\r\n isLoading: true,\r\n isNew: false,\r\n eventAmountEditorShowing: false,\r\n eventDateEditorShowing: false\r\n })\r\n \r\n this.context.getSchedule(selectedId)\r\n .then((result) => {\r\n const schedule = {\r\n recurrenceTypeId : result.data.recurrenceTypeId,\r\n scheduleStart : result.data.scheduleStart,\r\n recurrenceEndTypeId : result.data.recurrenceEndTypeId,\r\n scheduleEnd : result.data.scheduleEnd,\r\n numberOfTransactions : result.data.numberOfTransactions,\r\n description: result.data.description,\r\n transactionTypeId: result.data.transactionTypeId,\r\n subcategoryId: result.data.subcategoryId,\r\n budgetId: result.data.budgetId,\r\n creditAccountId: result.data.creditAccountId,\r\n debitAccountId: result.data.debitAccountId,\r\n id: result.data.id,\r\n amount: result.data.amount,\r\n schedule: result.data.schedule,\r\n dayNumber: result.data.dayNumber,\r\n monthNumber: result.data.monthNumber,\r\n weekdayOnlyTypeId: result.data.weekdayOnlyTypeId,\r\n tags: result.data.tags?.map(item => ({value: item.id, label: item.name})) // Need to convert to type that 'multiselect' knows.\r\n\r\n }\r\n\r\n const upcoming = schedule.schedule.filter((item) => item.isPayable)\r\n const passed = schedule.schedule.filter((item) => !item.isPayable).sort(function(a,b) {return new Date(b.date) - new Date(a.date)})\r\n\r\n this.setState({\r\n isLoading: false,\r\n schedule,\r\n upcoming,\r\n passed,\r\n originalData: cloneDeep(schedule)\r\n })\r\n })\r\n }\r\n } \r\n\r\n handleChange(fieldName, value) {\r\n \r\n const schedule = this.state.schedule\r\n schedule[fieldName] = value\r\n\r\n if((fieldName === \"debitAccountId\" || fieldName === \"creditAccountId\") && !!!this.state.schedule.subcategoryId) { // Added a check to NOT change the sub category if already set\r\n const selectedAccount = this.context.cacheStore.allAccountsList.find((item) => item.id === value)\r\n schedule.subcategoryId = selectedAccount.defaultSubcategoryId;\r\n schedule.budgetId = selectedAccount.defaultBudgetId\r\n }\r\n\r\n if(fieldName === 'tags') {\r\n let schedule = this.state.schedule;\r\n // schedule.tags = value?.map((option) => option.value); // Checking for null, as it can be empty.\r\n // this.setState({schedule});\r\n return;\r\n }\r\n \r\n\r\n this.setState({schedule : schedule})\r\n }\r\n\r\n moreClick() {\r\n this.setState({\r\n scheduledDisplayCount: this.state.scheduledDisplayCount + 5\r\n })\r\n }\r\n\r\n\r\n saveClick() {\r\n this.setState({\r\n isBusy: true\r\n })\r\n\r\n const { toastManager } = this.props;\r\n\r\n var saveRequest = this.state.schedule;\r\n saveRequest.tags = saveRequest.tags?.map(item => (item.value))\r\n\r\n this.context.saveSchedule(saveRequest)\r\n .then((reply) => {\r\n this.setState({\r\n isBusy: false,\r\n })\r\n if(reply.ok) {\r\n this.setState({\r\n isViewMode: true,\r\n originalData: cloneDeep(this.state.schedule)\r\n }, () => this.loadSchedule())\r\n\r\n toastManager.add(reply.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n } \r\n else\r\n {\r\n toastManager.add(reply.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n } \r\n })\r\n }\r\n\r\n skipPayment(paymentNumber) {\r\n\r\n const { toastManager } = this.props;\r\n \r\n this.context.skipScheduledTransaction(this.state.selectedId, paymentNumber)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.loadSchedule()\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n else \r\n {\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n })\r\n }\r\n\r\n unSkipPayment(paymentNumber) {\r\n\r\n const { toastManager } = this.props;\r\n \r\n this.context.unSkipScheduledTransaction(this.state.selectedId, paymentNumber)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.loadSchedule()\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n else \r\n {\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n })\r\n }\r\n\r\n cancelClick() {\r\n \r\n this.setState({\r\n isViewMode: true,\r\n schedule: cloneDeep(this.state.originalData)\r\n })\r\n\r\n }\r\n\r\n // Performs the delete action\r\n delete () {\r\n this.setState({\r\n isBusy: true\r\n })\r\n\r\n const { toastManager } = this.props;\r\n this.context.deleteSchedule(this.state.selectedId)\r\n .then((reply) => {\r\n this.setState({\r\n isBusy: false\r\n })\r\n if(reply.ok) {\r\n this.props.history.goBack();\r\n toastManager.add(reply.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n } \r\n else\r\n {\r\n toastManager.add(reply.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n });\r\n }\r\n\r\n // Confirm that the user wants to delete the selected Schedule\r\n deleteClick() {\r\n \r\n confirmAlert({\r\n customUI: ({ onClose }) => {\r\n return (\r\n
\r\n

Delete Schedule

\r\n

Confirm you want to delete this Schedule

\r\n
\r\n );\r\n } \r\n })\r\n \r\n }\r\n\r\n showEventAmountEditor(paymentNumber) {\r\n const selectedItem = this.state.schedule.schedule.filter((item) => item.paymentNumber === paymentNumber)\r\n this.setState({\r\n eventAmountEditorShowing: true,\r\n selectedEvent: selectedItem[0]\r\n })\r\n }\r\n\r\n showEventDateEditor(paymentNumber) {\r\n const selectedItem = this.state.schedule.schedule.filter((item) => item.paymentNumber === paymentNumber)\r\n this.setState({\r\n eventDateEditorShowing: true,\r\n selectedEvent: selectedItem[0]\r\n })\r\n \r\n }\r\n\r\n removeVariation(variationId) {\r\n confirmAlert({\r\n customUI: ({ onClose }) => {\r\n return (\r\n
\r\n

Remove Schedule Variation

\r\n

Confirm you want to remove this Variation

\r\n
\r\n );\r\n } \r\n })\r\n }\r\n\r\n removeVariationConfirmed(variationId) {\r\n const { toastManager } = this.props;\r\n this.context.deleteScheduleVariation(variationId)\r\n .then((result) => {\r\n if(result.ok) {\r\n this.loadSchedule()\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n else \r\n {\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n\r\n }\r\n })\r\n }\r\n\r\n\r\n render() {\r\n\r\n if(this.state.isLoading) {\r\n return \r\n }\r\n\r\n const showSchedule = () => {\r\n if(!this.state.schedule.recurrenceTypeId || !this.state.schedule.scheduleStart)\r\n return \"\";\r\n\r\n let type = \"\"\r\n if(this.state.schedule.recurrenceTypeId) {\r\n const t = this.state.recurrenceTypes.find((item) => item.id === this.state.schedule.recurrenceTypeId)\r\n type = t.value\r\n }\r\n\r\n switch(this.state.schedule.recurrenceTypeId) {\r\n case 1:\r\n case 2:\r\n case 3:\r\n if(this.state.schedule.scheduleStart) {\r\n var a = new Date(this.state.schedule.scheduleStart);\r\n const day = getDayNameFromDate(a)\r\n return type + \" on a \" + day\r\n }\r\n break;\r\n case 4:\r\n case 5:\r\n if(this.state.schedule.scheduleStart) {\r\n var d = new Date(this.state.schedule.scheduleStart);\r\n const day = getDayNumberFromDate(d)\r\n return type + \" on the \" + day + \" day of the month\"\r\n }\r\n break;\r\n default:\r\n if(this.state.schedule.scheduleStart) {\r\n var b = new Date(this.state.schedule.scheduleStart);\r\n const month = getMonthNameFromDate(b)\r\n const day = getDayNumberFromDate(b)\r\n return type + \", starting the \" + day + ' of ' + month\r\n }\r\n\r\n }\r\n\r\n \r\n \r\n }\r\n\r\n const buttonBarStyle = {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\"\r\n }\r\n\r\n const buttonSpacingStyle = {\r\n padding: \"4px\",\r\n float: \"left\"\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
Scheduled Transaction
\r\n
\r\n \r\n
\r\n \r\n \r\n this.handleChange(\"recurrenceTypeId\", value)}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n this.handleChange(\"scheduleStart\", value)}\r\n value={this.state.schedule.scheduleStart}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n {this.state.schedule.recurrenceTypeId > 1 && \r\n \r\n this.handleChange(\"recurrenceEndTypeId\", value)}\r\n value={this.state.schedule.recurrenceEndTypeId}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n }\r\n {this.state.schedule.recurrenceEndTypeId === 3 && this.state.schedule.recurrenceTypeId > 1 &&\r\n \r\n this.handleChange(\"scheduleEnd\", value)}\r\n value={this.state.schedule.scheduleEnd}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n }\r\n {this.state.schedule.recurrenceEndTypeId === 2 && this.state.schedule.recurrenceTypeId > 1 &&\r\n \r\n this.handleChange(\"numberOfTransactions\", value)}\r\n value={this.state.schedule.numberOfTransactions}\r\n dataType={DataTypes.NUMBER}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n }\r\n \r\n \r\n \r\n {showSchedule()}\r\n \r\n \r\n \r\n \r\n this.handleChange(\"description\", value)}\r\n help=\"A description of this transaction\"\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n {this.state.schedule.recurrenceTypeId > 1 &&\r\n \r\n \r\n this.handleChange(\"weekdayOnlyTypeId\", value)}\r\n isViewMode={this.state.isViewMode}\r\n help=\"Change Weekend Events?\"\r\n options={this.state.weekdayOnlyTypes}\r\n />\r\n \r\n }\r\n \r\n \r\n \r\n this.handleChange(\"transactionTypeId\", value)}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n this.handleChange(fieldName, value)} \r\n transactionTypeId={this.state.schedule.transactionTypeId}\r\n debitAccountId={this.state.schedule.debitAccountId}\r\n creditAccountId={this.state.schedule.creditAccountId} \r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n \r\n \r\n this.handleChange(\"subcategoryId\", value)}\r\n value = {this.state.schedule.subcategoryId}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n this.handleChange(\"budgetId\", value)}\r\n value={this.state.schedule.budgetId}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n \r\n \r\n this.handleChange(\"amount\", value)}\r\n value={this.state.schedule.amount}\r\n isViewMode={this.state.isViewMode}\r\n />\r\n \r\n \r\n this.handleChange(\"tags\", value)}\r\n isViewMode = {this.state.isViewMode}\r\n /> \r\n \r\n \r\n \r\n \r\n
\r\n {!this.state.isViewMode &&\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n {this.state.schedule.id && this.state.upcoming &&\r\n
\r\n \r\n
\r\n }\r\n \r\n \r\n {this.state.schedule.id && this.state.passed &&\r\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 ScheduledTransaction.contextType = Consumer;\r\n export default withRouter(withToastManager(ScheduledTransaction));","import React from 'react'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\n\r\nclass SheduledItemEdit extends React.Component {\r\n\r\n render() {\r\n return(\r\n \r\n \r\n \r\n \r\n \r\n \r\n
Scheduled Event Editor
\r\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 SheduledItemEdit\r\n","import React from 'react'\r\nimport { Col, Row } from 'react-bootstrap'\r\nimport Moment from 'react-moment'\r\nimport { TransactionTypes } from '../Constants'\r\nimport ContextMenu from '../components/controls/contextMenu'\r\nimport { withRouter } from 'react-router-dom';\r\n\r\n\r\nclass SchedulesItem extends React.Component {\r\n\r\n\r\n Pay(id, paymentNumber) {\r\n this.props.history.push(`/transaction/schedule/${id}/${paymentNumber}`);\r\n }\r\n\r\n render() {\r\n\r\n const displayAccount = this.props.data.transactionTypeId === TransactionTypes.DEPOSIT \r\n ? this.props.data.debitAccount \r\n : this.props.data.creditAccount\r\n\r\n const join = this.props.data.transactionTypeId === TransactionTypes.DEPOSIT \r\n ? 'from'\r\n : 'to'\r\n \r\n let transactionIcon = ''\r\n\r\n switch(this.props.data.transactionTypeId) {\r\n case TransactionTypes.PAYMENT: \r\n {\r\n transactionIcon = \r\n break\r\n }\r\n case TransactionTypes.DEPOSIT: \r\n {\r\n transactionIcon = \r\n break\r\n } \r\n default:\r\n {\r\n transactionIcon =;\r\n }\r\n }\r\n\r\n const displayAmount = \r\n {Number.parseFloat(this.props.data.amount).toFixed(2)}\r\n \r\n\r\n const display = \r\n \r\n {transactionIcon} {this.props.data.transactionType} {join} {displayAccount}\r\n \r\n\r\n const dueDisplay = \r\n ({this.props.data.dueDays === 0 ? 'Due today' : this.props.data.dueDays < 0 ? 'Overdue' : this.props.data.dueDays === 1 ? 'Due tomorrow' : `In ${this.props.data.dueDays} days`})\r\n \r\n \r\n \r\n const options=[\r\n { displayText: \"Pay\", callback: () => this.Pay(this.props.data.scheduleId, this.props.data.paymentNumber)}\r\n ]\r\n\r\n return(\r\n\r\n \r\n {this.props.showDate === true && \r\n \r\n {this.props.data.date} {dueDisplay}\r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n
this.props.onClick(this.props.data.scheduleId)} className=\"tableViewRowStyle pointable\">\r\n {display}\r\n
\r\n \r\n \r\n \r\n {this.props.data.schedule} - {this.props.data.subCategory}\r\n \r\n \r\n \r\n {displayAmount}\r\n \r\n \r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(SchedulesItem)\r\n","import React from 'react'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport LoaderDisplay from '../components/controls/loaderDisplay'\r\nimport { Consumer } from '../context'\r\nimport TextInput from '../components/controls/textInput'\r\nimport { ButtonIcons } from '../Constants'\r\nimport Button from './controls/button'\r\n\r\nimport { withRouter } from 'react-router-dom';\r\nimport SchedulesItem from './schedulesItem'\r\n\r\nimport ReactGA from 'react-ga';\r\n\r\nclass Schedules extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n isLoading: true,\r\n scheduleList: [],\r\n filteredList: [],\r\n searchText: null,\r\n }\r\n\r\n this.View = this.View.bind(this)\r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n const filter = {\r\n LimitResultCount: 1000\r\n }\r\n\r\n this.context.getUpcoming(filter)\r\n .then((result) => {\r\n this.setState({\r\n scheduleList: result,\r\n filteredList: result,\r\n isLoading: false\r\n })\r\n })\r\n\r\n }\r\n\r\n View(scheduleId) {\r\n this.props.history.push(`/schedule/${scheduleId}`);\r\n }\r\n\r\n Create() {\r\n this.props.history.push(`/schedule/`);\r\n }\r\n\r\n handleChange(fieldName, value) {\r\n const filtered = this.state.scheduleList\r\n .filter(item => \r\n !value ||\r\n (item.debitAccount.toLowerCase().includes(value.toLowerCase()) || item.creditAccount.toLowerCase().includes(value.toLowerCase()))\r\n )\r\n this.setState({ [fieldName]: value, filteredList: filtered })\r\n \r\n }\r\n \r\n render() {\r\n\r\n let prevDate = null\r\n return (\r\n\r\n \r\n \r\n
\r\n \r\n this.handleChange('searchText', value)}\r\n label=\"Search\"\r\n help=\"Search for a Schedule\"\r\n placeholder=\"Payee\"\r\n\r\n />\r\n \r\n \r\n
\r\n {this.state.isLoading && \r\n \r\n } \r\n {!this.state.isLoading && \r\n
\r\n \r\n \r\n \r\n Transaction\r\n Description\r\n Amount\r\n \r\n {this.state.filteredList.length === 0 &&\r\n
No schedules available
\r\n }\r\n {this.state.filteredList\r\n .sort(function(a, b) {\r\n return (a.dueDays < b.dueDays) ? -1 : (a.dueDays > b.dueDays) ? 1 : 0;\r\n })\r\n .map((item, index) => \r\n {\r\n const showDateHeader = prevDate !== item.date\r\n prevDate = item.date\r\n return \r\n }\r\n )}\r\n \r\n
\r\n
\r\n }\r\n \r\n
\r\n
\r\n )\r\n }\r\n\r\n\r\n}\r\n\r\nSchedules.contextType = Consumer\r\nexport default withRouter(Schedules)","import React from 'react'\r\n\r\nclass StaticLabel extends React.Component {\r\n\r\n render() {\r\n\r\n const labelStyle = {\r\n color: \"#a1a1a1\"\r\n }\r\n\r\n const fontSize = this.props.size || \"14px\"\r\n\r\n const textStyle = {\r\n fontSize: fontSize,\r\n marginTop: \"4px\",\r\n marginBottom: \"12px\",\r\n paddingLeft: \"5px\",\r\n color: \"#FFFFFF\"\r\n }\r\n\r\n return (\r\n \r\n
{this.props.label}
\r\n
{this.props.value}
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default StaticLabel","import React from 'react'\r\n\r\nclass BooleanDisplay extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n value: this.props.value\r\n }\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n if(newProps.value !== this.state.value) {\r\n this.setState({ value: newProps.value})\r\n }\r\n }\r\n\r\n render() {\r\n\r\n const trueDisplay = \r\n const falseDisplay = \r\n\r\n return(\r\n \r\n {this.state.value === true && trueDisplay}\r\n {!this.state.value && falseDisplay} \r\n \r\n \r\n )\r\n }\r\n\r\n}\r\n\r\nexport default BooleanDisplay","import React from 'react'\r\nimport { Row, Col, Button, Modal } from 'react-bootstrap'\r\nimport TextInput from '../components/controls/textInput'\r\nimport StaticLabel from '../components/controls/staticLabel'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport LoaderDisplay from '../components/controls/loaderDisplay'\r\nimport BooleanDisplay from '../components/controls/booleanDisplay'\r\nimport { Consumer } from '../context'\r\nimport { withRouter } from 'react-router-dom';\r\nimport CheckboxInput from './controls/checkboxInput'\r\nimport { formatMoney, sortMethod } from '../Helpers/Formatter'\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport ReactGA from 'react-ga';\r\nimport CategoryEditor from './subcomponents/categoryEditor'\r\n\r\nclass Categories extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n isLoading: true,\r\n includeInactive: false,\r\n categoryList: [],\r\n selectedRowId: null,\r\n categoryModalVisible: false,\r\n subcategoryModalVisible: false,\r\n mergeModalVisible: false,\r\n newCategoryName: null,\r\n newCategoryIsIncome: false,\r\n selectedCategoryId: null,\r\n mergeToSubcategoryId: null,\r\n }\r\n }\r\n\r\n loadData() {\r\n this.context.getCategories()\r\n .then((result) => {\r\n this.setState({\r\n categoryList: result,\r\n isLoading: false\r\n })\r\n });\r\n }\r\n \r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n this.loadData()\r\n }\r\n\r\n \r\n\r\n changeCategoryState(isSubcategory, id, newState) {\r\n const { toastManager } = this.props;\r\n\r\n const request = {\r\n deletedFlag: newState,\r\n id: id,\r\n isSubcategory: isSubcategory\r\n }\r\n\r\n this.context.changeCategoryState(request)\r\n .then((data) => {\r\n toastManager.add(`The ${isSubcategory ? \"subcategory\" : \"category\"} was ${newState ? \"deleted\" : \"restored\"} successfully.`, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n\r\n if(isSubcategory===false) {\r\n\r\n const thisCategory = this.state.categoryList\r\n .find((item) => item.id === id)\r\n\r\n thisCategory.isDeleted = newState;\r\n\r\n let items = [...this.state.categoryList]\r\n items[thisCategory] = thisCategory;\r\n\r\n this.setState({\r\n categoryList: items,\r\n isLoading: false\r\n })\r\n }\r\n else \r\n {\r\n this.state.categoryList.forEach((category) => {\r\n\r\n const thisSubCategory = category.subcategories\r\n .find((item) => item.id === id)\r\n\r\n if(thisSubCategory) {\r\n\r\n thisSubCategory.isDeleted = newState\r\n let newSubs = [...category.subcategories]\r\n newSubs[thisSubCategory] = thisSubCategory\r\n\r\n category.subcategories = newSubs\r\n \r\n let items = [...this.state.categoryList]\r\n items[category] = category;\r\n\r\n this.setState({\r\n categoryList: items,\r\n isLoading: false\r\n })\r\n\r\n return\r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n handleSaveCategory() {\r\n if(this.state.newCategoryName) {\r\n const { toastManager } = this.props;\r\n const data = {\r\n name: this.state.newCategoryName,\r\n id: this.state.selectedCategoryId,\r\n IncomeCategory: this.state.newCategoryIsIncome\r\n }\r\n this.context.saveCategory(data)\r\n .then((result) => {\r\n this.setState({\r\n categoryModalVisible: false\r\n })\r\n\r\n toastManager.add(`${this.state.newCategoryName} has been created successfully.`, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n })\r\n }\r\n }\r\n\r\n handleSaveSubcategory() {\r\n if(this.state.newSubcategoryName) {\r\n const { toastManager } = this.props;\r\n const data = {\r\n name: this.state.newSubcategoryName,\r\n id: this.state.selectedSubcategoryId,\r\n categoryId: this.state.selectedCategoryId,\r\n }\r\n this.context.saveSubcategory(data)\r\n .then((result) => {\r\n this.setState({\r\n subcategoryModalVisible: false\r\n })\r\n\r\n toastManager.add(`${this.state.newSubcategoryName} has been created successfully.`, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n })\r\n }\r\n }\r\n\r\n handleMerge() {\r\n const { toastManager } = this.props;\r\n\r\n if(this.state.selectedSubcategoryId === this.state.mergeToSubcategoryId) {\r\n toastManager.add(`Unable to merge sub category it's self`, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n\r\n return;\r\n }\r\n\r\n if(this.state.mergeToSubcategoryId && this.state.selectedSubcategoryId) {\r\n this.context.mergeSubCategory(this.state.selectedSubcategoryId, this.state.mergeToSubcategoryId)\r\n .then((result) => {\r\n this.setState({\r\n mergeModalVisible: false\r\n })\r\n if(result.ok) {\r\n toastManager.add(`Sub catregory has been merged successfully.`, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n } else {\r\n toastManager.add(`Failed to merge subcategory. ${result.message}`, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n })\r\n } else {\r\n toastManager.add(`Need to select a origin and destination subcategory`, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n }\r\n\r\n\r\n handleChange(property, value) {\r\n this.setState({\r\n [property] : value\r\n })\r\n }\r\n\r\n showCategoryModal(id, name, incomeCategory) {\r\n this.setState({\r\n selectedCategoryId: id,\r\n categoryModalVisible: true,\r\n newCategoryName: name,\r\n newCategoryIsIncome: incomeCategory\r\n })\r\n }\r\n\r\n showSubcategoryModal(subcategoryId, categoryId, name) {\r\n this.setState({\r\n selectedSubcategoryId: subcategoryId,\r\n subcategoryModalVisible: true,\r\n selectedCategoryId: categoryId,\r\n newSubcategoryName: name\r\n })\r\n }\r\n\r\n showMergeModal(subCategoryId, name) {\r\n this.setState({\r\n selectedSubcategoryId: subCategoryId,\r\n mergeModalVisible: true,\r\n newSubcategoryName: name\r\n })\r\n }\r\n\r\n Create() {\r\n // this.props.history.push(`/schedule/`);\r\n }\r\n \r\n render() {\r\n\r\n const handleClose = () => { this.setState({ categoryModalVisible: false, subcategoryModalVisible: false, mergeModalVisible: false }) };\r\n const handleShow = () => { this.setState({ categoryModalVisible: true, newCategoryName: null, selectedCategoryId: null, }) };\r\n\r\n return (\r\n \r\n \r\n \r\n {value => { \r\n return(\r\n \r\n
\r\n \r\n \r\n this.setState({ includeInactive: value})}\r\n label=\"Include Inactive\"\r\n />\r\n\r\n \r\n \r\n \r\n
\r\n {this.state.isLoading && \r\n \r\n } \r\n {!this.state.isLoading && \r\n
\r\n \r\n \r\n \r\n Category\r\n Enabled\r\n Value\r\n Transactions\r\n \r\n {value.cacheStore.categories.length === 0 &&\r\n
No categories available
\r\n }\r\n {value.cacheStore.categories\r\n .filter((z) => !z.isDeleted || this.state.includeInactive)\r\n .sort((a, b) => { return sortMethod(a.name, b.name) })\r\n .map((item, index) => \r\n \r\n \r\n this.setState({ selectedRowId: item.id})} className={`tableViewRowStyle pointable ${this.state.selectedRowId === item.id ? 'selectedRow' : ''}`} >\r\n \r\n {item.name}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.selectedRowId === item.id &&\r\n \r\n {\r\n e.preventDefault(); // Prevents navigation\r\n this.showCategoryModal(item.id, item.name, item.incomeCategory);\r\n }} \r\n className=\"selectedRowToolbar\"\r\n >\r\n [ Modify ]\r\n \r\n {!item.isDeleted &&\r\n \r\n {\r\n e.preventDefault(); // Prevents navigation\r\n this.changeCategoryState(false, item.id, !item.isDeleted);\r\n }} \r\n className=\"warningText selectedRowToolbar\"\r\n >\r\n [ Delete ]\r\n \r\n\r\n {\r\n e.preventDefault(); // Prevents navigation\r\n this.showSubcategoryModal(null, item.id, null);\r\n }} \r\n className=\"selectedRowToolbar\"\r\n >\r\n [ Create Subcategory ]\r\n \r\n \r\n }\r\n {item.isDeleted && \r\n {\r\n e.preventDefault(); // Prevents navigation\r\n this.changeCategoryState(false, item.id, !item.isDeleted);\r\n }} \r\n className=\"selectedRowToolbar\"\r\n >\r\n [ Restore ]\r\n \r\n }\r\n \r\n }\r\n \r\n \r\n \r\n \r\n {item.subcategories\r\n .filter((sub) => !sub.isDeleted || this.state.includeInactive)\r\n .sort((a, b) => { return sortMethod(a.name, b.name) })\r\n .map((sub, index2) => \r\n this.setState({ selectedRowId: sub.id})} className={`tableViewRowStyle pointable ${this.state.selectedRowId === sub.id ? 'selectedRow' : ''}`} >\r\n {sub.name}\r\n \r\n {formatMoney(sub.amount)}\r\n {sub.usages}\r\n {this.state.selectedRowId === sub.id &&\r\n \r\n {\r\n e.preventDefault(); // Prevents navigation\r\n this.showSubcategoryModal(sub.id, item.id, sub.name);\r\n }} \r\n className=\"selectedRowToolbar\"\r\n >\r\n [ Modify ]\r\n \r\n {!sub.isDeleted && sub.usages === 0 &&\r\n {\r\n e.preventDefault(); // Prevents navigation\r\n this.changeCategoryState(true, sub.id, !sub.isDeleted);\r\n }} \r\n className=\"selectedRowToolbar warningText\"\r\n >\r\n [ Delete ]\r\n \r\n \r\n }\r\n {!sub.isDeleted && sub.usages > 0 &&\r\n {\r\n e.preventDefault(); // Prevents navigation\r\n this.showMergeModal(sub.id, sub.name);\r\n }} \r\n className=\"selectedRowToolbar warningText\"\r\n >\r\n [ Merge ]\r\n \r\n \r\n }\r\n {sub.isDeleted && \r\n {\r\n e.preventDefault(); // Prevents navigation\r\n this.changeCategoryState(true, sub.id, !sub.isDeleted);\r\n }} \r\n className=\"selectedRowToolbar\"\r\n >\r\n [ Restore ]\r\n \r\n\r\n }\r\n \r\n }\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n }\r\n \r\n
\r\n )}\r\n }\r\n
\r\n \r\n \r\n Category\r\n \r\n \r\n \r\n \r\n this.handleChange(\"newCategoryName\", value)}\r\n help=\"The name of the category\"\r\n />\r\n \r\n \r\n this.handleChange(\"newCategoryIsIncome\", value)}\r\n help=\"Is the category an Income category\"\r\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 Subcateogry Merge\r\n \r\n \r\n \r\n \r\n this.handleChange(\"mergeToSubcategoryId\", value)}\r\n value = {this.state.mergeToSubcategoryId}\r\n isViewMode={this.state.isViewMode}\r\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 Subcategory\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n this.handleChange(\"newSubcategoryName\", value)}\r\n help=\"The name of the sub category\"\r\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\nCategories.contextType = Consumer\r\nexport default withToastManager(withRouter(Categories))","import React from 'react'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport LoaderDisplay from '../components/controls/loaderDisplay'\r\nimport { Consumer } from '../context'\r\nimport ReactGA from 'react-ga';\r\nimport Button from '../components/controls/button'\r\nimport { ButtonIcons } from '../Constants'\r\n\r\n\r\nclass Budgets extends React.Component {\r\n\r\n\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n isLoading: true\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n this.context.getBudgets()\r\n .then(() => {\r\n this.setState({\r\n isLoading: false\r\n })\r\n })\r\n }\r\n\r\n View(budgetId) {\r\n this.props.history.push(`/budget/${budgetId}`);\r\n }\r\n\r\n Create() {\r\n this.props.history.push(`/budget`);\r\n }\r\n\r\n render() {\r\n\r\n \r\n const buttonBarStyle = {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\"\r\n }\r\n return(\r\n \r\n \r\n
\r\n \r\n Filter Box\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {this.state.isLoading && \r\n \r\n } \r\n \r\n {!this.state.isLoading && \r\n
\r\n \r\n \r\n \r\n \r\n Budget\r\n Account\r\n Budget Type\r\n Budget Value\r\n Used this period\r\n \r\n\r\n\r\n \r\n {value => { \r\n \r\n if(value.cacheStore.budgets === 0)\r\n return(
No schedules available
)\r\n \r\n \r\n return(\r\n \r\n value.cacheStore.budgets\r\n .map((item, index) => \r\n this.View(item.id)}\r\n className=\"tableViewRowStyle pointable\" \r\n >\r\n {item.name}\r\n {item.primaryAccountName}\r\n {item.budgetType}\r\n {Number.parseFloat(item.budgetAmount).toFixed(2)}\r\n {Number.parseFloat(item.used).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
\r\n )\r\n }\r\n}\r\n\r\nBudgets.contextType = Consumer\r\nexport default Budgets","import React from 'react'\r\nimport { formatMoney } from '../Helpers/Formatter'\r\nimport { TransactionTypes } from '../Constants' \r\nimport { Link } from 'react-router-dom';\r\n\r\nclass ScheduleCalendarCellEvent extends React.Component {\r\n\r\n render() {\r\n\r\n const disabledStyle = {\r\n opacity: \"0.3\",\r\n textDecoration: \"line-through\"\r\n }\r\n\r\n return(\r\n \r\n \r\n
\r\n {this.props.event.displayText}
\r\n \r\n \r\n {formatMoney(this.props.event.amount)}\r\n \r\n \r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default ScheduleCalendarCellEvent","import React from 'react'\r\nimport { Col, Row, Badge } from 'react-bootstrap'\r\nimport ScheduleCalendarCellEvent from './scheduleCalendarCellEvent'\r\n\r\nclass SchedueCalendarCell extends React.Component {\r\n\r\n render() {\r\n\r\n const eventStyle = {\r\n paddingTop: \"10px\",\r\n }\r\n return(\r\n\r\n \r\n
\r\n \r\n \r\n
{this.props.dayNumber}
\r\n \r\n
\r\n \r\n {this.props.events && this.props.events.map((event,index) => {\r\n if(this.props.showSkipped===false && event.isSkipped===true )\r\n return null;\r\n \r\n if(event.paidDate)\r\n return null;\r\n return(\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default SchedueCalendarCell\r\n","import React from 'react'\r\nimport { Col, Row } from 'react-bootstrap'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport ScheduleCalendarCell from './scheduleCalendarCell'\r\nimport ScheduleDataAccessor from '../api/ScheduleDataAccessor'\r\nimport CheckboxInput from '../components/controls/checkboxInput'\r\nimport DateInput from './controls/dateInput'\r\nimport LoaderDisplay from './controls/loaderDisplay'\r\nimport ReactGA from 'react-ga';\r\nimport ScrollableAnchor from 'react-scrollable-anchor';\r\nimport { configureAnchors, goToAnchor } from 'react-scrollable-anchor'\r\n\r\n\r\n\r\nclass ScheduleCalendar extends React.Component {\r\n\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n data: null,\r\n showSkipped: false,\r\n showPaid: false,\r\n selectedDate: new Date(),\r\n isLoading: true\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n configureAnchors({offset: -60, scrollDuration: 50})\r\n goToAnchor('mainSection', false)\r\n ReactGA.pageview(window.location.pathname);\r\n this.getData();\r\n \r\n }\r\n\r\n getData() {\r\n this.setState({\r\n isLoading: true\r\n })\r\n ScheduleDataAccessor.calendar(this.state.selectedDate.getFullYear(), this.state.selectedDate.getMonth() + 1)\r\n .then((result) => {\r\n this.setState({\r\n data: result.data,\r\n isLoading: false\r\n })\r\n\r\n })\r\n }\r\n\r\n changeFilterValue(field, value) {\r\n this.setState({\r\n [field]: value\r\n })\r\n }\r\n\r\n handleDateChange(value) {\r\n this.setState({\r\n selectedDate: value\r\n }, () => this.getData())\r\n }\r\n\r\n render() {\r\n\r\n const dayHeader = {\r\n background: \"#f1f1f1\",\r\n borderBottomWidth: \"1px\",\r\n borderBottomColor: \"#c4c4c4\",\r\n borderBottomStyle: \"solid\",\r\n paddingBottom: \"6px\",\r\n paddingTop: \"6px\",\r\n marginBottom: \"0px\",\r\n textAlign: \"center\",\r\n fontWeight: \"600\" \r\n }\r\n\r\n \r\n const cellStyle = {\r\n borderStyle: \"solid\",\r\n borderWidth: \"1px\",\r\n minHeight: \"105px\",\r\n padding: \"8px\",\r\n borderColor: \"#e8e8e8\"\r\n }\r\n\r\n const cellContentStyle = {\r\n padding: \"8px\"\r\n }\r\n\r\n return(\r\n\r\n \r\n \r\n \r\n \r\n
\r\n \r\n

Payment Calendar


\r\n
\r\n \r\n this.handleDateChange(value)} /> \r\n this.changeFilterValue('showSkipped', value)} />\r\n this.changeFilterValue('showPaid', value)} />\r\n \r\n
\r\n
\r\n {this.state.isLoading && \r\n \r\n }\r\n {!this.state.isLoading &&\r\n\r\n
\r\n \r\n Monday\r\n Tuesday\r\n Wednesday\r\n Thursday\r\n Friday\r\n Saturday\r\n Sunday\r\n \r\n {this.state.data && this.state.data.weeks.map((week, index) => {\r\n return (\r\n \r\n {week.days.map((item, index2) => {\r\n return \r\n
\r\n {item.isInSelectedMonth &&\r\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\nexport default ScheduleCalendar\r\n","import React from 'react'\r\nimport { Form } from 'react-bootstrap'\r\nimport ControlLabel from './controlLabel'\r\n\r\nclass RadioInput extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n selectedValue: this.props.value\r\n }\r\n }\r\n\r\n handleChange(value) {\r\n this.setState({\r\n selectedValue: value\r\n }, () => this.props.onChange(value))\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if(nextProps !== this.state) {\r\n this.setState({\r\n selectedValue: nextProps.value,\r\n })\r\n }\r\n }\r\n\r\n\r\n render() {\r\n\r\n\r\n\r\n return(\r\n \r\n
\r\n \r\n
\r\n {this.props.options.map((option, index) => {\r\n return \r\n { this.handleChange(option.value) }}\r\n \r\n /> \r\n \r\n }\r\n )\r\n }\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default RadioInput","import React from 'react'\r\nimport AuthorisedArea from '../../Helpers/AuthorisedArea'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport SelectInput from '../controls/selectInput'\r\nimport RadioInput from '../controls/radioInout'\r\nimport LineChart from '../charts/lineChart'\r\nimport { Consumer } from '../../context'\r\nimport LoaderDisplay from '../controls/loaderDisplay'\r\nimport { AccountTypes } from '../../Constants'\r\nimport moment from 'moment';\r\n\r\nclass BalanceForecast extends React.Component {\r\n\r\n constructor(props) {\r\n\r\n super(props)\r\n\r\n // If we want to default to a specific graph, we send isForecast asa Link parameter.\r\n const type = this.props.location?.state?.isForecast ? 1 : 2\r\n\r\n this.state = {\r\n selectedPeriod: 1,\r\n selectedAccountId: null,\r\n selectedType: type,\r\n accounts: [],\r\n datasets: [],\r\n isLoading: true\r\n }\r\n }\r\n\r\n populateData() {\r\n let history = null\r\n\r\n switch(this.state.selectedPeriod) {\r\n case 1: history = 30; break;\r\n case 2: history = 60; break;\r\n case 3: history = 90; break;\r\n case 4: history = 180; break;\r\n case 5: history = 365; break;\r\n case 6: history = 730; break;\r\n default: history = 730;\r\n }\r\n\r\n let functionName = null\r\n\r\n switch(this.state.selectedType) {\r\n case 1: functionName = this.context.getForecastBalanceReport; break\r\n case 2: functionName = this.context.getHistoricBalanceReport; break\r\n default: functionName = this.context.getForecastBalanceReport;\r\n }\r\n\r\n\r\n functionName(this.state.selectedAccountId, history)\r\n .then((data) => {\r\n const datasets = [\r\n {\r\n data: data\r\n .map((item) => { return { amount: item.balance, label: moment(new Date(item.date)).format(\"Do MMM\")} })\r\n }\r\n ]\r\n \r\n\r\n this.setState({\r\n datasets,\r\n isLoading: false\r\n })\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n this.context.getAllAccounts(false)\r\n .then((result) => {\r\n const accounts = result\r\n .filter(item => \r\n (item.isActive === true && item.accountType === AccountTypes.BANKACCOUNT) // Only active items\r\n )\r\n .sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n .map(item => ({ id: item.id, value: item.name }))\r\n this.setState({\r\n accounts\r\n })\r\n\r\n this.context.getDefaultAccount()\r\n .then((defaultAccountId) => {\r\n this.setState({\r\n selectedAccountId: defaultAccountId\r\n }, () => this.populateData())\r\n })\r\n })\r\n }\r\n \r\n\r\n onPeriodChange(value) {\r\n this.setState({\r\n selectedPeriod: value,\r\n isLoading: true\r\n }, () => this.populateData())\r\n\r\n }\r\n\r\n onChangeAccount(value) {\r\n this.setState({\r\n selectedAccountId: value,\r\n isLoading: true\r\n }, () => this.populateData())\r\n \r\n }\r\n\r\n handleTypeChange(value) {\r\n this.setState({\r\n isLoading: true,\r\n selectedType: value\r\n }, () => this.populateData())\r\n }\r\n\r\n render() {\r\n\r\n const periods = [\r\n {id: 1, value: \"1 Month\"},\r\n {id: 2, value: \"2 Months\"},\r\n {id: 3, value: \"3 Months\"},\r\n {id: 4, value: \"6 Months\"},\r\n {id: 5, value: \"1 Year\"},\r\n {id: 6, value: \"2 Year\"}\r\n ]\r\n\r\n const chartHolder = {\r\n height: \"50vh\",\r\n width: \"100%\"\r\n }\r\n\r\n\r\n\r\n\r\n const typeOptions = [\r\n {label: \"Forecast Balance\", value: 1},\r\n {label: \"Historical Balance\", value: 2 }\r\n ]\r\n\r\n const forceXZero = true;\r\n\r\n return(\r\n \r\n
\r\n \r\n \r\n

Balance Trend Report

\r\n
\r\n \r\n
\r\n \r\n \r\n this.handleTypeChange(value)} />\r\n \r\n \r\n this.onChangeAccount(value)} help=\"The account to forecast\" />\r\n \r\n \r\n this.onPeriodChange(value)} help=\"The period to project\" />\r\n \r\n \r\n
\r\n
\r\n
\r\n {this.state.isLoading && \r\n \r\n }\r\n {!this.state.isLoading && \r\n \r\n }\r\n
\r\n
\r\n\r\n
\r\n\r\n )\r\n }\r\n}\r\n\r\nBalanceForecast.contextType = Consumer\r\nexport default BalanceForecast","import React from 'react';\r\nimport { BarChart as BC, Bar, Cell, Rectangle, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';\r\nimport { ChartColours } from '../../Constants';\r\n\r\nclass BarChart extends React.Component {\r\n render() {\r\n\r\n // Function to darken a hex color\r\n const darkenColor = (hex, amt) => {\r\n hex = hex.slice(1);\r\n let num = parseInt(hex, 16);\r\n let r = (num >> 16) + amt;\r\n let g = ((num >> 8) & 0x00FF) + amt;\r\n let b = (num & 0x0000FF) + amt;\r\n\r\n let newColor = (\r\n 0x1000000 +\r\n (r < 255 ? (r < 1 ? 0 : r) : 255) * 0x10000 +\r\n (g < 255 ? (g < 1 ? 0 : g) : 255) * 0x100 +\r\n (b < 255 ? (b < 1 ? 0 : b) : 255)\r\n )\r\n .toString(16)\r\n .slice(1);\r\n return `#${newColor}`;\r\n };\r\n\r\n return (\r\n\r\n \r\n \r\n \r\n \r\n \r\n [`$${value.toFixed(2)}`]} />\r\n } >\r\n {this.props.data.datasets[0].data.map((entry, index) => (\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 BarChart;\r\n","import React from 'react'\r\nimport AuthorisedArea from '../../Helpers/AuthorisedArea'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport SelectInput from '../controls/selectInput'\r\nimport BarChart from '../charts/barChart'\r\nimport { Consumer } from '../../context'\r\nimport LoaderDisplay from '../controls/loaderDisplay'\r\nimport moment from 'moment';\r\n\r\nclass BudgetTrend extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n selectedBudgetTypeId: 1,\r\n selectedBudgetId: null,\r\n budgets: [],\r\n chartData: [],\r\n isLoading: true\r\n \r\n };\r\n }\r\n\r\n \r\n componentDidMount() {\r\n\r\n this.context.getBudgets()\r\n .then((data) => {\r\n const budgetList = data.sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n .map(item => ({ id: item.id, value: item.name }))\r\n this.setState({\r\n budgets: budgetList\r\n })\r\n \r\n })\r\n\r\n this.getBudgetReport()\r\n \r\n }\r\n\r\n getBudgetReport() {\r\n\r\n this.setState({\r\n isLoading: true\r\n })\r\n \r\n // A set of colours to use. Note, if there are more than 10 budgets, this will break! Need a method to loop.\r\n const backgroundColours = ['0, 135, 108', '89, 157, 113', '141, 179, 124', '189, 200, 142', '235, 221, 168', '230, 187, 127', '227, 150, 97', '222, 109, 82', '212, 61, 81']\r\n \r\n this.context.getBudgetReport(this.state.selectedBudgetTypeId, this.state.selectedBudgetId)\r\n .then((data) => {\r\n const chartData = {\r\n labels: data[0].instances.map((item) => { return `${moment(new Date(item.startDate)).format(\"Do MMM\")} to ${moment(new Date(item.endDate)).format(\"Do MMM\")}` }), // ['11.Jul', '12.Jun', '13.Jun', '14.Jun', '15.Jun', '16.Jun', '17.Jun', '18.Jun', '19.Jun', '20.Jun', '21.Jun','22.Jun', '23.Jun', '24.Jun', '25.Jun'],\r\n datasets: data.map((budget, index) => { \r\n return {\r\n label: budget.name,\r\n fill: true,\r\n stack: index,\r\n lineTension: 0.2,\r\n backgroundColor: `rgba(${backgroundColours[index]}, 0.3)`,\r\n borderColor: `rgba(${backgroundColours[index]}, 0.7)`,\r\n borderWidth: 1,\r\n hoverBackgroundColor: `rgba(${backgroundColours[index]}, 1)`,\r\n hoverBorderColor: `rgba(${backgroundColours[index]}, 0.7)`,\r\n borderCapStyle: 'butt',\r\n borderDash: [],\r\n borderDashOffset: 0.0,\r\n borderJoinStyle: 'miter',\r\n data: budget.instances\r\n .map((item) => { return { amount: item.percentageUsed, label: `${moment(new Date(item.startDate)).format(\"Do MMM\")} to ${moment(new Date(item.endDate)).format(\"Do MMM\")}` }})\r\n }\r\n })\r\n };\r\n\r\n this.setState({\r\n chartData,\r\n isLoading: false\r\n })\r\n })\r\n }\r\n\r\n handleTypeChange(value) {\r\n this.setState({ selectedBudgetTypeId: value }, () => this.getBudgetReport())\r\n }\r\n\r\n handleBudgetChange(value) {\r\n this.setState({ selectedBudgetId: value }, () => this.getBudgetReport())\r\n }\r\n\r\n render() {\r\n\r\n const BudgetTypes = [\r\n {id: 1, value: 'Weekly'},\r\n {id: 2, value: 'Monthly'}\r\n ]\r\n\r\n const chartHolder = {\r\n height: \"50vh\",\r\n width: \"100%\"\r\n }\r\n\r\n\r\n return(\r\n \r\n
\r\n \r\n \r\n

Budget Trend Report

\r\n
\r\n \r\n
\r\n \r\n \r\n this.handleTypeChange(value)} />\r\n \r\n \r\n this.handleBudgetChange(value)} />\r\n \r\n \r\n
\r\n
\r\n
\r\n {this.state.isLoading && \r\n \r\n }\r\n {!this.state.isLoading && \r\n \r\n }\r\n
\r\n
\r\n\r\n
\r\n )\r\n }\r\n}\r\n\r\nBudgetTrend.contextType = Consumer\r\nexport default BudgetTrend","import React from 'react';\r\nimport { PieChart, Pie, ResponsiveContainer, Tooltip, Cell } from 'recharts';\r\nimport { ChartColours } from '../../Constants';\r\n\r\nclass DoughnutChart extends React.Component {\r\n\r\n \r\n render() {\r\n \r\n // Function to darken a hex color\r\n const darkenColor = (hex, amt) => {\r\n hex = hex.slice(1);\r\n let num = parseInt(hex, 16);\r\n let r = (num >> 16) + amt;\r\n let g = ((num >> 8) & 0x00FF) + amt;\r\n let b = (num & 0x0000FF) + amt;\r\n\r\n let newColor = (\r\n 0x1000000 +\r\n (r < 255 ? (r < 1 ? 0 : r) : 255) * 0x10000 +\r\n (g < 255 ? (g < 1 ? 0 : g) : 255) * 0x100 +\r\n (b < 255 ? (b < 1 ? 0 : b) : 255)\r\n )\r\n .toString(16)\r\n .slice(1);\r\n return `#${newColor}`;\r\n };\r\n\r\n return (\r\n \r\n \r\n entry.label}\r\n nameKey=\"label\"\r\n\r\n >\r\n {this.props.data.datasets[0].data.map((entry, index) => (\r\n \r\n ))}\r\n \r\n [`$${value.toFixed(2)}`, props.payload.label]} />\r\n {/* */}\r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default DoughnutChart;","import React from 'react'\r\nimport AuthorisedArea from '../../Helpers/AuthorisedArea'\r\nimport { Row, Col } from 'react-bootstrap'\r\nimport DoughnutChart from '../charts/doughnutChart'\r\nimport { Consumer } from '../../context'\r\nimport LoaderDisplay from '../controls/loaderDisplay'\r\nimport DateInput from '../controls/dateInput'\r\nimport SelectInput from '../controls/selectInput'\r\nimport CheckboxInput from '../controls/checkboxInput'\r\n\r\nclass CategoryAmountReport extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n advancedSelection: false,\r\n selectedCategoryId: null,\r\n reportRange: 1,\r\n fromDate: null,\r\n toDate: null,\r\n chartData: [],\r\n isLoading: true\r\n };\r\n }\r\n\r\n \r\n componentDidMount() {\r\n\r\n this.getReport()\r\n \r\n }\r\n\r\n getReport() {\r\n\r\n this.setState({\r\n isLoading: true\r\n })\r\n \r\n // A set of colours to use. Note, if there are more than 10 budgets, this will break! Need a method to loop.\r\n const backgroundColours = [\r\n '0, 135, 108', \r\n '89, 157, 113', \r\n '141, 179, 124', \r\n '189, 200, 142', \r\n '235, 221, 168', \r\n '230, 187, 127', \r\n '227, 150, 97', \r\n '222, 109, 82', \r\n '212, 61, 81',\r\n '0, 135, 108',\r\n '93, 158, 138',\r\n '149, 180, 169',\r\n '201, 201, 201',\r\n '213, 159, 159',\r\n '216, 115, 119',\r\n '212, 61, 81',\r\n ]\r\n\r\n let history = 730\r\n\r\n switch(this.state.reportRange) {\r\n case 1: history = 30; break;\r\n case 2: history = 60; break;\r\n case 3: history = 90; break;\r\n case 4: history = 180; break;\r\n case 5: history = 365; break;\r\n default: history = 730;\r\n }\r\n\r\n this.context.getCategoryAmountReport(\r\n this.state.selectedCategoryId, \r\n this.state.advancedSelection ? this.state.fromDate : null, \r\n this.state.advancedSelection ? this.state.toDate: null, \r\n !this.state.advancedSelection ? history : null)\r\n .then((data) => {\r\n const chartData = {\r\n // labels: data\r\n // .sort(function(a, b) {\r\n // return (a.amount < b.amount) ? 1 : (a.amount > b.amount) ? -1 : 0;\r\n // })\r\n // .slice(0, 15)\r\n // .map((item, index) => { return `${item.category} - ${item.subcategory}`}),\r\n datasets: [\r\n {\r\n \r\n backgroundColor: backgroundColours.map((color) => `rgba(${color}, 0.3)`),\r\n borderColor: backgroundColours.map((color) => `rgba(${color}, 0.7)`),\r\n borderWidth: 1,\r\n hoverBackgroundColor: backgroundColours.map((color) => `rgba(${color}, 1)`),\r\n hoverBorderColor: backgroundColours.map((color) => `rgba(${color}, 0.7)`),\r\n data: data\r\n .sort(function(a, b) {\r\n return (a.amount < b.amount) ? 1 : (a.amount > b.amount) ? -1 : 0;\r\n })\r\n .slice(0, 15)\r\n .map((item) => { return { amount: item.amount, label: `${item.category} - ${item.subcategory}` }})\r\n }]\r\n };\r\n\r\n this.setState({\r\n chartData,\r\n isLoading: false\r\n })\r\n })\r\n }\r\n\r\n handleChange(fieldName, value) {\r\n this.setState({ [fieldName]: value }, () => this.getReport())\r\n }\r\n\r\n render() {\r\n\r\n const chartHolder = {\r\n height: \"50vh\",\r\n width: \"100%\"\r\n }\r\n\r\n const periods = [\r\n {id: 1, value: \"Past month\"},\r\n {id: 2, value: \"Past 2 months\"},\r\n {id: 3, value: \"Past 3 Months\"},\r\n {id: 4, value: \"Past 6 Months\"},\r\n {id: 5, value: \"Past 1 Year\"}\r\n ]\r\n\r\n\r\n return(\r\n \r\n
\r\n \r\n \r\n

Category Amount Report

\r\n
\r\n \r\n
\r\n \r\n \r\n this.handleChange('advancedSelection', value)} />\r\n \r\n {this.state.advancedSelection === false &&\r\n \r\n this.handleChange('reportRange', value)} options={periods} />\r\n \r\n }\r\n {this.state.advancedSelection &&\r\n \r\n \r\n this.handleChange('fromDate', value)} />\r\n \r\n \r\n this.handleChange('toDate', value)} />\r\n \r\n \r\n }\r\n \r\n
\r\n
\r\n
\r\n {this.state.isLoading && \r\n \r\n }\r\n {!this.state.isLoading && \r\n \r\n }\r\n
\r\n
\r\n\r\n
\r\n )\r\n }\r\n}\r\n\r\nCategoryAmountReport.contextType = Consumer\r\nexport default CategoryAmountReport","import React from 'react'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport {Row, Col} from 'react-bootstrap'\r\nimport SelectInput from './controls/selectInput'\r\nimport {Consumer} from '../context'\r\nimport LoaderDisplay from './controls/loaderDisplay'\r\nimport {AccountTypes, ButtonIcons} from '../Constants'\r\nimport DateInput from './controls/dateInput'\r\nimport CheckboxInput from './controls/checkboxInput'\r\nimport ReactGA from 'react-ga';\r\nimport CurrencyInput from \"./controls/currencyInput\";\r\nimport TextInput from \"./controls/textInput\";\r\nimport Moment from \"react-moment\";\r\nimport RadioInput from \"./controls/radioInout\";\r\nimport AccountsEditor from \"./subcomponents/accountsEditor\";\r\nimport Button from './controls/button'\r\nimport BudgetEditor from './subcomponents/budgetEditor'\r\nimport CategoryEditor from './subcomponents/categoryEditor'\r\nimport MultiSelectInput from './controls/multiSelectInput'\r\nimport { withToastManager, } from 'react-toast-notifications';\r\n\r\nclass TransactionSearch extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n tags: [],\r\n\r\n dateTypesSelection: 0,\r\n amountTypeSelection: 0,\r\n accountFilter: false,\r\n subCategorySelection: false,\r\n\r\n fromDate: null,\r\n toDate: null,\r\n exactDate: null,\r\n datePeriod: 0,\r\n\r\n exactValueOption: false,\r\n valueRangeOption: false,\r\n\r\n includeDeleted: false,\r\n creditAccountId: null,\r\n debitAccountId: null,\r\n description: null,\r\n minValue: null,\r\n maxValue: null,\r\n exactValue: null,\r\n subCategoryId: null,\r\n selectedCategoryId: null,\r\n selectedSubCategoryId: null,\r\n selectedBudgetId: null,\r\n accounts: [],\r\n isLoading: false,\r\n selectedDebitAccountId: null,\r\n selectedCreditAccountId : null,\r\n\r\n transactions: [],\r\n\r\n bulkUpdateTags: [],\r\n bulkUpdateAmount: null,\r\n bulkUpdateTransactionDate: null,\r\n bulkUpdateDescription: null,\r\n bulkUpdateSubCategoryId: null,\r\n bulkUpdateBudgetId: null,\r\n bulkUpdateTransactionIds: []\r\n }\r\n\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n const entries = Array.from(params.entries());\r\n\r\n // Get the available tags for the user to populate the list of tags that the user can select.\r\n this.context.getTags(false)\r\n .then((tags) => {\r\n this.setState({\r\n tags: tags.sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n .map(item => (\r\n { value: item.id, label: item.name }\r\n ))\r\n })\r\n })\r\n\r\n\r\n // Combine entries into a single object\r\n const newState = entries.reduce((acc, [key, value]) => {\r\n if ((key === \"exactDate\" || key === \"toDate\" || key === \"fromDate\") && value !== null) {\r\n acc[key] = new Date(value); // Convert date string to Date object\r\n } else if ((key === \"dateTypesSelection\" || key === \"amountTypeSelection\") && value!== null) {\r\n acc[key] = parseInt(value, 10); // Convert value to an integer\r\n } else if ((key === \"minValue\" || key === \"maxValue\" || key === \"exactValue\") && value!== null) {\r\n acc[key] = parseFloat(value); // Convert value to an integer\r\n } else {\r\n acc[key] = value; // Keep other values as they are\r\n }\r\n return acc;\r\n }, {});\r\n\r\n\r\n console.log(\"New state\", newState)\r\n this.setState(newState);\r\n\r\n ReactGA.pageview(window.location.pathname);\r\n this.context.getAllAccounts(false)\r\n .then((result) => {\r\n const accounts = result\r\n .filter(item =>\r\n (item.isActive === true && item.accountType === AccountTypes.THIRDPARTY) // Only active items\r\n )\r\n .sort(function (a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n .map(item => ({id: item.id, value: item.name}))\r\n this.setState({\r\n accounts\r\n })\r\n })\r\n }\r\n\r\n\r\n handleChange(fieldName, value) {\r\n this.setState({\r\n [fieldName]: value,\r\n })\r\n\r\n }\r\n\r\n handleSearch() {\r\n this.setState({\r\n isLoading: true\r\n })\r\n console.log(this.state)\r\n\r\n const searchRequest = {\r\n description: this.state.description,\r\n creditAccountId: this.state.accountFilter ? this.state.creditAccountId : null,\r\n debitAccountId: this.state.accountFilter ? this.state.debitAccountId : null,\r\n subCategoryId: this.state.subCategorySelection ? this.state.subCategoryId : null,\r\n maxValue: this.state.amountTypeSelection === 2 ? this.state.maxValue : null,\r\n minValue: this.state.amountTypeSelection === 2 ? this.state.minValue : null,\r\n exactValue: this.state.amountTypeSelection === 1 ? this.state.exactValue : null,\r\n exactDate: this.state.dateTypesSelection === 1 ? this.state.exactDate : null,\r\n fromDate: this.state.dateTypesSelection === 2 ? this.state.fromDate : null,\r\n toDate: this.state.dateTypesSelection === 2 ? this.state.toDate : null\r\n }\r\n\r\n const params = new URLSearchParams()\r\n if (this.state.description) {\r\n params.append(\"description\", this.state.description)\r\n } else {\r\n params.delete(\"description\")\r\n }\r\n\r\n if (this.state.includeDeleted) {\r\n params.append(\"includeDeleted\", \"true\")\r\n } else {\r\n params.delete(\"includeDeleted\")\r\n }\r\n\r\n if(this.state.subCategorySelection) {\r\n if(this.state.subCategoryId !== null)\r\n params.append(\"subCategoryId\", this.state.subCategoryId)\r\n else\r\n params.delete(\"suCategoryId\")\r\n }\r\n else {\r\n params.delete(\"subCategoryId\")\r\n }\r\n\r\n if(this.state.accountFilter) {\r\n\r\n if(this.state.creditAccountId !== null)\r\n params.append(\"creditAccountId\", this.state.creditAccountId)\r\n else \r\n params.delete(\"creditAccountId\")\r\n\r\n if(this.state.debitAccountId !== null)\r\n params.append(\"debitAccountId\", this.state.debitAccountId)\r\n else \r\n params.delete(\"debitAccountId\")\r\n }\r\n else {\r\n params.delete(\"debitAccountId\")\r\n params.delete(\"creditAccountId\")\r\n }\r\n\r\n\r\n if (this.state.dateTypesSelection === 1) {\r\n params.append(\"exactDate\", this.state.exactDate)\r\n } else {\r\n params.delete(\"exactDate\")\r\n }\r\n\r\n params.append(\"dateTypesSelection\", this.state.dateTypesSelection)\r\n params.append(\"amountTypeSelection\", this.state.amountTypeSelection)\r\n params.append(\"accountFilter\", this.state.accountFilter)\r\n params.append(\"subCategorySelection\", this.state.subCategorySelection)\r\n\r\n if (this.state.dateTypesSelection === 2) {\r\n if(this.state.fromDate) params.append(\"fromDate\", this.state.fromDate)\r\n if(this.state.toDate) params.append(\"toDate\", this.state.toDate)\r\n\r\n } else {\r\n params.delete(\"fromDate\")\r\n params.delete(\"toDate\")\r\n }\r\n\r\n if (this.state.amountTypeSelection === 1) {\r\n params.append(\"exactValue\", this.state.exactValue)\r\n } else {\r\n params.delete(\"exactValue\")\r\n }\r\n\r\n if (this.state.amountTypeSelection === 2) {\r\n if(this.state.minValue) params.append(\"minValue\", this.state.minValue)\r\n if(this.state.maxValue) params.append(\"maxValue\", this.state.maxValue)\r\n } else {\r\n params.delete(\"minValue\")\r\n params.delete(\"maxValue\")\r\n }\r\n\r\n\r\n this.props.history.push({search: params.toString()})\r\n\r\n\r\n this.context.transactionSearch(searchRequest)\r\n .then((data) => {\r\n console.log(data.data)\r\n this.setState({\r\n transactions: data.data,\r\n isLoading: false\r\n })\r\n })\r\n }\r\n\r\n onSelect(transactionId) {\r\n this.props.history.push(`/transaction/${transactionId}`);\r\n }\r\n\r\n handleCheckboxChange = (id) => {\r\n this.setState((prevState) => {\r\n const { bulkUpdateTransactionIds } = prevState;\r\n if (bulkUpdateTransactionIds.includes(id)) {\r\n // If the ID is already in the array, remove it\r\n return { bulkUpdateTransactionIds: bulkUpdateTransactionIds.filter((item) => item !== id) };\r\n } else {\r\n // Otherwise, add it\r\n return { bulkUpdateTransactionIds: [...bulkUpdateTransactionIds, id] };\r\n }\r\n });\r\n };\r\n\r\n handleBulkUpdate() {\r\n\r\n this.setState({ isLoading : true });\r\n const tagIds = this.state.bulkUpdateTags?.map(item => (item.value))\r\n\r\n console.log(this.state)\r\n\r\n const payload = {\r\n tagIds: tagIds,\r\n transactionAmount: this.state.bulkUpdateAmount,\r\n transactionDate: this.state.bulkUpdateTransactionDate,\r\n description: this.state.bulkUpdateDescription,\r\n subCategoryId: this.state.bulkUpdateSubCategoryId,\r\n budgetId: this.state.bulkUpdateBudgetId,\r\n transactionIds: this.state.bulkUpdateTransactionIds\r\n }\r\n const { toastManager } = this.props;\r\n\r\n this.context.bulkUpdateTransactions(payload)\r\n .then((result) => {\r\n this.setState({ isLoading : false })\r\n console.log(\"Result\", result)\r\n\r\n if(result.ok === false) {\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n return \r\n } else {\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n\r\n this.handleSearch();\r\n }\r\n\r\n })\r\n }\r\n\r\n handleClear() {\r\n console.log(\"Clear\")\r\n this.setState({\r\n bulkUpdateTags: [],\r\n bulkUpdateAmount: null,\r\n bulkUpdateTransactionDate: null,\r\n bulkUpdateDescription: \"\",\r\n bulkUpdateSubCategoryId: null,\r\n bulkUpdateBudgetId: null\r\n })\r\n }\r\n\r\n render() {\r\n\r\n const periods = [\r\n {id: 0, value: \"All\"},\r\n {id: 1, value: \"Past month\"},\r\n {id: 2, value: \"Past 2 months\"},\r\n {id: 3, value: \"Past 3 Months\"},\r\n {id: 4, value: \"Past 6 Months\"},\r\n {id: 5, value: \"Past 1 Year\"},\r\n ]\r\n\r\n const dateTypes = [\r\n {label: \"None\", value: 0},\r\n {label: \"Exact Date\", value: 1},\r\n {label: \"Date Range\", value: 2},\r\n {label: \"Date Period\", value: 3},\r\n\r\n ]\r\n\r\n const amountTypes = [\r\n {label: \"None\", value: 0},\r\n {label: \"Exact Amount\", value: 1},\r\n {label: \"Amount Range\", value: 2},\r\n ]\r\n\r\n const itemStyle = {\r\n cursor: \"pointer\"\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n

Transaction Search

\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n this.handleChange('includeDeleted', value)}/>\r\n \r\n \r\n \r\n \r\n this.handleChange('accountFilter', value)}\r\n />\r\n \r\n {this.state.accountFilter &&\r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n this.handleChange('subCategorySelection', value)}/>\r\n \r\n {this.state.subCategorySelection &&\r\n \r\n this.handleChange(\"subCategoryId\", value)} \r\n isViewMode ={false}\r\n />\r\n \r\n }\r\n \r\n \r\n \r\n this.handleChange(\"dateTypesSelection\", value)}/>\r\n \r\n\r\n {this.state.dateTypesSelection === 1 &&\r\n \r\n this.handleChange('exactDate', value)}/>\r\n \r\n }\r\n {this.state.dateTypesSelection === 2 &&\r\n \r\n \r\n this.handleChange('fromDate', value)}/>\r\n \r\n \r\n this.handleChange('toDate', value)}/>\r\n \r\n \r\n }\r\n {this.state.dateTypesSelection === 3 &&\r\n \r\n this.handleChange('datePeriod', value)}\r\n options={periods}/>\r\n \r\n }\r\n \r\n \r\n \r\n this.handleChange(\"amountTypeSelection\", value)}/>\r\n \r\n\r\n {this.state.amountTypeSelection === 1 &&\r\n \r\n this.handleChange(\"exactValue\", value)}/>\r\n \r\n }\r\n\r\n\r\n {this.state.amountTypeSelection === 2 &&\r\n \r\n \r\n this.handleChange(\"minValue\", value)}/>\r\n \r\n \r\n this.handleChange(\"maxValue\", value)}/>\r\n \r\n \r\n }\r\n \r\n \r\n \r\n this.handleChange(\"description\", value)}\r\n placeholder={\"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
Bulk Update
\r\n \r\n
\r\n \r\n \r\n this.handleChange('bulkUpdateTransactionDate', value)}/>\r\n \r\n \r\n this.handleChange(\"bulkUpdateAmount\", value)}/>\r\n \r\n \r\n \r\n \r\n this.handleChange(\"bulkUpdateDescription\", value)}\r\n placeholder={\"New Description\"}\r\n />\r\n \r\n \r\n \r\n \r\n this.handleChange(\"bulkUpdateSubCategoryId\", value)} \r\n isViewMode ={this.props.isViewMode}\r\n />\r\n \r\n \r\n \r\n \r\n this.handleChange(\"bulkUpdateBudgetId\", value)}\r\n isViewMode={this.props.isViewMode}\r\n />\r\n \r\n \r\n \r\n \r\n this.handleChange(\"bulkUpdateTags\", values)}\r\n isViewMode = {this.state.isViewMode}\r\n />\r\n \r\n \r\n
\r\n
\r\n {this.state.isLoading &&\r\n \r\n }\r\n {!this.state.isLoading && this.state.transactions.length === 0 &&\r\n

No Transactions meet this search request

\r\n }\r\n {!this.state.isLoading && this.state.transactions.length > 0 &&\r\n \r\n \r\n Transaction Date\r\n Description\r\n Transaction\r\n Transaction Value\r\n\r\n \r\n {this.state.transactions.map((item, index) =>\r\n this.onSelect(item.id)} className=\"tableViewRowStyle\" style={itemStyle}>\r\n \r\n {item.date}\r\n

{item.transactionType}

\r\n \r\n \r\n {item.description}\r\n

{item.tags?.map(x=> x.name).join(\", \")}

\r\n \r\n \r\n {item.debitAccountName} to {item.creditAccountName}\r\n

\r\n \r\n {item.transactionLines.map(x=> x.categoryName + ': ' + x.subCategoryName + (x.budgetId ? \" (\" + x.budget + \")\" : \"\")).join(\", \")}\r\n \r\n

\r\n \r\n \r\n {item.amount.toFixed(2)}\r\n this.handleCheckboxChange(item.id)} // Handle checkbox change\r\n onClick={(e) => e.stopPropagation()} // Stop the event propagation\r\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\nTransactionSearch.contextType = Consumer\r\nexport default withToastManager(TransactionSearch)","import React from 'react'\r\nimport { withRouter } from 'react-router-dom';\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport { Col, Row } from 'react-bootstrap'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport TextInput from './controls/textInput'\r\nimport { Consumer } from '../context'\r\nimport LoaderDisplay from './controls/loaderDisplay'\r\nimport ReactGA from 'react-ga';\r\nimport Button from '../components/controls/button'\r\n\r\nclass Security extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n currentPassword: null,\r\n newPassword: null,\r\n retypePassword: null\r\n }\r\n\r\n this.onChange = this.onChange.bind(this)\r\n this.onSave = this.onSave.bind(this)\r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n }\r\n\r\n\r\n onChange(fieldName, value) {\r\n this.setState( {\r\n [fieldName] : value\r\n })\r\n }\r\n\r\n\r\n onSave() {\r\n\r\n const { toastManager } = this.props;\r\n if(!this.state.newPassword || this.state.newPassword !== this.state.retypePassword) {\r\n toastManager.add(\"New password validation failed\", {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n return;\r\n\r\n }\r\n\r\n\r\n const request = {\r\n currentPassword: this.state.currentPassword,\r\n newPassword: this.state.newPassword,\r\n }\r\n\r\n this.context.changePassword(request)\r\n .then((result) => {\r\n if(result.ok) {\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n this.props.history.goBack()\r\n return\r\n \r\n }\r\n\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n })\r\n }\r\n\r\n\r\n render() {\r\n if(this.state.isLoading)\r\n return \r\n\r\n const cancelClick = () => {\r\n this.props.history.goBack();\r\n }\r\n\r\n const buttonSpacingStyle = {\r\n padding: \"4px\",\r\n float: \"left\"\r\n }\r\n \r\n const buttonBarStyle = {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\"\r\n }\r\n // Can we enable the save button?\r\n const isValid = this.state.newPassword && \r\n (this.state.newPassword === this.state.retypePassword) &&\r\n this.state.currentPassword\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n
User Security
\r\n
\r\n \r\n
\r\n \r\n \r\n this.onChange('currentPassword', value)}\r\n />\r\n \r\n \r\n \r\n \r\n this.onChange('newPassword', value)}\r\n />\r\n \r\n \r\n this.onChange('retypePassword', value)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n )\r\n }\r\n}\r\n\r\nSecurity.contextType = Consumer\r\nexport default withRouter(withToastManager(Security))","import React from 'react';\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport { Row, Col, } from 'react-bootstrap'\r\nimport TextInput from './controls/textInput'\r\nimport CheckboxInput from './controls/checkboxInput'\r\nimport { Consumer } from '../context'\r\nimport { withRouter } from 'react-router-dom';\r\nimport LoaderDisplay from '../components/controls/loaderDisplay'\r\nimport ReactGA from 'react-ga';\r\nimport { AccountTypes, ButtonIcons } from '../Constants';\r\nimport Button from './controls/button'\r\n\r\nclass ThirdParties extends React.Component {\r\n static contextType = Consumer\r\n\r\n constructor(props, context) {\r\n super(props)\r\n this.context = context\r\n this.state = {\r\n isLoading: true,\r\n searchString: null,\r\n thirdparties: null,\r\n includeInactive: false\r\n }\r\n\r\n this.onChange = this.onChange.bind(this);\r\n this.onSelect = this.onSelect.bind(this);\r\n this.search = this.search.bind(this);\r\n this.updateList = this.updateList.bind(this);\r\n }\r\n\r\n\r\n onChange(value) {\r\n this.props.history.push(`/accounts/${value}`)\r\n\r\n this.setState({\r\n selectedTypeId: value,\r\n }, () => this.updateList())\r\n }\r\n\r\n updateList() {\r\n this.context.getAllAccounts(false)\r\n .then((result) => {\r\n const thirdparties = result\r\n .filter(item => item.accountType === AccountTypes.THIRDPARTY)\r\n .filter(item => item.name.toLowerCase().includes(this.state.searchString && this.state.searchString.toLowerCase()) || !this.state.searchString )\r\n .sort(function(a, b) {\r\n const textA = a.name.toUpperCase();\r\n const textB = b.name.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n })\r\n\r\n this.setState({\r\n thirdparties,\r\n isLoading: false\r\n })\r\n })\r\n }\r\n\r\n\r\n onSelect(id) {\r\n this.props.history.push(`/thirdparty/${id}`);\r\n }\r\n\r\n search(text) {\r\n this.setState({\r\n searchString: text\r\n }, () => this.updateList())\r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n this.updateList()\r\n }\r\n\r\n\r\n render() {\r\n\r\n // Grab the selected AccountId from the state. If the Link property passed the data, use it.\r\n console.log(this.state.thirdparties)\r\n const itemStyle = {\r\n cursor: \"pointer\"\r\n }\r\n\r\n \r\n const buttonBarStyle = {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\"\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n this.search(value)}\r\n placeholder=\"Search Text\"\r\n label=\"Search\"\r\n />\r\n\r\n \r\n \r\n this.setState({ includeInactive: value})}\r\n label=\"Include Inactive\"\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.state.isLoading && \r\n \r\n } \r\n {!this.state.isLoading && \r\n
\r\n \r\n \r\n \r\n Name\r\n Transaction Value\r\n Favourite\r\n Quick\r\n Quick\r\n Default Category\r\n \r\n {this.state.thirdparties.length === 0 &&\r\n
No accounts available
\r\n }\r\n {this.state.thirdparties\r\n .filter((item) => this.state.includeInactive || item.isActive === true)\r\n .map((item, index) => \r\n this.onSelect(item.id)} \r\n className=\"tableViewRowStyle\" \r\n style={itemStyle} \r\n >\r\n \r\n
{item.name}
\r\n
\r\n {item.defaultSubcategory &&\r\n ` ${item.defaultCategory} / ${item.defaultSubcategory}`\r\n }{!item.defaultSubcategory &&\r\n --\r\n }\r\n
\r\n \r\n {Number.parseFloat(item.balance).toFixed(2)}\r\n \r\n {item.isActive && }\r\n \r\n {item.isFavourite && {ButtonIcons.YES} }\r\n {item.canQuickTransaction && {ButtonIcons.YES} }\r\n {item.defaultBudget}\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(ThirdParties);","import React from 'react'\r\nimport AuthorisedArea from '../Helpers/AuthorisedArea'\r\nimport { Col, Row } from 'react-bootstrap'\r\nimport TextInput from './controls/textInput'\r\nimport CheckboxInput from './controls/checkboxInput'\r\nimport CategoryEditor from './subcomponents/categoryEditor'\r\nimport BudgetEditor from './subcomponents/budgetEditor'\r\nimport { Consumer } from '../context'\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport LoaderDisplay from './controls/loaderDisplay';\r\nimport ReactGA from 'react-ga';\r\nimport Moment from 'react-moment'\r\nimport Button from './controls/button'\r\nimport { ButtonIcons } from '../Constants'\r\n\r\n\r\nclass ThirdParty extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n\r\n let account = {\r\n id: null,\r\n name: null,\r\n accountTypeId: null,\r\n date: Date.now(),\r\n openingBalance: null,\r\n defaultSubCategoryId: null,\r\n defaultBudgetId: null,\r\n isActive: true,\r\n isFavourite: false,\r\n canQuickTransaction: false,\r\n }\r\n\r\n this.state = {\r\n account,\r\n isLoading: false,\r\n transactions: [],\r\n isBusy: false\r\n \r\n }\r\n\r\n this.saveAccount = this.saveAccount.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n ReactGA.pageview(window.location.pathname);\r\n const selectedId = this.props.match.params.id\r\n if(selectedId) {\r\n this.setState({\r\n isLoading: true\r\n })\r\n \r\n const transactionRequest = {\r\n accountId: selectedId,\r\n }\r\n\r\n this.context.getTransactions(transactionRequest)\r\n .then((data) => {\r\n this.setState({\r\n transactions: data\r\n })\r\n })\r\n\r\n this.context.getAccount(selectedId)\r\n .then((result) => {\r\n const account = {\r\n name: result.name,\r\n accountTypeId: result.accountType,\r\n date: result.date,\r\n openingDate: result.openingDate,\r\n openingBalance: result.openingBalance,\r\n defaultSubCategoryId: result.defaultSubcategoryId,\r\n defaultBudgetId: result.defaultBudgetId,\r\n isActive: result.isActive,\r\n id: result.id,\r\n isFavourite: result.isFavourite,\r\n canQuickTransaction: result.canQuickTransaction\r\n }\r\n this.setState(\r\n {\r\n account, \r\n isLoading: false\r\n })\r\n })\r\n }\r\n }\r\n\r\n onChange(controlName, value) {\r\n const account = this.state.account\r\n account[controlName] = value\r\n this.setState({\r\n account\r\n })\r\n }\r\n\r\n onSelect(transactionId) {\r\n this.props.history.push(`/transaction/${transactionId}`);\r\n }\r\n\r\n saveAccount() {\r\n this.setState({\r\n isBusy: true\r\n })\r\n\r\n const { toastManager } = this.props;\r\n this.context.saveAccount(this.state.account)\r\n .then((result) => { \r\n if(result.ok) {\r\n this.props.history.goBack();\r\n toastManager.add(`${this.state.account.name}, Saved Successfully.`, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n else {\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n return \r\n }\r\n })\r\n }\r\n\r\n handleCancel() {\r\n const { toastManager } = this.props;\r\n this.props.history.goBack();\r\n toastManager.add(`No changes were made.`, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n\r\n handleDelete() {\r\n this.setState({\r\n isBusy: true\r\n })\r\n \r\n this.context.deleteAccount(this.state.account.id)\r\n .then((result) => {\r\n const { toastManager } = this.props;\r\n if(result.ok) {\r\n this.props.history.goBack();\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n else {\r\n toastManager.add(result.message, {\r\n appearance: 'error',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n }\r\n })\r\n }\r\n\r\n\r\n render() {\r\n\r\n if(this.state.isLoading) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n const deleteAllowed = (this.state.transactions.length === 0 && this.state.account.id != null)\r\n\r\n const buttonSpacingStyle = {\r\n padding: \"4px\",\r\n float: \"left\"\r\n }\r\n \r\n const buttonBarStyle = {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\"\r\n }\r\n\r\n\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n this.onChange('name', value)}\r\n /> \r\n \r\n \r\n \r\n \r\n this.onChange('isActive', value)}\r\n help=\"Account is active\"\r\n />\r\n \r\n \r\n this.onChange('canQuickTransaction', value)}\r\n help=\"Enable Quick Transactions\"\r\n />\r\n \r\n \r\n \r\n \r\n this.onChange('defaultSubCategoryId', value)}\r\n value={this.state.account.defaultSubCategoryId}\r\n />\r\n \r\n \r\n \r\n \r\n this.onChange('defaultBudgetId', value)}\r\n value={this.state.account.defaultBudgetId}\r\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
Recent Transactions
\r\n
\r\n\r\n {this.state.transactions\r\n .map((item, index) => {\r\n const formattedDate = {item.transactionDate};\r\n const itemStyle = {\r\n cursor: \"pointer\"\r\n }\r\n\r\n let description\r\n let amount\r\n\r\n if(item.debitAccountId === this.state.account.id) {\r\n description = \r\n
Deposit into
\r\n
{item.creditAccountName}
\r\n
\r\n \r\n amount = {Number.parseFloat(item.amount).toFixed(2)}\r\n }\r\n else \r\n {\r\n description = \r\n
Payment from
\r\n
{item.debitAccountName}
\r\n
\r\n amount = {Number.parseFloat(item.amount).toFixed(2)}\r\n }\r\n \r\n return (\r\n \r\n this.onSelect(item.id)} className=\"tableViewRowStyle\" style={itemStyle}>\r\n {formattedDate}\r\n \r\n {description}\r\n \r\n {item.description}\r\n \r\n
\r\n {item.subCategoryName}\r\n
\r\n
\r\n {item.budgetName}\r\n
\r\n \r\n \r\n {amount}\r\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\nThirdParty.contextType = Consumer\r\nexport default withToastManager(ThirdParty)","import React from 'react'\r\n\r\nclass EmailValidation extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n id: this.props.match.params.id\r\n }\r\n\r\n }\r\n\r\n\r\n render() {\r\n\r\n return(\r\n
\r\n Email Validation. {this.state.id}\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default EmailValidation;","import React from 'react'\r\nimport {Row, Col} from 'react-bootstrap'\r\nimport Button from '../components/controls/button'\r\nimport { ButtonIcons } from '../Constants'\r\nimport { withRouter } from 'react-router-dom';\r\nimport { withToastManager, } from 'react-toast-notifications';\r\nimport { Consumer } from '../context'\r\nimport Moment from 'react-moment'\r\n\r\n\r\n\r\n\r\nclass Import extends React.Component {\r\n\r\n static contextType = Consumer;\r\n\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n isBusy: false,\r\n selectedFile: null,\r\n data: []\r\n }\r\n }\r\n\r\n onChangeFileHandler(event) {\r\n event.preventDefault();\r\n this.setState({\r\n selectedFile: event.target.files[0]\r\n })\r\n }\r\n\r\n match() {\r\n \r\n }\r\n\r\n handleUpload() {\r\n\r\n const formData = new FormData() \r\n formData.append('formFile', this.state.selectedFile)\r\n formData.append('accountId', '6598d057-e617-437a-af81-aafacdff43cc')\r\n \r\n this.context.matchTransactions('6598d057-e617-437a-af81-aafacdff43cc', formData)\r\n .then((result) => {\r\n const { toastManager } = this.props;\r\n \r\n if(result) {\r\n toastManager.add(result.message, {\r\n appearance: 'success',\r\n autoDismiss: true,\r\n pauseOnHover: false,\r\n });\r\n } \r\n this.setState({\r\n uploadVisible: false,\r\n data: result.data\r\n })\r\n })\r\n }\r\n\r\n render() {\r\n\r\n const nowrap = {\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\"\r\n }\r\n\r\n const buttonSpacingStyle = {\r\n padding: \"4px\",\r\n float: \"left\"\r\n }\r\n \r\n return (\r\n \r\n

Import

\r\n\r\n \r\n \r\n this.onChangeFileHandler(e)}/>\r\n \r\n \r\n \r\n\r\n