{"version":3,"sources":["store/index.ts","components/SideMenuItem.tsx","components/SideMenuSubItem.tsx","components/SideMenu.tsx","RioContext.tsx","components/Layout.tsx","helpers/RioHttpErrorHelper.ts","modals/RioErrorModal.tsx","apiModels/customercategorydistribution/distributionGraphFilterApiModel.ts","views/CustomerCategoryDistribution.tsx","apiModels/customer/customerSearchApiModel.ts","components/Select.tsx","views/CustomerSearch.tsx","apiLayer/BaseApi.tsx","apiLayer/DeliveryEstimateApi.tsx","apiModels/DeliveryEstimate/deliveryEstimateApiModel.ts","apiModels/DeliveryEstimate/deliveryEstimateResultApiModel.ts","views/DeliveryEstimate.tsx","apiModels/Report/GrossMarginReportCriteriaApiModel.ts","views/GrossMarginReport.tsx","apiModels/user/baseUserLoginViewModel.ts","views/Login.tsx","apiModels/user/basePasswordResetViewModel.ts","views/PasswordReset.tsx","apiLayer/productCodeApi.tsx","apiModels/ProductCode/productCodePrefixApiModel.ts","apiModels/ProductCode/productCodePrefixSuffixApiModel.ts","views/ProductCodeGenerator.tsx","apiModels/repair/customerCategoryDistributionCacheRefreshApiModel.ts","apiModels/repair/customerCategoryRepairApiModel.ts","views/Repair.tsx","apiLayer/UserApi.tsx","apiModels/user/userApiModel.ts","modals/UserAddUpdate.tsx","views/Users.tsx","apiLayer/FinancialYearApi.tsx","apiModels/FinancialYear/FinancialYearApiModel.ts","modals/FinancialYearAddUpdateModal.tsx","views/FinancialYears.tsx","App.tsx","registerServiceWorker.ts","index.tsx","store/configureStore.ts"],"names":["reducers","RioSideMenuItem","resource","RioResources","find","this","props","item","resourceName","className","active","data-menu","menuItem","onClick","itemClicked","html","image","text","React","RioSideMenuSubItem","handleMouseUp","bind","childItems","length","items","perform","itemMiddleClicked","key","menuItemID","onMouseUp","e","button","preventDefault","RioSideMenu","state","loading","open","pinnedMenuItem","menuItems","classes","push","join","condition","then","Spinner","otherwise","id","on","handlePinClick","currentMenuItem","handleSideMenuItemClicked","handleSideMenuItemMiddleClicked","handleSideMenuSubItemClicked","handleSideMenuSubItemMiddleClicked","loadMenu","call","RioApiGet","menuEndpoint","setState","onDone","response","success","element","send","setPinnedMenuItem","controllerAction","history","startsWith","newCurrentMenuItem","window","generateUrl","controller","replace","RioRoutedSideMenu","withRouter","GlobalContext","createContext","Layout","localStorage","getItem","showUserDropdownMenu","to","src","alt","Consumer","globals","handleUserDropdownClicked","user","firstName","charAt","lastName","menuItemEndpoint","show","children","href","target","rel","version","setItem","removeItem","HttpErrorHelper","component","validator","errors","addModelErrors","statusCode","toString","ErrorModal","visible","onCancel","onErrorModalClosed","expandedDefault","disableToggle","hasPermission","DistributionGraphFilterApiModel","dateFrom","today","Date","year","getFullYear","getMonth","RioDateHelpers","parseOutputDate","CustomerCategoryDistribution","RioValidator","dateFromDatePicker","chartColors","filterParams","distributionGraphData","Chart","global","elements","line","tension","getGraph","RioApiPost","ref","name","from","onChange","date","handleDateFromChanged","nullable","time","minDate","renderCustomerCategoryDistributionChart","dataSets","datasets","i","label","dataSetNames","data","borderColor","pointBackgroundColor","pointBorderColor","fill","hidden","labels","options","responsive","maintainAspectRatio","scales","xAxes","ticks","autoSkip","maxTicksLimit","CustomerSearchApiModel","accountNo","brandId","categoryIDs","RioSelect","input","focusedOptionDiv","blurred","focused","suggestions","focusedOption","value","validations","register","unregister","handleInputLoaded","handleInputUnloaded","inputValue","getCurrentText","hasValidationErrors","submitAttempted","getErrors","disabled","current","focus","onFocus","handleInputFocused","onBlur","handleInputBlurred","handleInputChanged","autoComplete","onKeyDown","handleKeyPressed","renderOptions","hideValidationText","error","defaultSelectOptionOverride","descriptionSelector","defaultMultipleSelectOptionOverride","shouldRenderCheckboxes","showCheckboxes","isMultiSelect","keySelector","onMouseDown","handleSuggestionSelected","x","selectionStart","selectionEnd","getSuggestions","validate","newValue","currentTarget","newFocused","index","keyCode","findIndex","scrollToFocused","scrollIntoView","block","trim","searchValue","RioStringHelpers","removeDiacritics","toLowerCase","filter","includes","stopPropagation","onSuggestionSelected","keepOptionsOpenOnSelected","CustomerSearch","columns","title","accountNos","addressLine1","email","displayValue","mobilePhone","category","downloading","searchParams","availableBrands","selectedBrand","availableCategories","selectedCategories","responseError","asPromise","m","catch","handleHttpError","selected","parseInt","_","__","sendAndGetFile","type","handleAccountNoChanged","required","handleBrandChanged","handleFirstNameChanged","handleCategorySelected","handleLastNameChanged","clear","searchClicked","downloadClicked","noResults","rowKey","customerID","event","selectedOption","found","splice","BaseApi","apiUri","ondone","RioApiDelete","DeliveryEstimateApi","get","deliveryEstimateApiModel","post","DeliveryEstimateApiModel","organisationID","postcode","caseQuantity","orderDate","deliveryMessage","deliveryCostGross","deliveryCostNet","deliveryVAT","deliveryProvider","deliveryNotes","DeliveryEstimateResultApiModel","estimate","surchargeGross","surchargeVAT","DeliveryEstimate","deliveryEstimate","deliveryEstimateResult","deliveryProviders","selectedDeliveryProvider","getDeliveryProviders","handleDeliveryProviderChanged","step","handlePostcodeChanged","handleNoOfCasesChanged","getEstimate","toFixed","getDeliveryEstimate","clearModelErrors","GrossMarginReportCriteriaApiModel","salesChannelIDs","dateTo","GrossMarginReport","dateToDatePicker","salesChannelName","brandName","totalSales","currencySymbol","totalCosts","grossProfit","grossMargin","availableSalesChannels","selectedSalesChannels","map","v","handleSalesChannelSelected","handleSearchParamValueChanged","salesChannelID","values","existingIndex","indexOf","BaseUserLoginViewModel","password","rememberMe","returnUrl","Login","model","resetPassword","resetPasswordSent","cancelReset","handleEmailChanged","placeholder","handlePasswordChanged","handlePasswordKeyDown","hideImage","submit","clickedResetPasswordLink","submitOnDone","location","BasePasswordResetViewModel","verifyPassword","PasswordReset","match","params","handleConfirmPasswordChanged","handleConfirmPasswordKeyDown","ProductCodeApi","productCodePrefixApiModel","productCodePrefixSuffixApiModel","productCodes","ProductCodePrefixApiModel","prefix","drinkType","drinkColour","countryTerritory","region","notes","ProductCodePrefixSuffixApiModel","suffix","unitOfMeasure","quantity","vintage","ProductCodeGenerator","prefixApiModel","prefixSuffixApiModel","drinkTypes","selectedDrinkType","drinkColours","selectedColour","countries","selectedCountry","regions","selectedRegion","suffixes","selectedSuffix","prefixes","confirmSaveProductCode","successfulProductSave","hideSaveButton","hideProductCodeGeneratorButton","productCodesAlreadyExists","showHideGenerateButton","getDrinkTypes","getSuffix","handleDrinkTypeChanged","some","r","handleDrinkColourChanged","handleCountryChanged","handleRegionChanged","handleSuffixChanged","handleVintageChanged","handleQuantityChanged","generateProductCode","onConfirmModalClosed","result","saveProductCode","callback","getDrinkColour","getCountryTerritory","getRegion","getDrinkColours","getCountryTerritories","getRegions","saveProductCodes","determineGenerateButtonEnabled","CustomerCategoryDistributionCacheRefreshApiModel","moment","subtract","toDate","CustomerCategoryRepairApiModel","Repair","dateFromCustomerCategoryDatePicker","dateFromDistributionCacheRefreshDatePicker","dateToDistributionCacheRefreshDatePicker","loadingCustomerCategoryOk","loadingCustomerCategoryDistributionCacheRefreshOk","customerCategoryRepair","customerCategoryDistributionCacheRefresh","call1","handleCustomerCategoryDateFromChanged","handleCustomerCategoryBrandChanged","customerCategoryOkClicked","handleDistributionCacheRefreshDateFromChanged","handleDistributionCacheRefreshDateToChanged","customerCategoryDistributionCacheRefreshOkClicked","UserApi","userId","delete","UserApiModel","userID","lastLogin","locked","securityGroups","hasAccess","UserAddUpdateModal","saving","sendingReset","passwordResetSent","availableGroups","getUser","isNaN","newUser","getAvailableGroups","j","securityGroupID","handleModalCloseClicked","renderTitle","checked","handleLockedChanged","handleActiveChanged","handleGroupSelectedChanged","renderPasswordReset","cancel","save","sendPasswordReset","passwordReset","onClose","postUser","group","g","sg","Users","format","actions","handleDeleteClicked","default","handleEditClicked","selectedUserId","deleteUserId","users","getUsers","addUser","handleUserAddUpdateModalClosed","handleConfirmDeleteModalClosed","deleteUser","FinancialYearApi","financialYearID","financialYear","FinancialYearApiModel","dateStart","dateEnd","dateClosed","FinancialYearAddUpdateModal","getFinancialYear","newFinancialYear","renderModalContents","handleValueChanged","utc","addUpdate","FinancialYears","parseDisplayDate","selectedFinancialYearID","deleteFinancialYearID","financialYears","getFinancialYears","getList","addFinancialYear","handleFinancialYearAddUpdateModalClosed","FinancialYearID","App","alreadyRequestedLogout","ApiErrorHandler","onUnauthorised","unauthorised","pathname","RioResourcesLoaded","setRioResources","Provider","exact","path","render","logout","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","registration","onupdatefound","installingWorker","installing","onstatechange","console","log","baseUrl","document","getElementsByTagName","getAttribute","createBrowserHistory","basename","store","initialState","middleware","thunk","routerMiddleware","rootReducer","combineReducers","router","connectRouter","enhancers","windowIfDefined","__REDUX_DEVTOOLS_EXTENSION__","createStore","compose","applyMiddleware","configureStore","ReactDOM","getElementById","URL","process","origin","addEventListener","fetch","contentType","headers","status","ready","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.e898aadc.chunk.js","sourcesContent":["// The top-level state object\r\nexport interface ApplicationState {\r\n\r\n}\r\n\r\n// Whenever an action is dispatched, Redux will update each top-level application state property using\r\n// the reducer with the matching name. It's important that the names match exactly, and that the reducer\r\n// acts on the corresponding ApplicationState property type.\r\nexport const reducers = {\r\n\r\n};\r\n\r\n// This type can be used as a hint on action creators so that its 'dispatch' and 'getState' params are\r\n// correctly typed to match your store.\r\nexport interface AppThunkAction {\r\n (dispatch: (action: TAction) => void, getState: () => ApplicationState): void;\r\n}\r\n","import * as React from \"react\";\r\nimport { RioResources, RioUnsafe, RioMenuItemApiModel } from \"rio.react.all\";\r\n\r\n\r\ninterface ISideMenuItemProps {\r\n item: RioMenuItemApiModel;\r\n active: Boolean;\r\n menuItem: string;\r\n itemClicked: (item: RioMenuItemApiModel) => void;\r\n itemMiddleClicked?: (item: RioMenuItemApiModel) => void;\r\n}\r\n\r\nexport class RioSideMenuItem extends React.Component {\r\n render() {\r\n let resource = RioResources.find(this.props.item.resourceName);\r\n if (!resource) return null;\r\n\r\n return (\r\n
this.props.itemClicked(this.props.item)}>\r\n
\r\n {resource.text}\r\n
\r\n );\r\n }\r\n}","import * as React from \"react\";\r\nimport { RioForEach, RioResources, RioMenuItemApiModel } from \"rio.react.all\";\r\n\r\n\r\ninterface ISideMenuSubItemProps {\r\n item: RioMenuItemApiModel;\r\n\r\n itemClicked: (item: RioMenuItemApiModel) => void;\r\n itemMiddleClicked?: (item: RioMenuItemApiModel) => void;\r\n}\r\n\r\nexport class RioSideMenuSubItem extends React.Component {\r\n constructor(props: ISideMenuSubItemProps) {\r\n super(props);\r\n\r\n this.handleMouseUp = this.handleMouseUp.bind(this);\r\n }\r\n \r\n render() {\r\n let resource = RioResources.find(this.props.item.resourceName);\r\n if (!resource) return null;\r\n\r\n if (!!this.props.item.childItems && this.props.item.childItems.length > 0) {\r\n return (\r\n \r\n
\r\n {resource.text}\r\n
\r\n\r\n {\r\n return this.props.itemClicked(item)} itemMiddleClicked={this.props.itemMiddleClicked} key={item.menuItemID} />;\r\n }} />\r\n
\r\n );\r\n } else {\r\n return (\r\n \r\n
this.props.itemClicked(this.props.item)} onMouseUp={this.handleMouseUp}>\r\n {resource.text}\r\n
\r\n
\r\n\t\t\t\t\t\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n handleMouseUp(e: React.MouseEvent) {\r\n if (e.button === 1 && !!this.props.itemMiddleClicked) {\r\n e.preventDefault();\r\n this.props.itemMiddleClicked(this.props.item);\r\n }\r\n }\r\n}","import * as React from \"react\";\r\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport { Spinner } from \"reactstrap\";\r\nimport { RioForEach, RioApiGet, RioMenuItemApiModel, RioToggleSwitch, RioIfFunc } from \"rio.react.all\";\r\nimport { RioSideMenuItem } from \"./SideMenuItem\";\r\nimport { RioSideMenuSubItem } from \"./SideMenuSubItem\";\r\n\r\ninterface ISideMenuParams {\r\n\r\n}\r\n\r\ninterface ISideMenuProps extends RouteComponentProps {\r\n menuEndpoint: string;\r\n pinnedMenuItem: string;\r\n\r\n setPinnedMenuItem: (currentMenuItem?: string) => void;\r\n}\r\n\r\ninterface ISideMenuState {\r\n loading: boolean;\r\n open: boolean;\r\n menuItems: Array;\r\n currentMenuItem?: RioMenuItemApiModel;\r\n}\r\n\r\nexport class RioSideMenu extends React.Component {\r\n constructor(props: Readonly) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n open: !!this.props.pinnedMenuItem,\r\n menuItems: []\r\n };\r\n }\r\n\r\n render() {\r\n let classes = [\"sideMenu\"];\r\n if (!!this.props.pinnedMenuItem) classes.push('pinned');\r\n if (this.state.open) classes.push('open');\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n componentDidMount(): void {\r\n this.loadMenu();\r\n\r\n // TODO: Replace this JQuery\r\n\r\n // $(\".mobileSideMenuBurger\").off(\"click\").click(function () {\r\n // $(\".mobileSideMenuBurger\").toggleClass(\"mobileMenuOpen\");\r\n // $(\".sideMenu\").toggleClass(\"mobileMenuOpen\");\r\n // });\r\n }\r\n\r\n loadMenu() {\r\n const call = new RioApiGet>(this.props.menuEndpoint);\r\n\r\n this.setState({\r\n loading: true\r\n }, () => {\r\n call.onDone = response => {\r\n if (response.success) {\r\n this.setState({\r\n menuItems: response.item,\r\n loading: false\r\n }, () => {\r\n if (!this.props.pinnedMenuItem) {\r\n return;\r\n }\r\n\r\n var pinnedMenuItem = this.props.pinnedMenuItem;\r\n\r\n if (!pinnedMenuItem) {\r\n return;\r\n }\r\n\r\n var currentMenuItem = this.state.menuItems.find(function (element) {\r\n return element.resourceName === pinnedMenuItem;\r\n });\r\n\r\n this.setState({\r\n currentMenuItem: currentMenuItem\r\n });\r\n });\r\n }\r\n }\r\n\r\n call.send();\r\n });\r\n }\r\n\r\n handlePinClick() {\r\n this.props.setPinnedMenuItem(!!this.props.pinnedMenuItem ? null : this.state.currentMenuItem?.resourceName);\r\n }\r\n\r\n handleSideMenuItemClicked(item: RioMenuItemApiModel): void {\r\n if (!!item.controllerAction) {\r\n this.props.history.push(item.controllerAction.startsWith('/') ? item.controllerAction : '/' + item.controllerAction);\r\n return;\r\n }\r\n\r\n let newCurrentMenuItem: RioMenuItemApiModel = item;\r\n\r\n if (this.state.currentMenuItem === newCurrentMenuItem) {\r\n if (!!this.props.pinnedMenuItem) {\r\n return;\r\n }\r\n\r\n newCurrentMenuItem = null;\r\n }\r\n\r\n this.setState({\r\n open: newCurrentMenuItem !== null,\r\n currentMenuItem: newCurrentMenuItem\r\n }, () => {\r\n if (!!this.props.pinnedMenuItem) {\r\n this.props.setPinnedMenuItem(this.state.currentMenuItem?.resourceName);\r\n }\r\n });\r\n }\r\n\r\n handleSideMenuItemMiddleClicked(item: RioMenuItemApiModel): void {\r\n if (!!item.controllerAction) {\r\n window.open(RioSideMenu.generateUrl(item), \"_blank\");\r\n }\r\n }\r\n\r\n handleSideMenuSubItemClicked(item: RioMenuItemApiModel): void {\r\n if (!!item.controllerAction) {\r\n this.props.history.push(item.controllerAction.startsWith('/') ? item.controllerAction : '/' + item.controllerAction);\r\n\r\n if (!this.props.pinnedMenuItem) {\r\n this.setState({\r\n open: false,\r\n currentMenuItem: null\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleSideMenuSubItemMiddleClicked(item: RioMenuItemApiModel): void {\r\n if (!!item.controller) {\r\n window.open(RioSideMenu.generateUrl(item), \"_blank\");\r\n }\r\n }\r\n\r\n static generateUrl(item: RioMenuItemApiModel): string {\r\n if (!item.controller) {\r\n return \"#\";\r\n }\r\n\r\n return \"/\" + item.controller.replace(\"Controller\", \"\") + \"/\" + (!!item.controllerAction ? item.controllerAction : \"\");\r\n }\r\n}\r\n\r\nexport const RioRoutedSideMenu = withRouter(RioSideMenu);","import { createContext } from \"react\";\r\nimport { IContextApiModel } from \"./apiModels/RioIContextApiModel\";\r\n\r\nexport const GlobalContext = createContext(null);","import * as React from 'react';\r\nimport { Link, RouteComponentProps } from 'react-router-dom';\r\nimport { RioResources, RioUnsafe, RioUserDropDownMenu } from \"rio.react.all\";\r\nimport { IContextApiModel } from '../apiModels/RioIContextApiModel';\r\nimport { RioRoutedSideMenu } from \"../components/SideMenu\";\r\nimport { GlobalContext } from '../RioContext';\r\n\r\ninterface ILayoutProps extends Partial {\r\n}\r\n\r\ninterface ILayoutState {\r\n pinnedMenuItem: string;\r\n showUserDropdownMenu: boolean;\r\n}\r\n\r\nexport default class Layout extends React.Component {\r\n constructor(props: Readonly) {\r\n super(props);\r\n\r\n this.state = {\r\n pinnedMenuItem: localStorage.getItem(\"pinnedMenuItem\"),\r\n showUserDropdownMenu: false,\r\n };\r\n}\r\n public render() {\r\n return (\r\n \r\n
\r\n \r\n \"Mr\r\n \r\n\r\n this.setPinnedMenuItem(currentMenuItem)}\r\n />\r\n\r\n \r\n {(globals: IContextApiModel) => (\r\n
this.handleUserDropdownClicked(e)}>\r\n
\r\n \r\n {globals.user.firstName.charAt(0)}{globals.user.lastName.charAt(0)}\r\n \r\n\r\n

\r\n {globals.user.firstName} {globals.user.lastName}\r\n

\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n )}\r\n
\r\n
\r\n\r\n
\r\n {this.props.children}\r\n
\r\n\r\n \r\n
\r\n );\r\n }\r\n\r\n setPinnedMenuItem(currentMenuItem?: string): void {\r\n this.setState({\r\n pinnedMenuItem: currentMenuItem\r\n }, () => {\r\n if (!!this.state.pinnedMenuItem) {\r\n localStorage.setItem(\"pinnedMenuItem\", currentMenuItem);\r\n } else {\r\n localStorage.removeItem(\"pinnedMenuItem\");\r\n }\r\n });\r\n }\r\n\r\n handleUserDropdownClicked(e: React.MouseEvent) {\r\n this.setState({\r\n showUserDropdownMenu: !this.state.showUserDropdownMenu\r\n });\r\n }\r\n}","import { ApiResponse } from \"rio.react.all\";\r\nimport { RioResources } from \"rio.react.all\";\r\nimport { RioValidator } from \"rio.react.all\";\r\n\r\nexport class HttpErrorHelper {\r\n static handleHttpError(response: ApiResponse, component: React.Component, validator: RioValidator = null): string {\r\n if (!!response.errors && !!validator) {\r\n validator.addModelErrors(component, response.errors);\r\n return null;\r\n } else {\r\n if (!!response.item) {\r\n return response.item;\r\n } else {\r\n return RioResources.find(\"HttpResponseErrorMsg\").text.replace(\"{statusCode}\", response.statusCode ? response.statusCode.toString() : \"\");\r\n }\r\n\r\n }\r\n }\r\n}","import * as React from \"react\";\r\nimport { RioExpandingPanel, RioIconButton, RioModal, RioResources } from \"rio.react.all\";\r\n\r\ninterface IErrorModalProps {\r\n //text: IResource;\r\n text: string;\r\n onErrorModalClosed: () => void;\r\n}\r\n\r\nexport class ErrorModal extends React.Component {\r\n render() {\r\n return (\r\n this.props.onErrorModalClosed()}>\r\n \r\n
{this.props.text}
\r\n
\r\n
\r\n this.props.onErrorModalClosed()} />\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import { RioDateHelpers } from 'rio.react.all';\r\n\r\nexport class DistributionGraphFilterApiModel {\r\n dateFrom: string;\r\n\r\n constructor() {\r\n const today = new Date();\r\n const year = today.getFullYear() - (today.getMonth() <= 6 ? 4 : 3);\r\n\r\n this.dateFrom = RioDateHelpers.parseOutputDate(new Date(year, 6, 1, 0, 0, 0));\r\n }\r\n}","import * as Chart from 'chart.js';\r\nimport * as React from 'react';\r\nimport { Line } from 'react-chartjs-2';\r\nimport { RouteComponentProps } from \"react-router\";\r\nimport { Spinner } from \"reactstrap\";\r\nimport { RioApiPost, RioResources, RioValidator, RioDatePicker } from \"rio.react.all\";\r\nimport { ChartDataApiModel } from \"../apiModels/chart/chartDataApiModel\";\r\nimport { DistributionGraphFilterApiModel } from \"../apiModels/customercategorydistribution/distributionGraphFilterApiModel\";\r\n\r\ninterface CustomerCategoryDistributionProps extends Partial {\r\n}\r\n\r\ninterface CustomerCategoryDistributionState {\r\n filterParams: DistributionGraphFilterApiModel;\r\n\r\n // UI State\r\n loading: boolean;\r\n //error: boolean;\r\n distributionGraphData: ChartDataApiModel;\r\n}\r\n\r\nexport class CustomerCategoryDistribution extends React.Component {\r\n constructor(props: CustomerCategoryDistributionProps) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: true,\r\n //error: false,\r\n filterParams: new DistributionGraphFilterApiModel(),\r\n distributionGraphData: null\r\n };\r\n\r\n Chart.defaults.global.elements.line.tension = 0.01;\r\n }\r\n\r\n private validator = new RioValidator();\r\n private dateFromDatePicker = React.createRef();\r\n\r\n private chartColors: { [key: string]: string } = {\r\n \"New\": \"#ED7D31\",\r\n \"Active (New)\": \"#FFEA00\",\r\n \"Active\": \"#397D02\",\r\n \"Lapsing\": \"#808080\",\r\n \"Lapsed\": \"#4472C4\",\r\n \"Bin\": \"#FF335E\",\r\n };\r\n\r\n componentDidMount() {\r\n this.getGraph();\r\n }\r\n\r\n getGraph() {\r\n const call = new RioApiPost(\"/api/customercategorydistribution/distributiongraph\", this.state.filterParams);\r\n call.onDone = response => {\r\n if (response.success) {\r\n this.setState({\r\n distributionGraphData: response.item\r\n });\r\n } else {\r\n //if (response.statusCode == 404) {\r\n // this.setState({\r\n // validationError: RioResources.find(\"CustomerReservePDFNotFound\").text\r\n // });\r\n //}\r\n }\r\n }\r\n call.send();\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

{RioResources.find(\"CustomerCategoryDistributionGraph\").text}

\r\n
\r\n\r\n
\r\n
\r\n \r\n this.handleDateFromChanged(date)}\r\n nullable={true}\r\n time={false}\r\n minDate={\"2017-07-01\"}\r\n />\r\n
\r\n
\r\n\r\n
\r\n {this.renderCustomerCategoryDistributionChart()}\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderCustomerCategoryDistributionChart() {\r\n if (!this.state.distributionGraphData) {\r\n return ();\r\n }\r\n\r\n if (!this.state.distributionGraphData.dataSets || !this.state.distributionGraphData.dataSets.length) {\r\n return (\r\n
\r\n

{RioResources.find(\"NotEnoughData\").text}

\r\n \"Example\"\r\n
\r\n );\r\n }\r\n\r\n var datasets = [];\r\n for (var i = 0; i < this.state.distributionGraphData.dataSets.length; i++) {\r\n if (this.state.distributionGraphData.dataSets[i].length) {\r\n datasets.push({\r\n label: this.state.distributionGraphData.dataSetNames[i],\r\n data: this.state.distributionGraphData.dataSets[i],\r\n borderColor: this.chartColors[this.state.distributionGraphData.dataSetNames[i]],\r\n pointBackgroundColor: \"rgba(0,0,0,0)\",\r\n pointBorderColor: \"rgba(0,0,0,0)\",\r\n fill: false,\r\n hidden: this.state.distributionGraphData.dataSetNames[i] === \"Bin\"\r\n });\r\n }\r\n }\r\n\r\n const data = {\r\n labels: this.state.distributionGraphData.labels,\r\n datasets: datasets\r\n };\r\n\r\n const options = {\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n scales: {\r\n xAxes: [{\r\n ticks: {\r\n autoSkip: true,\r\n maxTicksLimit: 30\r\n }\r\n }]\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n handleDateFromChanged(date: string) {\r\n if (date !== null && this.state.filterParams.dateFrom !== date) {\r\n let filterParams = { \r\n ...this.state.filterParams,\r\n dateFrom: date\r\n };\r\n\r\n this.setState({ \r\n filterParams: filterParams \r\n }, () => {\r\n this.getGraph();\r\n });\r\n }\r\n\r\n //this.setState({\r\n // selectedCurrencyID: parseInt(selectedOption.value)\r\n //}, () => {\r\n // this.getStockAndCharts();\r\n //});\r\n }\r\n}","export class CustomerSearchApiModel {\r\n constructor() {\r\n this.accountNo = \"\";\r\n this.firstName = \"\";\r\n this.lastName = \"\";\r\n this.brandId = 1;\r\n this.categoryIDs = [];\r\n }\r\n accountNo: string;\r\n firstName: string;\r\n lastName: string;\r\n brandId: number;\r\n categoryIDs: number[];\r\n}","import * as React from \"react\";\r\nimport { IRioValidationComponentProps, IRioValidatedInputProps, IRioValidatedInputState, IRioValidatedInput, IRioValidations, RioIf, RioIcon, RioResources, RioIfFunc, RioForEach, RioStringHelpers } from \"rio.react.all\";\r\n\r\ninterface IRioSelectProps {\r\n items: Array;\r\n value: Array;\r\n keySelector: (item: T) => string;\r\n descriptionSelector: (item: T) => string;\r\n onSuggestionSelected: (value: T) => void;\r\n disabled?: boolean;\r\n keepOptionsOpenOnSelected?: boolean;\r\n defaultSelectOptionOverride?: string;\r\n defaultMultipleSelectOptionOverride?: string;\r\n isMultiSelect?: boolean;\r\n showCheckboxes?: boolean;\r\n className?: string;\r\n}\r\n\r\ninterface IRioSelectState {\r\n focused: boolean;\r\n suggestions: Array;\r\n text: string;\r\n focusedOption: T;\r\n}\r\n\r\nexport class RioSelect extends React.Component & IRioValidationComponentProps & IRioValidatedInputProps,\r\n IRioSelectState & IRioValidatedInputState> implements IRioValidatedInput {\r\n constructor(props: Readonly & IRioValidationComponentProps & IRioValidatedInputProps>) {\r\n super(props);\r\n\r\n this.state = {\r\n blurred: false,\r\n focused: false,\r\n suggestions: [],\r\n text: \"\",\r\n focusedOption: null\r\n }\r\n }\r\n\r\n private input: React.RefObject = React.createRef();\r\n private focusedOptionDiv: React.RefObject = React.createRef();\r\n\r\n getKey(): string {\r\n return this.props.name;\r\n }\r\n\r\n getValue(): any {\r\n return this.props.value;\r\n }\r\n\r\n getValidations(): IRioValidations {\r\n return this.props.validations;\r\n }\r\n\r\n handleInputLoaded(): void {\r\n !!this.props.validator && this.props.validator.register(this);\r\n }\r\n\r\n handleInputUnloaded(): void {\r\n !!this.props.validator && this.props.validator.unregister(this);\r\n }\r\n\r\n componentDidMount(): void {\r\n this.handleInputLoaded();\r\n }\r\n\r\n componentWillUnmount(): void {\r\n this.handleInputUnloaded();\r\n }\r\n\r\n render() {\r\n let inputValue: string;\r\n if (this.state.focused) {\r\n inputValue = this.state.text;\r\n } else {\r\n inputValue = this.getCurrentText(this.props);\r\n }\r\n\r\n const hasValidationErrors = !!this.props.validator && (this.props.validator.submitAttempted || this.state.blurred) && this.props.validator.getErrors(this).length > 0;\r\n\r\n return (\r\n \r\n
\r\n
this.input.current.focus()}>\r\n }\r\n otherwise={} />\r\n
\r\n\r\n this.handleInputFocused()}\r\n onBlur={(e) => this.handleInputBlurred(true)}\r\n onChange={(e) => this.handleInputChanged(e)}\r\n disabled={this.props.disabled}\r\n autoComplete={\"new-password\"}\r\n onKeyDown={(e) => this.handleKeyPressed(e)}\r\n />\r\n\r\n {this.renderOptions()}\r\n
\r\n\r\n {\r\n return {\r\n return
{error}
;\r\n }} />;\r\n }} />\r\n
\r\n );\r\n }\r\n\r\n getCurrentText(props: Readonly & IRioValidationComponentProps & IRioValidatedInputProps>): string {\r\n if (props.value.length === 0) {\r\n if (!!props.defaultSelectOptionOverride) {\r\n return props.defaultSelectOptionOverride;\r\n } else {\r\n return RioResources.find(\"DefaultSelectOption\").text;\r\n }\r\n } else if (props.value.length === 1) {\r\n return props.descriptionSelector(props.value[0]);\r\n } else {\r\n if (!!props.defaultMultipleSelectOptionOverride) {\r\n return props.defaultMultipleSelectOptionOverride;\r\n } else {\r\n return RioResources.find(\"DefaultMultipleSelected\").text\r\n .replace(\"{selectedCount}\", props.value.length.toString())\r\n .replace(\"{totalCount}\", props.items.length.toString());\r\n }\r\n }\r\n }\r\n\r\n renderOptions(): React.ReactNode {\r\n if (!this.state.focused) return null;\r\n var shouldRenderCheckboxes = (this.props.showCheckboxes || this.props.isMultiSelect) && this.props.showCheckboxes !== false;\r\n return (\r\n
\r\n {\r\n return (\r\n
this.handleSuggestionSelected(item, e)}\r\n >\r\n
\r\n x === item) != null && shouldRenderCheckboxes} then={\r\n \r\n } otherwise={\r\n } />\r\n } />\r\n {this.props.descriptionSelector(item)}\r\n
\r\n
\r\n );\r\n }} />\r\n
\r\n );\r\n }\r\n\r\n handleInputFocused(): void {\r\n this.setState({\r\n focused: true\r\n });\r\n\r\n this.input.current.selectionStart = 0;\r\n this.input.current.selectionEnd = this.input.current.value.length;\r\n this.getSuggestions(this.state.text);\r\n }\r\n\r\n handleInputBlurred(validate: boolean): void {\r\n this.setState({\r\n focused: false,\r\n text: \"\",\r\n blurred: true,\r\n focusedOption: null\r\n });\r\n\r\n if (validate) {\r\n !!this.props.validator && this.props.validator.validate(this);\r\n }\r\n }\r\n\r\n handleInputChanged(e: React.ChangeEvent): void {\r\n const newValue = e.currentTarget.value;\r\n this.setState({\r\n text: newValue\r\n });\r\n\r\n this.getSuggestions(newValue);\r\n }\r\n\r\n handleKeyPressed(e: React.KeyboardEvent) {\r\n let index = 0;\r\n let newFocused: T;\r\n\r\n switch (e.keyCode) {\r\n case 38: //ArrowUp\r\n if (!!this.state.focusedOption) {\r\n index = this.props.items.findIndex((x: any) => x === this.state.focusedOption);\r\n\r\n if (index < 1) {\r\n newFocused = null;\r\n } else {\r\n newFocused = this.props.items[index - 1];\r\n }\r\n\r\n this.setState({\r\n focusedOption: newFocused\r\n }, () => this.scrollToFocused());\r\n } else {\r\n this.setState({\r\n focusedOption: this.props.items[this.props.items.length - 1]\r\n }, () => this.scrollToFocused());\r\n }\r\n break;\r\n case 40: //ArrowDown\r\n if (!!this.state.focusedOption) {\r\n index = this.props.items.findIndex((x: any) => x === this.state.focusedOption);\r\n \r\n if (index >= this.props.items.length - 1) {\r\n newFocused = null;\r\n } else {\r\n newFocused = this.props.items[index + 1];\r\n }\r\n this.setState({\r\n focusedOption: newFocused\r\n }, () => this.scrollToFocused());\r\n } else {\r\n this.setState({\r\n focusedOption: this.props.items[0]\r\n }, () => this.scrollToFocused());\r\n }\r\n break;\r\n case 9: //Tab\r\n break;\r\n case 13: //Enter\r\n if (!!this.state.focusedOption) {\r\n this.handleSuggestionSelected(this.state.focusedOption, null);\r\n }\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n scrollToFocused() {\r\n if (!!this.focusedOptionDiv.current) {\r\n this.focusedOptionDiv.current.scrollIntoView({\r\n block: \"center\"\r\n });\r\n }\r\n }\r\n\r\n getSuggestions(value: string) {\r\n if (value.trim() === \"\") {\r\n this.setState({\r\n suggestions: [...this.props.items]\r\n });\r\n } else {\r\n let searchValue = RioStringHelpers.removeDiacritics(value).toLowerCase();\r\n this.setState({\r\n suggestions: this.props.items.filter((i: any) =>\r\n RioStringHelpers.removeDiacritics(this.props.descriptionSelector(i)).toLowerCase().includes(searchValue))\r\n });\r\n }\r\n }\r\n\r\n handleSuggestionSelected(item: T, e: React.MouseEvent) {\r\n if (e != null) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n this.props.onSuggestionSelected(item);\r\n\r\n //If explicitly set to keep open then do nothing \r\n if (this.props.keepOptionsOpenOnSelected === true) {\r\n return;\r\n }\r\n\r\n //If explicitly set to close then close\r\n if (this.props.keepOptionsOpenOnSelected === false) {\r\n this.handleInputBlurred(false);\r\n }\r\n\r\n //Not explicitly set to keep open or closed, but is a multi select, so keep open\r\n if (this.props.isMultiSelect) {\r\n return;\r\n }\r\n\r\n //By default, close\r\n this.handleInputBlurred(false);\r\n }\r\n}","import * as React from 'react';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { Spinner } from 'reactstrap';\r\nimport { IGridViewColumn, RioApiGet, RioApiPost, RioGridView, RioIf, RioInput, RioResources, RioValidator } from \"rio.react.all\";\r\nimport { CustomerApiModel } from '../apiModels/customer/customerApiModel';\r\nimport { CustomerSearchApiModel } from '../apiModels/customer/customerSearchApiModel';\r\nimport { RioSelect } from '../components/Select';\r\nimport { HttpErrorHelper } from '../helpers/RioHttpErrorHelper';\r\nimport { SelectOption } from '../helpers/RioSelectOption';\r\nimport { ErrorModal } from '../modals/RioErrorModal';\r\n\r\n\r\ninterface CustomerSearchProps extends Partial {\r\n}\r\n\r\ninterface CustomerSearchSearchState {\r\n searchParams: CustomerSearchApiModel;\r\n // UI State\r\n loading: boolean;\r\n downloading: boolean;\r\n items: CustomerApiModel[];\r\n availableBrands: SelectOption[];\r\n selectedBrand: SelectOption;\r\n availableCategories: SelectOption[];\r\n selectedCategories: SelectOption[];\r\n responseError: string;\r\n}\r\n\r\nexport class CustomerSearch extends React.Component {\r\n constructor(props: CustomerSearchProps) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n downloading: false,\r\n items: [],\r\n searchParams: new CustomerSearchApiModel(),\r\n availableBrands: [],\r\n selectedBrand: null,\r\n availableCategories: [],\r\n selectedCategories: [],\r\n responseError: null\r\n };\r\n }\r\n\r\n private validator = new RioValidator();\r\n\r\n columns: Array> = [\r\n { title: RioResources.find(\"AccountNos\").text, value: (item) => item.accountNos },\r\n { title: RioResources.find(\"FirstName\").text, value: (item) => item.firstName },\r\n { title: RioResources.find(\"LastName\").text, value: (item) => item.lastName },\r\n { title: RioResources.find(\"Address\").text, value: (item) => item.addressLine1 },\r\n {\r\n title: RioResources.find(\"Email\").text,\r\n value: (item) => item.email,\r\n displayValue: (item) => item.email !== null && item.email !== \"\" ? ({item.email}) : \"\"\r\n },\r\n { title: RioResources.find(\"Mobile\").text, value: (item) => item.mobilePhone },\r\n { title: RioResources.find(\"Category\").text, value: (item) => item.category }\r\n ];\r\n\r\n //actions: Array> = [\r\n // {\r\n // resource: RioResources.find(\"Customer\"),\r\n // onClick: (item) => { this.handleDetailsClicked(item) }, default: true,\r\n // hasPermission: true\r\n // }\r\n //];\r\n\r\n componentDidMount() {\r\n RioApiGet.asPromise(\"/api/customersearch/availablebrands/false\")\r\n .then(response => {\r\n this.setState({\r\n availableBrands: response,\r\n selectedBrand: response.find(m => m.value === this.state.searchParams.brandId.toString())\r\n });\r\n })\r\n .catch((response) => {\r\n var error = HttpErrorHelper.handleHttpError(response, this, null); //handles validator errors if validator passed\r\n\r\n this.setState({\r\n availableBrands: [],\r\n selectedBrand: null,\r\n responseError: error\r\n });\r\n });\r\n\r\n RioApiGet.asPromise(\"/api/customersearch/availablecategories\")\r\n .then(response => {\r\n let searchParams = { ...this.state.searchParams };\r\n searchParams.categoryIDs = [];\r\n\r\n var selected = [];\r\n\r\n for (var i = 0; i < response.length; i++) {\r\n var value = response[i].value;\r\n selected.push(response[i]);\r\n searchParams.categoryIDs.push(parseInt(value));\r\n }\r\n\r\n this.setState({\r\n searchParams: searchParams,\r\n availableCategories: response,\r\n selectedCategories: selected\r\n });\r\n })\r\n .catch((response) => {\r\n var error = HttpErrorHelper.handleHttpError(response, this, null); //handles validator errors if validator passed\r\n\r\n this.setState({\r\n availableCategories: [],\r\n selectedCategories: [],\r\n responseError: error\r\n });\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.setState = (_, __) => { return; };\r\n }\r\n\r\n searchClicked() {\r\n this.setState({\r\n loading: true\r\n }, () => {\r\n RioApiPost.asPromise(\"/api/customersearch/search\", this.state.searchParams)\r\n .then(response => {\r\n this.setState({\r\n items: response,\r\n loading: false\r\n });\r\n })\r\n .catch((response) => {\r\n var error = HttpErrorHelper.handleHttpError(response, this, null); //handles validator errors if validator passed\r\n this.setState({ responseError: error });\r\n });\r\n });\r\n }\r\n\r\n downloadClicked() {\r\n this.setState({\r\n downloading: true\r\n }, () => {\r\n const call = new RioApiPost(\"/api/customersearch/downloadcustomers\", this.state.searchParams);\r\n call.onDone = response => {\r\n this.setState({ downloading: false }, () => {\r\n if (!response.success) {\r\n var error = HttpErrorHelper.handleHttpError(response, this, null); //handles validator errors if validator passed\r\n this.setState({ responseError: error });\r\n }\r\n });\r\n }\r\n call.sendAndGetFile();\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

{RioResources.find(\"CustomerSearch\").text}

\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n this.handleAccountNoChanged(e)} validator={this.validator}\r\n validations={{ required: false }}\r\n />\r\n
\r\n\r\n
\r\n \r\n \r\n name=\"Brand\"\r\n items={this.state.availableBrands}\r\n value={!!this.state.selectedBrand ? [this.state.selectedBrand] : []}\r\n keySelector={(item: SelectOption) => { return item.value }}\r\n descriptionSelector={(item: SelectOption) => { return item.text }}\r\n onSuggestionSelected={(value: SelectOption) => { this.handleBrandChanged(value) }}\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n this.handleFirstNameChanged(e)}\r\n validator={this.validator}\r\n validations={{ required: false }}\r\n />\r\n
\r\n\r\n
\r\n \r\n \r\n name=\"Categories\"\r\n items={this.state.availableCategories}\r\n value={this.state.selectedCategories}\r\n keySelector={(item: SelectOption) => { return item.value }}\r\n descriptionSelector={(item: SelectOption) => { return item.text }}\r\n onSuggestionSelected={(value: SelectOption) => { this.handleCategorySelected(value) }}\r\n isMultiSelect={true}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n \r\n this.handleLastNameChanged(e)}\r\n validator={this.validator}\r\n validations={{ required: false }}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n } otherwise={\r\n \r\n } />\r\n
\r\n\r\n
\r\n \r\n } otherwise={\r\n \r\n } />\r\n
\r\n
\r\n\r\n \r\n noResults={RioResources.find(\"NoResultsFound\")}\r\n columns={this.columns}\r\n //actions={this.actions}\r\n items={this.state.items}\r\n rowKey={(item: CustomerApiModel) => item.customerID}\r\n />\r\n\r\n this.setState({ responseError: null })} />\r\n } />\r\n
\r\n );\r\n }\r\n\r\n clear() {\r\n const searchParams = new CustomerSearchApiModel();\r\n const selected = [];\r\n\r\n for (var i = 0; i < this.state.availableCategories.length; i++) {\r\n var value = this.state.availableCategories[i].value;\r\n selected.push(this.state.availableCategories[i]);\r\n searchParams.categoryIDs.push(parseInt(value));\r\n }\r\n\r\n this.setState({\r\n selectedCategories: selected,\r\n selectedBrand: this.state.availableBrands.find(m => m.value === this.state.searchParams.brandId.toString()),\r\n items: []\r\n });\r\n }\r\n\r\n handleAccountNoChanged(event: React.ChangeEvent) {\r\n const searchParams = {\r\n ...this.state.searchParams,\r\n accountNo: event.target.value\r\n };\r\n\r\n this.setState({ searchParams: searchParams });\r\n }\r\n\r\n handleBrandChanged(selectedOption: SelectOption) {\r\n if (this.state.selectedBrand?.value !== selectedOption.value) {\r\n const searchParams = {\r\n ...this.state.searchParams,\r\n brandId: parseInt(selectedOption.value)\r\n };\r\n\r\n this.setState({\r\n selectedBrand: selectedOption,\r\n searchParams: searchParams\r\n });\r\n }\r\n }\r\n\r\n handleFirstNameChanged(event: React.ChangeEvent) {\r\n const searchParams = { \r\n ...this.state.searchParams,\r\n firstName: event.target.value\r\n };\r\n\r\n this.setState({ searchParams: searchParams });\r\n }\r\n\r\n handleLastNameChanged(event: React.ChangeEvent) {\r\n const searchParams = { \r\n ...this.state.searchParams,\r\n lastName: event.target.value\r\n };\r\n \r\n this.setState({ searchParams: searchParams });\r\n }\r\n\r\n handleCategorySelected(value: SelectOption) {\r\n const categoryIDs = [...this.state.searchParams.categoryIDs];\r\n const selectedCategories = [...this.state.selectedCategories];\r\n const id = parseInt(value.value);\r\n let found = false;\r\n\r\n for (var i = 0; i < categoryIDs.length; i++) {\r\n if (categoryIDs[i] === id) {\r\n categoryIDs.splice(i, 1);\r\n selectedCategories.splice(i, 1);\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!found) {\r\n selectedCategories.push(value);\r\n categoryIDs.push(id);\r\n }\r\n\r\n this.setState({\r\n selectedCategories: selectedCategories,\r\n searchParams: {\r\n ...this.state.searchParams,\r\n categoryIDs: categoryIDs\r\n }\r\n });\r\n }\r\n\r\n //handleDetailsClicked(item: CustomerApiModel): void {\r\n //this.props.history.push(\"/customers/\" + item.customerID);\r\n //}\r\n}","import { RioApiPost, RioApiGet, ApiResponse, RioApiDelete } from \"rio.react.all\";\r\n\r\n\r\nexport class BaseApi {\r\n\r\n static get(apiUri: string, ondone: (response: ApiResponse) => any) {\r\n const call = new RioApiGet(apiUri);\r\n call.onDone = ondone;\r\n call.send();\r\n }\r\n\r\n static post(apiUri: string, item: object, ondone: (response: ApiResponse) => any) {\r\n const call = new RioApiPost(apiUri, item);\r\n call.onDone = ondone;\r\n call.send();\r\n }\r\n\r\n static delete(apiUri: string, ondone: (response: ApiResponse) => any) {\r\n const call = new RioApiDelete(apiUri);\r\n call.onDone = ondone;\r\n call.send();\r\n }\r\n}","import { BaseApi } from \"./BaseApi\";\r\nimport { ApiResponse } from \"rio.react.all\";\r\nimport { SelectOption } from \"../helpers/RioSelectOption\";\r\nimport { DeliveryEstimateApiModel } from \"../apiModels/DeliveryEstimate/deliveryEstimateApiModel\";\r\nimport { DeliveryEstimateResultApiModel } from \"../apiModels/DeliveryEstimate/deliveryEstimateResultApiModel\";\r\n\r\nexport class DeliveryEstimateApi {\r\n\r\n static getDeliveryProviders(ondone: (response: ApiResponse) => any) {\r\n BaseApi.get(\"/api/deliveryestimate/getdeliveryproviders\", ondone);\r\n }\r\n\r\n static getDeliveryEstimate(deliveryEstimateApiModel: DeliveryEstimateApiModel,\r\n ondone: (response: ApiResponse) => any) {\r\n BaseApi.post(\"/api/deliveryestimate/getdeliveryestimate\", deliveryEstimateApiModel, ondone);\r\n }\r\n}","export class DeliveryEstimateApiModel {\r\n organisationID: number;\r\n postcode: string;\r\n caseQuantity: number;\r\n orderDate: Date;\r\n deliveryMessage: string;\r\n deliveryCostGross: number;\r\n deliveryCostNet: number;\r\n deliveryVAT: number;\r\n deliveryProvider: string;\r\n deliveryNotes: string;\r\n}","import { DeliveryEstimateApiModel } from \"./deliveryEstimateApiModel\";\r\n\r\nexport class DeliveryEstimateResultApiModel {\r\n estimate: DeliveryEstimateApiModel; \r\n surchargeGross: number;\r\n surchargeVAT: number;\r\n}\r\n\r\n ","import * as React from 'react';\r\nimport { IRioModelErrors, RioIfFunc, RioInput, RioResources, RioSelect, RioValidator } from \"rio.react.all\";\r\nimport { DeliveryEstimateApi } from \"../apiLayer/DeliveryEstimateApi\";\r\nimport { DeliveryEstimateApiModel } from \"../apiModels/DeliveryEstimate/deliveryEstimateApiModel\";\r\nimport { DeliveryEstimateResultApiModel } from \"../apiModels/DeliveryEstimate/deliveryEstimateResultApiModel\";\r\nimport { SelectOption } from '../helpers/RioSelectOption';\r\n\r\n\r\ninterface DeliveryEstimateProps {\r\n}\r\n\r\ninterface DeliveryEstimateState {\r\n deliveryEstimate: DeliveryEstimateApiModel;\r\n deliveryEstimateResult: DeliveryEstimateResultApiModel;\r\n loading: boolean;\r\n errors: IRioModelErrors;\r\n error: boolean;\r\n deliveryProviders: SelectOption[];\r\n selectedDeliveryProvider: SelectOption;\r\n}\r\n\r\nexport class DeliveryEstimate extends React.Component {\r\n\r\n constructor(props: DeliveryEstimateProps) {\r\n super(props);\r\n this.state = {\r\n deliveryEstimate: new DeliveryEstimateApiModel(),\r\n deliveryEstimateResult: new DeliveryEstimateResultApiModel(),\r\n loading: false,\r\n error: false,\r\n deliveryProviders: [],\r\n errors: null,\r\n selectedDeliveryProvider: null\r\n };\r\n }\r\n\r\n private validator = new RioValidator();\r\n\r\n componentDidMount() {\r\n DeliveryEstimateApi.getDeliveryProviders(response => {\r\n let deliveryEstimate = {\r\n ...this.state.deliveryEstimate,\r\n organisationID: parseInt(response.item[0].value)\r\n };\r\n\r\n this.setState({\r\n deliveryProviders: response.item,\r\n deliveryEstimate: deliveryEstimate\r\n });\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

{RioResources.find(\"DeliveryEstimate\").text}

\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n name=\"DeliveryProvider\"\r\n items={this.state.deliveryProviders}\r\n value={!!this.state.selectedDeliveryProvider ? [this.state.selectedDeliveryProvider] : []}\r\n keySelector={(item: SelectOption) => item.value}\r\n descriptionSelector={(item: SelectOption) => item.text}\r\n onSuggestionSelected={(value: SelectOption) => this.handleDeliveryProviderChanged(value)}\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handlePostcodeChanged(e)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handleNoOfCasesChanged(e)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n />\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n {\r\n return (\r\n
\r\n

{RioResources.find(\"NoResultTryChangingFilters\").text}

\r\n
\r\n );\r\n }} />\r\n\r\n {\r\n return (\r\n
\r\n
\r\n

{this.state.deliveryEstimateResult.estimate.deliveryMessage}

\r\n
\r\n
\r\n );\r\n }} />\r\n\r\n {\r\n return (\r\n
\r\n
\r\n \r\n

{this.state.deliveryEstimateResult?.estimate ? \"\\u00A3\" + (this.state.deliveryEstimateResult.estimate.deliveryCostGross + this.state.deliveryEstimateResult.surchargeGross).toFixed(2) : \"\"}

\r\n
\r\n
\r\n \r\n

{this.state.deliveryEstimateResult?.estimate ? \"\\u00A3\" + (this.state.deliveryEstimateResult.estimate.deliveryVAT + this.state.deliveryEstimateResult.surchargeVAT).toFixed(2) : \"\"}

\r\n
\r\n
\r\n \r\n

{this.state.deliveryEstimateResult?.estimate ? \"\\u00A3\" + (this.state.deliveryEstimateResult.estimate.deliveryCostGross + this.state.deliveryEstimateResult.estimate.deliveryVAT + this.state.deliveryEstimateResult.surchargeGross + this.state.deliveryEstimateResult.surchargeVAT).toFixed(2).toString() : \"\"}

\r\n
\r\n
\r\n );\r\n }} otherwise={() => {\r\n return RioResources.find(\"NoResultTryChangingFilters\").text\r\n }} />\r\n\r\n
\r\n {\r\n return (\r\n
\r\n this.state.deliveryEstimateResult.estimate.deliveryNotes;\r\n
\r\n );\r\n }} otherwise={() => {\r\n return (\r\n
\r\n

{RioResources.find(\"DeliveryInfo\").text}

\r\n

\r\n Delivery estimates based upon orders being loaded on to a single vehicle.\r\n

\r\n

\r\n Orders will be processed on 4 Bank Holidays per year, Easter Monday, Early May,\r\n Late May (Summer) and August Bank Holidays and will be delivered on the next scheduled delivery day, as per the schedule above.\r\n Deliveries will also be made on these days within the M25 for orders received the previous working day unless advised otherwise.\r\n

\r\n

\r\n Orders not received by the order deadline will be deemed to have been received the following working day.\r\n

\r\n

\r\n The above delivery days do not apply for orders in excess of 90 dozen or requiring a booking which will be delivered at the earliest opportunity\r\n

\r\n

\r\n Additional charges may apply if delivery instructions incur {this.state.deliveryEstimateResult?.estimate?.deliveryProvider ? this.state.deliveryEstimateResult.estimate.deliveryProvider : \"\"} in any extra costs e.g. Specified vehicle size, two man delivery, out of hours delivery times or single products per pallet.\r\n

\r\n
\r\n );\r\n }} />\r\n
\r\n
\r\n );\r\n }\r\n\r\n handleDeliveryProviderChanged(selectedOption: SelectOption) {\r\n let deliveryEstimate = { \r\n ...this.state.deliveryEstimate,\r\n organisationID: parseInt(selectedOption.value)\r\n };\r\n\r\n this.setState({\r\n deliveryEstimate: deliveryEstimate,\r\n selectedDeliveryProvider: selectedOption\r\n });\r\n }\r\n\r\n handlePostcodeChanged(event: React.ChangeEvent) {\r\n let deliveryEstimate = { \r\n ...this.state.deliveryEstimate,\r\n postcode: event.target.value\r\n };\r\n\r\n this.setState({\r\n deliveryEstimate: deliveryEstimate\r\n });\r\n }\r\n\r\n handleNoOfCasesChanged(event: React.ChangeEvent) {\r\n let deliveryEstimate = { \r\n ...this.state.deliveryEstimate,\r\n caseQuantity: parseInt(event.target.value)\r\n };\r\n\r\n this.setState({\r\n deliveryEstimate: deliveryEstimate\r\n });\r\n }\r\n\r\n getEstimate() {\r\n DeliveryEstimateApi.getDeliveryEstimate(this.state.deliveryEstimate, response => {\r\n if (response.success) {\r\n this.setState({\r\n deliveryEstimateResult: response.item,\r\n loading: false\r\n });\r\n } else {\r\n this.validator.clearModelErrors(this);\r\n this.validator.addModelErrors(this, response.errors);\r\n\r\n this.setState({\r\n deliveryEstimateResult: null,\r\n loading: false,\r\n error: true,\r\n errors: response.errors\r\n });\r\n }\r\n });\r\n }\r\n}","import { RioDateHelpers } from 'rio.react.all';\r\n\r\nexport class GrossMarginReportCriteriaApiModel {\r\n salesChannelIDs: string[];\r\n dateFrom: string;\r\n dateTo: string;\r\n\r\n constructor() {\r\n this.salesChannelIDs = [];\r\n\r\n const today = new Date();\r\n const year = today.getFullYear() - (today.getMonth() >= 6 ? 0 : 1);\r\n\r\n // Set default DateFrom to previous July 1st\r\n this.dateFrom = RioDateHelpers.parseOutputDate(new Date(year, 6, 1, 0, 0, 0));\r\n\r\n // Set default DateTo to today\r\n this.dateTo = RioDateHelpers.parseOutputDate(new Date());\r\n }\r\n}","import * as React from 'react';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { Spinner } from 'reactstrap';\r\nimport { IGridViewColumn, RioApiGet, RioApiPost, RioDatePicker, RioFinancial, RioGridView, RioIf, RioResources, RioValidator } from \"rio.react.all\";\r\nimport { GrossMarginReportApiModel } from '../apiModels/Report/GrossMarginReportApiModel';\r\nimport { GrossMarginReportCriteriaApiModel } from '../apiModels/Report/GrossMarginReportCriteriaApiModel';\r\nimport { RioSelect } from '../components/Select';\r\nimport { HttpErrorHelper } from '../helpers/RioHttpErrorHelper';\r\nimport { SelectOption } from '../helpers/RioSelectOption';\r\nimport { ErrorModal } from '../modals/RioErrorModal';\r\n\r\ninterface GrossMarginReportProps extends Partial {\r\n}\r\n\r\ninterface GrossMarginReportState {\r\n searchParams: GrossMarginReportCriteriaApiModel;\r\n // UI State\r\n loading: boolean;\r\n downloading: boolean;\r\n items: GrossMarginReportApiModel[];\r\n availableSalesChannels: SelectOption[];\r\n selectedSalesChannels: SelectOption[];\r\n responseError: string;\r\n}\r\n\r\nexport class GrossMarginReport extends React.Component {\r\n constructor(props: GrossMarginReportProps) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n downloading: false,\r\n items: [],\r\n searchParams: new GrossMarginReportCriteriaApiModel(),\r\n availableSalesChannels: [],\r\n selectedSalesChannels: [],\r\n responseError: null\r\n };\r\n }\r\n\r\n private validator = new RioValidator();\r\n private dateFromDatePicker = React.createRef();\r\n private dateToDatePicker = React.createRef();\r\n\r\n columns: Array> = [\r\n { title: RioResources.find(\"SalesChannel\").text, value: (item) => item.salesChannelName },\r\n { title: RioResources.find(\"Brand\").text, value: (item) => item.brandName },\r\n { title: RioResources.find(\"TotalSales\").text, value: (item) => \"\", displayValue: (item) => },\r\n { title: RioResources.find(\"TotalCosts\").text, value: (item) => \"\", displayValue: (item) => },\r\n { title: RioResources.find(\"GrossProfit\").text, value: (item) => \"\", displayValue: (item) => },\r\n { title: RioResources.find(\"GrossMargin\").text, value: (item) => \"\", displayValue: (item) => item.grossMargin.toFixed(2) + \"%\" }\r\n ];\r\n\r\n componentDidMount() {\r\n RioApiGet.asPromise(\"/api/report/availableSalesChannels\")\r\n .then(response => {\r\n let searchParams = {\r\n ...this.state.searchParams,\r\n salesChannelIDs: response.map(v => v.value)\r\n };\r\n\r\n this.setState({\r\n availableSalesChannels: response,\r\n selectedSalesChannels: response,\r\n searchParams: searchParams\r\n });\r\n })\r\n .catch((response) => {\r\n var error = HttpErrorHelper.handleHttpError(response, this, null); //handles validator errors if validator passed\r\n this.setState({\r\n availableSalesChannels: [],\r\n selectedSalesChannels: [],\r\n responseError: error\r\n });\r\n });\r\n }\r\n\r\n searchClicked() {\r\n this.setState({\r\n loading: true\r\n }, () => {\r\n RioApiPost.asPromise(\"/api/report/grossMargin\", this.state.searchParams)\r\n .then(response => {\r\n this.setState({\r\n items: response,\r\n loading: false\r\n });\r\n })\r\n .catch((response) => {\r\n var error = HttpErrorHelper.handleHttpError(response, this, null); //handles validator errors if validator passed\r\n this.setState({ responseError: error });\r\n });\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

{RioResources.find(\"GrossMarginReport\").text}

\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n name=\"SalesChannel\"\r\n className=\"sales-channel\"\r\n items={this.state.availableSalesChannels}\r\n value={this.state.selectedSalesChannels}\r\n keySelector={(item: SelectOption) => { return item.value }}\r\n descriptionSelector={(item: SelectOption) => { return item.text }}\r\n onSuggestionSelected={(value: SelectOption) => { this.handleSalesChannelSelected(value) }}\r\n isMultiSelect={true}\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handleSearchParamValueChanged(\"dateFrom\", date)}\r\n minDate=\"2017-07-01\"\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handleSearchParamValueChanged(\"dateTo\", date)}\r\n />\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n \r\n } otherwise={\r\n \r\n } />\r\n
\r\n
\r\n\r\n \r\n noResults={RioResources.find(\"NoResultsFound\")}\r\n columns={this.columns}\r\n items={this.state.items}\r\n rowKey={(item: GrossMarginReportApiModel) => item.salesChannelID}\r\n />\r\n\r\n this.setState({ responseError: null })} />\r\n } />\r\n
\r\n );\r\n }\r\n\r\n clear() {\r\n let searchParams = new GrossMarginReportCriteriaApiModel();\r\n searchParams.salesChannelIDs = this.state.availableSalesChannels.map(v => v.value);\r\n\r\n this.setState({\r\n selectedSalesChannels: this.state.availableSalesChannels,\r\n searchParams: searchParams,\r\n items: []\r\n });\r\n }\r\n\r\n handleSalesChannelSelected(item: SelectOption) {\r\n let values = [ ...this.state.selectedSalesChannels ];\r\n\r\n let existingIndex = values.indexOf(item)\r\n if (existingIndex > -1) {\r\n // If item is already selected, deselect it\r\n values.splice(existingIndex, 1)\r\n } else {\r\n values.push(item);\r\n }\r\n\r\n let searchParams = {\r\n ...this.state.searchParams,\r\n salesChannelIDs: values.map(v => v.value)\r\n };\r\n\r\n this.setState({\r\n selectedSalesChannels: values,\r\n searchParams: searchParams\r\n });\r\n }\r\n\r\n handleSearchParamValueChanged(key: string, value: string) {\r\n let searchParams = {\r\n ...this.state.searchParams,\r\n [key]: value\r\n };\r\n\r\n this.setState({ searchParams: searchParams });\r\n }\r\n}","export class BaseUserLoginViewModel {\r\n email: string;\r\n password: string;\r\n rememberMe: boolean;\r\n returnUrl: string;\r\n\r\n constructor() {\r\n this.email = \"\";\r\n this.password = \"\";\r\n this.rememberMe = true;\r\n }\r\n}","import * as React from 'react';\r\nimport { Spinner } from 'reactstrap';\r\nimport { RioApiPost, RioIconButton, RioIf, RioInput, RioResources, RioValidator } from \"rio.react.all\";\r\nimport { BaseUserLoginViewModel } from \"../apiModels/user/baseUserLoginViewModel\";\r\nimport '../styles/login.css';\r\n\r\ninterface LoginProps {\r\n}\r\n\r\n\r\ninterface LoginState {\r\n model: BaseUserLoginViewModel;\r\n loading: boolean;\r\n error: boolean;\r\n resetPassword: boolean;\r\n resetPasswordSent: boolean;\r\n}\r\n\r\nexport class Login extends React.Component {\r\n\r\n constructor(props: LoginProps) {\r\n super(props);\r\n this.state = {\r\n model: new BaseUserLoginViewModel(),\r\n loading: false,\r\n error: false,\r\n resetPassword: false,\r\n resetPasswordSent: false\r\n };\r\n }\r\n\r\n private validator = new RioValidator();\r\n\r\n componentDidMount() {\r\n\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n

{RioResources.find(\"PasswordResetEmailSent\").text}

\r\n\r\n

this.cancelReset()}>\r\n {RioResources.find(\"LoginLink\").text}\r\n

\r\n
\r\n } otherwise={\r\n
\r\n \r\n } />\r\n\r\n this.handleEmailChanged(e)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n placeholder={RioResources.find(\"Email\").text}\r\n />\r\n } />\r\n\r\n this.handlePasswordChanged(e)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n placeholder={RioResources.find(\"Password\").text}\r\n onKeyDown={(e) => this.handlePasswordKeyDown(e)}\r\n />\r\n } />\r\n\r\n this.submit()}\r\n hasPermission={true}>\r\n \r\n } />\r\n\r\n this.cancelReset()}\r\n hasPermission={true}>\r\n \r\n } />\r\n\r\n this.clickedResetPasswordLink()}>\r\n {RioResources.find(\"PasswordResetLinkText\").text}\r\n

\r\n } />\r\n
\r\n } />\r\n
\r\n \r\n );\r\n }\r\n\r\n handleEmailChanged(event: React.ChangeEvent) {\r\n let model = {\r\n ...this.state.model,\r\n email: event.target.value\r\n };\r\n\r\n this.setState({ model: model });\r\n }\r\n\r\n handlePasswordChanged(event: React.ChangeEvent) {\r\n let model = {\r\n ...this.state.model,\r\n password: event.target.value\r\n };\r\n\r\n this.setState({ model: model });\r\n }\r\n\r\n submit() {\r\n this.setState({\r\n loading: true\r\n }, () => {\r\n var submit = new RioApiPost(this.state.resetPassword ? \"/api/userlogin/recovery\" : \"/api/userlogin/login\", this.state.model);\r\n submit.onDone = (response) => { this.submitOnDone(response); };\r\n submit.send();\r\n });\r\n }\r\n\r\n cancelReset() {\r\n this.validator.clearModelErrors(this);\r\n\r\n this.setState({\r\n model: new BaseUserLoginViewModel(),\r\n resetPassword: false,\r\n resetPasswordSent: false\r\n });\r\n }\r\n\r\n submitOnDone(response: any) {\r\n if (response.success) {\r\n if (this.state.resetPassword) {\r\n this.setState({\r\n resetPasswordSent: true,\r\n loading: false\r\n });\r\n } else {\r\n window.location.href = \"/\";\r\n }\r\n } else {\r\n this.validator.clearModelErrors(this);\r\n\r\n this.setState({\r\n error: true,\r\n loading: false\r\n }, () => {\r\n this.validator.addModelErrors(this, response.errors.errors ?? response.errors);\r\n });\r\n }\r\n }\r\n\r\n clickedResetPasswordLink() {\r\n this.validator.clearModelErrors(this);\r\n\r\n this.setState({\r\n model: new BaseUserLoginViewModel(),\r\n resetPassword: true\r\n });\r\n }\r\n\r\n handlePasswordKeyDown(event: React.KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.submit();\r\n }\r\n }\r\n}","export class BasePasswordResetViewModel {\r\n constructor() {\r\n this.key = \"\";\r\n this.password = \"\";\r\n this.verifyPassword = \"\";\r\n }\r\n\r\n key: string;\r\n password: string;\r\n verifyPassword: string;\r\n}","import * as React from 'react';\r\nimport { RouteComponentProps } from \"react-router\";\r\nimport { Spinner } from \"reactstrap\";\r\nimport { RioApiPost, RioIconButton, RioIf, RioInput, RioResources, RioValidator } from \"rio.react.all\";\r\nimport { BasePasswordResetViewModel } from \"../apiModels/user/basePasswordResetViewModel\";\r\n\r\ninterface IPasswordResetParams {\r\n key: string;\r\n}\r\n\r\ninterface PasswordResetProps extends Partial> {\r\n}\r\n\r\ninterface PasswordResetState {\r\n model: BasePasswordResetViewModel;\r\n loading: boolean;\r\n error: boolean;\r\n success: boolean;\r\n}\r\n\r\nexport class PasswordReset extends React.Component {\r\n constructor(props: PasswordResetProps) {\r\n super(props);\r\n\r\n this.state = {\r\n model: new BasePasswordResetViewModel(),\r\n loading: false,\r\n error: false,\r\n success: false\r\n };\r\n }\r\n\r\n private validator = new RioValidator();\r\n\r\n componentDidMount() {\r\n const model: BasePasswordResetViewModel = {\r\n ...this.state.model,\r\n key: this.props.match.params.key\r\n };\r\n\r\n this.setState({\r\n model: model\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n

{RioResources.find(\"PasswordResetComplete\").text //Password reset success, you can now login\r\n }

\r\n {RioResources.find(\"LoginLink\").text}\r\n
\r\n } otherwise={\r\n
\r\n \r\n } otherwise={\r\n \r\n

{RioResources.find(\"ChooseNewPassword\").text}

\r\n\r\n this.handlePasswordChanged(e)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n placeholder={RioResources.find(\"NewPassword\").text}\r\n />\r\n\r\n this.handleConfirmPasswordChanged(e)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n placeholder={RioResources.find(\"ConfirmPassword\").text}\r\n onKeyDown={(e) => this.handleConfirmPasswordKeyDown(e)}\r\n />\r\n\r\n this.submit()}\r\n hasPermission={true}\r\n />\r\n
\r\n } />\r\n
\r\n } />\r\n
\r\n \r\n );\r\n }\r\n\r\n\r\n handlePasswordChanged(event: React.ChangeEvent) {\r\n const model = {\r\n ...this.state.model,\r\n password: event.target.value\r\n };\r\n\r\n this.setState({ model: model });\r\n }\r\n\r\n handleConfirmPasswordChanged(event: React.ChangeEvent) {\r\n const model = {\r\n ...this.state.model,\r\n verifyPassword: event.target.value\r\n };\r\n\r\n this.setState({ model: model });\r\n }\r\n\r\n handleConfirmPasswordKeyDown(event: React.KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.submit();\r\n }\r\n }\r\n\r\n submit() {\r\n this.setState({\r\n loading: true\r\n }, () => {\r\n var submit = new RioApiPost(\"/api/userlogin/reset\", this.state.model);\r\n submit.onDone = (response) => { this.submitOnDone(response); };\r\n submit.send();\r\n });\r\n }\r\n\r\n submitOnDone(response: any) {\r\n if (response.success) {\r\n this.setState({\r\n success: true,\r\n loading: false\r\n });\r\n }\r\n else {\r\n this.validator.clearModelErrors(this);\r\n\r\n this.setState({\r\n error: true,\r\n loading: false\r\n }, () => {\r\n this.validator.addModelErrors(this, response.errors.errors ?? response.errors);\r\n });\r\n }\r\n }\r\n}","import { ApiResponse } from \"rio.react.all\";\r\nimport { ProductCodePrefixApiModel } from \"../apiModels/ProductCode/productCodePrefixApiModel\";\r\nimport { ProductCodePrefixSuffixApiModel } from \"../apiModels/ProductCode/productCodePrefixSuffixApiModel\";\r\nimport { SelectOption } from \"../helpers/RioSelectOption\";\r\nimport { BaseApi } from \"./BaseApi\";\r\n\r\nexport class ProductCodeApi {\r\n static getDrinkTypes(ondone: (response: ApiResponse) => any) {\r\n BaseApi.get(\"/api/productcode/getdrinktypes/\", ondone);\r\n }\r\n\r\n static getDrinkColour(productCodePrefixApiModel: ProductCodePrefixApiModel, ondone: (response: ApiResponse) => any) {\r\n BaseApi.post(\"/api/productcode/getdrinkcolour\", productCodePrefixApiModel, ondone);\r\n }\r\n\r\n static getCountryTerritory(productCodePrefixApiModel: ProductCodePrefixApiModel, ondone: (response: ApiResponse) => any) {\r\n BaseApi.post(\"/api/productcode/getcountryterritory\", productCodePrefixApiModel, ondone);\r\n }\r\n\r\n static getRegion(productCodePrefixApiModel: ProductCodePrefixApiModel, ondone: (response: ApiResponse) => any) {\r\n BaseApi.post(\"/api/productcode/getregion\", productCodePrefixApiModel, ondone);\r\n }\r\n\r\n static generateProductCode(productCodePrefixSuffixApiModel: ProductCodePrefixSuffixApiModel, ondone: (response: ApiResponse) => any) {\r\n BaseApi.post(\"/api/productcode/generateproductcode\", productCodePrefixSuffixApiModel, ondone);\r\n }\r\n\r\n static saveProductCodes(productCodes: string[], ondone: (response: ApiResponse) => any) {\r\n BaseApi.post(\"/api/productcode/saveproductcode\", productCodes, ondone);\r\n }\r\n\r\n //static markStockForSale(internalStockIds: number[], ondone: (response: ApiResponse) => any) {\r\n // BaseApi.post(\"/api/stock/markforsale\", internalStockIds, ondone);\r\n //}\r\n\r\n //static getProductPricingHistory(productPricingHistoryModel: ProductPricingHistoryApiModel,\r\n // ondone: (response: ApiResponse) => any) {\r\n // BaseApi.post(\"/api/product/historicpricing\", productPricingHistoryModel, ondone);\r\n //}\r\n\r\n static getSuffix(ondone: (response: ApiResponse) => any) {\r\n BaseApi.get(\"/api/productcode/getsuffix\", ondone);\r\n }\r\n}","export class ProductCodePrefixApiModel {\r\n prefix: string;\r\n drinkType: string;\r\n drinkColour: string;\r\n countryTerritory: string;\r\n region: string;\r\n notes: string;\r\n}","export class ProductCodePrefixSuffixApiModel {\r\n prefix: string;\r\n drinkType: string;\r\n drinkColour: string;\r\n countryTerritory: string;\r\n region: string;\r\n notes: string;\r\n suffix: string;\r\n unitOfMeasure: string;\r\n quantity: number;\r\n vintage: string;\r\n}","import * as React from 'react';\r\nimport { IGridViewColumn, RioConfirmModal, RioGridView, RioIf, RioInput, RioResources, RioSelect, RioValidator } from \"rio.react.all\";\r\nimport { ProductCodeApi } from \"../apiLayer/productCodeApi\";\r\nimport { ProductCodePrefixApiModel } from \"../apiModels/ProductCode/productCodePrefixApiModel\";\r\nimport { ProductCodePrefixSuffixApiModel } from \"../apiModels/ProductCode/productCodePrefixSuffixApiModel\";\r\nimport { SelectOption } from \"../helpers/RioSelectOption\";\r\n\r\n\r\ninterface ProductCodeGeneratorProps {\r\n}\r\n\r\ninterface ProductCodeGeneratorState {\r\n // UI State\r\n loading: boolean;\r\n prefixApiModel: ProductCodePrefixApiModel;\r\n prefixSuffixApiModel: ProductCodePrefixSuffixApiModel;\r\n drinkTypes: SelectOption[];\r\n selectedDrinkType: SelectOption;\r\n drinkColours: SelectOption[];\r\n selectedColour: SelectOption;\r\n countries: SelectOption[];\r\n selectedCountry: SelectOption;\r\n regions: SelectOption[];\r\n selectedRegion: SelectOption;\r\n suffixes: SelectOption[];\r\n selectedSuffix: SelectOption;\r\n prefixes: SelectOption[];\r\n productCodes: string[];\r\n confirmSaveProductCode: boolean;\r\n successfulProductSave: boolean;\r\n hideSaveButton: boolean;\r\n hideProductCodeGeneratorButton: boolean;\r\n error: boolean;\r\n productCodesAlreadyExists: boolean;\r\n}\r\n\r\nexport class ProductCodeGenerator extends React.Component {\r\n constructor(props: ProductCodeGeneratorState) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n prefixApiModel: new ProductCodePrefixApiModel(),\r\n prefixSuffixApiModel: new ProductCodePrefixSuffixApiModel(),\r\n drinkTypes: [],\r\n selectedDrinkType: null,\r\n drinkColours: [],\r\n selectedColour: null,\r\n countries: [],\r\n selectedCountry: null,\r\n regions: [],\r\n selectedRegion: null,\r\n suffixes: [],\r\n selectedSuffix: null,\r\n prefixes: [],\r\n productCodes: [],\r\n confirmSaveProductCode: false,\r\n successfulProductSave: false,\r\n hideSaveButton: true,\r\n hideProductCodeGeneratorButton: true,\r\n error: false,\r\n productCodesAlreadyExists: false\r\n };\r\n\r\n this.showHideGenerateButton = this.showHideGenerateButton.bind(this);\r\n }\r\n\r\n private validator = new RioValidator();\r\n\r\n columns: Array> = [\r\n { title: RioResources.find(\"ProductCode\").text, value: (item) => item }\r\n ];\r\n\r\n componentDidMount() {\r\n this.getDrinkTypes();\r\n\r\n ProductCodeApi.getSuffix(response => {\r\n const prefixSuffixApiModel: ProductCodePrefixSuffixApiModel = {\r\n ...this.state.prefixSuffixApiModel,\r\n suffix: response.item[0].value\r\n };\r\n\r\n this.setState({\r\n suffixes: response.item,\r\n prefixSuffixApiModel: prefixSuffixApiModel\r\n });\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

{RioResources.find(\"ProductCodeGenerator\").text}

\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n name=\"DrinkType\"\r\n items={this.state.drinkTypes}\r\n value={!!this.state.selectedDrinkType ? [this.state.selectedDrinkType] : []}\r\n keySelector={(item: SelectOption) => { return item.value }}\r\n descriptionSelector={(item: SelectOption) => { return item.text }}\r\n onSuggestionSelected={(value: SelectOption) => { this.handleDrinkTypeChanged(value, this.showHideGenerateButton) }}\r\n />\r\n
\r\n\r\n 1} then={\r\n
\r\n \r\n \r\n name=\"Colour\"\r\n items={this.state.drinkColours}\r\n value={!!this.state.selectedColour ? [this.state.selectedColour] : []}\r\n keySelector={(item: SelectOption) => { return item.value }}\r\n descriptionSelector={(item: SelectOption) => { return item.text }}\r\n onSuggestionSelected={(value: SelectOption) => { this.handleDrinkColourChanged(value, this.showHideGenerateButton) }}\r\n />\r\n
\r\n } />\r\n\r\n 1 && this.state.countries.length >= 1} then={\r\n
\r\n \r\n \r\n name=\"Country\"\r\n items={this.state.countries}\r\n value={!!this.state.selectedCountry ? [this.state.selectedCountry] : []}\r\n keySelector={(item: SelectOption) => { return item.value }}\r\n descriptionSelector={(item: SelectOption) => { return item.text }}\r\n onSuggestionSelected={(value: SelectOption) => { this.handleCountryChanged(value, this.showHideGenerateButton) }}\r\n />\r\n
\r\n } />\r\n\r\n 1} then={\r\n
\r\n \r\n \r\n name=\"Region\"\r\n items={this.state.regions}\r\n value={!!this.state.selectedRegion ? [this.state.selectedRegion] : []}\r\n keySelector={(item: SelectOption) => item.value}\r\n descriptionSelector={(item: SelectOption) => item.text}\r\n onSuggestionSelected={(value: SelectOption) => this.handleRegionChanged(value, this.showHideGenerateButton)}\r\n />\r\n
\r\n } />\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n name=\"Suffix\"\r\n items={this.state.suffixes}\r\n value={!!this.state.selectedSuffix ? [this.state.selectedSuffix] : []}\r\n keySelector={(item: SelectOption) => item.value}\r\n descriptionSelector={(item: SelectOption) => item.text}\r\n onSuggestionSelected={(value: SelectOption) => this.handleSuffixChanged(value, this.showHideGenerateButton)}\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handleVintageChanged(e, this.showHideGenerateButton)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handleQuantityChanged(e, this.showHideGenerateButton)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n />\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n } />\r\n\r\n 0} then={\r\n \r\n noResults={RioResources.find(\"NoResultsFound\")}\r\n columns={this.columns}\r\n items={this.state.productCodes}\r\n rowKey={(item: string) => item}\r\n />\r\n } />\r\n\r\n 0 && !this.state.hideSaveButton} then={\r\n
\r\n \r\n
\r\n } />\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.saveProductCode(result)}\r\n />\r\n } />\r\n \r\n );\r\n }\r\n\r\n getDrinkTypes(callback: () => void = () => {}) {\r\n ProductCodeApi.getDrinkTypes(response => {\r\n this.setState({\r\n drinkTypes: response.item ?? [],\r\n productCodes: []\r\n }, () => {\r\n if (response.item[0]?.value === \"\") {\r\n this.handleDrinkTypeChanged(response.item[0], callback);\r\n } else {\r\n this.setState({\r\n drinkColours: [],\r\n countries: [],\r\n regions: [],\r\n selectedColour: null,\r\n selectedCountry: null,\r\n selectedRegion: null\r\n }, callback);\r\n }\r\n });\r\n });\r\n }\r\n\r\n getDrinkColours(prefixApiModel: ProductCodePrefixApiModel, prefixSuffixApiModel: ProductCodePrefixSuffixApiModel, callback: () => void = () => {}) {\r\n ProductCodeApi.getDrinkColour(prefixApiModel, response => {\r\n this.setState({\r\n drinkColours: response.item ?? [],\r\n productCodes: []\r\n }, () => {\r\n if (response.item?.length === 1 || response.item[0]?.value === \"\") {\r\n this.handleDrinkColourChanged(response.item[0], callback);\r\n } else {\r\n this.setState({\r\n countries: [],\r\n regions: [],\r\n selectedCountry: null,\r\n selectedRegion: null\r\n }, callback);\r\n }\r\n });\r\n });\r\n }\r\n\r\n getCountryTerritories(prefixApiModel: ProductCodePrefixApiModel, prefixSuffixApiModel: ProductCodePrefixSuffixApiModel, callback: () => void = () => {}) {\r\n ProductCodeApi.getCountryTerritory(prefixApiModel, response => {\r\n this.setState({\r\n countries: response.item ?? [],\r\n productCodes: []\r\n }, () => {\r\n if (response.item?.length === 1) {\r\n this.handleCountryChanged(response.item[0], callback);\r\n } else {\r\n this.setState({\r\n regions: [],\r\n selectedRegion: null\r\n }, callback);\r\n }\r\n });\r\n });\r\n }\r\n\r\n getRegions(prefixApiModel: ProductCodePrefixApiModel, prefixSuffixApiModel: ProductCodePrefixSuffixApiModel, callback: () => void = () => {}) {\r\n ProductCodeApi.getRegion(prefixApiModel, response => {\r\n this.setState({\r\n regions: response.item ?? [],\r\n productCodes: []\r\n }, () => {\r\n if (response.item?.length === 1 || response.item[0]?.value === \"\") {\r\n this.handleRegionChanged(response.item[0], callback);\r\n } else {\r\n callback();\r\n }\r\n });\r\n });\r\n }\r\n\r\n handleDrinkTypeChanged(selectedOption: SelectOption, callback: () => void = () => {}) {\r\n const prefixApiModel: ProductCodePrefixApiModel = {\r\n ...this.state.prefixApiModel,\r\n drinkType: selectedOption.value\r\n };\r\n\r\n const prefixSuffixApiModel: ProductCodePrefixSuffixApiModel = {\r\n ...this.state.prefixSuffixApiModel,\r\n drinkType: selectedOption.value,\r\n drinkColour: null,\r\n countryTerritory: null,\r\n region: null\r\n };\r\n\r\n this.setState({\r\n prefixApiModel: prefixApiModel,\r\n prefixSuffixApiModel: prefixSuffixApiModel,\r\n productCodes: [],\r\n successfulProductSave: false,\r\n selectedDrinkType: selectedOption,\r\n selectedRegion: null,\r\n regions: [],\r\n selectedColour: null,\r\n drinkColours: [],\r\n selectedCountry: null,\r\n countries: []\r\n }, () => {\r\n this.getDrinkColours(prefixApiModel, prefixSuffixApiModel, callback);\r\n });\r\n }\r\n\r\n handleDrinkColourChanged(selectedOption: SelectOption, callback: () => void = () => {}) {\r\n const prefixApiModel: ProductCodePrefixApiModel = {\r\n ...this.state.prefixApiModel,\r\n drinkColour: selectedOption.value,\r\n countryTerritory: null,\r\n region: null\r\n };\r\n\r\n const prefixSuffixApiModel: ProductCodePrefixSuffixApiModel = {\r\n ...this.state.prefixSuffixApiModel,\r\n drinkColour: selectedOption.value,\r\n countryTerritory: null,\r\n region: null\r\n };\r\n\r\n this.setState({\r\n prefixApiModel: prefixApiModel,\r\n prefixSuffixApiModel: prefixSuffixApiModel,\r\n productCodes: [],\r\n successfulProductSave: false,\r\n selectedColour: selectedOption,\r\n selectedCountry: null,\r\n countries: [],\r\n selectedRegion: null,\r\n regions: []\r\n }, () => {\r\n this.getCountryTerritories(prefixApiModel, prefixSuffixApiModel, callback);\r\n });\r\n }\r\n\r\n handleCountryChanged(selectedOption: SelectOption, callback: () => void = () => {}) {\r\n const prefixApiModel: ProductCodePrefixApiModel = {\r\n ...this.state.prefixApiModel,\r\n countryTerritory: selectedOption.value,\r\n region: null\r\n };\r\n\r\n const prefixSuffixApiModel: ProductCodePrefixSuffixApiModel = {\r\n ...this.state.prefixSuffixApiModel,\r\n countryTerritory: selectedOption.value,\r\n region: null\r\n };\r\n\r\n this.setState({\r\n prefixApiModel: prefixApiModel,\r\n prefixSuffixApiModel: prefixSuffixApiModel,\r\n productCodes: [],\r\n successfulProductSave: false,\r\n selectedCountry: selectedOption,\r\n selectedRegion: null,\r\n regions: []\r\n }, () => {\r\n this.getRegions(prefixApiModel, prefixSuffixApiModel, callback);\r\n });\r\n }\r\n\r\n handleRegionChanged(selectedOption: SelectOption, callback: () => void = () => {}) {\r\n const prefixApiModel: ProductCodePrefixApiModel = {\r\n ...this.state.prefixApiModel,\r\n region: selectedOption.value\r\n };\r\n\r\n const prefixSuffixApiModel: ProductCodePrefixSuffixApiModel = {\r\n ...this.state.prefixSuffixApiModel,\r\n region: selectedOption.value\r\n };\r\n\r\n this.setState({\r\n prefixApiModel: prefixApiModel,\r\n prefixSuffixApiModel: prefixSuffixApiModel,\r\n productCodes: [],\r\n successfulProductSave: false,\r\n selectedRegion: selectedOption\r\n }, callback);\r\n }\r\n\r\n handleSuffixChanged(selectedOption: SelectOption, callback: () => void = () => {}) {\r\n const prefixSuffixApiModel: ProductCodePrefixSuffixApiModel = {\r\n ...this.state.prefixSuffixApiModel,\r\n suffix: selectedOption.value\r\n };\r\n\r\n this.setState({\r\n prefixSuffixApiModel: prefixSuffixApiModel,\r\n successfulProductSave: false,\r\n selectedSuffix: selectedOption\r\n }, callback);\r\n }\r\n\r\n handleQuantityChanged(event: React.ChangeEvent, callback: () => void = () => {}) {\r\n const prefixSuffixApiModel: ProductCodePrefixSuffixApiModel = {\r\n ...this.state.prefixSuffixApiModel,\r\n quantity: parseInt(event.target.value)\r\n };\r\n\r\n this.setState({\r\n prefixSuffixApiModel: prefixSuffixApiModel,\r\n successfulProductSave: false\r\n }, callback);\r\n }\r\n\r\n handleVintageChanged(event: React.ChangeEvent, callback: () => void = () => {}) {\r\n const prefixSuffixApiModel: ProductCodePrefixSuffixApiModel = {\r\n ...this.state.prefixSuffixApiModel,\r\n vintage: event.target.value\r\n };\r\n\r\n this.setState({\r\n prefixSuffixApiModel: prefixSuffixApiModel,\r\n successfulProductSave: false\r\n }, callback);\r\n }\r\n \r\n generateProductCode() {\r\n this.setState({\r\n productCodes: [],\r\n hideSaveButton: true,\r\n successfulProductSave: false,\r\n error: false\r\n }, () => {\r\n ProductCodeApi.generateProductCode(this.state.prefixSuffixApiModel, response => {\r\n if (response.success) {\r\n this.setState({\r\n productCodes: response.item,\r\n successfulProductSave: false,\r\n hideSaveButton: false,\r\n error: false\r\n });\r\n } else {\r\n this.validator.clearModelErrors(this);\r\n this.validator.addModelErrors(this, response.errors);\r\n\r\n this.setState({\r\n error: true\r\n });\r\n }\r\n });\r\n })\r\n }\r\n\r\n saveProductCode(result: boolean) {\r\n if (result) {\r\n ProductCodeApi.saveProductCodes(this.state.productCodes, response => {\r\n if (response.success && response.item > 0) {\r\n this.setState({\r\n hideProductCodeGeneratorButton: true,\r\n successfulProductSave: true,\r\n hideSaveButton: true\r\n });\r\n } else {\r\n this.setState({\r\n successfulProductSave: false\r\n });\r\n }\r\n });\r\n }\r\n\r\n this.setState({\r\n confirmSaveProductCode: false\r\n });\r\n }\r\n\r\n showHideGenerateButton() {\r\n this.setState({\r\n hideProductCodeGeneratorButton: !this.determineGenerateButtonEnabled()\r\n });\r\n }\r\n\r\n determineGenerateButtonEnabled(): boolean {\r\n const prefixSuffixApiModel = this.state.prefixSuffixApiModel;\r\n\r\n const enabled = !!prefixSuffixApiModel\r\n && !!prefixSuffixApiModel.drinkType\r\n && (!this.state.drinkColours.length || this.state.drinkColours.some(r => r.value === \"\") || !!prefixSuffixApiModel.drinkColour)\r\n && (!this.state.countries.length || this.state.countries.some(r => r.value === \"\") || !!prefixSuffixApiModel.countryTerritory)\r\n && (!this.state.regions.length || this.state.regions.some(r => r.value === \"\") || !!prefixSuffixApiModel.region)\r\n && !!prefixSuffixApiModel.suffix\r\n && !!prefixSuffixApiModel.vintage\r\n && !!prefixSuffixApiModel.quantity;\r\n\r\n return enabled;\r\n }\r\n}","import moment from \"moment\";\r\nimport { RioDateHelpers } from \"rio.react.all\";\r\n\r\nexport class CustomerCategoryDistributionCacheRefreshApiModel {\r\n constructor() {\r\n this.dateFrom = RioDateHelpers.parseOutputDate(moment().subtract(7, 'days').toDate());\r\n this.dateTo = RioDateHelpers.parseOutputDate(new Date());\r\n }\r\n\r\n dateFrom: string;\r\n dateTo: string;\r\n}","import moment from \"moment\";\r\nimport { RioDateHelpers } from \"rio.react.all\";\r\n\r\nexport class CustomerCategoryRepairApiModel {\r\n constructor() {\r\n this.dateFrom = RioDateHelpers.parseOutputDate(moment().subtract(7, 'days').toDate());\r\n this.brandId = 0;\r\n }\r\n\r\n dateFrom: string;\r\n brandId: number;\r\n}","import * as React from 'react';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { Spinner } from 'reactstrap';\r\nimport { RioApiGet, RioApiPost, RioDatePicker, RioIf, RioResources, RioSelect, RioValidator } from \"rio.react.all\";\r\nimport { CustomerCategoryDistributionCacheRefreshApiModel } from '../apiModels/repair/customerCategoryDistributionCacheRefreshApiModel';\r\nimport { CustomerCategoryRepairApiModel } from '../apiModels/repair/customerCategoryRepairApiModel';\r\nimport { HttpErrorHelper } from '../helpers/RioHttpErrorHelper';\r\nimport { SelectOption } from '../helpers/RioSelectOption';\r\nimport { ErrorModal } from '../modals/RioErrorModal';\r\n\r\n\r\ninterface RepairProps extends Partial {\r\n}\r\n\r\ninterface RepairSearchState {\r\n customerCategoryRepair: CustomerCategoryRepairApiModel;\r\n customerCategoryDistributionCacheRefresh: CustomerCategoryDistributionCacheRefreshApiModel\r\n // UI State\r\n loadingCustomerCategoryOk: boolean;\r\n loadingCustomerCategoryDistributionCacheRefreshOk: boolean;\r\n responseError: string;\r\n availableBrands: SelectOption[];\r\n selectedBrand: SelectOption;\r\n}\r\n\r\nexport class Repair extends React.Component {\r\n constructor(props: RepairProps) {\r\n super(props);\r\n\r\n this.state = {\r\n loadingCustomerCategoryOk: false,\r\n loadingCustomerCategoryDistributionCacheRefreshOk: false,\r\n responseError: null,\r\n customerCategoryRepair: new CustomerCategoryRepairApiModel(),\r\n customerCategoryDistributionCacheRefresh: new CustomerCategoryDistributionCacheRefreshApiModel(),\r\n availableBrands: [],\r\n selectedBrand: null\r\n };\r\n }\r\n\r\n private validator = new RioValidator();\r\n private dateFromCustomerCategoryDatePicker = React.createRef();\r\n private dateFromDistributionCacheRefreshDatePicker = React.createRef();\r\n private dateToDistributionCacheRefreshDatePicker = React.createRef();\r\n\r\n componentDidMount() {\r\n const call1 = new RioApiGet(\"/api/customersearch/availablebrands/true\");\r\n call1.onDone = response => {\r\n if (response.success) {\r\n this.setState({\r\n availableBrands: response.item,\r\n selectedBrand: response.item.find(m => m.value === this.state.customerCategoryRepair.brandId.toString())\r\n });\r\n } else {\r\n this.setState({\r\n availableBrands: [],\r\n selectedBrand: null\r\n });\r\n\r\n //if (response.statusCode == 404) {\r\n // this.setState({\r\n // validationError: RioResources.find(\"CustomerReservePDFNotFound\").text\r\n // });\r\n\r\n //}\r\n }\r\n }\r\n call1.send();\r\n }\r\n\r\n customerCategoryOkClicked() {\r\n this.setState({\r\n loadingCustomerCategoryOk: true\r\n }, () => {\r\n\r\n const call = new RioApiPost(\"/api/repair/customercategory\", this.state.customerCategoryRepair);\r\n call.onDone = response => {\r\n this.setState({ loadingCustomerCategoryOk: false });\r\n\r\n if (!response.success) {\r\n var error = HttpErrorHelper.handleHttpError(response, this, null); //handles validator errors if validator passed\r\n this.setState({ responseError: error });\r\n }\r\n }\r\n call.send();\r\n });\r\n }\r\n\r\n customerCategoryDistributionCacheRefreshOkClicked() {\r\n this.setState({\r\n loadingCustomerCategoryDistributionCacheRefreshOk: true\r\n }, () => {\r\n const call = new RioApiPost(\"/api/repair/customercategorydistributioncacherefresh\", this.state.customerCategoryDistributionCacheRefresh);\r\n call.onDone = response => {\r\n this.setState({ loadingCustomerCategoryDistributionCacheRefreshOk: false });\r\n\r\n if (!response.success) {\r\n var error = HttpErrorHelper.handleHttpError(response, this, null); //handles validator errors if validator passed\r\n this.setState({ responseError: error });\r\n }\r\n }\r\n call.send();\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

{RioResources.find(\"CustomerCategoryRepair\").text}

\r\n
\r\n\r\n
\r\n
\r\n \r\n this.handleCustomerCategoryDateFromChanged(date)}\r\n nullable={true}\r\n />\r\n
\r\n\r\n
\r\n \r\n \r\n name=\"Brand\"\r\n items={this.state.availableBrands}\r\n value={!!this.state.selectedBrand ? [this.state.selectedBrand] : []}\r\n keySelector={(item: SelectOption) => { return item.value }}\r\n descriptionSelector={(item: SelectOption) => { return item.text }}\r\n onSuggestionSelected={(value: SelectOption) => { this.handleCustomerCategoryBrandChanged(value) }}\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n } otherwise={\r\n \r\n } />\r\n
\r\n
\r\n\r\n
\r\n

{RioResources.find(\"CustomerCategoryDistributionCacheRefresh\").text}

\r\n
\r\n\r\n
\r\n
\r\n \r\n this.handleDistributionCacheRefreshDateFromChanged(date)}\r\n nullable={true}\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handleDistributionCacheRefreshDateToChanged(date)}\r\n nullable={true}\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n } otherwise={\r\n \r\n } />\r\n
\r\n
\r\n\r\n this.setState({ responseError: null })} />\r\n } />\r\n
\r\n );\r\n }\r\n\r\n handleCustomerCategoryDateFromChanged(value: string) {\r\n if (value !== null && this.state.customerCategoryRepair.dateFrom !== value) {\r\n const customerCategoryRepair = {\r\n ...this.state.customerCategoryRepair,\r\n dateFrom: value\r\n };\r\n\r\n this.setState({\r\n customerCategoryRepair: customerCategoryRepair\r\n });\r\n }\r\n }\r\n\r\n handleCustomerCategoryBrandChanged(selectedOption: SelectOption) {\r\n if (this.state.selectedBrand?.value !== selectedOption.value) {\r\n const customerCategoryRepair = {\r\n ...this.state.customerCategoryRepair,\r\n brandId: parseInt(selectedOption.value)\r\n };\r\n\r\n this.setState({\r\n customerCategoryRepair: customerCategoryRepair\r\n });\r\n }\r\n }\r\n\r\n handleDistributionCacheRefreshDateFromChanged(value: string) {\r\n if (value !== null && this.state.customerCategoryDistributionCacheRefresh.dateFrom !== value) {\r\n const customerCategoryDistributionCacheRefresh = {\r\n ...this.state.customerCategoryDistributionCacheRefresh,\r\n dateFrom: value\r\n };\r\n\r\n this.setState({\r\n customerCategoryDistributionCacheRefresh: customerCategoryDistributionCacheRefresh\r\n });\r\n }\r\n }\r\n\r\n handleDistributionCacheRefreshDateToChanged(value: string) {\r\n if (value !== null && this.state.customerCategoryDistributionCacheRefresh.dateTo !== value) {\r\n const customerCategoryDistributionCacheRefresh = {\r\n ...this.state.customerCategoryDistributionCacheRefresh,\r\n dateTo: value\r\n };\r\n\r\n this.setState({\r\n customerCategoryDistributionCacheRefresh: customerCategoryDistributionCacheRefresh\r\n });\r\n }\r\n }\r\n}","import { UserApiModel } from \"../apiModels/user/userApiModel\";\r\nimport { ApiResponse } from \"rio.react.all\";\r\nimport { BaseApi } from \"./BaseApi\";\r\nimport { SecurityGroupApiModel } from \"../apiModels/user/userGroupApiModel\";\r\n\r\n\r\nexport class UserApi {\r\n\r\n static getUsers(ondone: (response: ApiResponse) => any) {\r\n BaseApi.get(\"/api/user\", ondone);\r\n }\r\n\r\n static getUser(userId: number, ondone: (response: ApiResponse) => any) {\r\n BaseApi.get(\"/api/user/\" + userId, ondone);\r\n }\r\n\r\n static postUser(user: UserApiModel, ondone: (response: ApiResponse) => any) {\r\n BaseApi.post(\"/api/user\", user, ondone);\r\n }\r\n\r\n static passwordReset(email: string, ondone: (response: ApiResponse) => any) {\r\n BaseApi.post(\"/api/user/passwordreset/\" + email, null, ondone);\r\n }\r\n\r\n static deleteUser(userId: number, ondone: (response: ApiResponse) => any) {\r\n BaseApi.delete(\"/api/user/\" + userId, ondone);\r\n }\r\n\r\n static getAvailableGroups(ondone: (response: ApiResponse) => any) {\r\n BaseApi.get(\"/api/user/availablegroups\", ondone);\r\n }\r\n}","import { SecurityGroupApiModel } from \"./userGroupApiModel\";\r\n\r\nexport class UserApiModel {\r\n userID: number;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n lastLogin: string;\r\n //active: boolean;\r\n locked: boolean;\r\n securityGroups: SecurityGroupApiModel[];\r\n hasAccess: boolean;\r\n\r\n constructor() {\r\n this.securityGroups = [];\r\n }\r\n}","import * as React from \"react\";\r\nimport { RouteComponentProps } from \"react-router\";\r\nimport { Spinner } from 'reactstrap';\r\nimport { RioCheckbox, RioForEach, RioIf, RioIfFunc, RioInput, RioModal, RioResources, RioValidator } from \"rio.react.all\";\r\nimport { UserApi } from \"../apiLayer/UserApi\";\r\nimport { UserApiModel } from \"../apiModels/user/userApiModel\";\r\nimport { SecurityGroupApiModel } from \"../apiModels/user/userGroupApiModel\";\r\n\r\ninterface IUserAddUpdateParams {\r\n userId: string;\r\n}\r\n\r\ninterface IUserAddUpdateProps extends Partial> {\r\n userId: number;\r\n onClose: () => void;\r\n}\r\n\r\ninterface IUserAddUpdateState {\r\n // Bindings\r\n user: UserApiModel;\r\n loading: boolean;\r\n saving: boolean;\r\n sendingReset: boolean;\r\n error: boolean;\r\n passwordResetSent: boolean;\r\n availableGroups: SecurityGroupApiModel[];\r\n}\r\n\r\nexport class UserAddUpdateModal extends React.Component {\r\n constructor(props: Readonly) {\r\n super(props);\r\n\r\n this.state = {\r\n user: null,\r\n loading: true,\r\n saving: false,\r\n sendingReset: false,\r\n error: false,\r\n passwordResetSent: false,\r\n availableGroups: []\r\n };\r\n }\r\n\r\n private validator = new RioValidator();\r\n\r\n componentDidMount() {\r\n this.getUser();\r\n }\r\n\r\n getUser() {\r\n if (this.props.userId === 0 || isNaN(this.props.userId)) {\r\n var newUser = new UserApiModel();\r\n newUser.securityGroups = [];\r\n newUser.userID = 0;\r\n\r\n this.setState({\r\n user: newUser\r\n });\r\n\r\n UserApi.getAvailableGroups(response => {\r\n this.setState({\r\n availableGroups: response.item,\r\n loading: false\r\n });\r\n });\r\n } else {\r\n UserApi.getUser(this.props.userId, response => {\r\n if (response.success) {\r\n this.setState({\r\n user: response.item\r\n }, () => {\r\n UserApi.getAvailableGroups(response => {\r\n for (var i = 0; i < response.item?.length || 0; i++) {\r\n for (var j = 0; j < this.state.user.securityGroups?.length || 0; j++) {\r\n if (this.state.user.securityGroups[j].securityGroupID === response.item[i].securityGroupID) {\r\n response.item[i].selected = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n availableGroups: response.item,\r\n loading: false\r\n });\r\n });\r\n });\r\n } else {\r\n this.setState({\r\n error: true,\r\n loading: false\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n this.handleModalCloseClicked()} className=\"large\">\r\n
\r\n {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }} otherwise={() => {\r\n return (\r\n \r\n
\r\n {this.renderTitle()}\r\n
\r\n\r\n
\r\n
\r\n \r\n this.handleFirstNameChanged(e)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handleLastNameChanged(e)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handleEmailChanged(e)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n />\r\n
\r\n\r\n
\r\n \r\n
\r\n this.handleLockedChanged()}\r\n />\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n this.handleActiveChanged()}\r\n />\r\n
\r\n
\r\n\r\n 0} then={\r\n
\r\n \r\n
\r\n {\r\n return (\r\n
\r\n this.handleGroupSelectedChanged(item)}\r\n key={item.securityGroupID}\r\n />\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.renderPasswordReset()}\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n } otherwise={\r\n \r\n } />\r\n
\r\n
\r\n
\r\n );\r\n }} />\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderTitle() {\r\n if (!this.state.user) {\r\n return \"\";\r\n }\r\n\r\n if (this.state.user.userID === 0) {\r\n return

New User

;\r\n }\r\n\r\n return

Edit User

;\r\n }\r\n\r\n renderPasswordReset() {\r\n if (this.state.passwordResetSent) {\r\n return (\r\n

\r\n {RioResources.find(\"PasswordResetSent\").text}\r\n

\r\n );\r\n }\r\n\r\n if (!this.state.user || this.state.user.userID === 0 || this.state.loading) {\r\n return \"\"; // Can't reset password of a new user\r\n }\r\n\r\n return (\r\n
\r\n \r\n } otherwise={\r\n \r\n } />\r\n
\r\n );\r\n }\r\n\r\n sendPasswordReset() {\r\n this.setState({\r\n sendingReset: true\r\n }, () => {\r\n UserApi.passwordReset(this.state.user.email, () => {\r\n this.setState({\r\n sendingReset: false,\r\n passwordResetSent: true\r\n });\r\n });\r\n });\r\n }\r\n\r\n cancel() {\r\n this.props.onClose();\r\n }\r\n\r\n save() {\r\n this.setState({\r\n saving: true\r\n }, () => {\r\n UserApi.postUser(this.state.user, response => {\r\n if (response.success) {\r\n this.setState({\r\n saving: false\r\n }, () => {\r\n this.props.onClose();\r\n });\r\n } else {\r\n this.validator.clearModelErrors(this);\r\n this.validator.addModelErrors(this, response.errors);\r\n\r\n this.setState({\r\n error: true,\r\n saving: false\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n handleModalCloseClicked() {\r\n this.props.onClose();\r\n }\r\n\r\n handleFirstNameChanged(event: React.ChangeEvent) {\r\n let user = {\r\n ...this.state.user,\r\n firstName: event.target.value\r\n };\r\n\r\n this.setState({ user: user });\r\n }\r\n\r\n handleLastNameChanged(event: React.ChangeEvent) {\r\n let user = {\r\n ...this.state.user,\r\n lastName: event.target.value\r\n };\r\n\r\n this.setState({ user: user });\r\n }\r\n\r\n handleEmailChanged(event: React.ChangeEvent) {\r\n let user = {\r\n ...this.state.user,\r\n email: event.target.value\r\n };\r\n\r\n this.setState({ user: user });\r\n }\r\n\r\n handleLockedChanged() {\r\n let user = {\r\n ...this.state.user,\r\n locked: !this.state.user.locked\r\n };\r\n\r\n this.setState({ user: user });\r\n }\r\n\r\n handleActiveChanged() {\r\n let user = {\r\n ...this.state.user,\r\n hasAccess: !this.state.user.hasAccess\r\n };\r\n\r\n this.setState({ user: user });\r\n }\r\n\r\n handleGroupSelectedChanged(item: SecurityGroupApiModel) {\r\n let group = this.state.availableGroups.find(g => g.securityGroupID === item.securityGroupID);\r\n group = {\r\n ...group,\r\n selected: !group.selected\r\n };\r\n\r\n const availableGroups = this.state.availableGroups.map((item) => item.securityGroupID === group.securityGroupID ? group : item);\r\n\r\n let securityGroups = [ ...this.state.user.securityGroups ];\r\n\r\n let existingIndex = securityGroups.findIndex(sg => sg.securityGroupID === item.securityGroupID)\r\n if (existingIndex > -1) {\r\n // If item is already selected, deselect it\r\n securityGroups.splice(existingIndex, 1)\r\n } else {\r\n securityGroups.push(item);\r\n }\r\n\r\n const user: UserApiModel = {\r\n ...this.state.user,\r\n securityGroups: securityGroups\r\n };\r\n\r\n this.setState({\r\n user: user,\r\n availableGroups: availableGroups\r\n })\r\n }\r\n}\r\n\r\n","import moment from 'moment';\r\nimport * as React from 'react';\r\nimport { IGridViewAction, IGridViewColumn, RioConfirmModal, RioGridView, RioResources, RioIfFunc } from \"rio.react.all\";\r\nimport { UserApi } from \"../apiLayer/UserApi\";\r\nimport { UserApiModel } from \"../apiModels/user/userApiModel\";\r\nimport { UserAddUpdateModal } from \"../modals/UserAddUpdate\";\r\n\r\n\r\ninterface UsersProps {\r\n}\r\n\r\ninterface UsersState {\r\n // UI State\r\n loading: boolean;\r\n selectedUserId?: number;\r\n deleteUserId?: number;\r\n users: UserApiModel[];\r\n}\r\n\r\nexport class Users extends React.Component {\r\n constructor(props: UsersProps) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n selectedUserId: null,\r\n deleteUserId: null,\r\n users: []\r\n };\r\n }\r\n\r\n columns: Array> = [\r\n { title: RioResources.find(\"FirstName\").text, value: (item) => item.firstName },\r\n { title: RioResources.find(\"LastName\").text, value: (item) => item.lastName },\r\n { title: RioResources.find(\"Email\").text, value: (item) => item.email },\r\n {\r\n title: RioResources.find(\"LastLogin\").text,\r\n value: (item) => item.lastLogin,\r\n displayValue: (item) => !!item.lastLogin ? moment(item.lastLogin).format(\"LLL\") : \"Never\"\r\n },\r\n ];\r\n\r\n actions: Array> = [\r\n { resource: RioResources.find(\"Delete\"), onClick: (item) => this.handleDeleteClicked(item.userID), default: false, hasPermission: true },\r\n { resource: RioResources.find(\"Edit\"), onClick: (item) => this.handleEditClicked(item.userID), default: true, hasPermission: true },\r\n ];\r\n\r\n componentDidMount() {\r\n this.getUsers();\r\n }\r\n\r\n getUsers() {\r\n UserApi.getUsers(response => {\r\n if (response.success) {\r\n this.setState({\r\n users: response.item,\r\n loading: false\r\n });\r\n } else {\r\n this.setState({\r\n users: [],\r\n loading: false\r\n });\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

{RioResources.find(\"Users\").text}

\r\n
\r\n\r\n \r\n\r\n \r\n noResults={RioResources.find(\"NoResultsFound\")}\r\n columns={this.columns}\r\n actions={this.actions}\r\n items={this.state.users}\r\n rowKey={(item: UserApiModel) => item.userID}\r\n />\r\n\r\n {\r\n return (\r\n this.handleUserAddUpdateModalClosed()}\r\n />\r\n );\r\n }} />\r\n\r\n {\r\n return (\r\n this.handleConfirmDeleteModalClosed(result)} \r\n hideImage={true}\r\n />\r\n );\r\n }} />\r\n
\r\n );\r\n }\r\n\r\n addUser(): void {\r\n this.setState({\r\n selectedUserId: 0\r\n });\r\n }\r\n\r\n handleEditClicked(userID: number): void {\r\n this.setState({\r\n selectedUserId: userID\r\n });\r\n }\r\n\r\n handleUserAddUpdateModalClosed() {\r\n this.setState({\r\n selectedUserId: null\r\n }, () => {\r\n this.getUsers();\r\n });\r\n }\r\n\r\n handleDeleteClicked(userID: number): void {\r\n this.setState({\r\n deleteUserId: userID\r\n });\r\n }\r\n\r\n handleConfirmDeleteModalClosed(result: boolean) {\r\n if (result) {\r\n UserApi.deleteUser(this.state.deleteUserId, response => {\r\n if (response.success) {\r\n this.setState({\r\n deleteUserId: null\r\n }, () => {\r\n this.getUsers();\r\n });\r\n }\r\n });\r\n } else {\r\n this.setState({\r\n deleteUserId: null\r\n });\r\n }\r\n }\r\n}","import { ApiResponse } from \"rio.react.all\";\r\nimport { FinancialYearApiModel } from \"../apiModels/FinancialYear/FinancialYearApiModel\";\r\nimport { BaseApi } from \"./BaseApi\";\r\n\r\nexport class FinancialYearApi {\r\n static getList(ondone: (response: ApiResponse) => any) {\r\n BaseApi.get(\"/api/financialyear\", ondone);\r\n }\r\n\r\n static get(financialYearID: number, ondone: (response: ApiResponse) => any) {\r\n BaseApi.get(\"/api/financialyear/\" + financialYearID, ondone);\r\n }\r\n\r\n static addUpdate(financialYear: FinancialYearApiModel, ondone: (response: ApiResponse) => any) {\r\n BaseApi.post(\"/api/financialyear\", financialYear, ondone);\r\n }\r\n\r\n static delete(financialYearID: number, ondone: (response: ApiResponse) => any) {\r\n BaseApi.delete(\"/api/financialyear/\" + financialYearID, ondone);\r\n }\r\n}","export class FinancialYearApiModel {\r\n financialYearID: number;\r\n name: string;\r\n dateStart?: string;\r\n dateEnd?: string;\r\n dateClosed?: string;\r\n}","import * as React from \"react\";\r\nimport { RouteComponentProps } from \"react-router\";\r\nimport { Spinner } from 'reactstrap';\r\nimport { RioIf, RioInput, RioModal, RioResources, RioValidator, RioDatePicker } from \"rio.react.all\";\r\nimport { FinancialYearApi } from \"../apiLayer/FinancialYearApi\";\r\nimport { FinancialYearApiModel } from \"../apiModels/FinancialYear/FinancialYearApiModel\";\r\n\r\ninterface IFinancialYearAddUpdateModalParams {\r\n userId: string;\r\n}\r\n\r\ninterface IFinancialYearAddUpdateModalProps extends Partial> {\r\n financialYearID: number;\r\n onClose: () => void;\r\n}\r\n\r\ninterface IFinancialYearAddUpdateModalState {\r\n // Bindings\r\n financialYear: FinancialYearApiModel;\r\n loading: boolean;\r\n saving: boolean;\r\n error: boolean;\r\n}\r\n\r\nexport class FinancialYearAddUpdateModal extends React.Component {\r\n constructor(props: Readonly) {\r\n super(props);\r\n\r\n this.state = {\r\n financialYear: null,\r\n loading: true,\r\n saving: false,\r\n error: false,\r\n };\r\n }\r\n\r\n private validator = new RioValidator();\r\n\r\n componentDidMount() {\r\n this.getFinancialYear();\r\n }\r\n\r\n getFinancialYear() {\r\n if (this.props.financialYearID === 0 || isNaN(this.props.financialYearID)) {\r\n var newFinancialYear = new FinancialYearApiModel();\r\n newFinancialYear.financialYearID = 0;\r\n\r\n this.setState({\r\n financialYear: newFinancialYear,\r\n loading: false\r\n });\r\n } else {\r\n FinancialYearApi.get(this.props.financialYearID, response => {\r\n if (response.success) {\r\n this.setState({\r\n financialYear: response.item,\r\n loading: false\r\n });\r\n } else {\r\n this.setState({\r\n error: true,\r\n loading: false\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n this.handleModalCloseClicked()} className=\"large\">\r\n
\r\n {this.renderModalContents()}\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderModalContents() {\r\n if (!!this.state.loading) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n
\r\n {this.renderTitle()}\r\n
\r\n\r\n
\r\n
\r\n \r\n this.handleValueChanged(\"name\", e.target.value)}\r\n validator={this.validator}\r\n validations={{ required: true }}\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handleValueChanged(\"dateStart\", date)}\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handleValueChanged(\"dateEnd\", date)}\r\n />\r\n
\r\n\r\n
\r\n \r\n this.handleValueChanged(\"dateClosed\", date)}\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n } otherwise={\r\n \r\n } />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderTitle() {\r\n if (!this.state.financialYear) {\r\n return \"\";\r\n }\r\n\r\n if (this.state.financialYear.financialYearID === 0) {\r\n return

{RioResources.find(\"NewFinancialYear\").text}

;\r\n }\r\n\r\n return

{RioResources.find(\"EditFinancialYear\").text}

;\r\n }\r\n\r\n cancel() {\r\n this.props.onClose();\r\n }\r\n\r\n save() {\r\n this.setState({\r\n saving: true\r\n }, () => {\r\n FinancialYearApi.addUpdate(this.state.financialYear, response => {\r\n if (response.success) {\r\n this.props.onClose();\r\n } else {\r\n this.validator.clearModelErrors(this);\r\n this.validator.addModelErrors(this, response.errors);\r\n\r\n this.setState({\r\n error: true,\r\n saving: false\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n handleModalCloseClicked() {\r\n this.props.onClose();\r\n }\r\n\r\n handleValueChanged(key: string, value: string) {\r\n const financialYear: FinancialYearApiModel = {\r\n ...this.state.financialYear,\r\n [key]: value\r\n };\r\n\r\n this.setState({ financialYear: financialYear });\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { IGridViewAction, IGridViewColumn, RioConfirmModal, RioGridView, RioIfFunc, RioResources, RioDateHelpers } from \"rio.react.all\";\r\nimport { FinancialYearApi } from \"../apiLayer/FinancialYearApi\";\r\nimport { FinancialYearApiModel } from \"../apiModels/FinancialYear/FinancialYearApiModel\";\r\nimport { FinancialYearAddUpdateModal } from \"../modals/FinancialYearAddUpdateModal\";\r\n\r\n\r\ninterface FinancialYearsProps {\r\n}\r\n\r\ninterface FinancialYearsState {\r\n // UI State\r\n loading: boolean;\r\n selectedFinancialYearID?: number;\r\n deleteFinancialYearID?: number;\r\n financialYears: FinancialYearApiModel[];\r\n}\r\n\r\nexport class FinancialYears extends React.Component {\r\n constructor(props: FinancialYearsProps) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n selectedFinancialYearID: null,\r\n deleteFinancialYearID: null,\r\n financialYears: []\r\n };\r\n }\r\n\r\n columns: Array> = [\r\n { title: RioResources.find(\"Name\").text, value: (item) => item.name },\r\n { title: RioResources.find(\"DateFrom\").text, value: (item) => RioDateHelpers.parseDisplayDate(item.dateStart, \"dd/MM/yyyy\") },\r\n { title: RioResources.find(\"DateTo\").text, value: (item) => RioDateHelpers.parseDisplayDate(item.dateEnd, \"dd/MM/yyyy\") },\r\n { title: RioResources.find(\"DateClosed\").text, value: (item) => RioDateHelpers.parseDisplayDate(item.dateClosed, \"dd/MM/yyyy HH:mm:ss\", true) }\r\n ];\r\n\r\n actions: Array> = [\r\n { resource: RioResources.find(\"Delete\"), onClick: (item) => this.handleDeleteClicked(item.financialYearID), default: false, hasPermission: true },\r\n { resource: RioResources.find(\"Edit\"), onClick: (item) => this.handleEditClicked(item.financialYearID), default: true, hasPermission: true },\r\n ];\r\n\r\n componentDidMount() {\r\n this.getFinancialYears();\r\n }\r\n\r\n getFinancialYears() {\r\n FinancialYearApi.getList(response => {\r\n this.setState({\r\n financialYears: response.success ? response.item : [],\r\n loading: false\r\n });\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

{RioResources.find(\"FinancialYears\").text}

\r\n
\r\n\r\n \r\n\r\n \r\n noResults={RioResources.find(\"NoResultsFound\")}\r\n columns={this.columns}\r\n actions={this.actions}\r\n items={this.state.financialYears}\r\n rowKey={(item: FinancialYearApiModel) => item.financialYearID}\r\n />\r\n\r\n {\r\n return (\r\n this.handleFinancialYearAddUpdateModalClosed()}\r\n />\r\n );\r\n }} />\r\n\r\n {\r\n return (\r\n this.handleConfirmDeleteModalClosed(result)} \r\n hideImage={true}\r\n />\r\n );\r\n }} />\r\n
\r\n );\r\n }\r\n\r\n addFinancialYear(): void {\r\n this.setState({\r\n selectedFinancialYearID: 0\r\n });\r\n }\r\n\r\n handleEditClicked(financialYearID: number): void {\r\n this.setState({\r\n selectedFinancialYearID: financialYearID\r\n });\r\n }\r\n\r\n handleFinancialYearAddUpdateModalClosed() {\r\n this.setState({\r\n selectedFinancialYearID: null\r\n }, () => {\r\n this.getFinancialYears();\r\n });\r\n }\r\n\r\n handleDeleteClicked(FinancialYearID: number): void {\r\n this.setState({\r\n deleteFinancialYearID: FinancialYearID\r\n });\r\n }\r\n\r\n handleConfirmDeleteModalClosed(result: boolean) {\r\n if (result) {\r\n FinancialYearApi.delete(this.state.deleteFinancialYearID, response => {\r\n if (response.success) {\r\n this.setState({\r\n deleteFinancialYearID: null\r\n }, () => {\r\n this.getFinancialYears();\r\n });\r\n }\r\n });\r\n } else {\r\n this.setState({\r\n deleteFinancialYearID: null\r\n });\r\n }\r\n }\r\n}","import * as React from \"react\";\r\nimport { Redirect, Route, Switch } from \"react-router\";\r\nimport { ApiErrorHandler, IRioResources, RioApiGet, RioIf, setRioResources } from \"rio.react.all\";\r\nimport { IContextApiModel } from \"./apiModels/RioIContextApiModel\";\r\nimport Layout from './components/Layout';\r\nimport { HttpErrorHelper } from \"./helpers/RioHttpErrorHelper\";\r\nimport { ErrorModal } from \"./modals/RioErrorModal\";\r\nimport { GlobalContext } from \"./RioContext\";\r\nimport { CustomerCategoryDistribution } from \"./views/CustomerCategoryDistribution\";\r\nimport { CustomerSearch } from \"./views/CustomerSearch\";\r\nimport { DeliveryEstimate } from \"./views/DeliveryEstimate\";\r\nimport { GrossMarginReport } from \"./views/GrossMarginReport\";\r\nimport { Login } from \"./views/Login\";\r\nimport { PasswordReset } from \"./views/PasswordReset\";\r\nimport { ProductCodeGenerator } from \"./views/ProductCodeGenerator\";\r\nimport { Repair } from \"./views/Repair\";\r\nimport { Users } from \"./views/Users\";\r\nimport { FinancialYears } from \"./views/FinancialYears\";\r\n\r\ninterface IAppState {\r\n RioResourcesLoaded: boolean;\r\n globals: IContextApiModel;\r\n responseError: string;\r\n unauthorised: boolean;\r\n}\r\n\r\nexport default class App extends React.Component<{}, IAppState> {\r\n constructor(props: {}) {\r\n super(props);\r\n\r\n ApiErrorHandler.onUnauthorised = () => {\r\n this.setState({ unauthorised: true });\r\n\r\n if (window.location.pathname !== '/' &&\r\n window.location.pathname.toLowerCase().indexOf(\"/reset\") === -1) {\r\n window.location.href = \"/\";\r\n }\r\n };\r\n\r\n this.state = {\r\n RioResourcesLoaded: false,\r\n globals: null,\r\n responseError: null,\r\n unauthorised: false\r\n };\r\n\r\n ApiErrorHandler.onUnauthorised = () => {\r\n this.setState({ unauthorised: true });\r\n };\r\n }\r\n\r\n alreadyRequestedLogout: boolean = false;\r\n\r\n componentDidMount(): void {\r\n RioApiGet.asPromise(\"/api/context/global\")\r\n .then(response => {\r\n this.setState({ globals: response });\r\n })\r\n .catch(response => {\r\n var error = HttpErrorHelper.handleHttpError(response, this, null); //handles validator errors if validator passed\r\n this.setState({ responseError: error });\r\n });\r\n\r\n RioApiGet.asPromise(\"/api/context/RioResources\")\r\n .then(response => {\r\n setRioResources(response);\r\n this.setState({ RioResourcesLoaded: true });\r\n })\r\n .catch(response => {\r\n var error = HttpErrorHelper.handleHttpError(response, this, null); //handles validator errors if validator passed\r\n this.setState({ responseError: error });\r\n });\r\n }\r\n\r\n render() {\r\n if (!this.state.RioResourcesLoaded || !this.state.globals) {\r\n return

Loading...

;\r\n }\r\n\r\n if (this.state.unauthorised || !this.state.globals?.user) {\r\n return (\r\n \r\n \r\n \r\n this.logout() } />\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (this.state.responseError) {\r\n return (\r\n
\r\n

Server error

\r\n

Unable to load resources. This is usually due to an internal server error. If the problem persists please contact support.

\r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n this.logout() } />\r\n\r\n \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.setState({ responseError: null })} />\r\n } />\r\n \r\n );\r\n }\r\n\r\n logout() {\r\n if (!this.alreadyRequestedLogout) {\r\n var submit = new RioApiGet(\"/home/Logout\");\r\n submit.onDone = (response) => {\r\n window.location.href = \"/\";\r\n this.setState({ unauthorised: true });\r\n };\r\n submit.send();\r\n this.alreadyRequestedLogout = true;\r\n }\r\n return \"\";\r\n }\r\n}","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register() {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const url = process.env.PUBLIC_URL as string;\r\n const publicUrl = new URL(url, window.location.toString());\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing as ServiceWorker;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (response.status === 404 || (contentType && contentType.indexOf('javascript') === -1)) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log('No internet connection found. App is running in offline mode.');\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport './styles/site.css';\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { ConnectedRouter } from 'connected-react-router';\r\nimport { createBrowserHistory } from 'history';\r\nimport configureStore from './store/configureStore';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\n// Create browser history to use in the Redux store\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') as string;\r\nconst history = createBrowserHistory({ basename: baseUrl });\r\n\r\n// Get the application-wide store instance, prepopulating with state from the server where available.\r\nconst store = configureStore(history);\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root'));\r\n\r\nregisterServiceWorker();\r\n","import { applyMiddleware, combineReducers, compose, createStore } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport { connectRouter, routerMiddleware } from 'connected-react-router';\r\nimport { History } from 'history';\r\nimport { ApplicationState, reducers } from './';\r\n\r\nexport default function configureStore(history: History, initialState?: ApplicationState) {\r\n const middleware = [\r\n thunk,\r\n routerMiddleware(history)\r\n ];\r\n\r\n const rootReducer = combineReducers({\r\n ...reducers,\r\n router: connectRouter(history)\r\n });\r\n\r\n const enhancers = [];\r\n const windowIfDefined = typeof window === 'undefined' ? null : window as any; // eslint-disable-line @typescript-eslint/no-explicit-any\r\n if (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {\r\n enhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__());\r\n }\r\n\r\n return createStore(\r\n rootReducer,\r\n initialState,\r\n compose(applyMiddleware(...middleware), ...enhancers)\r\n );\r\n}\r\n"],"sourceRoot":""}