{"version":3,"sources":["constants/ActionTypes.tsx","utils.tsx","reducers/InvoiceReducer.tsx","reducers/CnbsReducer.tsx","reducers/AppReducer.tsx","reducers/UserOptionsReducer.tsx","interfaces/AuthStatus.ts","actions/CommonActions.tsx","constants/ValidationConstants.tsx","constants/ApiConstants.tsx","constants/ApplicationConstants.tsx","interfaces/Accounts.ts","common/FileSaver.ts","actions/InvoiceActions.tsx","fetch.ts","selectors/Selectors.tsx","components/invoice/PayerDetailsDataManager.tsx","requests/InvoiceRequests.tsx","requests/ConfigRequests.tsx","actions/UserActions.tsx","axios.tsx","reducers/UserReducer.tsx","reducers/PaymentReducer.tsx","reducers/StatementReducer.tsx","reducers/RootReducer.tsx","store.tsx","components/login/LoginRedirectHandler.tsx","components/footer/LanguageSelector.tsx","hooks/CommonHooks.ts","components/footer/Footer.tsx","components/login/Login.tsx","components/payment-methods/schemas.tsx","helpers/Field.tsx","components/invoice/PaymentFunctions.tsx","components/payment-methods/PaymentCardsSelectors.tsx","requests/TokenRequests.tsx","components/payment-methods/PaymentTypeDetails.tsx","components/payment-methods/ChecksList.tsx","components/payment-methods/CreditCardsList.tsx","selectors/PermissionSelectors.tsx","selectors/ConfigSelectors.ts","components/payment-methods/payment-card-lists/PaymentCardLists.tsx","constants/ErrorMessages.tsx","components/payment-methods/AddCreditCardForm.tsx","components/payment-methods/AddCheckForm.tsx","components/payment-methods/manage-payment-methods/FinalizePaymentProcess.tsx","components/payment-methods/manage-payment-methods/ManagePaymentMethods.tsx","components/invoice/PaymentMethodDropdown.tsx","components/invoice/PdfCell.tsx","helpers/CurrencySymbols.ts","common/invoiceHelpers.tsx","common/CurrencyDisplay.tsx","components/invoice/InvoiceDataManager.tsx","components/invoice/Payment.tsx","components/invoice/PayerSelect.tsx","components/AccountChangeRedirect.tsx","components/deposits/Deposits.tsx","components/statements/Statements.tsx","components/help/Help.tsx","components/header/NavAccountSelect.tsx","helpers/UserHelpers.ts","components/header/MenuDrawer.tsx","components/Logo.tsx","components/header/Header.tsx","components/invoice/CurrencySelector.tsx","common/MultiSelect.tsx","components/invoice/SoldToCell.tsx","images/sort-icons/sort-up.svg","images/sort-icons/sort-down.svg","images/sort-icons/sort-none.svg","components/invoice/InvoiceTableObject.tsx","components/invoice/DownloadPdfZipButton.tsx","components/invoice/ExportExcel.tsx","components/invoice/InvoiceList.tsx","hooks/CalendarTranslation.ts","components/invoice/SoldToSelect.tsx","components/invoice/SoldToSelectAll.tsx","components/SecondarySelect.tsx","hooks/InvoiceHooks.ts","components/dashboard/DashboardPage.tsx","interfaces/invoice.ts","components/invoice/InvoicePage.tsx","actions/StatementActions.tsx","components/invoice/InvoiceDetail.tsx","components/invoice/PaymentPage.tsx","components/invoice/PaymentStatus.tsx","components/invoice/PaymentStatusPage.tsx","components/invoice/DetailPage.tsx","components/invoice/InvoiceSearch.tsx","requests/UserRequests.tsx","requests/RegistrationRequests.tsx","components/resetpassword/AccountSettingsPage.tsx","components/payment-methods/AccountPaymentPage.tsx","components/user-management/UserImpersonate.tsx","components/user-management/UserList.tsx","components/user-management/ListUsersPage.tsx","components/user-management/ManageUserForm.tsx","components/user-management/AddManualSapAccount.tsx","components/user-management/AddInvoiceSapAccount.tsx","components/user-management/ManageUserSapAccount.tsx","components/user-management/LinkedSapAccounts.tsx","components/settings-page/registration-requests/RegistrationRequestDetails.tsx","components/user-management/exclusions/ExclusionItem.tsx","components/user-management/exclusions/AddExclusionItem.tsx","components/user-management/exclusions/ExclusionList.tsx","components/user-management/ManageUserPage.tsx","components/settings-page/registration-requests/RegistrationRequestList.tsx","components/settings-page/registration-requests/RegistrationRequestsPage.tsx","components/settings-page/customizing/JSONViewer.tsx","components/settings-page/customizing/CustomizingPage.tsx","components/settings-page/configuration/email-config/EmailConfiguration.tsx","interfaces/EmailConfig.ts","components/header/SimpleHeaderMaintenance.tsx","components/Maintenance/MaintenanceLogin/SystemMaintenance.tsx","components/settings-page/configuration/maintenance/MaintenancePage.tsx","components/settings-page/configuration/EditConfiguration.tsx","components/settings-page/SettingsPage.tsx","error-boundaries/BasePageErrorBoundary.tsx","error-boundaries/PaymentStatusErrorBoundary.tsx","components/IdleHandler.tsx","components/deposits/DepositPaymentStatus.tsx","components/deposits/DepositPaymentStatusPage.tsx","components/invoice/ProcessingPaymentPage.tsx","components/invoice/ProcessingDepositPage.tsx","components/header/SimpleHeader.tsx","components/BackToLogin.tsx","components/register/auto-register/AutoRegisterWaitingConfirmation.tsx","components/BasePage.tsx","components/register/Register.tsx","components/register/RegisterPage.tsx","components/reset-password-page/ResetPasswordPage.tsx","components/reset-password-page/ResetPasswordFinishForm.tsx","components/reset-password-page/ResetPasswordFinishPage.tsx","components/RouterListener.tsx","components/login/LoginLogo.tsx","components/header/SimpleHeaderMaintenanceLogin.tsx","components/Maintenance/MaintenanceLogin/MaintenanceLogin.tsx","DocumentTitle.tsx","components/register/auto-register/RegisterForm.tsx","components/register/auto-register/AutoRegisterPage.tsx","components/register/auto-register/AutoRegisterConfirmInstructions.tsx","common/PromiseComponent.tsx","components/register/auto-register/AutoRegisterConfirm.tsx","components/register/auto-register/AutoLinkAccountSuccess.tsx","components/register/auto-register/AutoLinkAccountError.tsx","components/register/auto-register/AutoLinkAccountForm.tsx","components/register/auto-register/AutoLinkAccount.tsx","components/register/auto-register/AutoRegisterAccounts.tsx","components/SystemError.tsx","error-boundaries/SiteErrorBoundary.tsx","theme/default.tsx","App.tsx","index.tsx"],"names":["FORCE_INVOICE_REFRESH","SET_SELECTED_SOLD_TOS","REMOVE_SOLD_TO_FROM_SELECTED","ADD_SOLD_TO_TO_SELECTED","SET_AUTH_STATUS","PAYER_DUE_AMOUNT","TOTAL_CREDIT_AMOUNT","TOTAL_PASTDUE_AMOUNT","TOTAL_BALANCE_AMOUNT","LOADING_INCREMENT","LOADING_DECREMENT","CALL_FAILED","LOGOUT","SET_LAST_URL","SET_LANGUAGE","SET_SELECTED_ACCOUNT","UN_AUTHORIZED","GET_USER_SUCCESS","UPDATE_PASSWORD_RESPONSE","GET_INVOICES_SUCCESS","SEARCHED_INVOICES","GET_PAYER_DETAILS_SUCCESS","POST_PAYMENT_REQUEST","POST_PAYMENT_SUCCESS","GET_INVOICE_CURRENCY_SUCCESS","GET_PRIMARY_ACCOUNTS_SUCCESS","SET_CONFIG","ADD_INVOICE_TO_SELECTED","REMOVE_INVOICE_FROM_SELECTED","UPDATE_PAY_AMOUNT_FOR_INVOICE","UPDATE_REASON","UPDATE_REASON_COMMENT","COPY_SELECTED_INVOICES_TO_COMPLETED","COPY_DEPOSIT_DETAILS","CLEAR_SELECTED_INVOICES","SET_ACTIVE_INVOICE","UPDATE_CURRENCY_CODE","UPDATE_SELECTED_SECONDARY_ACCOUNT","UPDATE_SELECTED_CARD","INVOICE_SEARCH_DUE_TO_DATE","UPDATE_INVOICE_SEARCH","UPDATE_IMPERSONATE_USER_ID","UPDATE_IMPERSONATE_USER_NAME","SET_ACCOUNT_TYPE","UPDATE_PRIMARY_ACCOUNT_TYPES","SET_PAYMENT_METHODS","SET_DUE_SELECT","SET_STATEMENT_ID","SEARCH_INVOICE_STATUS","SEARCH_INVOICE_DUEDATE","SEARCH_INVOICE_TYPE","SEARCH_INVOICE_NUMBER","SEARCH_ARTILCE_NUMBER","SEARCH_ARTILCE_DESCRIPTION","INVOICE_SEARCH_PERIOD","INVOICE_SEARCH_PERIOD_FROMTO","SET_IS_BLACKOUT_ACTIVE","SET_BLACKOUT_CONFIG","SET_FOOTER_LINKS","GET_STATEMENTS_LIST","trimLeadingZeroes","str","replace","getInvoiceKey","invoice","_ref","_invoice$billing_docu","_invoice$document_num","_invoice$posting_date","billing_document_number","document_number_finance","posting_date","line_item_in_the_relevant_invoice","isStringNotEmptyOrNull","val","convertArrayToObject","array","key","reduce","obj","item","getAndClearSessionStorage","defaultValue","arguments","length","undefined","jsonValue","sessionStorage","getItem","JSON","parse","removeItem","e","INVOICE_STATE_KEY","defaultInvoiceInitialState","forceRefresh","selected","invoiceDetail","completed","invoices","detials","deposit","activeInvoice","dueSelect","searchInvoices","searchedinvoiceStatus","searchedinvoiceDueDateFrom","searchedinvoiceDueDateTo","searchedinvoiceType","searchedInvoiceNumber","searchedArticleNumber","searchedArticleDescription","invoiceSearchedPeriod","invoiceSearchedPeriodFrom","invoiceSearchedPeriodTo","payerDueAmount","totalCreditAmount","totalPastDueAmount","balanceAmount","statementId","invoiceInitialState","_sessionStorage","CACHED_SELECTED_CARD","cnbsInitialState","paymentStatusOptions","value","label","clearableValue","currencyOptions","dueOptions","invoicePaymentOptions","currentUser","animating","selectedCurrencyOptionValue","payerDetails","payment_cards","paymentStatuses","selectedCard","_sessionStorage$getIt","overPayNote","accountTypes","primaryAccountTypes","showPaymentStatus","paymentCardOptions","appInitialState","config","invoice_table","columns","paymentMethods","SELECTED_PRIMARY_INDEX_KEY","SELECTED_SECONDARY_INDEX_KEY","IMPERSONATED_USER_ID","userOptionsInitialState","accountType","secondaryAccounts","selectedSecondaryAccount","selectedSoldTos","invoiceSearchFromDate","invoiceSearchToDate","selectedPrimaryAccountIndex","primaryAccounts","invoiceSearchStatus","invoiceSearchDueDateFrom","invoiceSearchDueDateTo","filter","impersonatedUserId","AuthStatus","loadingDecrement","dispatch","type","types","loadingIncrement","requestStarted","actionType","updateState","data","payload","setisPaymentDisable","ispaymentdisable","setItem","setMessageForPaymentDisable","MessageForPaymentDisable","localStorage","getMessageForPaymentDisable","paymentDisableKey","_localStorage$getItem","toString","_localStorage$getItem2","i","_localStorage$getItem3","endsWith","requestErrored","errorObj","call","response","status","toast","error","position","POSITION","TOP_RIGHT","uiError","_jsxs","children","_jsx","uniqueId","statusText","message","requestUnauthorized","loginFailed","CREDENTIALS_REQUIRED","CREDENTIALS_INVALID","AUTHENTICATION_ERROR","GET_USER_PAYER_ERROR","GET_INVOICE_PDF_ERROR","GET_PAYER_DETAILS_ERROR","MAKE_PAYMENT_ERROR","INVOICE_LIST_URL","INVOICE_BULK_URL","INVOICE_EXCEL_DOWNLOAD","PAYMENT_URL","PAYER_DETAILS_URL","USER_HEADER_ACCOUNTS","MANAGE_PAYMENTS_URL","DEPOSIT_URL","GET_PAYMENT_ACCESS_TOKEN","GET_PAYMENT_RESPONSE","GET_USER_LIST","APP_VERSION","INV_LIST_REQ_BEGIN_DATE","MULTI_CURRENCY_LENGTH","AccountType","_global","window","download","url","name","opts","xhr","XMLHttpRequest","open","responseType","onload","saveAs","onerror","console","send","corsEnabled","click","node","dispatchEvent","MouseEvent","evt","document","createEvent","initMouseEvent","isMacOSWebView","test","navigator","userAgent","HTMLAnchorElement","prototype","blob","URL","webkitURL","a","createElement","rel","href","origin","location","target","createObjectURL","setTimeout","revokeObjectURL","nav","msSaveOrOpenBlob","autoBom","warn","Blob","String","fromCharCode","bom","popup","title","body","innerText","force","isSafari","HTMLElement","safari","isChromeIOS","FileReader","reader","onloadend","result","readAsDataURL","adjustCurrency","amount","decimals","adjust","Math","pow","addInvoiceToSelected","decimal","_document$open_amount","open_amount","toFixed","removeInvoiceFromSelected","getInvoicesAjax","invoiceListRequest","axios","post","apiTypes","getInvoices","decimalLookup","selectedCurrency","then","_response$data$status","_response$data$status2","invoiceCurrencies","_response$data$status3","_response$data$docume","_response$data","_response$data$docume2","_response$data2","documentList","message_type","message_line_string","document_list","Array","from","Set","map","currency_key","currency","forEach","soldToNum","parseInt","soldto_number","payerNum","payer_number","total_amount","paid_amount","isNaN","setsearchedInvoices","searchedInvoices","getInvoiceBulkPDF","search","vGridViewDocIds","search_parameters","GridViewDocIds","catch","err","validationTypes","downloadExcelFile","extractLastCardNumbers","delim","indexOf","b","substr","getPayerDetailsBuilder","primary","secondary","request","SoldTo","customer_number","PrimaryAcct","company_code","CompanyCode","action","sales_area_data","sales_organization","SalesOrganization","distribution_channel","DistributionChannel","division","Division","input","detail","getPayerDetails","makePayment","paymentDetail","next","authorizationReferenceCode","documentNumberFinance","authorization_amount","payed","authorization_reference_code","index_number","updatePrimaryAccount","setSecondary","updateSecondaryAccount","account","updateSelectedCard","selectedCardKey","updateInvoiceSearch","invoiceSearch","addSoldToToSelected","soldToNumber","removeSoldToFromSelected","setSelectedSoldTos","soldToNumbers","setSelectedCurrency","currencyCode","makeDeposit","clearSelectedInvoices","selectPayer","setsearchedinvoiceStatus","staus","setsearchedinvoiceDueDate","dueDateFrom","dueDateTo","to","setsearchedInvoiceNumber","invoiceNumber","setinvoiceSearchedPeriod","period","setinvoiceSearchedPeriodFromTo","periodFrom","periodTo","isCredit","payerInvoiceDueAmount","openAmout","totalCredits","totalPastDue","dueamount","totalCreditsAmount","balance","element","push","total","x","parseFloat","datearray","due_date","split","Date","isOverDue","_token","requestDone","store","setToken","token","refreshToken","instance","defaults","headers","common","concat","parseJson","json","returnNull","getSelectedInvoices","state","getLineItems","getAccountType","user_options","getPrimaryAccounts","getSecondaryAccounts","getInvoiceSearchToDate","getInvoiceSearchFromDate","getInvoiceSearchStatus","getInvoiceSearchDueDateFrom","getInvoiceSearchDueDateTo","getInvoiceSearchFilter","getCnbsConfig","_state$app$config$sap","app","sap","getCurrency","default","getImpersonatedUserId","createSelector","user","user_id","getInvoiceTotal","items","Object","keys","round","getSelectedPrimaryAccount","index","accounts","getSelectedSecondaryAccount","handleDeleteIframe","frame","querySelector","remove","getPayTotal","getBeforeCreditTotal","details","getCreditTotal","getSelectedInvoiceKeys","getOverpayingAmount","payTotal","getPayerAccount","getAllPaymentOptions","payment","sessionCards","sessionChecks","options","payerAccount","newCardData","slice","c","is_session","prop","hasOwnProperty","getSelectedPaymentOption","selectedIndex","find","p","payment_card_token","getCustomerNumber","selectedPrimaryAccount","getCompanyCode","getPayerSoldToForInvoiceQuery","secondaryAccount","primaryAccount","payer_data","soldto_data","_primaryAccount$Prima","_primaryAccount$Compa","TransactionalAccounts","getDefaultFilters","defaultFilters","PayerAll","filter_type","getInvoiceQuery","SoldTo_SearchParams","SoldToSearchParams","fromDate","toDate","document_type","date_from","appConstants","date_to","moment","format","due_date_from","due_date_to","getInvoiceQueryforPDFandCSVandexcel","getDepositReasonCodes","payerCompanyCode","_config$payment_reaso","payment_reason_codes","payment_type","code","reason_code","description","commentsRequired","comments_required","getPayerAccounts","hasDeposits","payment_types","t","active","getCurrentAccount","PayerDetailsContext","React","connect","props","currentAccount","selectedPayer","Payer","prevPayer","useRef","isReady","setIsReady","useState","useDispatch","useEffect","current","get","params","async","setPaymentMethods","Provider","render","getAppConfiguration","getConfiguration","getMaximumPaymentAllowed","getECheckMaximumPaymentAllowed","getisPaymentDisable","getPaymentDisabledTranslations","updateConfiguration","put","smtpTest","smtpConfig","getEmailConfig","fetch","twoDigits","text","DateUTCtoLocalText","utcText","utc","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","DateLocalToUtcText","localText","local","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getBlackoutConfig","fromDateLocal","fromUtcDate","toDateLocal","toUtcDate","updateBlackoutConfig","getAllowRegistration","setAuthStatus","login","email","password","loginRequest","clearSessionStorage","Authenticated","Failed","getUserCustomers","userId","clearSecondary","finalGetUserPayerUrl","userData","HeaderItems","_userData$data$Header","_userData$data$Header2","_userData$data$Header3","DropDownItems","reestablishSelectedValues","Logout","setFooterLinks","footerLinks","create","handleErrors","useLoader","reason","Unauthenticated","constructor","delete","browserLanguage","language","country","toLowerCase","urlParams","URLSearchParams","has","_urlParams$get","_lang","initialState","authStatus","Waiting","loginCount","lastUrl","isBlackoutActive","blackoutConfig","ADD_SESSION_CARD","UPDATE_SESSION_CARD","DELETE_SESSION_CARD","ADD_SESSION_CHECK","UPDATE_SESSION_CHECK","DELETE_SESSION_CHECK","CLEAR_SESSION_PAYMENT_METHODS","CACHE_SESSION_CARDS","CACHE_SESSION_CHECKS","addSessionCard","payer","log","editingPayment","_sessionStorage$getIt2","statements","selectMonthStatement","_rootReducer","combineReducers","newState","amountValidation","comment","currentDetails","documentId","overUnder","invoiceReducerInternal","stringify","_action$payload$statu","_action$payload","_action$payload$due_d","_action$payload2","_action$payload$due_d2","_action$payload3","_action$payload$date_","_action$payload4","_action$payload$date_2","_action$payload5","_action$payload$filte","_action$payload6","_state$primaryAccount","_state$primaryAccount2","_state$primaryAccount3","_state$primaryAccount4","_state$primaryAccount5","_state$primaryAccount6","_state$primaryAccount7","_state$primaryAccount8","_state$primaryAccount9","_action$payload$accou","_action$payload$accou2","_action$payload$accou3","_action$payload$accou4","_Object$keys$","impersonatedUserName","newArray","LoggedOut","all","cards","checks","clear","createStore","rootReducer","_state","_state$default","_state$default$curren","third_party_id","process","loginChecked","composeWithDevTools","applyMiddleware","thunk","validRedirects","LoginRedirectHandler","Component","componentDidMount","isValidRedirect","this","history","withRouter","LanguageSelector","setLanguage","onChange","preventDefault","useUser","useSelector","Footer","useIntl","stateFooterLinks","currentYear","setCurrentYear","links","privacyPolicy","termsAndConditions","contactUs","fetchConfiguration","className","id","FormattedMessage","values","year","pure","documentsList","isLoggedIn","useBackground","style","login_use_background_image","setBlackoutConfig","loginSSO","isAllowRegistration","setIsAllowRegistration","bannerContent","setBannerContent","setEmail","setPassword","validateCredentials","backgroundClasses","blackoutMessage","lang","item1","item2","fetchAllowRegistration","gigya","getJWT","fields","expiration","resp","id_token","isEnabled","_blackoutConfig$messa","_blackoutConfig$messa2","_blackoutConfig$messa3","messages","m","msg","toLocaleDateString","toLocaleTimeString","Fragment","paddingLeft","paddingRight","marginTop","minHeight","dangerouslySetInnerHTML","html","__html","DOMPurify","sanitize","marginBottom","minWidth","onSubmit","stopPropagation","placeholder","formatMessage","autoCapitalize","autoCorrect","width","Link","checkRoutingNumber1EC","r","s","Number","charAt","n","checkRoutingNumber2EC","AddCheckSchema","intl","f","defaultMessage","Yup","shape","electronic_check_account_type","required","electronic_check_rdfi_number","account_number","re","RegExp","match","checkAccountNumberEC","BootstrapFieldInner","errors","formik","touched","hasErrors","isTouched","wasSubmitted","submitCount","classes","Field","classNames","BootstrapField","BootstrapErrorInner","fieldErrors","BootstrapError","getValue","property","defaultVal","mapInvoiceListToPaymentDocuments","fiscal_year_of_the_relevant_invoice","amount_to_process","reference_number","document_date","mapInvoiceToPaymentDocument","mapPaymentDetails","payment_card","_payment_card$electro","_payment_card$electro2","_address$name","_address$name_","_address$name_2","_address$name_3","cvv","address","cardinal","payment_method","payment_card_type","payment_card_name","valid_to","card_validation_code","address_data","name_2","name_3","name_4","city","district","street","postal_code_city","region","createPayerData","customerNumber","companyCode","mapDepositDetails","getChecksSelector","_","getCreditCardsSelector","getPaymentAccessToken","cardinalData","Promise","reject","buildTORequest","token_id","merchant_id","access_token","$XIPlugin","createJSRequestPacket","getPaymetricResponse","paymetricUrl","iThreeds_version","resolve","ajax","success","text_status","threeDSVersion","paymetric3DSCheck","getPaymentResponse","addPaymentMethod","sendManagePaymentCardsRequest","updatePaymentMethod","make_default","valid_from","message_number","message_string","cardFormToUpdateObject","card","card_year","month","card_month","endOf","card_name","card_type","checkFormToUpdateObject","payer_account","buildCardinalData","version","redirect_url","currency_code","paymentOption","billing_address1","billing_city","billing_country_code","getCardinalCountryCode","billing_email","billing_first_name","first_name","billing_last_name","last_name","billing_phone","getPayerPhoneNumber","billing_postal_code","billing_state","getCardinalCurrencyCode","mobile_phone","order_number","Guid","newGuid","redirect_uri","shipping_address1","shipping_city","shipping_country_code","shipping_postal_code","shipping_state","threeds_version","work_phone","_paymentOption$valid_","_paymentOption$valid_2","_payer$communcation_d","_payer$communcation_d2","_payer$communcation_d3","_payer$communcation_d6","_payer$communcation_d7","phone","communcation_data","_payer$communcation_d4","_payer$communcation_d5","_payer$communcation_d8","_payer$communcation_d9","_payer$communcation_d10","_payer$communcation_d11","telephone","standard","country_code","tokenCountryCodes","tokenCurrencyCodes","deletePaymentMethod","epayv","usrag","deleteSessionCard","deleteSessionCheck","primary_account_type_id","onDelete","show","setShow","handleClose","FontAwesomeIcon","icon","color","displayText2","digits","displayText","role","onClick","handleShow","onEdit","Modal","onHide","Header","closeButton","Title","Body","ChecksList","check","PaymentTypeDetails","getCrediCardsSelector","getCurrentUser","createUserCanSelector","permission","Permissions","userCan","canManagePaymentMethods","canEditSystemConfig","canViewUsers","canManageUsers","canImpersonate","canManageRegistrationRequests","canMakePayment","canManageOwnSAPAccounts","apiparvList","_state$app$config$sap10","_state$app$config$sap11","_state$app$config$sap12","_state$app$config$sap13","custom_fields","apiparv","isInvoiceOverpaymentAllowed","paymentType","overpayment_allowed","isPartialPaymentsAllowed","_state$app$config$sap2","_state$app$config$sap3","_state$app$config$sap4","_state$app$config$sap5","generel_data","partial_payments_allowed","allowed","isCvvRequired","_state$app$config$sap6","_state$app$config$sap7","_state$app$config$sap8","_state$app$config$sap9","cvv_use_control","isRequired","parnam","useCanMakePayments","permissionsCanMakePayment","companyCanMakePayments","_state$app$config$sap14","_state$app$config$sap15","_state$app$config$sap16","company_codes","disable_payments","useCanMakePaymentsInternal","useCurrencyKey","_company_codes$find$c","_company_codes$find","_state$app$config$sap19","_state$app$config","_state$app$config$sap20","_state$app$config$sap21","CurrencyKey","useCurrencyDecimals","currencyKey","useCurrencyDecimalLookup","lookup","currency_decimals","_state$app$config$sap22","_state$app$config$sap23","_state$app$config$sap24","_state$app$config$sap25","sapcust","_currency_decimals$fi","_set$currdec","set","currkey","currdec","showCards","setShowCards","echecksAvailable","_state$app$config$sap17","_config$company_codes2","enable_echeck","useCanUseEcheck","isPaymentDisable","onTabChange","CreditCardsList","ERROR_PAYMENT_METHOD","cvvValidationMessage","setCvvValidationMessage","selectedOption","setSelectedOption","setcard_name","setcard_type","card_number","setcard_number","setcard_validation_code","setcard_month","setcard_year","cardNumber","setCardNumber","years","handleselectvalueChange","initialValues","save_on_file","alwaysSaveOnFile","schema","cardValidator","isValid","when","is","validate","AddCreditCardSchema","isEditing","date","EditCreditCardSchema","Formik","validationSchema","validateOnChange","enableReinitialize","bag","setSubmitting","save","saveCard","paymentcard","onCardConfirmed","formProps","handleSubmit","component","disabled","handleChange","formatedText","onCardNumberChange","setFieldValue","maxLength","minLength","checked","htmlFor","isSubmitting","EditCheckSchema","finalizePaymentMethodAndRefresh","accessToken","matches","finalizeAddPaymentMethod","FinalizePaymentProcess","useLocation","useHistory","PAYMENT_METHOD_DEFAULT","PAYMENT_METHOD_SAVE","pathname","_Fragment","selectedType","updateType","updateSessionCheck","addSessionCheck","updateSessionCard","setState","secure_3ds_enabled","payment_provider","secure_3ds_version","config_payment_cards","_state$app","addPaymentMethodComponent","isEC","isCC","PaymentCardLists","event","AddCreditCardForm","send_cardinal","payment_options","found","_found$preauthorizati","preauthorization_amount","getPreAuthAmount","merchant_guid","paymetric_xi_url","card_details","addField","createField","buildCCRequest","processCard","AddCheckForm","ec_details","buildECRequest","processCheck","PaymentMethodDropdownConnected","allPaymentOptions","selectedCardIndex","setSelectedCard","cardType","defaultCard","defaultCheck","option","PdfCell","super","handleClick","row","pdf_document_available","getInvoicePDF","bind","src","alt","docNumber","CustomerNumber","currencySymbolMap","isInvoice","isPayment","_invoice$clearing_dat","clearing_date","unwrap","sapDateToDate","dateStr","paidFormatter","cell","moneyTableCell","CurrencyDisplay","amountFormatter","getCurrencySymbol","_currencySymbolMap$cu","_currencySymbolMap$cu2","symbol_native","pdfFormatter","dateFormatter","_DateFormatter","csvDateFormatter","formatDate","newDate","statusFormatter","_StatusFormatter","csvStatusFormatter","_row$clearing_date","item_is_a_payment","_props$row$clearing_d","_props$row","documentNumberFormatter","DocumentNumberFormatterComponent","path","finance_document_type","removeLeadingZeros","setActiveInvoice","referenceFormatter","dueFormatter","_DueFormatter","csvDueDateFormatter","daysToPayFormatter","calculateUnitPrice","billed_quantity","unitPrice","formatTotal","fontFamily","formatColumn","formatColumnRemoveLeading","soldToFormatter","zzcustom","soldtoad","renderAddressForTable","payerFormatter","payerad","getPastYears","pastYears","add","dueDateSort","rowA","rowB","order","sortStringDate","aDate","bDate","diff","CurrencyString","isNegative","displayValue","abs","formatNumber","minimumFractionDigits","maximumFractionDigits","CurrencySymbol","_props$value","FormattedNumber","InvoicesContext","useInvoiceSearchQuery","CACHED_CVV","Payment","_store$app$config$sap","beforeCreditTotal","creditTotal","cvvRequired","invoiceDetails","invoiceTotal","invoicesDetail","overPayingAmount","reasonNotRequired","reason_codes","selectedPaymentOption","PaymentDisable","setPaymentDisable","maxPaymentAllowed","setmaxPaymentAllowed","maxECheckPaymentAllowed","setmaxECheckPaymentAllowed","disablePay","setDisablePay","showManagePayments","setShowManagePayments","cvvValue","setCvvValue","cvvValueMaxLength","setCvvValueMaxLength","invoiceSearchQuery","currencyDecimals","paymentWarning","setPaymentWarning","clicked","setClicked","disable_3ds","validateCvv","onPayClick","invoicesLength","overPaymentAllowed","dismiss","reasonMissing","j","equals","protocol","host","paymentDetails","paymentRequest","soldto","payment_detail","documents","onDepositClick","form","amoumtToDeposit","payerData","depositRequest","deposit_detail","depositAmount","mode","isDepositMode","selectedPaymentType","setSelectedPaymentType","textAlignLast","pattern","Route","ManagePaymentMethods","_ref2","PayerSelect","handleCustomerChange","truncateOption","payerAccounts","Name","AccountChangeRedirect","isFirstRun","Deposits","depositReasonCodes","deposit_cache","setInitialValues","payer_option","ready","setReady","errorMessage","setErrorMessage","reasonCodes","_newValues$payer_opti","_newValues","_newValues2","_newValues$amount_to_","_newValues3","_newValues$reference_","_newValues4","_newValues$comment","_newValues5","newValues","cached","temp","reasonCode","_reasonCodes$","positive","min","MakeDepositSchema","isSoldToAccount","validateOnBlur","isInitialValid","isValidSync","_formProps$values","paymentDisableMessage","trim","onKeyDown","rows","Statements","Help","NavAccountSelect","hasMorethanOneHeaderItems","onHeaderDropdownSelected","createSelectItems","_headerItem$CompanyCo","headerItem","startsWith","activeClass","Dropdown","Item","_this$props$selectedP","_this$props$selectedP2","_this$props$selectedP3","overflowClass","Toggle","Menu","isThirdPartyUser","_user$third_party_id","logout","showAccounts","setShowAccounts","List","ListSubheader","disableSticky","ListItem","button","ListItemText","ExpandLess","ExpandMore","Divider","onClose","onAccountSelect","innerRef","_ref3","_ref4","_ref5","_ref6","_ref7","logo","header_logo","height","loginName","collapsed","setCollapsed","drawerIsOpen","setDrawerIsOpen","canDeposit","_state$app$config$sap18","canMakeDeposits","_config$company_codes","enable_deposits","useCanMakeDepositsInternal","useCanMakeDeposits","collapsedClass","settingsLink","toggleDrawer","isOpen","Drawer","MenuDrawer","Logo","NavLink","activeClassName","user_role","reload","useHasMultiCurrency","currencies","MultiSelect","readOnly","_style","_desc","_g","SoldToCellConnected","custOption","_props$selectedPrimar","_props$selectedPrimar2","l","customer","_extends","assign","source","apply","SvgSortUp","svgRef","titleId","xmlns","xmlnsXlink","y","viewBox","enableBackground","xmlSpace","ref","transform","d","ForwardRef","SvgSortDown","SvgSortNone","mapSoldTo","renderCaret","column","SortUpIcon","SortDownIcon","SortNoneIcon","sortStringNumber","DownloadPdfZipButton","DownloadPdfZipButtonwithCurrency","invoiceQueryforPDFandCSVandexcel","DownloadExcelButton","getDifferenceInDays","DueDate","DataDiff","paymentDue","date1","ExportExcel","display","columnsData","invoicesData","days_in_arrears","Department","ReactHTMLTableToExcel","table","filename","sheet","buttonText","ExportCSVButton","CSVExport","AvailableCurrencies","invoicesWithKeys","DDLSelectedCurrency","_InvoiceList","hasMultiCurrency","settitle","setchildData","tempselectedCurrency","settempselectedCurrency","isTablet","useMediaQuery","query","isMobile","invoicesList","setInvoicesList","SortOptions","clickSelectAll","filterInvoices","finance_document_only","trimStart","filterFilteredInvoices","clickDeselectAll","hideSelect","isSearch","selectRowProp","onSelect","isSelected","onSelectAll","isSelect","selectedInvoicesKeys","selectionRenderer","selectionHeaderRenderer","indeterminate","nonSelectable","isNotSelectable","hideSelectColumn","tab","isPdfFilenotExists","PDFFileIds","pdfExists","billing_document_type","invoicestemp","includes","tableConfig","StatementId","showStatementIdColumn","headerClasses","dataField","formatter","csvFormatter","headerStyle","headerAlign","align","sort","sortCaret","hidden","csvType","sortFunc","headerFormatter","col","colIndex","components","sortElement","csvExport","buildColumnConfigs","LoadCurrencies","_key","selectFunction","setSelectedFunction","docDefaultSort","docAscSort","docDescSort","getSortMethod","selectDueFunction","setSelectedDueFunction","docDefaultDueSort","docAscDueSort","docDescDueSort","getDueSortMethod","ToolkitProvider","background","borderCollapse","scrollTop","keyField","bootstrap4","exportCSV","noAutoBOM","toolkitProps","fontSize","alignSelf","DropdownButton","alignRight","size","variant","handleSortSelect","eventKey","newList","handleCurrencySelect","csvProps","onExport","defaultChecked","displayCard","BootstrapTable","baseProps","defaultSorted","selectRow","noDataIndication","InvoiceList","InvoiceSearchList","useCalendarTranslation","weekdays","shorthand","longhand","months","SoldToSelect","handleCustomerCheckChange","currentTarget","isChecked","formAction","pop","selectAll","allSelected","selectedItems","acc","itemColor","SoldToSelectAll","getName","SecondarySelect","useInvoiceTotalDue","previousValue","currentValue","_currentValue$open_am2","useInvoiceTotalCredits","_currentValue$open_am3","useStyles","makeStyles","due","orange","pastdue","red","credit","green","DashboardDetails","totalDue","totalOverDue","_currentValue$open_am4","useInvoiceTotalOverDue","totalBalance","payerTotalDue","payerTotalCredits","payerTotalOverDue","Card","elevation","CardContent","Typography","DocumentType","DocumentStatus","updateInvoiceSearchDueToDate","dueToDate","setDueSelect","dueSelectValue","getStatementInvoicePDF","setStatementId","_selectedStatement$ST","calIl8n","setInvoices","useInvoices","setConfig","selectedDueOption","setSelectedDueOption","selectedYear","setSelectedYear","showSummary","setShowSummary","setcountry","DisableMessage","setDisableMessage","selectedMonthId","setSelectedMonthId","isButtonEnabled","setIsButtonEnabled","selectMonth","setSelectMonth","selectedMonth","setSelectedMonth","selectedStatementId","setSelectedStatementId","selectedStatement","setSelectedStatement","STATEMENT_ID","DESCRIPTION","stateStatements","setStateStatements","statementList","setStatementList","statementResponse","formattedRequest","function_module_name","export","getStatements","fetchStatements","defaultToDate","Open","Complete","startOf","updateInvoiceSearchCriteria","Flatpickr","locale","selectedDates","handleMonthChange","isArray","_item$STATEMENT_ID","handleButtonClick","verticalAlign","sapDetails","payAmount","selectedInvoice","userCustomerDetails","updatePayAmountForInvoice","openAmount","partialAllowed","updateReasonComment","updateReason","_props$sapDetails$pay","_props$sapDetails","_props$sapDetails$pay2","_props$sapDetails2","_props$invoice$postin","_props$invoice","_props$invoice$due_da","_props$invoice2","maxPayment","setMaxPayment","_isCredit","isReasonCodeValid","reasonCodeRequired","errorClass","valid","selectedReasonCode","postingDate","dueDate","FormattedDate","headerItems","getSoldToName","selectedReasonCodeOption","selectedInvoices","lineHeight","paddingTop","InvoiceDetail","Redirect","paymentCard","login_logo","_paymentStatus$docume","_paymentStatus","_paymentStatus$author","_paymentStatus2","statuses","successMessage","join","paymentStatus","alertClass","documentNumber","referenceCode","setLogo","isPrint","setIsPrint","mediaQueryList","matchMedia","handleMediaQueryChange","addListener","removeListener","sold_to","reason_message","numbers","now","backgroundColor","print","PaymentStatusPage","PaymentStatus","getInvoiceDetail","billingDocumentNumber","documentType","_state$customerAddres","_state$customerAddres2","_state$customerAddres3","_state$customerAddres4","_state$customerAddres5","_state$customerAddres6","_state$invoiceRecipie","_state$invoiceRecipie2","_state$invoiceRecipie3","_state$invoiceRecipie4","_state$invoiceRecipie5","_state$invoiceRecipie6","itemData","documentDate","totalAmount","customerAddress","invoiceRecipientAddress","backPage","billingDocumentType","poNumber","_canMakePayment","payerNumber","soldtoNumber","cusNumber","_tempState$itemData","tempState","document_status","_result$header_data$c","_result$header_data","_result$header_data$c2","header_data","customer_purchase_order_nubmer","partner_data","partner_function","invoiceRecipient","item_data","headerDate","dateString","customerCity","customerRegion","customerPostalCode","invoiceRecipientCity","invoiceRecipientRegion","invoiceRecipientCode","allowPay","showPayButton","itemDataWithKey","item_number","goBack","pay","margin","material_number","primaryAccountIndex","characteristicsOptions","selectedSoldTo","accoutType","setToDate","setFromDate","_store$user_options","searched","OpenOrComplete","dateFrom","dateTo","characteristics","characteristicsValue","characteristicsLabel","showDatesDue","showPeriod","showDatesPeriod","showCharacteristicsValue","materialNumber","materialDescription","onSelectChange","prevState","getSearch","today","yesterday","setDate","lastSevenDays","lastThirtyDays","lastOneYear","filters","Invoice","invoice_filter","countOfInvoices","marginLeft","marginRight","fromDue","toDue","fromPeriod","toPeriod","isBefore","getUserList","profile","deleteUserSapAccount","account_id","saveUserSapAccount","updateUserSapAccount","createUserSapAccount","getUserSapAccounts","getUserByInvite","invite","getUserByPasswordReset","completeRegistration","inviteId","confirmPassword","completePasswordReset","getExclusionList","updateExclusionList","list","getRegistrationRequests","registration","getRegistrationRequestById","primaryAccountTypeId","PrimaryAccountTypeId","ResetPasswordMethod","currentPassword","newPassword","confirmNewPassword","resetPasswordRequest","CurrentPassword","NewPassword","ConfirmNewPassword","setCurrentPassword","setNewPassword","setConfirmNewPassword","currentPasswordValid","setCurrentPasswordValid","newPasswordValid","setNewPasswordValid","confirmNewPasswordValid","setConfirmNewPasswordValid","validateFields","isModelStateValid","passwordChange","onResetClick","AccountPaymentPage","SelectedPaymentType","update","_sessionStorage$getIt3","clearSessionPaymentMethods","setAccountType","setIsChecked","impersonateFormatter","UserImpersonate","formatStatusColumn","_StatusDisplay","nameColumn","profileColumn","_ProfileLabel","users","defaultEmptyDataMessage","bodyClasses","setUsers","setStatus","setSearch","onSearchChangeDebounce","getUsers","new_users","count","UserList","yup","company","ManageUserForm","_props$user","_props$user2","_props$user3","_props$user4","_props$user5","_props$user6","_props$user7","createdDate","created_date_date","lastLoginDate","last_login","lastPasswordChange","last_password_change","readonly","Checked","setChecked","passwordValue","setpasswordValue","checkboxSelectChange","autoComplete","onKeyUp","num_logins","primary_account","account_type","_store$app$config$sap2","salesOrgs","companyCodes","_salesOrgs","_companyCodes","initialAccount","propertyName","saveAccount","accountTypeId","accountTypeValue","invoiceAmount","accountNumber","saveAccountByInvoice","ManageUserSapAccount","_props$salesOrgs","saveType","setSaveType","setInitialAccount","AddInvoiceSapAccount","AddManualSapAccount","setAccount","setAccounts","getAccounts","useGetSapAccountTypes","refreshAccounts","deleteAccount","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","editAccount","addNewAccount","close","saveUserSapAccountByInvoice","_error$response","_error$response$data","_error$response2","RegistrationRequestDetails","ExclusionItem","_deleteItem","AddExclusionItem","inputValue","_updateInput","_submit","ExclusionList","exclusions","_addExclusion","_removeExclusion","getExclusions","_updateExclusionList","updateExclusions","_refreshInvoices","refreshInvoices","splice","arr","setUser","created_date","last_login_date","primary_account_type","setRequest","getUser","fromRequest","getRegistrationRequest","_request","firstName","lastName","saveUser","registrationRequestId","LinkedSapAccounts","RegistrationRequestList","renderActionButton","requests","wrapperClasses","RegistrationRequestsPage","getRequests","canAccess","JsonViewer","renderArray","renderProp","renderObject","renderName","string","words","w","toUpperCase","sapConfig","sapStatusGood","statusCode","setData","_$sap","companyName","applicationUrl","statusMessage","JSONViewer","smtpAddress","smtpPort","smtpUseUser","isPaymentsDisable","registrationRequestEmail","overrideEmail","emailTemplateBody","emailConfirmationContent","fromAddress","fromAddressName","smtpUser","smtpPassword","EmailConfiguration","currentEmailConfig","setCurrentEmailConfig","selectedKey","setSelectedKey","selectedLanguage","setSelectedLanguage","emailTemplate","setEmailTemplate","template","testEmail","setTestEmail","emailTypes","languages","fetchData","Error","templates","createNewTemplate","handleEditorChange","content","editor","handleTitleChange","saveEmail","updateEmailConfig","onEmailChange","onLanguageChange","_formProps$values2","vTemplate","_testEmail","prompt","alert","sendTestEmail","AceEditor","theme","highlightActiveLine","wrapEnabled","showPrintMargin","setOptions","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","paymentConfig","setParentConfig","isMaintenaceMode","setIsMaitenanceMode","maintenanceConfig","setMaintenanceConfig","setselectedLanguage","selectedLanguageMessage","setSelectedLanguageMessage","_initialMessage$messa","initialMessage","firstMessage","notification","paymentMessageId","isMaintenancemsgexists","isAnyMessageSet","translationObjects","isStartDateValid","isEndDateValid","showHeader","hideHeader","parts","hostname","nullable","redirectUrl","isPaymentDisablemsgexists","SimpleHeaderMaintenance","notificationValue","selectedMessage","numberOfLines","updatedMessage","messageStorageObject","messageObject","msgObj","updateMessage","MaintenancePage","SystemMaintenance","tabs","showConfiguration","setShowConfiguration","settingsTab","setSettingsTab","selectedLanguageMessageText","setselectedLanguageMessageText","bannerContentLanguage","setBannerContentLanguage","setContent","languagesForPayment","languagesForBannerContent","emailExpirationHours","onPaymentLanguageChange","fetchBannerContent","Paper","square","Tabs","newValue","Tab","updateApplicationConfiguration","_formProps$values4","_formProps$values5","allowRegistration","registrationEmailExpiration","_formProps$values3","registrationEmailExpirationMessage","JoditEditor","newContent","CustomizingPage","updatePrimaryAccountTypes","primaryAccountType","exact","Switch","ManageUserPage","ListUsersPage","EditConfiguration","ResetPassword","BasePageErrorBoundary","hasError","getDerivedStateFromError","componentDidCatch","info","PaymentStatusErrorBoundary","IdleHandlerConnected","requestBody","logoutTimer","IdleTimer","onAction","throttle","onIdle","autoClose","timeout","_paymentStatus$author2","_paymentStatus3","_props$deposit","_props$deposit$deposi","_props$deposit2","_props$deposit2$payer","_props$deposit3","_props$deposit3$depos","_props$deposit4","_props$deposit4$depos","_props$deposit5","_props$deposit5$depos","deposits","_index","deposit_note","DepositPaymentStatusPage","DepositPaymentStatus","ProcessingPaymentPage","invoicesToPay","ProcessingDepositPage","cached_deposit","deposit_form","depositDetail","SimpleHeader","AutoRegisterWaitingConfirmation","BackToLogin","finalGetUser","systemError","setSystemError","_props$sap","_primaryAccount","_secondaryAccount","_impersonatedUserId","PayerDetailsDataManager","PaymentPage","DetailPage","InvoicePage","InvoiceSearch","SettingsPage","oneOf","Register","complete","RegisterPage","userNotFound","ResetPasswordPage","requestForm","ResetPasswordFinishForm","ResetPasswordFinishPage","passwordReset","isPublicUrl","ignoreList","ignore","RouterListener","setLastUrl","listen","SimpleHeaderMaintenanceLogin","LoginLogo","injectIntl","verify_password","Status","Profile","registerUser","isConfirmed","AutoRegisterPage","RegisterForm","AutoRegisterConfirmInstructions","PromiseComponent","setValue","promise","wait","confirm","setConfirm","_resp$response$data","_resp$response","AutoLinkAccountSuccess","postalCode","onClear","AutoLinkAccountForm","requestComplete","setRequestComplete","useContext","registerToken","onSuccess","_error$response2$data","onError","AutoLinkAccount","setInvoice","AutoLinkAccountError","onAccountAdded","updateAccounts","getRegistrationAccount","accountId","SiteErrorBoundary","defaultTheme","createTheme","typography","faLibrary","faMoneyCheck","setIsBlackoutActive","setForceRefresh","fetchIsBlackoutActiveAsync","getIsBlackoutActive","blackoutRedirectUrl","executeAfterGigyaLoad","results","configPromise","loginStatusPromise","apiKeyPromise","apiKey","getElementById","scriptTag","head","appendChild","allMessages","_allMessages$xx","_allMessages$language","defaultMessages","languageMessages","_allMessages","_allMessages2","countryMessages","languageCountryMessages","_allMessages3","buildMessages","getLanguageMessages","ThemeProvider","IntlProvider","BrowserRouter","ToastContainer","Spinner","DocumentTitle","BasePage","TimedOut","MaintenanceLogin","Login","SystemError","AutoRegisterConfirm","AutoRegisterAccounts","Index","App","ReactDOM"],"mappings":"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GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,GACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,GACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,GACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,KAGJC,GAAqB,CACvB,IAAO,IACP,IAAO,IACP,IAAO,EACP,IAAO,GACP,IAAO,IACP,IAAO,IACP,IAAO,GACP,IAAO,GACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,GACP,IAAO,GACP,IAAO,IACP,IAAO,GACP,IAAO,IACP,IAAO,GACP,IAAO,GACP,IAAO,GACP,IAAO,IACP,IAAO,IACP,IAAO,GACP,IAAO,GACP,IAAO,GACP,IAAO,IACP,IAAO,GACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,GACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,UAAW,IACX,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,GACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,UAAW,IACX,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IA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","file":"static/js/main.352e159e.chunk.js","sourcesContent":["export var FORCE_INVOICE_REFRESH = \"FORCE_INVOICE_REFRESH\";\r\nexport var SET_SELECTED_SOLD_TOS = 'SET_SELECTED_SOLD_TOS';\r\nexport var REMOVE_SOLD_TO_FROM_SELECTED = 'REMOVE_SOLD_TO_FROM_SELECTED';\r\nexport var ADD_SOLD_TO_TO_SELECTED = 'ADD_SOLD_TO_TO_SELECTED';\r\nexport var UPDATE_MULTI_SELECT_SOLD_TO = 'UPDATE_MULTI_SELECT_SOLD_TO';\r\nexport var SET_AUTH_STATUS = 'SET_AUTH_STATUS';\r\nexport const INVOICE_DUE_AMOUNT = 'INVOICE_DUE_AMOUNT';\r\nexport const PAYER_DUE_AMOUNT = 'PAYER_DUE_AMOUNT';\r\nexport const TOTAL_CREDIT_AMOUNT = 'TOTAL_CREDIT_AMOUNT';\r\nexport const TOTAL_PASTDUE_AMOUNT = 'TOTAL_PASTDUE_AMOUNT';\r\nexport const TOTAL_BALANCE_AMOUNT = 'TOTAL_BALANCE_AMOUNT';\r\n\r\n// Common Actions\r\nexport const LOADING_INCREMENT = 'LOADING_INCREMENT';\r\nexport const LOADING_DECREMENT = 'LOADING_DECREMENT';\r\nexport const CALL_FAILED = 'CALL_FAILED';\r\n\r\n// User Actions\r\nexport const LOGOUT = 'LOGOUT';\r\nexport const SET_LAST_URL = 'SET_LAST_URL';\r\nexport const SET_LANGUAGE = 'SET_LANGUAGE';\r\nexport const SET_SELECTED_ACCOUNT = 'SET_SELECTED_ACCOUNT';\r\nexport const UN_AUTHORIZED = 'UN_AUTHORIZED';\r\nexport const GET_USER_SUCCESS = 'GET_USER_SUCCESS';\r\nexport const UPDATE_PASSWORD_RESPONSE = 'UPDATE_PASSWORD_RESPONSE';\r\n\r\n// Invoice List Actions\r\nexport const GET_INVOICES_SUCCESS = 'GET_INVOICES_SUCCESS';\r\nexport const SEARCHED_INVOICES = 'SEARCHED_INVOICES';\r\n\r\nexport const GET_PAYER_DETAILS_SUCCESS = 'GET_PAYER_DETAILS_SUCCESS';\r\n\r\nexport const POST_PAYMENT_REQUEST = 'POST_PAYMENT_REQUEST';\r\nexport const POST_PAYMENT_SUCCESS = 'POST_PAYMENT_SUCCESS';\r\n\r\nexport const GET_INVOICE_CURRENCY_SUCCESS = 'GET_INVOICE_CURRENCY_SUCCESS';\r\n\r\nexport const GET_PRIMARY_ACCOUNTS_SUCCESS = 'GET_PRIMARY_ACCOUNTS_SUCCESS';\r\n\r\nexport const SET_CONFIG = 'SET_CONFIG';\r\n\r\nexport const ADD_INVOICE_TO_SELECTED = 'ADD_INVOICE_TO_SELECTED';\r\nexport const REMOVE_INVOICE_FROM_SELECTED = 'REMOVE_INVOICE_FROM_SELECTED';\r\nexport const UPDATE_PAY_AMOUNT_FOR_INVOICE = 'UPDATE_PAY_AMOUNT_FOR_INVOICE';\r\nexport const UPDATE_REASON = 'UPDATE_REASON';\r\nexport const UPDATE_REASON_COMMENT = 'UPDATE_REASON_COMMENT';\r\nexport const COPY_SELECTED_INVOICES_TO_COMPLETED = 'MOVE_SELECTED_INVOICES_TO_COMPLETED';\r\nexport const COPY_DEPOSIT_DETAILS = 'COPY_DEPOSIT_DETAILS';\r\nexport const CLEAR_SELECTED_INVOICES = 'CLEAR_SELECTED_INVOICES';\r\nexport const SET_ACTIVE_INVOICE = 'SET_ACTIVE_INVOICE';\r\n\r\nexport const UPDATE_PAYMENT_CARD_OPTIONS = 'UPDATE_PAYMENT_CARD_OPTIONS';\r\nexport const UPDATE_INVOICE_LIST_REQUEST = 'UPDATE_INVOICE_LIST_REQUEST';\r\nexport const UPDATE_CURRENCY_CODE = 'UPDATE_CURRENCY_CODE';\r\nexport const UPDATE_PAYMENT_STATUS = 'UPDATE_PAYMENT_STATUS';\r\nexport const UPDATE_SELECTED_SECONDARY_ACCOUNT = 'UPDATE_SELECTED_SECONDARY_ACCOUNT';\r\nexport const ADD_SELECTED_SOLDTO = 'ADD_SELECTED_SOLDTO';\r\nexport const REMOVE_UN_SELECTED_SOLDTO = 'REMOVE_UN_SELECTED_SOLDTO';\r\nexport const REMOVE_ALL_SELECTED_SOLDTOS = 'REMOVE_ALL_SELECTED_SOLDTOS';\r\nexport const UPDATE_CVV = 'UPDATE_CVV';\r\nexport const UPDATE_SELECTED_CARD = 'UPDATE_SELECTED_CARD';\r\nexport const OVER_PAY_NOTE = 'OVER_PAY_NOTE';\r\nexport const INVOICE_SEARCH_TO_DATE = 'INVOICE_SEARCH_TO_DATE';\r\nexport const INVOICE_SEARCH_DUE_FROM_DATE = 'INVOICE_SEARCH_DUE_FROM_DATE';\r\nexport const INVOICE_SEARCH_DUE_TO_DATE = 'INVOICE_SEARCH_DUE_TO_DATE';\r\nexport const UPDATE_INVOICE_SEARCH = 'UPDATE_INVOICE_SEARCH';\r\nexport const UPDATE_IMPERSONATE_USER_ID = 'UPDATE_IMPERSONATE_USER_ID';\r\nexport const UPDATE_IMPERSONATE_USER_NAME = 'UPDATE_IMPERSONATE_USER_NAME';\r\n\r\nexport const SET_ACCOUNT_TYPE = 'SET_ACCOUNT_TYPE';\r\nexport const UPDATE_ACCOUNT_TYPES = 'UPDATE_ACCOUNT_TYPES';\r\nexport const UPDATE_PRIMARY_ACCOUNT_TYPES = 'UPDATE_PRIMARY_ACCOUNT_TYPES';\r\n\r\nexport const SET_PAYMENT_METHODS = 'SET_PAYMENT_METHODS';\r\nexport const SET_DUE_SELECT = 'SET_DUE_SELECT';\r\nexport const SET_STATEMENT_ID = 'SET_STATEMENT_ID';\r\nexport const SEARCH_INVOICE_STATUS = 'SEARCH_INVOICE_STATUS';\r\nexport const SEARCH_INVOICE_DUEDATE = 'SEARCH_INVOICE_DUEDATE';\r\nexport const SEARCH_INVOICE_TYPE = 'SEARCH_INVOICE_TYPE';\r\nexport const SEARCH_INVOICE_NUMBER = 'SEARCH_INVOICE_NUMBER';\r\nexport const SEARCH_ARTILCE_NUMBER = 'SEARCH_ARTILCE_NUMBER';\r\nexport const SEARCH_ARTILCE_DESCRIPTION = 'SEARCH_ARTILCE_DESCRIPTION';\r\nexport const INVOICE_SEARCH_PERIOD = 'INVOICE_SEARCH_PERIOD';\r\nexport const INVOICE_SEARCH_PERIOD_FROMTO = 'INVOICE_SEARCH_PERIOD_FROMTO';\r\n\r\n// blackout actions\r\nexport const SET_IS_BLACKOUT_ACTIVE = 'SET_IS_BLACKOUT_ACTIVE';\r\nexport const SET_BLACKOUT_CONFIG = 'SET_BLACKOUT_CONFIG';\r\nexport const SET_FOOTER_LINKS = 'SET_FOOTER_LINKS';\r\n\r\n//statement actions\r\nexport const GET_STATEMENTS_LIST = 'GET_STATEMENTS_LIST';\r\nexport const GET_STATEMENTS_PDF = 'GET_STATEMENTS_PDF';\r\nexport const SET_SELECT_MONTH = 'SET_SELECT_MONTH';\r\nexport const GET_SELECT_MONTH = 'GET_SELECT_MONTH';\r\nexport const GET_MONTH_SELECT = 'GET_MONTH_SELECT';\r\n","import { CardType, PaymentOption } from \"./interfaces/CnbsConfigInterfaces\";\r\n\r\nexport function trimLeadingZeroes(str) {\r\n if (typeof str === \"undefined\" || str === null) {\r\n return \"\";\r\n }\r\n return str.replace(/^0+/, \"\");\r\n}\r\n\r\nexport function getInvoiceKey(invoice) {\r\n return (\r\n (invoice.billing_document_number ?? \"0\") +\r\n \"__\" +\r\n (invoice.document_number_finance ?? \"\") +\r\n \"__\" +\r\n (invoice.posting_date ?? \"\") +\r\n \"__\" +\r\n invoice.line_item_in_the_relevant_invoice ?? \"\"\r\n );\r\n}\r\n\r\nexport function isStringNotEmptyOrNull(val: string) {\r\n return typeof val !== \"undefined\" && val !== null && val !== \"\";\r\n}\r\n\r\nexport function convertArrayToObject(\r\n array: T[],\r\n key: string\r\n): { [key: string]: T } {\r\n const initialValue = {};\r\n return array.reduce((obj, item) => {\r\n return {\r\n ...obj,\r\n [item[key]]: item,\r\n };\r\n }, initialValue);\r\n}\r\n\r\nexport function getAndClearSessionStorage(\r\n key: string,\r\n defaultValue: any = null\r\n) {\r\n const jsonValue = sessionStorage.getItem(key);\r\n\r\n try {\r\n if (jsonValue !== null && typeof jsonValue !== \"undefined\") {\r\n return JSON.parse(jsonValue);\r\n }\r\n sessionStorage.removeItem(key);\r\n } catch (e) {}\r\n return defaultValue;\r\n}\r\n\r\nexport function getPreAuthAmount(\r\n card_type: CardType,\r\n payment_options: PaymentOption[]\r\n) {\r\n const found = payment_options.find((p) => p.payment_card_type);\r\n if (found) {\r\n return found.preauthorization_amount ?? 0.1 * 100;\r\n }\r\n return 0.1 * 100;\r\n}\r\n","import * as types from \"../constants/ActionTypes\";\r\nimport { getInvoiceKey } from \"../utils\";\r\n\r\nconst INVOICE_STATE_KEY = \"invoiceState\";\r\n\r\nexport function refreshInvoices() {\r\n return {\r\n type: types.FORCE_INVOICE_REFRESH,\r\n payload: {},\r\n };\r\n}\r\n\r\nexport let defaultInvoiceInitialState = {\r\n forceRefresh: 0, // sometimes we need to force the invoice list to refresh. Increment this number to do so.\r\n selected: {},\r\n invoiceDetail: {},\r\n completed: {\r\n invoices: {},\r\n detials: {},\r\n deposit: {},\r\n },\r\n activeInvoice: {},\r\n dueSelect: \"all\",\r\n searchInvoices: [],\r\n searchedinvoiceStatus: \"03\",\r\n searchedinvoiceDueDateFrom: \"\",\r\n searchedinvoiceDueDateTo: \"\",\r\n searchedinvoiceType: \"\",\r\n searchedInvoiceNumber: \"\",\r\n searchedArticleNumber: \"\",\r\n searchedArticleDescription: \"\",\r\n invoiceSearchedPeriod: \"all\",\r\n invoiceSearchedPeriodFrom: \"\",\r\n invoiceSearchedPeriodTo: \"\",\r\n payerDueAmount: \"\",\r\n totalCreditAmount: \"\",\r\n totalPastDueAmount: \"\",\r\n balanceAmount: \"\",\r\n statementId:\"\"\r\n};\r\n\r\nlet invoiceInitialState = defaultInvoiceInitialState;\r\nlet _sessionStorage = sessionStorage.getItem(INVOICE_STATE_KEY);\r\n\r\nif (_sessionStorage) {\r\n invoiceInitialState = JSON.parse(_sessionStorage);\r\n}\r\n\r\nexport interface InvoiceState {}\r\n\r\nexport function invoiceReducer(\r\n state = invoiceInitialState,\r\n action\r\n): InvoiceState {\r\n let newState = invoiceReducerInternal(state, action);\r\n sessionStorage.setItem(INVOICE_STATE_KEY, JSON.stringify(newState));\r\n return newState;\r\n}\r\n\r\nexport function invoiceReducerInternal(\r\n state = invoiceInitialState,\r\n action\r\n): InvoiceState {\r\n switch (action.type) {\r\n case types.ADD_INVOICE_TO_SELECTED:\r\n var key = getInvoiceKey(action.payload);\r\n return {\r\n ...state,\r\n selected: {\r\n ...state.selected,\r\n [key]: action.payload,\r\n },\r\n invoiceDetail: {\r\n ...state.invoiceDetail,\r\n [key]: {\r\n amount: action.payload.open_amount,\r\n amountValidation: \"\",\r\n reason: \"\",\r\n comment: \"\",\r\n },\r\n },\r\n };\r\n case types.REMOVE_INVOICE_FROM_SELECTED:\r\n var key = getInvoiceKey(action.payload);\r\n let newState = {\r\n ...state,\r\n selected: { ...state.selected },\r\n invoiceDetail: { ...state.invoiceDetail },\r\n };\r\n delete newState.selected[key];\r\n delete newState.invoiceDetail[key];\r\n return newState;\r\n case types.UPDATE_PAY_AMOUNT_FOR_INVOICE:\r\n let reason = \"\";\r\n let currentDetails = state.invoiceDetail[action.payload.documentId];\r\n if (action.payload.overUnder === currentDetails.overUnder) {\r\n reason = currentDetails.reason;\r\n }\r\n\r\n return {\r\n ...state,\r\n invoiceDetail: {\r\n ...state.invoiceDetail,\r\n [action.payload.documentId]: {\r\n ...currentDetails,\r\n amount: action.payload.amount,\r\n amountValidation: action.payload.amountValidation,\r\n reason: reason,\r\n overUnder: action.payload.overUnder,\r\n },\r\n },\r\n };\r\n case types.UPDATE_REASON:\r\n return {\r\n ...state,\r\n invoiceDetail: {\r\n ...state.invoiceDetail,\r\n [action.payload.documentId]: {\r\n ...state.invoiceDetail[action.payload.documentId],\r\n reason: action.payload.reason,\r\n },\r\n },\r\n };\r\n case types.UPDATE_REASON_COMMENT:\r\n return {\r\n ...state,\r\n invoiceDetail: {\r\n ...state.invoiceDetail,\r\n [action.payload.documentId]: {\r\n ...state.invoiceDetail[action.payload.documentId],\r\n comment: action.payload.comment,\r\n },\r\n },\r\n };\r\n case types.COPY_SELECTED_INVOICES_TO_COMPLETED:\r\n return {\r\n ...state,\r\n completed: {\r\n invoices: {\r\n ...state.selected,\r\n },\r\n details: {\r\n ...state.invoiceDetail,\r\n },\r\n },\r\n };\r\n case types.COPY_DEPOSIT_DETAILS:\r\n return {\r\n ...state,\r\n completed: {\r\n ...state.completed,\r\n deposit: action.payload,\r\n },\r\n };\r\n case types.CLEAR_SELECTED_INVOICES:\r\n return {\r\n ...state,\r\n selected: {},\r\n invoiceDetail: {},\r\n };\r\n case types.SET_ACTIVE_INVOICE:\r\n return {\r\n ...state,\r\n activeInvoice: action.payload,\r\n };\r\n case types.SET_DUE_SELECT:\r\n return {\r\n ...state,\r\n dueSelect: action.payload,\r\n };\r\n case types.SET_STATEMENT_ID:\r\n return {\r\n ...state,\r\n statementId: action.payload,\r\n };\r\n case types.FORCE_INVOICE_REFRESH:\r\n return { ...state, forceRefresh: state.forceRefresh + 1 };\r\n case types.SEARCHED_INVOICES:\r\n return {\r\n ...state,\r\n searchInvoices: action.payload,\r\n };\r\n case types.SEARCH_INVOICE_STATUS:\r\n return {\r\n ...state,\r\n searchedinvoiceStatus: action.payload,\r\n };\r\n case types.SEARCH_INVOICE_DUEDATE:\r\n return {\r\n ...state,\r\n searchedinvoiceDueDateFrom: action.payload.from,\r\n searchedinvoiceDueDateTo: action.payload.to,\r\n };\r\n case types.SEARCH_INVOICE_TYPE:\r\n return {\r\n ...state,\r\n searchedinvoiceType: action.payload,\r\n };\r\n case types.SEARCH_INVOICE_NUMBER:\r\n return {\r\n ...state,\r\n searchedInvoiceNumber: action.payload,\r\n };\r\n case types.SEARCH_ARTILCE_NUMBER:\r\n return {\r\n ...state,\r\n searchedArticleNumber: action.payload,\r\n };\r\n case types.SEARCH_ARTILCE_DESCRIPTION:\r\n return {\r\n ...state,\r\n searchedArticleDescription: action.payload,\r\n };\r\n case types.INVOICE_SEARCH_PERIOD:\r\n return {\r\n ...state,\r\n invoiceSearchedPeriod: action.payload,\r\n };\r\n case types.INVOICE_SEARCH_PERIOD_FROMTO:\r\n return {\r\n ...state,\r\n invoiceSearchedPeriodFrom: action.payload.from,\r\n invoiceSearchedPeriodTo: action.payload.to,\r\n };\r\n case types.PAYER_DUE_AMOUNT:\r\n return {\r\n ...state,\r\n payerDueAmount: action.payload,\r\n };\r\n case types.TOTAL_CREDIT_AMOUNT:\r\n return {\r\n ...state,\r\n totalCreditAmount: action.payload,\r\n };\r\n case types.TOTAL_PASTDUE_AMOUNT:\r\n return {\r\n ...state,\r\n totalPastDueAmount: action.payload,\r\n };\r\n case types.TOTAL_BALANCE_AMOUNT:\r\n return {\r\n ...state,\r\n balanceAmount: action.payload,\r\n };\r\n\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n","import * as types from '../constants/ActionTypes';\r\nimport {Invoice} from \"../interfaces/invoice\";\r\n\r\nconst CACHED_SELECTED_CARD = \"CACHED_SELECTED_CARD\";\r\n\r\nexport interface CurrencyOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\n\r\nexport const cnbsInitialState: DefaultState = {\r\n paymentStatusOptions: [\r\n {value: 'open', label: 'Open', clearableValue: false},\r\n {value: 'paid', label: 'Cleared', clearableValue: false}\r\n ],\r\n currencyOptions: [\r\n {value: 'USD', label: 'USD'},\r\n ],\r\n dueOptions: [\r\n {value: 'Due', label: 'Due up to', clearableValue: false},\r\n {value: 'All', label: 'Show All', clearableValue: false}\r\n ],\r\n\r\n invoicePaymentOptions: [\r\n {value: '009', label: 'Due'},\r\n {value: '010', label: 'Not due'},\r\n {value: '011', label: 'Due or not due'}\r\n ],\r\n invoices: [],\r\n currentUser: null,\r\n animating: 0,\r\n selectedCurrencyOptionValue: '',\r\n payerDetails: {\r\n payment_cards: []\r\n },\r\n paymentStatuses: null,\r\n selectedCard: sessionStorage.getItem(CACHED_SELECTED_CARD) ?? \"\",\r\n overPayNote: '',\r\n accountTypes: [],\r\n primaryAccountTypes: [],\r\n showPaymentStatus: true,\r\n paymentCardOptions: [],\r\n};\r\n\r\n// type DefaultState = typeof cnbsInitialState;\r\n\r\nexport interface DefaultState {\r\n currentUser: any;\r\n animating: any;\r\n invoices: Invoice[];\r\n selectedCurrencyOptionValue: any;\r\n currencyOptions: CurrencyOption[];\r\n accountTypes: any[];\r\n primaryAccountTypes: any[];\r\n payerDetails: any;\r\n paymentCardOptions: any;\r\n showPaymentStatus: boolean;\r\n paymentStatusOptions: any;\r\n dueOptions: any;\r\n invoicePaymentOptions: any;\r\n paymentStatuses: any;\r\n selectedCard: string;\r\n overPayNote: string;\r\n reasonNotRequired?: \"X\" | \"\";\r\n}\r\n\r\nexport default function reducer(state: DefaultState = cnbsInitialState, action: any): DefaultState {\r\n switch (action.type) {\r\n // Common props\r\n\r\n case types.LOADING_INCREMENT: {\r\n return {...state, animating: state.animating + 1};\r\n }\r\n case types.LOADING_DECREMENT: {\r\n return {...state, animating: state.animating - 1};\r\n }\r\n\r\n case types.GET_USER_SUCCESS: {\r\n return {\r\n ...state,\r\n currentUser: action.payload,\r\n };\r\n }\r\n\r\n case types.GET_INVOICES_SUCCESS: {\r\n return {\r\n ...state,\r\n invoices: action.payload\r\n };\r\n }\r\n\r\n case types.UPDATE_CURRENCY_CODE: {\r\n return {...state, selectedCurrencyOptionValue: action.payload};\r\n }\r\n\r\n case types.GET_PAYER_DETAILS_SUCCESS: {\r\n return {\r\n ...state,\r\n payerDetails: action.payload\r\n };\r\n }\r\n\r\n case types.UPDATE_PAYMENT_CARD_OPTIONS: {\r\n return {...state, paymentCardOptions: action.payload};\r\n }\r\n\r\n case types.POST_PAYMENT_REQUEST: {\r\n return {\r\n ...state,\r\n showPaymentStatus: true\r\n };\r\n }\r\n\r\n case types.POST_PAYMENT_SUCCESS: {\r\n return {\r\n ...state,\r\n showPaymentStatus: true,\r\n paymentStatuses: action.payload\r\n };\r\n }\r\n\r\n case types.GET_INVOICE_CURRENCY_SUCCESS: {\r\n return {\r\n ...state,\r\n currencyOptions: action.payload\r\n };\r\n }\r\n\r\n case types.UPDATE_PAYMENT_STATUS: {\r\n return {...state, paymentStatuses: null, showPaymentStatus: false};\r\n }\r\n\r\n case types.UPDATE_SELECTED_CARD:\r\n sessionStorage.setItem(CACHED_SELECTED_CARD, action.payload);\r\n return {...state, selectedCard: action.payload};\r\n\r\n case types.OVER_PAY_NOTE:\r\n return {...state, overPayNote: action.payload};\r\n\r\n case types.UPDATE_ACCOUNT_TYPES: {\r\n return {\r\n ...state, accountTypes: action.payload,\r\n };\r\n }\r\n\r\n case types.UPDATE_PRIMARY_ACCOUNT_TYPES: {\r\n return {\r\n ...state, primaryAccountTypes: action.payload,\r\n };\r\n }\r\n\r\n default: {\r\n return state;\r\n }\r\n }\r\n}\r\n","import * as types from '../constants/ActionTypes';\r\nimport {SapConfig} from \"../interfaces/CnbsConfigInterfaces\";\r\n\r\nexport function setConfig(config) {\r\n return {\r\n type: types.SET_CONFIG,\r\n payload: config,\r\n }\r\n}\r\n\r\nexport interface AppConfig{\r\n [key: string]: any; \r\n sap?: {\r\n data: SapConfig;\r\n }\r\n}\r\n\r\nexport interface AppState {\r\n config: AppConfig;\r\n paymentMethods: any[];\r\n [key: string]: any;\r\n}\r\n\r\nconst appInitialState: AppState = {\r\n config: {\r\n invoice_table: {columns: []},\r\n },\r\n paymentMethods: [],\r\n};\r\n\r\nexport function appReducer(state = appInitialState, action): AppState {\r\n switch (action.type) {\r\n\r\n case types.SET_CONFIG: {\r\n return {\r\n ...state, config: action.payload,\r\n };\r\n }\r\n\r\n case types.SET_PAYMENT_METHODS: {\r\n return {...state, paymentMethods: action.payload};\r\n }\r\n\r\n default:\r\n return {...state};\r\n }\r\n\r\n}\r\n","/**\r\n * This state/reducer focuses on modes that the user can change such as the soldto/payers.\r\n */\r\nimport * as types from '../constants/ActionTypes';\r\nimport {convertArrayToObject} from \"../utils\";\r\n\r\n export const SELECTED_SOLD_TOS_KEY = \"SELECTED_SOLD_TOS_KEY\";\r\n export const SELECTED_PRIMARY_INDEX_KEY = \"SELECTED_PRIMARY_INDEX_KEY\";\r\n export const SELECTED_SECONDARY_INDEX_KEY = \"SELECTED_SECONDARY_INDEX_KEY\";\r\n export const IMPERSONATED_USER_ID = \"IMPERSONATED_USER_ID\";\r\n export const UPDATE_IMPERSONATE_USER_NAME=\"UPDATE_IMPERSONATE_USER_NAME\";\r\n\r\n export let userOptionsInitialState = \r\n {\r\n accountType: \"\",\r\n secondaryAccounts: [],\r\n selectedSecondaryAccount: \"\",\r\n selectedSoldTos: [], // used for Payer Account Type\r\n invoiceSearchFromDate: '', //appConstants.INV_LIST_REQ_BEGIN_DATE,\r\n invoiceSearchToDate: '', //moment(new Date()).format('MM-DD-YYYY'),\r\n selectedPrimaryAccountIndex: 0,\r\n primaryAccounts: [] as any,\r\n invoiceSearchStatus: '01',\r\n invoiceSearchDueDateFrom: '',\r\n invoiceSearchDueDateTo: '',\r\n filter: [],\r\n impersonatedUserId: null,\r\n };\r\n\r\n \r\n export interface UserOptionsState {\r\n [key: string]: any;\r\n \r\n selectedSoldTos: any;\r\n selectedPrimaryAccountIndex: any;\r\n selectedSecondaryAccount: any;\r\n }\r\n \r\n \r\n export function userOptionsReducer(state = userOptionsInitialState, action): UserOptionsState {\r\n \r\n switch (action.type) {\r\n case types.UPDATE_SELECTED_SECONDARY_ACCOUNT: {\r\n sessionStorage.setItem(SELECTED_SECONDARY_INDEX_KEY, JSON.stringify(action.payload));\r\n return {...state, selectedSecondaryAccount: action.payload};\r\n }\r\n case types.INVOICE_SEARCH_DUE_FROM_DATE:\r\n return {...state, invoiceSearchDueDateFrom: action.payload};\r\n \r\n case types.INVOICE_SEARCH_DUE_TO_DATE:\r\n return {...state, invoiceSearchDueDateTo: action.payload};\r\n \r\n case types.SET_SELECTED_ACCOUNT: {\r\n let selectedSoldTos = action.payload.setSecondary ? (state.primaryAccounts[action.payload.selectedPrimaryAccountIndex]?.DropDownItems?.map(account => account.PrimaryAcct) ?? []) : [];\r\n \r\n sessionStorage.setItem(SELECTED_PRIMARY_INDEX_KEY, JSON.stringify(action.payload.selectedPrimaryAccountIndex));\r\n sessionStorage.setItem(SELECTED_SECONDARY_INDEX_KEY, JSON.stringify(state.primaryAccounts[action.payload.selectedPrimaryAccountIndex]?.DropDownItems[0]?.PrimaryAcct));\r\n return {\r\n ...state,\r\n selectedPrimaryAccountIndex: action.payload.selectedPrimaryAccountIndex,\r\n selectedSoldTos: selectedSoldTos,\r\n selectedSecondaryAccount: state.primaryAccounts[action.payload.selectedPrimaryAccountIndex]?.DropDownItems[0]?.PrimaryAcct,\r\n secondaryAccounts: convertArrayToObject((state.primaryAccounts[action.payload.selectedPrimaryAccountIndex]?.DropDownItems ?? []), \"PrimaryAcct\"),\r\n };\r\n }\r\n\r\n case types.GET_PRIMARY_ACCOUNTS_SUCCESS: {\r\n let secondaryAccounts = convertArrayToObject(action.payload.clearSecondary ? (action.payload.accounts[0]?.DropDownItems ?? []) : state.secondaryAccounts, 'PrimaryAcct');\r\n let selectedPrimaryAccount = action.payload.accounts[0]?.PrimaryAcct ?? \"\";\r\n let selectedSecondaryAccount = Object.keys(secondaryAccounts)[0] ?? \"\";\r\n sessionStorage.setItem(SELECTED_PRIMARY_INDEX_KEY, JSON.stringify(selectedPrimaryAccount));\r\n sessionStorage.setItem(SELECTED_SECONDARY_INDEX_KEY, JSON.stringify(selectedSecondaryAccount));\r\n return {\r\n ...state,\r\n primaryAccounts: convertArrayToObject(action.payload.accounts, \"PrimaryAcct\"),\r\n secondaryAccounts: secondaryAccounts,\r\n selectedPrimaryAccountIndex: selectedPrimaryAccount,\r\n selectedSecondaryAccount: selectedSecondaryAccount,\r\n };\r\n }\r\n \r\n case types.UPDATE_IMPERSONATE_USER_ID: {\r\n if (action.payload === \"\") {\r\n action.payload = null;\r\n }\r\n sessionStorage.setItem(IMPERSONATED_USER_ID, JSON.stringify(action.payload));\r\n return {\r\n ...state,\r\n impersonatedUserId: action.payload,\r\n };\r\n }\r\n case types.UPDATE_IMPERSONATE_USER_NAME: {\r\n if (action.payload === \"\") {\r\n action.payload = null;\r\n }\r\n sessionStorage.setItem(UPDATE_IMPERSONATE_USER_NAME, JSON.stringify(action.payload));\r\n return {\r\n ...state,\r\n impersonatedUserName: action.payload,\r\n };\r\n }\r\n case types.ADD_SOLD_TO_TO_SELECTED: {\r\n let newArray: any[] = state.selectedSoldTos.slice();\r\n newArray.push(action.payload);\r\n return {\r\n ...state,\r\n selectedSoldTos: newArray\r\n };\r\n }\r\n \r\n case types.REMOVE_SOLD_TO_FROM_SELECTED: { \r\n return {\r\n ...state,\r\n selectedSoldTos: state.selectedSoldTos.filter(i => i !== action.payload)\r\n };\r\n }\r\n case types.SET_SELECTED_SOLD_TOS: {\r\n return {\r\n ...state,\r\n selectedSoldTos: action.payload\r\n };\r\n }\r\n \r\n case types.UPDATE_INVOICE_SEARCH:\r\n return {\r\n ...state,\r\n invoiceSearchStatus: action?.payload?.status ?? state.invoiceSearchStatus,\r\n invoiceSearchDueDateFrom: action?.payload?.due_date_from ?? state.invoiceSearchDueDateFrom,\r\n invoiceSearchDueDateTo: action?.payload?.due_date_to ?? state.invoiceSearchDueDateTo,\r\n invoiceSearchFromDate: action?.payload?.date_from ?? state.invoiceSearchFromDate,\r\n invoiceSearchToDate: action?.payload?.date_to ?? state.invoiceSearchToDate,\r\n filter: action?.payload?.filter ?? state.filter,\r\n };\r\n \r\n case types.SET_ACCOUNT_TYPE:\r\n return {\r\n ...state,\r\n accountType: action.payload\r\n };\r\n \r\n default:\r\n return {...state};\r\n }\r\n }\r\n \r\n","export enum AuthStatus{\r\n Authenticated, // User successfully \r\n Failed, //Attempt to authenticated failed\r\n LoggedOut, // User manually logged out\r\n TimedOut, // Session has timed out\r\n Unauthenticated, // User has yet to be authenticated\r\n Waiting, // Status of the user is unknown\r\n}","/* eslint-env browser */\r\nimport React from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport * as types from '../constants/ActionTypes';\r\n\r\nexport function loadingDecrement(dispatch) {\r\n dispatch({ type: types.LOADING_DECREMENT});\r\n}\r\nexport function loadingIncrement(dispatch) {\r\n dispatch({ type: types.LOADING_INCREMENT});\r\n}\r\n\r\nexport function requestStarted(dispatch, actionType) {\r\n dispatch({ type: actionType });\r\n}\r\n\r\nexport function updateState(dispatch, actionType, data, cb = () =>{}) {\r\n dispatch({ type: actionType, payload: data }, cb);\r\n}\r\n\r\nexport function setisPaymentDisable(ispaymentdisable,) {\r\n sessionStorage.setItem(\"isPaymentDisable\", ispaymentdisable);\r\n \r\n}\r\nexport function setMessageForPaymentDisable(MessageForPaymentDisable,) {\r\n for (let key in MessageForPaymentDisable)\r\n {\r\n if (key == \"en_paymentDisableMessageText\" ||\r\n key == \"fr_paymentDisableMessageText\" ||\r\n key == \"de_paymentDisableMessageText\" ||\r\n key == \"es_paymentDisableMessageText\" ||\r\n key == \"it_paymentDisableMessageText\" ||\r\n key == \"ja_paymentDisableMessageText\" ||\r\n key == \"pt_paymentDisableMessageText\" ||\r\n key == \"ru_paymentDisableMessageText\")\r\n {\r\n localStorage.setItem(key, MessageForPaymentDisable[key]);\r\n }\r\n }\r\n if (sessionStorage.getItem(\"Language\") == undefined) {\r\n sessionStorage.setItem(\"Language\", \"en\");\r\n } \r\n \r\n}\r\n\r\n\r\nexport function getMessageForPaymentDisable(paymentDisableKey) {\r\n\r\n if (localStorage.getItem(paymentDisableKey) != '' && localStorage.getItem(paymentDisableKey) != undefined) {\r\n paymentDisableKey = localStorage.getItem(paymentDisableKey)!?.toString();\r\n }\r\n else if (localStorage.getItem(\"en_paymentDisableMessageText\") != '' && localStorage.getItem(\"en_paymentDisableMessageText\") != undefined) {\r\n paymentDisableKey = localStorage.getItem(\"en_paymentDisableMessageText\")!?.toString();\r\n }\r\n else {\r\n for (var i = 0; i < localStorage.length; i++) {\r\n let keyExists = localStorage.key(i)!.toString().endsWith(\"_paymentDisableMessageText\");\r\n if (keyExists == true) {\r\n if (localStorage.getItem(localStorage.key(i)!) != '' && localStorage.getItem(localStorage.key(i)!) != undefined) {\r\n paymentDisableKey = localStorage.getItem(localStorage.key(i)!)!?.toString();\r\n if (paymentDisableKey != \"\") {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return paymentDisableKey;\r\n}\r\n\r\nexport function requestErrored(dispatch, errorObj, actionType) {\r\n dispatch({ type: types.CALL_FAILED, payload: errorObj, call: actionType });\r\n if (errorObj && errorObj.response && errorObj.response.status === 401) {\r\n dispatch({ type: types.LOGOUT});\r\n } else if (errorObj && errorObj.response.status >= 500) {\r\n toast.error(\"System Error\", { position: toast.POSITION.TOP_RIGHT });\r\n } else if (errorObj && errorObj.response && typeof errorObj.response.data) {\r\n const uiError =
{'Error: '}{errorObj.response.data.error}{
}{'Unique Id: '}{errorObj.response.data.uniqueId}
;\r\n toast.error(uiError, { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n else if (errorObj && errorObj.response && errorObj.response.statusText) {\r\n toast.error(errorObj.response.statusText, { position: toast.POSITION.TOP_RIGHT });\r\n } else if (errorObj && errorObj.message) {\r\n toast.error(\"System Error\", { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n}\r\n\r\nexport function requestUnauthorized(dispatch, errorObj) {\r\n dispatch({ type: types.UN_AUTHORIZED, payload: errorObj });\r\n dispatch({ type: types.LOGOUT });\r\n}\r\n\r\nexport function loginFailed(dispatch, errorObj) {\r\n dispatch({ type: types.UN_AUTHORIZED, payload: errorObj });\r\n\r\n if (errorObj && errorObj.response && errorObj.response.status === 401) {\r\n toast.error(errorObj.response.data, { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n}","export const CREDENTIALS_REQUIRED = 'Email And Password Are Required.';\r\nexport const CREDENTIALS_INVALID = 'Authentication Failed, Invalid Credentials.';\r\nexport const AUTHENTICATION_ERROR = 'Error while authenicating.';\r\nexport const GET_USER_ERROR = 'Error getting user profile from API.';\r\nexport const GET_USER_PAYER_ERROR = 'Error get user payers from API.';\r\nexport const GET_INVOICE_ERROR = 'Error getting invoices from API.';\r\nexport const GET_INVOICE_DETAIL_ERROR = 'Error getting invoice detail from API.';\r\nexport const GET_INVOICE_PDF_ERROR = 'Error getting invoices PDF from API.';\r\nexport const GET_PAYER_DETAILS_ERROR = 'Error getting payer details from API.';\r\nexport const MAKE_PAYMENT_ERROR = 'Error when making payment.';\r\nexport const RESET_PASSWORD_ERROR = 'Error while resetting the password.';\r\nexport const RESET_PASSWORD_SUCCESS = 'Password reset successfully.';\r\n","// Authentication\r\nexport const LOGIN_URL = `/api/token/login?`;\r\nexport const LOGIN_SSO_URL = `/api/token/login-sso?`;\r\nexport const REFRESH_TOKEN_URL = `/api/token/refresh?`;\r\nexport const LOGOUT_URL = `/api/token/logout`;\r\nexport const GET_USER_URL = `/api/token/getuseraccounts`;\r\nexport const RESET_PASSWORD = `/api/token/resetpassword`;\r\n\r\n// Invoice\r\nexport const INVOICE_LIST_URL = `/api/Invoice`;\r\nexport const INVOICE_DETAIL_URL = `/api/invoice/detail`;\r\nexport const INVOICE_PDF_URL = `/api/Invoice/pdf-request`;\r\nexport const INVOICE_SEARCH_PDF_URL = `/api/invoice/search-pdf-request`;\r\nexport const INVOICE_BULK_URL = `/api/Invoice/bulk-pdf-request`;\r\nexport const INVOICE_EXCEL_DOWNLOAD = `/api/invoice/invoice-excel`;\r\nexport const PAYMENT_URL = `/api/invoice/payments`;\r\n\r\n// Customer\r\nexport const PAYER_DETAILS_URL = `/api/customer/payer`;\r\nexport const USER_HEADER_ACCOUNTS = `/api/customer/header-accounts?`;\r\nexport const MANAGE_PAYMENTS_URL = `/api/customer/payment_cards?`;\r\nexport const DEPOSIT_URL = `/api/customer/makedeposit`;\r\n\r\n// Payment Methods\r\nexport const GET_PAYMENT_ACCESS_TOKEN = `/api/tokenization/access_token?`;\r\nexport const GET_PAYMENT_RESPONSE = `/api/tokenization/response?`;\r\n\r\n// User Management\r\nexport const GET_USER_LIST = '/api/users';\r\n\r\n// AccountType Management\r\nexport const GET_ACCOUNT_TYPE_LIST = '/api/configuration/getaccounttypes';\r\nexport const GET_PRIMARY_ACCOUNT_TYPE_LIST = '/api/configuration/getprimaryaccounttypes';\r\n\r\n//StatementId Management\r\n\r\nexport const GET_STATEMENTS_LIST = '/api/function_module';\r\nexport const GET_STATEMENT_PDF = 'api/statement/statement-pdf-request'\r\n","export const APP_VERSION='v2.1.29'\r\nexport const INV_LIST_REQ_BEGIN_DATE = '01-01-1900';\r\nexport const INV_LIST_REQ_END_DATE = '01-01-9999';\r\nexport const SUCCESS = 'Success';\r\nexport const MULTI_CURRENCY_LENGTH = 0;\r\nexport const REASON_CODE = 'PP';\r\n","// These should match what is possible in the database.\r\nexport enum AccountType{\r\n SoldTo = 'SoldTo', \r\n Payer = 'Payer',\r\n PayerAll = 'PayerAll',\r\n}\r\n\r\nexport interface Account{\r\n PrimaryAcct: string;\r\n Name: string;\r\n}","declare var global: any;\r\n// @ts-nocheck\r\nlet _global:any = window;\r\n\r\nfunction bom (blob, opts) {\r\n if (typeof opts === 'undefined') opts = { autoBom: false }\r\n else if (typeof opts !== 'object') {\r\n console.warn('Deprecated: Expected third argument to be a object')\r\n opts = { autoBom: !opts }\r\n }\r\n\r\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\r\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\r\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\r\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\r\n }\r\n return blob\r\n}\r\n\r\nfunction download (url, name, opts) {\r\n var xhr = new XMLHttpRequest()\r\n xhr.open('GET', url)\r\n xhr.responseType = 'blob'\r\n xhr.onload = function () {\r\n saveAs(xhr.response, name, opts)\r\n }\r\n xhr.onerror = function () {\r\n console.error('could not download file')\r\n }\r\n xhr.send()\r\n}\r\n\r\nfunction corsEnabled (url) {\r\n var xhr = new XMLHttpRequest()\r\n // use sync to avoid popup blocker\r\n xhr.open('HEAD', url, false)\r\n try {\r\n xhr.send()\r\n } catch (e) {}\r\n return xhr.status >= 200 && xhr.status <= 299\r\n}\r\n\r\n// `a.click()` doesn't work for all browsers (#465)\r\nfunction click (node) {\r\n try {\r\n node.dispatchEvent(new MouseEvent('click'))\r\n } catch (e) {\r\n var evt = document.createEvent('MouseEvents')\r\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\r\n 20, false, false, false, false, 0, null)\r\n node.dispatchEvent(evt)\r\n }\r\n}\r\n\r\n// Detect WebView inside a native macOS app by ruling out all browsers\r\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\r\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\r\nvar isMacOSWebView = /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\r\n\r\nexport var saveAs:Function = (\r\n // probably in some web worker\r\n (typeof window !== 'object' || window !== _global)\r\n ? function saveAs () { /* noop */ }\r\n\r\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\r\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\r\n ? function saveAs (blob, name, opts) {\r\n var URL = _global.URL || _global.webkitURL\r\n var a = document.createElement('a')\r\n name = name || blob.name || 'download'\r\n\r\n a.download = name\r\n a.rel = 'noopener' // tabnabbing\r\n\r\n // TODO: detect chrome extensions & packaged apps\r\n // a.target = '_blank'\r\n\r\n if (typeof blob === 'string') {\r\n // Support regular links\r\n a.href = blob\r\n if (a.origin !== window.location.origin) {\r\n // @ts-ignore \r\n a.target = '_blank';\r\n corsEnabled(a.href)\r\n ? download(blob, name, opts)\r\n : click(a)\r\n } else {\r\n click(a)\r\n }\r\n } else {\r\n // Support blobs\r\n a.href = URL.createObjectURL(blob)\r\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\r\n setTimeout(function () { click(a) }, 0)\r\n }\r\n }\r\n\r\n // Use msSaveOrOpenBlob as a second approach\r\n : 'msSaveOrOpenBlob' in navigator\r\n ? function saveAs (blob, name, opts) {\r\n name = name || blob.name || 'download'\r\n\r\n if (typeof blob === 'string') {\r\n if (corsEnabled(blob)) {\r\n download(blob, name, opts)\r\n } else {\r\n var a = document.createElement('a')\r\n a.href = blob\r\n a.target = '_blank'\r\n setTimeout(function () { click(a) })\r\n }\r\n } else {\r\n //navigator.msSaveOrOpenBlob(bom(blob, opts), name)\r\n const nav = (window.navigator as any);\r\n if (nav.msSaveOrOpenBlob) {\r\n nav.msSaveOrOpenBlob(bom(blob, opts), name);\r\n }\r\n }\r\n }\r\n\r\n // Fallback to using FileReader and a popup\r\n : function saveAs (blob, name, opts, popup) {\r\n // Open a popup immediately do go around popup blocker\r\n // Mostly only available on user interaction and the fileReader is async so...\r\n popup = popup || window.open('', '_blank')\r\n if (popup) {\r\n popup.document.title =\r\n popup.document.body.innerText = 'downloading...'\r\n }\r\n\r\n if (typeof blob === 'string') return download(blob, name, opts)\r\n\r\n var force = blob.type === 'application/octet-stream'\r\n var isSafari = /constructor/i.test((_global.HTMLElement as any)) || (_global.safari as any);\r\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\r\n\r\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\r\n // Safari doesn't allow downloading of blob URLs\r\n var reader = new FileReader()\r\n reader.onloadend = function () {\r\n var url = reader.result\r\n // @ts-ignore\r\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\r\n if (popup) popup.location.href = url\r\n else { // @ts-ignore\r\n // @ts-ignore\r\n window.location = url\r\n }\r\n popup = null // reverse-tabnabbing #460\r\n }\r\n reader.readAsDataURL(blob)\r\n } else {\r\n var URL = _global.URL || _global.webkitURL\r\n var url = URL.createObjectURL(blob)\r\n if (popup) popup.location = url\r\n else window.location.href = url\r\n popup = null // reverse-tabnabbing #460\r\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\r\n }\r\n }\r\n)","/* eslint-env browser */\r\n/* eslint-disable no-console*/\r\nimport axios from \"../axios\";\r\nimport { toast } from 'react-toastify';\r\nimport * as apiTypes from '../constants/ApiConstants';\r\nimport * as types from '../constants/ActionTypes';\r\nimport * as validationTypes from '../constants/ValidationConstants';\r\nimport { Invoice, InvoiceResponse, InvoiceSearchParameters } from '../interfaces/invoice';\r\nimport { PayerDetails } from '../interfaces/PayerDetails';\r\nimport { PaymentStatus } from '../interfaces/PaymentStatus';\r\nimport {\r\n requestErrored,\r\n requestStarted,\r\n requestUnauthorized,\r\n updateState\r\n} from './CommonActions';\r\nimport * as Yup from \"yup\";\r\nimport { InvoiceRequestBody } from \"../interfaces/invoice\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { AccountType } from \"../interfaces/Accounts\";\r\nimport { ReduxAction, SapResponse } from \"../interfaces/utils\";\r\nimport { saveAs } from \"../common/FileSaver\";\r\n\r\n// import { soldToFormatter } from \"../common/invoiceHelpers\";\r\n\r\nexport function adjustCurrency(amount: number, decimals: number) {\r\n let adjust = 2 - decimals;\r\n return amount * Math.pow(10, adjust);\r\n}\r\n\r\nfunction setPayerDetails(payerDetails: PayerDetails): ReduxAction {\r\n return {\r\n type: types.GET_PAYER_DETAILS_SUCCESS,\r\n payload: payerDetails,\r\n }\r\n}\r\n\r\nfunction mapDistinctCurrencies(documentList: Invoice[]) {\r\n\r\n const currencies = [...Array.from(new Set(documentList.map(document => document.currency_key)))];\r\n\r\n return currencies.map(currency => ({\r\n value: currency,\r\n label: currency,\r\n clearableValue: false\r\n }));\r\n\r\n}\r\n\r\nexport function addInvoiceToSelected(document: Invoice, decimal: number) {\r\n return {\r\n type: types.ADD_INVOICE_TO_SELECTED,\r\n payload: {\r\n open_amount: document.open_amount?.toFixed(decimal),\r\n ...document\r\n }\r\n };\r\n}\r\n\r\nexport function removeInvoiceFromSelected(document: Invoice) {\r\n return {\r\n type: types.REMOVE_INVOICE_FROM_SELECTED,\r\n payload: document\r\n };\r\n}\r\n\r\nexport function setActiveInvoice(document: Invoice) {\r\n return {\r\n type: types.SET_ACTIVE_INVOICE,\r\n payload: document\r\n };\r\n}\r\n\r\nexport function setDueSelect(dueSelectValue) {\r\n return {\r\n type: types.SET_DUE_SELECT,\r\n payload: dueSelectValue\r\n };\r\n}export function setStatementId(statementId) {\r\n return {\r\n type: types.SET_STATEMENT_ID,\r\n payload: statementId\r\n };\r\n}\r\n\r\n\r\n\r\nexport function updatePayAmountForInvoice(documentId, amount, openAmount, partialAllowed, overPaymentAllowed, maxPaymentAllowed = 0) {\r\n \r\n \r\n let error = '';\r\n let overUnder = 0;\r\n if (amount < openAmount) {\r\n overUnder = -1;\r\n }\r\n if (amount > openAmount) {\r\n overUnder = 1;\r\n }\r\n\r\n if (amount === 0) {\r\n error = 'Amount cannot be zero.';\r\n } else if (amount === '') {\r\n error = 'Amount cannot be empty.';\r\n } else {\r\n let test = Yup.number();\r\n let validate = test.isValidSync(amount);\r\n if (!validate) {\r\n error = 'Only numeric values allowed';\r\n }\r\n }\r\n if (amount < 0) {\r\n error = 'Amount cannot be negative.';\r\n }\r\n if (amount < 0) {\r\n error = 'Amount cannot be negative.';\r\n }\r\n if (amount > openAmount && !overPaymentAllowed) {\r\n error = 'Over payment not allowed.';\r\n }\r\n if (amount < openAmount && !partialAllowed) {\r\n error = 'Partial payment not allowed.';\r\n }\r\n \r\n if (amount > maxPaymentAllowed && maxPaymentAllowed > 0) {\r\n error = 'Maximum payment exceeded.'\r\n }\r\n\r\n return {\r\n type: types.UPDATE_PAY_AMOUNT_FOR_INVOICE,\r\n payload: {\r\n documentId,\r\n amount,\r\n amountValidation: error,\r\n overUnder: overUnder,\r\n }\r\n };\r\n}\r\n\r\nexport function updateReasonComment(documentId, comment) {\r\n return {\r\n type: types.UPDATE_REASON_COMMENT,\r\n payload: {\r\n documentId,\r\n comment\r\n }\r\n };\r\n}\r\n\r\nexport function updateReason(documentId, reason) {\r\n return {\r\n type: types.UPDATE_REASON,\r\n payload: {\r\n documentId,\r\n reason\r\n }\r\n };\r\n}\r\n\r\nexport function getInvoicesAjax(invoiceListRequest: InvoiceRequestBody): Promise> {\r\n return axios\r\n .post(apiTypes.INVOICE_LIST_URL, invoiceListRequest);\r\n}\r\n\r\nexport function getInvoices(invoiceListRequest: InvoiceRequestBody, decimalLookup: (currencyKey: string) => number, selectedCurrency) {\r\n return (dispatch): Promise<{ invoices: Invoice[], invoiceCurrencies: any[] }> => {\r\n updateState(dispatch, types.GET_INVOICES_SUCCESS, []);\r\n return getInvoicesAjax(invoiceListRequest)\r\n .then(response => {\r\n let invoices: Invoice[] = [];\r\n let invoiceCurrencies: any[] = [];\r\n if (\r\n response.status === 200 &&\r\n (response.data.status?.message_type === 'S' || response.data.status?.message_type === 'W')\r\n ) {\r\n if (response.data.status.message_type === 'W') {\r\n toast.warn(response.data.status.message_line_string, {\r\n position: toast.POSITION.TOP_RIGHT\r\n });\r\n }\r\n invoices = response?.data?.document_list ?? [];\r\n\r\n invoiceCurrencies = mapDistinctCurrencies(response?.data?.document_list ?? []);\r\n\r\n invoices.forEach(invoice => {\r\n const soldToNum = parseInt(invoice.soldto_number, 10);\r\n const payerNum = parseInt(invoice.payer_number, 10);\r\n invoice.open_amount = invoice.open_amount ? adjustCurrency(invoice.open_amount, decimalLookup(invoice.currency_key)) : invoice.open_amount;\r\n invoice.total_amount = invoice.total_amount ? adjustCurrency(invoice.total_amount, decimalLookup(invoice.currency_key)) : invoice.total_amount;\r\n invoice.paid_amount = invoice.paid_amount ? adjustCurrency(invoice.paid_amount, decimalLookup(invoice.currency_key)) : invoice.paid_amount;\r\n invoice.soldto_number = isNaN(soldToNum) ? invoice.soldto_number : soldToNum.toString();\r\n invoice.payer_number = isNaN(payerNum) ? invoice.payer_number : payerNum.toString();\r\n });\r\n \r\n //Needs to check more closely \r\n // if (selectedCurrency == \"\") {\r\n // dispatch(setSelectedCurrency(invoices[0]?.currency_key ?? \"\"));\r\n // } else {\r\n // dispatch(setSelectedCurrency(selectedCurrency));\r\n // }\r\n\r\n updateState(dispatch, types.GET_INVOICES_SUCCESS, invoices);\r\n updateState(dispatch, types.GET_INVOICE_CURRENCY_SUCCESS, invoiceCurrencies);\r\n\r\n return { invoices, invoiceCurrencies };\r\n } else {\r\n updateState(dispatch, types.GET_INVOICES_SUCCESS, []);\r\n updateState(dispatch, types.GET_INVOICE_CURRENCY_SUCCESS, []);\r\n if (response.data && response.data.status && response.data.status?.message_line_string) {\r\n toast.error(response.data.status.message_line_string, {\r\n position: toast.POSITION.TOP_RIGHT\r\n });\r\n }\r\n return { invoices, invoiceCurrencies };\r\n }\r\n });\r\n\r\n }\r\n // .catch(err => {\r\n // if (err && err.response && err.response.status === 401) {\r\n // requestUnauthorized(dispatch, err);\r\n // } else {\r\n // requestErrored(dispatch, err, validationTypes.GET_INVOICE_ERROR);\r\n // }\r\n // });\r\n}\r\n\r\nexport function setsearchedInvoices(searchedInvoices) {\r\n return {\r\n type: types.SEARCHED_INVOICES,\r\n payload: searchedInvoices\r\n };\r\n}\r\n\r\nexport function getInvoicePDF(invoice) {\r\n return (dispatch) => {\r\n const docNumber = invoice.billing_document_number;\r\n const CustomerNumber = invoice.soldto_number;\r\n const input = { 'document_detail': { 'billing_document_number': `${docNumber}`, 'document_type': '01', 'customer_number': `${CustomerNumber}` } };\r\n axios\r\n .post(apiTypes.INVOICE_PDF_URL, input)\r\n .then(response => {\r\n if (response.status === 200) {\r\n // const file = new Blob([response.data], {type: 'application/pdf'});\r\n // const fileURL = URL.createObjectURL(file, {name: `${docNumber}${'.pdf'}`});\r\n window.open(response.data, '_blank');\r\n }\r\n })\r\n .catch(err => {\r\n if (err && err.response && err.response.status === 401) {\r\n requestUnauthorized(dispatch, err);\r\n } else {\r\n requestErrored(dispatch, err, validationTypes.GET_INVOICE_PDF_ERROR);\r\n }\r\n });\r\n\r\n }\r\n}\r\n\r\nexport function getInvoiceSearchPDF(dispatch, search) {\r\n axios\r\n .post(apiTypes.INVOICE_SEARCH_PDF_URL, search)\r\n .then(response => {\r\n if (response.status === 200) {\r\n window.open(response.data, '_blank');\r\n }\r\n })\r\n .catch(err => {\r\n if (err && err.response && err.response.status === 401) {\r\n requestUnauthorized(dispatch, err);\r\n } else {\r\n requestErrored(dispatch, err, validationTypes.GET_INVOICE_PDF_ERROR);\r\n }\r\n });\r\n}\r\n\r\n\r\nexport function getInvoiceBulkPDF(dispatch, search) {\r\n var vGridViewDocIds;\r\n let data = search;\r\n if (sessionStorage.getItem(\"invoicesWithKeysData\") != null) {\r\n vGridViewDocIds = JSON.parse(sessionStorage.getItem(\"invoicesWithKeysData\") || '{}');\r\n data.search_parameters.GridViewDocIds = vGridViewDocIds;\r\n }\r\n axios\r\n .post(apiTypes.INVOICE_BULK_URL, search)\r\n .then(response => {\r\n if (response.status === 200) {\r\n window.open(response.data, '_blank');\r\n }\r\n })\r\n .catch(err => {\r\n if (err && err.response && err.response.status === 401) {\r\n requestUnauthorized(dispatch, err);\r\n } else {\r\n requestErrored(dispatch, err, validationTypes.GET_INVOICE_PDF_ERROR);\r\n }\r\n });\r\n}\r\n\r\n\r\nexport function downloadExcelFile(dispatch, search) {\r\n axios\r\n .post(apiTypes.INVOICE_EXCEL_DOWNLOAD, search, {\r\n responseType: 'blob', // important\r\n })\r\n .then(response => {\r\n // @ts-ignore\r\n saveAs(\r\n response.data,\r\n \"InvoiceExport.xlsx\"\r\n );\r\n });\r\n}\r\n\r\n\r\nexport function extractLastCardNumbers(str, delim = '-') {\r\n if (str == null) {\r\n return \"\";\r\n }\r\n const a = str.indexOf(delim, 1);\r\n if (a === -1) return '';\r\n const b = str.indexOf(delim, a + 1);\r\n if (b === -1) return '';\r\n return str.substr(a + 1, b - a - 1);\r\n}\r\n\r\nexport function mapCards(cardData: any[]) {\r\n return cardData.map((card, index) => ({\r\n value: card.payment_card_token,\r\n label: `${card.payment_card_type}${'-'}${card.payment_card_name}${'-'}${extractLastCardNumbers(\r\n card.payment_card_token,\r\n '-'\r\n )}`,\r\n clearableValue: false,\r\n cardType: card.payment_card_type,\r\n index: index\r\n }));\r\n}\r\n\r\nexport function getPayerDetailsBuilder(primary: any, secondary: any, accountType: AccountType) {\r\n return (dispatch) => {\r\n let request;\r\n if (accountType === AccountType.SoldTo) {\r\n // Use Secondary Account\r\n request = {\r\n customer_number: secondary && secondary.PrimaryAcct,\r\n company_code: primary && primary.CompanyCode,\r\n action: '',\r\n sales_area_data: {\r\n sales_organization: secondary && secondary.SalesOrganization,\r\n distribution_channel: secondary && secondary.DistributionChannel,\r\n division: secondary && secondary.Division\r\n }\r\n };\r\n } else {\r\n // Use Primary Account\r\n request = {\r\n customer_number: primary && primary.PrimaryAcct,\r\n company_code: primary && primary.CompanyCode,\r\n action: '',\r\n sales_area_data: {\r\n sales_organization: primary && primary.SalesOrganization,\r\n distribution_channel: primary && primary.DistributionChannel,\r\n division: primary && primary.Division\r\n }\r\n };\r\n }\r\n return getPayerDetails(dispatch, request);\r\n\r\n };\r\n}\r\n\r\nexport function getPayerDetails(dispatch, input) {\r\n return axios\r\n .post>(apiTypes.PAYER_DETAILS_URL, input)\r\n .then(response => {\r\n if (response.status === 200 && response.data.status.message_type === 'S') {\r\n if (response.data) {\r\n dispatch(setPayerDetails(response.data.detail));\r\n return response.data.detail;\r\n }\r\n }\r\n return null;\r\n }\r\n )\r\n .catch(err => {\r\n if (err && err.response && err.response.status === 401) {\r\n requestUnauthorized(dispatch, err);\r\n } else {\r\n requestErrored(dispatch, err, validationTypes.GET_PAYER_DETAILS_ERROR);\r\n }\r\n });\r\n}\r\n\r\nexport function makePayment(paymentDetail, next = () => {\r\n}) {\r\n\r\n return (dispatch) => {\r\n requestStarted(dispatch, types.POST_PAYMENT_REQUEST);\r\n\r\n return axios\r\n .post(apiTypes.PAYMENT_URL, paymentDetail)\r\n .then(response => {\r\n if (response.status === 200) {\r\n if (response.data == null || !response.data.status) {\r\n throw (\"Invalid status.\")\r\n }\r\n const paymentStatuses = response.data.status.map((status, i) => {\r\n let authorizationReferenceCode = '';\r\n let documentNumberFinance = '';\r\n let currency_key = \"\";\r\n let authorization_amount = null;\r\n if (status && status.message_type === 'S' && response.data.payed && response.data.payed[i]) {\r\n authorizationReferenceCode = response.data.payed[i].authorization_reference_code;\r\n documentNumberFinance = response.data.payed[i].document_number_finance;\r\n currency_key = response.data.payed[i].currency_key;\r\n authorization_amount = response.data.payed[i].authorization_amount;\r\n }\r\n\r\n let paymentStatus: PaymentStatus = {\r\n index_number: i + 1,\r\n document_number_finance: documentNumberFinance,\r\n message_type: status.message_type,\r\n message_line_string: status.message_line_string,\r\n authorization_reference_code: authorizationReferenceCode,\r\n authorization_amount: authorization_amount,\r\n currency_key: currency_key,\r\n };\r\n return paymentStatus;\r\n });\r\n\r\n\r\n // Order matters here.\r\n updateState(dispatch, types.POST_PAYMENT_SUCCESS, paymentStatuses);\r\n next();\r\n updateState(dispatch, types.COPY_SELECTED_INVOICES_TO_COMPLETED, null);\r\n if (paymentStatuses.filter(i => i.message_type === 'S').length > 0) {\r\n updateState(dispatch, types.CLEAR_SELECTED_INVOICES, null);\r\n return true;\r\n }\r\n return false;\r\n }\r\n }).catch(err => {\r\n if (err && err.response && err.response.status === 401) {\r\n requestUnauthorized(dispatch, err);\r\n } else {\r\n requestErrored(dispatch, err, validationTypes.MAKE_PAYMENT_ERROR);\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport function getInvoiceDetail(billingDocumentNumber, documentType,customerNumber) {\r\n return (dispatch) => {\r\n const body = {\r\n 'document_detail': {\r\n 'billing_document_number': `${billingDocumentNumber}`,\r\n 'document_type': `${documentType}`,\r\n 'customer_number': `${customerNumber}`\r\n }\r\n };\r\n return axios\r\n .post(apiTypes.INVOICE_DETAIL_URL, body)\r\n .then((invoiceDetail) => {\r\n if (invoiceDetail.status === 200 && invoiceDetail.data) {\r\n if (invoiceDetail.data.status) {\r\n if (invoiceDetail.data.status.message_type === 'S') {\r\n return invoiceDetail.data.detail;\r\n } else if (invoiceDetail.data.status.message_type === 'E') {\r\n toast.warn(invoiceDetail.data.status.message_line_string, { position: toast.POSITION.TOP_RIGHT });\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n })\r\n .catch((err) => {\r\n if (err && err.response && err.response.status === 401) {\r\n requestErrored(dispatch, err, validationTypes.CREDENTIALS_INVALID);\r\n } else {\r\n requestErrored(dispatch, err, validationTypes.GET_INVOICE_DETAIL_ERROR);\r\n }\r\n return err;\r\n });\r\n\r\n }\r\n}\r\n\r\nexport function updateSelectedSecondaryAccountValue(dispatch, customerOptionValue, cb = () => {\r\n}) {\r\n updateState(dispatch, types.UPDATE_SELECTED_SECONDARY_ACCOUNT, customerOptionValue, cb);\r\n}\r\n\r\nexport function updatePrimaryAccount(selectedPrimaryAccountIndex, setSecondary = true): ReduxAction {\r\n return {\r\n type: types.SET_SELECTED_ACCOUNT,\r\n payload: { selectedPrimaryAccountIndex, setSecondary }\r\n }\r\n}\r\n\r\nexport function updateSecondaryAccount(account): ReduxAction {\r\n return {\r\n type: types.UPDATE_SELECTED_SECONDARY_ACCOUNT,\r\n payload: account\r\n }\r\n}\r\n\r\nexport function updateSelectedCard(selectedCardKey: string) {\r\n return {\r\n type: types.UPDATE_SELECTED_CARD,\r\n payload: selectedCardKey,\r\n }\r\n}\r\n\r\nexport function updateInvoiceSearchDueToDate(dueToDate): ReduxAction {\r\n return {\r\n type: types.INVOICE_SEARCH_DUE_TO_DATE,\r\n payload: dueToDate,\r\n }\r\n}\r\n\r\n\r\nexport function updateInvoiceSearch(invoiceSearch: Partial): ReduxAction {\r\n return {\r\n \r\n type: types.UPDATE_INVOICE_SEARCH,\r\n payload: invoiceSearch,\r\n }\r\n \r\n}\r\n\r\n\r\nexport function addSoldToToSelected(soldToNumber) {\r\n return {\r\n type: types.ADD_SOLD_TO_TO_SELECTED,\r\n payload: soldToNumber\r\n };\r\n}\r\n\r\nexport function removeSoldToFromSelected(soldToNumber) {\r\n return {\r\n type: types.REMOVE_SOLD_TO_FROM_SELECTED,\r\n payload: soldToNumber\r\n };\r\n}\r\n\r\nexport function setSelectedSoldTos(soldToNumbers) {\r\n return {\r\n type: types.SET_SELECTED_SOLD_TOS,\r\n payload: soldToNumbers\r\n };\r\n}\r\n\r\nexport function setSelectedCurrency(currencyCode: string) {\r\n return {\r\n type: types.UPDATE_CURRENCY_CODE,\r\n payload: currencyCode\r\n };\r\n}\r\n\r\nexport function makeDeposit(paymentDetail, next = () => {\r\n}) {\r\n return (dispatch) => {\r\n requestStarted(dispatch, types.POST_PAYMENT_REQUEST);\r\n\r\n return axios\r\n .post(apiTypes.DEPOSIT_URL, paymentDetail)\r\n .then(response => {\r\n if (response.status === 200) {\r\n if (response.data == null || !response.data.status) {\r\n throw (\"Invalid status.\")\r\n }\r\n const paymentStatuses = response.data.status.map((status, i) => {\r\n let authorizationReferenceCode = '';\r\n let documentNumberFinance = '';\r\n let authorization_amount = null;\r\n let currency_key = \"\";\r\n if (status && status.message_type === 'S' && response.data.payed && response.data.payed[i]) {\r\n authorizationReferenceCode = response.data.payed[i].authorization_reference_code;\r\n documentNumberFinance = response.data.payed[i].document_number_finance;\r\n authorization_amount = response.data.payed[i].authorization_amount;\r\n currency_key = response.data.payed[i].currency_key;\r\n }\r\n let paymentStatus: PaymentStatus = {\r\n index_number: i + 1,\r\n document_number_finance: documentNumberFinance,\r\n message_type: status.message_type,\r\n message_line_string: status.message_line_string,\r\n authorization_reference_code: authorizationReferenceCode,\r\n authorization_amount: authorization_amount,\r\n currency_key: currency_key,\r\n };\r\n return paymentStatus;\r\n });\r\n updateState(dispatch, types.POST_PAYMENT_SUCCESS, paymentStatuses);\r\n next();\r\n updateState(dispatch, types.COPY_DEPOSIT_DETAILS, paymentDetail);\r\n }\r\n })\r\n .catch(err => {\r\n if (err && err.response && err.response.status === 401) {\r\n requestUnauthorized(dispatch, err);\r\n } else {\r\n requestErrored(dispatch, err, validationTypes.MAKE_PAYMENT_ERROR);\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport function clearSelectedInvoices(): ReduxAction {\r\n return {\r\n type: types.CLEAR_SELECTED_INVOICES,\r\n payload: null,\r\n }\r\n}\r\n\r\nexport function selectPayer(val): ReduxAction {\r\n return {\r\n type: types.UPDATE_SELECTED_SECONDARY_ACCOUNT,\r\n payload: val,\r\n }\r\n}\r\n\r\nexport function updatePrimaryAccountTypes(primaryAccountType): ReduxAction {\r\n return {\r\n type: types.UPDATE_PRIMARY_ACCOUNT_TYPES,\r\n payload: primaryAccountType,\r\n }\r\n}\r\n\r\nexport function setPaymentMethods(paymentMethods): ReduxAction {\r\n return {\r\n type: types.SET_PAYMENT_METHODS,\r\n payload: paymentMethods\r\n }\r\n}\r\n\r\nexport function setsearchedinvoiceStatus(staus) {\r\n return {\r\n type: types.SEARCH_INVOICE_STATUS,\r\n payload: staus\r\n };\r\n}\r\nexport function setsearchedinvoiceDueDate(dueDateFrom, dueDateTo) {\r\n let dueDate = { from: dueDateFrom, to: dueDateTo }\r\n return {\r\n type: types.SEARCH_INVOICE_DUEDATE,\r\n payload: dueDate\r\n };\r\n}\r\nexport function setsearchedinvoiceType(type) {\r\n return {\r\n type: types.SEARCH_INVOICE_TYPE,\r\n payload: type\r\n };\r\n}\r\nexport function setsearchedInvoiceNumber(invoiceNumber) {\r\n return {\r\n type: types.SEARCH_INVOICE_NUMBER,\r\n payload: invoiceNumber\r\n };\r\n}\r\nexport function setsearchedArticleNumber(articleNumber) {\r\n return {\r\n type: types.SEARCH_ARTILCE_NUMBER,\r\n payload: articleNumber\r\n };\r\n}\r\nexport function setsearchedArticleDescription(description) {\r\n return {\r\n type: types.SEARCH_ARTILCE_DESCRIPTION,\r\n payload: description\r\n };\r\n}\r\n\r\nexport function setinvoiceSearchedPeriod(period) {\r\n return {\r\n type: types.INVOICE_SEARCH_PERIOD,\r\n payload: period\r\n };\r\n}\r\nexport function setinvoiceSearchedPeriodFromTo(periodFrom, periodTo) {\r\n let periodFromTo = { from: periodFrom, to: periodTo }\r\n return {\r\n type: types.INVOICE_SEARCH_PERIOD_FROMTO,\r\n payload: periodFromTo\r\n };\r\n}\r\nexport function isCredit(invoice: Invoice): boolean {\r\n return (typeof invoice.open_amount !== \"undefined\" && invoice.open_amount < 0);\r\n}\r\nexport function isOverDue(invoice: Invoice) {\r\n const datearray: any = invoice.due_date.split('-');\r\n const dueDate = new Date(datearray[2], datearray[0] - 1, datearray[1]);\r\n const todaysDate = new Date();\r\n return dueDate < todaysDate;\r\n}\r\nexport function payerInvoiceDueAmount(data) {\r\n \r\n return (dispatch) => {\r\n let openAmout: string[] = [];\r\n let totalCredits: string[] = [];\r\n let totalPastDue: string[] = [];\r\n let dueamount: number = 0;\r\n let totalCreditsAmount: number = 0;\r\n let totalPastDueAmount: number = 0;\r\n let balance: number = 0;\r\n let payeruncheck: number = 0;\r\n if (data.length > 0) {\r\n data.forEach(element => {\r\n // if (!isCredit(element) && element.item_is_a_payment != \"X\") {\r\n if (!isCredit(element)) {\r\n openAmout.push(element.open_amount);\r\n let total = openAmout.reduce((a, x) => a + x);\r\n dueamount = parseFloat(total);\r\n \r\n }\r\n if (isCredit(element)) {\r\n totalCredits.push(element.open_amount);\r\n let total = totalCredits.reduce((a, x) => a + x);\r\n totalCreditsAmount = parseFloat(total);\r\n \r\n }\r\n // if (element.item_is_a_payment != \"X\" && !isCredit(element) && isOverDue(element)) {\r\n if ( !isCredit(element) && isOverDue(element)) {\r\n totalPastDue.push(element.open_amount);\r\n let total = totalPastDue.reduce((a, x) => a + x);\r\n totalPastDueAmount = parseFloat(total);\r\n }\r\n balance = dueamount + totalCreditsAmount\r\n \r\n });\r\n dispatch({ type: types.PAYER_DUE_AMOUNT, payload: dueamount });\r\n dispatch({ type: types.TOTAL_CREDIT_AMOUNT, payload: totalCreditsAmount });\r\n dispatch({ type: types.TOTAL_BALANCE_AMOUNT, payload: balance });\r\n dispatch({ type: types.TOTAL_PASTDUE_AMOUNT, payload: totalPastDueAmount });\r\n }\r\n else {\r\n dispatch({ type: types.PAYER_DUE_AMOUNT, payload: payeruncheck });\r\n dispatch({ type: types.TOTAL_CREDIT_AMOUNT, payload: payeruncheck });\r\n dispatch({ type: types.TOTAL_PASTDUE_AMOUNT, payload: payeruncheck });\r\n dispatch({ type: types.TOTAL_BALANCE_AMOUNT, payload: payeruncheck });\r\n }\r\n }\r\n}\r\n","import axios from \"./axios\";\r\nimport {loadingDecrement, loadingIncrement} from \"./actions/CommonActions\";\r\nimport store from \"./store\";\r\nimport {refreshToken} from \"./actions/UserActions\";\r\nimport {clearSessionStorage} from \"./reducers/RootReducer\";\r\n\r\nlet _token = sessionStorage.getItem('token');\r\n\r\nexport function requestDone(response) {\r\n loadingDecrement(store.dispatch);\r\n return response;\r\n}\r\n\r\n\r\nexport function setToken(token: string, refreshToken: string) {\r\n _token = token;\r\n sessionStorage.setItem('token', token);\r\n sessionStorage.setItem('refreshToken', refreshToken);\r\n axios.instance.defaults.headers.common['Authorization'] = `Bearer ${token}`;\r\n}\r\n\r\nexport function get(url: string) {\r\n loadingIncrement(store.dispatch);\r\n return fetch(url, {\r\n headers: {\r\n 'Authorization': `Bearer ${_token}`\r\n }\r\n }).then(requestDone);\r\n}\r\n\r\nexport function post(url: string, body: string | Object) {\r\n loadingIncrement(store.dispatch);\r\n return fetch(url, {\r\n headers: {\r\n 'Authorization': `Bearer ${_token}`\r\n },\r\n method: \"POST\",\r\n body: (typeof body == \"string\") ? body : JSON.stringify(body),\r\n }).then(requestDone);\r\n}\r\n\r\nexport function put(url: string, body: string | Object) {\r\n loadingIncrement(store.dispatch);\r\n return fetch(url, {\r\n headers: {\r\n 'Authorization': `Bearer ${_token}`\r\n },\r\n method: \"PUT\",\r\n body: (typeof body == \"string\") ? body : JSON.stringify(body),\r\n }).then(requestDone);\r\n}\r\n\r\nexport function deleteRequest(url: string) {\r\n loadingIncrement(store.dispatch);\r\n return fetch(url, {\r\n headers: {\r\n 'Authorization': `Bearer ${_token}`\r\n },\r\n method: \"DELETE\",\r\n }).then(requestDone);\r\n}\r\n\r\nexport function checkStatus(statusCode: number) {\r\n return (response: Response) => {\r\n if (response.status != statusCode) {\r\n throw new Error(\"Invalid status code\");\r\n }\r\n return response;\r\n }\r\n}\r\n\r\nexport function parseJson(response: Response) {\r\n try {\r\n return response.json();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function returnNull(error) {\r\n return null;\r\n}\r\n","import { createSelector } from \"reselect\";\r\nimport * as appConstants from \"../constants/ApplicationConstants\";\r\n\r\nimport moment from \"moment\";\r\nimport { AccountType } from \"../interfaces/Accounts\";\r\nimport { InvoiceSearchParameters } from \"../interfaces/invoice\";\r\n\r\nconst getSelectedInvoices = (state) => state.invoice.selected;\r\nconst getLineItems = (state) => state.invoice.invoiceDetail;\r\nconst getPaymentOptions = (state) => state.default.payerDetails.payment_cards;\r\nconst getSelectedPaymentOptionIndex = (state) => state.default.selectedCard;\r\nconst getCurrentUser = (state) => state.default.currentUser;\r\nconst getAccountType = (state) => state.user_options.accountType;\r\n//Added\r\nconst getSoldToSearchParams = (state) => state.user_options.SoldTo_SearchParams;\r\n\r\nconst getSelectedSecondaryAccountIndex = (state) =>\r\n state.user_options.selectedSecondaryAccount;\r\nconst getSelectedPrimaryAccountIndex = (state) =>\r\n state.user_options.selectedPrimaryAccountIndex;\r\nconst getPrimaryAccounts = (state) => state.user_options.primaryAccounts;\r\nconst getSecondaryAccounts = (state) => state.user_options.secondaryAccounts;\r\nconst getInvoiceSearchToDate = (state) =>\r\n state.user_options.invoiceSearchToDate;\r\nconst getInvoiceSearchFromDate = (state) =>\r\n state.user_options.invoiceSearchFromDate;\r\nconst getInvoiceSearchStatus = (state) =>\r\n state.user_options.invoiceSearchStatus;\r\nconst getInvoiceSearchDueDateFrom = (state) =>\r\n state.user_options.invoiceSearchDueDateFrom;\r\nconst getInvoiceSearchDueDateTo = (state) =>\r\n state.user_options.invoiceSearchDueDateTo;\r\nconst getInvoiceSearchFilter = (state) => state.user_options.filter;\r\nconst _getImpersonatedUserId = (state) => state.user_options.impersonatedUserId;\r\nconst getCnbsConfig = (state) => state.app.config.sap?.data;\r\nconst getCurrency = (state) => state.default.selectedCurrencyOptionValue;\r\n\r\nexport const getImpersonatedUserId = createSelector(\r\n [getCurrentUser, _getImpersonatedUserId],\r\n (user, impersonatedUserId) => {\r\n if (\r\n impersonatedUserId === null ||\r\n typeof impersonatedUserId === \"undefined\"\r\n ) {\r\n return user.user_id;\r\n }\r\n return impersonatedUserId;\r\n }\r\n);\r\n\r\nexport const getInvoiceTotal = createSelector(\r\n [getSelectedInvoices],\r\n (items) => {\r\n let total = Object.keys(items)\r\n .map((key) => items[key])\r\n .reduce((total, item) => {\r\n total += item.open_amount;\r\n return Math.round(total * 100) / 100;\r\n }, 0);\r\n return total.toFixed(2);\r\n }\r\n);\r\n\r\nexport const getSelectedPrimaryAccount = createSelector(\r\n [getSelectedPrimaryAccountIndex, getPrimaryAccounts],\r\n (index, accounts) => {\r\n if (typeof accounts === \"undefined\" || accounts.length === 0) {\r\n return null;\r\n }\r\n return accounts[index];\r\n }\r\n);\r\n\r\nexport const getSelectedSecondaryAccount = createSelector(\r\n [getSelectedSecondaryAccountIndex, getSecondaryAccounts],\r\n (index, accounts) => {\r\n if (\r\n typeof accounts === \"undefined\" ||\r\n accounts == null ||\r\n accounts.length === 0\r\n ) {\r\n return null;\r\n }\r\n return accounts[index];\r\n }\r\n);\r\n\r\nexport function handleDeleteIframe() {\r\n var frame = document.querySelector(\"#cardinal_iframe_post\")!;\r\n if (frame !== null) {\r\n frame.remove();\r\n }\r\n}\r\n\r\nexport const getPayTotal = createSelector([getLineItems], (items) => {\r\n let total = Object.keys(items)\r\n .map((key) => items[key])\r\n .reduce((total, item) => {\r\n total += parseFloat(item.amount);\r\n return Math.round(parseFloat(total) * 100) / 100;\r\n }, 0);\r\n return total.toFixed(2);\r\n});\r\n\r\n// Represents the amount the will be paid with credit card or EC.\r\nexport const getBeforeCreditTotal = createSelector(\r\n [getLineItems, getSelectedInvoices],\r\n (items, selected) => {\r\n return Object.keys(items)\r\n .map((key) => {\r\n return { details: items[key], invoice: selected[key] };\r\n })\r\n .reduce((total, item) => {\r\n if (item.invoice.open_amount >= 0) {\r\n total += item.details.amount;\r\n }\r\n return total;\r\n }, 0);\r\n }\r\n);\r\n\r\nexport const getCreditTotal = createSelector(\r\n [getLineItems, getSelectedInvoices],\r\n (items, selected) => {\r\n return Object.keys(items)\r\n .map((key) => {\r\n return { details: items[key], invoice: selected[key] };\r\n })\r\n .reduce((total, item) => {\r\n if (item.invoice.open_amount < 0) {\r\n total += item.details.amount;\r\n }\r\n return total;\r\n }, 0);\r\n }\r\n);\r\n\r\nexport const getSelectedInvoiceKeys = createSelector(\r\n [getSelectedInvoices],\r\n (items) => {\r\n return Object.keys(items);\r\n }\r\n);\r\n\r\nexport const getOverpayingAmount = createSelector(\r\n [getInvoiceTotal, getPayTotal],\r\n (total, payTotal) => {\r\n return (\r\n Math.round((parseFloat(payTotal) - parseFloat(total)) * 100) / 100\r\n ).toFixed(2);\r\n }\r\n);\r\n\r\nexport const getPayerAccount = createSelector(\r\n [getSelectedPrimaryAccount, getSelectedSecondaryAccount, getAccountType],\r\n (primary, secondary, accountType) => {\r\n if (accountType === AccountType.SoldTo) {\r\n return secondary;\r\n } else {\r\n return primary;\r\n }\r\n }\r\n);\r\n\r\nexport const getAllPaymentOptions = createSelector(\r\n [\r\n getPaymentOptions,\r\n (state) => state.payment.sessionCards,\r\n (state) => state.payment.sessionChecks,\r\n getPayerAccount,\r\n ],\r\n (options, sessionCards, sessionChecks, payerAccount) => {\r\n let newCardData = options.slice(0);\r\n newCardData.forEach((c) => (c.is_session = false));\r\n\r\n if (payerAccount) {\r\n let account = payerAccount.PrimaryAcct;\r\n for (let prop in sessionCards[account]) {\r\n if (sessionCards[account].hasOwnProperty(prop)) {\r\n let card = sessionCards[account][prop];\r\n card.is_session = true;\r\n newCardData.push(sessionCards[account][prop]);\r\n }\r\n }\r\n\r\n for (let prop in sessionChecks[account]) {\r\n if (sessionChecks[account].hasOwnProperty(prop)) {\r\n let check = sessionChecks[account][prop];\r\n check.is_session = true;\r\n newCardData.push(sessionChecks[account][prop]);\r\n }\r\n }\r\n }\r\n\r\n return newCardData;\r\n }\r\n);\r\n\r\nexport const getSelectedPaymentOption = createSelector(\r\n [getAllPaymentOptions, getSelectedPaymentOptionIndex],\r\n (options, selectedIndex) => {\r\n if (selectedIndex === null || selectedIndex == \"\") {\r\n return null;\r\n }\r\n let selected = options.find((p) => selectedIndex === p.payment_card_token);\r\n if (selected) {\r\n return selected;\r\n }\r\n return null;\r\n }\r\n);\r\n\r\nexport const getCustomerNumber = createSelector(\r\n [getAccountType, getSelectedSecondaryAccount, getSelectedPrimaryAccount],\r\n (accountType, selectedSecondaryAccount, selectedPrimaryAccount) => {\r\n if (accountType === AccountType.SoldTo) {\r\n return selectedSecondaryAccount?.PrimaryAcct;\r\n } else {\r\n return selectedPrimaryAccount?.PrimaryAcct;\r\n }\r\n }\r\n);\r\n\r\nexport const getCompanyCode = createSelector(\r\n [getAccountType, getSelectedSecondaryAccount, getSelectedPrimaryAccount],\r\n (accountType, selectedSecondaryAccount, selectedPrimaryAccount) => {\r\n if (accountType === AccountType.SoldTo) {\r\n return selectedSecondaryAccount?.CompanyCode;\r\n } else {\r\n return selectedPrimaryAccount?.CompanyCode;\r\n }\r\n }\r\n);\r\n\r\n//TODO move out of selectors.\r\nexport function getPayerSoldToForInvoiceQuery(\r\n accountType,\r\n secondaryAccount,\r\n primaryAccount\r\n) {\r\n let payer_data;\r\n let soldto_data: any = { customer_number: \"\", company_code: \"\" };\r\n if (typeof primaryAccount == \"undefined\" || primaryAccount == null) {\r\n return { payer_data, soldto_data };\r\n }\r\n if (accountType === AccountType.SoldTo) {\r\n payer_data = {\r\n customer_number: secondaryAccount?.PrimaryAcct,\r\n company_code: primaryAccount?.CompanyCode,\r\n };\r\n soldto_data = {\r\n customer_number: primaryAccount?.PrimaryAcct,\r\n accounts: primaryAccount?.TransactionalAccounts,\r\n company_code: \"\",\r\n };\r\n } else {\r\n payer_data = {\r\n customer_number: primaryAccount?.PrimaryAcct ?? \"\",\r\n company_code: primaryAccount?.CompanyCode ?? \"\",\r\n };\r\n //soldto_data = {\r\n // customer_number: secondaryAccount?.PrimaryAcct,\r\n // accounts: primaryAccount?.TransactionalAccounts,\r\n // company_code: \"\",\r\n //};\r\n soldto_data = null;\r\n }\r\n return { payer_data, soldto_data };\r\n}\r\n\r\nexport function getSoldTo(accountType, secondaryAccount, primaryAccount) {\r\n let soldto_data: any = { customer_number: \"\", company_code: \"\" };\r\n if (typeof primaryAccount == \"undefined\" || primaryAccount == null) {\r\n return soldto_data;\r\n }\r\n if (accountType === AccountType.SoldTo) {\r\n soldto_data = {\r\n customer_number: primaryAccount?.PrimaryAcct,\r\n accounts: primaryAccount?.TransactionalAccounts,\r\n company_code: \"\",\r\n };\r\n } else {\r\n soldto_data = null;\r\n }\r\n return soldto_data;\r\n}\r\n\r\nexport function getDefaultFilters(accountType, impersonatedUserId) {\r\n let defaultFilters: any[] = [];\r\n if (accountType === AccountType.PayerAll) {\r\n defaultFilters.push({\r\n filter_type: \"90\",\r\n value: impersonatedUserId,\r\n });\r\n }\r\n return defaultFilters;\r\n}\r\n\r\nexport const getInvoiceQuery = createSelector(\r\n [\r\n getAccountType,\r\n getSoldToSearchParams,\r\n getSelectedPrimaryAccount,\r\n getSelectedSecondaryAccount,\r\n getInvoiceSearchFromDate,\r\n getInvoiceSearchToDate,\r\n getInvoiceSearchStatus,\r\n getInvoiceSearchDueDateFrom,\r\n getInvoiceSearchDueDateTo,\r\n getInvoiceSearchFilter,\r\n getImpersonatedUserId,\r\n ],\r\n (\r\n accountType,\r\n SoldToSearchParams,\r\n primaryAccount,\r\n secondaryAccount,\r\n fromDate,\r\n toDate,\r\n status,\r\n dueDateFrom,\r\n dueDateTo,\r\n filter,\r\n impersonatedUserId\r\n ) => {\r\n try {\r\n let { payer_data, soldto_data } = getPayerSoldToForInvoiceQuery(\r\n accountType,\r\n secondaryAccount,\r\n primaryAccount\r\n );\r\n return {\r\n payer_data,\r\n soldto_data,\r\n search_parameters: {\r\n document_type: \"01\",\r\n status: status,\r\n SoldTo_SearchParams: SoldToSearchParams,\r\n date_from:\r\n fromDate === \"\" ? appConstants.INV_LIST_REQ_BEGIN_DATE : fromDate,\r\n date_to:\r\n toDate === \"\" ? moment(new Date()).format(\"MM-DD-YYYY\") : toDate,\r\n due_date_from: dueDateFrom,\r\n due_date_to: dueDateTo,\r\n currency_key: \"\",\r\n filter: getDefaultFilters(accountType, impersonatedUserId).concat(\r\n filter\r\n ),\r\n },\r\n } as {\r\n payer_data: any;\r\n soldto_data: any;\r\n search_parameters: InvoiceSearchParameters;\r\n };\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n);\r\n\r\nexport const getInvoiceQueryforPDFandCSVandexcel = createSelector(\r\n [\r\n getAccountType,\r\n getSelectedPrimaryAccount,\r\n getSelectedSecondaryAccount,\r\n getInvoiceSearchFromDate,\r\n getInvoiceSearchToDate,\r\n getInvoiceSearchStatus,\r\n getInvoiceSearchDueDateFrom,\r\n getInvoiceSearchDueDateTo,\r\n getInvoiceSearchFilter,\r\n getImpersonatedUserId,\r\n getCurrency,\r\n ],\r\n (\r\n accountType,\r\n primaryAccount,\r\n secondaryAccount,\r\n fromDate,\r\n toDate,\r\n status,\r\n // dueDateFrom,\r\n //dueDateTo,\r\n //filter,\r\n impersonatedUserId,\r\n currency\r\n ) => {\r\n try {\r\n let { payer_data, soldto_data } = getPayerSoldToForInvoiceQuery(\r\n accountType,\r\n secondaryAccount,\r\n primaryAccount\r\n );\r\n return {\r\n payer_data,\r\n soldto_data,\r\n search_parameters: {\r\n document_type: \"01\",\r\n status: status,\r\n date_from:\r\n fromDate === \"\" ? appConstants.INV_LIST_REQ_BEGIN_DATE : fromDate,\r\n date_to:\r\n toDate === \"\" ? moment(new Date()).format(\"MM-DD-YYYY\") : toDate,\r\n //due_date_from: dueDateFrom,\r\n //due_date_to: dueDateTo,\r\n //currency_key: currency,\r\n //filter: getDefaultFilters(accountType, impersonatedUserId).concat(filter),\r\n },\r\n } as {\r\n payer_data: any;\r\n soldto_data: any;\r\n search_parameters: InvoiceSearchParameters;\r\n };\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n);\r\nexport const getStatementQueryforPDFandCSVandexcel = createSelector(\r\n [\r\n getAccountType,\r\n getSelectedPrimaryAccount,\r\n getSelectedSecondaryAccount,\r\n getInvoiceSearchFromDate,\r\n getInvoiceSearchToDate,\r\n getInvoiceSearchStatus,\r\n getInvoiceSearchDueDateFrom,\r\n getInvoiceSearchDueDateTo,\r\n getInvoiceSearchFilter,\r\n getImpersonatedUserId,\r\n getCurrency,\r\n ],\r\n (\r\n accountType,\r\n primaryAccount,\r\n secondaryAccount,\r\n fromDate,\r\n toDate,\r\n status,\r\n // dueDateFrom,\r\n //dueDateTo,\r\n //filter,\r\n impersonatedUserId,\r\n currency\r\n ) => {\r\n try {\r\n let { payer_data, soldto_data } = getPayerSoldToForInvoiceQuery(\r\n accountType,\r\n secondaryAccount,\r\n primaryAccount\r\n );\r\n return {\r\n payer_data,\r\n soldto_data,\r\n search_parameters: {\r\n document_type: \"01\",\r\n status: status,\r\n date_from:\r\n fromDate === \"\" ? appConstants.INV_LIST_REQ_BEGIN_DATE : fromDate,\r\n date_to:\r\n toDate === \"\" ? moment(new Date()).format(\"MM-DD-YYYY\") : toDate,\r\n //due_date_from: dueDateFrom,\r\n //due_date_to: dueDateTo,\r\n //currency_key: currency,\r\n //filter: getDefaultFilters(accountType, impersonatedUserId).concat(filter),\r\n },\r\n } as {\r\n payer_data: any;\r\n soldto_data: any;\r\n search_parameters: InvoiceSearchParameters;\r\n };\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n);\r\n\r\nexport const getDepositReasonCodes = createSelector(\r\n [getCnbsConfig, getPayerAccount],\r\n (config, payerAccount) => {\r\n const payerCompanyCode =\r\n payerAccount && payerAccount.CompanyCode ? payerAccount.CompanyCode : \"\";\r\n if (config && config.payment_reason_codes) {\r\n return (config?.payment_reason_codes ?? [])\r\n .filter(\r\n (obj) =>\r\n obj.company_code === payerCompanyCode && obj.payment_type === \"D\"\r\n )\r\n .map((code) => {\r\n return {\r\n value: code.reason_code,\r\n label: code.description,\r\n commentsRequired: code.comments_required,\r\n clearableValue: false,\r\n };\r\n });\r\n }\r\n return [];\r\n }\r\n);\r\n\r\nexport const getPayerAccounts = createSelector(\r\n [getPrimaryAccounts, getSecondaryAccounts, getAccountType],\r\n (primaryAccounts, secondaryAccounts, accountType) => {\r\n if (accountType === AccountType.SoldTo) {\r\n return secondaryAccounts;\r\n } else {\r\n return primaryAccounts;\r\n }\r\n }\r\n);\r\n\r\nexport const hasDeposits = createSelector([getCnbsConfig], (config) => {\r\n try {\r\n return (\r\n typeof config &&\r\n config.payment_types &&\r\n config.payment_types.find((t) => t.payment_type === \"D\") !==\r\n \"undefined\" &&\r\n config.payment_types.find((t) => t.payment_type === \"D\").active === \"X\"\r\n );\r\n } catch (e) {\r\n return false;\r\n }\r\n});\r\n\r\nexport const getCurrentAccount = createSelector(\r\n [getSelectedPrimaryAccount, getSelectedSecondaryAccount, getAccountType],\r\n (primary, secondary, accountType) => {\r\n let request;\r\n if (accountType === AccountType.SoldTo) {\r\n // Use Secondary Account\r\n request = {\r\n company_code: primary && primary.company_code,\r\n\r\n sales_organization: secondary && secondary.sales_organization,\r\n distribution_channel: secondary && secondary.distribution_channel,\r\n division: secondary && secondary.division,\r\n };\r\n } else {\r\n // Use Primary Account\r\n request = {\r\n company_code: primary && primary.company_code,\r\n sales_organization: primary && primary.sales_organization,\r\n distribution_channel: primary && primary.distribution_channel,\r\n division: primary && primary.division,\r\n };\r\n }\r\n return request;\r\n }\r\n);\r\n","import { Dispatch, useEffect, useRef, useState } from \"react\";\r\nimport { connect, useDispatch } from \"react-redux\";\r\nimport {\r\n getCurrentAccount,\r\n getSelectedPrimaryAccount,\r\n getSelectedSecondaryAccount,\r\n} from \"../../selectors/Selectors\";\r\nimport {\r\n getPayerDetailsBuilder,\r\n setPaymentMethods,\r\n updatePrimaryAccount,\r\n updateSecondaryAccount,\r\n} from \"../../actions/InvoiceActions\";\r\nimport { getPaymentMethods } from \"../../requests/InvoiceRequests\";\r\nimport * as React from \"react\";\r\nimport { AccountType } from \"../../interfaces/Accounts\";\r\nimport { getAndClearSessionStorage } from \"../../utils\";\r\nimport {\r\n SELECTED_PRIMARY_INDEX_KEY,\r\n SELECTED_SECONDARY_INDEX_KEY,\r\n} from \"../../reducers/UserOptionsReducer\";\r\n\r\nexport const PayerDetailsContext = React.createContext([]);\r\n\r\nexport function reestablishSelectedValues(dispatch: Dispatch) {\r\n const primaryAccount = getAndClearSessionStorage(SELECTED_PRIMARY_INDEX_KEY);\r\n if (primaryAccount !== null && primaryAccount !== \"\") {\r\n dispatch(updatePrimaryAccount(primaryAccount, false));\r\n }\r\n const secondaryAccount = getAndClearSessionStorage(\r\n SELECTED_SECONDARY_INDEX_KEY\r\n );\r\n\r\n if (secondaryAccount !== null) {\r\n dispatch(updateSecondaryAccount(secondaryAccount));\r\n }\r\n}\r\n\r\nfunction PayerDetailsDataManager(props) {\r\n const selectedPayer =\r\n props.accountType === AccountType.PayerAll || AccountType.Payer\r\n ? props.selectedSecondaryAccount\r\n : props.selectedPrimaryAccount;\r\n const prevPayer = useRef(\"\");\r\n const [isReady, setIsReady] = useState(false);\r\n const dispatch = useDispatch();\r\n // This will change to be the \"loader\"\r\n // getuseraccounts\r\n\r\n useEffect(() => {\r\n // token/getuseraccounts\r\n // customer/getuserpayers\r\n // customer/payer\r\n // payment-methods\r\n (async function () {\r\n if (\r\n props.selectedPrimaryAccount !== null &&\r\n selectedPayer?.PrimaryAcct != prevPayer.current\r\n ) {\r\n prevPayer.current = selectedPayer?.PrimaryAcct;\r\n await dispatch(\r\n getPayerDetailsBuilder(\r\n props.selectedPrimaryAccount,\r\n props.selectedSecondaryAccount,\r\n props.accountType\r\n )\r\n );\r\n await getPaymentMethods(props.currentAccount).then(\r\n async (paymentMethods) => {\r\n await dispatch(setPaymentMethods(paymentMethods));\r\n }\r\n );\r\n }\r\n setIsReady(true);\r\n })();\r\n }, [\r\n props.selectedSecondaryAccount,\r\n props.selectedPrimaryAccount,\r\n props.accountType,\r\n props.currentAccount,\r\n ]);\r\n\r\n // TODO wait till done loading data before rendering...\r\n return (\r\n \r\n {isReady && props.render}\r\n \r\n );\r\n}\r\n\r\nexport default connect((state, props) => {\r\n return {\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(state),\r\n selectedSecondaryAccount: getSelectedSecondaryAccount(state),\r\n accountType: state.user_options.accountType,\r\n currentAccount: getCurrentAccount(state),\r\n };\r\n}, {})(PayerDetailsDataManager);\r\n","import axios from '../axios';\r\n\r\nexport function getSoldToNames(soldToNumbersList) {\r\n return axios.put(`/api/customer/soldto-details-list`, soldToNumbersList).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function getPaymentMethods(details) {\r\n return axios.get(`/api/payment-methods`, {params: details}).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n","import axios from '../axios';\r\nimport {EmailConfig} from \"../interfaces/EmailConfig\";\r\nimport {get} from \"../fetch\";\r\n\r\nexport function getAppConfiguration() {\r\n return axios.get(`/api/config`).then((response) => response.data);\r\n}\r\n\r\nexport function getConfiguration() {\r\n return axios.get(`/api/configuration`).then((response) => response.data);\r\n}\r\n\r\nexport function getMaximumPaymentAllowed() {\r\n return axios.get(`/api/configuration/maxPaymentAllowed`).then((response) => response.data && parseFloat(response.data));\r\n}\r\n\r\nexport function getECheckMaximumPaymentAllowed() {\r\n return axios.get(`/api/configuration/maxECheckPaymentAllowed`).then((response) => response.data && parseFloat(response.data));\r\n}\r\n\r\n\r\nexport function getisPaymentDisable() {\r\n return axios.get(`/api/configuration/isPaymentDisabled`).then((response) => response.data);\r\n}\r\n\r\nexport function getPaymentDisabledTranslations() {\r\n return axios.get(`/api/configuration/paymentDisabledMessages`).then((response) => response.data);\r\n}\r\n\r\nexport function updateConfiguration(config) {\r\n return axios.put(`/api/configuration`, config).then((response) => response.data);\r\n}\r\n\r\nexport function updateApplicationConfiguration(config, language: string) {\r\n return axios.put(`/api/configuration/Application/${language}`, config).then((response) => response.data);\r\n}\r\n\r\nexport function uploadImage(file) {\r\n const config = { headers: { 'Content-Type': 'multipart/form-data' } };\r\n return axios.post(`/api/configuration/upload`, file, config).then((response) => response.data);\r\n}\r\n\r\nexport function smtpTest(smtpConfig) {\r\n return axios.post(`/api/configuration/smtp-test`, smtpConfig).then((response) => response.data);\r\n}\r\n\r\nexport function getEmailConfig(key: string) {\r\n return get(`/api/configuration/email/${key}`);\r\n}\r\n\r\nexport function updateEmailConfig(key: string, config: EmailConfig) {\r\n return axios.put(`/api/configuration/email/${key}`, config).then((response) => response.data);\r\n}\r\n\r\n\r\nfunction twoDigits(text) {\r\n if ( text.toString().length === 1 )\r\n text = \"0\" + text;\r\n return text;\r\n}\r\n\r\nfunction DateUTCtoLocalText(utcText) {\r\n\r\n if ( utcText === null || utcText === undefined )\r\n return null;\r\n\r\n let utc = new Date(utcText + \"Z\");\r\n\r\n let localText =\r\n utc.getFullYear() + \"-\" +\r\n twoDigits((utc.getMonth()+1)) + \"-\" +\r\n twoDigits(utc.getDate()) + \"T\" + \r\n twoDigits(utc.getHours()) + \":\" +\r\n twoDigits(utc.getMinutes()) + \":\" +\r\n twoDigits(utc.getSeconds());\r\n\r\n return localText;\r\n}\r\n\r\nfunction DateLocalToUtcText(localText) {\r\n\r\n if ( localText === null || localText === undefined )\r\n return null;\r\n\r\n let local = new Date(localText);\r\n\r\n let utcText =\r\n twoDigits(local.getUTCFullYear()) + \"-\" +\r\n twoDigits((local.getUTCMonth()+1)) + \"-\" +\r\n twoDigits(local.getUTCDate()) + \"T\" + \r\n twoDigits(local.getUTCHours()) + \":\" +\r\n twoDigits(local.getUTCMinutes()) + \":\" +\r\n twoDigits(local.getUTCSeconds());\r\n\r\n return utcText;\r\n}\r\n\r\n//{\r\n// \"isEnabled\": false,\r\n// \"fromUtcDate\": \"2020-01-01T00:00:00\",\r\n// \"toUtcDate\": \"2031-01-01T00:00:00\",\r\n// \"redirectUrl\": \"https://www.google.com\",\r\n// \"messages\": [\r\n// {\r\n// \"language\": \"en\",\r\n// \"message\": \"Enn\"\r\n// }\r\n// ]\r\n//}\r\nexport async function getBlackoutConfig() {\r\n try {\r\n const response = await axios.get(`/api/configuration/blackout`);\r\n\r\n if ( response.status === 200 ) {\r\n let config = response.data;\r\n\r\n config.fromDateLocal = DateUTCtoLocalText(config.fromUtcDate);\r\n config.toDateLocal = DateUTCtoLocalText(config.toUtcDate);\r\n\r\n return config;\r\n }\r\n } catch ( e ) {\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport async function getIsBlackoutActive() {\r\n try {\r\n const response = await axios.get(`/api/configuration/isBlackoutActive`);\r\n\r\n if ( response.status === 200 ) {\r\n return response.data; // true or false\r\n }\r\n } catch ( e ) {\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function updateBlackoutConfig(config) {\r\n\r\n config.fromUtcDate = DateLocalToUtcText(config.fromDateLocal);\r\n config.toUtcDate = DateLocalToUtcText(config.toDateLocal);\r\n\r\n return axios.put(`/api/configuration/blackout`, config);\r\n}\r\n\r\nexport function getAllowRegistration(key:string) {\r\n return axios.get(`/api/configuration/getallowregistration/${key}`).then((response) => response.data);\r\n}\r\nexport function getFooterLinks() {\r\n return axios.get(`/api/configuration/getfooterlinks`).then((response) => response.data);\r\n}","/* eslint-env browser */\r\n/* eslint-disable no-console */\r\nimport axios from \"../axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport * as validationTypes from \"../constants/ValidationConstants\";\r\nimport * as apiTypes from \"../constants/ApiConstants\";\r\nimport * as types from \"../constants/ActionTypes\";\r\nimport * as appConstants from \"../constants/ApplicationConstants\";\r\nimport { updateState, requestErrored, loginFailed } from \"./CommonActions\";\r\nimport { setSelectedSoldTos } from \"./InvoiceActions\";\r\nimport { ReduxAction } from \"../interfaces/utils\";\r\nimport { ThunkAction, ThunkDispatch } from \"redux-thunk\";\r\nimport { AnyAction } from \"redux\";\r\nimport { AuthStatus } from \"../interfaces/AuthStatus\";\r\nimport { setToken } from \"../fetch\";\r\nimport { reestablishSelectedValues } from \"../components/invoice/PayerDetailsDataManager\";\r\nimport { clearSessionStorage } from \"../reducers/RootReducer\";\r\nimport { getPaymentDisabledTranslations } from \"../requests/ConfigRequests\";\r\nimport { setMessageForPaymentDisable } from \"../actions/CommonActions\";\r\nimport { useState } from \"react\";\r\n\r\nexport function setBlackoutConfig(blackoutConfig): ReduxAction {\r\n return {\r\n type: types.SET_BLACKOUT_CONFIG,\r\n payload: blackoutConfig,\r\n };\r\n}\r\n\r\nexport function setIsBlackoutActive(isBlackoutActive): ReduxAction {\r\n return {\r\n type: types.SET_IS_BLACKOUT_ACTIVE,\r\n payload: isBlackoutActive,\r\n };\r\n}\r\n\r\nexport function setAuthStatus(status: AuthStatus): ReduxAction {\r\n return {\r\n type: types.SET_AUTH_STATUS,\r\n payload: status,\r\n };\r\n}\r\n\r\nexport function setLastUrl(url): ReduxAction {\r\n return {\r\n type: types.SET_LAST_URL,\r\n payload: url,\r\n };\r\n}\r\n\r\nexport function setLanguage(language): ReduxAction {\r\n return {\r\n type: types.SET_LANGUAGE,\r\n payload: language,\r\n };\r\n}\r\n\r\nexport function login(email: string, password: string) {\r\n return (dispatch) => {\r\n const loginRequest = { login: email, password: password };\r\n return axios\r\n .post(apiTypes.LOGIN_URL, loginRequest)\r\n .then((response) => {\r\n if (response.status === 200) {\r\n //store token in session storage.\r\n clearSessionStorage();\r\n setToken(response.data.token, response.data.refreshToken);\r\n dispatch(setAuthStatus(AuthStatus.Authenticated));\r\n getPaymentDisabledTranslations().then((value) => {\r\n setMessageForPaymentDisable(value);\r\n });\r\n } else {\r\n toast.error(validationTypes.CREDENTIALS_INVALID, {\r\n position: toast.POSITION.TOP_RIGHT,\r\n });\r\n dispatch(setAuthStatus(AuthStatus.Failed));\r\n }\r\n })\r\n .catch((error) => {\r\n // requestErrored(dispatch, error, validationTypes.AUTHENTICATION_ERROR);\r\n if (error && error.response && error.response.status === 401) {\r\n loginFailed(dispatch, error);\r\n } else {\r\n requestErrored(dispatch, error, validationTypes.AUTHENTICATION_ERROR);\r\n throw error.response.statusText;\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport function loginSSO(token: string) {\r\n return (dispatch) => {\r\n return axios\r\n .get(`${apiTypes.LOGIN_SSO_URL}token=${token}`)\r\n .then((response) => {\r\n if (response.status === 200) {\r\n //store token in session storage.\r\n clearSessionStorage();\r\n setToken(response.data.token, response.data.refreshToken);\r\n dispatch(setAuthStatus(AuthStatus.Authenticated));\r\n getPaymentDisabledTranslations().then((value) => {\r\n setMessageForPaymentDisable(value);\r\n });\r\n } else {\r\n toast.error(validationTypes.CREDENTIALS_INVALID, {\r\n position: toast.POSITION.TOP_RIGHT,\r\n });\r\n dispatch(setAuthStatus(AuthStatus.Failed));\r\n }\r\n })\r\n .catch((error) => {\r\n // requestErrored(dispatch, error, validationTypes.AUTHENTICATION_ERROR);\r\n if (error && error.response && error.response.status === 401) {\r\n loginFailed(dispatch, error);\r\n } else {\r\n requestErrored(dispatch, error, validationTypes.AUTHENTICATION_ERROR);\r\n throw error.response.statusText;\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport function refreshToken() {\r\n return (dispatch) => {\r\n let token = sessionStorage.getItem(\"refreshToken\");\r\n const requestBody = { refreshToken: token };\r\n axios\r\n .post(apiTypes.REFRESH_TOKEN_URL, requestBody, {}, false)\r\n .then((response) => {\r\n if (response.status === 200) {\r\n //store token in session storage.\r\n setToken(response.data.token, response.data.refreshToken);\r\n }\r\n })\r\n .catch((error) => {\r\n // requestErrored(dispatch, error, validationTypes.AUTHENTICATION_ERROR);\r\n if (error && error.response && error.response.status === 401) {\r\n loginFailed(dispatch, error);\r\n } else {\r\n requestErrored(dispatch, error, validationTypes.AUTHENTICATION_ERROR);\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport function getUser() {\r\n return (dispatch) => {\r\n const finalGetUser = `${apiTypes.GET_USER_URL}`;\r\n return axios\r\n .post(finalGetUser, \"\")\r\n .then((userData) => {\r\n if (userData.status === 200 && userData.data) {\r\n if (userData.data && userData.data) {\r\n updateState(dispatch, types.GET_USER_SUCCESS, userData.data);\r\n updateState(\r\n dispatch,\r\n types.SET_ACCOUNT_TYPE,\r\n userData.data.primary_account_type_id\r\n );\r\n }\r\n return userData.data;\r\n } else {\r\n return null;\r\n }\r\n })\r\n .catch((err) => {\r\n if (err && err.response && err.response.status === 401) {\r\n requestErrored(dispatch, err, validationTypes.CREDENTIALS_INVALID);\r\n } else {\r\n requestErrored(dispatch, err, validationTypes.GET_USER_ERROR);\r\n }\r\n });\r\n };\r\n}\r\n\r\n/**\r\n * Dispatches HTTP request to get users Accounts. These accounts show up on the header of the application.\r\n * @param dispatch\r\n * @param userId\r\n * @param clearSecondary\r\n */\r\nexport function getUserCustomers(userId: string, clearSecondary: boolean) {\r\n return (dispatch) => {\r\n let finalGetUserPayerUrl = `${apiTypes.USER_HEADER_ACCOUNTS}`;\r\n if (userId) {\r\n finalGetUserPayerUrl = `${finalGetUserPayerUrl}${\"userid=\"}${userId}`;\r\n }\r\n return axios\r\n .post(finalGetUserPayerUrl, {})\r\n .then((userData) => {\r\n if (\r\n userData.status === 200 &&\r\n userData.data &&\r\n userData.data.HeaderItems\r\n ) {\r\n updateState(dispatch, types.GET_PRIMARY_ACCOUNTS_SUCCESS, {\r\n accounts: userData.data.HeaderItems,\r\n clearSecondary,\r\n });\r\n if (clearSecondary) {\r\n dispatch(\r\n setSelectedSoldTos(\r\n userData.data.HeaderItems[0]?.DropDownItems?.map(\r\n (account) => account.PrimaryAcct\r\n ) ?? []\r\n )\r\n );\r\n }\r\n if (typeof userId !== \"undefined\") {\r\n updateState(dispatch, types.UPDATE_IMPERSONATE_USER_ID, userId);\r\n }\r\n reestablishSelectedValues(dispatch);\r\n }\r\n })\r\n .catch((err) => {\r\n if (err && err.response && err.response.status === 401) {\r\n requestErrored(dispatch, err, validationTypes.CREDENTIALS_INVALID);\r\n } else if (err.response === undefined) {\r\n toast.error(\"There was an error registering your account. Please contact customer service.\", { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n else {\r\n requestErrored(dispatch, err, validationTypes.GET_USER_PAYER_ERROR);\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport function Logout(): ThunkAction, {}, {}, AnyAction> {\r\n return (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n return axios\r\n .post(apiTypes.LOGOUT_URL, {})\r\n .then((response) => {\r\n dispatch({ type: types.LOGOUT });\r\n })\r\n .catch((error) => {\r\n requestErrored(dispatch, error, validationTypes.AUTHENTICATION_ERROR);\r\n });\r\n };\r\n}\r\n\r\nexport function ResetPassword(\r\n currentPassword: string,\r\n newPassword: string,\r\n confirmNewPassword: string\r\n) {\r\n return (dispatch) => {\r\n const resetPasswordRequest = {\r\n CurrentPassword: currentPassword,\r\n NewPassword: newPassword,\r\n ConfirmNewPassword: confirmNewPassword,\r\n };\r\n axios\r\n .post(apiTypes.RESET_PASSWORD, resetPasswordRequest)\r\n .then((userData) => {\r\n if (\r\n userData.status === 200 &&\r\n userData.data.message === appConstants.SUCCESS\r\n ) {\r\n toast.success(validationTypes.RESET_PASSWORD_SUCCESS, {\r\n position: toast.POSITION.TOP_RIGHT,\r\n });\r\n updateState(\r\n dispatch,\r\n types.UPDATE_PASSWORD_RESPONSE,\r\n userData.data.message\r\n );\r\n } else {\r\n toast.warn(userData.data.message, {\r\n position: toast.POSITION.TOP_RIGHT,\r\n });\r\n updateState(\r\n dispatch,\r\n types.UPDATE_PASSWORD_RESPONSE,\r\n userData.data.message\r\n );\r\n }\r\n })\r\n .catch((err) => {\r\n if (err && err.response && err.response.status === 401) {\r\n requestErrored(dispatch, err, validationTypes.CREDENTIALS_INVALID);\r\n } else {\r\n requestErrored(dispatch, err, validationTypes.RESET_PASSWORD_ERROR);\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport function setAccountType(accountType): ReduxAction {\r\n return {\r\n type: types.SET_ACCOUNT_TYPE,\r\n payload: accountType,\r\n };\r\n}\r\n\r\nexport function setFooterLinks(footerLinks): ReduxAction {\r\n return {\r\n type: types.SET_FOOTER_LINKS,\r\n payload: footerLinks,\r\n };\r\n}\r\n","import axios from 'axios';\r\nimport store from './store';\r\nimport {loadingDecrement, loadingIncrement} from \"./actions/CommonActions\";\r\nimport {setAuthStatus} from \"./actions/UserActions\";\r\nimport {AuthStatus} from \"./interfaces/AuthStatus\";\r\n\r\nconst instance = axios.create({});\r\nlet token = sessionStorage.getItem('token');\r\ninstance.defaults.headers.common['Authorization'] = `Bearer ${token}`;\r\n\r\nfunction handleErrors(e, useLoader = true) {\r\n if (e.response.status === 401) {\r\n if (e.response.data && e.response.data.reason === 'not_logged_in') {\r\n store.dispatch(setAuthStatus(AuthStatus.Unauthenticated));\r\n }\r\n }\r\n if(useLoader){\r\n loadingDecrement(store.dispatch);\r\n }\r\n}\r\n\r\nclass EpayAxios {\r\n constructor(public instance: any) {\r\n\r\n }\r\n\r\n get(url, config: any = {}) {\r\n loadingIncrement(store.dispatch);\r\n return axios.get(url, config).then(response => {\r\n loadingDecrement(store.dispatch);\r\n return response;\r\n }).catch((e) => {\r\n handleErrors(e);\r\n throw e;\r\n });\r\n }\r\n\r\n post(url, data, config: any = {}, useLoader=true) {\r\n if(useLoader){\r\n loadingIncrement(store.dispatch);\r\n }\r\n return axios.post(url, data, config).then(response => {\r\n if(useLoader){\r\n loadingDecrement(store.dispatch);\r\n }\r\n return response;\r\n }).catch((e) => {\r\n handleErrors(e, useLoader);\r\n throw e;\r\n });\r\n }\r\n\r\n put(url, data) {\r\n loadingIncrement(store.dispatch);\r\n return axios.put(url, data).then(response => {\r\n loadingDecrement(store.dispatch);\r\n return response;\r\n }).catch((e) => {\r\n handleErrors(e);\r\n throw e;\r\n });\r\n }\r\n\r\n delete(url, config: any = {}) {\r\n loadingIncrement(store.dispatch);\r\n return axios.delete(url, config).then(response => {\r\n loadingDecrement(store.dispatch);\r\n return response;\r\n }).catch((e) => {\r\n handleErrors(e);\r\n throw e;\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default new EpayAxios(instance);\r\n","/**\r\n * This state/reducer focuses on modes that the user can change such as the soldto/payers.\r\n */\r\nimport * as types from '../constants/ActionTypes';\r\nimport {AuthStatus} from \"../interfaces/AuthStatus\";\r\nimport axios from \"../axios\";\r\n\r\nlet browserLanguage = window.navigator.language.slice(0, 2);\r\nlet country = window.navigator.language.slice(3,5).toLowerCase();\r\n\r\nlet urlParams = new URLSearchParams(window.location.search);\r\nif(urlParams.has(\"lang\")){\r\n let _lang = urlParams.get(\"lang\") ?? \"en\";\r\n browserLanguage = _lang.slice(0,2);\r\n country = _lang.slice(3,5);\r\n if(country == \"\"){\r\n country = \"us\"; // set country to international\r\n }\r\n}\r\n\r\naxios.instance.defaults.headers.common['Accept-Language'] = browserLanguage;\r\naxios.instance.defaults.headers.common['X-Country'] = country;\r\n\r\nconst initialState = {\r\n authStatus: AuthStatus.Waiting,\r\n loginCount: 0,\r\n lastUrl: '/invoices',\r\n language: browserLanguage,\r\n country: country,\r\n isBlackoutActive: false,\r\n blackoutConfig: null,\r\n footerLinks: {},\r\n};\r\n\r\nexport interface UserState{\r\n \r\n}\r\n\r\nexport function userReducer(state = initialState, action): UserState {\r\n switch (action.type) {\r\n case types.SET_BLACKOUT_CONFIG:\r\n return {...state, blackoutConfig: action.payload};\r\n case types.SET_IS_BLACKOUT_ACTIVE:\r\n return {...state, isBlackoutActive: action.payload};\r\n case types.SET_AUTH_STATUS:\r\n return {...state, authStatus: action.payload};\r\n case types.LOGOUT:\r\n return {...state, authStatus: AuthStatus.LoggedOut};\r\n case types.SET_LAST_URL:\r\n return {...state, lastUrl: action.payload};\r\n case types.SET_LANGUAGE:\r\n axios.instance.defaults.headers.common['Accept-Language'] = action.payload;\r\n return { ...state, language: action.payload };\r\n case types.SET_FOOTER_LINKS:\r\n return { ...state, footerLinks: action.payload };\r\n default:\r\n return {...state};\r\n }\r\n}\r\n","export const SET_EDITING_PAYMENT = 'SET_EDITING_PAYMENT';\r\nexport const ADD_SESSION_CARD = 'ADD_SESSION_CARD';\r\nexport const UPDATE_SESSION_CARD = 'UPDATE_SESSION_CARD';\r\nexport const DELETE_SESSION_CARD = 'DELETE_SESSION_CARD';\r\nexport const ADD_SESSION_CHECK = 'ADD_SESSION_CHECK';\r\nexport const UPDATE_SESSION_CHECK = 'UPDATE_SESSION_CHECK';\r\nexport const DELETE_SESSION_CHECK = 'DELETE_SESSION_CHECK';\r\nexport const CLEAR_SESSION_PAYMENT_METHODS = 'CLEAR_SESSION_PAYMENT_METHODS';\r\n\r\nexport const CACHE_SESSION_CARDS = \"CACHE_SESSION_CARDS\";\r\nexport const CACHE_SESSION_CHECKS = \"CACHE_SESSION_CHECKS\";\r\n\r\nexport function addSessionCard(payment, payer,log) {\r\n return {\r\n type: ADD_SESSION_CARD,\r\n payload: {\r\n payment,\r\n payer,\r\n log\r\n }\r\n }\r\n}\r\n\r\nexport function updateSessionCard(payment, payer,log) {\r\n return {\r\n type: UPDATE_SESSION_CARD,\r\n payload: {\r\n payment,\r\n payer,\r\n log\r\n }\r\n }\r\n}\r\n\r\nexport function deleteSessionCard(payment, payer,log) {\r\n return {\r\n type: DELETE_SESSION_CARD,\r\n payload: {\r\n payment,\r\n payer,\r\n log\r\n }\r\n }\r\n}\r\n\r\nexport function addSessionCheck(payment, payer,log) {\r\n return {\r\n type: ADD_SESSION_CHECK,\r\n payload: {\r\n payment,\r\n payer,\r\n log\r\n }\r\n }\r\n}\r\n\r\nexport function updateSessionCheck(payment, payer,log) {\r\n return {\r\n type: UPDATE_SESSION_CHECK,\r\n payload: {\r\n payment,\r\n payer,\r\n log\r\n }\r\n }\r\n}\r\n\r\nexport function deleteSessionCheck(payment, payer,log) {\r\n return {\r\n type: DELETE_SESSION_CHECK,\r\n payload: {\r\n payment,\r\n payer,\r\n log\r\n }\r\n }\r\n}\r\n\r\nexport function clearSessionPaymentMethods() {\r\n return {\r\n type: CLEAR_SESSION_PAYMENT_METHODS,\r\n }\r\n}\r\n\r\nexport interface PaymentState {\r\n editingPayment: any;\r\n sessionCards: any;\r\n sessionChecks: any;\r\n\r\n}\r\n\r\nconst initialState: PaymentState = {\r\n editingPayment: null, // payment details of the payment method being edited.\r\n sessionCards: JSON.parse(sessionStorage.getItem(CACHE_SESSION_CARDS) ?? \"{}\"),\r\n sessionChecks: JSON.parse(sessionStorage.getItem(CACHE_SESSION_CHECKS) ?? \"{}\"),\r\n};\r\n\r\n\r\nexport function paymentReducer(state = initialState, action): PaymentState {\r\n switch (action.type) {\r\n case SET_EDITING_PAYMENT:\r\n return {...state, editingPayment: action.payload};\r\n\r\n case ADD_SESSION_CARD: {\r\n let all = {...state.sessionCards};\r\n let cards = {...state.sessionCards[action.payload.payer]};\r\n cards[action.payload.payment.payment_card_token] = action.payload.payment;\r\n all[action.payload.payer] = cards;\r\n sessionStorage.setItem(CACHE_SESSION_CARDS, JSON.stringify(all));\r\n return {...state, sessionCards: all};\r\n }\r\n\r\n case UPDATE_SESSION_CARD: {\r\n let all = {...state.sessionCards};\r\n let cards = {...state.sessionCards[action.payload.payer]};\r\n cards[action.payload.payment.payment_card_token] = {...action.payload.payment};\r\n all[action.payload.payer] = cards;\r\n sessionStorage.setItem(CACHE_SESSION_CARDS, JSON.stringify(all));\r\n return {...state, sessionCards: all};\r\n }\r\n\r\n case DELETE_SESSION_CARD: {\r\n let all = {...state.sessionCards};\r\n let cards = {...state.sessionCards[action.payload.payer]};\r\n if (typeof cards[action.payload.payment.payment_card_token] !== 'undefined') {\r\n delete cards[action.payload.payment.payment_card_token];\r\n }\r\n all[action.payload.payer] = cards;\r\n sessionStorage.setItem(CACHE_SESSION_CARDS, JSON.stringify(all));\r\n return {...state, sessionCards: all};\r\n }\r\n case ADD_SESSION_CHECK: {\r\n let all = {...state.sessionChecks};\r\n let checks = {...state.sessionChecks[action.payload.payer]};\r\n checks[action.payload.payment.payment_card_token] = action.payload.payment;\r\n all[action.payload.payer] = checks;\r\n sessionStorage.setItem(CACHE_SESSION_CHECKS, JSON.stringify(all));\r\n return {...state, sessionChecks: all};\r\n }\r\n case UPDATE_SESSION_CHECK: {\r\n let all = {...state.sessionChecks};\r\n let checks = {...state.sessionChecks[action.payload.payer]};\r\n checks[action.payload.payment.payment_card_token] = {...action.payload.payment};\r\n all[action.payload.payer] = checks;\r\n sessionStorage.setItem(CACHE_SESSION_CHECKS, JSON.stringify(all));\r\n return {...state, sessionChecks: all};\r\n }\r\n case DELETE_SESSION_CHECK: {\r\n let all = {...state.sessionChecks};\r\n let checks = {...state.sessionChecks[action.payload.payer]};\r\n if (typeof checks[action.payload.payment.payment_card_token] !== 'undefined') {\r\n delete checks[action.payload.payment.payment_card_token];\r\n }\r\n all[action.payload.payer] = checks;\r\n sessionStorage.setItem(CACHE_SESSION_CHECKS, JSON.stringify(all));\r\n return {...state, sessionChecks: all};\r\n }\r\n case CLEAR_SESSION_PAYMENT_METHODS: {\r\n return {...state, sessionChecks: {}, sessionCards: {}};\r\n }\r\n default: {\r\n return {...state};\r\n }\r\n }\r\n}\r\n","import * as types from '../constants/ActionTypes';\r\nexport const initialState = {\r\n statements: [],\r\n statementId: \"\",\r\n selectMonthStatement: \"\"\r\n};\r\nexport interface StatementsState {\r\n}\r\nexport function statementsReducer(state = initialState, action): StatementsState {\r\n switch (action.type) {\r\n case types.GET_STATEMENTS_LIST:\r\n return { ...state, statements: action.payload };\r\n case types.SET_SELECT_MONTH:\r\n\r\n return { ...state, selectMonthStatement: action.payload };\r\n case types.GET_SELECT_MONTH:\r\n\r\n return { ...state, selectMonthStatement: action.payload };\r\n\r\n default:\r\n return { ...state };\r\n }\r\n}","import * as types from '../constants/ActionTypes';\r\nimport {combineReducers} from \"redux\";\r\nimport {defaultInvoiceInitialState, invoiceReducer} from \"./InvoiceReducer\";\r\nimport defaultReducer, {DefaultState} from \"./CnbsReducer\";\r\nimport {appReducer, AppState} from \"./AppReducer\";\r\nimport {userOptionsReducer} from \"./UserOptionsReducer\";\r\nimport {userReducer} from \"./UserReducer\";\r\nimport { paymentReducer } from \"./PaymentReducer\";\r\nimport { statementsReducer } from \"./StatementReducer\";\r\nimport {isStringNotEmptyOrNull} from \"../utils\";\r\nimport {Clear} from \"@material-ui/icons\";\r\nimport {Session} from \"inspector\";\r\n\r\nexport interface RootState {\r\n app: AppState;\r\n default: DefaultState;\r\n invoice: any;\r\n user_options: any;\r\n user: any;\r\n payment: any;\r\n statements: any;\r\n}\r\n\r\nconst _rootReducer = combineReducers({\r\n app: appReducer,\r\n default: defaultReducer,\r\n invoice: invoiceReducer,\r\n user_options: userOptionsReducer,\r\n user: userReducer,\r\n payment: paymentReducer,\r\n statements: statementsReducer\r\n});\r\n\r\nexport function clearSessionStorage() {\r\n sessionStorage.clear();\r\n}\r\n\r\nexport const rootReducer = (state, action) => {\r\n if (action.type === types.LOGOUT) {\r\n clearSessionStorage();\r\n if (isStringNotEmptyOrNull(state?.default?.currentUser?.third_party_id)) {\r\n window.location.href = process.env.REACT_APP_SSO_REDIRECT_URL as string;\r\n return;\r\n }\r\n state = {\r\n user: {\r\n loginChecked: true,\r\n lastUrl: state.user.lastUrl,\r\n loginCount: state.user.loginCount++,\r\n language: state.user.language,\r\n },\r\n app: state.app,\r\n invoice: defaultInvoiceInitialState,\r\n };\r\n \r\n }\r\n\r\n return _rootReducer(state, action);\r\n};\r\n","import {applyMiddleware, createStore, compose} from 'redux';\r\nimport {rootReducer} from './reducers/RootReducer';\r\nimport thunk from 'redux-thunk';\r\nimport {composeWithDevTools} from 'redux-devtools-extension/developmentOnly';\r\n\r\nexport default createStore(\r\n rootReducer as any,\r\n composeWithDevTools(\r\n applyMiddleware(thunk) as any,\r\n )\r\n);\r\n","import React, {Component} from 'react';\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {connect} from 'react-redux';\r\n\r\nconst validRedirects = [\r\n \"settings-page/registration-requests\",\r\n];\r\n\r\nfunction isValidRedirect(lastUrl){\r\n for(let i = 0; i < validRedirects.length; i++){\r\n if(lastUrl.indexOf(validRedirects[i]) !== -1){\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nclass LoginRedirectHandler extends Component {\r\n \r\n componentDidMount() {\r\n if(isValidRedirect(this.props.lastUrl)){\r\n this.props.history.push(this.props.lastUrl);\r\n } else {\r\n this.props.history.push(\"/invoices\");\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(connect((store, props) => ({\r\n lastUrl: store.user.lastUrl,\r\n}))(LoginRedirectHandler));\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {RootState} from \"../../reducers/RootReducer\";\r\nimport {setLanguage} from \"../../actions/UserActions\";\r\nimport { setMessageForPaymentDisable } from \"../../actions/CommonActions\";\r\n\r\n\r\nfunction LanguageSelectorInternal(props) {\r\n function handleClick(e) {\r\n e.preventDefault();\r\n props.setLanguage(e.target.value);\r\n sessionStorage.setItem(\"Language\", e.target.value.toString());\r\n }\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport const LanguageSelector = connect((state: RootState, props) => ({\r\n language: state.user.language,\r\n}), {\r\n setLanguage, \r\n})(LanguageSelectorInternal);\r\n","import {useIntl} from \"react-intl\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {Invoice} from \"../interfaces/invoice\";\r\nimport {User} from \"../interfaces/User\";\r\n\r\nexport function useGetSapAccountTypes() {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({id: id});\r\n\r\n return [\r\n {accountTypeId: \"master\", accountTypeValue: f(\"sap_account_type.master\")},\r\n {accountTypeId: \"transactional\", accountTypeValue: f(\"sap_account_type.transactional\")},\r\n {accountTypeId: \"both\", accountTypeValue: f(\"sap_account_type.both\")},\r\n ];\r\n}\r\n\r\nexport function useUser(): User | null {\r\n return useSelector(state => state?.default?.currentUser);\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { LanguageSelector } from \"./LanguageSelector\";\r\nimport { RootState } from \"../../reducers/RootReducer\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useUser } from \"../../hooks/CommonHooks\";\r\nimport * as appConstants from '../../constants/ApplicationConstants';\r\n\r\nimport { getFooterLinks } from \"../../requests/ConfigRequests\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { setFooterLinks } from '../../actions/UserActions';\r\n\r\nexport function Footer() {\r\n const t = useIntl();\r\n const language = useSelector(state => state.user.language);\r\n const country = useSelector(state => state.user.country);\r\n const stateFooterLinks = useSelector(state => state.user.footerLinks);\r\n const [currentYear, setCurrentYear] = useState(new Date().getFullYear());\r\n\r\n const user = useUser();\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n const fetchConfiguration = async () => {\r\n try {\r\n let links = await getFooterLinks();\r\n\r\n if (links.privacyPolicy) {\r\n links = {\r\n ...links,\r\n termsAndConditions: links.termsAndConditions,\r\n contactUs: links.contactUs,\r\n };\r\n\r\n let footerLinks = {\r\n privacyPolicy: links.privacyPolicy,\r\n termsAndConditions: links.termsAndConditions,\r\n contactUs: links.contactUs,\r\n };\r\n\r\n dispatch(setFooterLinks(footerLinks));\r\n } else {\r\n console.error('Privacy policy is missing');\r\n }\r\n } catch (error) {\r\n console.error('Error fetching footer links:', error);\r\n }\r\n };\r\n\r\n fetchConfiguration();\r\n }, []);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default connect(store => ({\r\n privacyPolicy: store.user.privacyPolicy\r\n}), {}, null, { pure: false })(Footer);\r\n","/* eslint-env browser */\r\n/* eslint react/prop-types: 0 */\r\nimport 'react-activity/dist/react-activity.css';\r\nimport React, { Component, useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport { login, setBlackoutConfig, loginSSO } from '../../actions/UserActions';\r\nimport * as validationTypes from '../../constants/ValidationConstants';\r\nimport { Link } from 'react-router-dom';\r\nimport LoginRedirectHandler from \"./LoginRedirectHandler\";\r\nimport { Footer } from \"../footer/Footer\";\r\nimport Title from \"./Title\";\r\nimport LoginLogo from \"./LoginLogo\";\r\nimport Logo from \"../Logo\";\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { RootState } from \"../../reducers/RootReducer\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { getBlackoutConfig, getIsBlackoutActive, getAllowRegistration } from \"../../requests/ConfigRequests\";\r\nimport DOMPurify from 'dompurify'\r\n\r\nfunction Login(props: any) {\r\n\r\n \r\n let [isAllowRegistration, setIsAllowRegistration] = useState(false);\r\n let [bannerContent, setBannerContent] = useState(null);\r\n let [email, setEmail] = useState(\"\");\r\n let [password, setPassword] = useState(\"\");\r\n let t = useIntl();\r\n\r\n let onLogin = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n validateCredentials();\r\n }\r\n\r\n let validateCredentials = () => {\r\n if (email === null || password === null || email === '' || password === '') {\r\n toast.error(validationTypes.CREDENTIALS_REQUIRED, { position: toast.POSITION.TOP_RIGHT });\r\n } else {\r\n props.login(email, password).then().catch((error) => {\r\n\r\n });\r\n }\r\n }\r\n\r\n let backgroundClasses = \"\";\r\n if (props.useBackground) {\r\n backgroundClasses += \" login-background\";\r\n }\r\n\r\n //-- blackout --\r\n let blackoutMessage = \"\";\r\n const lang = useSelector(state => state.user.language);\r\n const blackoutConfig = props.blackoutConfig;\r\n\r\n useEffect(() => {\r\n\r\n const fetchAllowRegistration = async () => {\r\n let value = await getAllowRegistration(lang);\r\n setIsAllowRegistration(value?.item1);\r\n setBannerContent(value?.item2);\r\n }\r\n fetchAllowRegistration();\r\n\r\n if (window.gigya) {\r\n window.gigya.accounts.getJWT({\r\n fields: \"email\", expiration: 86400, \"callback\": function (resp: any) {\r\n let token = \"\"\r\n if (resp.status === \"OK\") {\r\n token = resp.id_token\r\n props.loginSSO(token)\r\n }\r\n }\r\n });\r\n }\r\n }, [lang]);\r\n\r\n if (blackoutConfig && blackoutConfig.isEnabled) {\r\n blackoutMessage = blackoutConfig.messages.find(m => m.language === lang)?.message;\r\n if (blackoutMessage === null) {\r\n blackoutMessage = blackoutConfig.messages.find(m => m.language === \"en\")?.message;\r\n if (blackoutMessage === null) {\r\n blackoutMessage = blackoutConfig.messages.find(msg => msg != null)?.message;\r\n }\r\n }\r\n\r\n if (blackoutMessage) {\r\n blackoutMessage = blackoutMessage.replace(\"<%datefrom%>\", new Date(blackoutConfig.fromDateLocal).toLocaleDateString());\r\n blackoutMessage = blackoutMessage.replace(\"<%timefrom%>\", new Date(blackoutConfig.fromDateLocal).toLocaleTimeString());\r\n blackoutMessage = blackoutMessage.replace(\"<%dateto%>\", new Date(blackoutConfig.toDateLocal).toLocaleDateString());\r\n blackoutMessage = blackoutMessage.replace(\"<%timeto%>\", new Date(blackoutConfig.toDateLocal).toLocaleTimeString());\r\n }\r\n }\r\n\r\n //blackoutMessage = \"blackout in effect\";\r\n\r\n let isBlackoutActive = props.isBlackoutActive;\r\n function createMarkup(html) {\r\n return {\r\n __html: DOMPurify.sanitize(html)\r\n }\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n {/**/}\r\n \r\n { /* disable all controls when blackout is in effect/is active */}\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {\r\n bannerContent !== \"\" &&\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n { // display blackout message\r\n blackoutMessage !== \"\" &&\r\n
\r\n \r\n \r\n \r\n
\r\n }\r\n
\r\n
\r\n
\r\n\r\n
\r\n setEmail(e.target.value)} autoCapitalize=\"none\" autoCorrect=\"off\" />\r\n
\r\n
\r\n setPassword(e.target.value)} />\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {isAllowRegistration === true ?\r\n
\r\n {/*No Registration*/}\r\n \r\n \r\n \r\n
: null\r\n }\r\n
\r\n
\r\n {props.isLoggedIn && }\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
{/* area-disabled */}\r\n
\r\n
\r\n );\r\n\r\n}\r\n\r\n// class LoginOld extends Component {\r\n// constructor(props) {\r\n// super(props);\r\n// this.state = {\r\n// email: '',\r\n// password: '',\r\n// };\r\n\r\n// this.onLogin = this.onLogin.bind(this);\r\n// this.handleOnChange = this.handleOnChange.bind(this);\r\n// }\r\n\r\n// onLogin(e) {\r\n// e.preventDefault();\r\n// e.stopPropagation();\r\n// this.validateCredentials();\r\n// }\r\n\r\n// validateCredentials() {\r\n// if (this.state.email === null || this.state.password === null || this.state.email === '' || this.state.password === '') {\r\n// toast.error(validationTypes.CREDENTIALS_REQUIRED, {position: toast.POSITION.TOP_RIGHT});\r\n// } else {\r\n// this.props.login(this.state.email, this.state.password).then().catch((error) => {\r\n\r\n// });\r\n// }\r\n// }\r\n\r\n// handleOnChange = input => (e) => {\r\n// this.setState({\r\n// [input]: e.target.value,\r\n// });\r\n// };\r\n\r\n// render() {\r\n// let backgroundClasses = \"\";\r\n// if (this.props.useBackground) {\r\n// backgroundClasses += \" login-background\"; \r\n// }\r\n\r\n// return (\r\n// \r\n//
\r\n//
\r\n//
\r\n//
\r\n//
\r\n// \r\n//
\r\n//
\r\n//
\r\n//
\r\n//
\r\n//

</h1>\r\n// <br />\r\n// <div className=\"form-group mt-3\">\r\n// <input type=\"text\" className=\"form-control control-border\" name=\"email\" placeholder=\"Email\"\r\n// onChange={e => this.handleOnChange('email')} />\r\n// </div>\r\n// <div className=\"form-group\">\r\n// <input type=\"password\" className=\"form-control control-border\" name=\"password\" placeholder=\"Password\"\r\n// onChange={this.handleOnChange('password')} />\r\n// </div>\r\n// <div className=\"form-group\">\r\n// <button type=\"submit\"\r\n// className=\"btn btn-primary loginButtonColor form-control control-border button-class\"\r\n// ><FormattedMessage id={\"site.login\"} />\r\n// </button>\r\n// </div>\r\n// <div className=\"form-group text-center button-class\">\r\n// <Link to={\"/request-password-reset\"}>\r\n// <span className=\"trouble\"><FormattedMessage id={\"site.trouble_logging_in\"} /></span>\r\n// </Link>\r\n// </div>\r\n// <br />\r\n// <br />\r\n// <div className=\"form-group\">\r\n// <Link to={\"/auto-register/accounts\"}>\r\n// <button type=\"button\"\r\n// className=\"btn btn-secondary registerButtonColor form-control control-border button-class\">\r\n// <span className=\"register-button-text\"><FormattedMessage id={\"site.register\"} /></span>\r\n// </button>\r\n// </Link>\r\n// </div>\r\n// </form>\r\n// </div>\r\n// {this.props.isLoggedIn && <LoginRedirectHandler />}\r\n// <Footer />\r\n// </div>\r\n\r\n// </div>\r\n// </div>\r\n// <div className={\"logo-bottom-right\"}>\r\n// <Logo width={\"80\"} />\r\n// </div> \r\n// </div>\r\n// </React.Fragment>\r\n// );\r\n// }\r\n// }\r\n\r\nexport default connect<any, any, any, any>(store => ({\r\n documentsList: store.default.documentsList,\r\n customer_number: store.default.customer_number,\r\n company_code: store.default.company_code,\r\n sales_organization: store.default.sales_organization,\r\n isLoggedIn: store.user.isLoggedIn,\r\n useBackground: store.app.config.style.login_use_background_image,\r\n isBlackoutActive: store.user.isBlackoutActive,\r\n blackoutConfig: store.user.blackoutConfig,\r\n\r\n}), {\r\n login,\r\n setBlackoutConfig,\r\n loginSSO,\r\n})(Login);\r\n","import * as Yup from \"yup\";\r\nimport * as cardValidator from 'card-validator';\r\nimport {IntlShape} from \"react-intl\";\r\n\r\n\r\nexport const AddCreditCardSchema = function (intl: IntlShape) {\r\n const f = (id, defaultMessage) => intl.formatMessage({id, defaultMessage});\r\n\r\n return Yup.object().shape({\r\n card_type: Yup.string().required(f(\"credit_card_form.card_type_required\", \"Card type is required.\")),\r\n card_name: Yup.string().required(f(\"credit_card_form.name_required\", \"Name on card is required.\")),\r\n card_number: Yup.string().required(f(\"credit_card_form.card_number_required\", \"Card number is required.\")).test({\r\n name: 'card_number',\r\n message: f(\"credit_card_form.invalid_card_number\", \"Invalid credit card number\"),\r\n test: (value) => {\r\n \r\n if (value) value = value.replace(/ /g, \"\");\r\n return cardValidator.number(value).isValid;\r\n }\r\n }).when('card_type', {\r\n is: 'VISA', //mc amex\r\n then: Yup.string().test({\r\n name: 'card_number',\r\n message: f(\"credit_card_form.invalid_card_number\", \"Invalid credit card number\"),\r\n test: (value) => {\r\n if (value) value = value.replace(/ /g, \"\"); \r\n let validate = cardValidator.number(value);\r\n return value && validate.card && validate.card.type === 'visa';\r\n }\r\n })\r\n }).when('card_type', {\r\n is: 'MC',\r\n then: Yup.string().test({\r\n name: 'card_number',\r\n message: f(\"credit_card_form.invalid_card_number\", \"Invalid credit card number\"),\r\n test: (value) => {\r\n if (value) value = value.replace(/ /g, \"\");\r\n let validate = cardValidator.number(value);\r\n return value && validate.card && validate.card.type === 'mastercard';\r\n }\r\n })\r\n }).when('card_type', {\r\n is: 'AMEX', //mc amex\r\n then: Yup.string().test({\r\n name: 'card_number',\r\n message: f(\"credit_card_form.invalid_card_number\", \"Invalid credit card number\"),\r\n test: function (value) {\r\n if (value) value = value.replace(/ /g, \"\");\r\n let validate = cardValidator.number(value);\r\n return value && validate.card && validate.card.type === 'american-express';\r\n }\r\n })\r\n }),\r\n card_validation_code: Yup.string().required(f(\"credit_card_form.cvv_required\", \"Card cvv is required.\")),\r\n card_month: Yup.string().required(f(\"credit_card_form.expiration_date_required\", \"Expiration month is required.\")),\r\n // card_year: Yup.string().required(f(\"credit_card_form.expiration_year_required\", \"Expiration year is required.\")),\r\n });\r\n};\r\n\r\nexport const EditCreditCardSchema = function (intl: IntlShape) {\r\n const f = (id, defaultMessage) => intl.formatMessage({id, defaultMessage});\r\n\r\n return Yup.object().shape({\r\n card_name: Yup.string().required(f(\"credit_card_form.name_required\", \"Name on card is required.\")),\r\n card_month: Yup.string().required(f(\"credit_card_form.expiration_date_required\", \"Expiration month is required.\")),\r\n card_year: Yup.string().required(f(\"credit_card_form.expiration_year_required\", \"Expiration year is required.\")),\r\n // card_number: Yup.string().required(f(\"credit_card_form.expiration_year_required\", \"Expiration year is required.\")),\r\n\r\n });\r\n};\r\n\r\n/**\r\n * @return {number}\r\n */\r\nfunction checkRoutingNumber2EC(r) {\r\n let s = 0, m = 0, n = [3, 7, 1];\r\n for (let i = 0; i < r.length; i++) {\r\n s += parseInt(r.charAt(i)) * n[m];\r\n m = (++m < 3 ? m : 0);\r\n }\r\n return s\r\n}\r\n\r\n/**\r\n * @return {boolean}\r\n */\r\nfunction checkRoutingNumber1EC(r) {\r\n let s = '';\r\n for (let i = 0; i < r.length; i++) {\r\n if (!Number.isNaN(r.charAt(i)))\r\n s += r.charAt(i)\r\n }\r\n if (s.length !== 9)\r\n return false;\r\n const c = checkRoutingNumber2EC(s);\r\n return !!(c && c % 10 === 0);\r\n}\r\n\r\nconst accountNumberRegExpr = \"^[0-9]+$\";\r\n\r\n/**\r\n * @return {boolean}\r\n */\r\nfunction checkAccountNumberEC(value) {\r\n let re = new RegExp(accountNumberRegExpr);\r\n if (value.length < 5 || value.length > 17)\r\n return false;\r\n return !!value.match(re);\r\n}\r\n\r\n\r\nexport const AddCheckSchema = function (intl: IntlShape) {\r\n const f = (id, defaultMessage) => intl.formatMessage({id, defaultMessage});\r\n \r\n return Yup.object().shape({\r\n electronic_check_account_type: Yup.string().required(f(\"echeck_form.account_type_required\",\"Account type is required.\")),\r\n name: Yup.string().required(f(\"echeck_form.name_required\",\"Check Holder name is required.\")),\r\n electronic_check_rdfi_number: Yup.string().required(f(\"echeck_form.routing_number_required\",\"Routing number is required.\")).test({\r\n name: 'electronic_check_rdfi_number',\r\n message: f(\"echeck_form.invalid_routing_number\",\"Invalid routing number.\"),\r\n test: (value) => {\r\n if (typeof value === \"undefined\") {\r\n return false;\r\n }\r\n if (value === null) {\r\n return false;\r\n }\r\n if (value.length < 1) {\r\n return false;\r\n }\r\n return checkRoutingNumber1EC(value);\r\n }\r\n }),\r\n account_number: Yup.string().required(f(\"echeck_form.account_number_required\", \"Account number is required.\")).test({\r\n name: 'electronic_check_rdfi_number',\r\n message: f(\"echeck_form.invalid_account_number\",\"Invalid account number.\"),\r\n test: (value) => {\r\n if (typeof value === \"undefined\") {\r\n return false;\r\n }\r\n if (value === null) {\r\n return false;\r\n }\r\n if (value.length < 1) {\r\n return false;\r\n }\r\n return checkAccountNumberEC(value);\r\n }\r\n }),\r\n });\r\n};\r\n\r\nexport const EditCheckSchema = function (intl: IntlShape) {\r\n const f = (id, defaultMessage) => intl.formatMessage({id, defaultMessage});\r\n return Yup.object().shape({\r\n name: Yup.string().required(f(\"echeck_form.name_required\",\"Check Holder name is required.\")),\r\n });\r\n};\r\n\r\n\r\nexport const MakeDepositSchema = function (intl: IntlShape) {\r\n const f = (id, defaultMessage) => intl.formatMessage({id, defaultMessage});\r\n return Yup.object().shape({\r\n amount_to_process: Yup.number().required(f(\"deposits.amount_required\", \"Numeric value required.\"))\r\n .positive()\r\n .min(1, f(\"deposits.amount_value_validation\", \"Amount must be 1 or greater than 1.\")),\r\n });\r\n};\r\n","import React, { Component } from 'react';\r\nimport { connect, Field } from 'formik';\r\nimport classNames from 'classnames';\r\n\r\nexport class BootstrapFieldInner extends Component<any, any> {\r\n\r\n render() {\r\n let errors = this.props.formik.errors;\r\n let touched = this.props.formik.touched;\r\n let fieldErrors = errors[this.props.name];\r\n let hasErrors = typeof fieldErrors !== 'undefined';\r\n let isTouched = typeof touched[this.props.name] !== 'undefined';\r\n let wasSubmitted = this.props.formik.submitCount > 0;\r\n let classes: {[className: string]: boolean}[] = [{'is-invalid': hasErrors && (isTouched || wasSubmitted)}];\r\n if (this.props.type !== \"checkbox\"){\r\n classes.push({'form-control': true}); \r\n } \r\n if (this.props.className){\r\n classes.push(this.props.className);\r\n } \r\n if (this.props.children) {\r\n return <Field {...this.props} className={classNames(classes)}>{this.props.children}</Field>\r\n } else {\r\n return <Field {...this.props} className={classNames(classes)}/>\r\n }\r\n }\r\n}\r\n\r\nexport const BootstrapField = connect(BootstrapFieldInner);\r\n\r\nclass BootstrapErrorInner extends Component<any, any> {\r\n\r\n render() {\r\n let errors = this.props.formik.errors;\r\n let fieldErrors = errors[this.props.name];\r\n if(fieldErrors === \"amount_to_process must be a `number` type, but the final value was: `NaN`.\"){\r\n fieldErrors = \"Numeric value required.\";\r\n }\r\n if (fieldErrors){\r\n return <div className=\"invalid-feedback\">{fieldErrors}</div>\r\n } \r\n return null;\r\n }\r\n\r\n}\r\n\r\nexport const BootstrapError = connect(BootstrapErrorInner);\r\n\r\n\r\n","import {PayerData} from '../../interfaces/PayerData';\r\nimport {Invoice} from \"../../interfaces/invoice\";\r\nimport {StringSchema} from \"yup\";\r\n\r\nexport function getValue(property, defaultVal) {\r\n if (typeof property === 'undefined') {\r\n return defaultVal;\r\n }\r\n return property;\r\n}\r\n\r\nexport function valueEquals(property, equals) {\r\n if (typeof property === 'undefined') {\r\n return false;\r\n }\r\n return property === equals;\r\n}\r\n\r\nexport function mapInvoiceToPaymentDocument(invoice: Invoice, details) {\r\n return {\r\n document_number_finance: invoice.document_number_finance,\r\n line_item_in_the_relevant_invoice: invoice.line_item_in_the_relevant_invoice,\r\n fiscal_year_of_the_relevant_invoice: invoice.fiscal_year_of_the_relevant_invoice,\r\n open_amount: invoice.open_amount,\r\n amount_to_process: details.amount,\r\n currency_key: invoice.currency_key,\r\n reason_code: details.reason,\r\n comment: details.comment,\r\n reference_number: invoice.reference_number,\r\n billing_document_number: invoice.billing_document_number,\r\n document_date: invoice.document_date,\r\n }\r\n}\r\n\r\nexport function mapInvoiceListToPaymentDocuments(invoices, details) {\r\n return Object.keys(invoices).map((key) => {\r\n return mapInvoiceToPaymentDocument(invoices[key], details[key]);\r\n });\r\n}\r\n\r\ninterface PaymentDetails {\r\n payment_card_name: any | string | StringSchema<Exclude<string, undefined>>;\r\n card_validation_code: string;\r\n payment_card_token: any | string;\r\n valid_to: any | string;\r\n payment_card_type: any | string | \"AMEX\" | \"VISA\" | \"MC\" | \"EC\" | StringSchema<Exclude<string, undefined>>;\r\n address_data: { name_3: any | string; name_2: any | string; country: any; city: any; postal_code_city: any; street: any; district: any; name: any; region: any; name_4: any | string };\r\n payment_method: string;\r\n electronic_check_account_type: any | StringSchema<Exclude<string, undefined>> | string;\r\n electronic_check_rdfi_number: any | StringSchema<Exclude<string, undefined>> | { test: (value) => (boolean | boolean); name: string; message: string } | string\r\n cardinal?: any,\r\n}\r\n\r\nexport function mapPaymentDetails(payment_card, cvv = '', address: any = {}, cardinal: null | any = null) {\r\n const paymentMethod = payment_card.payment_card_type === 'EC' ? 'EC' : 'CC';\r\n const details: PaymentDetails = {\r\n payment_method: paymentMethod,\r\n payment_card_type: payment_card.payment_card_type,\r\n payment_card_token: payment_card.payment_card_token,\r\n payment_card_name: payment_card.payment_card_name,\r\n electronic_check_account_type: payment_card?.electronic_check_account_type ?? \"\",\r\n electronic_check_rdfi_number: payment_card?.electronic_check_rdfi_number ?? \"\",\r\n valid_to: payment_card.valid_to,\r\n card_validation_code: cvv,\r\n address_data: {\r\n name: address?.name ?? '',\r\n name_2: address?.name_2 ?? '',\r\n name_3: address?.name_3 ?? '',\r\n name_4: address?.name_4 ?? '',\r\n city: getValue(address.city, ''),\r\n district: getValue(address.district, ''),\r\n street: getValue(address.street, ''),\r\n postal_code_city: getValue(address.postal_code_city, ''),\r\n region: getValue(address.region, ''),\r\n country: getValue(address.country, ''),\r\n }\r\n\r\n };\r\n if (cardinal != null) {\r\n details.cardinal = cardinal;\r\n }\r\n return details;\r\n}\r\n\r\nexport function createPayerData(customerNumber, companyCode): PayerData {\r\n return {company_code: companyCode, customer_number: customerNumber};\r\n}\r\n\r\nexport function mapDepositDetails(values, currency_key: string) {\r\n return {\r\n amount_to_process: values.amount_to_process,\r\n currency_key: currency_key,\r\n reason_code: values.reason_code,\r\n reference_number: values.reference_number,\r\n comment: values.comment\r\n }\r\n}\r\n","import {createSelector} from 'reselect';\r\nimport {getAllPaymentOptions} from \"../../selectors/Selectors\";\r\n\r\nexport const getChecksSelector = createSelector([getAllPaymentOptions], (payment_cards) => {\r\n return payment_cards.filter(_ => _.payment_card_type === 'EC');\r\n});\r\nexport const getCreditCardsSelector = createSelector([getAllPaymentOptions ], (payment_cards) => {\r\n return payment_cards.filter(_ => _.payment_card_type !== 'EC');\r\n});\r\n","import axios from '../axios';\r\nimport * as apiTypes from \"../constants/ApiConstants\";\r\nimport moment from \"moment\";\r\nimport { AddressData } from \"../interfaces/AddressData\";\r\nimport { User } from \"../interfaces/User\";\r\nimport { PayerDetails } from \"../interfaces/PayerDetails\";\r\nimport { Guid } from 'js-guid';\r\nimport { toast } from 'react-toastify';\r\ndeclare var window: any;\r\n\r\nexport function getPaymentAccessToken(type: 'EC' | 'CC' | 'TO', cardinalData = {}) {\r\n if (!(type === 'EC' || type === 'CC' || type === 'TO')) {\r\n return Promise.reject({ error: \"Invalid payment type.\" });\r\n }\r\n return axios.post(apiTypes.GET_PAYMENT_ACCESS_TOKEN, {\r\n ...cardinalData,\r\n action: '01',\r\n payment_method: type,\r\n }).then(response => {\r\n return response.data;\r\n }).catch(error => {\r\n\r\n toast.error(\"Internal Error - please contact customer service\", {\r\n position: toast.POSITION.TOP_RIGHT,\r\n });\r\n \r\n });\r\n}\r\n\r\nexport function buildCCRequest(card_details, merchant_id, access_token) {\r\n let data = window.$XIPlugin.createJSRequestPacket(merchant_id, access_token);\r\n data.addField(window.$XIPlugin.createField('PAYMET', false, 'CC'));\r\n data.addField(window.$XIPlugin.createField('CCINS', false, card_details.card_type));\r\n data.addField(window.$XIPlugin.createField('CCNUM', true, card_details.card_number.replace(/\\s/g, '')));\r\n data.addField(window.$XIPlugin.createField('CCNAME', false, card_details.card_name));\r\n data.addField(window.$XIPlugin.createField('VALTM', false, parseInt(card_details.card_month, 10)));\r\n data.addField(window.$XIPlugin.createField('VALTY', false, parseInt(card_details.card_year, 10)));\r\n data.addField(window.$XIPlugin.createField('CVVAL', false, card_details.card_validation_code));\r\n return data;\r\n}\r\n\r\nexport function buildTORequest(token_id, merchant_id, access_token) {\r\n let data = window.$XIPlugin.createJSRequestPacket(merchant_id, access_token);\r\n // data.addField(window.$XIPlugin.createField('PAYMET', false, 'CC'));\r\n // data.addField(window.$XIPlugin.createField('CCINS', false, card_details.card_type));\r\n // data.addField(window.$XIPlugin.createField('CCNUM', true, card_details.card_number.replace(/\\s/g, '')));\r\n // data.addField(window.$XIPlugin.createField('CCNAME', false, card_details.card_name));\r\n // data.addField(window.$XIPlugin.createField('VALTM', false, parseInt(card_details.card_month, 10)));\r\n // data.addField(window.$XIPlugin.createField('VALTY', false, parseInt(card_details.card_year, 10)));\r\n // data.addField(window.$XIPlugin.createField('CVVAL', false, card_details.card_validation_code));\r\n return data;\r\n}\r\n\r\nexport function buildECRequest(ec_details, merchant_id, access_token) {\r\n let data = window.$XIPlugin.createJSRequestPacket(merchant_id, access_token);\r\n data.addField(window.$XIPlugin.createField('PAYMET', false, 'EC'));\r\n data.addField(window.$XIPlugin.createField('CCINS', false, 'EC'));\r\n data.addField(window.$XIPlugin.createField('CCNUM', true, ec_details.account_number));\r\n data.addField(window.$XIPlugin.createField('CCNAME', false, ec_details.name));\r\n data.addField(window.$XIPlugin.createField('ECRDFI', false, ec_details.electronic_check_rdfi_number));\r\n data.addField(window.$XIPlugin.createField('ECACTTYP', false, ec_details.electronic_check_account_type));\r\n return data;\r\n}\r\n\r\nexport function getPaymetricResponse(paymetricUrl: string, data: any, iThreeds_version: string) {\r\n return new Promise((resolve, reject) => {\r\n $XIPlugin.ajax({\r\n url: paymetricUrl + \"/Ajax\",\r\n type: \"POST\",\r\n data: data,\r\n success: function (a) {\r\n resolve(data);\r\n },\r\n error: function (status, text_status) {\r\n reject({ status, text_status });\r\n },\r\n threeDSVersion: iThreeds_version\r\n });\r\n });\r\n\r\n}\r\n\r\nexport function paymetric3DSCheck(paymetricUrl: string, data: any, iThreeds_version: string) {\r\n return new Promise((resolve, reject) => {\r\n $XIPlugin.ajax({\r\n url: paymetricUrl + \"/Cardinal3DSWithToken\",\r\n type: \"POST\",\r\n data: data,\r\n success: function (a) {\r\n resolve(data);\r\n },\r\n error: function (status, text_status) {\r\n reject({ status, text_status });\r\n },\r\n threeDSVersion: iThreeds_version\r\n });\r\n });\r\n}\r\n\r\nexport function getPaymetric3DSTO(paymetricUrl, data) {\r\n return axios.post(paymetricUrl + '/Cardinal3DSWithToken', data).then(response => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function getPaymentResponse(access_token) {\r\n return axios.post(apiTypes.GET_PAYMENT_RESPONSE, {\r\n action: '02',\r\n access_token: access_token,\r\n }).then(response => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function addPaymentMethod(customer_number, company_code, payment_card, log, make_default = false) {\r\n let action = '01';\r\n return sendManagePaymentCardsRequest(action, customer_number, company_code, payment_card, make_default, log);\r\n}\r\n\r\nexport function updatePaymentMethod(customer_number, company_code, payment_card, log, make_default = false) {\r\n let action = '02';\r\n return sendManagePaymentCardsRequest(action, customer_number, company_code, payment_card, make_default, log);\r\n}\r\n\r\nexport function deletePaymentMethod(customer_number, company_code, payment_card, log, make_default = false) {\r\n let action = '03';\r\n return sendManagePaymentCardsRequest(action, customer_number, company_code, payment_card, make_default, log);\r\n}\r\n\r\nfunction sendManagePaymentCardsRequest(action, customer_number, company_code, payment_cards, make_default, log) {\r\n\r\n let payload = {\r\n payer_data: {\r\n customer_number: customer_number,\r\n company_code: company_code,\r\n },\r\n action: action,\r\n payment_cards: [{\r\n payment_card_name: payment_cards.payment_card_name,\r\n payment_card_token: payment_cards.payment_card_token,\r\n payment_card_type: payment_cards.payment_card_type,\r\n valid_from: \"\",\r\n valid_to: payment_cards.valid_to,\r\n default: make_default ? 'X' : '',\r\n card_validation_code: payment_cards.card_validation_code,\r\n electronic_check_account_type: payment_cards.electronic_check_account_type,\r\n electronic_check_rdfi_number: payment_cards.electronic_check_rdfi_number,\r\n }],\r\n log: log\r\n\r\n };\r\n\r\n return axios.post(apiTypes.MANAGE_PAYMENTS_URL, payload).then(response => {\r\n if (response.data && response.data.message_type === \"S\") {\r\n return response.data;\r\n } else if (response.data && response.data.status && response.data.status.message_type === \"S\") {\r\n return response.data;\r\n } else {\r\n throw { message_number: response.data.message_number, message_string: response.data.message_line_string };\r\n }\r\n });\r\n}\r\n\r\nexport function cardFormToUpdateObject(card, token) {\r\n let valid_to = moment();\r\n valid_to.year(card.card_year);\r\n valid_to.month(parseInt(card.card_month) - 1);\r\n valid_to.endOf('month');\r\n return {\r\n payment_card_name: card.card_name,\r\n payment_card_token: token,\r\n payment_card_type: card.card_type,\r\n valid_from: \"\",\r\n valid_to: valid_to.format('MM-DD-YYYY'),\r\n card_validation_code: card.card_validation_code,\r\n electronic_check_account_type: card.electronic_check_account_type,\r\n electronic_check_rdfi_number: card.electronic_check_rdfi_number,\r\n }\r\n}\r\n\r\nexport function checkFormToUpdateObject(card, token) {\r\n return {\r\n payment_card_name: card.name,\r\n payment_card_token: token,\r\n payer_account: card.payer_account,\r\n payment_card_type: \"EC\",\r\n electronic_check_account_type: card.electronic_check_account_type,\r\n electronic_check_rdfi_number: card.electronic_check_rdfi_number,\r\n }\r\n}\r\n\r\nexport function buildCardinalData(amount: number, user: User, payer: PayerDetails, version: string, redirect_url: string, currency_code: string, paymentOption: any | null = null) {\r\n let cardinalData = {\r\n amount, // Authorization amount.... get preauthorization amount\r\n billing_address1: payer.address_data.street,\r\n billing_city: payer.address_data.city,\r\n billing_country_code: getCardinalCountryCode(payer.address_data.country),\r\n billing_email: user.email,\r\n billing_first_name: user.first_name,\r\n billing_last_name: user.last_name,\r\n billing_phone: getPayerPhoneNumber(payer), // TODO is this Nobel's Number?\r\n billing_postal_code: payer.address_data.postal_code_city,\r\n billing_state: payer.address_data.region,\r\n currency_code: getCardinalCurrencyCode(currency_code), // TODO is the the currency code from SAP?\r\n mobile_phone: getPayerPhoneNumber(payer),\r\n order_number: Guid.newGuid().toString(),\r\n redirect_uri: redirect_url,\r\n shipping_address1: payer.address_data.street,\r\n shipping_city: payer.address_data.city,\r\n shipping_country_code: getCardinalCountryCode(payer.address_data.country),\r\n shipping_postal_code: payer.address_data.postal_code_city,\r\n shipping_state: payer.address_data.region,\r\n threeds_version: version,\r\n work_phone: getPayerPhoneNumber(payer),\r\n };\r\n\r\n if (paymentOption) {\r\n cardinalData['payment_card_token'] = paymentOption?.payment_card_token;\r\n cardinalData['expiration_month'] = paymentOption?.valid_to.split('-')[0] ?? \"\";\r\n cardinalData['expiration_year'] = paymentOption?.valid_to.split('-')[2] ?? \"\";\r\n cardinalData['payment_method'] = 'TO';\r\n } else {\r\n cardinalData['payment_method'] = 'CC';\r\n cardinalData['fn_ccnum'] = \"CCNUM\"; // hardcoded\r\n cardinalData['fn_valtm'] = \"VALTM\"; // hardcoded\r\n cardinalData['fn_valty'] = \"VALTY\"; // hardcoded\r\n }\r\n\r\n return cardinalData;\r\n\r\n}\r\n\r\nfunction getPayerPhoneNumber(payer: PayerDetails) {\r\n let phone = \"+18593094411\"; // TODO CHECK DEFAULT\r\n if (!!payer?.communcation_data?.phone) {\r\n return phone;\r\n }\r\n if (payer.communcation_data?.phone?.length == 1) {\r\n phone = payer.communcation_data?.phone[0]?.telephone;\r\n }\r\n if (payer.communcation_data?.phone?.length > 1) {\r\n phone = payer.communcation_data?.phone?.find(c => c.standard == \"X\")?.telephone ?? phone;\r\n }\r\n return phone;\r\n}\r\n\r\nfunction getCardinalCountryCode(country_code: string) {\r\n return tokenCountryCodes[country_code];\r\n}\r\n\r\nfunction getCardinalCurrencyCode(currency_code: string) {\r\n return tokenCurrencyCodes[currency_code];\r\n}\r\n\r\nconst tokenCountryCodes = {\r\n \"AD\": 20,\r\n \"AE\": 784,\r\n \"AF\": 4,\r\n \"AG\": 28,\r\n \"AI\": 660,\r\n \"AL\": 8,\r\n \"AM\": 51,\r\n \"AO\": 24,\r\n \"AQ\": 10,\r\n \"AR\": 32,\r\n \"AS\": 16,\r\n \"AT\": 40,\r\n \"AU\": 36,\r\n \"AW\": 533,\r\n \"AX\": 248,\r\n \"AZ\": 31,\r\n \"BA\": 70,\r\n \"BB\": 52,\r\n \"BD\": 50,\r\n \"BE\": 56,\r\n \"BF\": 854,\r\n \"BG\": 100,\r\n \"BH\": 48,\r\n \"BI\": 108,\r\n \"BJ\": 204,\r\n \"BL\": 652,\r\n \"BM\": 60,\r\n \"BN\": 96,\r\n \"BO\": 68,\r\n \"BQ\": 535,\r\n \"BR\": 76,\r\n \"BS\": 44,\r\n \"BT\": 64,\r\n \"BV\": 74,\r\n \"BW\": 72,\r\n \"BY\": 112,\r\n \"BZ\": 84,\r\n \"CA\": 124,\r\n \"CC\": 166,\r\n \"CD\": 180,\r\n \"CF\": 140,\r\n \"CG\": 178,\r\n \"CH\": 756,\r\n \"CI\": 384,\r\n \"CK\": 184,\r\n \"CL\": 152,\r\n \"CM\": 120,\r\n \"CN\": 156,\r\n \"CO\": 170,\r\n \"CR\": 188,\r\n \"CU\": 192,\r\n \"CV\": 132,\r\n \"CW\": 531,\r\n \"CX\": 162,\r\n \"CY\": 196,\r\n \"CZ\": 203,\r\n \"DE\": 276,\r\n \"DJ\": 262,\r\n \"DK\": 208,\r\n \"DM\": 212,\r\n \"DO\": 214,\r\n \"DZ\": 12,\r\n \"EC\": 218,\r\n \"EE\": 233,\r\n \"EG\": 818,\r\n \"EH\": 732,\r\n \"ER\": 232,\r\n \"ES\": 724,\r\n \"ET\": 231,\r\n \"FI\": 246,\r\n \"FJ\": 242,\r\n \"FK\": 238,\r\n \"FM\": 583,\r\n \"FO\": 234,\r\n \"FR\": 250,\r\n \"GA\": 266,\r\n \"GB\": 826,\r\n \"GD\": 308,\r\n \"GE\": 268,\r\n \"GF\": 254,\r\n \"GG\": 831,\r\n \"GH\": 288,\r\n \"GI\": 292,\r\n \"GL\": 304,\r\n \"GM\": 270,\r\n \"GN\": 324,\r\n \"GP\": 312,\r\n \"GQ\": 226,\r\n \"GR\": 300,\r\n \"GS\": 239,\r\n \"GT\": 320,\r\n \"GU\": 316,\r\n \"GW\": 624,\r\n \"GY\": 328,\r\n \"HK\": 344,\r\n \"HM\": 334,\r\n \"HN\": 340,\r\n \"HR\": 191,\r\n \"HT\": 332,\r\n \"HU\": 348,\r\n \"ID\": 360,\r\n \"IE\": 372,\r\n \"IL\": 376,\r\n \"IM\": 833,\r\n \"IN\": 356,\r\n \"IO\": 86,\r\n \"IQ\": 368,\r\n \"IR\": 364,\r\n \"IS\": 352,\r\n \"IT\": 380,\r\n \"JE\": 832,\r\n \"JM\": 388,\r\n \"JO\": 400,\r\n \"JP\": 392,\r\n \"KE\": 404,\r\n \"KG\": 417,\r\n \"KH\": 116,\r\n \"KI\": 296,\r\n \"KM\": 174,\r\n \"KN\": 659,\r\n \"KP\": 408,\r\n \"KR\": 410,\r\n \"KW\": 414,\r\n \"KY\": 136,\r\n \"KZ\": 398,\r\n \"LA\": 418,\r\n \"LB\": 422,\r\n \"LC\": 662,\r\n \"LI\": 438,\r\n \"LK\": 144,\r\n \"LR\": 430,\r\n \"LS\": 426,\r\n \"LT\": 440,\r\n \"LU\": 442,\r\n \"LV\": 428,\r\n \"LY\": 434,\r\n \"MA\": 504,\r\n \"MC\": 492,\r\n \"MD\": 498,\r\n \"ME\": 499,\r\n \"MF\": 663,\r\n \"MG\": 450,\r\n \"MH\": 584,\r\n \"MK\": 807,\r\n \"ML\": 466,\r\n \"MM\": 104,\r\n \"MN\": 496,\r\n \"MO\": 446,\r\n \"MP\": 580,\r\n \"MQ\": 474,\r\n \"MR\": 478,\r\n \"MS\": 500,\r\n \"MT\": 470,\r\n \"MU\": 480,\r\n \"MV\": 462,\r\n \"MW\": 454,\r\n \"MX\": 484,\r\n \"MY\": 458,\r\n \"MZ\": 508,\r\n \"NA\": 516,\r\n \"NC\": 540,\r\n \"NE\": 562,\r\n \"NF\": 574,\r\n \"NG\": 566,\r\n \"NI\": 558,\r\n \"NL\": 528,\r\n \"NO\": 578,\r\n \"NP\": 524,\r\n \"NR\": 520,\r\n \"NU\": 570,\r\n \"NZ\": 554,\r\n \"OM\": 512,\r\n \"PA\": 591,\r\n \"PE\": 604,\r\n \"PF\": 258,\r\n \"PG\": 598,\r\n \"PH\": 608,\r\n \"PK\": 586,\r\n \"PL\": 616,\r\n \"PM\": 666,\r\n \"PN\": 612,\r\n \"PR\": 630,\r\n \"PS\": 275,\r\n \"PT\": 620,\r\n \"PW\": 585,\r\n \"PY\": 600,\r\n \"QA\": 634,\r\n \"RE\": 638,\r\n \"RO\": 642,\r\n \"RS\": 688,\r\n \"RU\": 643,\r\n \"RW\": 646,\r\n \"SA\": 682,\r\n \"SB\": 90,\r\n \"SC\": 690,\r\n \"SD\": 736,\r\n \"SE\": 752,\r\n \"SG\": 702,\r\n \"SH\": 654,\r\n \"SI\": 705,\r\n \"SJ\": 744,\r\n \"SK\": 703,\r\n \"SL\": 694,\r\n \"SM\": 674,\r\n \"SN\": 686,\r\n \"SO\": 706,\r\n \"SR\": 740,\r\n \"ST\": 678,\r\n \"SV\": 222,\r\n \"SX\": 534,\r\n \"SY\": 760,\r\n \"SZ\": 748,\r\n \"TC\": 796,\r\n \"TD\": 148,\r\n \"TF\": 260,\r\n \"TG\": 768,\r\n \"TH\": 764,\r\n \"TJ\": 762,\r\n \"TK\": 772,\r\n \"TL\": 626,\r\n \"TM\": 795,\r\n \"TN\": 788,\r\n \"TO\": 776,\r\n \"TR\": 792,\r\n \"TT\": 780,\r\n \"TV\": 798,\r\n \"TW\": 158,\r\n \"TZ\": 834,\r\n \"UA\": 804,\r\n \"UG\": 800,\r\n \"UM\": 581,\r\n \"US\": 840,\r\n \"UY\": 858,\r\n \"UZ\": 860,\r\n \"VA\": 336,\r\n \"VC\": 670,\r\n \"VE\": 862,\r\n \"VG\": 92,\r\n \"VI\": 850,\r\n \"VN\": 704,\r\n \"VU\": 548,\r\n \"WF\": 876,\r\n \"WS\": 882,\r\n \"YE\": 887,\r\n \"YT\": 175,\r\n \"ZA\": 710,\r\n \"ZM\": 894,\r\n \"ZW\": 716,\r\n};\r\n\r\nconst tokenCurrencyCodes = {\r\n \"AED\": 784,\r\n \"AFN\": 971,\r\n \"ALL\": 8,\r\n \"AMD\": 51,\r\n \"ANG\": 532,\r\n \"AOA\": 973,\r\n \"ARS\": 32,\r\n \"AUD\": 36,\r\n \"AWG\": 533,\r\n \"AZN\": 944,\r\n \"BAM\": 977,\r\n \"BBD\": 52,\r\n \"BDT\": 50,\r\n \"BGN\": 975,\r\n \"BHD\": 48,\r\n \"BIF\": 108,\r\n \"BMD\": 60,\r\n \"BND\": 96,\r\n \"BOB\": 68,\r\n \"BOV\": 984,\r\n \"BRL\": 986,\r\n \"BSD\": 44,\r\n \"BTN\": 64,\r\n \"BWP\": 72,\r\n \"BYN\": 933,\r\n \"BZD\": 84,\r\n \"CAD\": 124,\r\n \"CDF\": 976,\r\n \"CHE\": 947,\r\n \"CHF\": 756,\r\n \"CHW\": 948,\r\n \"CLF\": 990,\r\n \"CLP\": 152,\r\n \"CNY\": 156,\r\n \"COP\": 170,\r\n \"COU\": 970,\r\n \"CRC\": 188,\r\n \"CUC\": 931,\r\n \"CUP\": 192,\r\n \"CVE\": 132,\r\n \"CZK\": 203,\r\n \"DJF\": 262,\r\n \"DKK\": 208,\r\n \"DOP\": 214,\r\n \"DZD\": 12,\r\n \"EGP\": 818,\r\n \"ERN\": 232,\r\n \"ETB\": 230,\r\n \"EUR\": 978,\r\n \"FJD\": 242,\r\n \"FKP\": 238,\r\n \"GBP\": 826,\r\n \"GEL\": 981,\r\n \"GHS\": 936,\r\n \"GIP\": 292,\r\n \"GMD\": 270,\r\n \"GNF\": 324,\r\n \"GTQ\": 320,\r\n \"GYD\": 328,\r\n \"HKD\": 344,\r\n \"HNL\": 340,\r\n \"HRK\": 191,\r\n \"HTG\": 332,\r\n \"HUF\": 348,\r\n \"IDR\": 360,\r\n \"ILS\": 376,\r\n \"INR\": 356,\r\n \"IQD\": 368,\r\n \"IRR\": 364,\r\n \"ISK\": 352,\r\n \"JMD\": 388,\r\n \"JOD\": 400,\r\n \"JPY\": 392,\r\n \"KES\": 404,\r\n \"KGS\": 417,\r\n \"KHR\": 116,\r\n \"KMF\": 174,\r\n \"KPW\": 408,\r\n \"KRW\": 410,\r\n \"KWD\": 414,\r\n \"KYD\": 136,\r\n \"KZT\": 398,\r\n \"LAK\": 418,\r\n \"LBP\": 422,\r\n \"LKR\": 144,\r\n \"LRD\": 430,\r\n \"LSL\": 426,\r\n \"LYD\": 434,\r\n \"MAD\": 504,\r\n \"MDL\": 498,\r\n \"MGA\": 969,\r\n \"MKD\": 807,\r\n \"MMK\": 104,\r\n \"MNT\": 496,\r\n \"MOP\": 446,\r\n \"MRU[11]\": 929,\r\n \"MUR\": 480,\r\n \"MVR\": 462,\r\n \"MWK\": 454,\r\n \"MXN\": 484,\r\n \"MXV\": 979,\r\n \"MYR\": 458,\r\n \"MZN\": 943,\r\n \"NAD\": 516,\r\n \"NGN\": 566,\r\n \"NIO\": 558,\r\n \"NOK\": 578,\r\n \"NPR\": 524,\r\n \"NZD\": 554,\r\n \"OMR\": 512,\r\n \"PAB\": 590,\r\n \"PEN\": 604,\r\n \"PGK\": 598,\r\n \"PHP\": 608,\r\n \"PKR\": 586,\r\n \"PLN\": 985,\r\n \"PYG\": 600,\r\n \"QAR\": 634,\r\n \"RON\": 946,\r\n \"RSD\": 941,\r\n \"RUB\": 643,\r\n \"RWF\": 646,\r\n \"SAR\": 682,\r\n \"SBD\": 90,\r\n \"SCR\": 690,\r\n \"SDG\": 938,\r\n \"SEK\": 752,\r\n \"SGD\": 702,\r\n \"SHP\": 654,\r\n \"SLL\": 694,\r\n \"SOS\": 706,\r\n \"SRD\": 968,\r\n \"SSP\": 728,\r\n \"STN[13]\": 930,\r\n \"SVC\": 222,\r\n \"SYP\": 760,\r\n \"SZL\": 748,\r\n \"THB\": 764,\r\n \"TJS\": 972,\r\n \"TMT\": 934,\r\n \"TND\": 788,\r\n \"TOP\": 776,\r\n \"TRY\": 949,\r\n \"TTD\": 780,\r\n \"TWD\": 901,\r\n \"TZS\": 834,\r\n \"UAH\": 980,\r\n \"UGX\": 800,\r\n \"USD\": 840,\r\n \"USN\": 997,\r\n \"UYI\": 940,\r\n \"UYU\": 858,\r\n \"UYW\": 927,\r\n \"UZS\": 860,\r\n \"VES\": 928,\r\n \"VND\": 704,\r\n \"VUV\": 548,\r\n \"WST\": 882,\r\n \"XAF\": 950,\r\n \"XAG\": 961,\r\n \"XAU\": 959,\r\n \"XBA\": 955,\r\n \"XBB\": 956,\r\n \"XBC\": 957,\r\n \"XBD\": 958,\r\n \"XCD\": 951,\r\n \"XDR\": 960,\r\n \"XOF\": 952,\r\n \"XPD\": 964,\r\n \"XPF\": 953,\r\n \"XPT\": 962,\r\n \"XSU\": 994,\r\n \"XTS\": 963,\r\n \"XUA\": 965,\r\n \"XXX\": 999,\r\n \"YER\": 886,\r\n \"ZAR\": 710,\r\n \"ZMW\": 967,\r\n \"ZWL\": 932,\r\n};","import React, {useState} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {extractLastCardNumbers, getPayerDetailsBuilder} from \"../../actions/InvoiceActions\";\r\nimport { getPayerAccount, getSelectedPrimaryAccount, getSelectedSecondaryAccount, handleDeleteIframe} from \"../../selectors/Selectors\";\r\nimport {deletePaymentMethod} from \"../../requests/TokenRequests\";\r\nimport {deleteSessionCard, deleteSessionCheck} from \"../../reducers/PaymentReducer\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome/index\";\r\nimport {FormattedMessage, useIntl} from 'react-intl';\r\nimport {Modal} from \"react-bootstrap\";\r\nimport { TraceLog } from \"../../interfaces/TraceLog\"\r\nimport * as appConstants from '../../constants/ApplicationConstants';\r\nfunction _PaymentTypeDetails(props) {\r\n const intl = useIntl();\r\n const [show, setShow] = useState(false);\r\n\r\n const handleClose = () => setShow(false);\r\n const handleShow = () => setShow(true);\r\n\r\n function displayText() {\r\n let p = props.payment_card;\r\n let digits = extractLastCardNumbers(p.payment_card_token);\r\n if (p.payment_card_type === 'EC') {\r\n return intl.formatMessage({id: 'payment_methods.echeck_description'}, {digits});\r\n } else {\r\n return intl.formatMessage({id: 'payment_methods.card_description'}, {digits, type: p.payment_card_type});\r\n }\r\n }\r\n\r\n function displayText2() {\r\n let p = props.payment_card;\r\n return `${p.payment_card_name}`;\r\n }\r\n\r\n function getIconImage() {\r\n if (props.payment_card.payment_card_type === 'EC') {\r\n return <FontAwesomeIcon icon={\"money-check\"}/>\r\n } else {\r\n return <FontAwesomeIcon icon={\"credit-card\"}/>;\r\n }\r\n }\r\n\r\n function deletePaymentCard() {\r\n props.deletePaymentMethod(props);\r\n handleDeleteIframe();\r\n } \r\n\r\n return (<div className={'payment-type-details mb-2'}>\r\n <div className={\"payment-type-icon-container\"}>\r\n <span>{getIconImage()}</span>\r\n {props.payment_card.default ?\r\n <span className=\"p-0\" title=\"Default\"><FontAwesomeIcon icon={\"check-circle\"} style={{color:'#1A75BB'}}/></span> : null}\r\n </div>\r\n <div className={\"payment-type-description-container\"}>\r\n <div>\r\n <span className=\"payment-card-description\">{displayText2()}</span>\r\n </div>\r\n <div>\r\n <small className={\"text-muted\"}>\r\n <span className=\"payment-card-description\">{displayText()}</span>\r\n {props.payment_card.is_session && <span>{ intl.formatMessage({id: 'payment_method.session'})}</span>}\r\n </small>\r\n </div>\r\n </div>\r\n <div className={\"payment-type-actions\"}>\r\n <span role={\"button\"} className={\"font-button-icon\"}\r\n onClick={handleShow}>\r\n <FontAwesomeIcon icon={\"trash\"}/> <FormattedMessage id={\"delete\"}/></span>\r\n <span role={\"button\"} className={\"font-button-icon\"}\r\n onClick={() => {\r\n props.onEdit(props.payment_card)\r\n }}>\r\n <FontAwesomeIcon icon={\"edit\"}/> <FormattedMessage id={\"edit\"}/></span>\r\n </div>\r\n <Modal show={show} onHide={handleClose}>\r\n <Modal.Header closeButton>\r\n <Modal.Title><FormattedMessage id={\"confirm_delete\"}/></Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body><FormattedMessage id={\"payment_methods.confirm_delete_card_message\"}/></Modal.Body>\r\n <Modal.Footer>\r\n <button type=\"button\" className=\"btn btn-primary buttonColor buttonsize\" onClick={deletePaymentCard}>\r\n <FormattedMessage id={\"ok\"}/>\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"btn btn-secondary\"\r\n onClick={handleClose}\r\n >\r\n <FormattedMessage id={\"cancel\"}/>\r\n </button>\r\n </Modal.Footer>\r\n </Modal>\r\n </div>)\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n payerAccount: getPayerAccount(state),\r\n primaryAccount: getSelectedPrimaryAccount(state),\r\n secondaryAccount: getSelectedSecondaryAccount(state),\r\n currentUser: state.default.currentUser,\r\n }\r\n}, (dispatch: any) => {\r\n return {\r\n deletePaymentMethod: async (props) => {\r\n let log:TraceLog={\r\n id: \"DEL_PAYMENT_CARD\",\r\n login:props.currentUser.email,\r\n epayv:appConstants.APP_VERSION,\r\n usrag:navigator.userAgent\r\n }\r\n if (props.payment_card.is_session) {\r\n dispatch(deleteSessionCard(props.payment_card, props.payerAccount.PrimaryAcct,log));\r\n dispatch(deleteSessionCheck(props.payment_card, props.payerAccount.PrimaryAcct,log));\r\n } else {\r\n \r\n await deletePaymentMethod(props.payerAccount.PrimaryAcct, props.primaryAccount.CompanyCode, props.payment_card,log);\r\n dispatch(getPayerDetailsBuilder(props.primaryAccount, props.secondaryAccount, props.currentUser.primary_account_type_id));\r\n }\r\n props.onDelete(props.payment_card);\r\n }\r\n }\r\n})(_PaymentTypeDetails);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {getChecksSelector} from \"./PaymentCardsSelectors\";\r\nimport PaymentTypeDetails from \"./PaymentTypeDetails\";\r\nimport {FormattedMessage} from 'react-intl';\r\n\r\nexport class ChecksList extends Component<any, any> {\r\n\r\n render() {\r\n\r\n return <div>{\r\n this.props.checks.map((check, index) => {\r\n return <div key={index}><PaymentTypeDetails payment_card={check} onEdit={this.props.onEdit} onDelete={this.props.onDelete}/></div>\r\n })\r\n }{\r\n this.props.checks.length === 0 && <span><FormattedMessage id={\"payment_methods.checks_empty\"}/></span>\r\n }</div>\r\n }\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n checks: getChecksSelector(state),\r\n }\r\n})(ChecksList);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {getCreditCardsSelector as getCrediCardsSelector} from \"./PaymentCardsSelectors\";\r\nimport PaymentTypeDetails from \"./PaymentTypeDetails\";\r\nimport {FormattedMessage} from 'react-intl';\r\n\r\nexport function CreditCardsList(props) {\r\n return <div>{\r\n props.cards.map((card, index) => {\r\n return <div key={card.payment_card_token}><PaymentTypeDetails payment_card={card} onEdit={props.onEdit} \r\n onDelete={props.onDelete}/></div>\r\n })\r\n }{\r\n props.cards.length === 0 && <span><FormattedMessage id={\"payment_methods.cards_empty\"}/></span>\r\n }</div>\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n cards: getCrediCardsSelector(state),\r\n }\r\n})(CreditCardsList);\r\n","import {createSelector} from 'reselect';\r\n\r\nconst CanManagePaymentMethods = \"CanManagePaymentMethods\";\r\nconst CanEditSystemConfig = \"CanEditSystemConfig\";\r\nconst CanViewUsers = \"CanViewUsers\";\r\nconst CanManageUsers = \"CanManageUsers\";\r\nconst CanImpersonate = \"CanImpersonate\";\r\nconst CanManageRegistrationRequests = \"CanManageRegistrationRequests\";\r\nconst CanMakePayment = \"CanMakePayment\";\r\nconst CanManageOwnSAPAccounts = \"CanManageOwnSAPAccounts\";\r\n\r\nconst getCurrentUser = state => state.default.currentUser;\r\n\r\nexport function userCan(user, permission){\r\n if(user === null || typeof user === \"undefined\"){\r\n return false;\r\n }\r\n return user.Permissions.indexOf(permission) !== -1;\r\n}\r\n\r\nfunction createUserCanSelector(permission){\r\n return createSelector([getCurrentUser], user => {\r\n return userCan(user, permission);\r\n });\r\n}\r\nexport const canManagePaymentMethods = createUserCanSelector(CanManagePaymentMethods);\r\nexport const canEditSystemConfig = createUserCanSelector(CanEditSystemConfig);\r\nexport const canViewUsers = createUserCanSelector(CanViewUsers);\r\nexport const canManageUsers = createUserCanSelector(CanManageUsers);\r\nexport const canImpersonate = createUserCanSelector(CanImpersonate);\r\nexport const canManageRegistrationRequests = createUserCanSelector(CanManageRegistrationRequests);\r\nexport const canMakePayment = createUserCanSelector(CanMakePayment);\r\nexport const canManageOwnSAPAccounts = createUserCanSelector(CanManageOwnSAPAccounts);\r\n\r\n","import {createSelector} from 'reselect';\r\nimport { CompanyCodeDetails, PaymentType } from \"../interfaces/CnbsConfigInterfaces\";\r\nimport { getAppConfiguration, getConfiguration } from \"../requests/ConfigRequests\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {RootState} from \"../reducers/RootReducer\";\r\nimport {getPayerAccount} from \"./Selectors\";\r\nimport {PayerDropdownData} from \"../interfaces/PayerDropdown\";\r\nimport {canMakePayment} from \"./PermissionSelectors\";\r\nimport {isStringNotEmptyOrNull} from \"../utils\";\r\n\r\nconst paymentTypes = state => state.app.config.sap?.data.payment_types;\r\nconst isPartialPaymentsAllowedString = state => state.app.config.sap?.data?.generel_data?.partial_payments_allowed ?? \"\";\r\nconst isCvvRequiredString = state => state.app.config.sap?.data?.generel_data?.cvv_use_control ?? \"1\";\r\ninterface apiparv {\r\n parnam: string;\r\n genky: string;\r\n parval: string;\r\n}\r\n\r\nconst apiparvList = state => state.app.config.sap?.data?.custom_fields?.apiparv ?? new Array<apiparv>();\r\n\r\nexport const isInvoiceOverpaymentAllowed = createSelector([paymentTypes], (payment_types: PaymentType[]) => {\r\n for (let i = 0; i < payment_types.length; i += 1) {\r\n const paymentType = payment_types[i];\r\n if (paymentType.payment_type && paymentType.payment_type === 'O') {\r\n return paymentType.overpayment_allowed === \"X\";\r\n }\r\n }\r\n return false;\r\n});\r\n\r\nconst ALLOW_ECHECK_KEY = 'ZENABLEEC';\r\n\r\nexport const isPartialPaymentsAllowed = createSelector([isPartialPaymentsAllowedString], (allowed) => {\r\n return typeof allowed !== 'undefined' && allowed !== null && allowed === 'X' || allowed === 'R'\r\n});\r\n\r\nexport const isCvvRequired = createSelector([isCvvRequiredString], (isRequired) => {\r\n return typeof isRequired !== 'undefined' && isRequired !== null && isRequired === '1'\r\n});\r\n\r\nexport const companyCodesDepositsEnabled = createSelector([apiparvList], (apiparvList: apiparv[]) => {\r\n return apiparvList.filter(_ => _.parnam === \"ZENABLEDEP\");\r\n});\r\n\r\nexport const companyCodesPaymentsDisabled = createSelector([apiparvList], (apiparvList: apiparv[]) => {\r\n return apiparvList.filter(_ => _.parnam === \"ZDISABLEPY\");\r\n});\r\n\r\n\r\nexport const companyCodesAllowEcheck = createSelector([apiparvList], (apiparvList: apiparv[]) => {\r\n return apiparvList.filter(_ => _.parnam === ALLOW_ECHECK_KEY);\r\n});\r\n\r\n// Function developed for customization\r\nexport function useCanMakeDepositsInternal(companyCode: string | null, config): boolean {\r\n let value = false;\r\n config?.company_codes?.map((item) => {\r\n if (item.company_code === companyCode) {\r\n if (item.enable_deposits === \"X\") {\r\n value= true;\r\n }\r\n\r\n }\r\n });\r\n return value;\r\n}\r\n\r\n// Function developed for customization\r\nexport function useCanMakePaymentsInternal(companyCode: string): boolean {\r\n let value = false;\r\n useSelector<RootState, any>(\r\n state => {\r\n state.app.config.sap?.data?.company_codes?.map((item) => {\r\n if (item.company_code === companyCode) {\r\n if (item.disable_payments === \"X\") {\r\n value= true;\r\n }\r\n }\r\n });\r\n }\r\n );\r\n return value;\r\n}\r\n\r\n\r\n// Function developed for customization\r\nexport function useCanUseEcheck(): boolean {\r\n const config = useSelector<RootState, any>(state => state.app.config.sap?.data);\r\n const payer = useSelector<RootState, PayerDropdownData>(getPayerAccount);\r\n //const canMakeDeposits = useCanMakeDepositsInternal(payer?.CompanyCode, config);\r\n let value = false;\r\n try {\r\n config?.company_codes?.map((item) => {\r\n if (item.company_code === payer.CompanyCode) {\r\n if (item.enable_echeck === \"X\") {\r\n value = true;\r\n }\r\n\r\n }\r\n });\r\n return value;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\n\r\n// Function developed for Nobel\r\nexport function useCanMakeDeposits(): boolean {\r\n const config = useSelector<RootState, any>(state => state.app.config.sap?.data);\r\n const payer = useSelector<RootState, PayerDropdownData>(getPayerAccount);\r\n const canMakeDeposits = useCanMakeDepositsInternal(payer?.CompanyCode, config);\r\n try {\r\n return canMakeDeposits && config && config.payment_types && config.payment_types.find(t => t.payment_type === \"D\") !== \"undefined\" && config.payment_types.find(t => t.payment_type === \"D\").active === \"X\";\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\n\r\n\r\n// Function developed for Nobel\r\nexport function useCanMakePayments(): boolean {\r\n const permissionsCanMakePayment = useSelector<RootState, boolean>(canMakePayment);\r\n const payer = useSelector<RootState, PayerDropdownData>(getPayerAccount);\r\n const companyCanMakePayments = useCanMakePaymentsInternal(payer?.CompanyCode);\r\n try {\r\n return permissionsCanMakePayment && !companyCanMakePayments;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\nexport function useCurrencyKey(): string {\r\n const company_codes = useSelector<RootState, CompanyCodeDetails[]>(state => state.app.config?.sap?.data?.company_codes ?? []);\r\n const payer = useSelector<RootState, PayerDropdownData>(getPayerAccount);\r\n if (isStringNotEmptyOrNull(payer?.CurrencyKey)) {\r\n return payer.CurrencyKey;\r\n }\r\n return company_codes.find(_ => _.company_code === payer?.CompanyCode)?.currency_key ?? \"USD\";\r\n}\r\n\r\nexport function useCurrencyDecimals(currencyKey: string){\r\n const lookup = useCurrencyDecimalLookup();\r\n return lookup(currencyKey);\r\n}\r\n\r\n\r\nexport function useCurrencyDecimalLookup() {\r\n const currency_decimals = useSelector<RootState, Array<{ currkey: string, currdec: number }>>(state => state.app.config.sap?.data?.sapcust?.currency_decimals ?? []);\r\n return (currencyKey: string) => {\r\n let set = currency_decimals.find(_ => _.currkey === currencyKey) ?? { currkey: \"\", currdec: 2};\r\n return set?.currdec ?? 0;\r\n }\r\n}","import React, {Component, useState} from 'react';\r\nimport {connect, useSelector} from 'react-redux';\r\nimport ChecksList from \"../ChecksList\";\r\nimport CreditCardsList from \"../CreditCardsList\";\r\nimport classNames from \"classnames\";\r\nimport {FormattedMessage} from 'react-intl';\r\nimport {useCanUseEcheck} from \"../../../selectors/ConfigSelectors\";\r\n\r\nexport function PaymentCardLists(props) {\r\n const [showCards, setShowCards] = useState(true);\r\n const echecksAvailable = useCanUseEcheck();\r\n // constructor(props) {\r\n // super(props);\r\n // this.state = {\r\n // showCards: true,\r\n // };\r\n // this.showCards = this.showCards.bind(this);\r\n // this.showChecks = this.showChecks.bind(this);\r\n // }\r\n function toggleShowCards() {\r\n setShowCards(true);\r\n props.onTabChange('CC');\r\n }\r\n\r\n function toggleShowChecks() {\r\n setShowCards(false);\r\n props.onTabChange('EC');\r\n }\r\n \r\n let isPaymentDisable = (sessionStorage.getItem(\"isPaymentDisable\")?.toString() === \"true\") ? true : false;\r\n return (<div>\r\n <div className={\"payment-type-tab-container\"}>\r\n <div className={classNames(\"payment-type-tab\", {\"active\": showCards})} onClick={toggleShowCards}>\r\n <FormattedMessage id={\"payment_methods.my_cards\"}/></div>\r\n {echecksAvailable &&\r\n <div className={classNames(\"payment-type-tab\", {\"active\": !showCards})} onClick={toggleShowChecks}>\r\n <FormattedMessage id={\"payment_methods.my_echecks\"}/></div>}\r\n </div>\r\n <div aria-disabled={isPaymentDisable} className={(isPaymentDisable) ? 'is-disabled row' : 'row'}>\r\n {showCards ?\r\n <CreditCardsList onEdit={props.onEdit} onDelete={props.onDelete} /> :\r\n echecksAvailable && <ChecksList onEdit={props.onEdit} onDelete={props.onDelete} />\r\n }\r\n </div>\r\n </div>)\r\n\r\n\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {}\r\n})(PaymentCardLists);\r\n","export const ERROR_PAYMENT_METHOD = \"There was an error processing payment method.\";","import React,{ Component, useState, useEffect, useRef } from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport { extractLastCardNumbers } from \"../../actions/InvoiceActions\";\r\nimport { Formik } from \"formik\";\r\nimport { AddCreditCardSchema, EditCreditCardSchema } from './schemas';\r\nimport { BootstrapError, BootstrapField } from \"../../helpers/Field\";\r\nimport { ERROR_PAYMENT_METHOD } from \"../../constants/ErrorMessages\";\r\nimport moment from \"moment\";\r\nimport * as cardValidator from 'card-validator';\r\nimport { connect } from \"react-redux\"; \r\nimport { ObjectSchema } from \"yup\";\r\nimport { useIntl } from 'react-intl';\r\nimport { valuesIn } from 'lodash';\r\n\r\n\r\ninterface _Props {\r\n save: Function,\r\n paymentMethods: any,\r\n isEditing: boolean,\r\n alwaysSaveOnFile: boolean,\r\n payment: any,\r\n onCardConfirmed: Function\r\n}\r\n\r\nexport function AddCreditCardForm(props:_Props) {\r\n const intl = useIntl();\r\n\r\n let [cvvValidationMessage, setCvvValidationMessage] = useState('');\r\n let [selectedOption, setSelectedOption] = useState('');\r\n let [card_name, setcard_name] = useState('');\r\n let [card_type, setcard_type] = useState('');\r\n let [card_number, setcard_number] = useState('');\r\n let [card_validation_code, setcard_validation_code] = useState('');\r\n let [card_month, setcard_month] = useState('');\r\n let [card_year, setcard_year] = useState('');\r\n const [cardNumber, setCardNumber] = useState('')\r\n\r\n let year = new Date().getFullYear()\r\n const years = Array.from(Array(12)).map((_, i) => year + i);\r\n\r\n const f = (id, defaultMessage) => intl.formatMessage({ id, defaultMessage });\r\n const inputCard = useRef();\r\n\r\n async function saveCard(card) {\r\n \r\n props.save(card);\r\n }\r\n\r\n function buttonText() {\r\n return f(\"credit_card_form.save_card_button\", \"Save Card\");\r\n }\r\n\r\n function resetDetails() {\r\n setcard_name('');\r\n setcard_number('');\r\n setcard_validation_code('');\r\n setcard_month('');\r\n setcard_year('');\r\n } \r\n\r\n function handleselectvalueChange(e) {\r\n let value = e.target.value;\r\n setSelectedOption(value);\r\n setcard_type(value);\r\n resetDetails();\r\n }\r\n\r\n \r\n\r\n function onCardNumberChange(e) {\r\n\r\n if (e.target.value.length > cardNumber.length) {\r\n let value = e.target.value.replace(/\\D/g, \"\");\r\n\r\n if ((/^\\d{0,16}$/).test(value)) { // regular cc number, 16 digits\r\n value = value.replace(/(\\d{4})/, '$1 ').replace(/(\\d{4}) (\\d{4})/, '$1 $2 ').replace(/(\\d{4}) (\\d{4}) (\\d{4})/, '$1 $2 $3 ');\r\n setCardNumber(value) \r\n return value;\r\n }\r\n }\r\n else {\r\n let value = e.target.value.replace(/\\D/g, \"\");\r\n setCardNumber(e.target.value)\r\n if (e.target.value.endsWith(' ')) {\r\n return e.target.value.slice(0, -1)\r\n }\r\n\r\n return e.target.value\r\n }\r\n\r\n return \"\";\r\n\r\n\r\n }\r\n\r\n function renderPaymentMethods() {\r\n if (props.isEditing === true) {\r\n return (<BootstrapField component=\"select\" name=\"card_type\" disabled={props.isEditing} value={props.payment.payment_card_type} onChange={handleselectvalueChange}>\r\n <option value={\"\"}>{f(\"credit_card_form.card_type_label\", \"Type\")}</option>\r\n {props.paymentMethods.indexOf(\"VISA\") !== -1 && <option value=\"VISA\">Visa</option>}\r\n {props.paymentMethods.indexOf(\"MC\") !== -1 && <option value=\"MC\">Master Card</option>}\r\n {props.paymentMethods.indexOf(\"AMEX\") !== -1 && <option value=\"AMEX\">American Express</option>}\r\n </BootstrapField>)\r\n }\r\n else {\r\n return (<BootstrapField component=\"select\" name=\"card_type\" disabled={props.isEditing} value={selectedOption} onChange={handleselectvalueChange}>\r\n <option value={\"\"}>{f(\"credit_card_form.card_type_label\", \"Type\")}</option>\r\n {props.paymentMethods.indexOf(\"VISA\") !== -1 && <option value=\"VISA\">Visa</option>}\r\n {props.paymentMethods.indexOf(\"MC\") !== -1 && <option value=\"MC\">Master Card</option>}\r\n {props.paymentMethods.indexOf(\"AMEX\") !== -1 && <option value=\"AMEX\">American Express</option>}\r\n </BootstrapField>)\r\n }\r\n\r\n }\r\n\r\n let initialValues = {\r\n card_type: selectedOption,\r\n card_name: card_name,\r\n card_number: card_number,\r\n card_validation_code: card_validation_code,\r\n save_on_file: props.alwaysSaveOnFile,\r\n make_default: false,\r\n card_month: card_month,\r\n card_year: year.toString(),\r\n };\r\n let schema : any = AddCreditCardSchema(intl);\r\n if (props.isEditing) {\r\n let date = moment(props.payment.valid_to, \"MM-DD-YYYY\");\r\n initialValues = {\r\n card_type: props.payment.payment_card_type,\r\n card_name: props.payment.payment_card_name,\r\n card_number: `ending in *${extractLastCardNumbers(props.payment.payment_card_token, '-')}`,\r\n card_validation_code: \"\",\r\n save_on_file: !props.payment.is_session,\r\n make_default: props.payment.default === \"X\" ? true : false,\r\n card_month: date.format(\"MM\"),\r\n card_year: date.format(\"YYYY\"),\r\n };\r\n schema = EditCreditCardSchema(intl);\r\n }\r\n return <div>\r\n <div className=\"row\">\r\n <div className=\"col-md-12\">\r\n <Formik\r\n initialValues={initialValues}\r\n validationSchema={\r\n schema\r\n }\r\n validateOnChange={true}\r\n validate={(values) => {\r\n let errors: any = {};\r\n if ( values.card_month=== \"MM\" || values.card_year ==='') {\r\n return;\r\n } \r\n if (!cardValidator.expirationDate({month: values.card_month, year: values.card_year}).isValid) {\r\n errors.card_month = 'Invalid expiration date.';\r\n } \r\n values.card_validation_code = values.card_validation_code.replace(/\\D+/g, '');\r\n if ( \r\n ((values.card_type === \"AMEX\" && values.card_validation_code.length < 4)\r\n || (values.card_type === \"MC\" && (values.card_validation_code.length < 3 || values.card_validation_code.length >= 4))\r\n || (values.card_type === \"VISA\" && (values.card_validation_code.length < 3 || values.card_validation_code.length >= 4)))) {\r\n setCvvValidationMessage(f(\"payment.error.cvv_invalid\", \"\"));\r\n //return false;\r\n errors.card_validation_code = f(\"payment.error.cvv_invalid\", \"\");\r\n } else if (values.card_validation_code.length && values.card_validation_code.length <= 4) {\r\n setCvvValidationMessage(\"\");\r\n //return true;\r\n }\r\n return errors;\r\n }}\r\n enableReinitialize={true}\r\n onSubmit={(values, bag) => {\r\n bag.setSubmitting(true);\r\n saveCard(values).then((paymentcard) => {\r\n bag.setSubmitting(false);\r\n if (props.onCardConfirmed) {\r\n props.onCardConfirmed(paymentcard);\r\n }\r\n }).catch(() => {\r\n toast.error(ERROR_PAYMENT_METHOD, {position: toast.POSITION.TOP_RIGHT});\r\n bag.setSubmitting(false);\r\n });\r\n }}\r\n render={(formProps) => (\r\n <form className='payment-form' onSubmit={formProps.handleSubmit}>\r\n <div className=\"row\">\r\n <div className=\"col-md-6\">\r\n <div className={\"form-group customSelect\"}>\r\n {renderPaymentMethods()}\r\n <i className=\"fas fa-chevron-down select-arrow\"></i>\r\n <BootstrapError name=\"card_type\"/>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-md-12\">\r\n <div className=\"form-group\">\r\n <BootstrapField type=\"text\" name=\"card_name\"\r\n placeholder={f(\"credit_card_form.name_label\", \"Name on Card\")}/>\r\n <BootstrapError name=\"card_name\"/>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-md-12\">\r\n <div className=\"form-group\">\r\n <BootstrapField type=\"text\" name=\"card_number\"\r\n placeholder=\"**** **** **** ****\"\r\n onChange={e => {\r\n formProps.handleChange(e)\r\n const formatedText = onCardNumberChange(e)\r\n formProps.setFieldValue('card_number', formatedText)\r\n }\r\n }\r\n\r\n maxLength=\"19\"\r\n disabled={props.isEditing}/>\r\n <BootstrapError name=\"card_number\"/>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={\"row\"}>\r\n <div className=\"col-md-4 customSelect\">\r\n <BootstrapField component=\"select\" name=\"card_month\" className=\"InvalidIconRemoval\"\r\n placeholder={f(\"credit_card_form.month_label\", \"MM\")}>\r\n <option value=\"\">{f(\"credit_card_form.month_label\", \"MM\")}</option>\r\n <option value=\"01\">{f(\"calendar.months.january\", \"January\")}</option>\r\n <option value=\"02\">{f(\"calendar.months.february\", \"February\")}</option>\r\n <option value=\"03\">{f(\"calendar.months.march\", \"March\")}</option>\r\n <option value=\"04\">{f(\"calendar.months.april\", \"April\")}</option>\r\n <option value=\"05\">{f(\"calendar.months.may\", \"May\")}</option>\r\n <option value=\"06\">{f(\"calendar.months.june\", \"June\")}</option>\r\n <option value=\"07\">{f(\"calendar.months.july\", \"July\")}</option>\r\n <option value=\"08\">{f(\"calendar.months.august\", \"August\")}</option>\r\n <option value=\"09\">{f(\"calendar.months.september\", \"September\")}</option>\r\n <option value=\"10\">{f(\"calendar.months.october\", \"October\")}</option>\r\n <option value=\"11\">{f(\"calendar.months.november\", \"November\")}</option>\r\n <option value=\"12\">{f(\"calendar.months.december\", \"December\")}</option>\r\n </BootstrapField>\r\n <i className=\"fas fa-chevron-down select-arrow\"></i>\r\n <BootstrapError name=\"card_month\"/>\r\n </div>\r\n <div className=\"col-md-1\">\r\n <span className=\"form-label\">/</span>\r\n </div>\r\n <div className=\"col-md-4 customSelect\">\r\n <BootstrapField component=\"select\" name=\"card_year\" className=\"InvalidIconRemoval\"\r\n placeholder={f(\"credit_card_form.year_label\", \"YY\")}>\r\n {years.map(code => {\r\n return (\r\n <option value={code}\r\n key={code}>\r\n {code}\r\n </option>\r\n )\r\n })}\r\n\r\n </BootstrapField>\r\n <i className=\"fas fa-chevron-down select-arrow\"></i>\r\n <BootstrapError name=\"card_year\"/>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className=\"form-group\">\r\n {\r\n formProps.values.card_type != \"AMEX\" ?\r\n <div>\r\n <BootstrapField type=\"text\" name=\"card_validation_code\"\r\n placeholder={f(\"credit_card_form.cvv_label\", \"CVV\")} maxLength={3} minLength={3} />\r\n {\r\n formProps.values.card_type != \"AMEX\" && formProps.values.card_validation_code.length <= 0\r\n ? <BootstrapError name=\"card_validation_code\" /> :\r\n\r\n <h6 className=\"invalid-Text\">\r\n <small>{cvvValidationMessage}</small>\r\n </h6>\r\n }\r\n </div> : <div>\r\n <BootstrapField type=\"text\" name=\"card_validation_code\"\r\n placeholder={f(\"credit_card_form.cvv_label\", \"CVV\")} maxLength={4} minLength={4} />\r\n {\r\n formProps.values.card_type === \"AMEX\" && formProps.values.card_validation_code.length <= 0\r\n ? <BootstrapError name=\"card_validation_code\" /> : <h6 className=\"invalid-Text\">\r\n <small>{cvvValidationMessage}</small>\r\n </h6>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div className={\"row\"}>\r\n {!props.alwaysSaveOnFile &&\r\n !props.isEditing &&\r\n <div className=\"col-md-6\">\r\n <div className=\"form-check\">\r\n <input className=\"form-check-input rounded-circle\" type=\"checkbox\"\r\n checked={formProps.values.save_on_file}\r\n id=\"save_on_file\"\r\n name={\"save_on_file\"} onChange={formProps.handleChange}/>\r\n <label className=\"form-check-label\" htmlFor=\"save_on_file\"\r\n style={{\"paddingLeft\": \"24px\"}}>\r\n {f(\"credit_card_form.save_on_file\", \"Save On File\")}\r\n </label>\r\n </div>\r\n </div>}\r\n <div className=\"col-md-6\">\r\n {formProps.values.save_on_file && <div className=\"form-check\">\r\n <input className=\"form-check-input rounded-circle\" type=\"checkbox\"\r\n checked={formProps.values.make_default}\r\n id=\"make_default\"\r\n name={\"make_default\"} onChange={formProps.handleChange}/>\r\n <label className=\"form-check-label\" htmlFor=\"make_default\"\r\n style={{\"paddingLeft\": \"24px\"}}>\r\n {f(\"credit_card_form.set_as_default\", \"Set as default\")}\r\n </label>\r\n </div>}\r\n </div>\r\n </div>\r\n <div className={\"row\"}>\r\n <div className=\"col-md-12 text-center\">\r\n <button className={\"btn btn-primary buttonColor buttonsize save-card-button\"}\r\n type=\"submit\"\r\n disabled={formProps.isSubmitting}\r\n style={{width:'157px'} }\r\n >{buttonText()}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n )}\r\n />\r\n </div>\r\n </div>\r\n </div>;\r\n\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n paymentMethods: state.app.paymentMethods,\r\n }\r\n})(AddCreditCardForm);\r\n\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {toast} from 'react-toastify';\r\nimport {getPayerAccount, getSelectedPrimaryAccount, getSelectedSecondaryAccount} from \"../../selectors/Selectors\";\r\nimport {extractLastCardNumbers} from \"../../actions/InvoiceActions\";\r\nimport {Formik} from \"formik\";\r\nimport {AddCheckSchema, EditCheckSchema} from \"./schemas\";\r\nimport {BootstrapError, BootstrapField} from \"../../helpers/Field\";\r\nimport {ERROR_PAYMENT_METHOD} from \"../../constants/ErrorMessages\";\r\nimport {ObjectSchema} from \"yup\";\r\nimport {useIntl} from 'react-intl';\r\n\r\ninterface _Props {\r\n save: Function,\r\n paymentMethods: any,\r\n isEditing: boolean,\r\n alwaysSaveOnFile: boolean,\r\n payment: any,\r\n onCardConfirmed: Function,\r\n isDefault: boolean\r\n}\r\n\r\nexport function AddCheckForm(props:_Props) {\r\n const intl = useIntl();\r\n const f = (id, defaultMessage) => intl.formatMessage({id, defaultMessage});\r\n\r\n async function saveCard(card) {\r\n props.save(card);\r\n }\r\n\r\n function buttonText() {\r\n return f(\"echeck_form.save_button\", \"Save eCheck\");\r\n }\r\n\r\n let initialValues = {\r\n electronic_check_account_type: \"\",\r\n name: \"\",\r\n electronic_check_rdfi_number: \"\",\r\n account_number: \"\",\r\n save_on_file: props.alwaysSaveOnFile,\r\n make_default: false,\r\n };\r\n let schema: ObjectSchema<any> = AddCheckSchema(intl);\r\n if (props.isEditing) {\r\n initialValues = {\r\n electronic_check_account_type: props.payment.electronic_check_account_type,\r\n name: props.payment.payment_card_name,\r\n electronic_check_rdfi_number: props.payment.electronic_check_rdfi_number,\r\n account_number: `ending in *${extractLastCardNumbers(props.payment.payment_card_token, '-')}`,\r\n save_on_file: !props.payment.is_session,\r\n make_default: props.payment.default === 'X' ? true :false,\r\n };\r\n schema = EditCheckSchema(intl);\r\n }\r\n return <div>\r\n <Formik\r\n initialValues={\r\n initialValues\r\n }\r\n validationSchema={\r\n schema\r\n }\r\n enableReinitialize={true}\r\n onSubmit={(values, bag) => {\r\n bag.setSubmitting(true);\r\n saveCard(values).then((paymentcard) => {\r\n bag.setSubmitting(false);\r\n if (props.onCardConfirmed) {\r\n props.onCardConfirmed(paymentcard);\r\n }\r\n }).catch(() => {\r\n toast.error(ERROR_PAYMENT_METHOD, {position: toast.POSITION.TOP_RIGHT});\r\n bag.setSubmitting(false);\r\n });\r\n }}\r\n render={(formProps) => (\r\n <form name=\"add_credit_card\" className=\"payment-form\" onSubmit={formProps.handleSubmit}>\r\n {!props.isEditing && <div className=\"row\">\r\n <div className=\"col-md-12\">\r\n <div className=\"form-group customSelect\">\r\n <BootstrapField component=\"select\" name=\"electronic_check_account_type\">\r\n <option value={\"\"}>{f(\"echeck_form.account_type_label\", \"Account Type\")}</option>\r\n <option value=\"C\">{f(\"echeck_form.account_type_checking\", \"Checking\")}</option>\r\n <option value={\"S\"}>{f(\"echeck_form.account_type_savings\", \"Saving Account\")}</option>\r\n <option value={\"X\"}>{f(\"echeck_form.account_type_corporate_checking\", \"Corporate Checking\")}</option>\r\n </BootstrapField>\r\n <i className=\"fas fa-chevron-down select-arrow\"></i>\r\n <BootstrapError name=\"electronic_check_account_type\"/>\r\n </div>\r\n </div>\r\n </div>}\r\n <div className=\"row\">\r\n <div className=\"col-md-12\">\r\n <div className=\"form-group\">\r\n <BootstrapField type=\"text\" name=\"electronic_check_rdfi_number\"\r\n placeholder={f(\"echeck_form.routing_number\", \"Routing Number\")}\r\n disabled={props.isEditing}/>\r\n <BootstrapError name=\"electronic_check_rdfi_number\"/>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-md-12\">\r\n <div className=\"form-group\">\r\n <BootstrapField type=\"text\" name=\"account_number\" placeholder={f(\"echeck_form.account_number\", \"Account Number\")}\r\n disabled={props.isEditing}/>\r\n <BootstrapError name=\"account_number\"/>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-md-12\">\r\n <div className=\"form-group\">\r\n <BootstrapField type=\"text\" name=\"name\" placeholder={f(\"echeck_form.check_holder\", \"Check Holder\")}/>\r\n <BootstrapError name=\"name\"/>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={\"row\"}>\r\n {!props.alwaysSaveOnFile && !props.isEditing && <div className=\"col-md-6\">\r\n <div className=\"form-check\">\r\n <input className=\"form-check-input rounded-circle\" type=\"checkbox\"\r\n checked={formProps.values.save_on_file}\r\n id=\"save_on_file\"\r\n name={\"save_on_file\"} onChange={formProps.handleChange}/>\r\n <label className=\"form-check-label\" htmlFor=\"save_on_file\" style={{\"paddingLeft\": \"24px\"}}>\r\n {f(\"credit_card_form.save_on_file\", \"Save On File\")}\r\n </label>\r\n </div>\r\n </div>}\r\n <div className=\"col-md-6\">\r\n {formProps.values.save_on_file && <div className=\"form-check\">\r\n <input className=\"form-check-input rounded-circle\" type=\"checkbox\"\r\n checked={formProps.values.make_default}\r\n id=\"make_default\"\r\n name={\"make_default\"} onChange={formProps.handleChange}/>\r\n <label className=\"form-check-label\" htmlFor=\"make_default\"\r\n style={{\"paddingLeft\": \"24px\"}}>\r\n {f(\"credit_card_form.set_as_default\", \"Set as default\")}\r\n </label>\r\n </div>}\r\n </div>\r\n </div>\r\n <div className={\"row\"}>\r\n <div className=\"col-md-12 text-center\">\r\n <button className={\"btn btn-primary buttonColor buttonsize save-card-button\"} type=\"submit\"\r\n disabled={formProps.isSubmitting}\r\n style={{width:'157px'} }\r\n >{buttonText()}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n )}/>\r\n </div>;\r\n\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n payerAccount: getPayerAccount(state),\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(state),\r\n selectedSecondaryAccount: getSelectedSecondaryAccount(state),\r\n }\r\n }\r\n)(AddCheckForm);\r\n","import React, {Dispatch, useEffect} from 'react';\r\nimport {useLocation} from \"react-router-dom\";\r\nimport {addPaymentMethod, getPaymentResponse} from \"../../../requests/TokenRequests\";\r\nimport {toast} from \"react-toastify\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {addSessionCard} from \"../../../reducers/PaymentReducer\";\r\nimport {getPayerAccount, getSelectedPrimaryAccount, getSelectedSecondaryAccount} from \"../../../selectors/Selectors\";\r\nimport {getPayerDetailsBuilder, updateSelectedCard} from \"../../../actions/InvoiceActions\";\r\nimport {PaymentCard} from \"../../../interfaces/PayerDetails\";\r\nimport {getAndClearSessionStorage} from \"../../../utils\";\r\nimport {PAYMENT_METHOD_DEFAULT, PAYMENT_METHOD_SAVE} from \"./ManagePaymentMethods\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport * as appConstants from '../../../constants/ApplicationConstants';\r\nimport { TraceLog } from '../../../interfaces/TraceLog';\r\n\r\nexport async function finalizeAddPaymentMethod(access_token: string, save_on_file: boolean, log:any ,make_default: boolean, dispatch, account_number: string, company_code: string) {\r\n let {paymentcard} = await getPaymentResponse(access_token);\r\n // paymentcard.card_validation_code = card.card_validation_code; // TODO this shouldn't be necessary.\r\n // We don't want to do this. pass payment card to props method\r\n if (save_on_file) {\r\n try {\r\n \r\n await addPaymentMethod(account_number, company_code, paymentcard,log, make_default);\r\n } catch (error:any) {\r\n if (error.message_number === 74) {\r\n let matches = error.message_string.match(/Payment card (CCINS) (.*) already exist, action ([0-9]*) not possible/);\r\n toast.error(`${matches[2]} already exists.`, {position: toast.POSITION.TOP_RIGHT});\r\n } else if (error.message_number === 76) {\r\n let matches = error.message_string.match(/Payment card (CCINS) (.*) already assigned to account ([0-9]*)/);\r\n toast.error(`${matches[2]} already assigned to account ${matches[3]}`, {position: toast.POSITION.TOP_RIGHT});\r\n } else {\r\n toast.error(error.message_string, {position: toast.POSITION.TOP_RIGHT});\r\n }\r\n }\r\n } else {\r\n //Add to session payment methods.\r\n await dispatch(addSessionCard(paymentcard, account_number,log));\r\n }\r\n return paymentcard;\r\n}\r\n\r\nexport async function finalizePaymentMethodAndRefresh(accessToken: string, dispatch: Dispatch<any>, payer, primaryAccount, secondaryAccount, currentUser, save_on_file, log,make_default) {\r\n let payment_card: PaymentCard = await finalizeAddPaymentMethod(accessToken, save_on_file, log, make_default, dispatch, payer.PrimaryAcct, primaryAccount.CompanyCode);\r\n await dispatch(getPayerDetailsBuilder(primaryAccount, secondaryAccount, currentUser.primary_account_type_id));\r\n dispatch(updateSelectedCard(payment_card.payment_card_token));\r\n}\r\n\r\nexport function FinalizePaymentProcess() {\r\n const location = useLocation();\r\n const history = useHistory();\r\n const search = new URLSearchParams(location.search);\r\n const accessToken = search.get(\"id\");\r\n const dispatch = useDispatch();\r\n const payer = useSelector<any, any>(getPayerAccount);\r\n const primaryAccount = useSelector<any, any>(getSelectedPrimaryAccount);\r\n const secondaryAccount = useSelector<any, any>(getSelectedSecondaryAccount);\r\n const currentUser = useSelector<any, any>(state => state.default.currentUser);\r\n \r\n\r\n useEffect(() => {\r\n (async () => {\r\n if (accessToken) {\r\n const make_default = getAndClearSessionStorage(PAYMENT_METHOD_DEFAULT, false);\r\n const save_on_file = getAndClearSessionStorage(PAYMENT_METHOD_SAVE, false);\r\n let log:TraceLog={\r\n id: \"ADD_PAYMENT_CARD\",\r\n login:currentUser.email,\r\n epayv: appConstants.APP_VERSION,\r\n usrag:navigator.userAgent\r\n }\r\n await finalizePaymentMethodAndRefresh(accessToken, dispatch, payer, primaryAccount, secondaryAccount, currentUser, save_on_file,log, make_default);\r\n history.replace(location.pathname);\r\n }\r\n })();\r\n }, [accessToken]);\r\n\r\n return (<></>);\r\n}","import React, { Component, useState, useEffect } from 'react';\r\nimport { connect, useDispatch, useSelector } from 'react-redux';\r\nimport PaymentCardLists from \"../payment-card-lists/PaymentCardLists\";\r\nimport AddCreditCardForm from \"../AddCreditCardForm\";\r\nimport AddCheckForm from \"../AddCheckForm\";\r\nimport { getPayerAccount, getSelectedPrimaryAccount, getSelectedSecondaryAccount, handleDeleteIframe } from \"../../../selectors/Selectors\";\r\nimport { toast } from 'react-toastify';\r\nimport {\r\n addPaymentMethod, buildCardinalData,\r\n buildCCRequest, buildECRequest, cardFormToUpdateObject, checkFormToUpdateObject,\r\n getPaymentAccessToken,\r\n getPaymentResponse,\r\n getPaymetricResponse, updatePaymentMethod\r\n} from \"../../../requests/TokenRequests\";\r\nimport { getPayerDetailsBuilder } from \"../../../actions/InvoiceActions\";\r\nimport { addSessionCard, addSessionCheck, updateSessionCard, updateSessionCheck } from \"../../../reducers/PaymentReducer\";\r\nimport { FormattedMessage } from 'react-intl';\r\nimport * as moment from \"moment\";\r\nimport { useCurrencyKey } from \"../../../selectors/ConfigSelectors\";\r\nimport { RootState } from \"../../../reducers/RootReducer\";\r\nimport { finalizePaymentMethodAndRefresh } from \"./FinalizePaymentProcess\";\r\nimport { PaymentOption } from \"../../../interfaces/CnbsConfigInterfaces\";\r\nimport { getAndClearSessionStorage, getPreAuthAmount } from \"../../../utils\";\r\nimport * as appConstants from '../../../constants/ApplicationConstants';\r\nimport { TraceLog } from \"../../../interfaces/TraceLog\"\r\n\r\nexport const PAYMENT_METHOD_DEFAULT = \"PAYMENT_METHOD_DEFAULT\";\r\nexport const PAYMENT_METHOD_SAVE = \"PAYMENT_METHOD_SAVE\";\r\n\r\nexport function ManagePaymentMethods(props: any) {\r\n const [state, setState] = useState<{\r\n type: 'EC' | 'CC',\r\n editingPayment: any,\r\n isEditing: boolean,\r\n }>({\r\n type: 'CC',\r\n editingPayment: null,\r\n isEditing: false,\r\n });\r\n const currency_key = useCurrencyKey();\r\n const secure_3ds_enabled = useSelector<RootState, any>(state => state.app.config.sap?.data?.payment_provider[0]?.secure_3ds_enabled === \"X\");\r\n const secure_3ds_version = useSelector<RootState, any>(state => state.app.config.sap?.data?.payment_provider[0]?.secure_3ds_version);\r\n const dispatch = useDispatch();\r\n const payer = useSelector<any, any>(getPayerAccount);\r\n const primaryAccount = useSelector<any, any>(getSelectedPrimaryAccount);\r\n const secondaryAccount = useSelector<any, any>(getSelectedSecondaryAccount);\r\n const currentUser = useSelector<any, any>(state => state.default.currentUser);\r\n const config_payment_cards = useSelector<RootState, PaymentOption[]>(state => state?.app?.config?.sap?.data.payment_cards ?? []);\r\n let isPaymentDisable = (sessionStorage.getItem(\"isPaymentDisable\")?.toString() === \"true\") ? true : false;\r\n\r\n\r\n function addPaymentMethodComponent() {\r\n setState({ ...state, editingPayment: {}, isEditing: false });\r\n }\r\n\r\n function onTabChange(type) {\r\n setState({ ...state, type: type, editingPayment: null });\r\n //update the parent state with the payment type EC or CC\r\n props.updateState(type);\r\n // props.setEditingPayment(null);\r\n }\r\n\r\n function isEC() {\r\n return state.type === 'EC';\r\n }\r\n\r\n function isCC() {\r\n return state.type === 'CC';\r\n }\r\n\r\n function onCardConfirmed(payment_card) {\r\n setState({ ...state });\r\n \r\n // props.setEditingPayment(null);\r\n }\r\n\r\n const editPayment = function (payment) {\r\n setState({\r\n ...state,\r\n editingPayment: payment,\r\n isEditing: true,\r\n });\r\n };\r\n\r\n async function saveCard(card) {\r\n await processCard(card);\r\n props.getPayerDetailsBuilder(props.primaryAccount, props.secondaryAccount, props.currentUser.primary_account_type_id);\r\n setState({ ...state, editingPayment: null });\r\n handleDeleteIframe();\r\n }\r\n\r\n async function saveCheck(card) {\r\n await processCheck(card);\r\n props.getPayerDetailsBuilder(props.primaryAccount, props.secondaryAccount, props.currentUser.primary_account_type_id);\r\n setState({ ...state, editingPayment: null });\r\n }\r\n\r\n\r\n async function processCheck(card) {\r\n if (state.isEditing) {\r\n let log:TraceLog={\r\n id: \"MOD_PAYMENT_CARD\",\r\n login:currentUser.email,\r\n epayv:appConstants.APP_VERSION,\r\n usrag:navigator.userAgent\r\n }\r\n if (card.save_on_file) {\r\n \r\n let response = await updatePaymentMethod(\r\n props.payerAccount.PrimaryAcct,\r\n props.primaryAccount.CompanyCode,\r\n checkFormToUpdateObject(card, state.editingPayment.payment_card_token),\r\n log,\r\n card.make_default\r\n );\r\n return response;\r\n } else {\r\n props.updateSessionCheck(checkFormToUpdateObject(card, state.editingPayment.payment_card_token), props.payerAccount.PrimaryAcct,log);\r\n }\r\n } else {\r\n const { access_token, merchant_guid, paymetric_xi_url } = await getPaymentAccessToken('EC');\r\n let body = buildECRequest(card, merchant_guid, access_token);\r\n await getPaymetricResponse(paymetric_xi_url, body, \"2.1.0\");\r\n let { paymentcard } = await getPaymentResponse(access_token);\r\n\r\n let log:TraceLog={\r\n id: \"ADD_PAYMENT_CARD\",\r\n login:currentUser.email,\r\n epayv:appConstants.APP_VERSION,\r\n usrag:navigator.userAgent\r\n }\r\n \r\n // We don't want to do pass payment card to props method\r\n if (card.save_on_file) {\r\n\r\n \r\n try {\r\n\r\n \r\n await addPaymentMethod(props.payerAccount.PrimaryAcct, props.primaryAccount.CompanyCode, paymentcard, log,card.make_default);\r\n } catch (error:any) {\r\n if (error.message_number === 74) {\r\n let matches = error.message_string.match(/Payment card (CCINS) (.*) already exist, action ([0-9]*) not possible/);\r\n toast.error(`${matches[2]} already exists.`, { position: toast.POSITION.TOP_RIGHT });\r\n } else if (error.message_number === 76) {\r\n let matches = error.message_string.match(/Payment card (CCINS) (.*) already assigned to account ([0-9]*)/);\r\n toast.error(`${matches[2]} already assigned to account ${matches[3]}`, { position: toast.POSITION.TOP_RIGHT });\r\n } else {\r\n toast.error(error.message_string, { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n }\r\n } else {\r\n props.addSessionCheck(paymentcard, props.payerAccount.PrimaryAcct,log);\r\n }\r\n return paymentcard;\r\n }\r\n }\r\n\r\n async function processCard(card) {\r\n \r\n if (state.isEditing) {\r\n let log:TraceLog={\r\n id: \"MOD_PAYMENT_CARD\",\r\n login:currentUser.email,\r\n epayv:appConstants.APP_VERSION,\r\n usrag:navigator.userAgent\r\n }\r\n if (card.save_on_file) {\r\n \r\n let response = await updatePaymentMethod(\r\n props.payerAccount.PrimaryAcct,\r\n props.primaryAccount.CompanyCode,\r\n cardFormToUpdateObject(card, state.editingPayment.payment_card_token),\r\n log,\r\n card.make_default);\r\n return response;\r\n } else {\r\n props.updateSessionCard(cardFormToUpdateObject(card, state.editingPayment.payment_card_token), props.payerAccount.PrimaryAcct,log);\r\n }\r\n } else {\r\n if (secure_3ds_enabled) {\r\n sessionStorage.setItem(PAYMENT_METHOD_DEFAULT, JSON.stringify(card.make_default));\r\n sessionStorage.setItem(PAYMENT_METHOD_SAVE, JSON.stringify(card.save_on_file));\r\n }\r\n const send_cardinal: boolean = secure_3ds_enabled && card.card_type !== \"AMEX\" && card.save_on_file;\r\n const preauth_amount = getPreAuthAmount(card.card_type, config_payment_cards);\r\n const cardinalData = buildCardinalData(preauth_amount, props.currentUser, props.payerDetails, secure_3ds_version, window.location.href, currency_key);\r\n const { access_token, merchant_guid, paymetric_xi_url } = await getPaymentAccessToken('CC', send_cardinal ? cardinalData : {});\r\n let body = buildCCRequest(card, merchant_guid, access_token);\r\n await getPaymetricResponse(paymetric_xi_url, body, secure_3ds_version);\r\n\r\n getAndClearSessionStorage(PAYMENT_METHOD_DEFAULT, false);\r\n getAndClearSessionStorage(PAYMENT_METHOD_SAVE, false);\r\n\r\n let log:TraceLog={\r\n id: \"ADD_PAYMENT_CARD\",\r\n login:currentUser.email,\r\n epayv:appConstants.APP_VERSION,\r\n usrag:navigator.userAgent\r\n }\r\n await finalizePaymentMethodAndRefresh(access_token, dispatch, payer, primaryAccount, secondaryAccount, currentUser, card.save_on_file,log, card.make_default);\r\n }\r\n }\r\n\r\n function deletePayment(payment) {\r\n if (state.editingPayment && payment.payment_card_token === state.editingPayment.payment_card_token) {\r\n setState({ ...state, editingPayment: null });\r\n }\r\n }\r\n\r\n function managePaymentsMethodAddClick(event) {\r\n handleDeleteIframe();\r\n addPaymentMethodComponent();\r\n }\r\n\r\n\r\n /**/\r\n return <React.Fragment>\r\n <div className=\"row\">\r\n <div className=\"col-md-6\">\r\n <PaymentCardLists onTabChange={onTabChange} onEdit={editPayment}\r\n onDelete={deletePayment} />\r\n <div className={(isPaymentDisable || state.editingPayment) ? 'is-disabled text-center mt-3' : 'text-center mt-3'}>\r\n {isCC() &&\r\n <button className={\"btn btn-primary buttonColor buttonsize \"} style={{ width: \"157px\"}} onClick={managePaymentsMethodAddClick}><FormattedMessage\r\n id={\"payment_methods.add_card_button\"} /></button>}\r\n {isEC() &&\r\n <button className={\"btn btn-primary buttonColor buttonsize\"} style={{ width: \"157px\" }} onClick={addPaymentMethodComponent}><FormattedMessage\r\n id={\"payment_methods.add_check_button\"} /></button>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-6\">\r\n {(state.editingPayment && isCC()) &&\r\n <AddCreditCardForm payment={state.editingPayment} save={saveCard}\r\n isEditing={state.isEditing}\r\n alwaysSaveOnFile={props.alwaysSaveOnFile} />}\r\n {(state.editingPayment && isEC())\r\n &&\r\n <AddCheckForm payment={state.editingPayment} isEditing={state.isEditing} save={saveCheck}\r\n alwaysSaveOnFile={props.alwaysSaveOnFile} />\r\n \r\n }\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n payerAccount: getPayerAccount(state),\r\n primaryAccount: getSelectedPrimaryAccount(state),\r\n secondaryAccount: getSelectedSecondaryAccount(state),\r\n currentUser: state.default.currentUser,\r\n payerDetails: state.default.payerDetails,\r\n selectedType:props.selectedType,\r\n updateType:props.updateState,\r\n }\r\n}, {\r\n getPayerDetailsBuilder,\r\n updateSessionCheck,\r\n addSessionCheck,\r\n updateSessionCard,\r\n addSessionCard,\r\n})(ManagePaymentMethods)\r\n","import React, {useCallback,useEffect,useState} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {mapCards, updateSelectedCard} from \"../../actions/InvoiceActions\";\r\nimport {getAllPaymentOptions} from \"../../selectors/Selectors\";\r\nimport {useIntl} from \"react-intl\";\r\nimport {getCreditCardsSelector as getCrediCardsSelector,getChecksSelector} from \"../payment-methods/PaymentCardsSelectors\";\r\n\r\ninterface PaymentMethodDropdownStoreProps {\r\n allPaymentOptions: any[];\r\n selectedCardIndex: string;\r\n cards:any;\r\n checks:any;\r\n}\r\n\r\ninterface PaymentMethodDropdownDispatchProps {\r\n updateSelectedCard: (selectedCardKey: string) => any;\r\n}\r\n\r\ntype PaymentMethodDropdownProps = PaymentMethodDropdownStoreProps & PaymentMethodDropdownDispatchProps;\r\n\r\nexport function PaymentMethodDropdown(props: PaymentMethodDropdownProps) {\r\n const intl = useIntl();\r\n let [selectedCard, setSelectedCard] = useState('');\r\n const f = id => intl.formatMessage({id: id});\r\n const paymentCardOptions = mapCards(props.allPaymentOptions);\r\n const defaultCard = props.cards.filter((card => card.default === \"X\"));\r\n const defaultCheck = props.checks.filter((check => check.default === \"X\"));\r\n \r\n useEffect(() => {\r\n if((defaultCard && defaultCard.length > 0) && (defaultCard[0].payment_card_token === selectedCard || selectedCard === '')){\r\n props.updateSelectedCard(defaultCard[0].payment_card_token);\r\n }else if((defaultCheck && defaultCheck.length) > 0 && (defaultCheck[0].payment_card_token === selectedCard || selectedCard === '')){\r\n props.updateSelectedCard(defaultCheck[0].payment_card_token);\r\n }\r\n \r\n });\r\n \r\n\r\n \r\n const handlePaymentCardChange = (selectedCard) => {\r\n \r\n if (selectedCard.target.value) {\r\n setSelectedCard(selectedCard.target.value);\r\n props.updateSelectedCard(selectedCard.target.value);\r\n } else {\r\n props.updateSelectedCard(\"\");\r\n }\r\n };\r\n\r\n return (<div className=\"col-lg-8 col-md-6 col-sm-6 text-center mb-3 paymentCustomSelect\">\r\n <select\r\n name=\"paymentStatus\"\r\n placeholder={f(\"payment.pay_with\")}\r\n className=\"form-control\"\r\n value={props.selectedCardIndex}\r\n onChange={handlePaymentCardChange}>\r\n <option value=\"\" disabled>{f(\"payment.pay_with\")}</option>\r\n {paymentCardOptions.map(option => {\r\n return (\r\n <option value={option.value} key={option.index}>\r\n {option.label}\r\n </option>\r\n )\r\n })}\r\n </select>\r\n <i className=\"fas fa-chevron-down select-arrow\"/>\r\n </div>);\r\n}\r\n\r\nexport const PaymentMethodDropdownConnected = connect<PaymentMethodDropdownStoreProps, PaymentMethodDropdownDispatchProps, any, any>((store:any, props:any) => {\r\n return {\r\n allPaymentOptions: getAllPaymentOptions(store),\r\n selectedCardIndex: store.default.selectedCard,\r\n cards: getCrediCardsSelector(store),\r\n checks: getChecksSelector(store),\r\n }\r\n}, {\r\n updateSelectedCard\r\n})(PaymentMethodDropdown);\r\n\r\n","/* eslint-disable no-console */\r\nimport React, {Component} from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { getInvoicePDF } from '../../actions/InvoiceActions';\r\n\r\nclass PdfCell extends Component<any, any> {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleClick = this.handleClick.bind(this);\r\n }\r\n handleClick = () => {\r\n if (this.props.row.pdf_document_available !== undefined) {\r\n this.props.getInvoicePDF(this.props.row);\r\n }\r\n };\r\n\r\n render() {\r\n const { row } = this.props;\r\n if(row && row.pdf_document_available && row.pdf_document_available === 'X'){\r\n return (\r\n <img\r\n src={\"/images/ic_pdf.png\"}\r\n alt=\"pdf\"\r\n key={`${'docId_'}${row.document_number_finance}`}\r\n onClick={this.handleClick}\r\n role=\"presentation\"\r\n />);\r\n } else {\r\n return (<img\r\n src={\"/images/ic_pdf_disabled.png\"}\r\n alt=\"pdf\"\r\n key={`${'docId_'}${row.document_number_finance}`}\r\n onClick={this.handleClick}\r\n role=\"presentation\"\r\n />);\r\n }\r\n }\r\n}\r\n\r\nexport default connect<any, any, any, any>(() => ({}), {\r\n getInvoicePDF\r\n})(PdfCell);\r\n","interface CurrencySymbol{\r\n symbol: string;\r\n name: string;\r\n symbol_native: string;\r\n decimal_digits: number;\r\n rounding: number;\r\n code: string;\r\n name_plural: string;\r\n}\r\n\r\nexport var currencySymbolMap: {[key: string]: CurrencySymbol} = {\r\n \"USD\": {\r\n \"symbol\": \"$\",\r\n \"name\": \"US Dollar\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"USD\",\r\n \"name_plural\": \"US dollars\"\r\n },\r\n \"CAD\": {\r\n \"symbol\": \"CA$\",\r\n \"name\": \"Canadian Dollar\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"CAD\",\r\n \"name_plural\": \"Canadian dollars\"\r\n },\r\n \"EUR\": {\r\n \"symbol\": \"€\",\r\n \"name\": \"Euro\",\r\n \"symbol_native\": \"€\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"EUR\",\r\n \"name_plural\": \"euros\"\r\n },\r\n \"AED\": {\r\n \"symbol\": \"AED\",\r\n \"name\": \"United Arab Emirates Dirham\",\r\n \"symbol_native\": \"د.إ.‏\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"AED\",\r\n \"name_plural\": \"UAE dirhams\"\r\n },\r\n \"AFN\": {\r\n \"symbol\": \"Af\",\r\n \"name\": \"Afghan Afghani\",\r\n \"symbol_native\": \"؋\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"AFN\",\r\n \"name_plural\": \"Afghan Afghanis\"\r\n },\r\n \"ALL\": {\r\n \"symbol\": \"ALL\",\r\n \"name\": \"Albanian Lek\",\r\n \"symbol_native\": \"Lek\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"ALL\",\r\n \"name_plural\": \"Albanian lekë\"\r\n },\r\n \"AMD\": {\r\n \"symbol\": \"AMD\",\r\n \"name\": \"Armenian Dram\",\r\n \"symbol_native\": \"դր.\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"AMD\",\r\n \"name_plural\": \"Armenian drams\"\r\n },\r\n \"ARS\": {\r\n \"symbol\": \"AR$\",\r\n \"name\": \"Argentine Peso\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"ARS\",\r\n \"name_plural\": \"Argentine pesos\"\r\n },\r\n \"AUD\": {\r\n \"symbol\": \"AU$\",\r\n \"name\": \"Australian Dollar\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"AUD\",\r\n \"name_plural\": \"Australian dollars\"\r\n },\r\n \"AZN\": {\r\n \"symbol\": \"man.\",\r\n \"name\": \"Azerbaijani Manat\",\r\n \"symbol_native\": \"ман.\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"AZN\",\r\n \"name_plural\": \"Azerbaijani manats\"\r\n },\r\n \"BAM\": {\r\n \"symbol\": \"KM\",\r\n \"name\": \"Bosnia-Herzegovina Convertible Mark\",\r\n \"symbol_native\": \"KM\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"BAM\",\r\n \"name_plural\": \"Bosnia-Herzegovina convertible marks\"\r\n },\r\n \"BDT\": {\r\n \"symbol\": \"Tk\",\r\n \"name\": \"Bangladeshi Taka\",\r\n \"symbol_native\": \"৳\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"BDT\",\r\n \"name_plural\": \"Bangladeshi takas\"\r\n },\r\n \"BGN\": {\r\n \"symbol\": \"BGN\",\r\n \"name\": \"Bulgarian Lev\",\r\n \"symbol_native\": \"лв.\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"BGN\",\r\n \"name_plural\": \"Bulgarian leva\"\r\n },\r\n \"BHD\": {\r\n \"symbol\": \"BD\",\r\n \"name\": \"Bahraini Dinar\",\r\n \"symbol_native\": \"د.ب.‏\",\r\n \"decimal_digits\": 3,\r\n \"rounding\": 0,\r\n \"code\": \"BHD\",\r\n \"name_plural\": \"Bahraini dinars\"\r\n },\r\n \"BIF\": {\r\n \"symbol\": \"FBu\",\r\n \"name\": \"Burundian Franc\",\r\n \"symbol_native\": \"FBu\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"BIF\",\r\n \"name_plural\": \"Burundian francs\"\r\n },\r\n \"BND\": {\r\n \"symbol\": \"BN$\",\r\n \"name\": \"Brunei Dollar\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"BND\",\r\n \"name_plural\": \"Brunei dollars\"\r\n },\r\n \"BOB\": {\r\n \"symbol\": \"Bs\",\r\n \"name\": \"Bolivian Boliviano\",\r\n \"symbol_native\": \"Bs\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"BOB\",\r\n \"name_plural\": \"Bolivian bolivianos\"\r\n },\r\n \"BRL\": {\r\n \"symbol\": \"R$\",\r\n \"name\": \"Brazilian Real\",\r\n \"symbol_native\": \"R$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"BRL\",\r\n \"name_plural\": \"Brazilian reals\"\r\n },\r\n \"BWP\": {\r\n \"symbol\": \"BWP\",\r\n \"name\": \"Botswanan Pula\",\r\n \"symbol_native\": \"P\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"BWP\",\r\n \"name_plural\": \"Botswanan pulas\"\r\n },\r\n \"BYN\": {\r\n \"symbol\": \"Br\",\r\n \"name\": \"Belarusian Ruble\",\r\n \"symbol_native\": \"руб.\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"BYN\",\r\n \"name_plural\": \"Belarusian rubles\"\r\n },\r\n \"BZD\": {\r\n \"symbol\": \"BZ$\",\r\n \"name\": \"Belize Dollar\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"BZD\",\r\n \"name_plural\": \"Belize dollars\"\r\n },\r\n \"CDF\": {\r\n \"symbol\": \"CDF\",\r\n \"name\": \"Congolese Franc\",\r\n \"symbol_native\": \"FrCD\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"CDF\",\r\n \"name_plural\": \"Congolese francs\"\r\n },\r\n \"CHF\": {\r\n \"symbol\": \"CHF\",\r\n \"name\": \"Swiss Franc\",\r\n \"symbol_native\": \"CHF\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0.05,\r\n \"code\": \"CHF\",\r\n \"name_plural\": \"Swiss francs\"\r\n },\r\n \"CLP\": {\r\n \"symbol\": \"CL$\",\r\n \"name\": \"Chilean Peso\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"CLP\",\r\n \"name_plural\": \"Chilean pesos\"\r\n },\r\n \"CNY\": {\r\n \"symbol\": \"CN¥\",\r\n \"name\": \"Chinese Yuan\",\r\n \"symbol_native\": \"CN¥\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"CNY\",\r\n \"name_plural\": \"Chinese yuan\"\r\n },\r\n \"COP\": {\r\n \"symbol\": \"CO$\",\r\n \"name\": \"Colombian Peso\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"COP\",\r\n \"name_plural\": \"Colombian pesos\"\r\n },\r\n \"CRC\": {\r\n \"symbol\": \"₡\",\r\n \"name\": \"Costa Rican Colón\",\r\n \"symbol_native\": \"₡\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"CRC\",\r\n \"name_plural\": \"Costa Rican colóns\"\r\n },\r\n \"CVE\": {\r\n \"symbol\": \"CV$\",\r\n \"name\": \"Cape Verdean Escudo\",\r\n \"symbol_native\": \"CV$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"CVE\",\r\n \"name_plural\": \"Cape Verdean escudos\"\r\n },\r\n \"CZK\": {\r\n \"symbol\": \"Kč\",\r\n \"name\": \"Czech Republic Koruna\",\r\n \"symbol_native\": \"Kč\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"CZK\",\r\n \"name_plural\": \"Czech Republic korunas\"\r\n },\r\n \"DJF\": {\r\n \"symbol\": \"Fdj\",\r\n \"name\": \"Djiboutian Franc\",\r\n \"symbol_native\": \"Fdj\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"DJF\",\r\n \"name_plural\": \"Djiboutian francs\"\r\n },\r\n \"DKK\": {\r\n \"symbol\": \"Dkr\",\r\n \"name\": \"Danish Krone\",\r\n \"symbol_native\": \"kr\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"DKK\",\r\n \"name_plural\": \"Danish kroner\"\r\n },\r\n \"DOP\": {\r\n \"symbol\": \"RD$\",\r\n \"name\": \"Dominican Peso\",\r\n \"symbol_native\": \"RD$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"DOP\",\r\n \"name_plural\": \"Dominican pesos\"\r\n },\r\n \"DZD\": {\r\n \"symbol\": \"DA\",\r\n \"name\": \"Algerian Dinar\",\r\n \"symbol_native\": \"د.ج.‏\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"DZD\",\r\n \"name_plural\": \"Algerian dinars\"\r\n },\r\n \"EEK\": {\r\n \"symbol\": \"Ekr\",\r\n \"name\": \"Estonian Kroon\",\r\n \"symbol_native\": \"kr\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"EEK\",\r\n \"name_plural\": \"Estonian kroons\"\r\n },\r\n \"EGP\": {\r\n \"symbol\": \"EGP\",\r\n \"name\": \"Egyptian Pound\",\r\n \"symbol_native\": \"ج.م.‏\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"EGP\",\r\n \"name_plural\": \"Egyptian pounds\"\r\n },\r\n \"ERN\": {\r\n \"symbol\": \"Nfk\",\r\n \"name\": \"Eritrean Nakfa\",\r\n \"symbol_native\": \"Nfk\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"ERN\",\r\n \"name_plural\": \"Eritrean nakfas\"\r\n },\r\n \"ETB\": {\r\n \"symbol\": \"Br\",\r\n \"name\": \"Ethiopian Birr\",\r\n \"symbol_native\": \"Br\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"ETB\",\r\n \"name_plural\": \"Ethiopian birrs\"\r\n },\r\n \"GBP\": {\r\n \"symbol\": \"£\",\r\n \"name\": \"British Pound Sterling\",\r\n \"symbol_native\": \"£\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"GBP\",\r\n \"name_plural\": \"British pounds sterling\"\r\n },\r\n \"GEL\": {\r\n \"symbol\": \"GEL\",\r\n \"name\": \"Georgian Lari\",\r\n \"symbol_native\": \"GEL\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"GEL\",\r\n \"name_plural\": \"Georgian laris\"\r\n },\r\n \"GHS\": {\r\n \"symbol\": \"GH₵\",\r\n \"name\": \"Ghanaian Cedi\",\r\n \"symbol_native\": \"GH₵\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"GHS\",\r\n \"name_plural\": \"Ghanaian cedis\"\r\n },\r\n \"GNF\": {\r\n \"symbol\": \"FG\",\r\n \"name\": \"Guinean Franc\",\r\n \"symbol_native\": \"FG\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"GNF\",\r\n \"name_plural\": \"Guinean francs\"\r\n },\r\n \"GTQ\": {\r\n \"symbol\": \"GTQ\",\r\n \"name\": \"Guatemalan Quetzal\",\r\n \"symbol_native\": \"Q\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"GTQ\",\r\n \"name_plural\": \"Guatemalan quetzals\"\r\n },\r\n \"HKD\": {\r\n \"symbol\": \"HK$\",\r\n \"name\": \"Hong Kong Dollar\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"HKD\",\r\n \"name_plural\": \"Hong Kong dollars\"\r\n },\r\n \"HNL\": {\r\n \"symbol\": \"HNL\",\r\n \"name\": \"Honduran Lempira\",\r\n \"symbol_native\": \"L\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"HNL\",\r\n \"name_plural\": \"Honduran lempiras\"\r\n },\r\n \"HRK\": {\r\n \"symbol\": \"kn\",\r\n \"name\": \"Croatian Kuna\",\r\n \"symbol_native\": \"kn\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"HRK\",\r\n \"name_plural\": \"Croatian kunas\"\r\n },\r\n \"HUF\": {\r\n \"symbol\": \"Ft\",\r\n \"name\": \"Hungarian Forint\",\r\n \"symbol_native\": \"Ft\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"HUF\",\r\n \"name_plural\": \"Hungarian forints\"\r\n },\r\n \"IDR\": {\r\n \"symbol\": \"Rp\",\r\n \"name\": \"Indonesian Rupiah\",\r\n \"symbol_native\": \"Rp\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"IDR\",\r\n \"name_plural\": \"Indonesian rupiahs\"\r\n },\r\n \"ILS\": {\r\n \"symbol\": \"₪\",\r\n \"name\": \"Israeli New Sheqel\",\r\n \"symbol_native\": \"₪\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"ILS\",\r\n \"name_plural\": \"Israeli new sheqels\"\r\n },\r\n \"INR\": {\r\n \"symbol\": \"Rs\",\r\n \"name\": \"Indian Rupee\",\r\n \"symbol_native\": \"₹\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"INR\",\r\n \"name_plural\": \"Indian rupees\"\r\n },\r\n \"IQD\": {\r\n \"symbol\": \"IQD\",\r\n \"name\": \"Iraqi Dinar\",\r\n \"symbol_native\": \"د.ع.‏\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"IQD\",\r\n \"name_plural\": \"Iraqi dinars\"\r\n },\r\n \"IRR\": {\r\n \"symbol\": \"IRR\",\r\n \"name\": \"Iranian Rial\",\r\n \"symbol_native\": \"﷼\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"IRR\",\r\n \"name_plural\": \"Iranian rials\"\r\n },\r\n \"ISK\": {\r\n \"symbol\": \"Ikr\",\r\n \"name\": \"Icelandic Króna\",\r\n \"symbol_native\": \"kr\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"ISK\",\r\n \"name_plural\": \"Icelandic krónur\"\r\n },\r\n \"JMD\": {\r\n \"symbol\": \"J$\",\r\n \"name\": \"Jamaican Dollar\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"JMD\",\r\n \"name_plural\": \"Jamaican dollars\"\r\n },\r\n \"JOD\": {\r\n \"symbol\": \"JD\",\r\n \"name\": \"Jordanian Dinar\",\r\n \"symbol_native\": \"د.أ.‏\",\r\n \"decimal_digits\": 3,\r\n \"rounding\": 0,\r\n \"code\": \"JOD\",\r\n \"name_plural\": \"Jordanian dinars\"\r\n },\r\n \"JPY\": {\r\n \"symbol\": \"¥\",\r\n \"name\": \"Japanese Yen\",\r\n \"symbol_native\": \"¥\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"JPY\",\r\n \"name_plural\": \"Japanese yen\"\r\n },\r\n \"KES\": {\r\n \"symbol\": \"Ksh\",\r\n \"name\": \"Kenyan Shilling\",\r\n \"symbol_native\": \"Ksh\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"KES\",\r\n \"name_plural\": \"Kenyan shillings\"\r\n },\r\n \"KHR\": {\r\n \"symbol\": \"KHR\",\r\n \"name\": \"Cambodian Riel\",\r\n \"symbol_native\": \"៛\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"KHR\",\r\n \"name_plural\": \"Cambodian riels\"\r\n },\r\n \"KMF\": {\r\n \"symbol\": \"CF\",\r\n \"name\": \"Comorian Franc\",\r\n \"symbol_native\": \"FC\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"KMF\",\r\n \"name_plural\": \"Comorian francs\"\r\n },\r\n \"KRW\": {\r\n \"symbol\": \"₩\",\r\n \"name\": \"South Korean Won\",\r\n \"symbol_native\": \"₩\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"KRW\",\r\n \"name_plural\": \"South Korean won\"\r\n },\r\n \"KWD\": {\r\n \"symbol\": \"KD\",\r\n \"name\": \"Kuwaiti Dinar\",\r\n \"symbol_native\": \"د.ك.‏\",\r\n \"decimal_digits\": 3,\r\n \"rounding\": 0,\r\n \"code\": \"KWD\",\r\n \"name_plural\": \"Kuwaiti dinars\"\r\n },\r\n \"KZT\": {\r\n \"symbol\": \"KZT\",\r\n \"name\": \"Kazakhstani Tenge\",\r\n \"symbol_native\": \"тңг.\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"KZT\",\r\n \"name_plural\": \"Kazakhstani tenges\"\r\n },\r\n \"LBP\": {\r\n \"symbol\": \"LB£\",\r\n \"name\": \"Lebanese Pound\",\r\n \"symbol_native\": \"ل.ل.‏\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"LBP\",\r\n \"name_plural\": \"Lebanese pounds\"\r\n },\r\n \"LKR\": {\r\n \"symbol\": \"SLRs\",\r\n \"name\": \"Sri Lankan Rupee\",\r\n \"symbol_native\": \"SL Re\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"LKR\",\r\n \"name_plural\": \"Sri Lankan rupees\"\r\n },\r\n \"LTL\": {\r\n \"symbol\": \"Lt\",\r\n \"name\": \"Lithuanian Litas\",\r\n \"symbol_native\": \"Lt\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"LTL\",\r\n \"name_plural\": \"Lithuanian litai\"\r\n },\r\n \"LVL\": {\r\n \"symbol\": \"Ls\",\r\n \"name\": \"Latvian Lats\",\r\n \"symbol_native\": \"Ls\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"LVL\",\r\n \"name_plural\": \"Latvian lati\"\r\n },\r\n \"LYD\": {\r\n \"symbol\": \"LD\",\r\n \"name\": \"Libyan Dinar\",\r\n \"symbol_native\": \"د.ل.‏\",\r\n \"decimal_digits\": 3,\r\n \"rounding\": 0,\r\n \"code\": \"LYD\",\r\n \"name_plural\": \"Libyan dinars\"\r\n },\r\n \"MAD\": {\r\n \"symbol\": \"MAD\",\r\n \"name\": \"Moroccan Dirham\",\r\n \"symbol_native\": \"د.م.‏\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"MAD\",\r\n \"name_plural\": \"Moroccan dirhams\"\r\n },\r\n \"MDL\": {\r\n \"symbol\": \"MDL\",\r\n \"name\": \"Moldovan Leu\",\r\n \"symbol_native\": \"MDL\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"MDL\",\r\n \"name_plural\": \"Moldovan lei\"\r\n },\r\n \"MGA\": {\r\n \"symbol\": \"MGA\",\r\n \"name\": \"Malagasy Ariary\",\r\n \"symbol_native\": \"MGA\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"MGA\",\r\n \"name_plural\": \"Malagasy Ariaries\"\r\n },\r\n \"MKD\": {\r\n \"symbol\": \"MKD\",\r\n \"name\": \"Macedonian Denar\",\r\n \"symbol_native\": \"MKD\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"MKD\",\r\n \"name_plural\": \"Macedonian denari\"\r\n },\r\n \"MMK\": {\r\n \"symbol\": \"MMK\",\r\n \"name\": \"Myanma Kyat\",\r\n \"symbol_native\": \"K\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"MMK\",\r\n \"name_plural\": \"Myanma kyats\"\r\n },\r\n \"MOP\": {\r\n \"symbol\": \"MOP$\",\r\n \"name\": \"Macanese Pataca\",\r\n \"symbol_native\": \"MOP$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"MOP\",\r\n \"name_plural\": \"Macanese patacas\"\r\n },\r\n \"MUR\": {\r\n \"symbol\": \"MURs\",\r\n \"name\": \"Mauritian Rupee\",\r\n \"symbol_native\": \"MURs\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"MUR\",\r\n \"name_plural\": \"Mauritian rupees\"\r\n },\r\n \"MXN\": {\r\n \"symbol\": \"MX$\",\r\n \"name\": \"Mexican Peso\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"MXN\",\r\n \"name_plural\": \"Mexican pesos\"\r\n },\r\n \"MYR\": {\r\n \"symbol\": \"RM\",\r\n \"name\": \"Malaysian Ringgit\",\r\n \"symbol_native\": \"RM\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"MYR\",\r\n \"name_plural\": \"Malaysian ringgits\"\r\n },\r\n \"MZN\": {\r\n \"symbol\": \"MTn\",\r\n \"name\": \"Mozambican Metical\",\r\n \"symbol_native\": \"MTn\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"MZN\",\r\n \"name_plural\": \"Mozambican meticals\"\r\n },\r\n \"NAD\": {\r\n \"symbol\": \"N$\",\r\n \"name\": \"Namibian Dollar\",\r\n \"symbol_native\": \"N$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"NAD\",\r\n \"name_plural\": \"Namibian dollars\"\r\n },\r\n \"NGN\": {\r\n \"symbol\": \"₦\",\r\n \"name\": \"Nigerian Naira\",\r\n \"symbol_native\": \"₦\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"NGN\",\r\n \"name_plural\": \"Nigerian nairas\"\r\n },\r\n \"NIO\": {\r\n \"symbol\": \"C$\",\r\n \"name\": \"Nicaraguan Córdoba\",\r\n \"symbol_native\": \"C$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"NIO\",\r\n \"name_plural\": \"Nicaraguan córdobas\"\r\n },\r\n \"NOK\": {\r\n \"symbol\": \"Nkr\",\r\n \"name\": \"Norwegian Krone\",\r\n \"symbol_native\": \"kr\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"NOK\",\r\n \"name_plural\": \"Norwegian kroner\"\r\n },\r\n \"NPR\": {\r\n \"symbol\": \"NPRs\",\r\n \"name\": \"Nepalese Rupee\",\r\n \"symbol_native\": \"नेरू\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"NPR\",\r\n \"name_plural\": \"Nepalese rupees\"\r\n },\r\n \"NZD\": {\r\n \"symbol\": \"NZ$\",\r\n \"name\": \"New Zealand Dollar\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"NZD\",\r\n \"name_plural\": \"New Zealand dollars\"\r\n },\r\n \"OMR\": {\r\n \"symbol\": \"OMR\",\r\n \"name\": \"Omani Rial\",\r\n \"symbol_native\": \"ر.ع.‏\",\r\n \"decimal_digits\": 3,\r\n \"rounding\": 0,\r\n \"code\": \"OMR\",\r\n \"name_plural\": \"Omani rials\"\r\n },\r\n \"PAB\": {\r\n \"symbol\": \"B/.\",\r\n \"name\": \"Panamanian Balboa\",\r\n \"symbol_native\": \"B/.\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"PAB\",\r\n \"name_plural\": \"Panamanian balboas\"\r\n },\r\n \"PEN\": {\r\n \"symbol\": \"S/.\",\r\n \"name\": \"Peruvian Nuevo Sol\",\r\n \"symbol_native\": \"S/.\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"PEN\",\r\n \"name_plural\": \"Peruvian nuevos soles\"\r\n },\r\n \"PHP\": {\r\n \"symbol\": \"₱\",\r\n \"name\": \"Philippine Peso\",\r\n \"symbol_native\": \"₱\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"PHP\",\r\n \"name_plural\": \"Philippine pesos\"\r\n },\r\n \"PKR\": {\r\n \"symbol\": \"PKRs\",\r\n \"name\": \"Pakistani Rupee\",\r\n \"symbol_native\": \"₨\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"PKR\",\r\n \"name_plural\": \"Pakistani rupees\"\r\n },\r\n \"PLN\": {\r\n \"symbol\": \"zł\",\r\n \"name\": \"Polish Zloty\",\r\n \"symbol_native\": \"zł\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"PLN\",\r\n \"name_plural\": \"Polish zlotys\"\r\n },\r\n \"PYG\": {\r\n \"symbol\": \"₲\",\r\n \"name\": \"Paraguayan Guarani\",\r\n \"symbol_native\": \"₲\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"PYG\",\r\n \"name_plural\": \"Paraguayan guaranis\"\r\n },\r\n \"QAR\": {\r\n \"symbol\": \"QR\",\r\n \"name\": \"Qatari Rial\",\r\n \"symbol_native\": \"ر.ق.‏\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"QAR\",\r\n \"name_plural\": \"Qatari rials\"\r\n },\r\n \"RON\": {\r\n \"symbol\": \"RON\",\r\n \"name\": \"Romanian Leu\",\r\n \"symbol_native\": \"RON\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"RON\",\r\n \"name_plural\": \"Romanian lei\"\r\n },\r\n \"RSD\": {\r\n \"symbol\": \"din.\",\r\n \"name\": \"Serbian Dinar\",\r\n \"symbol_native\": \"дин.\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"RSD\",\r\n \"name_plural\": \"Serbian dinars\"\r\n },\r\n \"RUB\": {\r\n \"symbol\": \"RUB\",\r\n \"name\": \"Russian Ruble\",\r\n \"symbol_native\": \"₽.\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"RUB\",\r\n \"name_plural\": \"Russian rubles\"\r\n },\r\n \"RWF\": {\r\n \"symbol\": \"RWF\",\r\n \"name\": \"Rwandan Franc\",\r\n \"symbol_native\": \"FR\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"RWF\",\r\n \"name_plural\": \"Rwandan francs\"\r\n },\r\n \"SAR\": {\r\n \"symbol\": \"SR\",\r\n \"name\": \"Saudi Riyal\",\r\n \"symbol_native\": \"ر.س.‏\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"SAR\",\r\n \"name_plural\": \"Saudi riyals\"\r\n },\r\n \"SDG\": {\r\n \"symbol\": \"SDG\",\r\n \"name\": \"Sudanese Pound\",\r\n \"symbol_native\": \"SDG\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"SDG\",\r\n \"name_plural\": \"Sudanese pounds\"\r\n },\r\n \"SEK\": {\r\n \"symbol\": \"Skr\",\r\n \"name\": \"Swedish Krona\",\r\n \"symbol_native\": \"kr\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"SEK\",\r\n \"name_plural\": \"Swedish kronor\"\r\n },\r\n \"SGD\": {\r\n \"symbol\": \"S$\",\r\n \"name\": \"Singapore Dollar\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"SGD\",\r\n \"name_plural\": \"Singapore dollars\"\r\n },\r\n \"SOS\": {\r\n \"symbol\": \"Ssh\",\r\n \"name\": \"Somali Shilling\",\r\n \"symbol_native\": \"Ssh\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"SOS\",\r\n \"name_plural\": \"Somali shillings\"\r\n },\r\n \"SYP\": {\r\n \"symbol\": \"SY£\",\r\n \"name\": \"Syrian Pound\",\r\n \"symbol_native\": \"ل.س.‏\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"SYP\",\r\n \"name_plural\": \"Syrian pounds\"\r\n },\r\n \"THB\": {\r\n \"symbol\": \"฿\",\r\n \"name\": \"Thai Baht\",\r\n \"symbol_native\": \"฿\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"THB\",\r\n \"name_plural\": \"Thai baht\"\r\n },\r\n \"TND\": {\r\n \"symbol\": \"DT\",\r\n \"name\": \"Tunisian Dinar\",\r\n \"symbol_native\": \"د.ت.‏\",\r\n \"decimal_digits\": 3,\r\n \"rounding\": 0,\r\n \"code\": \"TND\",\r\n \"name_plural\": \"Tunisian dinars\"\r\n },\r\n \"TOP\": {\r\n \"symbol\": \"T$\",\r\n \"name\": \"Tongan Paʻanga\",\r\n \"symbol_native\": \"T$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"TOP\",\r\n \"name_plural\": \"Tongan paʻanga\"\r\n },\r\n \"TRY\": {\r\n \"symbol\": \"TL\",\r\n \"name\": \"Turkish Lira\",\r\n \"symbol_native\": \"TL\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"TRY\",\r\n \"name_plural\": \"Turkish Lira\"\r\n },\r\n \"TTD\": {\r\n \"symbol\": \"TT$\",\r\n \"name\": \"Trinidad and Tobago Dollar\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"TTD\",\r\n \"name_plural\": \"Trinidad and Tobago dollars\"\r\n },\r\n \"TWD\": {\r\n \"symbol\": \"NT$\",\r\n \"name\": \"New Taiwan Dollar\",\r\n \"symbol_native\": \"NT$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"TWD\",\r\n \"name_plural\": \"New Taiwan dollars\"\r\n },\r\n \"TZS\": {\r\n \"symbol\": \"TSh\",\r\n \"name\": \"Tanzanian Shilling\",\r\n \"symbol_native\": \"TSh\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"TZS\",\r\n \"name_plural\": \"Tanzanian shillings\"\r\n },\r\n \"UAH\": {\r\n \"symbol\": \"₴\",\r\n \"name\": \"Ukrainian Hryvnia\",\r\n \"symbol_native\": \"₴\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"UAH\",\r\n \"name_plural\": \"Ukrainian hryvnias\"\r\n },\r\n \"UGX\": {\r\n \"symbol\": \"USh\",\r\n \"name\": \"Ugandan Shilling\",\r\n \"symbol_native\": \"USh\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"UGX\",\r\n \"name_plural\": \"Ugandan shillings\"\r\n },\r\n \"UYU\": {\r\n \"symbol\": \"$U\",\r\n \"name\": \"Uruguayan Peso\",\r\n \"symbol_native\": \"$\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"UYU\",\r\n \"name_plural\": \"Uruguayan pesos\"\r\n },\r\n \"UZS\": {\r\n \"symbol\": \"UZS\",\r\n \"name\": \"Uzbekistan Som\",\r\n \"symbol_native\": \"UZS\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"UZS\",\r\n \"name_plural\": \"Uzbekistan som\"\r\n },\r\n \"VEF\": {\r\n \"symbol\": \"Bs.F.\",\r\n \"name\": \"Venezuelan Bolívar\",\r\n \"symbol_native\": \"Bs.F.\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"VEF\",\r\n \"name_plural\": \"Venezuelan bolívars\"\r\n },\r\n \"VND\": {\r\n \"symbol\": \"₫\",\r\n \"name\": \"Vietnamese Dong\",\r\n \"symbol_native\": \"₫\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"VND\",\r\n \"name_plural\": \"Vietnamese dong\"\r\n },\r\n \"XAF\": {\r\n \"symbol\": \"FCFA\",\r\n \"name\": \"CFA Franc BEAC\",\r\n \"symbol_native\": \"FCFA\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"XAF\",\r\n \"name_plural\": \"CFA francs BEAC\"\r\n },\r\n \"XOF\": {\r\n \"symbol\": \"CFA\",\r\n \"name\": \"CFA Franc BCEAO\",\r\n \"symbol_native\": \"CFA\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"XOF\",\r\n \"name_plural\": \"CFA francs BCEAO\"\r\n },\r\n \"YER\": {\r\n \"symbol\": \"YR\",\r\n \"name\": \"Yemeni Rial\",\r\n \"symbol_native\": \"ر.ي.‏\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"YER\",\r\n \"name_plural\": \"Yemeni rials\"\r\n },\r\n \"ZAR\": {\r\n \"symbol\": \"R\",\r\n \"name\": \"South African Rand\",\r\n \"symbol_native\": \"R\",\r\n \"decimal_digits\": 2,\r\n \"rounding\": 0,\r\n \"code\": \"ZAR\",\r\n \"name_plural\": \"South African rand\"\r\n },\r\n \"ZMK\": {\r\n \"symbol\": \"ZK\",\r\n \"name\": \"Zambian Kwacha\",\r\n \"symbol_native\": \"ZK\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"ZMK\",\r\n \"name_plural\": \"Zambian kwachas\"\r\n },\r\n \"ZWL\": {\r\n \"symbol\": \"ZWL$\",\r\n \"name\": \"Zimbabwean Dollar\",\r\n \"symbol_native\": \"ZWL$\",\r\n \"decimal_digits\": 0,\r\n \"rounding\": 0,\r\n \"code\": \"ZWL\",\r\n \"name_plural\": \"Zimbabwean Dollar\"\r\n }\r\n};","/* eslint-env browser */\r\n/* eslint-disable no-console */\r\nimport React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport PdfCell from \"../components/invoice/PdfCell\";\r\nimport { Invoice } from \"../interfaces/invoice\";\r\nimport { IntlShape, useIntl } from \"react-intl\";\r\nimport { isStringNotEmptyOrNull } from \"../utils\";\r\nimport { currencySymbolMap } from \"../helpers/CurrencySymbols\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { setActiveInvoice } from \"../actions/InvoiceActions\";\r\nimport moment from \"moment\";\r\nimport { CurrencyDisplay } from \"./CurrencyDisplay\";\r\n\r\nexport function isCredit(invoice: Invoice): boolean {\r\n return typeof invoice.open_amount !== \"undefined\" && invoice.open_amount < 0;\r\n}\r\n\r\nexport function isInvoice(invoice: Invoice): boolean {\r\n return (\r\n typeof invoice.open_amount !== \"undefined\" &&\r\n invoice.open_amount >= 0 &&\r\n !isPayment(invoice)\r\n );\r\n}\r\n\r\nexport function isPayment(invoice: Invoice): boolean {\r\n return invoice?.clearing_date ?? \"\" !== \"\";\r\n}\r\n\r\ntype Result<T> = [Error, null] | [null, T];\r\n\r\nexport function unwrap<T>(result: Result<T>) {\r\n if (result[0]) {\r\n // Here 'error' is non-null\r\n throw result[0];\r\n }\r\n\r\n // Now 'data' is non-null\r\n return result[1];\r\n}\r\n\r\nexport function sapDateToDate(dateStr: string): Result<Date> {\r\n const datearray: any = dateStr.split(\"-\");\r\n const date = new Date(datearray[2], datearray[0] - 1, datearray[1]);\r\n return [null, date];\r\n}\r\n\r\nexport function paidFormatter(cell, row: Invoice) {\r\n if (isCredit(row)) {\r\n return \"\";\r\n }\r\n return moneyTableCell(cell, row);\r\n}\r\n\r\nexport function moneyTableCell(cell, row: Invoice) {\r\n return (\r\n <span className=\"main-table-cell\">\r\n <CurrencyDisplay currency={row.currency_key} value={cell} />\r\n </span>\r\n );\r\n}\r\n\r\nexport function csvMoneyFormatter(intl: IntlShape) {\r\n return function (cell, row: Invoice) {\r\n return cell ?? \"\";\r\n };\r\n}\r\n\r\nexport function amountFormatter(cell, row) {\r\n return <CurrencyDisplay currency={row.currency_key} value={cell} />;\r\n}\r\n\r\nexport function getCurrencySymbol(currency_key: string): string {\r\n return currencySymbolMap[currency_key]?.symbol_native ?? \"\";\r\n}\r\n\r\nexport function pdfFormatter(cell, row) {\r\n return <PdfCell row={row} />;\r\n}\r\n\r\nexport function dateFormatter(cell) {\r\n return <_DateFormatter cell={cell} />;\r\n}\r\n\r\nexport function csvDateFormatter(intl: IntlShape) {\r\n return function (cell) {\r\n if (isStringNotEmptyOrNull(cell)) {\r\n let date = unwrap(sapDateToDate(cell));\r\n return intl.formatDate(date);\r\n }\r\n return \"\";\r\n };\r\n}\r\n\r\nfunction _DateFormatter(props) {\r\n const intl = useIntl();\r\n const datearray = props.cell.split(\"-\");\r\n const newDate = new Date(datearray[2], datearray[0] - 1, datearray[1]);\r\n return <span className=\"main-table-cell\">{intl.formatDate(newDate)}</span>;\r\n}\r\n\r\nexport function statusFormatter(cell, row: Invoice, index) {\r\n return <_StatusFormatter row={row} />;\r\n}\r\n\r\nexport function csvStatusFormatter(intl: IntlShape) {\r\n return function (cell, row: Invoice, index) {\r\n let f = (id) => intl.formatMessage({ id: id });\r\n if (isCredit(row)) {\r\n return f(\"invoice_table.credit\");\r\n }\r\n if ((row?.clearing_date ?? \"\" != \"\") || row?.clearing_date != undefined) {\r\n return f(\"invoice_table.paid\");\r\n }\r\n if (row.item_is_a_payment == \"X\" || row.item_is_a_payment != undefined) {\r\n return f(\"invoice_table.paid\");\r\n }\r\n return f(\"invoice_table.open\");\r\n };\r\n}\r\nexport const statementIdFormatter = (props:{ statementId }, row: Invoice) => {\r\n //const displayValue = props.statementId ?? \"N/A\";\r\n //console.log(displayValue);\r\n //return <span className=\"main-table-cell\">{displayValue} </span>;\r\n};\r\n\r\n\r\nfunction _StatusFormatter(props: { row: Invoice }) {\r\n const intl = useIntl();\r\n let f = (id) => intl.formatMessage({ id: id });\r\n if (props.row?.clearing_date ?? \"\" != \"\") {\r\n return <span className=\"main-table-cell\">{f(\"invoice_table.paid\")}</span>;\r\n }\r\n if (isCredit(props.row)) {\r\n return <span className=\"main-table-cell\">{f(\"invoice_table.credit\")}</span>;\r\n }\r\n return <span className=\"main-table-cell\">{f(\"invoice_table.open\")}</span>;\r\n}\r\n\r\n// function DocumentNumberFormatterComponent(props: { cell: any, row: Invoice }) {\r\n// const dispatch = useDispatch();\r\n\r\n// function onClick() {\r\n// dispatch(setActiveInvoice(props.row));\r\n// }\r\n\r\n// let docNumber = '';\r\n// if (props.row.billing_document_number) {\r\n// docNumber = removeLeadingZeros(props.row.billing_document_number);\r\n// let path = `${'/invoices/detail/'}${docNumber}`;\r\n\r\n// // @ts-ignore this formatter is being passed to table. this.onContinueClick there may be a cleaner way to do this.\r\n// return (<Link id={docNumber} href={path} to={path} onClick={\r\n// onClick\r\n// }><span className=\"detail-link\">{docNumber}</span></Link>);\r\n// }\r\n// if (!props.row.billing_document_number && props.row.document_number_finance) {\r\n// docNumber = props.row.document_number_finance;\r\n// }\r\n// return (<span className=\"main-table-cell\">{docNumber}</span>);\r\n// }\r\n\r\nexport function documentNumberFormatter(cell, row: Invoice) {\r\n return <DocumentNumberFormatterComponent cell={cell} row={row} />;\r\n}\r\n\r\nfunction DocumentNumberFormatterComponent(props: { cell: any; row: Invoice }) {\r\n const dispatch = useDispatch();\r\n \r\n\r\n function onClick() {\r\n dispatch(setActiveInvoice(props.row));\r\n }\r\n let docNumber = \"\"\r\n let path = \"\"\r\n\r\n if (props.row.finance_document_type === 'Z4') {\r\n docNumber = props.row.reference_number\r\n }\r\n else {\r\n if (props.row.billing_document_number !== \"0\" && props.row.item_is_a_payment !== \"X\") {\r\n docNumber = removeLeadingZeros(props.row.billing_document_number);\r\n path = `${\"/invoices/detail/\"}${docNumber}`;\r\n }\r\n else {\r\n docNumber = props.row.document_number_finance;\r\n }\r\n }\r\n\r\n if (path !== \"\") {\r\n return (\r\n <div>\r\n <Link id={docNumber} href={path} to={path} onClick={onClick}>\r\n <span className=\"detail-link\">{docNumber}</span>\r\n </Link>\r\n </div>\r\n )\r\n }\r\n else {\r\n return (\r\n <span className=\"main-table-cell\">{docNumber}</span>\r\n );\r\n }\r\n}\r\n\r\nexport function csvDocumentNumberFormatter(intl: IntlShape) {\r\n return function (cell, row: Invoice) {\r\n \r\n\r\n let docNumber = \"\"\r\n\r\n if (row.finance_document_type === 'Z4') {\r\n docNumber = row.reference_number\r\n }\r\n else {\r\n if (row.billing_document_number !== \"0\") {\r\n docNumber = removeLeadingZeros(row.billing_document_number);\r\n }\r\n else {\r\n docNumber = row.document_number_finance;\r\n }\r\n }\r\n return docNumber;\r\n };\r\n}\r\n\r\nexport function referenceFormatter(cell) {\r\n if (cell) {\r\n if (isNaN(cell)) {\r\n return <span className=\"main-table-cell\">{cell}</span>;\r\n } else {\r\n return (\r\n <span className=\"main-table-cell\">{removeLeadingZeros(cell)}</span>\r\n );\r\n }\r\n }\r\n return \"\";\r\n}\r\n\r\nexport function csvReferenceFormatter(intl: IntlShape) {\r\n return function (cell) {\r\n if (cell) {\r\n if (isNaN(cell)) {\r\n return cell;\r\n } else {\r\n return removeLeadingZeros(cell);\r\n }\r\n }\r\n return \"\";\r\n };\r\n}\r\n\r\nexport function paymentStatusTypeFormatter(cell) {\r\n if (cell === \"S\") {\r\n return <span style={{ color: \"green\" }}>{\"Success\"}</span>;\r\n }\r\n return <span style={{ color: \"red\" }}>{\"Error\"}</span>;\r\n}\r\n\r\nexport function invoiceTotalFormatter(total) {\r\n if (total > 0) {\r\n return <span style={{ color: \"green\" }}>{total}</span>;\r\n }\r\n return <span style={{ color: \"red\" }}>{total}</span>;\r\n}\r\n\r\nexport function dueFormatter(cell, row: Invoice) {\r\n return <_DueFormatter row={row} cell={cell} />;\r\n}\r\n\r\nexport function csvDueDateFormatter(intl: IntlShape) {\r\n return function (cell, row: Invoice) {\r\n if (isCredit(row) || row.item_is_a_payment === \"X\") {\r\n return \"\";\r\n }\r\n const newDate = unwrap(sapDateToDate(cell));\r\n const todaysDate = new Date();\r\n\r\n if (newDate >= todaysDate) {\r\n return intl.formatDate(newDate);\r\n }\r\n return intl.formatDate(newDate);\r\n };\r\n}\r\n\r\nfunction _DueFormatter(props: { row: Invoice; cell: any }) {\r\n const intl = useIntl();\r\n\r\n if (isCredit(props.row) || isPayment(props.row)) {\r\n return null;\r\n }\r\n const newDate = unwrap(sapDateToDate(props.cell));\r\n const todaysDate = new Date();\r\n if (newDate >= todaysDate) {\r\n return (\r\n <span className=\"main-table-cell status-good\">\r\n {intl.formatDate(newDate)}\r\n </span>\r\n );\r\n }\r\n return (\r\n <span className=\"main-table-cell status-bad\">\r\n {intl.formatDate(newDate)}\r\n </span>\r\n );\r\n}\r\n\r\nexport function isOverDue(invoice: Invoice) {\r\n const datearray: any = invoice.due_date.split(\"-\");\r\n const dueDate = new Date(datearray[2], datearray[0] - 1, datearray[1]);\r\n const todaysDate = new Date();\r\n return dueDate < todaysDate;\r\n}\r\n\r\nexport function daysToPayFormatter(cell, row: Invoice) {\r\n if (isCredit(row) || isPayment(row)) {\r\n return null;\r\n }\r\n if (!isOverDue(row)) {\r\n return <span className=\"main-table-cell status-good\">{cell}</span>;\r\n }\r\n return <span className=\"main-table-cell status-bad\">-{cell ?? \"0\"}</span>;\r\n}\r\n\r\nexport function csvDaysToPayFormatter(intl: IntlShape) {\r\n return function (cell, row: Invoice) {\r\n if (\r\n isCredit(row) ||\r\n row.item_is_a_payment === \"X\" ||\r\n typeof cell === \"undefined\" ||\r\n cell === null\r\n ) {\r\n return \"\";\r\n }\r\n if (!isOverDue(row)) {\r\n return parseInt(cell);\r\n }\r\n return parseInt(cell) * -1;\r\n };\r\n}\r\n\r\nexport function calculateUnitPrice(cell, row) {\r\n if (row.total_amount && row.billed_quantity) {\r\n const unitPrice = row.total_amount / row.billed_quantity;\r\n return (\r\n <span className=\"main-table-cell\">\r\n <CurrencyDisplay currency={row.currency_key} value={unitPrice} />\r\n </span>\r\n );\r\n }\r\n return (\r\n <span className=\"main-table-cell\">\r\n <small />\r\n </span>\r\n );\r\n}\r\n\r\nexport function formatTotal(cell, row: Invoice) {\r\n if (row.total_amount) {\r\n return (\r\n <span className=\"main-table-cell\" style={{ fontFamily: 'sans-serif' }}>\r\n <CurrencyDisplay currency={row.currency_key} value={row.total_amount} />\r\n </span>\r\n );\r\n }\r\n return (\r\n <span className=\"main-table-cell\">\r\n <small />\r\n </span>\r\n );\r\n}\r\n\r\nexport function formatColumn(cell) {\r\n if (cell) {\r\n return <span className=\"main-table-cell\">{cell}</span>;\r\n }\r\n return \"\";\r\n}\r\n\r\nexport function formatColumnRemoveLeading(cell) {\r\n if (cell) {\r\n return <span className=\"main-table-cell\">{removeLeadingZeros(cell)}</span>;\r\n }\r\n return \"\";\r\n}\r\n\r\nexport function removeLeadingZeros(item: string): string {\r\n return item?.replace(/^0+/, \"\");\r\n}\r\n\r\nexport function soldToFormatter(cell, row: Invoice) {\r\n if (row.zzcustom && row.zzcustom.soldtoad) {\r\n let address = row.zzcustom.soldtoad;\r\n return renderAddressForTable(address);\r\n } else {\r\n return cell;\r\n }\r\n}\r\n\r\nfunction renderAddressForTable(address) {\r\n return (\r\n <div>\r\n <div>{address.name}</div>\r\n <div>{address.street}</div>\r\n <div>\r\n {address.city}, {address.region}, {address.country}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function payerFormatter(cell, row: Invoice) {\r\n if (row.zzcustom && row.zzcustom.payerad) {\r\n let address = row.zzcustom.payerad;\r\n return renderAddressForTable(address);\r\n } else {\r\n return cell;\r\n }\r\n}\r\n\r\nexport function reasonFormatter(\r\n cell,\r\n row: { reason: { description: string }; reason_message: string }\r\n) {\r\n if (row.reason) {\r\n return (\r\n <span>\r\n {row.reason.description}\r\n <br />\r\n {row.reason_message}\r\n </span>\r\n );\r\n } else {\r\n return <span></span>;\r\n }\r\n}\r\n\r\nexport function createInvoice(overrides: Partial<Invoice>): Invoice {\r\n let i: Invoice = {\r\n billing_document_number: \"\",\r\n clearing_date: \"\",\r\n clearing_document_number_finance: \"\",\r\n currency_key: \"\",\r\n days_in_arrears: 1,\r\n document_date: \"\",\r\n document_number_finance: \"\",\r\n due_date: \"\",\r\n finance_document_only: \"\",\r\n finance_document_type: \"\",\r\n fiscal_year_of_the_relevant_invoice: 2018,\r\n item_is_a_payment: \"\",\r\n line_item_in_the_relevant_invoice: 1,\r\n open_amount: 10,\r\n paid_amount: 10,\r\n payer_number: \"\",\r\n pdf_document_available: \"\",\r\n posting_date: \"\",\r\n read_only_flag: \"\",\r\n reference_number: \"\",\r\n soldto_number: \"\",\r\n total_amount: 20,\r\n STATEMENT_ID: \"\",\r\n customer_number: \"\"\r\n };\r\n\r\n for (let prop in overrides) {\r\n i[prop] = overrides[prop];\r\n }\r\n\r\n return i;\r\n}\r\n\r\nexport function getPastYears(pastYears: number) {\r\n let years = [moment().year()];\r\n for (let i = 0; i < pastYears - 1; i++) {\r\n years.push(\r\n moment()\r\n .add(-(i + 1), \"years\")\r\n .year()\r\n );\r\n }\r\n return years;\r\n}\r\n\r\nexport function dueDateSort(rowA: Invoice, rowB: Invoice, order) {\r\n if (isInvoice(rowA) && isInvoice(rowB)) {\r\n return sortStringDate(rowA.due_date, rowB.due_date, order);\r\n }\r\n if (isInvoice(rowA) && !isInvoice(rowB)) {\r\n return -1;\r\n }\r\n if (isInvoice(rowB) && !isInvoice(rowA)) {\r\n return 1;\r\n }\r\n if (isCredit(rowA) && !isCredit(rowB)) {\r\n return -1;\r\n }\r\n if (isCredit(rowB) && !isCredit(rowA)) {\r\n return 1;\r\n }\r\n if (isCredit(rowA) && isCredit(rowB)) {\r\n return sortStringDate(rowA.document_date, rowB.document_date, order);\r\n }\r\n return sortStringDate(rowA.document_date, rowB.document_date, order);\r\n}\r\nexport function sortStringDate(a: string, b: string, order: \"asc\" | \"desc\") {\r\n let aDate = moment(a, \"MM-DD-YYYY\");\r\n let bDate = moment(b, \"MM-DD-YYYY\");\r\n if (order === \"desc\") {\r\n let diff = aDate.diff(bDate, \"days\");\r\n return diff;\r\n } else {\r\n let diff = bDate.diff(aDate, \"days\");\r\n return diff;\r\n }\r\n}\r\nexport function querySort(rowA: Invoice, rowB: Invoice) {\r\n if (isInvoice(rowA) && isInvoice(rowB)) {\r\n return sortStringDate(rowA.due_date, rowB.due_date, \"desc\");\r\n }\r\n if (isInvoice(rowA) && !isInvoice(rowB)) {\r\n return -1;\r\n }\r\n if (isInvoice(rowB) && !isInvoice(rowA)) {\r\n return 1;\r\n }\r\n if (isCredit(rowA) && !isCredit(rowB)) {\r\n return -1;\r\n }\r\n if (isCredit(rowB) && !isCredit(rowA)) {\r\n return 1;\r\n }\r\n if (isCredit(rowA) && isCredit(rowB)) {\r\n return sortStringDate(rowA.document_date, rowB.document_date, \"desc\");\r\n }\r\n return sortStringDate(rowA.document_date, rowB.document_date, \"desc\");\r\n}\r\n\r\n// export function isMobileDevice() {\r\n// if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {\r\n// return true\r\n// }\r\n// else {\r\n// return false\r\n// }\r\n\r\n// };\r\n","import React from \"react\";\r\nimport {getCurrencySymbol} from \"./invoiceHelpers\";\r\nimport {FormattedNumber, IntlShape} from \"react-intl\";\r\n\r\nexport function CurrencyString(value: number, currency: string, intl: IntlShape) {\r\n let isNegative = false;\r\n let displayValue = value;\r\n if (value < 0) {\r\n isNegative = true;\r\n displayValue = Math.abs(value);\r\n }\r\n return `${isNegative ? \"-\" : \"\"}${getCurrencySymbol(currency)} ${intl.formatNumber(displayValue, {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2\r\n })}`;\r\n}\r\n\r\n\r\nexport function CurrencySymbol(currency: string) {\r\n return `${getCurrencySymbol(currency)}`; \r\n}\r\n\r\nexport function CurrencyDisplay(props: { currency: string, value: any }) {\r\n let displayValue = props.value ?? 0;\r\n if(displayValue == 0){\r\n displayValue = '0.00';\r\n }\r\n let isNegative = false;\r\n if (props.value < 0) {\r\n isNegative = true;\r\n displayValue = Math.abs(props.value);\r\n }\r\n\r\n if (Number.isNaN(props.value)) {\r\n displayValue = 0;\r\n }\r\n\r\n if (props.currency == \"JPY\") {\r\n return (<>\r\n <span>{isNegative && \"-\"}{getCurrencySymbol(props.currency)} </span> < FormattedNumber\r\n value={displayValue}\r\n currency={props.currency}\r\n /></>)\r\n } else {\r\n return (<>\r\n <span>{isNegative && \"-\"}{getCurrencySymbol(props.currency)} </span> < FormattedNumber\r\n value={displayValue}\r\n currency={props.currency}\r\n minimumFractionDigits={2}\r\n maximumFractionDigits={2}\r\n /></>)\r\n }\r\n}","import * as React from \"react\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { getInvoiceQuery } from \"../../selectors/Selectors\";\r\nimport { getInvoices, setSelectedSoldTos } from \"../../actions/InvoiceActions\";\r\nimport { getSoldToNames } from \"../../requests/InvoiceRequests\";\r\nimport { Invoice, InvoiceRequestBody } from \"../../interfaces/invoice\";\r\nimport { useCurrencyDecimalLookup } from \"../../selectors/ConfigSelectors\";\r\n\r\nexport const InvoicesContext = React.createContext([]);\r\n\r\nexport function useInvoiceSearchQuery() {\r\n const invoiceSearchQuery: InvoiceRequestBody = useSelector<any, any>(\r\n (state) => getInvoiceQuery(state)\r\n );\r\n return invoiceSearchQuery;\r\n}\r\n\r\n//This is called by default in invoice login page.\r\nexport function useInvoices(selectedCurrency) {\r\n const invoiceSearchQuery = useInvoiceSearchQuery();\r\n useSelector<any, any>((state) => getInvoiceQuery(state));\r\n const [invoices, setInvoices] = useState<Invoice[]>([]);\r\n const decimalLookup = useCurrencyDecimalLookup();\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n if (invoiceSearchQuery !== null) {\r\n getInvoices(\r\n invoiceSearchQuery,\r\n decimalLookup,\r\n selectedCurrency\r\n )(dispatch).then((data) => {\r\n setInvoices(data.invoices);\r\n });\r\n }\r\n }, [invoiceSearchQuery]);\r\n\r\n return invoices;\r\n}\r\n","// /* eslint-disable no-console */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { PaymentRequest } from '../../interfaces/PaymentRequest';\r\nimport { DepositRequest } from '../../interfaces/DepositRequest';\r\nimport { toast } from 'react-toastify';\r\nimport { Route } from 'react-router-dom';\r\nimport { RootState } from '../../reducers/RootReducer';\r\nimport {\r\n getBeforeCreditTotal,\r\n getCreditTotal,\r\n getCustomerNumber,\r\n getInvoiceTotal,\r\n getOverpayingAmount,\r\n getPayTotal, getSelectedPaymentOption,\r\n getSelectedPrimaryAccount, handleDeleteIframe\r\n} from '../../selectors/Selectors'\r\nimport {\r\n getInvoices,\r\n makeDeposit,\r\n makePayment,\r\n} from '../../actions/InvoiceActions';\r\nimport {\r\n createPayerData,\r\n mapDepositDetails,\r\n mapInvoiceListToPaymentDocuments,\r\n mapPaymentDetails,\r\n valueEquals\r\n} from \"./PaymentFunctions\";\r\nimport ManagePaymentMethods from \"../payment-methods/manage-payment-methods/ManagePaymentMethods\";\r\nimport { canManagePaymentMethods } from \"../../selectors/PermissionSelectors\";\r\nimport { PaymentMethodDropdownConnected } from \"./PaymentMethodDropdown\";\r\nimport {\r\n isCvvRequired,\r\n isInvoiceOverpaymentAllowed,\r\n isPartialPaymentsAllowed,\r\n useCanMakePayments, useCurrencyDecimalLookup, useCurrencyDecimals, useCurrencyKey\r\n} from \"../../selectors/ConfigSelectors\";\r\nimport { ThunkFunction } from \"../../interfaces/utils\";\r\nimport { FormattedMessage, useIntl } from \"react-intl\";\r\nimport { CurrencyDisplay, CurrencyString } from \"../../common/CurrencyDisplay\";\r\nimport { useInvoiceSearchQuery } from \"./InvoiceDataManager\";\r\nimport { getisPaymentDisable, getMaximumPaymentAllowed, getECheckMaximumPaymentAllowed } from \"../../requests/ConfigRequests\";\r\nimport * as appConstants from '../../constants/ApplicationConstants';\r\nimport {\r\n buildCardinalData,\r\n buildCCRequest, buildTORequest,\r\n getPaymentAccessToken, getPaymentResponse,\r\n getPaymetricResponse, paymetric3DSCheck\r\n} from \"../../requests/TokenRequests\";\r\nimport { object } from 'yup/lib/locale';\r\nimport { TraceLog } from '../../interfaces/TraceLog';\r\n\r\ninterface PaymentOwnProps {\r\n mode: \"invoice\" | \"deposit\";\r\n form?: any;\r\n}\r\n\r\ninterface PaymentStoreProps {\r\n allPaymentOptions: any;\r\n beforeCreditTotal: any;\r\n creditTotal: any;\r\n customerNumber: any;\r\n cvvRequired: any;\r\n invoiceDetails: any;\r\n invoiceTotal: any;\r\n invoices: any;\r\n isInvoiceOverpaymentAllowed: any;\r\n overPayingAmount: any;\r\n payTotal: any;\r\n payerDetails: any;\r\n reasonNotRequired: any;\r\n reason_codes: any;\r\n selectedCardIndex: any;\r\n selectedPaymentOption: any;\r\n selectedPrimaryAccount: any;\r\n}\r\n\r\ninterface PaymentDispatchProps {\r\n getInvoices: ThunkFunction<typeof getInvoices>;\r\n makePayment: ThunkFunction<typeof makePayment>;\r\n makeDeposit: ThunkFunction<typeof makeDeposit>;\r\n}\r\n\r\ninterface PaymentState {\r\n disablePay: boolean;\r\n showManagePayments: boolean;\r\n cvvValidationMessage: string;\r\n cvvValue: string;\r\n paymentMethod: string;\r\n}\r\n\r\ntype PaymentAllProps = PaymentOwnProps & PaymentDispatchProps & PaymentStoreProps;\r\n\r\nexport const CACHED_CVV = \"CACHED_CVV\";\r\n\r\nfunction _Payment(props) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n let [PaymentDisable, setPaymentDisable] = useState(null);\r\n let [maxPaymentAllowed, setmaxPaymentAllowed] = useState(0);\r\n let [maxECheckPaymentAllowed, setmaxECheckPaymentAllowed] = useState(0);\r\n\r\n const canMakePayment = useCanMakePayments();\r\n let [disablePay, setDisablePay] = useState(props.impersonatedUserId === null && !canMakePayment && !PaymentDisable);\r\n let [showManagePayments, setShowManagePayments] = useState(false);\r\n let [cvvValidationMessage, setCvvValidationMessage] = useState('');\r\n let [cvvValue, setCvvValue] = useState('');\r\n let [cvvValueMaxLength, setCvvValueMaxLength] = useState(3);\r\n let currencyKey = useSelector<RootState, string>(state => state.default.selectedCurrencyOptionValue);\r\n const decimalLookup = useCurrencyDecimalLookup();\r\n const invoiceSearchQuery = useInvoiceSearchQuery();\r\n const currencyDecimals = useCurrencyDecimals(currencyKey);\r\n let secure_3ds_enabled = useSelector<RootState, any>(state => state.app.config.sap?.data?.payment_provider[0]?.secure_3ds_enabled === \"X\");\r\n const secure_3ds_version = useSelector<RootState, any>(state => state.app.config.sap?.data?.payment_provider[0]?.secure_3ds_version);\r\n const [paymentWarning, setPaymentWarning] = useState(false)\r\n const [clicked, setClicked] = useState(false);\r\n const overrideSecure_3ds_enabledd = useSelector<RootState, any>(\r\n state => {\r\n state.app.config.sap?.data?.company_codes?.map((item) => {\r\n if (item.company_code === props.selectedPrimaryAccount.CompanyCode) {\r\n if (item.disable_3ds === \"X\") {\r\n secure_3ds_enabled = false;\r\n }\r\n }\r\n });\r\n }\r\n );\r\n\r\n\r\n const currency_key = useCurrencyKey();\r\n if (currencyKey == '') {\r\n currencyKey = currency_key;\r\n }\r\n\r\n useEffect(() => {\r\n setCvvValue('');\r\n setCvvValidationMessage(\"\");\r\n getisPaymentDisable().then(_ => setPaymentDisable(_));\r\n getMaximumPaymentAllowed().then(_ => setmaxPaymentAllowed(_));\r\n getECheckMaximumPaymentAllowed().then(_ => setmaxECheckPaymentAllowed(_))\r\n if (props.selectedPaymentOption != null && props.selectedPaymentOption.payment_card_type === \"AMEX\") {\r\n setCvvValueMaxLength(4);\r\n }\r\n if (props.selectedPaymentOption != null && (props.selectedPaymentOption.payment_card_type === \"MC\" || props.selectedPaymentOption.payment_card_type === \"VISA\")) {\r\n setCvvValueMaxLength(3);\r\n }\r\n }, [props.selectedPaymentOption]);\r\n\r\n function onCVVChange(e) {\r\n e.target.value = e.target.value.replace(/\\D+/g, '');\r\n setCvvValue(e.target.value);\r\n if (!e.target.value) {\r\n setCvvValidationMessage(f(\"payment.error.cvv_empty\"));\r\n } else {\r\n validateCvv(e.target.value);\r\n }\r\n };\r\n\r\n function validateCvv(cvv) {\r\n if ((props.selectedPaymentOption.payment_card_type === \"AMEX\" && cvv.length < 4)\r\n || (props.selectedPaymentOption.payment_card_type === \"MC\" && cvv.length < 3)\r\n || (props.selectedPaymentOption.payment_card_type === \"VISA\" && cvv.length < 3)) {\r\n setCvvValidationMessage(f(\"payment.error.cvv_invalid\"));\r\n return false;\r\n } else if (cvv.length >= 3 && cvv.length <= 4) {\r\n setCvvValidationMessage(\"\");\r\n return true;\r\n }\r\n }\r\n\r\n function toggleShowManagePayments() {\r\n setShowManagePayments(true);\r\n }\r\n\r\n function hideManagePayments() {\r\n setShowManagePayments(false);\r\n }\r\n\r\n\r\n\r\n const getCardMaxAllowedMessage: any = () => {\r\n if (maxPaymentAllowed && maxPaymentAllowed > 0) {\r\n return <><FormattedMessage id={\"payment_methods.maximum_card_payment_error\"} />\r\n {' '} {CurrencyString(maxPaymentAllowed, currencyKey, intl)}\r\n\r\n </>\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const getECheckMaximumAllowedMessage: any = () => {\r\n\r\n if(maxECheckPaymentAllowed && maxECheckPaymentAllowed >0)\r\n { return <> <FormattedMessage id={\"payment_methods.maximum_check_payment_error\"} />\r\n {' '} {CurrencyString(maxECheckPaymentAllowed, currencyKey, intl)}\r\n </>}\r\n\r\n return '';\r\n }\r\n async function onPayClick(event, history) {\r\n\r\n let invoicesLength = Object.keys(props.invoices).length;\r\n let overPaymentAllowed = true;\r\n if (invoicesLength > 1) {\r\n Object.keys(props.invoices).map((key) => {\r\n if (props.invoices[key].open_amount < props.invoicesDetail[key].amount) {\r\n overPaymentAllowed = false;\r\n toast.warn(f(\"payment.error.over_payment_not_allowed\"), { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n })\r\n }\r\n if (overPaymentAllowed) {\r\n toast.dismiss();\r\n if (props.selectedPaymentOption === null) {\r\n toast.warn(f(\"payment.error.card_not_selected\"), { position: toast.POSITION.TOP_RIGHT });\r\n event.preventDefault();\r\n return false;\r\n }\r\n\r\n if (!props.isInvoiceOverpaymentAllowed && props.overPayingAmount > 0) {\r\n toast.warn(f(\"payment.error.over_pay_not_allowed\"), { position: toast.POSITION.TOP_RIGHT });\r\n event.preventDefault();\r\n return false;\r\n }\r\n if (cvvRequired() && props.selectedPaymentOption.payment_card_type !== 'EC') {\r\n if (cvvValue === \"\") {\r\n toast.warn(f(\"payment.error.cvv_empty\"), { position: toast.POSITION.TOP_RIGHT });\r\n event.preventDefault();\r\n return false;\r\n } else if (!validateCvv(cvvValue)) {\r\n toast.warn(f(\"payment.error.cvv_invalid\"), { position: toast.POSITION.TOP_RIGHT });\r\n event.preventDefault();\r\n return false;\r\n }\r\n }\r\n // if credit present, to check if total is greater than 0, \r\n // adding credit to total instead of deducting it.\r\n if (props.creditTotal < 0 && (props.beforeCreditTotal + props.creditTotal) <= 0) {\r\n toast.warn(\r\n f(\"invoices_page.error.credit_amount_validation\"),\r\n { position: toast.POSITION.TOP_RIGHT },\r\n );\r\n event.preventDefault();\r\n return false;\r\n }\r\n\r\n if (props.payTotal <= 0) {\r\n toast.warn(\r\n f(\"payment.error.pay_amount_validation_message\"),\r\n { position: toast.POSITION.TOP_RIGHT },\r\n );\r\n event.preventDefault();\r\n return false;\r\n }\r\n\r\n if (props.payTotal > maxPaymentAllowed && maxPaymentAllowed > 0 && props.selectedPaymentOption.payment_card_type !== 'EC') {\r\n toast.warn(\r\n f(\"payment.error.maximum_card_payment_exceeded_message\"),\r\n { position: toast.POSITION.TOP_RIGHT },\r\n );\r\n event.preventDefault();\r\n return false;\r\n }\r\n\r\n if (props.payTotal > maxECheckPaymentAllowed && maxECheckPaymentAllowed > 0 && props.selectedPaymentOption.payment_card_type === 'EC') {\r\n toast.warn(\r\n f(\"payment.error.maximum_echeck_payment_exceeded_message\"),\r\n { position: toast.POSITION.TOP_RIGHT },\r\n );\r\n event.preventDefault();\r\n return false;\r\n }\r\n\r\n\r\n\r\n // Check for reason codes\r\n let keys = Object.keys(props.invoiceDetails);\r\n if (props.reasonNotRequired !== 'X') {\r\n for (let i = 0; i < keys.length; i++) {\r\n let details = props.invoiceDetails[keys[i]];\r\n let invoice = props.invoices[keys[i]];\r\n\r\n // Skip if credit \r\n if (invoice.total_amount >= 0) {\r\n let reasonMissing = (details.reason === \"\" || details.reason === null);\r\n let reasonRequired = details.amount < invoice.open_amount && reasonMissing;\r\n if (reasonRequired) {\r\n toast.warn(f(\"payment.error.reason_required\"), { position: toast.POSITION.TOP_RIGHT });\r\n return;\r\n }\r\n if (!reasonMissing) {\r\n for (let j = 0; j < props.reason_codes.length; j++) {\r\n if (details.reason === props.reason_codes[j].reason_code) {\r\n if (valueEquals(props.reason_codes[j].comments_required, \"X\")) {\r\n if (details.comment === \"\") {\r\n toast.warn(f(\"payment.error.reason_description_validation_message\"), { position: toast.POSITION.TOP_RIGHT });\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n let cardinal = null;\r\n if (secure_3ds_enabled) {\r\n sessionStorage.setItem(CACHED_CVV, cvvValue);\r\n const cardinalData = buildCardinalData(\r\n parseFloat(props.payTotal) * 100,\r\n props.currentUser,\r\n props.payerDetails,\r\n secure_3ds_version,\r\n `${window.location.protocol}//${window.location.host}/invoices/processing-payment`,\r\n currency_key,\r\n props.selectedPaymentOption\r\n );\r\n const { access_token, merchant_guid, paymetric_xi_url } = await getPaymentAccessToken('TO', cardinalData);\r\n let body = buildTORequest(props.selectedPaymentOption.payment_card_token, merchant_guid, access_token);\r\n await paymetric3DSCheck(paymetric_xi_url, body, secure_3ds_version);\r\n const access_response = await getPaymentResponse(access_token);\r\n cardinal = access_response.cardinal;\r\n sessionStorage.removeItem(CACHED_CVV);\r\n }\r\n\r\n let invoices = mapInvoiceListToPaymentDocuments(props.invoices, props.invoiceDetails);\r\n let paymentDetails = mapPaymentDetails(props.selectedPaymentOption, cvvValue, props.payerDetails.address_data, cardinal);\r\n let payerData = createPayerData(props.customerNumber, props.selectedPrimaryAccount.CompanyCode);\r\n let paymentRequest: PaymentRequest = {\r\n payer_data: payerData,\r\n soldto: {\r\n account_number: props.selectedPrimaryAccount.PrimaryAcct\r\n },\r\n payment_detail: paymentDetails,\r\n documents: invoices,\r\n currency_key: currencyKey,\r\n currency_decimals: currencyDecimals,\r\n log: {\r\n id: \"POST_INVOICE\",\r\n login: props.currentUser.email,\r\n epayv: appConstants.APP_VERSION,\r\n usrag: navigator.userAgent\r\n }\r\n };\r\n\r\n\r\n setDisablePay(true);\r\n //document.getElementById(\"div-ManagePayments\").disabled = true;\r\n\r\n return props.makePayment(paymentRequest, () => history.push('/invoices/payment-status')).then((success) => {\r\n if (success) {\r\n props.getInvoices(invoiceSearchQuery, decimalLookup, '');\r\n }\r\n setDisablePay(false);\r\n //document.getElementById(\"div-ManagePayments\").disabled = false;\r\n });\r\n }\r\n };\r\n\r\n\r\n\r\n async function onDepositClick(event, history) {\r\n\r\n if (!props.form.isValid) {\r\n props.form.handleSubmit();\r\n event.preventDefault();\r\n return false;\r\n }\r\n if (props.selectedPaymentOption === null) {\r\n toast.warn(f(\"payment.error.card_not_selected\"), { position: toast.POSITION.TOP_RIGHT });\r\n event.preventDefault();\r\n return false;\r\n }\r\n if (cvvRequired() && props.selectedPaymentOption.payment_card_type !== 'EC') {\r\n if (cvvValue === \"\") {\r\n toast.warn(f(\"payment.error.cvv_empty\"), { position: toast.POSITION.TOP_RIGHT });\r\n event.preventDefault();\r\n return false;\r\n } else if (!validateCvv(cvvValue)) {\r\n toast.warn(f(\"payment.error.cvv_invalid\"), { position: toast.POSITION.TOP_RIGHT });\r\n event.preventDefault();\r\n return false;\r\n }\r\n }\r\n\r\n let amoumtToDeposit= props.form.values.amount_to_process;// parseFloat(props.form.values.amount_to_process) * 100;\r\n\r\n if (amoumtToDeposit > maxPaymentAllowed && maxPaymentAllowed > 0 && props.selectedPaymentOption.payment_card_type !== 'EC') {\r\n toast.warn(\r\n f(\"payment.error.maximum_card_payment_exceeded_message\"),{ position: toast.POSITION.TOP_RIGHT }\r\n \r\n );\r\n event.preventDefault();\r\n return false;\r\n }\r\n\r\n if (amoumtToDeposit> maxECheckPaymentAllowed && maxECheckPaymentAllowed > 0 &&props.selectedPaymentOption.payment_card_type === 'EC') {\r\n \r\n toast.warn(\r\n f(\"payment.error.maximum_echeck_payment_exceeded_message\"),{ position: toast.POSITION.TOP_RIGHT }\r\n );\r\n event.preventDefault();\r\n return false;\r\n }\r\n\r\n \r\n let cardinal = null;\r\n if (secure_3ds_enabled) {\r\n sessionStorage.setItem(\"DEPOSIT_CACHE\", JSON.stringify(props.form.values));\r\n sessionStorage.setItem(CACHED_CVV, cvvValue);\r\n const cardinalData = buildCardinalData(\r\n parseFloat(props.form.values.amount_to_process) * 100,\r\n props.currentUser,\r\n props.payerDetails,\r\n secure_3ds_version,\r\n `${window.location.protocol}//${window.location.host}/deposits/processing-payment`,\r\n currency_key,\r\n props.selectedPaymentOption\r\n );\r\n const { access_token, merchant_guid, paymetric_xi_url } = await getPaymentAccessToken('TO', cardinalData);\r\n let body = buildTORequest(props.selectedPaymentOption.payment_card_token, merchant_guid, access_token);\r\n await paymetric3DSCheck(paymetric_xi_url, body, secure_3ds_version);\r\n const access_response = await getPaymentResponse(access_token);\r\n cardinal = access_response.cardinal;\r\n sessionStorage.removeItem(CACHED_CVV);\r\n }\r\n\r\n let paymentDetails = mapPaymentDetails(props.selectedPaymentOption, cvvValue, props.payerDetails.address_data, cardinal);\r\n let payerData = createPayerData(props.customerNumber, props.selectedPrimaryAccount.CompanyCode);\r\n let depositDetail = mapDepositDetails(props.form.values, currencyKey);\r\n\r\n let log: TraceLog = {\r\n id: \"POST_DEPOSIT\",\r\n login: props.currentUser.email,\r\n epayv: appConstants.APP_VERSION,\r\n usrag: navigator.userAgent\r\n }\r\n let depositRequest: DepositRequest = {\r\n deposit_detail: depositDetail,\r\n payer_data: payerData,\r\n payment_detail: paymentDetails,\r\n log: log\r\n };\r\n\r\n\r\n setDisablePay(true);\r\n\r\n return props.makeDeposit(depositRequest, () => history.push('/deposits/payment-status')).then((success) => {\r\n setDisablePay(false);\r\n });\r\n }\r\n\r\n function cvvRequired() {\r\n return props.cvvRequired && props.selectedPaymentOption && props.selectedPaymentOption.payment_card_type !== 'EC';\r\n }\r\n\r\n function getDepositAmount(values) {\r\n return values && values.amount_to_process ? values.amount_to_process : '';\r\n }\r\n\r\n const depositAmount = props && props.mode && props.mode === 'deposit' ? getDepositAmount(props.form.values) : '';\r\n const isDepositMode = props && props.mode && props.mode === 'deposit' ? true : false;\r\n\r\n const [selectedPaymentType, setSelectedPaymentType] = useState(null)\r\n\r\n\r\n function update(type) {\r\n setSelectedPaymentType(type)\r\n\r\n }\r\n\r\n\r\n return (\r\n <div>\r\n <h2 className=\"invoicesHeading\">{f(\"payment.title\")}</h2>\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row\">\r\n <div className=\"col-12 d-flex justify-content-center mb-2\" style={{textAlignLast: 'center'}}>\r\n You are about to make a one-time payment to Bausch + Lomb,\r\n giving permission to Bausch + Lomb to debit your credit card or bank account for a specific amount chosen\r\n by you. If an eCheck (bank account) is provided as payment, you are authorizing Bausch + Lomb to use your\r\n banking information to make a one-time electronic ACH transfer from your account or to process the payment\r\n as a check transaction. If your credit card payment is declined, you will promptly contact your credit\r\n card issuer. If your eCheck (ACH) payment is declined, you will promptly contact your bank and/or Certegy\r\n Check Services (800) -237-4851.\r\n </div>\r\n\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-12 d-flex justify-content-center mb-5\">\r\n <span>\r\n <input className=\"mt-1\" type=\"checkbox\" checked={paymentWarning} onClick={() => setPaymentWarning(!paymentWarning)} /><strong>I Agree</strong>\r\n </span>\r\n \r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-lg-3 text-secondary\">\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-6 mb-3 d-flex align-items-center\">\r\n {isDepositMode ? f(\"payment.deposit_total\") : f(\"payment.invoice_total\")}\r\n </div>\r\n <div className=\"col-6 mb-3 payment-totals\">\r\n {isDepositMode ? CurrencyString(depositAmount, currencyKey, intl) : CurrencyString(props.invoiceTotal, currencyKey, intl)}\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 text-secondary\">\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-3 mb-3 d-flex align-items-center\">\r\n {f(\"payment.pay_label\")}\r\n </div>\r\n <div className=\"col-9 mb-3 payment-totals\">\r\n {isDepositMode ? CurrencyString(depositAmount, currencyKey, intl) : CurrencyString(props.payTotal !== \"NaN\" ? props.payTotal : '0', currencyKey, intl)}\r\n </div>\r\n </div>\r\n </div>\r\n {props.overPayingAmount > 0 && !isDepositMode &&\r\n <React.Fragment>\r\n <div className=\"col-lg-3 text-secondary\">\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-6 mb-3 d-flex align-items-end\">\r\n {f(\"payment.overpaying_label\")}\r\n </div>\r\n <div className=\"col-6 mb-3 payment-totals\">\r\n <span\r\n className=\"overpaying_Amount_color\"> {CurrencyString(props.overPayingAmount, currencyKey, intl)} </span>\r\n </div>\r\n </div>\r\n </div>\r\n {props.isInvoiceOverpaymentAllowed && <div className=\"col-lg-3 text-secondary\">\r\n <div className=\"d-flex mb-3\">\r\n <div className=\"d-flex align-items-center\">\r\n <i className=\"fas fa-lg fa-exclamation-circle circle_Exclamation_Color\" />\r\n </div>\r\n <div className=\"overpaying-text d-flex align-items-center\">\r\n <div>\r\n <FormattedMessage id={\"payment.overpaying_message\"}\r\n values={{ amount: CurrencyString(props.overPayingAmount, currencyKey, intl) }} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-lg-6 col-md-12 col-sm-12\">\r\n <div className=\"row no-gutters\">\r\n <div\r\n className=\"col-lg-4 col-md-6 col-sm-6 col-form-label col-form-label-sm text-secondary mb-3\">\r\n {f(\"payment.payment_method_label\")}\r\n </div>\r\n <PaymentMethodDropdownConnected />\r\n <div className=\"col-lg-4 col-md-6 col-sm-6\" />\r\n\r\n <div id=\"div-ManagePayments\" className=\"col-lg-8 col-md-6 col-sm-6 text-center\">\r\n {!showManagePayments && disablePay == false ?\r\n <div className={\"manage-payment-button\"}\r\n onClick={toggleShowManagePayments} >{f(\"payment.manage_payment_methods\")}</div> : null}\r\n {showManagePayments &&\r\n <div className={\"manage-payment-button\"} onClick={hideManagePayments}>\r\n <FormattedMessage id={\"payment.hide_payment_methods\"} /></div>}\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div className=\"text-left col-lg-2 col-md-8 col-sm-6 col-7\">\r\n {cvvRequired() &&\r\n <input\r\n key=\"txtCvv\" pattern=\"/\\D+/g\"\r\n style={{ width: \"72px\" }}\r\n maxLength={cvvValueMaxLength}\r\n type=\"text\"\r\n className={`col form-control ${cvvValidationMessage ? 'invalid' : ''}`}\r\n placeholder={f(\"payment.cvv_label\")}\r\n onChange={onCVVChange}\r\n value={cvvValue}\r\n />\r\n }\r\n {\r\n (cvvRequired()) && <h6 className=\"invalid-Text\">\r\n <small>{cvvValidationMessage}</small>\r\n </h6>\r\n }\r\n </div>\r\n <div className=\"col-lg-3 col-md-12 col-sm-12 d-none d-lg-block\">\r\n <Route render={({ history }) => (\r\n <button\r\n type=\"button\"\r\n id=\"btnPay\"\r\n className=\"btn buttonsize buttonColor btnPay\"\r\n disabled={disablePay || !paymentWarning}\r\n onClick={(e) => {\r\n handleDeleteIframe();\r\n !isDepositMode ? onPayClick(e, history) : onDepositClick(e, history)\r\n }}\r\n >\r\n <FormattedMessage id={\"payment.pay_button\"} />\r\n </button>\r\n )} />\r\n </div>\r\n </div>\r\n <div className={\"row mb-2\"}>\r\n <div className={\"col-md-12\"}>\r\n {showManagePayments && <div className=\"manage-payment-section\">\r\n <ManagePaymentMethods selectedType={selectedPaymentType} updateState={update} alwaysSaveOnFile={false} />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col d-lg-none\">\r\n <Route render={({ history }) => (\r\n <button\r\n type=\"button\"\r\n id=\"btnPay\"\r\n className=\"btn btn-primary buttonColor buttonsize\"\r\n disabled={disablePay || !paymentWarning}\r\n onClick={(e) => {\r\n !isDepositMode ? onPayClick(e, history) : onDepositClick(e, history)\r\n }}\r\n >\r\n\r\n <FormattedMessage id={\"payment.pay_button\"} />\r\n </button>\r\n )} />\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col\">\r\n <p className=\"text-danger\">\r\n {\r\n \r\n props.selectedPaymentOption===null ?'': cvvRequired() ? getCardMaxAllowedMessage() : getECheckMaximumAllowedMessage()\r\n }\r\n </p>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n}\r\n\r\n\r\nexport const Payment = connect<any, any, any, any>((store: RootState, props) => {\r\n return {\r\n beforeCreditTotal: getBeforeCreditTotal(store),\r\n currentUser: store.default.currentUser,\r\n canManagePaymentMethods: canManagePaymentMethods(store),\r\n creditTotal: getCreditTotal(store),\r\n customerNumber: getCustomerNumber(store),\r\n cvvRequired: isCvvRequired(store),\r\n impersonatedUserId: store.user_options.impersonatedUserId,\r\n invoiceDetails: store.invoice.invoiceDetail,\r\n invoiceTotal: getInvoiceTotal(store),\r\n invoices: store.invoice.selected,\r\n invoicesDetail: store.invoice.invoiceDetail,\r\n isInvoiceOverpaymentAllowed: isInvoiceOverpaymentAllowed(store),\r\n isPartialPaymentsAllowed: isPartialPaymentsAllowed(store),\r\n overPayNote: store.default.overPayNote,\r\n overPayingAmount: getOverpayingAmount(store),\r\n payTotal: getPayTotal(store),\r\n payerDetails: store.default.payerDetails,\r\n reasonNotRequired: store.default.reasonNotRequired,\r\n reason_codes: store.app.config.sap?.data.payment_reason_codes,\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(store),\r\n selectedSecondaryAccount: store.user_options.selectedSecondaryAccount,\r\n // Used to refresh, not really needed.\r\n selectedPaymentOption: getSelectedPaymentOption(store),\r\n }\r\n}, {\r\n getInvoices,\r\n makePayment,\r\n makeDeposit,\r\n})(_Payment);\r\n","import React, { Component } from 'react';\r\nimport { connect, useDispatch } from 'react-redux';\r\nimport {\r\n clearSelectedInvoices, selectPayer, setSelectedCurrency, setsearchedinvoiceStatus, setsearchedinvoiceDueDate, setsearchedinvoiceType,\r\n setsearchedInvoiceNumber, setsearchedArticleNumber, setsearchedArticleDescription,\r\n setinvoiceSearchedPeriod, setinvoiceSearchedPeriodFromTo, setsearchedInvoices\r\n} from \"../../actions/InvoiceActions\";\r\nimport { getPayerAccounts } from \"../../selectors/Selectors\";\r\nimport { FormattedMessage } from \"react-intl\";\r\nexport class PayerSelect extends Component<any, any> {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.handleCustomerChange = this.handleCustomerChange.bind(this);\r\n }\r\n\r\n handleCustomerChange = (e) => {\r\n this.props.setSelectedCurrency('');\r\n this.props.clearSelectedInvoices();\r\n this.props.selectPayer(isNaN(parseInt(e.target.value)) ? parseInt(e.target.value) : e.target.value);\r\n this.props.setsearchedInvoices([]);\r\n this.props.setsearchedInvoiceNumber('');\r\n this.props.setsearchedinvoiceDueDate('', '');\r\n this.props.setinvoiceSearchedPeriodFromTo('', '');\r\n this.props.setsearchedinvoiceStatus('03');\r\n this.props.setinvoiceSearchedPeriod(\"all\");\r\n };\r\n\r\n truncateOption(text) {\r\n const maxLength = 30;\r\n if (text.length > maxLength) {\r\n return text.substr(0, maxLength) + '...';\r\n }\r\n return text;\r\n }\r\n render() {\r\n let value = this.props.selectedSecondaryAccount; \r\n let options = Object.values(this.props.payerAccounts).map((account: any, index) => {\r\n return { value: account.PrimaryAcct, label: `${account.Name} (${account.PrimaryAcct})`, account_number: account.PrimaryAcct }\r\n });\r\n let disabled = this.props.payerAccounts && this.props.payerAccounts.length <= 1;\r\n let isPaymentDisable = (sessionStorage.getItem(\"isPaymentDisable\")?.toString() === \"true\") ? true : false;\r\n return ( \r\n <div className='customSelect payer-select'>\r\n <select\r\n onChange={this.handleCustomerChange}\r\n /*disabled={true}*/\r\n value={value}\r\n className=\"invoicesHeadingInput form-control\">\r\n {options.map(option => {\r\n return (\r\n <option\r\n key={option.value}\r\n value={option.value}>\r\n {this.truncateOption(option.label)}\r\n </option>\r\n )\r\n })}\r\n </select>\r\n <i className=\"fas fa-chevron-down select-arrow\" />\r\n </div> \r\n )\r\n }\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n selectedSecondaryAccount: state.user_options.selectedSecondaryAccount,\r\n payerAccounts: getPayerAccounts(state),\r\n }\r\n}, {\r\n clearSelectedInvoices,\r\n selectPayer,\r\n setSelectedCurrency,\r\n setsearchedInvoices,\r\n setsearchedInvoiceNumber,\r\n setsearchedinvoiceDueDate,\r\n setinvoiceSearchedPeriodFromTo,\r\n setsearchedinvoiceStatus,\r\n setinvoiceSearchedPeriod\r\n})(PayerSelect);","import React, {useEffect, useRef, useState} from 'react';\r\nimport {getSelectedPrimaryAccount} from \"../selectors/Selectors\";\r\nimport {useHistory} from \"react-router-dom\";\r\nimport {useSelector} from \"react-redux\";\r\n\r\nexport function AccountChangeRedirect(){\r\n\r\n const primaryAccount = useSelector(getSelectedPrimaryAccount);\r\n const history = useHistory();\r\n const isFirstRun = useRef(true);\r\n\r\n useEffect(() => {\r\n if (!isFirstRun.current) {\r\n //history.push(\"/invoices\");\r\n return;\r\n }\r\n if(isFirstRun.current){\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n \r\n }, [primaryAccount]);\r\n return null;\r\n}","import React, {useEffect, useRef, useState} from 'react';\r\nimport {connect, useSelector} from 'react-redux';\r\nimport {MakeDepositSchema} from '../payment-methods/schemas';\r\nimport {BootstrapError, BootstrapField} from \"../../helpers/Field\";\r\nimport {Payment} from '../invoice/Payment';\r\nimport PayerSelect from '../invoice/PayerSelect';\r\nimport {getDepositReasonCodes, getPayerAccounts, getSelectedPrimaryAccount} from \"../../selectors/Selectors\";\r\nimport {Formik, setIn} from \"formik\";\r\nimport {AccountType} from \"../../interfaces/Accounts\";\r\nimport {FormattedMessage, useIntl} from \"react-intl\";\r\nimport {useCurrencyKey} from \"../../selectors/ConfigSelectors\";\r\nimport {AccountChangeRedirect} from \"../AccountChangeRedirect\";\r\nimport {FinalizePaymentProcess} from \"../payment-methods/manage-payment-methods/FinalizePaymentProcess\";\r\nimport {useHistory, useLocation} from \"react-router-dom\";\r\nimport {Session} from \"inspector\";\r\nimport {CurrencySymbol} from '../../common/CurrencyDisplay';\r\nimport {RootState} from '../../reducers/RootReducer';\r\nimport { getisPaymentDisable } from \"../../requests/ConfigRequests\";\r\nimport { setisPaymentDisable, getMessageForPaymentDisable } from '../../actions/CommonActions';\r\n\r\n\r\nfunction _Deposits(props) {\r\n const deposit_cache = \"deposit_cache\";\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({id: id});\r\n let [initialValues, setInitialValues] = useState<{\r\n payer_option: string,\r\n reason_code: string,\r\n amount_to_process: null | number,\r\n reference_number: string,\r\n comment: string,\r\n } | null>({\r\n payer_option: \"\",\r\n reason_code: \"\",\r\n amount_to_process: null,\r\n reference_number: \"\",\r\n comment: \"\",\r\n });\r\n let currencyKey = useSelector<RootState, string>(state => state.default.selectedCurrencyOptionValue);\r\n const language = useSelector<RootState, string>(state => state.user.language);\r\n const location = useLocation();\r\n const [ready, setReady] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState(\"\");\r\n const search = new URLSearchParams(location.search);\r\n const accessToken = search.get(\"id\");\r\n const prevValues = useRef();\r\n const currency_key = useCurrencyKey();\r\n let [PaymentDisable, setPaymentDisable] = useState(null);\r\n\r\n //useSelector<RootState, any>(\r\n // state => {\r\n // state.app.config.sap?.data?.company_codes?.map((item) => {\r\n // if (item.company_code === props.selectedPrimaryAccount.CompanyCode) {\r\n // if (item.disable_payments === \"X\") {\r\n // sessionStorage.setItem(\"isPaymentDisable\", \"true\");\r\n // }\r\n // }\r\n // });\r\n // }\r\n //);\r\n\r\n const reasonCodes = props.depositReasonCodes;\r\n\r\n if(currencyKey == ''){\r\n currencyKey = currency_key;\r\n }\r\n useEffect(() => {\r\n\r\n getisPaymentDisable().then(_ => setisPaymentDisable(_));\r\n let newValues: any = initialValues;\r\n if (accessToken) {\r\n let cached = sessionStorage.getItem(deposit_cache);\r\n if (cached) {\r\n let temp: any = JSON.parse(cached);\r\n newValues = {\r\n ...newValues,\r\n ...temp\r\n }\r\n }\r\n }\r\n let reasonCode = \"\";\r\n if (reasonCodes && reasonCodes.length > 0) {\r\n reasonCode = reasonCodes[0]?.value;\r\n }\r\n \r\n setInitialValues({\r\n payer_option: newValues?.payer_option ?? \"\",\r\n reason_code: (newValues?.reason_code === \"\") ? reasonCode : newValues.reason_code,\r\n amount_to_process: newValues?.amount_to_process ?? null,\r\n reference_number: newValues?.reference_number ?? \"\",\r\n comment: newValues?.comment ?? \"\",\r\n });\r\n\r\n setReady(true);\r\n }, [accessToken, reasonCodes]);\r\n\r\n\r\n let schema = MakeDepositSchema(intl);\r\n const isSoldToAccount = props.accountType;\r\n \r\n return (\r\n <>\r\n {(initialValues && ready) &&\r\n <Formik initialValues={initialValues} validationSchema={schema} validateOnChange={true}\r\n validateOnBlur={true}\r\n enableReinitialize={true}\r\n isInitialValid={schema.isValidSync(initialValues)}\r\n onSubmit={() => {/* TODO currently no op. This is probably not working at all as is. NOOP*/\r\n }}\r\n render={(formProps) => { \r\n let isPaymentDisable = (sessionStorage.getItem(\"isPaymentDisable\")?.toString() === \"true\") ? true : false;\r\n var paymentDisableMessage; \r\n var paymentDisableKey = (language.toString() + \"_paymentDisableMessageText\".trim());\r\n paymentDisableMessage = getMessageForPaymentDisable(paymentDisableKey); \r\n sessionStorage.setItem(deposit_cache, JSON.stringify(formProps.values));\r\n return (\r\n <div>\r\n {isPaymentDisable &&\r\n <div\r\n className={\"col-12 col-md d-flex justify-content-center align-items-baseline\"}>\r\n <span className={\"invoice-currency-warning\"}>\r\n <label> {paymentDisableMessage} </label>\r\n </span>\r\n </div>}\r\n <div aria-disabled={isPaymentDisable}\r\n className={(isPaymentDisable) ? 'is-disabled' : ''}>\r\n <AccountChangeRedirect/>\r\n <FinalizePaymentProcess/>\r\n <div className=\"container\"> \r\n <div className=\"row\">\r\n <div className=\"col-lg-2 col-md-4 col-sm-12 col-12\">\r\n <h2 className=\"invoicesHeading bottompadding\"><FormattedMessage\r\n id={\"deposits.page_title\"}/></h2>\r\n </div>\r\n </div>\r\n <div aria-disabled={isPaymentDisable}>\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <div className=\"card\">\r\n <div className=\"card-body px-0 px-sm-4\">\r\n <div className=\"row\">\r\n <div className={\"col-12 col-lg-6\"}>\r\n <div className=\"form-group row\">\r\n <div\r\n className=\"d-flex col-sm-3 col-form-label col-form-label-sm text-secondary justify-content-start justify-content-md-end \">\r\n <div><FormattedMessage id={\"deposits.payer_label\"}/>\r\n </div>\r\n </div>\r\n <div className=\"col-sm-9\">\r\n {isSoldToAccount ?\r\n <PayerSelect name={'payer_option'}/> : ''}\r\n </div>\r\n </div>\r\n \r\n <div className=\"form-group row\">\r\n <label htmlFor=\"colFormLabelSm\"\r\n className=\"d-flex col-sm-3 col-form-label col-form-label-sm text-secondary justify-content-start justify-content-md-end \">\r\n {f(\"deposits.amount_label\")}\r\n </label>\r\n <div className=\"col-10 col-sm-9 input-group\">\r\n <div className=\"input-group-prepend\">\r\n <span className=\"input-group-text\">{CurrencySymbol(currencyKey)}</span>\r\n </div>\r\n <BootstrapField type=\"number\"\r\n onKeyDown={ (evt) => evt.key === 'e' && evt.preventDefault() }\r\n name=\"amount_to_process\"\r\n onChange={formProps.handleChange}/>\r\n <BootstrapError name=\"amount_to_process\"/>\r\n \r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div className={\"col-12 col-lg-6\"}>\r\n <div className=\"form-group row\">\r\n <label htmlFor=\"colFormLabelSm\"\r\n className=\"d-flex col-sm-3 col-form-label col-form-label-sm text-secondary justify-content-start justify-content-md-end text-right\"><FormattedMessage\r\n id={\"deposits.reason_code_label\"}/></label>\r\n <div className=\"col-sm-9 customSelect\">\r\n <BootstrapField component=\"select\"\r\n name=\"reason_code\"\r\n placeholder={f(\"deposits.reason_code_label\")}\r\n value={formProps?.values?.reason_code}\r\n className=\"form-control\">\r\n {reasonCodes.map(code => {\r\n return (\r\n <option value={code.value}\r\n key={code.value}>\r\n {code.label}\r\n </option>\r\n )\r\n })}\r\n </BootstrapField>\r\n <i className=\"fas fa-chevron-down select-arrow\"/>\r\n </div>\r\n </div>\r\n <div className=\"form-group row\">\r\n <label htmlFor=\"colFormLabelSm\"\r\n className=\"d-flex col-sm-3 col-form-label col-form-label-sm text-secondary justify-content-start justify-content-md-end text-right\">\r\n {f(\"deposits.document_number_label\")}\r\n </label>\r\n <div className=\"col-sm-9\">\r\n <BootstrapField type=\"text\"\r\n name=\"reference_number\"/>\r\n </div>\r\n </div>\r\n <div className=\"form-group row\">\r\n <label htmlFor=\"colFormLabelSm\"\r\n className=\"d-flex col-sm-3 col-form-label col-form-label-sm text-secondary justify-content-start justify-content-md-end text-right\">\r\n {f(\"deposits.payment_note_label\")}\r\n </label>\r\n <div className=\"col-sm-9\">\r\n <BootstrapField component=\"textarea\" rows=\"3\"\r\n name=\"comment\"/>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <br/>\r\n\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <Payment mode={\"deposit\"} form={formProps}/>\r\n </div>\r\n </div>\r\n <br/>\r\n <br/>\r\n <br/>\r\n <br/>\r\n <br/>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }}\r\n />}</>\r\n );\r\n}\r\n\r\nexport const Deposits = connect<any, any, any, any>((state, props) => {\r\n return {\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(state),\r\n payerAccounts: getPayerAccounts(state),\r\n depositReasonCodes: getDepositReasonCodes(state),\r\n invoices: state.default.invoices,\r\n accountType: state.user_options.accountType,\r\n depositAmount: state.default.depositAmount,\r\n }\r\n})(_Deposits);\r\n","import React, { Component } from 'react';\r\n\r\nclass Statements extends Component<any, any> {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n render() {\r\n return (\r\n <div className=\"container\">\r\n <h1>Statements Page</h1>\r\n </div>\r\n );\r\n }\r\n}\r\nexport default Statements;\r\n","import React, {Component} from 'react';\r\n\r\nfunction Help() {\r\n return (\r\n <div className=\"container\">\r\n </div>);\r\n}\r\n\r\n\r\nexport default Help;\r\n","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {\r\n setSelectedSoldTos,\r\n updatePrimaryAccount,\r\n clearSelectedInvoices,\r\n setSelectedCurrency,\r\n setsearchedinvoiceStatus,\r\n setsearchedinvoiceDueDate,\r\n setsearchedinvoiceType,\r\n setsearchedInvoiceNumber,\r\n setsearchedArticleNumber,\r\n setsearchedArticleDescription,\r\n setinvoiceSearchedPeriod,\r\n setinvoiceSearchedPeriodFromTo,\r\n setsearchedInvoices,\r\n} from \"../../actions/InvoiceActions\";\r\nimport { getSelectedPrimaryAccount } from \"../../selectors/Selectors\";\r\nimport { AccountType } from \"../../interfaces/Accounts\";\r\nimport { ThunkFunction } from \"../../interfaces/utils\";\r\nimport { Dropdown } from \"react-bootstrap\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { isStringNotEmptyOrNull } from \"../../utils\";\r\nimport { useDispatch } from \"react-redux\";\r\ninterface NavAccountSelectStateProps {\r\n secondaryAccounts: any[];\r\n selectedPrimaryAccountIndex: number;\r\n accountType: AccountType;\r\n primaryAccounts: any[];\r\n selectedPrimaryAccount: any;\r\n}\r\n\r\ninterface NavAccountSelectDispatchProps {\r\n setSelectedSoldTos: ThunkFunction<typeof setSelectedSoldTos>;\r\n clearSelectedInvoices: ThunkFunction<typeof clearSelectedInvoices>;\r\n updatePrimaryAccount: ThunkFunction<typeof updatePrimaryAccount>;\r\n setSelectedCurrency: ThunkFunction<typeof setSelectedCurrency>;\r\n setsearchedInvoiceNumber: ThunkFunction<typeof setsearchedInvoiceNumber>;\r\n setsearchedinvoiceDueDate: ThunkFunction<typeof setsearchedinvoiceDueDate>;\r\n setinvoiceSearchedPeriodFromTo: ThunkFunction<\r\n typeof setinvoiceSearchedPeriodFromTo\r\n >;\r\n setsearchedinvoiceStatus: ThunkFunction<typeof setsearchedinvoiceStatus>;\r\n setinvoiceSearchedPeriod: ThunkFunction<typeof setinvoiceSearchedPeriod>;\r\n setsearchedInvoices: ThunkFunction<typeof setsearchedInvoices>;\r\n}\r\n\r\nexport class NavAccountSelect extends Component<\r\n NavAccountSelectStateProps & NavAccountSelectDispatchProps,\r\n any\r\n> {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n hasMorethanOneHeaderItems: true,\r\n };\r\n this.onHeaderDropdownSelected = this.onHeaderDropdownSelected.bind(this);\r\n this.createSelectItems = this.createSelectItems.bind(this);\r\n }\r\n componentDidMount() {\r\n this.props.setSelectedSoldTos(Object.keys(this.props.secondaryAccounts));\r\n }\r\n\r\n onHeaderDropdownSelected(i) {\r\n if (\r\n this.props.selectedPrimaryAccountIndex !==\r\n this.props.primaryAccounts[i].PrimaryAcct\r\n ) {\r\n this.props.setSelectedCurrency(\"\");\r\n this.props.clearSelectedInvoices();\r\n let key = this.props.primaryAccounts[i].PrimaryAcct;\r\n this.props.updatePrimaryAccount(key, true);\r\n this.props.setsearchedInvoices([]);\r\n this.props.setsearchedInvoiceNumber(\"\");\r\n this.props.setsearchedinvoiceDueDate(\"\", \"\");\r\n this.props.setinvoiceSearchedPeriodFromTo(\"\", \"\");\r\n this.props.setsearchedinvoiceStatus(\"03\");\r\n this.props.setinvoiceSearchedPeriod(\"all\");\r\n }\r\n }\r\n\r\n createSelectItems() {\r\n const items: any[] = [];\r\n for (let i = 0; i < this.props.primaryAccounts.length; i++) {\r\n const headerItem = this.props.primaryAccounts[i];\r\n let name = headerItem?.Name;\r\n if (\r\n headerItem?.CompanyCode?.startsWith(\"JP\") &&\r\n isStringNotEmptyOrNull(headerItem.name_2)\r\n ) {\r\n name = headerItem.name_2;\r\n }\r\n\r\n let activeClass = \"dropdown-item\";\r\n if (this.props.selectedPrimaryAccountIndex === i) {\r\n activeClass = \"dropdown-item\";\r\n }\r\n items.push(\r\n <Dropdown.Item\r\n className={activeClass}\r\n key={headerItem.PrimaryAcct}\r\n onClick={() => {\r\n this.onHeaderDropdownSelected(i);\r\n }}\r\n >\r\n <div>{name}</div>\r\n <div className={\"account-subheader\"}>{headerItem.PrimaryAcct}</div>\r\n </Dropdown.Item>\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n render() {\r\n const overflowClass =\r\n this.props.primaryAccounts.length > 10 ? \"header-dropdown-overflow\" : \"\";\r\n\r\n let name = this.props.selectedPrimaryAccount?.Name;\r\n if (\r\n this.props.selectedPrimaryAccount?.CompanyCode?.startsWith(\"JP\") &&\r\n isStringNotEmptyOrNull(this.props.selectedPrimaryAccount.name_2)\r\n ) {\r\n name = this.props.selectedPrimaryAccount.name_2;\r\n }\r\n\r\n return (\r\n <li className=\"nav-item\">\r\n <div\r\n className=\"dropdown customSelect mouseHover\"\r\n style={{ marginTop: \"-5px\" }}\r\n >\r\n <Dropdown>\r\n <Dropdown.Toggle\r\n id=\"dropdown-basic\"\r\n className={\"btn dropdown-toggle dropbtn truncate\"}\r\n >\r\n <div className={\"d-flex flex-row\"}>\r\n <span>\r\n <div>\r\n <div className=\"truncate\">\r\n {this.props.selectedPrimaryAccount && name}\r\n </div>\r\n <div className={\"account-subheader\"}>\r\n {this.props.selectedPrimaryAccount &&\r\n this.props.selectedPrimaryAccount.PrimaryAcct}\r\n </div>\r\n </div>\r\n </span>\r\n {this.props.primaryAccounts.length > 1 && (\r\n <span className=\"select-arrow\">\r\n <i className=\"fas fa-chevron-down\" />\r\n </span>\r\n )}\r\n </div>\r\n </Dropdown.Toggle>\r\n\r\n {this.props.primaryAccounts.length > 1 && (\r\n <Dropdown.Menu className={overflowClass}>\r\n {this.createSelectItems()}\r\n </Dropdown.Menu>\r\n )}\r\n </Dropdown>\r\n </div>\r\n </li>\r\n );\r\n }\r\n}\r\n\r\nexport default connect<any, any, any, any>(\r\n (state, props) => {\r\n return {\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(state),\r\n selectedPrimaryAccountIndex:\r\n state.user_options.selectedPrimaryAccountIndex,\r\n primaryAccounts: Object.values(state.user_options.primaryAccounts),\r\n secondaryAccounts: state.user_options.secondaryAccounts,\r\n accountType: state.user_options.accountType,\r\n };\r\n },\r\n {\r\n setSelectedSoldTos,\r\n clearSelectedInvoices,\r\n updatePrimaryAccount,\r\n setSelectedCurrency,\r\n setsearchedInvoiceNumber,\r\n setsearchedinvoiceDueDate,\r\n setinvoiceSearchedPeriodFromTo,\r\n setsearchedinvoiceStatus,\r\n setinvoiceSearchedPeriod,\r\n setsearchedInvoices,\r\n }\r\n)(NavAccountSelect);\r\n","import {User} from \"../interfaces/User\";\r\nimport {isStringNotEmptyOrNull} from \"../utils\";\r\n\r\nexport function isThirdPartyUser(user:User | null) {\r\n return isStringNotEmptyOrNull(user?.third_party_id ?? \"\");\r\n}","import React, { Component, useState } from 'react';\r\nimport { withRouter, Link } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\nimport { getSelectedPrimaryAccount, hasDeposits } from \"../../selectors/Selectors\";\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListSubheader from '@material-ui/core/ListSubheader';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport { LanguageSelector } from \"../footer/LanguageSelector\";\r\nimport Divider from '@material-ui/core/Divider';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport {\r\n setSelectedSoldTos, updatePrimaryAccount, clearSelectedInvoices, setSelectedCurrency,\r\n setsearchedinvoiceStatus, setsearchedinvoiceDueDate, setsearchedinvoiceType,\r\n setsearchedInvoiceNumber, setsearchedArticleNumber, setsearchedArticleDescription,\r\n setinvoiceSearchedPeriod, setinvoiceSearchedPeriodFromTo, setsearchedInvoices\r\n} from \"../../actions/InvoiceActions\";\r\nimport { Logout } from \"../../actions/UserActions\";\r\nimport {\r\n canEditSystemConfig,\r\n canManagePaymentMethods,\r\n canManageRegistrationRequests,\r\n canManageUsers, canViewUsers\r\n} from \"../../selectors/PermissionSelectors\";\r\nimport { AccountType } from \"../../interfaces/Accounts\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { useUser } from \"../../hooks/CommonHooks\";\r\nimport { isThirdPartyUser } from \"../../helpers/UserHelpers\";\r\nimport * as appConstants from '../../constants/ApplicationConstants';\r\nimport { ThunkFunction } from '../../interfaces/utils';\r\n \r\nfunction _MenuDrawer(props: any) {\r\n let [showAccounts, setShowAccounts] = useState(false);\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n const user = useUser();\r\n\r\n function toggleShowAccounts() {\r\n setShowAccounts(!showAccounts)\r\n }\r\n\r\n function logout() {\r\n props.logout();\r\n }\r\n\r\n function onAccountSelect(i) {\r\n if (props.selectedPrimaryAccountIndex !== props.primaryAccounts[i].PrimaryAcct) {\r\n props.setSelectedCurrency('');\r\n props.clearSelectedInvoices();\r\n let key = props.primaryAccounts[i].PrimaryAcct;\r\n props.updatePrimaryAccount(key, true);\r\n props.setsearchedInvoices([]);\r\n props.setsearchedInvoiceNumber('');\r\n props.setsearchedinvoiceDueDate('', '');\r\n props.setinvoiceSearchedPeriodFromTo('', '');\r\n props.setsearchedinvoiceStatus('03');\r\n props.setinvoiceSearchedPeriod(\"all\");\r\n props.onClose();\r\n }\r\n // props.clearSelectedInvoices();\r\n // props.updatePrimaryAccount(i, props.accountType !== AccountType.PayerAll);\r\n \r\n }\r\n\r\n return (<div>\r\n <div style={{ minWidth: \"200px\" }}>\r\n <List component=\"nav\">\r\n <ListSubheader disableSticky={true}>{f(\"navigation.account\")}</ListSubheader>\r\n <ListItem button onClick={toggleShowAccounts}>\r\n <ListItemText\r\n primary={props.selectedPrimaryAccount && (props.selectedPrimaryAccount.Name)}\r\n secondary={props.selectedPrimaryAccount && (props.selectedPrimaryAccount.PrimaryAcct)} />\r\n {showAccounts ? <ExpandLess /> : <ExpandMore />}\r\n </ListItem>\r\n </List>\r\n {showAccounts && <React.Fragment>\r\n <Divider />\r\n <List component=\"nav\">\r\n {props.primaryAccounts.map((account, index) => {\r\n return (<ListItem button key={account.PrimaryAcct} onClick={() => {\r\n onAccountSelect(index);\r\n }}>\r\n <ListItemText primary={account.Name}\r\n secondary={account.PrimaryAcct} />\r\n </ListItem>)\r\n })}\r\n </List>\r\n </React.Fragment>}\r\n {!showAccounts && <React.Fragment>\r\n <Divider />\r\n <List component=\"nav\">\r\n <ListItem component={({ innerRef, ...props }) => <Link {...props} to=\"/invoices\" />} button\r\n onClick={props.onClose}>\r\n <ListItemText primary={f(\"header.invoices\")} />\r\n </ListItem>\r\n\r\n {props.hasDeposits &&\r\n <ListItem button component={({ innerRef, ...props }) => <Link {...props} to={'/deposits'} />}\r\n onClick={props.onClose}>\r\n <ListItemText primary={f(\"header.deposits\")} />\r\n </ListItem>}\r\n </List>\r\n <Divider />\r\n <List component=\"nav\">\r\n <ListSubheader>{f(\"navigation.settings\")}</ListSubheader>\r\n {!isThirdPartyUser(user) && <ListItem button component={({ innerRef, ...props }) => <Link {...props} to={'/settings/profile'} />}\r\n onClick={props.onClose}>\r\n <ListItemText primary={f(\"settings.header.account\")} />\r\n </ListItem>}\r\n {props.canViewUsers &&\r\n <ListItem button component={({ innerRef, ...props }) => <Link {...props} to={'/settings/users'} />}\r\n onClick={props.onClose}>\r\n <ListItemText primary={f(\"settings.header.user_management\")} />\r\n </ListItem>}\r\n {/* TODO CLIENT SPECIFIC */}\r\n {/*{this.props.canManageRegistrationRequests && <ListItem button component={Link} to={'/settings/registration-requests'} onClick={this.props.onClose}>*/}\r\n {/*<ListItemText primary=\"Registration Request\"/>*/}\r\n {/*</ListItem>}*/}\r\n {props.canEditSystemConfig && <ListItem button\r\n component={({ innerRef, ...props }) => <Link {...props}\r\n to={'/settings/configuration'} />}\r\n onClick={props.onClose}>\r\n <ListItemText primary={f(\"settings.header.configuration\")} />\r\n </ListItem>}\r\n {props.canManagePaymentMethods && <ListItem button component={({ innerRef, ...props }) =>\r\n <Link {...props} to={'/settings/payment-methods'} />} onClick={props.onClose}>\r\n <ListItemText primary={f(\"settings.header.payment_methods\")} />\r\n </ListItem>}\r\n </List>\r\n <Divider />\r\n <List component=\"nav\">\r\n <ListItem button component={({ innerRef, ...props }) => <Link {...props} to={\"/help\"} />}\r\n onClick={props.onClose}>\r\n <ListItemText primary={f(\"header.help\")} />\r\n </ListItem>\r\n <ListItem button onClick={logout}>\r\n <ListItemText primary={f(\"header.logout\")} />\r\n </ListItem>\r\n </List>\r\n <Divider />\r\n <List component=\"nav\">\r\n <ListItem>\r\n <ListItemText primary={appConstants.APP_VERSION} />\r\n\r\n </ListItem>\r\n\r\n <ListItem>\r\n <LanguageSelector />\r\n\r\n </ListItem>\r\n </List>\r\n\r\n </React.Fragment>}\r\n </div>\r\n </div>)\r\n}\r\n\r\nexport default withRouter(connect<any, any, any, any>((state, props) => ({\r\n accountType: state.user_options.accountType,\r\n canEditSystemConfig: canEditSystemConfig(state),\r\n canManagePaymentMethods: canManagePaymentMethods(state),\r\n canManageRegistrationRequests: canManageRegistrationRequests(state),\r\n canManageUsers: canManageUsers(state),\r\n canViewUsers: canViewUsers(state),\r\n currentUser: state.default.currentUser,\r\n hasDeposits: hasDeposits(state),\r\n primaryAccounts: Object.values(state.user_options.primaryAccounts),\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(state)\r\n}), {\r\n logout: Logout,\r\n clearSelectedInvoices,\r\n updatePrimaryAccount,\r\n setSelectedSoldTos,\r\n setSelectedCurrency,\r\n setsearchedInvoiceNumber,\r\n setsearchedinvoiceDueDate,\r\n setinvoiceSearchedPeriodFromTo,\r\n setsearchedinvoiceStatus,\r\n setinvoiceSearchedPeriod,\r\n setsearchedInvoices,\r\n})(_MenuDrawer)) as any;\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n logo: state.app.config.style.header_logo,\r\n }\r\n})(({logo, width, height}) => {\r\n if (logo === \"\") {\r\n return null;\r\n } else {\r\n return <img src={logo} alt={\"Company Logo\"} width={width} height=\"35\"/>\r\n }\r\n }\r\n);","/* eslint-env browser */\r\n/* eslint-disable no-console */\r\nimport React, { Component, useEffect, useState } from 'react';\r\nimport { NavLink, withRouter, Link, useLocation, useHistory } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\nimport { Logout, getUserCustomers } from '../../actions/UserActions';\r\nimport NavAccountSelect from \"./NavAccountSelect\";\r\nimport { hasDeposits } from \"../../selectors/Selectors\";\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport MenuDrawer from \"./MenuDrawer\";\r\nimport Logo from \"../Logo\";\r\nimport { ThunkFunction } from \"../../interfaces/utils\";\r\nimport { RootState } from \"../../reducers/RootReducer\";\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { useUser } from \"../../hooks/CommonHooks\";\r\nimport { isThirdPartyUser } from \"../../helpers/UserHelpers\";\r\nimport { useCanMakeDeposits } from \"../../selectors/ConfigSelectors\";\r\n\r\ninterface HeaderProps {\r\n hasDeposits: boolean;\r\n loginName: string,\r\n impersonatedUserId: string,\r\n impersonatedUserName: string,\r\n}\r\n\r\ninterface HeaderDispatchProps {\r\n getUserCustomers: ThunkFunction<typeof getUserCustomers>;\r\n logout: ThunkFunction<typeof Logout>;\r\n}\r\n\r\nexport function Header(props: HeaderProps & HeaderDispatchProps) {\r\n const [collapsed, setCollapsed] = useState(true);\r\n const [drawerIsOpen, setDrawerIsOpen] = useState(false);\r\n const history = useHistory();\r\n const user = useUser();\r\n const canDeposit = useCanMakeDeposits();\r\n const intl = useIntl();\r\n let collapsedClass = 'navbar-collapse webar-navbar-collapse';\r\n let settingsLink = '/settings/profile';\r\n if (isThirdPartyUser(user)) {\r\n settingsLink = '/settings/payment-methods';\r\n }\r\n\r\n if (collapsed) {\r\n collapsedClass = 'collapse navbar-collapse webar-navbar-collapse';\r\n }\r\n\r\n const navLinkLogoutClick = (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n setCollapsed(true);\r\n // this.setState({collapsed: true});\r\n props.logout();\r\n setTimeout(() => {\r\n history.push(\"/login\");\r\n window.location.reload();\r\n }, 100);\r\n };\r\n\r\n const toggleDrawer = (isOpen) => {\r\n setDrawerIsOpen(isOpen);\r\n };\r\n\r\n return (\r\n <React.Fragment>\r\n <Drawer open={drawerIsOpen} onClose={() => toggleDrawer(false)}>\r\n <MenuDrawer onClose={() => toggleDrawer(false)} />\r\n </Drawer>\r\n <nav id=\"appHeader\" className=\"webar-navbar navbar fixed-top navbar-expand-lg navbar-light\">\r\n <div className=\"container\">\r\n <button className=\"navbar-toggler\" type=\"button\" onClick={() => toggleDrawer(true)}>\r\n <span className=\"navbar-toggler-icon\" />\r\n </button>\r\n <div className={\"d-md-none\"}>\r\n <Logo height={50} />\r\n </div>\r\n <div className={collapsedClass} id=\"navbarSupportedContent\">\r\n <ul className=\"navbar-nav mr-auto\" style={{ minHeight: \"56px\" }}>\r\n <Logo height={50} />\r\n <NavAccountSelect />\r\n </ul>\r\n <ul className=\"navbar-nav ml-auto\">\r\n <li className=\"nav-item\">\r\n <NavLink to=\"/invoices\" className=\"nav-link\" activeClassName={\"active\"}>\r\n <span><FormattedMessage id=\"header.invoices\" /></span>\r\n </NavLink>\r\n </li>\r\n <li className=\"nav-item\">\r\n <NavLink to=\"/invoice-history\" className=\"nav-link\" activeClassName={\"active\"}>\r\n {intl.formatMessage({ id: \"invoice_search.label\", defaultMessage: \"Invoice History\" })}\r\n </NavLink>\r\n </li>\r\n {canDeposit && user?.user_role != 'internal' && <li className=\"nav-item\">\r\n <NavLink to=\"/deposits\" className=\"nav-link\" activeClassName={\"active\"}>\r\n <span><FormattedMessage id=\"header.deposits\" /></span>\r\n </NavLink>\r\n </li>}\r\n {/*<li className=\"nav-item \">*/}\r\n {/* <NavLink to=\"/help\" className=\"nav-link\" activeClassName={\"active\"}>*/}\r\n {/* <span><FormattedMessage id=\"header.help\" /></span>*/}\r\n {/* </NavLink>*/}\r\n {/*</li>*/}\r\n <li className=\"nav-item \">\r\n <Link to={settingsLink} >\r\n <span style={{ marginTop:'6px' }} className=\"fas fa-cog fa-2x \" />\r\n </Link>\r\n </li>\r\n {user?.third_party_id === \"\" && <li className=\"nav-item \"\r\n title={\"You are logged in as \" + (props.loginName ? props.loginName : '')}><div>\r\n <a className=\"nav-link\" href=\"\" id=\"header-logout-button\"\r\n onClick={navLinkLogoutClick}>\r\n <span><FormattedMessage id=\"header.logout\" /></span>\r\n </a>\r\n <span className={`header-user-detail p-0 pl-2 small`}>\r\n {!props.impersonatedUserName && intl.formatMessage({ id: \"header.login_as\", defaultMessage: \"Logged in as \" }) + (props.loginName ? props.loginName : '')}\r\n {props.impersonatedUserName && intl.formatMessage({ id: \"header.working_as\", defaultMessage: \"Impersonating as \" }) + ' ' + (props.impersonatedUserName ? props.impersonatedUserName : '')}\r\n </span>\r\n </div>\r\n\r\n\r\n </li>}\r\n </ul>\r\n </div>\r\n </div>\r\n </nav>\r\n </React.Fragment>\r\n );\r\n}\r\n\r\nconst getUserName = user => user ? user.login : \"\";\r\n\r\nexport default withRouter(connect((state: RootState, props) => ({\r\n loginName: getUserName(state.default.currentUser),\r\n hasDeposits: hasDeposits(state),\r\n impersonatedUserId: state.user_options.impersonatedUserId,\r\n impersonatedUserName: state.user_options.impersonatedUserName,\r\n}), {\r\n getUserCustomers,\r\n logout: Logout,\r\n})(Header));\r\n","import React, {useEffect} from 'react';\r\nimport {useDispatch, useSelector} from 'react-redux';\r\nimport {clearSelectedInvoices, setSelectedCurrency} from \"../../actions/InvoiceActions\";\r\nimport {CurrencyOption} from \"../../reducers/CnbsReducer\";\r\nimport { MULTI_CURRENCY_LENGTH } from '../../constants/ApplicationConstants';\r\n\r\nexport function CurrencySelector(props:any) {\r\n const currencies = useSelector<any, CurrencyOption[]>(state => state.default.currencyOptions);\r\n const dispatch = useDispatch();\r\n\r\n function handleSelectCurrency(e: React.ChangeEvent<HTMLSelectElement>) {\r\n dispatch(setSelectedCurrency(e.target.value));\r\n dispatch(clearSelectedInvoices());\r\n }\r\n\r\n useEffect(() => {\r\n if(currencies.length > 0){\r\n if(props.selectedCurrency == \"\"){\r\n //Instead Of Setting the first value as default currency, set USD as default\r\n // dispatch(setSelectedCurrency(currencies[0].value));\r\n dispatch(setSelectedCurrency(\"USD\"));\r\n\r\n }\r\n }\r\n }, [currencies]);\r\n\r\n return (<select className={\"form-select-control invoicesHeadingInput\"} onChange={handleSelectCurrency}>\r\n {Array.from(currencies).map(c => <option selected={props.selectedCurrency == c.value} key={c.value} value={c.value}>{c.label}</option>)}\r\n </select>);\r\n}\r\n\r\n\r\nexport function useHasMultiCurrency(): boolean{\r\n const currencies = useSelector<any, CurrencyOption[]>(state => state.default.currencyOptions);\r\n return currencies?.length > MULTI_CURRENCY_LENGTH; //If 1 it will show only when multiple currency is available\r\n}\r\n","import React from \"react\";\r\n\r\nexport function MultiSelect(props: { mode: string, checked: boolean, disabled: boolean }) {\r\n const { mode, checked, disabled } = props;\r\n return (\r\n <div className=\"checkbox-personalized\" >\r\n {!disabled ? (\r\n <div>\r\n <input\r\n type={mode}\r\n checked={checked}\r\n disabled={disabled}\r\n readOnly={true}\r\n />\r\n <label htmlFor={`checkbox`}>\r\n <div className=\"check\" />\r\n </label>\r\n </div>\r\n ) : (\r\n <div />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport function CheckSelect(props: { isChecked: boolean, disabled: boolean }) {\r\n const { isChecked, disabled } = props;\r\n return (\r\n <div className=\"checkbox-personalized\" >\r\n {!disabled ? (\r\n <div>\r\n <input\r\n type=\"checkbox\"\r\n checked={isChecked}\r\n disabled={disabled}\r\n readOnly={true}\r\n \r\n />\r\n <label htmlFor={`checkbox`}>\r\n <div className=\"check\" />\r\n </label>\r\n </div>\r\n ) : (\r\n <div />\r\n )}\r\n </div>\r\n );\r\n};","import React from 'react';\r\nimport {AccountType, Account} from \"../../interfaces/Accounts\";\r\nimport {getSelectedPrimaryAccount} from \"../../selectors/Selectors\";\r\nimport {connect} from 'react-redux';\r\n\r\ninterface SoldToPropsOwn{\r\n value:string;\r\n}\r\ninterface SoldToStoreProps{\r\n accountType: AccountType;\r\n selectedPrimaryAccount: Account;\r\n secondaryAccounts: Account[];\r\n}\r\n\r\nexport function SoldToCell(props: SoldToPropsOwn & SoldToStoreProps){\r\n let custOption = '';\r\n if (props.accountType === AccountType.SoldTo) {\r\n custOption = props?.selectedPrimaryAccount?.Name ?? \"\";\r\n } else {\r\n for (let l = 0; l < props.secondaryAccounts.length; l += 1) {\r\n const customer = props.secondaryAccounts[l];\r\n if (props.value === customer.PrimaryAcct) {\r\n custOption = customer.Name;\r\n break;\r\n }\r\n }\r\n }\r\n if (props.value) {\r\n return (<span data-toggle=\"tooltip\" className={\"main-table-cell\"} title={custOption}>{props.value}</span>);\r\n }\r\n return (<span/>);\r\n}\r\n\r\nexport var SoldToCellConnected = connect<SoldToStoreProps, any, SoldToPropsOwn, any>((state, props) => ({\r\n accountType: state.user_options.accountType,\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(state),\r\n secondaryAccounts: state.user_options.secondaryAccounts,\r\n}))(SoldToCell);\r\n","var _style, _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgSortUp(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 9.5 11\",\n style: {\n enableBackground: \"new 0 0 9.5 11\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), _style || (_style = /*#__PURE__*/React.createElement(\"style\", {\n type: \"text/css\"\n }, \".st0{fill:#6F7275;}\")), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Sort Icon\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"List-Elements---Tiles_x2C_-Tables_x2C_-Tree\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Fundamental_Modular_UI_List-Element_Table_Fixable-Column\",\n transform: \"translate(-148.000000, -2444.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Table-Copy-4\",\n transform: \"translate(71.000000, 2302.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Table\",\n transform: \"translate(0.000000, 70.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Column-Headers\",\n transform: \"translate(0.000000, 56.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Sort-Icon\",\n transform: \"translate(77.000000, 16.000000)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Arrow-down\",\n className: \"st0\",\n d: \"M4.7,11L0,6.2h9.4L4.7,11z M4.7,10l3.1-3.1H1.6L4.7,10z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Arrow-up\",\n className: \"st0\",\n d: \"M4.7,0l4.7,4.8H0L4.7,0z\"\n })))))))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgSortUp);\nexport default __webpack_public_path__ + \"static/media/sort-up.807899ea.svg\";\nexport { ForwardRef as ReactComponent };","var _style, _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgSortDown(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 9.5 11\",\n style: {\n enableBackground: \"new 0 0 9.5 11\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), _style || (_style = /*#__PURE__*/React.createElement(\"style\", {\n type: \"text/css\"\n }, \".st0{fill:#6F7275;}\")), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Sort Icon\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"List-Elements---Tiles_x2C_-Tables_x2C_-Tree\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Fundamental_Modular_UI_List-Element_Table_Fixable-Column\",\n transform: \"translate(-148.000000, -2444.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Table-Copy-4\",\n transform: \"translate(71.000000, 2302.000000)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Arrow-down\",\n className: \"st0\",\n d: \"M81.7,142l4.7,4.8H77L81.7,142z M81.7,143l-3.1,3.1h6.2L81.7,143z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Arrow-up\",\n className: \"st0\",\n d: \"M81.7,153l-4.7-4.8h9.4L81.7,153z\"\n }))))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgSortDown);\nexport default __webpack_public_path__ + \"static/media/sort-down.ced5daaa.svg\";\nexport { ForwardRef as ReactComponent };","var _style, _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgSortNone(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 9.5 11\",\n style: {\n enableBackground: \"new 0 0 9.5 11\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), _style || (_style = /*#__PURE__*/React.createElement(\"style\", {\n type: \"text/css\"\n }, \".st0{fill:#6F7275;}\")), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Sort Icon\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"List-Elements---Tiles_x2C_-Tables_x2C_-Tree\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Fundamental_Modular_UI_List-Element_Table_Fixable-Column\",\n transform: \"translate(-148.000000, -2444.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Table-Copy-4\",\n transform: \"translate(71.000000, 2302.000000)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Arrow-down\",\n className: \"st0\",\n d: \"M81.7,142l4.7,4.8H77L81.7,142z M81.7,143l-3.1,3.1h6.2L81.7,143z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Arrow-down_1_\",\n className: \"st0\",\n d: \"M81.8,153l-4.7-4.8h9.4L81.8,153z M81.8,152l3.1-3.1h-6.2L81.8,152z\"\n }))))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgSortNone);\nexport default __webpack_public_path__ + \"static/media/sort-none.5a975d79.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nimport { FormattedMessage, IntlShape } from \"react-intl\";\r\nimport {\r\n csvDateFormatter,\r\n csvDaysToPayFormatter,\r\n csvDocumentNumberFormatter,\r\n csvDueDateFormatter,\r\n csvMoneyFormatter,\r\n csvReferenceFormatter,\r\n csvStatusFormatter,\r\n dateFormatter,\r\n daysToPayFormatter,\r\n documentNumberFormatter,\r\n dueFormatter,\r\n isCredit,\r\n isInvoice,\r\n moneyTableCell,\r\n paidFormatter,\r\n pdfFormatter,\r\n referenceFormatter,\r\n statusFormatter,\r\n statementIdFormatter\r\n} from \"../../common/invoiceHelpers\";\r\nimport { SoldToCellConnected } from \"./SoldToCell\";\r\nimport { ReactComponent as SortUpIcon } from \"../../images/sort-icons/sort-up.svg\";\r\nimport { ReactComponent as SortDownIcon } from \"../../images/sort-icons/sort-down.svg\";\r\nimport { ReactComponent as SortNoneIcon } from \"../../images/sort-icons/sort-none.svg\";\r\nimport { Invoice } from \"../../interfaces/invoice\";\r\nimport moment from \"moment\";\r\n\r\nfunction mapSoldTo(cell) {\r\n return <SoldToCellConnected value={cell} />;\r\n}\r\n\r\nfunction renderCaret(order, column) {\r\n if (order === \"asc\") {\r\n return <SortUpIcon className={\"d-inline-block table-header-sort-icon\"} />;\r\n }\r\n if (order === \"desc\") {\r\n return <SortDownIcon className={\"d-inline-block table-header-sort-icon\"} />;\r\n }\r\n return <SortNoneIcon className={\"d-inline-block table-header-sort-icon\"} />;\r\n}\r\n\r\nfunction sortStringNumber(a: string, b: string, order: \"desc\" | \"asc\") {\r\n if (order === \"asc\") {\r\n if (typeof a === \"undefined\" && typeof b !== \"undefined\") {\r\n return -1;\r\n }\r\n if (typeof a !== \"undefined\" && typeof b === \"undefined\") {\r\n return 1;\r\n }\r\n if (typeof a === \"undefined\" && typeof b === \"undefined\") {\r\n return 0;\r\n }\r\n if (parseFloat(a) < parseFloat(b)) {\r\n return -1;\r\n } else if (parseFloat(a) > parseFloat(b)) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n } else {\r\n if (parseFloat(a) > parseFloat(b)) {\r\n return -1;\r\n } else if (parseFloat(a) < parseFloat(b)) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n}\r\n\r\nfunction sortStringDate(a: string, b: string, order: \"asc\" | \"desc\") {\r\n let aDate = moment(a, \"MM-DD-YYYY\");\r\n let bDate = moment(b, \"MM-DD-YYYY\");\r\n if (order === \"desc\") {\r\n let diff = aDate.diff(bDate, \"days\");\r\n return diff;\r\n } else {\r\n let diff = bDate.diff(aDate, \"days\");\r\n return diff;\r\n }\r\n}\r\n\r\nexport function buildColumnConfigs(\r\n intl: IntlShape,\r\n tableConfig: { columns: any },\r\n isTablet: any,\r\n StatementId: string\r\n\r\n \r\n){\r\n const f = (id) => intl.formatMessage({ id: id });\r\n const showStatementIdColumn = StatementId && StatementId.trim().length > 0\r\n\r\n const columns = [\r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"billing_document_type\",\r\n formatter: statusFormatter,\r\n csvFormatter: csvStatusFormatter(intl),\r\n text: f(\"invoice_table.status\"),\r\n headerStyle: { width: \"65px\" },\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n },\r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"reference_number\",\r\n formatter: referenceFormatter,\r\n csvFormatter: csvReferenceFormatter(intl),\r\n text: f(\"invoice_table.reference_number\"),\r\n sort: true,\r\n sortCaret: renderCaret,\r\n headerStyle: { width: \"85px\" },\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n hidden: isTablet,\r\n },\r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"billing_document_number\",\r\n formatter: documentNumberFormatter,\r\n csvFormatter: csvDocumentNumberFormatter(intl),\r\n csvType: String,\r\n text: f(\"invoice_table.document_number\"),\r\n sortCaret: renderCaret,\r\n headerStyle: { width: \"85px\" },\r\n sort: true,\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n sortFunc: (a, b, order, dataField, rowA, rowB) => {\r\n if (order === \"asc\") return a - b;\r\n else return b - a;\r\n },\r\n },\r\n // {\r\n // headerClasses: \"column-header\",\r\n // dataField: \"document_number_finance\",\r\n // formatter: documentNumberFormatter,\r\n // csvFormatter: csvDocumentNumberFormatter(intl),\r\n // csvType: String,\r\n // text: f(\"invoice_table.document_number\"),\r\n // sortCaret: renderCaret,\r\n // headerStyle: { width: '95px' },\r\n // sort: true,\r\n // headerAlign: \"center\",\r\n // align: \"center\",\r\n\r\n \r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"STATEMENT_ID\",\r\n text: f(\"invoice_table.statement_id\"),\r\n headerStyle: { width: \"115px\" },\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n formatter: () => { \r\n return (\r\n <span className=\"main-table-cell\">{StatementId}</span>\r\n )\r\n },\r\n hidden: !showStatementIdColumn\r\n },\r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"document_date\",\r\n formatter: dateFormatter,\r\n csvFormatter: csvDateFormatter(intl),\r\n text: f(\"invoice_table.document_date\"),\r\n sort: true,\r\n sortCaret: renderCaret,\r\n headerStyle: { width: \"65px\" },\r\n headerAlign: \"center\",\r\n sortFunc: sortStringDate,\r\n align: \"center\",\r\n },\r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"total_amount\",\r\n formatter: moneyTableCell,\r\n csvFormatter: csvMoneyFormatter(intl),\r\n csvType: Number,\r\n headerFormatter: (col, colIndex, components) => {\r\n return (\r\n <span>\r\n <FormattedMessage id={\"invoice_table.total_amount\"} />\r\n {components.sortElement}\r\n </span>\r\n );\r\n },\r\n text: f(\"invoice_table.total_amount\"),\r\n sort: true,\r\n sortCaret: renderCaret,\r\n headerStyle: { width: \"80px\" },\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n sortFunc: sortStringNumber,\r\n },\r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"paid_amount\",\r\n formatter: paidFormatter,\r\n csvFormatter: csvMoneyFormatter(intl),\r\n csvType: Number,\r\n text: f(\"invoice_table.paid_amount\"),\r\n sort: true,\r\n sortCaret: renderCaret,\r\n headerStyle: { width: \"80px\" },\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n sortFunc: sortStringNumber,\r\n },\r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"open_amount\",\r\n formatter: moneyTableCell,\r\n csvFormatter: csvMoneyFormatter(intl),\r\n csvType: Number,\r\n headerFormatter: (col, colIndex, components) => {\r\n return (\r\n <span>\r\n <FormattedMessage id={\"invoice_table.open_amount\"} />\r\n {components.sortElement}\r\n </span>\r\n );\r\n },\r\n text: f(\"invoice_table.open_amount\"),\r\n sort: true,\r\n sortCaret: renderCaret,\r\n headerStyle: { width: \"80px\" },\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n sortFunc: sortStringNumber,\r\n },\r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"due_date\",\r\n formatter: dueFormatter,\r\n csvFormatter: csvDueDateFormatter(intl),\r\n text: f(\"invoice_table.due_date\"),\r\n sort: true,\r\n sortCaret: renderCaret,\r\n headerStyle: { width: \"70px\" },\r\n sortFunc: (a, b, order, dataField, rowA, rowB) => {\r\n if (isInvoice(rowA) && isInvoice(rowB)) {\r\n return sortStringDate(a, b, order);\r\n }\r\n if (isInvoice(rowA) && !isInvoice(rowB)) {\r\n return -1;\r\n }\r\n if (isInvoice(rowB) && !isInvoice(rowA)) {\r\n return 1;\r\n }\r\n if (isCredit(rowA) && !isCredit(rowB)) {\r\n return -1;\r\n }\r\n if (isCredit(rowB) && !isCredit(rowA)) {\r\n return 1;\r\n }\r\n if (isCredit(rowA) && isCredit(rowB)) {\r\n return sortStringDate(rowA.document_date, rowB.document_date, order);\r\n }\r\n return sortStringDate(rowA.document_date, rowB.document_date, order);\r\n },\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n },\r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"days_in_arrears\",\r\n formatter: daysToPayFormatter,\r\n csvFormatter: csvDaysToPayFormatter(intl),\r\n text: f(\"invoice_table.days_in_arrears\"),\r\n headerStyle: { width: \"100px\" },\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n hidden: isTablet,\r\n },\r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"pdf_document_available\",\r\n formatter: pdfFormatter,\r\n text: f(\"invoice_table.pdf\"),\r\n headerStyle: { width: \"45px\" },\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n csvExport: false,\r\n },\r\n {\r\n headerClasses: \"column-header\",\r\n dataField: \"soldto_number\",\r\n formatter: mapSoldTo,\r\n text: f(\"invoice_table.soldto_number\"),\r\n headerStyle: { width: \"65px\" },\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n hidden: isTablet,\r\n },\r\n ];\r\n\r\n if (isTablet) {\r\n // columns.splice(1, 1)\r\n // columns.splice(7, 1)\r\n // columns.splice(9, 1)\r\n //columns.splice(11, 1)\r\n }\r\n\r\n // Here we get columns based on what fields are in the config.\r\n return tableConfig.columns\r\n .filter((config) => {\r\n return columns.find((_) => _.dataField === config.key);\r\n })\r\n .map((config) => columns.find((_) => _.dataField === config.key));\r\n}\r\n","import React from \"react\";\r\nimport { Invoice, InvoiceWithKey } from \"../../interfaces/invoice\";\r\nimport {downloadExcelFile, getInvoiceBulkPDF} from \"../../actions/InvoiceActions\";\r\nimport {useDispatch} from \"react-redux\";\r\nimport {Dropdown} from \"react-bootstrap\";\r\nimport {useIntl} from \"react-intl\";\r\n\r\n\r\nexport function DownloadPdfZipButton(props: { invoiceSearchQuery: any }) {\r\n const dispatch = useDispatch();\r\n const intl = useIntl();\r\n\r\n function downloadZip() {\r\n try {\r\n getInvoiceBulkPDF(dispatch, props.invoiceSearchQuery);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n return (\r\n <Dropdown.Item onClick={downloadZip}>{intl.formatMessage({id:\"invoice_export.all_pdfs\"})}</Dropdown.Item>\r\n )\r\n}\r\n\r\nexport function DownloadPdfZipButtonwithCurrency(props: { invoiceQueryforPDFandCSVandexcel: any }) {\r\n const dispatch = useDispatch();\r\n const intl = useIntl();\r\n\r\n function downloadZip() {\r\n try {\r\n getInvoiceBulkPDF(dispatch, props.invoiceQueryforPDFandCSVandexcel);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n return (\r\n <Dropdown.Item onClick={downloadZip}>{intl.formatMessage({id:\"invoice_export.all_pdfs\"})}</Dropdown.Item>\r\n )\r\n}\r\n\r\n\r\nexport function DownloadExcelButton(props: { invoiceSearchQuery: any }) {\r\n const dispatch = useDispatch();\r\n const intl = useIntl();\r\n\r\n function downloadZip() {\r\n try {\r\n downloadExcelFile(dispatch, props.invoiceSearchQuery);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n return (\r\n <Dropdown.Item onClick={downloadZip}>{intl.formatMessage({id:\"invoice_export.all_excel\"})}</Dropdown.Item>\r\n )\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport function DownloadExcelButtonwithCurrency(props: { invoiceQueryforPDFandCSVandexcel: any }) {\r\n const dispatch = useDispatch();\r\n const intl = useIntl();\r\n \r\n function downloadZip() {\r\n try {\r\n downloadExcelFile(dispatch, props.invoiceQueryforPDFandCSVandexcel);\r\n \r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n \r\n return (\r\n <Dropdown.Item onClick={downloadZip}>{intl.formatMessage({id:\"invoice_export.all_excel\"})}</Dropdown.Item>\r\n )\r\n}","import React, { Component } from 'react';\r\nimport axios from 'axios';\r\nimport ReactHTMLTableToExcel from 'react-html-table-to-excel';\r\nimport { Public } from '@material-ui/icons';\r\nimport { FormattedDate, useIntl } from \"react-intl\";\r\nimport { CurrencyDisplay, CurrencySymbol } from \"../../common/CurrencyDisplay\";\r\nimport { REASON_CODE } from \"../../constants/ApplicationConstants\";\r\nimport Moment from 'moment';\r\n\r\nlet date = new Date();\r\n\r\nfunction getDifferenceInDays(DueDate: any,DataDiff: any, paymentDue: any) {\r\n const date1 = new Date(DueDate); \r\n if (paymentDue > 0) {\r\n if (date > date1) {\r\n return \"-\" + DataDiff;\r\n }\r\n else {\r\n return DataDiff;\r\n }\r\n }\r\n else {\r\n return null;\r\n } \r\n}\r\n\r\nfunction isCredit(open_amount: any): boolean {\r\n return (typeof open_amount !== \"undefined\" && open_amount < 0);\r\n}\r\nfunction csvStatusFormatter(clearing_date: any, item_is_a_payment: any, open_amount: any)\r\n{ \r\n if (isCredit(open_amount)) {\r\n return \"credit\";\r\n }\r\n if ((clearing_date ?? \"\" != \"\") || (clearing_date != undefined)) {\r\n return \"paid\";\r\n }\r\n if ((item_is_a_payment === \"X\") || (item_is_a_payment != undefined)) {\r\n return \"paid\";\r\n } \r\n return \"open\";\r\n}\r\nfunction ExportExcel(props) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n return (\r\n\r\n <div>\r\n <table id=\"Invoice\" className=\"table\" style={{ display: 'none' }}>\r\n <tr>\r\n <th>{props.data.columnsData[0].text}</th>\r\n <th>{props.data.columnsData[1].text}</th>\r\n <th>{props.data.columnsData[2].text}</th>\r\n <th>{props.data.columnsData[3].text}</th>\r\n <th>{props.data.columnsData[4].text}</th>\r\n <th>{props.data.columnsData[5].text}</th>\r\n <th>{props.data.columnsData[6].text}</th>\r\n <th>{props.data.columnsData[7].text}</th>\r\n <th>{props.data.columnsData[8].text}</th>\r\n <th>{props.data.columnsData[10].text}</th>\r\n </tr> \r\n { \r\n props.data.invoicesData.map((p, index) => {\r\n return <tr key={index}>\r\n <td>{csvStatusFormatter(p.clearing_date, p.item_is_a_payment, p.open_amount)}</td>\r\n {/*<td>{p.open_amount < 0 ? f(\"invoice_detail.credit\") : f(\"invoice_detail.open\")}</td>*/}\r\n <td>{p.reference_number}</td>\r\n <td>{p.billing_document_number != null ? p.billing_document_number : p.document_number_finance } </td>\r\n <td>{p.document_date}</td>\r\n <td>{p.total_amount}</td>\r\n <td>{p.paid_amount}</td>\r\n <td>{p.open_amount}</td>\r\n <td>{p.due_date}</td> \r\n <td>{getDifferenceInDays(p.due_date, p.days_in_arrears, p.open_amount) } </td>\r\n <td>{p.soldto_number}</td>\r\n <td style={{ paddingRight: \"114px\" }} >{p.Department}</td>\r\n </tr>\r\n })\r\n } \r\n </table> \r\n <div> \r\n <ReactHTMLTableToExcel\r\n className=\"dropdown-item !important\"\r\n table=\"Invoice\"\r\n filename=\"InvoiceExport\"\r\n sheet=\"Sheet\"\r\n buttonText=\"All as Excel\" />\r\n </div >\r\n\r\n </div >\r\n\r\n );\r\n}\r\n\r\nexport default ExportExcel;","import React, { useRef, useState, useEffect, Component } from \"react\";\r\nimport { connect, useDispatch, useSelector } from \"react-redux\";\r\nimport BootstrapTable from \"react-bootstrap-table-next\";\r\nimport {\r\n getInvoiceQuery,\r\n getSelectedInvoiceKeys,\r\n getSelectedPrimaryAccount,\r\n getSelectedSecondaryAccount,\r\n getInvoiceQueryforPDFandCSVandexcel,\r\n} from \"../../selectors/Selectors\";\r\nimport {\r\n addInvoiceToSelected,\r\n removeInvoiceFromSelected,\r\n payerInvoiceDueAmount,\r\n} from \"../../actions/InvoiceActions\";\r\nimport _ from \"lodash\";\r\nimport { FormattedMessage, useIntl } from \"react-intl\";\r\nimport { Invoice, InvoiceWithKey } from \"../../interfaces/invoice\";\r\nimport { AccountType, Account } from \"../../interfaces/Accounts\";\r\nimport { getInvoiceKey } from \"../../utils\";\r\nimport { useHasMultiCurrency, CurrencySelector } from \"./CurrencySelector\";\r\nimport { useInvoiceTotal } from \"../../hooks/InvoiceHooks\";\r\nimport { RootState } from \"../../reducers/RootReducer\";\r\nimport { InvoiceCard } from \"./InvoiceCard\";\r\nimport { CheckSelect, MultiSelect } from \"../../common/MultiSelect\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\nimport { buildColumnConfigs } from \"./InvoiceTableObject\";\r\nimport ToolkitProvider, { CSVExport } from \"react-bootstrap-table2-toolkit\";\r\nimport {\r\n DownloadExcelButton,\r\n DownloadPdfZipButton,\r\n DownloadPdfZipButtonwithCurrency,\r\n DownloadExcelButtonwithCurrency,\r\n} from \"./DownloadPdfZipButton\";\r\nimport { DropdownButton, Dropdown, Button } from \"react-bootstrap\";\r\nimport {\r\n useCanMakePayments,\r\n useCurrencyDecimalLookup,\r\n} from \"../../selectors/ConfigSelectors\";\r\nimport {\r\n isPayment,\r\n sortStringDate,\r\n dueDateSort,\r\n statementIdFormatter,\r\n} from \"../../common/invoiceHelpers\";\r\nimport { boolean, object } from \"yup\";\r\nimport ExportExcel from \"./ExportExcel\";\r\nimport {\r\n documentNumberFormatter,\r\n dueFormatter,\r\n isCredit,\r\n isInvoice,\r\n moneyTableCell,\r\n paidFormatter,\r\n pdfFormatter,\r\n querySort,\r\n} from \"../../common/invoiceHelpers\";\r\nimport moment from \"moment\";\r\nimport {\r\n clearSelectedInvoices,\r\n setSelectedCurrency,\r\n} from \"../../actions/InvoiceActions\";\r\nimport { useHistory } from \"react-router\";\r\n\r\nconst { ExportCSVButton } = CSVExport;\r\nlet AvailableCurrencies: string[] = [];\r\nlet invoicesWithKeys: InvoiceWithKey[] = [];\r\nlet DDLSelectedCurrency = \"\";\r\n\r\ninterface TableConfig {\r\n columns: { [key: string]: string }[];\r\n}\r\n\r\ninterface IComponentOwnProps {\r\n isSearch: boolean;\r\n}\r\n\r\ninterface IComponentStoreProps {\r\n accountType: AccountType;\r\n secondaryAccounts: Account[];\r\n selectedPrimaryAccount: Account;\r\n invoices: Invoice[];\r\n selectedInvoicesKeys: string[];\r\n tableConfig: TableConfig;\r\n selectedSoldTos: string[];\r\n}\r\n\r\ninterface InvoiceSearchComponentOwnProps {\r\n isSearch: boolean;\r\n invoices: Invoice[];\r\n invoiceSearchQuery: any;\r\n}\r\n\r\ninterface InvoiceListSearchProps {\r\n accountType: any;\r\n secondaryAccounts: any;\r\n selectedPrimaryAccount: any;\r\n selectedInvoicesKeys: string[];\r\n tableConfig: TableConfig;\r\n selectedSoldTos: string[];\r\n}\r\n\r\ninterface IComponentDispatchProps {\r\n addInvoiceToSelected: any;\r\n removeInvoiceFromSelected: any;\r\n payerInvoiceDueAmount: any;\r\n}\r\n\r\ntype IComponentProps = IComponentOwnProps &\r\n IComponentStoreProps &\r\n IComponentDispatchProps;\r\n\r\ninterface InvoiceListInternalProps {\r\n isSearch: boolean;\r\n}\r\n\r\nfunction _InvoiceList(props) {\r\n\r\n const hasMultiCurrency = useHasMultiCurrency();\r\n const history = useHistory();\r\n const selectedCurrency = useSelector<RootState, string>(\r\n (state) => state.default.selectedCurrencyOptionValue\r\n );\r\n const canMakePayment = useCanMakePayments();\r\n const decimalLookup = useCurrencyDecimalLookup();\r\n const [title, settitle] = useState(\"hhhh\");\r\n const [data, setchildData] = useState([]);\r\n const [tempselectedCurrency, settempselectedCurrency] = useState([]);\r\n const isTablet = useMediaQuery({ query: \"(max-width: 820px)\" });\r\n const isMobile = useMediaQuery({ query: \"(max-width: 600px)\" });\r\n const intl = useIntl();\r\n const f = (id) => intl.formatMessage({ id: id });\r\n const [invoicesList, setInvoicesList] = useState(props.invoices);\r\n const dispatch = useDispatch();\r\n \r\n let SortOptions = [\r\n {\r\n label: f(\"invoice_export.doc-low-to-high\"),\r\n value: \"1\",\r\n },\r\n {\r\n label: f(\"invoice_export.doc-high-to-low\"),\r\n value: \"2\",\r\n },\r\n {\r\n label: f(\"invoice_export.due-low-to-high\"),\r\n value: \"3\",\r\n },\r\n {\r\n label: f(\"invoice_export.due-high-to-low\"),\r\n value: \"4\",\r\n },\r\n ];\r\n\r\n function onRowSelect(row: Invoice, isSelected) {\r\n if (isSelected) {\r\n props.addInvoiceToSelected(row, decimalLookup(row.currency_key));\r\n } else {\r\n props.removeInvoiceFromSelected(row, decimalLookup(row.currency_key));\r\n }\r\n }\r\n\r\n function renderHeaderCheckbox({ mode, checked, indeterminate }) {\r\n return (\r\n <div className=\"column-header text-center\" style={{}}>\r\n <span>\r\n <FormattedMessage id={\"invoice_table.pay\"} />\r\n </span>\r\n </div>\r\n );\r\n }\r\n\r\n function onSelectAll(isSelect, rows, e) {\r\n rows.forEach((row) => {\r\n if (isSelect) {\r\n props.addInvoiceToSelected(row, decimalLookup(row.currency_key));\r\n } else {\r\n props.removeInvoiceFromSelected(row, decimalLookup(row.currency_key));\r\n }\r\n });\r\n }\r\n\r\n function clickSelectAll(e) {\r\n e.preventDefault();\r\n invoicesList.forEach((invoice) => {\r\n\r\n props.addInvoiceToSelected(invoice, decimalLookup(invoice.currency_key));\r\n });\r\n //props.invoicesList.filter((invoice) => !isNotSelectable(invoice))\r\n // .filter(filterFilteredInvoices)\r\n // .forEach(invoice => {\r\n // props.addInvoiceToSelected(invoice, decimalLookup(invoice.currency_key));\r\n // });\r\n }\r\n\r\n function filterInvoices(invoice, e) {\r\n //if (\r\n // hasMultiCurrency &&\r\n // e &&\r\n // e !== invoice.currency_key\r\n //) {\r\n // return false;\r\n //}\r\n if (\r\n props.accountType === AccountType.Payer ||\r\n props.accountType === AccountType.PayerAll\r\n ) {\r\n if (\r\n props.selectedSoldTos.length > 0 &&\r\n invoice.finance_document_type == \"DZ\" && \r\n invoice.finance_document_only == \"X\"\r\n ) {\r\n return true;\r\n } else {\r\n return (\r\n props.selectedSoldTos.indexOf(\r\n _.trimStart(invoice.soldto_number, \"0\")\r\n ) !== -1\r\n );\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function filterFilteredInvoices(invoice) {\r\n if (\r\n hasMultiCurrency &&\r\n props.selectedCurrency &&\r\n props.selectedCurrency !== invoice.currency_key\r\n ) {\r\n return false;\r\n }\r\n if (\r\n props.accountType === AccountType.Payer ||\r\n props.accountType === AccountType.PayerAll\r\n ) {\r\n if (\r\n props.selectedSoldTos.length > 0 &&\r\n invoice.finance_document_type == \"DZ\" &&\r\n invoice.finance_document_only == \"X\" \r\n \r\n ) {\r\n return true;\r\n } else {\r\n return (\r\n props.selectedSoldTos.indexOf(\r\n _.trimStart(invoice.soldto_number, \"0\")\r\n ) !== -1\r\n );\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function clickDeselectAll(e) {\r\n e.preventDefault();\r\n invoicesList.forEach((invoice) => {\r\n props.removeInvoiceFromSelected(invoice);\r\n });\r\n //props.invoicesList.filter((invoice) => !isNotSelectable(invoice))\r\n // .filter(filterFilteredInvoices)\r\n // .forEach(invoice => {\r\n // props.removeInvoiceFromSelected(invoice);\r\n // });\r\n }\r\n\r\n function isNotSelectable(invoice: Invoice) {\r\n if (\r\n isPayment(invoice) ||\r\n (hasMultiCurrency && invoice.currency_key !== props.selectedCurrency)\r\n ) {\r\n return true;\r\n }\r\n return props.isSearch;\r\n }\r\n\r\n function hideSelect(): boolean {\r\n return props.isSearch || !canMakePayment || props.PaymentDisable;\r\n }\r\n const selectRowProp = {\r\n mode: \"checkbox\",\r\n onSelect: onRowSelect,\r\n onSelectAll: onSelectAll,\r\n selected: props.selectedInvoicesKeys,\r\n selectionRenderer: MultiSelect,\r\n selectionHeaderRenderer: renderHeaderCheckbox,\r\n nonSelectable: props.invoices\r\n .filter((invoice) => isNotSelectable(invoice))\r\n .map((invoice) => {\r\n return getInvoiceKey(invoice);\r\n }),\r\n hideSelectColumn: hideSelect(),\r\n };\r\n const tab = useRef(\"table\");\r\n const top = \"Top\";\r\n\r\n function isPdfFilenotExists(invoicesWithKeys): boolean {\r\n const PDFFileIds: string[] = [];\r\n if (sessionStorage.getItem(\"invoicesWithKeysData\") != null) {\r\n sessionStorage.removeItem(\"invoicesWithKeysData\");\r\n }\r\n var pdfExists = false;\r\n invoicesWithKeys.forEach((invoice) => {\r\n if (invoice.pdf_document_available === \"X\") {\r\n pdfExists = true;\r\n if (\r\n invoice.billing_document_number != null &&\r\n \r\n invoice.billing_document_type !== \"01\" && invoice.soldto_number != null\r\n ) {\r\n PDFFileIds.push(invoice.billing_document_number, invoice.soldto_number);\r\n }\r\n }\r\n });\r\n sessionStorage.setItem(\"invoicesWithKeysData\", JSON.stringify(PDFFileIds));\r\n return pdfExists;\r\n }\r\n\r\n //let invoices = props.invoices;\r\n //if (!props.isSearch) {\r\n // invoices = props.invoices.filter(filterFilteredInvoices);\r\n //}\r\n\r\n //invoices = invoices.map((item) => {\r\n\r\n // if (!Object.keys(item).includes('billing_document_number')) {\r\n // return { ...item, billing_document_number: '0' };\r\n // }\r\n\r\n // return item;\r\n\r\n //});\r\n\r\n useEffect(() => {\r\n dispatch(setSelectedCurrency(\"\"));\r\n DDLSelectedCurrency = \"\";\r\n\r\n let currencies: string[] = [];\r\n invoicesWithKeys = [];\r\n let invoicestemp: any[] = [];\r\n\r\n props.invoices.forEach((invoice) => {\r\n if (currencies.indexOf(invoice.currency_key) === -1) {\r\n currencies.push(invoice.currency_key);\r\n }\r\n });\r\n if (currencies.length > 0) {\r\n let value;\r\n\r\n value = currencies[0].toString();\r\n\r\n if (currencies.includes(\"USD\")) {\r\n value = \"USD\";\r\n } else {\r\n value = currencies[0].toString();\r\n }\r\n\r\n if (!props.isSearch) {\r\n invoicestemp = props.invoices.filter(\r\n (item) => item.currency_key === value\r\n );\r\n dispatch(setSelectedCurrency(value));\r\n } else {\r\n invoicestemp = props.invoices;\r\n }\r\n } else {\r\n let value;\r\n if (\r\n props.selectedCurrency === \"\" ||\r\n props.selectedCurrency === undefined\r\n ) {\r\n value = currencies[0];\r\n } else {\r\n value = props.selectedCurrency;\r\n }\r\n\r\n invoicestemp = props.invoices.filter(\r\n (item) => item.currency_key === value\r\n );\r\n dispatch(setSelectedCurrency(value));\r\n }\r\n\r\n if (!props.isSearch) {\r\n invoicestemp = invoicestemp.filter(filterFilteredInvoices);\r\n\r\n invoicestemp = invoicestemp.map((item: any) => {\r\n if (!Object.keys(item).includes(\"billing_document_number\")) {\r\n return { ...item, billing_document_number: \"0\" };\r\n }\r\n return item;\r\n });\r\n } else {\r\n invoicestemp = invoicestemp.map((item: any) => {\r\n if (!Object.keys(item).includes(\"billing_document_number\")) {\r\n return { ...item, billing_document_number: \"0\" };\r\n }\r\n return item;\r\n });\r\n }\r\n // if (!props.isSearch && props.StatementId) { \r\n\r\n // invoicestemp = invoicestemp.filter(filterFilteredInvoices);\r\n\r\n // invoicestemp = invoicestemp.map((item: any) => {\r\n // if (!Object.keys(item).includes(\"invoice_filter\")) {\r\n // return { ...item, billing_document_number: \"0\" };\r\n // }\r\n // return item;\r\n // });\r\n\r\n //}\r\n setInvoicesList(invoicestemp);\r\n\r\n // settitle(\"GridUpdated\");\r\n }, [props.invoices, props.selectedSoldTos]);\r\n\r\n\r\n // useEffect(() => {\r\n // console.log(invoicesList);\r\n // let invoicesLocal: any[] = [];\r\n // if (!props.isSearch) {\r\n // invoicesLocal = invoicesList.filter(filterFilteredInvoices);\r\n\r\n // invoicesLocal = invoicesLocal.map((item: any) => {\r\n // if (!Object.keys(item).includes(\"billing_document_number\")) {\r\n // return { ...item, billing_document_number: \"0\" };\r\n // }\r\n // return item;\r\n // });\r\n // } else {\r\n // invoicesLocal = invoicesLocal.map((item: any) => {\r\n // if (!Object.keys(item).includes(\"billing_document_number\")) {\r\n // return { ...item, billing_document_number: \"0\" };\r\n // }\r\n // return item;\r\n // });\r\n // }\r\n\r\n // console.log(invoicesLocal);\r\n // setInvoicesList(invoicesLocal);\r\n\r\n // //settitle(\"GridUpdated\");\r\n // }, [props.selectedSoldTos]);\r\n\r\n let columns = buildColumnConfigs(intl, props.tableConfig, isTablet,props.StatementId);\r\n \r\n\r\n const handleCurrencySelect = (e) => {\r\n if (AvailableCurrencies.length == 1) {\r\n DDLSelectedCurrency = AvailableCurrencies[0].toString();\r\n } else {\r\n DDLSelectedCurrency = e;\r\n }\r\n const newList = props.invoices\r\n .filter((item) => item.currency_key === e)\r\n .filter(filterInvoices);\r\n // setInvoices(newList);\r\n\r\n if (!props.isSearch) {\r\n props.invoices.forEach((invoice) => {\r\n props.removeInvoiceFromSelected(\r\n invoice,\r\n decimalLookup(invoice.currency_key)\r\n );\r\n });\r\n }\r\n if (e != \"All\") {\r\n setInvoicesList(newList);\r\n dispatch(setSelectedCurrency(e));\r\n } else {\r\n setInvoicesList(props.invoices);\r\n DDLSelectedCurrency = \"\";\r\n dispatch(setSelectedCurrency(\"\"));\r\n }\r\n // if (e != \"All\") {\r\n // if (AvailableCurrencies.length == 1) {\r\n // DDLSelectedCurrency = AvailableCurrencies[0].toString();\r\n // } else {\r\n // DDLSelectedCurrency = e;\r\n // }\r\n // const newList = props.invoices\r\n // .filter((item) => item.currency_key === e)\r\n // .filter(filterInvoices);\r\n // // setInvoices(newList);\r\n // dispatch(setSelectedCurrency(e));\r\n // if (!props.isSearch) {\r\n // props.invoices.forEach((invoice) => {\r\n // props.removeInvoiceFromSelected(\r\n // invoice,\r\n // decimalLookup(invoice.currency_key)\r\n // );\r\n // });\r\n // }\r\n // // invoicesWithKeys = [];\r\n // // invoicesWithKeys = newList.map((_: any) => {\r\n // // _._key = getInvoiceKey(_);\r\n // // return _ as InvoiceWithKey;\r\n // // });\r\n // console.log(newList);\r\n // setInvoicesList(newList);\r\n // } else {\r\n // if (AvailableCurrencies.length == 1) {\r\n // DDLSelectedCurrency = AvailableCurrencies[0].toString();\r\n // } else {\r\n // DDLSelectedCurrency = \"\";\r\n // }\r\n\r\n // console.log(props.invoices);\r\n // // invoicesWithKeys = [];\r\n // // invoicesWithKeys = props.invoices.map((_: any) => {\r\n // // _._key = getInvoiceKey(_);\r\n // // return _ as InvoiceWithKey;\r\n // // });\r\n // }\r\n // settitle(\"GridUpdated\");\r\n // if (sessionStorage.getItem(\"searched\") != null) {\r\n // sessionStorage.removeItem(\"searched\");\r\n // }\r\n };\r\n\r\n //useEffect(() => {\r\n // if (!props.isSearch) {\r\n // handleCurrencySelect(\"USD\");\r\n // }\r\n //}, [props.invoices]);\r\n\r\n const handleSortSelect = (e) => {\r\n switch (e) {\r\n case \"1\":\r\n setSelectedDueFunction(\"\");\r\n setSelectedFunction(\"asc\");\r\n return;\r\n case \"2\":\r\n setSelectedDueFunction(\"\");\r\n setSelectedFunction(\"desc\");\r\n\r\n return;\r\n case \"3\":\r\n setSelectedFunction(\"\");\r\n setSelectedDueFunction(\"desc\");\r\n return;\r\n case \"4\":\r\n setSelectedFunction(\"\");\r\n setSelectedDueFunction(\"asc\");\r\n return;\r\n default:\r\n return;\r\n }\r\n };\r\n\r\n // if (sessionStorage.getItem(\"searched\") == \"true\") {\r\n // handleCurrencySelect(\"All\");\r\n // DDLSelectedCurrency = \"\";\r\n // }\r\n //const SelectInvoiceBasedOnCurrency = () => {\r\n // if (invoicesWithKeys.length === 0) {\r\n // AvailableCurrencies = [];\r\n // }\r\n // invoicesWithKeys.forEach((invoice) => {\r\n // if (AvailableCurrencies.indexOf(invoice.currency_key) === -1) {\r\n // AvailableCurrencies.push(invoice.currency_key)\r\n // }\r\n // });\r\n // if (AvailableCurrencies.length === 1) {\r\n // DDLSelectedCurrency = AvailableCurrencies[0].toString();\r\n // }\r\n // settitle(\"DDLUpdated\");\r\n //}\r\n\r\n const LoadCurrencies = () => {\r\n if (props.invoices.length === 0) {\r\n AvailableCurrencies = [];\r\n }\r\n props.invoices.forEach((invoice) => {\r\n if (AvailableCurrencies.indexOf(invoice.currency_key) === -1) {\r\n AvailableCurrencies.push(invoice.currency_key);\r\n }\r\n });\r\n if (AvailableCurrencies.length === 1) {\r\n DDLSelectedCurrency = AvailableCurrencies[0].toString();\r\n }\r\n\r\n // settitle(\"DDLUpdated\");\r\n };\r\n\r\n //useEffect(() => {\r\n // invoicesWithKeys = invoices.map((_: any) => {\r\n // _._key = getInvoiceKey(_);\r\n // return _ as InvoiceWithKey;\r\n // });\r\n\r\n // if (!props.isSearch) {\r\n // if (invoicesWithKeys.length > 0) {\r\n // props.payerInvoiceDueAmount(invoicesWithKeys);\r\n // }\r\n // }\r\n // else {\r\n // SelectInvoiceBasedOnCurrency();\r\n // }\r\n\r\n //});\r\n\r\n useEffect(() => {\r\n\r\n if (!props.isSearch || history.action === \"POP\") {\r\n invoicesWithKeys = invoicesList.map((_: any) => {\r\n _._key = getInvoiceKey(_);\r\n return _ as InvoiceWithKey;\r\n });\r\n\r\n if (invoicesWithKeys.length > 0) {\r\n props.payerInvoiceDueAmount(invoicesWithKeys);\r\n }\r\n }\r\n LoadCurrencies();\r\n \r\n }, [invoicesList]);\r\n\r\n \r\n\r\n function showDocumentSort(event: any, field: string) {\r\n var target = event.target;\r\n var asc = target.classList.contains(\"asc\");\r\n var desc = target.classList.contains(\"desc\");\r\n\r\n const duesortableItems = document.querySelectorAll(\".duesortable\");\r\n duesortableItems.forEach(function (item) {\r\n item.classList.remove(\"asc\");\r\n item.classList.remove(\"desc\");\r\n });\r\n setSelectedDueFunction(\"\");\r\n\r\n const sortableItems = document.querySelectorAll(\".sortable\");\r\n sortableItems.forEach(function (item) {\r\n item.classList.remove(\"asc\");\r\n item.classList.remove(\"desc\");\r\n if (desc || (!asc && !desc)) {\r\n item.classList.add(\"asc\");\r\n\r\n setSelectedFunction(\"asc\");\r\n } else {\r\n item.classList.add(\"desc\");\r\n setSelectedFunction(\"desc\");\r\n }\r\n });\r\n }\r\n\r\n // function showDueSort(event: any) {\r\n\r\n // var target = event.target;\r\n // var asc = target.classList.contains('asc');\r\n // var desc = target.classList.contains('desc');\r\n\r\n // const sortableItems = document.querySelectorAll(\".sortable\");\r\n // sortableItems.forEach(function (item) {\r\n // item.classList.remove('asc')\r\n // item.classList.remove('desc');\r\n\r\n // });\r\n\r\n // setSelectedFunction(\"\")\r\n // const dueSortableItems = document.querySelectorAll(\".duesortable\");\r\n // dueSortableItems.forEach(function (item) {\r\n // item.classList.remove('asc')\r\n // item.classList.remove('desc');\r\n // if (desc || (!asc && !desc)) {\r\n // item.classList.add('asc');\r\n // setSelectedDueFunction('asc');\r\n\r\n // } else {\r\n // item.classList.add('desc');\r\n // setSelectedDueFunction('desc');\r\n\r\n // }\r\n // });\r\n // }\r\n\r\n const [selectFunction, setSelectedFunction] = useState(\"\");\r\n\r\n function docDefaultSort(rowA: Invoice, rowB: Invoice) {\r\n return rowA.billing_document_number === rowB.billing_document_number\r\n ? 1\r\n : 1;\r\n }\r\n\r\n function docAscSort(rowA: Invoice, rowB: Invoice) {\r\n return rowA.billing_document_number > rowB.billing_document_number ? 1 : -1;\r\n }\r\n function docDescSort(rowA: Invoice, rowB: Invoice) {\r\n return rowA.billing_document_number > rowB.billing_document_number ? -1 : 1;\r\n }\r\n\r\n function getSortMethod() {\r\n switch (selectFunction) {\r\n case \"asc\":\r\n return docAscSort;\r\n case \"desc\":\r\n return docDescSort;\r\n\r\n default:\r\n return docDefaultSort;\r\n }\r\n }\r\n if (title != \"GridUpdated\" && title != \"DDLUpdated\") {\r\n invoicesWithKeys = invoicesList.map((_: any) => {\r\n _._key = getInvoiceKey(_);\r\n return _ as InvoiceWithKey;\r\n });\r\n LoadCurrencies();\r\n // console.log(\"inside GridUpdated\");\r\n }\r\n const [selectDueFunction, setSelectedDueFunction] = useState(\"\");\r\n\r\n function docDefaultDueSort(rowA: Invoice, rowB: Invoice) {\r\n return 1;\r\n }\r\n\r\n function docAscDueSort(rowA: Invoice, rowB: Invoice) {\r\n return dueDateSort(rowA, rowB, \"asc\"); // sortStringDate(rowA.due_date, rowB.due_date, \"asc\");\r\n }\r\n function docDescDueSort(rowA: Invoice, rowB: Invoice) {\r\n return dueDateSort(rowA, rowB, \"desc\"); // sortStringDate(rowA.due_date, rowB.due_date, \"desc\");\r\n }\r\n\r\n function getDueSortMethod() {\r\n switch (selectDueFunction) {\r\n case \"asc\":\r\n return docAscDueSort;\r\n case \"desc\":\r\n return docDescDueSort;\r\n\r\n default:\r\n return docDefaultDueSort;\r\n }\r\n }\r\n\r\n function displayCard(row: Invoice) {\r\n let i = 0;\r\n const defaultValue = () => {\r\n let key = getInvoiceKey(row);\r\n if (props.selectedInvoicesKeys.indexOf(key) !== -1) return true;\r\n else return false;\r\n };\r\n return (\r\n <div className=\"card rounded-lg card-invoice no-gutters\">\r\n <div className=\"flex card-header card-header-invoice\">\r\n <div className=\"row\">\r\n <div className=\"col-2\">\r\n <label\r\n className=\"form-check-label h-25 w-50 mt-3 rounded-circle\"\r\n style={{ width: \"33%\" }}\r\n >\r\n <input\r\n type=\"checkbox\"\r\n checked={defaultValue()}\r\n defaultChecked={defaultValue()}\r\n onChange={(event) => {\r\n if (event.target.checked) {\r\n props.addInvoiceToSelected(\r\n row,\r\n decimalLookup(row.currency_key)\r\n );\r\n } else {\r\n props.removeInvoiceFromSelected(\r\n row,\r\n decimalLookup(row.currency_key)\r\n );\r\n }\r\n }}\r\n />\r\n </label>\r\n </div>\r\n <div className=\"col-8\">\r\n <div>\r\n <label className=\"mb-10 text-xl tracking-widest h5 bold\">\r\n {\" \"}\r\n {f(\"invoice_table.document_number\")}{\" \"}\r\n {documentNumberFormatter(\"\", row)}\r\n </label>\r\n </div>\r\n <div>\r\n <label className=\"h5 bold\">\r\n {f(\"invoice_table.due_date\")}\r\n </label>\r\n <label className=\"h5 ml-3 \">\r\n {\" \"}\r\n {dueFormatter(row.due_date, row)}\r\n </label>\r\n </div>\r\n </div>\r\n <div className=\"col-2 mt-2\">\r\n <span>{pdfFormatter(\"\", row)}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"card-body card-body-invoice \">\r\n <div className=\"row row-height\" style={{ width: \"350px\" }}>\r\n <div className=\"col-4 h5\">{f(\"invoice_table.total_amount\")}</div>\r\n <div className=\"col h5\">{f(\"invoice_table.paid_amount\")}</div>\r\n <div className=\"col-4 h5\">{f(\"invoice_table.open_amount\")}</div>\r\n </div>\r\n <div className=\"row\" style={{ width: \"350px\" }}>\r\n <div className=\"col-4 h5 main-table-cell-invoice \">\r\n {\" \"}\r\n {moneyTableCell(row.total_amount, row)}\r\n </div>\r\n <div className=\"col h5 main-table-cell-invoice\">\r\n {\" \"}\r\n {moneyTableCell(row.paid_amount, row)}{\" \"}\r\n </div>\r\n <div className=\"col-4 h5 main-table-cell-invoice\">\r\n {\" \"}\r\n {moneyTableCell(row.open_amount, row)}{\" \"}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // console.log(\"Global Currencies\", AvailableCurrencies);\r\n\r\n return (\r\n <React.Fragment>\r\n {/* {// console.log(invoicesWithKeys)} */}\r\n <ToolkitProvider\r\n data={invoicesWithKeys}\r\n ref={tab}\r\n headerStyle={{\r\n background: \"#DFECF5\",\r\n height: \"40px\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n classes={\"wa-bootstrap-table-container custom-table-header\"}\r\n scrollTop={top}\r\n columns={columns}\r\n keyField={\"_key\"}\r\n bootstrap4={true}\r\n exportCSV={{\r\n noAutoBOM: { autoBom: true },\r\n }}\r\n >\r\n {(toolkitProps) => (\r\n <>\r\n <div className=\"row py-2\">\r\n <div className=\"col-12 col-md d-flex align-items-end order-2 order-md-0 \">\r\n {!hideSelect() && (\r\n <div>\r\n {invoicesWithKeys.length >\r\n props.selectedInvoicesKeys.length ? (\r\n <button\r\n type=\"button\"\r\n className=\"btn btn-light btn-sm\"\r\n onClick={clickSelectAll}\r\n >\r\n <FormattedMessage id={\"invoice_table.select_all\"} />\r\n </button>\r\n ) : invoicesWithKeys.length === 0 ? null : (\r\n <button\r\n type=\"button\"\r\n className=\"btn btn-light btn-sm\"\r\n onClick={clickDeselectAll}\r\n >\r\n <FormattedMessage id={\"invoice_table.deselect_all\"} />\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n {hasMultiCurrency &&\r\n props.selectedCurrency &&\r\n !props.isSearch && (\r\n <div\r\n className={\r\n \"col-12 col-md d-flex justify-content-center align-items-baseline\"\r\n }\r\n >\r\n <span\r\n className={\"invoice-currency-warning\"}\r\n style={{ fontSize: \"0.84rem\", alignSelf: \"center\" }}\r\n >\r\n <FormattedMessage\r\n id={\"invoices_page.currency_warning\"}\r\n values={{ currency: selectedCurrency }}\r\n />\r\n </span>\r\n </div>\r\n )}\r\n\r\n {props.isSearch &&\r\n invoicesWithKeys.length > 0 &&\r\n DDLSelectedCurrency != \"\" && (\r\n <div\r\n className={\r\n \"col-12 col-md d-flex justify-content-center align-items-baseline\"\r\n }\r\n >\r\n <span\r\n className={\"invoice-currency-warning\"}\r\n style={{ fontSize: \"0.84rem\", alignSelf: \"center\" }}\r\n >\r\n <FormattedMessage\r\n id={\"invoices_page.currency_warning\"}\r\n values={{ currency: DDLSelectedCurrency }}\r\n />\r\n </span>\r\n </div>\r\n )}\r\n\r\n <div\r\n className={\r\n \"col d-flex justify-content-end align-items-baseline order-1 order-md-0\"\r\n }\r\n >\r\n {isMobile && (\r\n <DropdownButton\r\n alignRight\r\n size={\"sm\"}\r\n title={intl.formatMessage({ id: \"invoice_export.sort\" })}\r\n variant={\"light\"}\r\n id=\"dropdown-sort\"\r\n onSelect={(e) => {\r\n handleSortSelect(e);\r\n }}\r\n >\r\n {SortOptions.map((item) => (\r\n <Dropdown.Item eventKey={item.value}>\r\n {item.label}\r\n </Dropdown.Item>\r\n ))}\r\n </DropdownButton>\r\n )}\r\n {\r\n <DropdownButton\r\n alignRight\r\n size={\"sm\"}\r\n title={intl.formatMessage({\r\n id: \"invoice_export.all_currency\",\r\n })}\r\n variant={\"light\"}\r\n id=\"dropdown-menu-currency\"\r\n onSelect={(e) => {\r\n handleCurrencySelect(e);\r\n }}\r\n >\r\n {props.isSearch && (\r\n <Dropdown.Item eventKey=\"All\">\r\n {f(\"invoice_search.status_filter.all\")}\r\n </Dropdown.Item>\r\n )}\r\n {AvailableCurrencies.map((currency) => (\r\n <Dropdown.Item eventKey={currency}>\r\n {currency}\r\n </Dropdown.Item>\r\n ))}\r\n </DropdownButton>\r\n }\r\n {invoicesWithKeys.length === 0 ||\r\n !isPdfFilenotExists(invoicesWithKeys) ? (\r\n <DropdownButton\r\n disabled\r\n alignRight\r\n size={\"sm\"}\r\n title={intl.formatMessage({\r\n id: \"invoice_export.download_label\",\r\n })}\r\n variant={\"light\"}\r\n id=\"dropdown-menu-align-right\"\r\n >\r\n <DownloadPdfZipButton\r\n invoiceSearchQuery={props.invoiceSearchQuery}\r\n />\r\n </DropdownButton>\r\n ) : (\r\n <DropdownButton\r\n alignRight\r\n size={\"sm\"}\r\n title={intl.formatMessage({\r\n id: \"invoice_export.download_label\",\r\n })}\r\n variant={\"light\"}\r\n id=\"dropdown-menu-align-right\"\r\n >\r\n {props.isSearch ? (\r\n <DownloadPdfZipButton\r\n invoiceSearchQuery={props.invoiceSearchQuery}\r\n />\r\n ) : (\r\n <DownloadPdfZipButtonwithCurrency\r\n invoiceQueryforPDFandCSVandexcel={\r\n props.invoiceQueryforPDFandCSVandexcel\r\n }\r\n />\r\n )}\r\n </DropdownButton>\r\n )}\r\n {invoicesWithKeys.length === 0 ? (\r\n <DropdownButton\r\n disabled={true}\r\n alignRight\r\n size={\"sm\"}\r\n title={intl.formatMessage({\r\n id: \"invoice_export.export_label\",\r\n })}\r\n variant={\"light\"}\r\n id=\"dropdown-menu-align-right\"\r\n className={\"pl-2\"}\r\n >\r\n <Dropdown.Item\r\n onClick={(e) => {\r\n e.preventDefault();\r\n toolkitProps.csvProps.onExport();\r\n }}\r\n >\r\n {intl.formatMessage({ id: \"invoice_export.all_csv\" })}\r\n </Dropdown.Item>\r\n <DownloadExcelButton\r\n invoiceSearchQuery={props.invoiceSearchQuery}\r\n />\r\n </DropdownButton>\r\n ) : (\r\n <DropdownButton\r\n alignRight\r\n size={\"sm\"}\r\n title={intl.formatMessage({\r\n id: \"invoice_export.export_label\",\r\n })}\r\n variant={\"light\"}\r\n id=\"dropdown-menu-align-right\"\r\n className={\"pl-2\"}\r\n >\r\n <Dropdown.Item\r\n onClick={(e) => {\r\n e.preventDefault();\r\n toolkitProps.csvProps.onExport();\r\n }}\r\n >\r\n {intl.formatMessage({ id: \"invoice_export.all_csv\" })}\r\n </Dropdown.Item>\r\n {props.isSearch ? (\r\n <ExportExcel\r\n data={{\r\n invoicesData: invoicesWithKeys,\r\n columnsData: columns,\r\n }}\r\n className=\"dropdown-item !important\"\r\n />\r\n ) : (\r\n <ExportExcel\r\n data={{\r\n invoicesData: invoicesWithKeys,\r\n columnsData: columns,\r\n }}\r\n className=\"dropdown-item !important\"\r\n />\r\n )}\r\n </DropdownButton>\r\n )}\r\n </div>\r\n </div>\r\n {/*{isMobile && invoices.map((invoice) => (*/}\r\n {/* <InvoiceCard invoice={invoice}/>*/}\r\n {/*))}*/}\r\n {\r\n <div className=\"row\">\r\n {isMobile &&\r\n invoicesWithKeys\r\n .sort(\r\n selectFunction !== \"\"\r\n ? getSortMethod()\r\n : getDueSortMethod()\r\n )\r\n .map((key, index) => displayCard(key))}\r\n\r\n {!isMobile && (\r\n <div className=\"col-12\">\r\n <BootstrapTable\r\n {...toolkitProps.baseProps}\r\n defaultSorted={[{ dataField: \"due_date\", order: \"desc\" }]}\r\n selectRow={selectRowProp}\r\n noDataIndication={() => \"No documents found\"}\r\n classes={\r\n \"wa-bootstrap-table-container custom-table-header\"\r\n }\r\n ></BootstrapTable>\r\n </div>\r\n )}\r\n </div>\r\n }\r\n </>\r\n )}\r\n </ToolkitProvider>\r\n </React.Fragment>\r\n );\r\n}\r\n\r\nexport const InvoiceList = connect<\r\n IComponentStoreProps,\r\n IComponentDispatchProps,\r\n IComponentOwnProps,\r\n any\r\n>(\r\n (state, props) => {\r\n return {\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(state),\r\n selectedSecondaryAccount: getSelectedSecondaryAccount(state),\r\n invoices: state.default.invoices,\r\n selectedInvoicesKeys: getSelectedInvoiceKeys(state),\r\n selectedSoldTos: state.user_options.selectedSoldTos,\r\n secondaryAccounts: state.user_options.secondaryAccounts,\r\n accountType: state.user_options.accountType,\r\n tableConfig: state.app.config.invoice_table,\r\n language: state.user.language,\r\n selectedCurrency: state.default.selectedCurrencyOptionValue,\r\n invoiceSearchQuery: getInvoiceQuery(state),\r\n invoiceQueryforPDFandCSVandexcel:\r\n getInvoiceQueryforPDFandCSVandexcel(state),\r\n };\r\n },\r\n {\r\n addInvoiceToSelected: addInvoiceToSelected,\r\n removeInvoiceFromSelected: removeInvoiceFromSelected,\r\n payerInvoiceDueAmount: payerInvoiceDueAmount,\r\n }\r\n)(_InvoiceList);\r\n\r\nexport var InvoiceSearchList = connect<\r\n InvoiceListSearchProps,\r\n IComponentDispatchProps,\r\n InvoiceSearchComponentOwnProps,\r\n any\r\n>(\r\n (state, props) => {\r\n return {\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(state),\r\n selectedSecondaryAccount: getSelectedSecondaryAccount(state),\r\n selectedInvoicesKeys: getSelectedInvoiceKeys(state),\r\n selectedSoldTos: state.user_options.selectedSoldTos,\r\n secondaryAccounts: state.user_options.secondaryAccounts,\r\n accountType: state.user_options.accountType,\r\n tableConfig: state.app.config.invoice_table,\r\n language: state.user.language,\r\n dueSelect: state.invoice.dueSelect,\r\n selectedCurrency: state.default.selectedCurrencyOptionValue,\r\n statementId: state.invoice.statementId,\r\n // statementId: state.invoice.statementId,\r\n //title: state.user.title,\r\n };\r\n },\r\n {\r\n addInvoiceToSelected: addInvoiceToSelected,\r\n removeInvoiceFromSelected: removeInvoiceFromSelected,\r\n payerInvoiceDueAmount: payerInvoiceDueAmount,\r\n }\r\n)(_InvoiceList);\r\n","import {useIntl} from \"react-intl\";\r\n\r\nexport function useCalendarTranslation() {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({id: id});\r\n return {\r\n weekdays: {\r\n shorthand: [\r\n f(\"calendar.days.short.sunday\"),\r\n f(\"calendar.days.short.monday\"),\r\n f(\"calendar.days.short.tuesday\"),\r\n f(\"calendar.days.short.wednesday\"),\r\n f(\"calendar.days.short.thursday\"),\r\n f(\"calendar.days.short.friday\"),\r\n f(\"calendar.days.short.saturday\"),\r\n ],\r\n longhand: [\r\n f(\"calendar.days.sunday\"),\r\n f(\"calendar.days.monday\"),\r\n f(\"calendar.days.tuesday\"),\r\n f(\"calendar.days.wednesday\"),\r\n f(\"calendar.days.thursday\"),\r\n f(\"calendar.days.friday\"),\r\n f(\"calendar.days.saturday\"),\r\n ],\r\n },\r\n\r\n months: {\r\n shorthand: [\r\n f(\"calendar.months.short.january\"),\r\n f(\"calendar.months.short.february\"),\r\n f(\"calendar.months.short.march\"),\r\n f(\"calendar.months.short.april\"),\r\n f(\"calendar.months.short.may\"),\r\n f(\"calendar.months.short.june\"),\r\n f(\"calendar.months.short.july\"),\r\n f(\"calendar.months.short.august\"),\r\n f(\"calendar.months.short.september\"),\r\n f(\"calendar.months.short.october\"),\r\n f(\"calendar.months.short.november\"),\r\n f(\"calendar.months.short.december\"),\r\n ],\r\n longhand: [\r\n f(\"calendar.months.january\"),\r\n f(\"calendar.months.february\"),\r\n f(\"calendar.months.march\"),\r\n f(\"calendar.months.april\"),\r\n f(\"calendar.months.may\"),\r\n f(\"calendar.months.june\"),\r\n f(\"calendar.months.july\"),\r\n f(\"calendar.months.august\"),\r\n f(\"calendar.months.september\"),\r\n f(\"calendar.months.october\"),\r\n f(\"calendar.months.november\"),\r\n f(\"calendar.months.december\"),\r\n ],\r\n },\r\n }\r\n}","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {\r\n addSoldToToSelected,\r\n removeSoldToFromSelected,\r\n clearSelectedInvoices,\r\n setSelectedSoldTos,\r\n setsearchedInvoices,\r\n setsearchedInvoiceNumber,\r\n setsearchedinvoiceDueDate,\r\n setinvoiceSearchedPeriodFromTo,\r\n setsearchedinvoiceStatus,\r\n setinvoiceSearchedPeriod,\r\n selectPayer,\r\n payerInvoiceDueAmount,\r\n} from \"../../actions/InvoiceActions\";\r\nimport { getSelectedPrimaryAccount } from \"../../selectors/Selectors\";\r\nclass SoldToSelect extends Component<any, any> {\r\n constructor(props) {\r\n \r\n super(props);\r\n this.handleCustomerCheckChange = this.handleCustomerCheckChange.bind(this);\r\n this.createSelectItems = this.createSelectItems.bind(this);\r\n this.selectAll = this.selectAll.bind(this);\r\n this.allSelected = this.allSelected.bind(this);\r\n }\r\n selectAll() {\r\n if (this.allSelected()) {\r\n this.props.setSelectedSoldTos([]);\r\n this.props.payerInvoiceDueAmount(0);\r\n this.props.clearSelectedInvoices();\r\n this.props.setsearchedInvoices([]);\r\n } else {\r\n this.props.setSelectedSoldTos(\r\n Object.keys(this.props.secondaryAccounts).map((s) => s)\r\n );\r\n }\r\n }\r\n\r\n allSelected() {\r\n const selectedItems = this.props.selectedSoldTos;\r\n const secondaryAccounts = this.props.secondaryAccounts;\r\n return selectedItems.length === Object.keys(secondaryAccounts).length;\r\n }\r\n\r\n handleCustomerCheckChange = (target) => {\r\n this.props.clearSelectedInvoices();\r\n const value = target.currentTarget.id;\r\n const isChecked = target.currentTarget.checked;\r\n const isSearch = target.currentTarget.formAction.split(\"/\").pop();\r\n\r\n let vGridViewDocIds = sessionStorage.getItem(\"dueamount\");\r\n\r\n if (isChecked) {\r\n this.props.addSoldToToSelected(value);\r\n if (isSearch === \"invoices\" && isChecked === true) {\r\n this.props.setsearchedInvoiceNumber(\"\");\r\n this.props.setsearchedinvoiceDueDate(\"\", \"\");\r\n this.props.setinvoiceSearchedPeriodFromTo(\"\", \"\");\r\n this.props.setsearchedinvoiceStatus(\"03\");\r\n this.props.setinvoiceSearchedPeriod(\"all\");\r\n this.props.selectPayer(\r\n isNaN(parseInt(value)) ? parseInt(value) : value\r\n );\r\n this.props.setsearchedInvoices([]);\r\n this.props.clearSelectedInvoices();\r\n }\r\n } else {\r\n this.props.removeSoldToFromSelected(value);\r\n this.props.setsearchedInvoiceNumber(\"\");\r\n this.props.setsearchedinvoiceDueDate(\"\", \"\");\r\n this.props.setinvoiceSearchedPeriodFromTo(\"\", \"\");\r\n this.props.setsearchedinvoiceStatus(\"03\");\r\n this.props.setinvoiceSearchedPeriod(\"all\");\r\n this.props.selectPayer(isNaN(parseInt(value)) ? parseInt(value) : value);\r\n //Commented by prasanna while testing\r\n // this.props.setsearchedInvoices([]);\r\n this.props.clearSelectedInvoices();\r\n this.props.payerInvoiceDueAmount(0);\r\n }\r\n };\r\n\r\n createSelectItems() {\r\n const account =\r\n this.props.selectedPrimaryAccount &&\r\n this.props.selectedPrimaryAccount.PrimaryAcct\r\n ? this.props.selectedPrimaryAccount.PrimaryAcct\r\n : \"\";\r\n const selectedItems = this.props.selectedSoldTos;\r\n const items: any[] = [];\r\n //for (let l = 0; l < Object.keys(this.props.secondaryAccounts).length; l += 1) {\r\n for (var acc in this.props.secondaryAccounts) {\r\n const customer = this.props.secondaryAccounts[acc];\r\n let itemColor = \"checkbox checkbox-primary dropdown-item truncate \";\r\n let isChecked = false;\r\n if (selectedItems.indexOf(customer.PrimaryAcct) !== -1) {\r\n itemColor =\r\n \"checkbox checkbox-primary dropdown-item truncate multiSelectItemColor\";\r\n isChecked = true;\r\n }\r\n items.push(\r\n <li key={`li_${customer.PrimaryAcct}`}>\r\n <div className={itemColor} key={`div_${customer.PrimaryAcct}`}>\r\n <label>\r\n {/*key={`lbl_${customer.PrimaryAcct}`} htmlFor={`lbl_${customer.PrimaryAcct}`}>*/}\r\n <input\r\n className=\"checkMargin\"\r\n type=\"checkbox\"\r\n key={`${account}${customer.PrimaryAcct}`}\r\n id={customer.PrimaryAcct}\r\n onChange={this.handleCustomerCheckChange}\r\n checked={isChecked}\r\n />\r\n {customer.Name} ({customer.PrimaryAcct})\r\n </label>\r\n </div>\r\n </li>\r\n );\r\n }\r\n return items;\r\n }\r\n render() {\r\n return (\r\n <div className=\"btn-group btn-block soldto-select customSelect\">\r\n <button\r\n className=\"form-control soldToBtnColor btn-block dropdown-toggle\"\r\n id=\"soldToToggle\"\r\n type=\"button\"\r\n data-toggle=\"dropdown\"\r\n >\r\n <span>\r\n {this.props.selectedSoldTos ? this.props.selectedSoldTos.length : 0}{\" \"}\r\n Customers Selected\r\n </span>\r\n <span className=\"select-arrow\">\r\n <i className=\"fas fa-chevron-down\"></i>\r\n </span>\r\n </button>\r\n <ul className=\"dropdown-menu multiSelectMenuHeight\">\r\n <li>\r\n <div className=\"checkbox checkbox-primary dropdown-item truncate\">\r\n <label htmlFor={`lbl_ship_to_select_all`}>\r\n <input\r\n className=\"checkMargin\"\r\n type=\"checkbox\"\r\n id=\"lbl_ship_to_select_all\"\r\n onChange={this.selectAll}\r\n checked={this.allSelected()}\r\n />\r\n Select All\r\n </label>\r\n </div>\r\n </li>\r\n {this.createSelectItems()}\r\n </ul>\r\n </div>\r\n );\r\n }\r\n}\r\nexport default connect<any, any, any, any>(\r\n (store, props) => ({\r\n secondaryAccounts: store.user_options.secondaryAccounts,\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(store),\r\n selectedSoldTos: store.user_options.selectedSoldTos,\r\n invoices: store.default.invoices,\r\n }),\r\n {\r\n addSoldToToSelected,\r\n removeSoldToFromSelected,\r\n clearSelectedInvoices,\r\n setSelectedSoldTos,\r\n setsearchedInvoices,\r\n setsearchedInvoiceNumber,\r\n setsearchedinvoiceDueDate,\r\n setinvoiceSearchedPeriodFromTo,\r\n setsearchedinvoiceStatus,\r\n setinvoiceSearchedPeriod,\r\n selectPayer,\r\n payerInvoiceDueAmount,\r\n }\r\n)(SoldToSelect);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n addSoldToToSelected,\r\n removeSoldToFromSelected,\r\n clearSelectedInvoices,\r\n setSelectedSoldTos, \r\n setsearchedInvoices,\r\n setsearchedInvoiceNumber,\r\n setsearchedinvoiceDueDate,\r\n setinvoiceSearchedPeriodFromTo,\r\n setsearchedinvoiceStatus,\r\n setinvoiceSearchedPeriod,\r\n selectPayer,\r\n} from '../../actions/InvoiceActions';\r\nimport {getSelectedPrimaryAccount} from \"../../selectors/Selectors\";\r\n\r\nclass SoldToSelectAll extends Component<any, any> {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n allSelected: true\r\n };\r\n this.handleCustomerCheckChange = this.handleCustomerCheckChange.bind(this);\r\n this.createSelectItems = this.createSelectItems.bind(this);\r\n // this.getSoldToDetailsForInvoices = this.getSoldToDetailsForInvoices.bind(this);\r\n this.selectAll = this.selectAll.bind(this);\r\n this.allSelected = this.allSelected.bind(this);\r\n }\r\n \r\n // componentDidMount(){\r\n // this.getSoldToDetailsForInvoices();\r\n // }\r\n\r\n\r\n selectAll(){\r\n if(this.allSelected()){\r\n this.props.setSelectedSoldTos([]);\r\n } else {\r\n this.props.setSelectedSoldTos(this.props.secondaryAccounts.map(s => s.PrimaryAcct));\r\n }\r\n }\r\n \r\n allSelected() {\r\n return this.props.secondaryAccounts.length === this.props.selectedSoldTos.length;\r\n }\r\n\r\n\r\n handleCustomerCheckChange = (target) => {\r\n this.props.clearSelectedInvoices();\r\n const value = target.currentTarget.id;\r\n const isChecked = target.currentTarget.checked;\r\n\r\n if (isChecked){\r\n this.props.addSoldToToSelected(value);\r\n } else {\r\n this.props.removeSoldToFromSelected(value);\r\n this.props.setsearchedInvoiceNumber('');\r\n this.props.setsearchedinvoiceDueDate('', '');\r\n this.props.setinvoiceSearchedPeriodFromTo('', '');\r\n this.props.setsearchedinvoiceStatus('03');\r\n this.props.setinvoiceSearchedPeriod(\"all\");\r\n this.props.selectPayer(isNaN(parseInt(value)) ? parseInt(value) : value);\r\n this.props.setsearchedInvoices([]); \r\n this.props.clearSelectedInvoices(); \r\n\r\n }\r\n };\r\n \r\n getName(customer){\r\n let name = \"\" + customer.PrimaryAcct;\r\n if(typeof customer.Name !== \"undefined\" && customer.Name !== null){\r\n return name + \" - \" + customer.Name;\r\n }\r\n return name;\r\n }\r\n\r\n createSelectItems() {\r\n const account = this.props.selectedPrimaryAccount && this.props.selectedPrimaryAccount.PrimaryAcct ? this.props.selectedPrimaryAccount.PrimaryAcct : '';\r\n const selectedItems = this.props.selectedSoldTos;\r\n\r\n let items: any[] = [];\r\n for (let l = 0; l < this.props.secondaryAccounts.length; l += 1) {\r\n const customer = this.props.secondaryAccounts[l];\r\n\r\n let itemColor = 'checkbox checkbox-primary dropdown-item truncate ';\r\n let isChecked = false;\r\n if (selectedItems.indexOf(customer.PrimaryAcct) !== -1){\r\n itemColor = 'checkbox checkbox-primary dropdown-item truncate multiSelectItemColor';\r\n isChecked = true;\r\n }\r\n \r\n items.push(<li key={`li_${customer.PrimaryAcct}`}>\r\n <div className={itemColor} key={`div_${customer.PrimaryAcct}`}>\r\n <label key={`lbl_${customer.PrimaryAcct}`} htmlFor={`lbl_${customer.PrimaryAcct}`}>\r\n <input className=\"checkMargin\" type=\"checkbox\" key={`${account}${customer.PrimaryAcct}`} id={customer.PrimaryAcct} onChange={this.handleCustomerCheckChange} checked={isChecked} />{this.getName(customer)}\r\n </label>\r\n </div>\r\n </li>);\r\n }\r\n\r\n return items;\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"btn-group btn-block soldto-select customSelect\">\r\n <button className=\"form-control soldToBtnColor btn-block dropdown-toggle\" id=\"soldToToggle\" type=\"button\" data-toggle=\"dropdown\">\r\n <span>{ this.props.selectedSoldTos ? this.props.selectedSoldTos.length : 0 } Customers Selected</span> \r\n <span className=\"select-arrow\">\r\n <i className=\"fas fa-chevron-down\"></i>\r\n </span>\r\n </button>\r\n \r\n <ul className=\"dropdown-menu multiSelectMenuHeight\">\r\n <li>\r\n <div className=\"checkbox checkbox-primary dropdown-item truncate multiSelectItemColor\">\r\n <label htmlFor={`lbl_ship_to_select_all`}>\r\n <input className=\"checkMargin\" type=\"checkbox\" id=\"lbl_ship_to_select_all\" onChange={this.selectAll} checked={this.allSelected()} />Select All\r\n </label>\r\n </div>\r\n </li>\r\n {this.createSelectItems()}\r\n </ul>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default connect<any, any, any, any>((store,props) => ({\r\n secondaryAccounts: store.user_options.secondaryAccounts,\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(store),\r\n selectedSoldTos: store.user_options.selectedSoldTos,\r\n invoices: store.default.invoices,\r\n}), {\r\n addSoldToToSelected,\r\n clearSelectedInvoices,\r\n removeSoldToFromSelected,\r\n setSelectedSoldTos,\r\n setsearchedInvoices,\r\n setsearchedInvoiceNumber,\r\n setsearchedinvoiceDueDate,\r\n setinvoiceSearchedPeriodFromTo,\r\n setsearchedinvoiceStatus,\r\n setinvoiceSearchedPeriod,\r\n selectPayer,\r\n})(SoldToSelectAll);\r\n","import React from \"react\";\r\nimport {AccountType} from \"../interfaces/Accounts\";\r\nimport PayerSelect from \"./invoice/PayerSelect\";\r\nimport SoldToSelect from \"./invoice/SoldToSelect\";\r\nimport SoldToSelectAll from \"./invoice/SoldToSelectAll\";\r\n\r\nexport function SecondarySelect(props: {accountType: AccountType}) {\r\n if(props.accountType == AccountType.SoldTo){\r\n return <PayerSelect/>;\r\n }\r\n if(props.accountType == AccountType.Payer){\r\n return <SoldToSelect/>;\r\n }\r\n if(props.accountType == AccountType.PayerAll){\r\n return <SoldToSelectAll/>;\r\n }\r\n return null;\r\n}\r\n","import {useSelector} from \"react-redux\";\r\nimport {Invoice} from \"../interfaces/invoice\";\r\nimport {RootState} from \"../reducers/RootReducer\";\r\nimport {isCredit, isOverDue} from \"../common/invoiceHelpers\";\r\n\r\nexport function useInvoiceTotal() {\r\n const selectedCurrency = useSelector<RootState, string>(state => state.default.selectedCurrencyOptionValue);\r\n const invoices = useSelector<RootState, Invoice[]>(state => state.default.invoices);\r\n return invoices.reduce((previousValue, currentValue) => {\r\n if (selectedCurrency === currentValue?.currency_key || !selectedCurrency) {\r\n return previousValue + (currentValue?.open_amount ?? 0);\r\n }\r\n return previousValue;\r\n }, 0);\r\n}\r\n\r\nexport function useInvoiceTotalDue() {\r\n const selectedCurrency = useSelector<RootState, string>(state => state.default.selectedCurrencyOptionValue);\r\n const invoices = useSelector<RootState, Invoice[]>(state => state.default.invoices);\r\n return invoices.reduce((previousValue, currentValue) => {\r\n if (currentValue.item_is_a_payment != \"X\" && !isCredit(currentValue) && \r\n (selectedCurrency === currentValue?.currency_key || !selectedCurrency)) {\r\n return previousValue + (currentValue?.open_amount ?? 0);\r\n }\r\n return previousValue;\r\n }, 0);\r\n}\r\n\r\nexport function useInvoiceTotalCredits() {\r\n const selectedCurrency = useSelector<RootState, string>(state => state.default.selectedCurrencyOptionValue);\r\n const invoices = useSelector<RootState, Invoice[]>(state => state.default.invoices);\r\n return invoices.reduce((previousValue, currentValue) => {\r\n if (isCredit(currentValue) &&\r\n (selectedCurrency === currentValue?.currency_key || !selectedCurrency)) {\r\n return previousValue + (currentValue?.open_amount ?? 0);\r\n }\r\n return previousValue;\r\n }, 0);\r\n}\r\n\r\nexport function useInvoiceTotalOverDue() {\r\n const selectedCurrency = useSelector<RootState, string>(state => state.default.selectedCurrencyOptionValue);\r\n const invoices = useSelector<RootState, Invoice[]>(state => state.default.invoices);\r\n return Math.abs(invoices.reduce((previousValue, currentValue) => {\r\n if (currentValue.item_is_a_payment != \"X\" && !isCredit(currentValue) &&\r\n (selectedCurrency === currentValue?.currency_key || !selectedCurrency)\r\n && isOverDue(currentValue)\r\n ) {\r\n return previousValue + (currentValue?.open_amount ?? 0);\r\n }\r\n return previousValue;\r\n }, 0));\r\n}\r\n\r\n\r\nexport function useInvoiceBalance() {\r\n const due = useInvoiceTotalDue();\r\n const credit = useInvoiceTotalCredits();\r\n return due + credit;\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Card, CardContent, Typography } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { green, orange, red } from \"@material-ui/core/colors\";\r\nimport { SecondarySelect } from \"../SecondarySelect\";\r\nimport { AccountType } from \"../../interfaces/Accounts\";\r\nimport { Invoice } from \"../../interfaces/invoice\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { CurrencyDisplay } from \"../../common/CurrencyDisplay\";\r\nimport {\r\n useInvoiceBalance,\r\n useInvoiceTotalCredits,\r\n useInvoiceTotalDue,\r\n useInvoiceTotalOverDue,\r\n} from \"../../hooks/InvoiceHooks\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { RootState } from \"../../reducers/RootReducer\";\r\n\r\nconst useStyles = makeStyles({\r\n due: {\r\n color: orange[\"500\"],\r\n fontFamily:\"Inter,sans-serif\",\r\n },\r\n pastdue: {\r\n color: red[\"500\"],\r\n fontFamily: \"Inter,sans-serif\",\r\n },\r\n credit: {\r\n color: green[\"500\"],\r\n fontFamily: \"Inter,sans-serif\",\r\n\r\n },\r\n title: {\r\n fontSize: \"1em\",\r\n fontFamily: \"Inter,sans-serif\",\r\n },\r\n value: {\r\n fontSize: \"1.1em\",\r\n fontFamily: \"Inter,sans-serif\",\r\n }\r\n});\r\n\r\n\r\nexport function DashboardPage(props: {}) {\r\n\r\n return (<div className={\"container\"}>\r\n <div className={\"row my-3\"}>\r\n <div className={\"col-12 col-md-3\"}>\r\n <SecondarySelect accountType={AccountType.SoldTo} />\r\n </div>\r\n </div>\r\n <DashboardDetails />\r\n </div>)\r\n}\r\n\r\nexport function DashboardDetails(props: any) {\r\n const classes = useStyles();\r\n const totalDue = useInvoiceTotalDue();\r\n const totalCredits = useInvoiceTotalCredits();\r\n const totalOverDue = useInvoiceTotalOverDue();\r\n const totalBalance = useInvoiceBalance();\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id });\r\n const currency = useSelector<RootState, string>(state => state.default.selectedCurrencyOptionValue);\r\n const accountType = useSelector<RootState, string>(state => state.user_options.accountType);\r\n const payerTotalDue = useSelector<RootState, string>(state => state.invoice.payerDueAmount);\r\n const payerTotalCredits = useSelector<RootState, string>(state => state.invoice.totalCreditAmount);\r\n const payerTotalOverDue = useSelector<RootState, string>(state => state.invoice.totalPastDueAmount);\r\n const balance = useSelector<RootState, string>(state => state.invoice.balanceAmount);\r\n\r\n\r\n return <div className={\"row\"}>\r\n <div className={\"col-12 col-sm-6 col-md d-flex align-content-stretch\"}>\r\n <Card elevation={0} className={\"flex-fill\"}>\r\n <CardContent>\r\n <div className={\"d-flex justify-content-between\"}>\r\n <Typography className={classes.title}>{f(\"dashboard.invoice_amount_due\")}</Typography>\r\n </div>\r\n <div className={\"d-flex justify-content-between\"}>\r\n {/* <Typography className={`${classes.due} ${classes.value}`}><CurrencyDisplay currency={currency} value={totalDue} /></Typography> */}\r\n {\r\n accountType === AccountType.Payer ? <Typography className={`${classes.due} ${classes.value}`}><CurrencyDisplay currency={currency} value={payerTotalDue} /></Typography>\r\n : <Typography className={`${classes.due} ${classes.value}`}><CurrencyDisplay currency={currency} value={totalDue} /></Typography>\r\n }\r\n </div>\r\n </CardContent>\r\n </Card>\r\n </div>\r\n <div className={\"col-12 col-sm-6 col-md d-flex align-content-stretch mt-2 mt-sm-0\"}>\r\n <Card elevation={0} className={\"flex-fill\"}>\r\n <CardContent>\r\n <div className={\"d-flex justify-content-between\"}>\r\n <Typography className={classes.title}>{f(\"dashboard.total_credits\")}</Typography>\r\n </div>\r\n <div className={\"d-flex justify-content-between\"}>\r\n {/* <Typography className={`${classes.credit} ${classes.value}`}><CurrencyDisplay currency={currency} value={totalCredits} /></Typography> */}\r\n {\r\n accountType === AccountType.Payer ? <Typography className={`${classes.credit} ${classes.value}`}><CurrencyDisplay currency={currency} value={payerTotalCredits} /></Typography>\r\n : <Typography className={`${classes.credit} ${classes.value}`}><CurrencyDisplay currency={currency} value={totalCredits} /></Typography>\r\n }\r\n </div>\r\n </CardContent>\r\n </Card>\r\n </div>\r\n <div className={\"col-12 col-sm-6 col-md d-flex align-content-stretch mt-2 mt-sm-2 mt-md-0\"}>\r\n <Card elevation={0} className={\"flex-fill\"}>\r\n <CardContent>\r\n <div className={\"d-flex justify-content-between\"}>\r\n <Typography className={classes.title}>{f(\"dashboard.balance\")}</Typography>\r\n </div>\r\n <div className={\"d-flex justify-content-between\"}>\r\n {/* {totalBalance <= 0 && <Typography className={`${classes.credit} ${classes.value}`}><CurrencyDisplay currency={currency} value={totalBalance} /></Typography>}\r\n {totalBalance > 0 && <Typography className={`${classes.due} ${classes.value}`}><CurrencyDisplay currency={currency} value={totalBalance} /></Typography>} */}\r\n {totalBalance <= 0 && <Typography className={`${classes.credit} ${classes.value}`}><CurrencyDisplay currency={currency} value={balance} /></Typography>}\r\n {totalBalance > 0 && <Typography className={`${classes.due} ${classes.value}`}><CurrencyDisplay currency={currency} value={balance} /></Typography>}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n </div>\r\n <div className={\"col-12 col-sm-6 col-md d-flex align-content-stretch mt-2 mt-sm-2 mt-md-0\"}>\r\n <Card elevation={0} className={\"flex-fill\"}>\r\n <CardContent>\r\n <div className={\"d-flex justify-content-between\"}>\r\n <div>\r\n <Typography className={classes.title}>{f(\"dashboard.total_past_due\")}</Typography>\r\n </div>\r\n </div>\r\n <div className={\"d-flex justify-content-between\"}>\r\n {/* <Typography className={`${classes.pastdue} ${classes.value}`}><CurrencyDisplay currency={currency} value={totalOverDue} /></Typography> */}\r\n {\r\n accountType === AccountType.Payer ? <Typography className={`${classes.pastdue} ${classes.value}`}><CurrencyDisplay currency={currency} value={payerTotalOverDue} /></Typography>\r\n : <Typography className={`${classes.pastdue} ${classes.value}`}><CurrencyDisplay currency={currency} value={totalOverDue} /></Typography>\r\n }\r\n </div>\r\n </CardContent>\r\n </Card>\r\n </div>\r\n </div>\r\n}","export enum DocumentType {\r\n Invoice = \"01\",\r\n}\r\n\r\nexport enum DocumentStatus {\r\n Open = \"01\",\r\n Complete = \"02\",\r\n OpenOrComplete = \"03\",\r\n}\r\n\r\nexport interface InvoiceSearchParameters {\r\n document_type: DocumentType;\r\n status: DocumentStatus;\r\n date_from: string;\r\n date_to: string;\r\n due_date_from: string;\r\n due_date_to: string;\r\n currency_key: string;\r\n SoldTo_SearchParams: string[];\r\n filter: { filter_type: string, value: any }[];\r\n STATEMENT_ID: string;\r\n invoice_filter: string;\r\n \r\n\r\n}\r\n\r\nexport interface InvoiceRequestBody {\r\n payer_data: any,\r\n soldto_data: any,\r\n search_parameters: InvoiceSearchParameters;\r\n}\r\n\r\nexport interface Invoice {\r\n billing_document_number: string;\r\n clearing_date: any;\r\n clearing_document_number_finance: string;\r\n currency_key: string;\r\n days_in_arrears: number;\r\n document_date: string;\r\n document_number_finance: string;\r\n due_date: string;\r\n finance_document_only: \"\" | \"X\";\r\n finance_document_type: string;\r\n fiscal_year_of_the_relevant_invoice: number;\r\n item_is_a_payment?: \"\" | \"X\";\r\n line_item_in_the_relevant_invoice: number;\r\n open_amount?: number;\r\n paid_amount: number;\r\n payer_number: string;\r\n pdf_document_available: string;\r\n posting_date?: string;\r\n read_only_flag: \"\" | \"X\";\r\n reference_number: string;\r\n soldto_number: string;\r\n total_amount: number;\r\n STATEMENT_ID: string;\r\n // Used for customization core product shouldn't use this.\r\n zzcustom?: any;\r\n customer_number: string;\r\n}\r\n\r\nexport interface InvoiceResponse {\r\n document_list: Invoice[];\r\n status: any;\r\n}\r\n\r\nexport interface InvoiceWithKey extends Invoice {\r\n _key: string;\r\n}\r\n","import React, {\r\n ReactEventHandler,\r\n ReactHTMLElement,\r\n useEffect,\r\n useState,\r\n} from \"react\";\r\nimport { Link, useHistory } from \"react-router-dom\";\r\nimport { connect, useDispatch } from \"react-redux\";\r\nimport Flatpickr from \"react-flatpickr\";\r\nimport { toast } from \"react-toastify\";\r\nimport moment from \"moment\";\r\n// import 'react-select/dist/react-select.css';\r\nimport \"react-bootstrap-table/dist/react-bootstrap-table-all.min.css\";\r\nimport \"react-activity/dist/react-activity.css\";\r\nimport \"../../../node_modules/flatpickr/dist/themes/material_blue.css\";\r\nimport {\r\n getInvoiceQuery,\r\n getInvoiceTotal,\r\n getSelectedInvoiceKeys,\r\n} from \"../../selectors/Selectors\";\r\nimport { Invoice, InvoiceWithKey } from \"../../interfaces/invoice\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { RootState } from \"../../reducers/RootReducer\";\r\nimport {\r\n clearSelectedInvoices,\r\n updateInvoiceSearch,\r\n updateInvoiceSearchDueToDate,\r\n updateSelectedCard,\r\n setDueSelect,\r\n setSelectedCurrency,\r\n setStatementId,\r\n getInvoicePDF, getInvoiceBulkPDF\r\n} from \"../../actions/InvoiceActions\";\r\nimport { getisPaymentDisable } from \"../../requests/ConfigRequests\";\r\nimport {\r\n setisPaymentDisable,\r\n setMessageForPaymentDisable,\r\n getMessageForPaymentDisable,\r\n} from \"../../actions/CommonActions\";\r\nimport { getStatements, setStatements, getStatementList, getStatementsPDF, getStatementInvoicePDF } from \"../../actions/StatementActions\";\r\nimport { InvoiceList } from \"./InvoiceList\";\r\nimport { getPastYears } from \"../../common/invoiceHelpers\";\r\nimport { ThunkFunction } from \"../../interfaces/utils\";\r\nimport { FormattedMessage, useIntl } from \"react-intl\";\r\nimport { CurrencySelector, useHasMultiCurrency } from \"./CurrencySelector\";\r\nimport { useCalendarTranslation } from \"../../hooks/CalendarTranslation\";\r\nimport { SecondarySelect } from \"../SecondarySelect\";\r\nimport { DashboardDetails } from \"../dashboard/DashboardPage\";\r\nimport { useInvoices } from \"./InvoiceDataManager\";\r\nimport { useCanMakePayments } from \"../../selectors/ConfigSelectors\";\r\nimport { DocumentStatus } from \"../../interfaces/invoice\";\r\nimport { CurrencyDisplay } from \"../../common/CurrencyDisplay\";\r\nimport { useUser } from \"../../hooks/CommonHooks\";\r\nimport { boolean } from \"yup\";\r\nimport { convertArrayToObject } from \"../../utils\";\r\nimport { StatementResponse } from \"../../interfaces/StatementDropdown\";\r\nimport { TableItem} from \"../../interfaces/StatementTypes\";\r\ninterface InvoicePageProps {\r\n accountType: any;\r\n invoiceSearchDueDateTo: any;\r\n invoiceTotal: any;\r\n secondaryAccounts: any;\r\n selectedInvoicesKeys: any;\r\n selectedCurrency: string;\r\n invoiceSearchQuery: any;\r\n dueSelect: any;\r\n selectedSoldTos: any;\r\n statementId: string;\r\n invoices: Invoice[];\r\n}\r\n\r\n\r\ninterface InvoiceDispatchProps {\r\n updateSelectedCard: ThunkFunction<typeof updateSelectedCard>;\r\n clearSelectedInvoices: ThunkFunction<typeof clearSelectedInvoices>;\r\n updateInvoiceSearchDueToDate: ThunkFunction<\r\n typeof updateInvoiceSearchDueToDate\r\n >;\r\n updateInvoiceSearch: ThunkFunction<\r\n typeof updateInvoiceSearch\r\n >;\r\n getStatementInvoicePDF: ThunkFunction<typeof getStatementInvoicePDF>;\r\n getInvoiceBulkPDF: ThunkFunction<typeof getInvoiceBulkPDF>;\r\n setDueSelect: ThunkFunction<typeof setDueSelect>;\r\n statements: ThunkFunction<typeof setStatements>;\r\n setStatementId: ThunkFunction<typeof setStatementId>;\r\n dispatch: any;\r\n}\r\ninterface Statement {\r\n STATEMENT_ID: string | null;\r\n DESCRIPTION: string;\r\n}\r\n\r\nfunction _Invoices(props: InvoicePageProps & InvoiceDispatchProps) {\r\n const intl = useIntl();\r\n let history = useHistory();\r\n const user = useUser();\r\n const f = (id) => intl.formatMessage({ id: id });\r\n const calIl8n = useCalendarTranslation();\r\n const hasMultiCurrency = useHasMultiCurrency();\r\n\r\n //This is called by default. The method calls InvoiceDataManager with currency selected(USD by default)\r\n //The invoices are stored in state of the page and used between this page and invoicelist\r\n const invoices = useInvoices(props.selectedCurrency);\r\n const dispatch = useDispatch();\r\n //const [invoices, updateInvoices, clearInvoices] = useContext(InvoicesContext);\r\n let [config, setConfig] = useState(null);\r\n let [selectedDueOption, setSelectedDueOption] = useState<\r\n \"\" | \"all\" | \"all-paid\" | \"due-up-to\"\r\n >(\"\");\r\n let [selectedYear, setSelectedYear] = useState(moment().year());\r\n const canMakePayment = useCanMakePayments();\r\n const [showSummary, setShowSummary] = useState(true);\r\n const [country, setcountry] = useState(\"en\");\r\n const [DisableMessage, setDisableMessage] = useState(\"\");\r\n \r\n var paymentDisableMessage;\r\n const language = useSelector<RootState, string>(\r\n (state) => state.user.language\r\n );\r\n //const [stateStatements, setStateStatements] = useState([]);\r\n const [selectedMonthId, setSelectedMonthId] = useState(\"\");\r\n const [isButtonEnabled, setIsButtonEnabled] = useState(false);\r\n const [selectMonth,setSelectMonth] = useState(\"\");\r\n const [selectedMonth, setSelectedMonth] = useState(\"\");\r\n let [selectedStatementId, setSelectedStatementId] = useState(\"\");\r\n var paymentDisableKey =\r\n language.toString() + \"_paymentDisableMessageText\".trim();\r\n // const [stateStatements, setStateStatements] = useState<Statement[]>([]);\r\n const [selectedStatement, setSelectedStatement] = useState<{\r\n STATEMENT_ID: string | null;\r\n DESCRIPTION: string;\r\n }>({ STATEMENT_ID: null, DESCRIPTION: '' });\r\n\r\n const [stateStatements, setStateStatements] = useState<Statement[]>([]);\r\n\r\n const [statementList, setStatementList] = useState(props.invoices);\r\n paymentDisableMessage = getMessageForPaymentDisable(paymentDisableKey);\r\n \r\n \r\n useEffect(() => {\r\n history.push(\"/invoices\");\r\n getisPaymentDisable().then((_) => setisPaymentDisable(_));\r\n const fetchStatements = async () => {\r\n try {\r\n const value = props.selectedSoldTos[0];\r\n\r\n const statementResponse = await getStatements(value);\r\n\r\n setStateStatements(statementResponse);\r\n\r\n if (statementResponse.length > 0) {\r\n setSelectedStatement(statementResponse[0]);\r\n }\r\n } catch (error) {\r\n console.error('Error fetching statements:', error);\r\n }\r\n };\r\n\r\n\r\n fetchStatements();\r\n\r\n\r\n //getStatements()\r\n // .then(statements => {\r\n // setStatements(statements);\r\n // })\r\n // .catch(error => {\r\n // console.error('Error fetching statements:', error);\r\n // });\r\n props.updateSelectedCard(\"\");\r\n setSelectedDueOption(props.dueSelect);\r\n //dispatch(setSelectedCurrency(\"USD\"));\r\n let defaultToDate =\r\n props.invoiceSearchDueDateTo !== \"\"\r\n ? props.invoiceSearchDueDateTo\r\n : moment(new Date()).format(\"MM-DD-YYYY\");\r\n let status = DocumentStatus.Open;\r\n if (props.dueSelect === \"due-up-to\") {\r\n defaultToDate =\r\n props.invoiceSearchDueDateTo !== \"\"\r\n ? props.invoiceSearchDueDateTo\r\n : moment(new Date()).format(\"MM-DD-YYYY\");\r\n } else if (props.dueSelect === \"all-paid\") {\r\n status = DocumentStatus.Complete;\r\n } else if (props.dueSelect === \"all\" || props.dueSelect === \"\") {\r\n defaultToDate = \"\";\r\n status = DocumentStatus.Open;\r\n }\r\n\r\n if (props.dueSelect === \"all-paid\") {\r\n dispatch(\r\n updateInvoiceSearch({\r\n status: status,\r\n //due_date_to: '',\r\n date_from: moment()\r\n .year(selectedYear)\r\n .startOf(\"year\")\r\n .format(\"MM-DD-YYYY\"),\r\n date_to: moment()\r\n .year(selectedYear)\r\n .endOf(\"year\")\r\n .format(\"MM-DD-YYYY\"),\r\n })\r\n );\r\n } else {\r\n dispatch(\r\n updateInvoiceSearch({\r\n status: status,\r\n //due_date_to: defaultToDate,\r\n date_to: \"\",\r\n date_from: \"\",\r\n })\r\n );\r\n }\r\n }, [props.dueSelect, selectedYear, props.selectedCurrency]);\r\n //useEffect(() => {\r\n // fetchStatements();\r\n //}, [props.selectedSoldTos]); // Add any other dependencies as needed\r\n\r\n let onContinueClick = (event) => {\r\n if (props.selectedInvoicesKeys.length === 0) {\r\n event.preventDefault();\r\n toast.warn(f(\"invoices_page.error.no_invoices_selected\"), {\r\n position: toast.POSITION.TOP_RIGHT,\r\n });\r\n return;\r\n }\r\n if (props.invoiceTotal <= 0) {\r\n event.preventDefault();\r\n toast.warn(f(\"invoices_page.error.credit_amount_validation\"), {\r\n position: toast.POSITION.TOP_RIGHT,\r\n });\r\n return;\r\n }\r\n };\r\n function handleSelectedDates(selectedDates) {\r\n props.clearSelectedInvoices();\r\n let toDate = \"\";\r\n if (selectedDates && selectedDates.length > 0) {\r\n toDate = moment(selectedDates[0]).format(\"MM-DD-YYYY\");\r\n } else {\r\n toDate = moment([new Date().getFullYear(), 11, 31]).format(\"MM-DD-YYYY\");\r\n }\r\n props.updateInvoiceSearchDueToDate(toDate);\r\n }\r\n const handleMonthChange = (selectedStatementId: string) => {\r\n props.clearSelectedInvoices();\r\n const selectedStatement = stateStatements.find(\r\n (item) => item.STATEMENT_ID === selectedStatementId\r\n );\r\n\r\n const description = selectedStatement ? selectedStatement.DESCRIPTION || '' : '';\r\n\r\n setSelectedStatement({\r\n STATEMENT_ID: selectedStatementId,\r\n DESCRIPTION: description,\r\n });\r\n props.setStatementId(selectedStatementId)\r\n setSelectedStatementId(selectedStatementId);\r\n updateInvoiceSearchCriteria(selectedStatementId);\r\n\r\n\r\n };\r\n const updateInvoiceSearchCriteria = (selectedStatementId: string) => {\r\n \r\n if (selectedStatementId) {\r\n \r\n props.updateInvoiceSearch({\r\n filter: [{ filter_type: \"95\", value: selectedStatementId }]\r\n\r\n });\r\n \r\n }\r\n else props.updateInvoiceSearch({ filter: [{ filter_type: \"90\", value: selectedStatementId }]})\r\n \r\n };\r\n const handleButtonClick = (selectedStatementId) => {\r\n \r\n const StatementId = selectedStatementId;\r\n if (StatementId && StatementId.length > 0) {\r\n props.getStatementInvoicePDF(StatementId)\r\n }\r\n \r\n \r\n }\r\n\r\n let handleDueChange = (event) => {\r\n props.clearSelectedInvoices();\r\n let selectedDueOption = event.target.value;\r\n setSelectedDueOption(selectedDueOption);\r\n props.setDueSelect(event.target.value);\r\n props.updateInvoiceSearchDueToDate(moment(new Date()).format(\"MM-DD-YYYY\"));\r\n };\r\n\r\n const toDate = props.invoiceSearchDueDateTo\r\n ? new Date(props.invoiceSearchDueDateTo)\r\n : \"\";\r\n let isPaymentDisable =\r\n sessionStorage.getItem(\"isPaymentDisable\")?.toString() === \"true\"\r\n ? true\r\n : false;\r\n function handleYearChange(e: React.ChangeEvent<HTMLSelectElement>) {\r\n setSelectedYear(parseInt(e.target.value));\r\n }\r\n return (\r\n <div className=\"container invoicePage\">\r\n {isPaymentDisable && (\r\n <div\r\n className={\r\n \"col-12 col-md d-flex justify-content-center align-items-baseline\"\r\n }\r\n >\r\n <span className={\"invoice-currency-warning\"}>\r\n {/* <FormattedMessage id={f(\"configuration.Payments-disable-info-message\")} />*/}\r\n <label>{paymentDisableMessage}</label>\r\n </span>\r\n </div>\r\n )}\r\n <br />\r\n\r\n <div id=\"divFilterControls\" className=\"row\">\r\n <div className=\"col-lg-3 col-sm-4 form-group\">\r\n <SecondarySelect accountType={props.accountType} />\r\n </div>\r\n {/*{hasMultiCurrency && <div className=\"col-lg-2 col-md-2 col-sm-4 w-50 customSelect\">*/}\r\n {/* <CurrencySelector selectedCurrency={props.selectedCurrency}/>*/}\r\n {/* <i className=\"fas fa-chevron-down select-arrow\"></i>*/}\r\n {/*</div>}*/}\r\n <div className=\" col-lg-2 col-sm-4 mt-3 mt-md-0 form-group customSelect\">\r\n <select\r\n className={\"form-control invoicesHeadingInput\"}\r\n onChange={handleDueChange}\r\n value={selectedDueOption}\r\n >\r\n <option value=\"all\">{f(\"invoices_page.filter.show_all\")}</option>\r\n <option value=\"due-up-to\">\r\n {f(\"invoices_page.filter.due_till\")}\r\n </option>\r\n </select>\r\n <i className=\"fas fa-chevron-down select-arrow\"></i>\r\n </div>\r\n {selectedDueOption === \"due-up-to\" && (\r\n <div className=\"col-lg-2 col-sm-4 form-group\">\r\n <div>\r\n <i className=\"calendarPosition fa fa-calendar-alt\" />\r\n <Flatpickr\r\n className=\"inp form-control inv-calendar\"\r\n value={toDate}\r\n options={{\r\n formatDate: (date) => {\r\n return intl.formatDate(date);\r\n },\r\n locale: calIl8n,\r\n }}\r\n onClose={handleSelectedDates}\r\n placeholder=\"Due Til\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n {selectedDueOption === \"all-paid\" && (\r\n <div className={\"col-12 col-md\"}>\r\n <div className={\"row align-items-center\"}>\r\n <div className={\"form-group\"}>\r\n <FormattedMessage id={\"invoice_search.period_label\"} />\r\n </div>\r\n <div className=\"col form-group customSelect\">\r\n <select\r\n className={\"form-control invoicesHeadingInput\"}\r\n onChange={handleYearChange}\r\n value={selectedYear}\r\n >\r\n {getPastYears(5).map((year) => {\r\n return <option value={year}>{year}</option>;\r\n })}\r\n </select>\r\n <i className=\"fas fa-chevron-down select-arrow\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n <div className={\"col-12 col-md\"}>\r\n <div className={\"row align-items-center\"}>\r\n <div className=\"col form-group customSelect\">\r\n \r\n \r\n <select\r\n className={'form-control invoicesHeadingInput'}\r\n onChange={(e) => handleMonthChange(e.target.value)}\r\n value={selectedStatement?.STATEMENT_ID ?? ''} // Use empty string as default value\r\n >\r\n {Array.isArray(stateStatements) &&\r\n stateStatements.length > 0 &&\r\n stateStatements.map((item) => (\r\n <option key={item.STATEMENT_ID} value={item.STATEMENT_ID ?? ''}>\r\n {item.DESCRIPTION}\r\n </option>\r\n ))}\r\n </select>\r\n\r\n\r\n\r\n\r\n <i className=\"fas fa-chevron-down select-arrow\"></i>\r\n </div>\r\n\r\n <div>\r\n <img\r\n src={selectedStatementId && selectedStatementId.length > 0 ? \"/images/ic_pdf.png\" : \"/images/ic_pdf_disabled.png\"}\r\n alt=\"pdf\"\r\n key={`${'docId_'}${props.invoices}`}\r\n onClick={() => handleButtonClick(selectedStatementId)}\r\n role=\"presentation\"\r\n style={{ width: '20px', height: '20px', verticalAlign:'10px' }}\r\n />\r\n \r\n {/*<img*/}\r\n {/* src={\"/images/ic_pdf_disabled.png\"}*/}\r\n {/* alt=\"pdf\"*/}\r\n {/* key={`${'docId_'}${row.document_number_finance}`}*/}\r\n {/* onClick={this.handleClick}*/}\r\n {/* role=\"presentation\"*/}\r\n {/* />);*/}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n aria-disabled={isPaymentDisable}\r\n className={\r\n isPaymentDisable\r\n ? \"is-disabled col-12 col-md my-3 my-md-0\"\r\n : \"col-12 col-md my-3 my-md-0\"\r\n }\r\n >\r\n <div className=\"col-12 col-md my-3 my-md-0\">\r\n {user?.user_role != \"internal\" && (\r\n <div\r\n className={\r\n \"row flex-fill d-flex justify-content-between justify-content-md-end align-items-center\"\r\n }\r\n >\r\n <div>\r\n <span className=\"invoicesHeading\">\r\n <FormattedMessage id={\"invoices_page.continue\"} />{\" \"}\r\n </span>\r\n <span\r\n className={\r\n props.invoiceTotal >= 0\r\n ? \"credit-positive\"\r\n : \"credit-negative\"\r\n }\r\n >\r\n   \r\n <CurrencyDisplay\r\n currency={props.selectedCurrency}\r\n value={props.invoiceTotal}\r\n />\r\n </span>\r\n </div>\r\n <div className=\"ml-md-2 ml-0\">\r\n {canMakePayment && (\r\n <Link\r\n className=\"btn btn-primary buttonColor\"\r\n to=\"/invoices/pay\"\r\n onClick={onContinueClick}\r\n >\r\n <FormattedMessage id={\"invoices_page.continue\"} />{\" \"}\r\n <i className=\"fas fa-angle-right\" />\r\n </Link>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n {showSummary && <DashboardDetails />}\r\n <InvoiceList isSearch={false} PaymentDisable={isPaymentDisable} StatementId={selectedStatement.STATEMENT_ID} />\r\n </div>\r\n );\r\n}\r\n\r\nexport default connect<InvoicePageProps, any, any, any>(\r\n (store: any, props) => ({\r\n accountType: store.user_options.accountType,\r\n invoiceSearchDueDateTo: store.user_options.invoiceSearchDueDateTo,\r\n // invoiceSearchQuery: [],\r\n invoiceSearchQuery: getInvoiceQuery(store),\r\n selectedCurrency: store.default.selectedCurrencyOptionValue,\r\n invoiceTotal: getInvoiceTotal(store),\r\n secondaryAccounts: store.user_options.secondaryAccounts,\r\n dueSelect: store.invoice.dueSelect,\r\n selectedInvoicesKeys: getSelectedInvoiceKeys(store),\r\n selectedSoldTos: store.user_options.selectedSoldTos,\r\n statements: store.statements.statements,\r\n statementId: store.invoice.statementId,\r\n invoices: store.default.invoices,\r\n\r\n }),\r\n {\r\n updateSelectedCard,\r\n clearSelectedInvoices,\r\n updateInvoiceSearchDueToDate,\r\n setDueSelect,\r\n updateInvoiceSearch,\r\n getStatementInvoicePDF,\r\n getInvoiceBulkPDF,\r\n setStatementId\r\n }\r\n)(_Invoices);\r\n","import axios from \"../axios\";\r\nimport { toast } from 'react-toastify';\r\nimport * as apiTypes from '../constants/ApiConstants';\r\nimport * as types from '../constants/ActionTypes';\r\nimport * as validationTypes from '../constants/ValidationConstants';\r\n\r\nimport {\r\n requestErrored,\r\n requestStarted,\r\n requestUnauthorized,\r\n updateState\r\n} from './CommonActions';\r\nimport * as Yup from \"yup\";\r\nimport { InvoiceRequestBody } from \"../interfaces/invoice\";\r\nimport { StatementRequest, StatementResponse, Statement, StatementPDF } from \"../interfaces/StatementDropdown\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { AccountType } from \"../interfaces/Accounts\";\r\nimport { ReduxAction, SapResponse } from \"../interfaces/utils\";\r\nimport { saveAs } from \"../common/FileSaver\";\r\nimport { InvoiceSearchParameters } from \"../interfaces/invoice\"\r\n\r\n\r\nexport const getStatements = async (value): Promise<Statement[]> => {\r\n try {\r\n const formattedRequest = {\r\n function_module_name: \"Z_CNBS_X_GET_STATEMENT_IDS\",\r\n export: [\r\n {\r\n name: \"IV_ACCOUNT\",\r\n value: value,\r\n \r\n },\r\n \r\n ],\r\n \r\n };\r\n const response = await axios.post(apiTypes.GET_STATEMENTS_LIST, formattedRequest, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n return response.data as Statement[];\r\n } catch (error) {\r\n console.error('Error fetching statements:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n\r\nexport function setStatements(statements): ReduxAction<any> {\r\n return {\r\n type: types.GET_STATEMENTS_LIST,\r\n payload: statements,\r\n };\r\n}\r\nexport function getStatementList(StatementId) {\r\n\r\n}\r\nexport function updateInvoiceSearch(invoiceSearch: Partial<InvoiceSearchParameters>): ReduxAction<any> {\r\n return {\r\n type: types.UPDATE_INVOICE_SEARCH,\r\n payload: invoiceSearch,\r\n }\r\n}\r\n\r\nexport const getStatementsPDF = async(StatementId,DocumentId ): Promise<StatementPDF[]> => {\r\n try {\r\n const formattedRequest = {\r\n FM_NAME: \"Z_CNBS_X_GET_STATEMENT_IDS\",\r\n export: [\r\n {\r\n name: \"IV_ACCOUNT\",\r\n value: StatementId,\r\n \r\n },\r\n {\r\n name: \"IV_DOCUMENT_ID\",\r\n value: DocumentId,\r\n \r\n },\r\n\r\n ],\r\n\r\n };\r\n\r\n const response = await axios.post(apiTypes.GET_STATEMENTS_LIST, formattedRequest, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n return response.data as StatementPDF[];\r\n } catch (error) {\r\n console.error('Error fetching statements:', error);\r\n throw error;\r\n }\r\n};\r\nexport function getStatementInvoicePDF(statementId) {\r\n return (dispatch) => {\r\n // const docNumber = props.invoices[0].billing_document_number;\r\n const input = { 'statementId': statementId };\r\n\r\n axios\r\n .post(apiTypes.GET_STATEMENT_PDF, input)\r\n .then(response => {\r\n if (response.status === 200) {\r\n // const file = new Blob([response.data], {type: 'application/pdf'});\r\n // const fileURL = URL.createObjectURL(file, {name: `${docNumber}${'.pdf'}`});\r\n \r\n window.open(response.data, '_blank');\r\n }\r\n })\r\n .catch(err => {\r\n if (err && err.response && err.response.status === 401) {\r\n requestUnauthorized(dispatch, err);\r\n } else {\r\n requestErrored(dispatch, err, validationTypes.GET_INVOICE_PDF_ERROR);\r\n }\r\n });\r\n\r\n }\r\n}\r\n\r\n\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { getCurrencySymbol, isCredit, sapDateToDate, unwrap } from '../../common/invoiceHelpers';\r\nimport {\r\n removeInvoiceFromSelected,\r\n updatePayAmountForInvoice,\r\n updateReason,\r\n updateReasonComment\r\n} from \"../../actions/InvoiceActions\";\r\nimport { toast } from 'react-toastify';\r\nimport { getSelectedPrimaryAccount, getPayerAccount } from \"../../selectors/Selectors\";\r\nimport { trimLeadingZeroes } from \"../../utils\";\r\nimport { AccountType } from \"../../interfaces/Accounts\";\r\nimport { isInvoiceOverpaymentAllowed, isPartialPaymentsAllowed } from \"../../selectors/ConfigSelectors\";\r\nimport { FormattedDate, useIntl } from \"react-intl\";\r\nimport { CurrencyDisplay, CurrencySymbol } from \"../../common/CurrencyDisplay\";\r\nimport { REASON_CODE } from \"../../constants/ApplicationConstants\";\r\nimport { getMaximumPaymentAllowed } from '../../requests/ConfigRequests';\r\n\r\nfunction _InvoiceDetail(props) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n const [maxPayment, setMaxPayment] = useState(0)\r\n\r\n let readOnly = (!props.isPartialPaymentsAllowed && !props.isInvoiceOverpaymentAllowed) || isCredit(props.invoice);\r\n let _isCredit = isCredit(props.invoice);\r\n\r\n useEffect(() => {\r\n getMaximumPaymentAllowed().then((_) => setMaxPayment(_))\r\n },[]);\r\n \r\n function isReasonCodeValid() {\r\n return props.reason && props.reason.length !== 0;\r\n }\r\n\r\n function getSoldToName() {\r\n let custOption = '';\r\n if (props.accountType === AccountType.SoldTo) {\r\n const headerItems = props.userCustomerDetails;\r\n for (let l = 0; l < headerItems.length; l += 1) {\r\n const headerItem = headerItems[l];\r\n if (headerItem && headerItem.PrimaryAcct === props.selectedPrimaryAccount.PrimaryAcct) {\r\n custOption = `${headerItem.PrimaryAcct}${'-'}${headerItem.Name}`;\r\n }\r\n }\r\n } else {\r\n for (let l = 0; l < props.secondaryAccounts.length; l += 1) {\r\n const customer = props.secondaryAccounts[l];\r\n if (props.invoice.soldto_number === customer.value) {\r\n custOption = customer.label;\r\n break;\r\n }\r\n }\r\n }\r\n return custOption;\r\n }\r\n\r\n function reasonCodeRequired() {\r\n return props.invoice.open_amount > props.payAmount;\r\n }\r\n\r\n function onRemoveInvoiceFromSelected(e) {\r\n props.removeInvoiceFromSelected(props.invoice);\r\n }\r\n\r\n function onChangePayAmount(e) {\r\n const { value } = e.target;\r\n props.updatePayAmountForInvoice(\r\n props.documentId,\r\n value ? parseFloat(value) : null,\r\n props.invoice.open_amount,\r\n props.isPartialPaymentsAllowed,\r\n props.isInvoiceOverpaymentAllowed,\r\n maxPayment\r\n );\r\n }\r\n\r\n function handleReasonChange(e) {\r\n props.updateReasonComment(props.documentId, e.target.value);\r\n }\r\n\r\n function handleReasonCodeChange(selectedReasonCodeOption) {\r\n props.updateReason(props.documentId, selectedReasonCodeOption.target.value);\r\n if (selectedReasonCodeOption.target.value === REASON_CODE) {\r\n props.updateReasonComment(props.documentId, \"\");\r\n }\r\n }\r\n\r\n const errorClass = valid => (valid ? '' : 'invalid');\r\n\r\n\r\n const payerCompanyCode = props.payerAccount && props.payerAccount.CompanyCode ? props.payerAccount.CompanyCode : '';\r\n\r\n const reasonCodes = (props.sapDetails?.payment_reason_codes ?? [])\r\n .filter(obj => obj.company_code === payerCompanyCode && obj.payment_type === 'O')\r\n .map(code => {\r\n return {\r\n value: code.reason_code,\r\n label: code.description,\r\n commentsRequired: code.comments_required,\r\n clearableValue: false,\r\n }\r\n });\r\n\r\n let selectedReasonCode = (props.sapDetails?.payment_reason_codes ?? []).find((reason) => {\r\n return reason.reason_code === props.reason;\r\n });\r\n const postingDate = unwrap(sapDateToDate(props?.invoice?.posting_date ?? \"\"));\r\n const dueDate = unwrap(sapDateToDate(props?.invoice?.due_date ?? \"\"));\r\n const payAmount = props.payAmount;\r\n return (\r\n <div className=\"checkout-invoice-detail d-flex flex-column pt-4\">\r\n <div>\r\n <div\r\n role=\"presentation\"\r\n onClick={onRemoveInvoiceFromSelected}\r\n className=\"remove-invoice-button\"\r\n >\r\n <i\r\n className=\"fas fa-times text-secondary\"\r\n />\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div\r\n className={\"payment-invoice-detail col-12 col-sm-3 d-flex justify-content-between justify-content-sm-start\"}>\r\n <div className=\"details-label-column\">{f(\"invoice_detail.document_number_label\")}</div>\r\n <div className=\"details-value\">{trimLeadingZeroes(props.invoice.billing_document_number === undefined ? props.invoice.document_number_finance : props.invoice.billing_document_number)}</div>\r\n </div>\r\n <div\r\n className={\"payment-invoice-detail col-12 col-sm-3 d-flex justify-content-between justify-content-sm-start\"}>\r\n <div\r\n className=\"details-label-column\">{props.invoice.open_amount < 0 ? f(\"invoice_detail.credit\") : f(\"invoice_detail.open\")}</div>\r\n <div className={`details-value ${props.invoice.open_amount < 0 ? 'itemPayment' : ''}`}>\r\n <CurrencyDisplay currency={props.invoice.currency_key} value={props.invoice.open_amount} />\r\n </div>\r\n </div>\r\n <div\r\n className={\"payment-invoice-detail col-12 col-sm-2 d-flex justify-content-between justify-content-sm-start\"}>\r\n <div className=\"details-label-column\">{f(\"invoice_detail.posting_date_label\")}</div>\r\n <div className=\"details-value\">\r\n <FormattedDate value={postingDate} />\r\n </div>\r\n </div>\r\n <div\r\n className={\"payment-invoice-detail col-12 col-sm-2 d-flex justify-content-between justify-content-sm-start\"}>\r\n <div className=\"details-label-column\">{f(\"invoice_detail.due_date_label\")}</div>\r\n <div className=\"details-value\">\r\n <FormattedDate value={dueDate} />\r\n </div>\r\n </div>\r\n <div\r\n className={\"payment-invoice-detail col-12 col-sm-2 d-flex justify-content-between justify-content-sm-start\"}>\r\n <div className=\"details-label-column\">{f(\"invoice_detail.soldto_number_label\")}</div>\r\n <div data-toggle=\"details-value tooltip\"\r\n title={getSoldToName()}>{trimLeadingZeroes(props.invoice.soldto_number)}</div>\r\n </div>\r\n <div\r\n className={\"payment-invoice-detail col-12 col-sm-3 d-flex justify-content-between justify-content-sm-start\"}>\r\n <div className=\"details-label-column\">\r\n {f(\"invoice_detail.reference_number_label\")}\r\n </div>\r\n <div\r\n className=\"details-value\">\r\n {trimLeadingZeroes(props.invoice.reference_number)}\r\n </div>\r\n </div>\r\n <div className={\"payment-invoice-detail-input col-12 col-sm-3 d-flex flex-column flex-sm-row\"}>\r\n {props.invoice.open_amount >= 0 && <React.Fragment>\r\n <div\r\n className=\"details-label-column\">\r\n {f(\"invoice_detail.pay_label\")}\r\n </div>\r\n <div\r\n className=\"details-value invoiceDetailCustomSelect flex-fill\" style={{ \"position\": \"relative\" }}>\r\n <div className='input-group' style={{ \"paddingTop\": \"1.5rem\" }}>\r\n <div className='input-group-prepend'>\r\n <span className=\"input-group-text invoice-dollar-input\">{CurrencySymbol(props.invoice.currency_key)}</span>\r\n <input\r\n required\r\n id={`${'payAmount_'}${props.invoice.document_number_finance}`}\r\n name={`${'payAmount_'}${props.invoice.document_number_finance}`}\r\n className={`form-control form-control-sm text-left invoice-amount-input ${_isCredit ? 'itemPayment' : ''} ${errorClass(props.amountValidation.length === 0)}`}\r\n type=\"number\"\r\n onKeyDown={(evt) => evt.key === 'e' && evt.preventDefault()}\r\n onChange={onChangePayAmount}\r\n value={payAmount}\r\n readOnly={readOnly}\r\n />\r\n </div>\r\n \r\n </div>\r\n <h6 className=\"invalid-Text\">\r\n <small>\r\n {props.amountValidation ? \r\n <>{props.amountValidation}</>\r\n : <> </>}\r\n </small>\r\n </h6>\r\n\r\n </div>\r\n </React.Fragment>}\r\n </div>\r\n {reasonCodeRequired() &&\r\n <div className={\"payment-invoice-detail-input col-12 col-sm-3 d-flex flex-column flex-sm-row\"}>\r\n <div\r\n className=\"details-label-column\">\r\n Reason\r\n </div>\r\n <div className=\"details-value invoiceDetailCustomSelect flex-fill\" style={{ \"position\": \"relative\" }}>\r\n <select\r\n name=\"paymentStatus\"\r\n className={`form-control ${errorClass(isReasonCodeValid())}`}\r\n onChange={handleReasonCodeChange}>\r\n value={props.reason}\r\n <option value=\"\" disabled\r\n selected={props.reason == \"\"}>{f(\"invoice_detail.reason_code_label\")}</option>\r\n {reasonCodes.map(code => {\r\n return (\r\n <option value={code.value} key={code.value} selected={code.value == props.reason}>\r\n {code.label}\r\n </option>\r\n )\r\n })}\r\n </select>\r\n <i className=\"fas fa-chevron-down select-arrow\" />\r\n {isReasonCodeValid() ? '' : <h6 className=\"invalid-Text\" style={{ \"position\": \"absolute\" }}>\r\n <small>{f(\"invoice_detail.error.reason_code_required\")}</small>\r\n </h6>}\r\n </div>\r\n </div>\r\n }\r\n {reasonCodeRequired() && selectedReasonCode && selectedReasonCode.comments_required && selectedReasonCode.comments_required === \"X\" &&\r\n <div className={\"payment-invoice-detail-input col-12 col-sm-3 d-flex flex-column flex-sm-row\"}>\r\n <React.Fragment>\r\n <div className=\"details-label-column d-lg-none\">\r\n {f(\"invoice_detail.reason_comment\")}\r\n </div>\r\n <div className={\"flex-fill\"} style={{ \"position\": \"relative\" }}>\r\n <input\r\n required\r\n id={`${'reasonDescription_'}${props.invoice.document_number_finance}`}\r\n name={`${'reasonDescription_'}${props.invoice.document_number_finance}`}\r\n className={`form-control form-control-sm text-left ${props.comment.length === 0 && 'invalid'}`}\r\n placeholder=\"Reason Description\"\r\n onChange={handleReasonChange}\r\n value={props.comment}\r\n />\r\n {props.comment.length === 0 &&\r\n <h6 className=\"invalid-Text\" style={{ \"position\": \"absolute\" }}>\r\n <small>{f(\"invoice_detail.error.reason_comment_required\")}</small>\r\n </h6>\r\n }\r\n </div>\r\n </React.Fragment>\r\n\r\n </div>}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>((store, props) => ({\r\n sapDetails: store.app.config.sap?.data,\r\n isPartialPaymentsAllowed: isPartialPaymentsAllowed(store),\r\n isInvoiceOverpaymentAllowed: isInvoiceOverpaymentAllowed(store),\r\n payAmount: store.invoice.invoiceDetail[props.documentId].amount,\r\n amountValidation: store.invoice.invoiceDetail[props.documentId].amountValidation,\r\n reason: store.invoice.invoiceDetail[props.documentId].reason,\r\n comment: store.invoice.invoiceDetail[props.documentId].comment,\r\n invoice: store.invoice.selected[props.documentId],\r\n selectedInvoice: store.invoice.selected,\r\n userCustomerDetails: store.user_options.primaryAccounts,\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(store),\r\n secondaryAccounts: store.user_options.secondaryAccounts,\r\n accountType: store.user_options.accountType,\r\n payerAccount: getPayerAccount(store),\r\n}), {\r\n removeInvoiceFromSelected,\r\n updatePayAmountForInvoice,\r\n updateReasonComment,\r\n updateReason,\r\n})(_InvoiceDetail);\r\n","import React from 'react';\r\nimport InvoiceDetail from \"./InvoiceDetail\";\r\nimport {Payment} from \"./Payment\";\r\nimport {Link, Redirect} from 'react-router-dom';\r\nimport {connect} from 'react-redux';\r\n// import 'react-select/dist/react-select.css';\r\nimport 'react-bootstrap-table/dist/react-bootstrap-table-all.min.css';\r\nimport 'react-activity/dist/react-activity.css';\r\nimport {getSelectedPrimaryAccount} from \"../../selectors/Selectors\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {AccountChangeRedirect} from \"../AccountChangeRedirect\";\r\nimport {FinalizePaymentProcess} from \"../payment-methods/manage-payment-methods/FinalizePaymentProcess\";\r\n\r\nexport function _PaymentPageComponent(props) {\r\n\r\n return (<div className=\"container\">\r\n {/*<AccountChangeRedirect/>*/}\r\n <FinalizePaymentProcess />\r\n <div className=\"row\" style={{ height:80 }}>\r\n {/* we duplicate this heading section for response purposes*/}\r\n <div className=\"d-flex flex-wrap d-sm-none\">\r\n <div className=\"col-12\">\r\n <h2 className=\"invoicesHeading\">\r\n <FormattedMessage id={\"payment_page.invoice_count\"}\r\n values={{\"count\": Object.keys(props.selectedInvoices).length}}/>\r\n </h2>\r\n </div>\r\n <div className=\"col-12\">\r\n <h2 className=\"invoicesHeading\">\r\n <FormattedMessage id={\"payment_page.title\"}/>\r\n </h2>\r\n </div>\r\n <div className=\"col-12\">\r\n <Link\r\n id=\"closeDetails\"\r\n to={\"/invoices\"}\r\n className=\"btn btn-lg invoice-detail-back-button\"\r\n >\r\n {' '}\r\n <i className=\"fas fa-angle-left\"/> <FormattedMessage id={\"payment_page.back_button\"}/>{' '}\r\n </Link>\r\n </div>\r\n </div>\r\n <div style={{ width: '100%', lineHeight:3 }} className=\"d-none d-sm-flex\">\r\n <div className=\"row\" style={{\r\n width: '100%',\r\n }}>\r\n <div className=\"column\" style={{ width: '35%' }}>\r\n <div className=\"col-sm-4 text-left\">\r\n <Link\r\n id=\"closeDetails\"\r\n to={\"/invoices\"}\r\n className=\"btn button-back\"\r\n >\r\n {' '}\r\n <i className=\"fas fa-angle-left\" /> <FormattedMessage id={\"payment_page.back_button\"} />{' '}\r\n </Link>\r\n </div>\r\n <div className=\"col-sm-4 mt-4\">\r\n <h2 className=\"invoicesHeading\">\r\n <FormattedMessage id={\"payment_page.invoice_count\"}\r\n values={{ \"count\": Object.keys(props.selectedInvoices).length }} />\r\n </h2>\r\n </div>\r\n </div>\r\n \r\n <div className=\"col-sm-4 text-center\" style={{ paddingTop: '12px' }}>\r\n <h2 className=\"invoicesHeading\">\r\n <FormattedMessage id={\"payment_page.title\"}/>\r\n </h2>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <br/>\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <div className=\"card\" id=\"mainCard\">\r\n <div>\r\n {Object.keys(props.selectedInvoices)\r\n .map((key, index) => (\r\n <InvoiceDetail documentId={key} key={key}/>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <br/>\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <Payment mode={\"invoice\"} form={null}/>\r\n </div>\r\n </div>\r\n {Object.keys(props.selectedInvoices).length === 0 && <Redirect to={\"/invoices\"}/>}\r\n </div>);\r\n}\r\n\r\nexport default connect<any, any, any, any>((store, props) => ({\r\n selectedInvoices: store.invoice.selected,\r\n secondaryAccounts: store.user_options.secondaryAccounts,\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(store),\r\n userCustomerDetails: store.user_options.primaryAccounts,\r\n}))(_PaymentPageComponent);\r\n","import React, { Component, useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\n// import { BootstrapTable, TableHeaderColumn } from 'react-bootstrap-table';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport { amountFormatter, payerFormatter, reasonFormatter, soldToFormatter } from '../../common/invoiceHelpers';\r\nimport { FormattedDate, FormattedMessage, useIntl } from \"react-intl\";\r\nimport { trimLeadingZeroes } from \"../../utils\";\r\nimport { getSelectedPaymentOption } from \"../../selectors/Selectors\";\r\nimport { extractLastCardNumbers } from \"../../actions/InvoiceActions\";\r\n//import { isNullOrUndefined } from 'util';\r\nimport Logo from \"../Logo\";\r\ninterface PaymentStatus {\r\n document_number_finance: string;\r\n authorization_reference_code: string;\r\n}\r\n\r\n\r\n\r\nfunction PaymentStatus(props) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n const statuses = props.paymentStatuses;\r\n const successMessage = statuses?.filter(_ => _.message_type === 'S').map(_ => _.message_line_string).join(\"; \");\r\n const errorMessage = statuses?.filter(_ => _.message_type === 'E').map(_ => _.message_line_string).join(\"; \");\r\n const success = successMessage.length > 0;\r\n let paymentStatus: null | PaymentStatus = null;\r\n if (success) {\r\n paymentStatus = statuses[0];\r\n }\r\n const alertClass = successMessage.length > 0 ? 'alert alert-success' : 'alert alert-danger';\r\n const documentNumber = paymentStatus?.document_number_finance ?? '';\r\n const referenceCode = paymentStatus?.authorization_reference_code ?? '';\r\n const top = 'Top';\r\n const [logo, setLogo] = useState(\"\");\r\n const [isPrint, setIsPrint] = useState(false);\r\n const columns = [{\r\n headerClasses: \"column-header\",\r\n dataField: 'billing_document_number',\r\n text: f(\"payment_status.table.document_number_header\"),\r\n formatter: trimLeadingZeroes,\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n }, {\r\n headerClasses: \"column-header\",\r\n dataField: 'open_amount',\r\n text: f(\"payment_status.table.invoice_amount_header\"),\r\n formatter: amountFormatter,\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n }, {\r\n headerClasses: \"column-header\",\r\n dataField: 'amount_to_process',\r\n text: f(\"payment_status.table.paid_header\"),\r\n formatter: amountFormatter,\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n }, {\r\n headerClasses: \"column-header\",\r\n dataField: 'sold_to',\r\n text: f(\"payment_status.table.sold_to_header\"),\r\n formatter: soldToFormatter,\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n }, {\r\n headerClasses: \"column-header\",\r\n dataField: 'payer',\r\n text: f(\"payment_status.table.payer_header\"),\r\n formatter: payerFormatter,\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n },\r\n //{\r\n //headerClasses: \"column-header\",\r\n //dataField: 'payer',\r\n //text: f(\"payment_status.table.partial_payment\"),\r\n //formatter: reasonFormatter,\r\n //headerAlign: \"center\",\r\n //align: \"center\",\r\n //}\r\n ];\r\n\r\n const defaultSorted = [{\r\n dataField: 'billing_document_number',\r\n order: 'desc'\r\n }];\r\n useEffect(() => {\r\n // Check if the component is being viewed in print mode\r\n const mediaQueryList = window.matchMedia('print');\r\n const handleMediaQueryChange = (e) => setIsPrint(e.matches);\r\n\r\n mediaQueryList.addListener(handleMediaQueryChange);\r\n\r\n // Set initial value\r\n setIsPrint(mediaQueryList.matches);\r\n\r\n return () => {\r\n // Cleanup event listener\r\n mediaQueryList.removeListener(handleMediaQueryChange);\r\n };\r\n }, []);\r\n\r\n\r\n let invoices = Object.keys(props.invoices).map((key) => {\r\n let invoice = props.invoices[key];\r\n let details = props.details[key];\r\n return {\r\n\r\n billing_document_number: invoice.billing_document_number ?? invoice.document_number_finance,\r\n document_number_finance: invoice.document_number_finance,\r\n open_amount: invoice.open_amount,\r\n amount_to_process: success ? details.amount : '',\r\n sold_to: invoice.soldto_number,\r\n payer: invoice.payer_number,\r\n currency_key: invoice.currency_key,\r\n reason: (props.sapDetails?.payment_reason_codes ?? []).find(r => r.reason_code === details.reason),\r\n reason_message: details.comment,\r\n zzcustom: invoice.zzcustom,\r\n };\r\n });\r\n return (\r\n <div>\r\n <div className=\"row d-flex\" style={{ \"marginBottom\": \"50px\" }}>\r\n <div className=\"mtb-3 d-md-none d-print-block col-6 \">\r\n <Logo src=\"logo\" alt=\"Company Logo\" height={120} />\r\n </div>\r\n <div className=\"mtb-3 d-md-none text-right d-print-block col-6\">\r\n <h3 className=\"d-print-block m-0\" style={{ \"fontSize\": \"20px\" }}>\r\n <strong>Payment Receipt</strong>\r\n </h3>\r\n </div>\r\n </div>\r\n\r\n <div className={alertClass}>\r\n <strong><FormattedMessage id={\"status\"} defaultMessage={\"Status\"} />: </strong> {success ? <FormattedMessage id={\"payment.success_message\"} defaultMessage={\"Payment Success\"} /> : <FormattedMessage id={\"payment.error_message\"} defaultMessage={\"Error Processing Payment\"} />} <br />\r\n <strong><FormattedMessage\r\n id={\"payment_status.document_number\"} />:</strong> {documentNumber.replace(/^0+/, '')}\r\n <br />\r\n <strong><FormattedMessage\r\n id={\"payment_status.reference_code\"} />:</strong> {referenceCode.replace(/^0+/, '')}\r\n <br />\r\n {props.paymentCard &&\r\n <React.Fragment><strong><FormattedMessage id={\"payment_status.payment_method_label\"} />: </strong>\r\n <FormattedMessage\r\n id={\"payment_status.payment_method\"}\r\n values={{\r\n type: props.paymentCard.payment_card_type,\r\n numbers: extractLastCardNumbers(props.paymentCard.payment_card_token, '-')\r\n }}\r\n /></React.Fragment>} <br />\r\n {/*<strong><FormattedMessage id={\"payment_status.processed_by\"}/>:</strong> {props.currentUser.login} <br/>*/}\r\n <strong><FormattedMessage id={\"payment_status.processed_date\"} />:</strong> <FormattedDate\r\n value={Date.now()} />\r\n </div>\r\n <br />\r\n\r\n\r\n <BootstrapTable\r\n bootstrap4\r\n keyField=\"billing_document_number\"\r\n data={invoices}\r\n columns={columns}\r\n headerStyle={{\r\n background: \"#DFECF5\",\r\n height: \"40px\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n headerClasses=\"column-header\"\r\n defaultSorted={defaultSorted}\r\n // bodyClasses=\"wa-bootstrap-body-style\"\r\n classes={\r\n \"wa-bootstrap-table-container custom-table-header\"\r\n }\r\n />\r\n <div>\r\n {/* <BootstrapTable data={invoices} scrollTop={top} headerStyle={{ background: '#DFECF5', height: '40px' }} containerClass={'table-responsive-md'}>\r\n <TableHeaderColumn className=\"headerColumnColor\" headerAlign=\"center\" dataAlign=\"center\"\r\n dataField=\"billing_document_number\" isKey dataFormat={trimLeadingZeroes}>\r\n <FormattedMessage id={\"payment_status.table.document_number_header\"} />\r\n </TableHeaderColumn>\r\n <TableHeaderColumn className=\"headerColumnColor\" headerAlign=\"center\" dataAlign=\"right\"\r\n dataField=\"open_amount\" dataFormat={amountFormatter}>\r\n <FormattedMessage id={\"payment_status.table.invoice_amount_header\"} />\r\n </TableHeaderColumn>\r\n <TableHeaderColumn className=\"headerColumnColor\" headerAlign=\"center\" dataAlign=\"right\"\r\n dataField=\"amount_to_process\" dataFormat={amountFormatter}>\r\n <FormattedMessage id={\"payment_status.table.paid_header\"} />\r\n </TableHeaderColumn>\r\n <TableHeaderColumn className=\"headerColumnColor\" headerAlign=\"center\" dataAlign=\"center\"\r\n dataField=\"sold_to\" dataFormat={soldToFormatter}>\r\n <FormattedMessage id={\"payment_status.table.sold_to_header\"} />\r\n </TableHeaderColumn>\r\n <TableHeaderColumn className=\"headerColumnColor\" headerAlign=\"center\" dataAlign=\"center\"\r\n dataField=\"payer\" dataFormat={payerFormatter}>\r\n <FormattedMessage id={\"payment_status.table.payer_header\"} />\r\n </TableHeaderColumn>\r\n <TableHeaderColumn className=\"headerColumnColor\" headerAlign=\"center\"\r\n dataField=\"payer\" dataFormat={reasonFormatter}>\r\n <FormattedMessage id={\"payment_status.table.partial_payment\"} />\r\n </TableHeaderColumn>\r\n </BootstrapTable> */}\r\n <div className={\"row d-print-none\"} style={{ \"marginTop\": \"20px\" }}>\r\n <div className={\"col\"}>\r\n <p className={\"mt-2 print-details\"}><FormattedMessage id={\"payment_status.message\"} />\r\n </p>\r\n <button className={\"btn btn-primary buttonColor buttonsize\"} style={{ backgroundColor: \"#336699\" }}\r\n onClick={() => window.print()}>{f(\"print\")}</button>\r\n </div>\r\n </div>\r\n <div className={\"row d-print-text-none\"} style={{ \"marginTop\": \"30px\" }}>\r\n <div className=\"col\">\r\n <p className=\"mt-2 print-details\">\r\n <FormattedMessage id={\"payment_confirmation.message\"} />\r\n </p>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n );\r\n\r\n}\r\nexport default connect<any, any, any, any>((store, props) => ({\r\n paymentStatuses: store.default.paymentStatuses,\r\n invoices: store.invoice.completed.invoices,\r\n details: store.invoice.completed.details,\r\n paymentCard: getSelectedPaymentOption(store),\r\n currentUser: store.default.currentUser,\r\n sapDetails: store.app.config.sap?.data,\r\n logo: store.app.config.style.login_logo,\r\n}))(PaymentStatus);\r\n","import { Route } from 'react-router-dom';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PaymentStatus from './PaymentStatus';\r\nimport { getSelectedPrimaryAccount } from '../../selectors/Selectors';\r\nimport { FormattedMessage } from \"react-intl\";\r\n\r\nclass PaymentStatusPage extends Component<any, any> {\r\n\r\n render() {\r\n return (\r\n <div className=\"container\">\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <Route render={({ history, location }) => {\r\n return <button\r\n type=\"button\"\r\n id=\"closePaymentStatus\"\r\n className=\"btn button-back d-print-none\"\r\n\r\n onClick={() => {\r\n history.push(\"/\");\r\n }}\r\n \r\n >\r\n {' '}\r\n <i className=\"fas fa-angle-left\" /> <FormattedMessage id={\"payment_page.back_button\"} />\r\n </button>\r\n }} />\r\n </div>\r\n </div>\r\n <br />\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <PaymentStatus />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default connect<any, any, any, any>((store, props) => ({\r\n selectedInvoices: store.default.selectedInvoices,\r\n secondaryAccounts: store.user_options.secondaryAccounts,\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(store),\r\n userCustomerDetails: store.user_options.primaryAccounts,\r\n}))(PaymentStatusPage);\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport { addInvoiceToSelected, adjustCurrency, getInvoiceDetail } from '../../actions/InvoiceActions';\r\nimport { FormattedMessage } from \"react-intl\";\r\nimport {\r\n calculateUnitPrice,\r\n formatTotal,\r\n formatColumn,\r\n removeLeadingZeros,\r\n isCredit, formatColumnRemoveLeading,\r\n} from '../../common/invoiceHelpers';\r\nimport { isStringNotEmptyOrNull } from \"../../utils\";\r\nimport { Invoice } from \"../../interfaces/invoice\";\r\nimport { ThunkFunction } from \"../../interfaces/utils\";\r\nimport { useIntl, FormatDateOptions } from 'react-intl';\r\nimport { useCanMakePayments, useCurrencyDecimalLookup } from \"../../selectors/ConfigSelectors\";\r\nimport { AccountChangeRedirect } from \"../AccountChangeRedirect\";\r\nimport { CurrencyDisplay } from \"../../common/CurrencyDisplay\";\r\nimport { getCompanyCode } from \"../../selectors/Selectors\";\r\nimport { RootState } from '../../reducers/RootReducer';\r\nimport { getMessageForPaymentDisable } from '../../actions/CommonActions';\r\nimport { useMediaQuery } from 'react-responsive'\r\nimport { getSelectedPrimaryAccount } from \"../../selectors/Selectors\";\r\n// interface DetailPageProps {\r\n// history: any; // Comes from withRouter\r\n// match: any; // Comes from withRouter\r\n// invoices: Invoice[];\r\n// addInvoiceToSelected: ThunkFunction<typeof addInvoiceToSelected>;\r\n// getInvoiceDetail: ThunkFunction<typeof getInvoiceDetail>;\r\n// }\r\n\r\n// interface InvoiceDetail{\r\n// header_data: any;\r\n// item_data: ItemData[];\r\n// partner_data: any;\r\n// }\r\n\r\ninterface ItemData {\r\n base_unit: string;\r\n billed_quantity: number;\r\n currency_key: string;\r\n description: string;\r\n item_number: number;\r\n material_number: string;\r\n pricing_unit: string;\r\n sales_unit: string;\r\n total_amount: number;\r\n\r\n}\r\n\r\n\r\nfunction _Detail(props: any) {\r\n const [state, setState] = useState<any>({\r\n itemData: [] as ItemData[],\r\n billingDocumentNumber: props.match.params.billingDocumentNumber,\r\n documentDate: '',\r\n totalAmount: '',\r\n currencyKey: '',\r\n customerAddress: { region: '', city: '', postal_code_city: '', name: '', street: '' },\r\n invoiceRecipientAddress: { region: '', city: '', postal_code_city: '', name: '', street: '' },\r\n backPage: '/invoices',\r\n billingDocumentType: '',\r\n poNumber: '',\r\n });\r\n \r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n const d = (dateString: string, options?: FormatDateOptions) => intl.formatDate(dateString, options);\r\n const top = 'Top';\r\n const tab = useRef('table');\r\n const _canMakePayment = useCanMakePayments();\r\n const [canMakePayment] = useState(_canMakePayment);\r\n const decimalLookup = useCurrencyDecimalLookup();\r\n const companyCode = useSelector(getCompanyCode);\r\n let isPaymentDisable = (sessionStorage.getItem(\"isPaymentDisable\")?.toString() === \"true\") ? true : false;\r\n //useSelector<RootState, any>(\r\n // state => {\r\n // state.app.config.sap?.data?.company_codes?.map((item) => {\r\n // if (item.company_code === props.selectedPrimaryAccount.CompanyCode) {\r\n // if (item.disable_payments === \"X\") {\r\n // sessionStorage.setItem(\"isPaymentDisable\", \"true\");\r\n // }\r\n // }\r\n // });\r\n // }\r\n //);\r\n const language = useSelector<RootState, string>(state => state.user.language);\r\n var paymentDisableMessage;\r\n var paymentDisableKey = (language.toString() + \"_paymentDisableMessageText\".trim());\r\n paymentDisableMessage = getMessageForPaymentDisable(paymentDisableKey);\r\n\r\n function pay(invoice: Invoice) {\r\n props.addInvoiceToSelected(invoice, decimalLookup(invoice.currency_key));\r\n props.history.push(\"/invoices/pay\");\r\n }\r\n\r\n function goBack() {\r\n props.history.goBack();\r\n // props.history.push(state.backPage,{searchQuery:\"\"});\r\n }\r\n const payerNumber = props.activeInvoice.payer_number;\r\n const soldtoNumber = props.activeInvoice.soldto_number;\r\n const CustomerNumber = props.activeInvoice.soldto_number?props.activeInvoice.payer_number:'';\r\n const billingDocumentNumber = props.match.params.billingDocumentNumber;\r\n\r\n const docNumber = billingDocumentNumber ? removeLeadingZeros(billingDocumentNumber) : '';\r\n const cusNumber = CustomerNumber ? removeLeadingZeros(CustomerNumber) : '';\r\n const isMobile = useMediaQuery({ query: '(max-width: 600px)' })\r\n\r\n useEffect(() => {\r\n if (docNumber) {\r\n props.getInvoiceDetail(docNumber, '01', cusNumber).then((result) => {\r\n if (result) {\r\n let tempState: any = {\r\n itemData: [] as ItemData[],\r\n billingDocumentNumber: billingDocumentNumber,\r\n documentDate: '',\r\n totalAmount: '',\r\n currencyKey: '',\r\n customerAddress: { region: '', city: '', postal_code_city: '', name: '', street: '' },\r\n invoiceRecipientAddress: { region: '', city: '', postal_code_city: '', name: '', street: '' },\r\n backPage: '/invoices',\r\n billingDocumentType: '',\r\n poNumber: '',\r\n document_status: '',\r\n \r\n\r\n };\r\n\r\n if (result.header_data) {\r\n tempState.billingDocumentNumber = result.header_data.billing_document_number ? result.header_data.billing_document_number : '';\r\n tempState.billingDocumentType = result.header_data.billing_document_type ? result.header_data.billing_document_type : '';\r\n tempState.documentDate = result.header_data.document_date ? result.header_data.document_date : '';\r\n tempState.totalAmount = result.header_data.total_amount ? adjustCurrency(result.header_data.total_amount, decimalLookup(result.header_data.currency_key)) : '';\r\n tempState.currencyKey = result.header_data.currency_key ? result.header_data.currency_key : '';\r\n tempState.poNumber = result.header_data?.custom_fields?.customer_purchase_order_nubmer ?? '';\r\n tempState.document_status = result.header_data.document_status ? result.header_data.document_status : '';\r\n tempState.payer_number = result.header_data.payer_number ? result.header_data.payer_number : '';\r\n tempState.soldto_number = result.header_data.soldto_number ? result.header_data.soldto_number : '';\r\n }\r\n\r\n if (result.partner_data) {\r\n const customer = result.partner_data.filter(obj => obj.partner_function === 'WE'); //TODO this should be configurable.\r\n const invoiceRecipient = result.partner_data.filter(obj => obj.partner_function === 'RG');\r\n tempState.customerAddress = customer[0].address_data;\r\n tempState.invoiceRecipientAddress = invoiceRecipient[0].address_data;\r\n tempState.payer_number = invoiceRecipient[0].payer_number;\r\n tempState.soldto_number = invoiceRecipient[0].soldto_number;\r\n }\r\n \r\n if (result.item_data) {\r\n tempState.itemData = result.item_data;\r\n }\r\n\r\n tempState?.itemData?.forEach((_) => {\r\n _.total_amount = adjustCurrency(_.total_amount, decimalLookup(_.currency_key))\r\n });\r\n setState(tempState)\r\n }\r\n }).catch(() => { /* TODO: Catch error */\r\n });\r\n }\r\n }, [docNumber]);\r\n\r\n let headerDate = state.documentDate ? d(state.documentDate) : '';\r\n let customerCity = state.customerAddress?.city ?? \"\";\r\n let customerRegion = state?.customerAddress?.region ?? \"\";\r\n let customerPostalCode = state?.customerAddress?.postal_code_city ?? \"\";\r\n\r\n let invoiceRecipientCity = state.invoiceRecipientAddress?.city ?? '';\r\n let invoiceRecipientRegion = state.invoiceRecipientAddress?.region ?? '';\r\n let invoiceRecipientCode = state.invoiceRecipientAddress?.postal_code_city ?? '';\r\n let document_status = state.document_status && state.document_status != \"03\" ? true : false;\r\n let invoice = props?.activeInvoice;\r\n \r\n let allowPay = false;\r\n if (invoice) {\r\n allowPay = canMakePayment && !isCredit(invoice) && document_status;\r\n }\r\n\r\n const columns = [\r\n {\r\n headerClasses: \"invoice-detail-column-header\",\r\n dataField: \"item_number\",\r\n formatter: formatColumn,\r\n text: f(\"invoice_detail.item_label\"),\r\n headerStyle: { width: '65px' },\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n },\r\n {\r\n headerClasses: \"invoice-detail-column-header\",\r\n dataField: \"billed_quantity\",\r\n formatter: formatColumn,\r\n text: f(\"invoice_detail.quantity_label\"),\r\n headerStyle: { width: '55px' },\r\n headerAlign: \"center\",\r\n align: \"center\"\r\n },\r\n {\r\n headerClasses: \"invoice-detail-column-header\",\r\n dataField: \"material_number\",\r\n formatter: formatColumnRemoveLeading,\r\n text: f(\"invoice_detail.article_number_label\"),\r\n headerStyle: { width: '55px' },\r\n headerAlign: \"center\",\r\n align: \"center\"\r\n },\r\n {\r\n headerClasses: \"invoice-detail-column-header\",\r\n dataField: \"description\",\r\n formatter: formatColumn,\r\n text: f(\"invoice_detail.description_label\"),\r\n headerStyle: { width: '55px' },\r\n headerAlign: \"center\",\r\n align: \"center\"\r\n },\r\n {\r\n headerClasses: \"invoice-detail-column-header\",\r\n dataField: \"total_amount\",\r\n formatter: calculateUnitPrice,\r\n text: f(\"invoice_detail.unit_price_label\"),\r\n headerStyle: { width: '55px' },\r\n headerAlign: \"center\",\r\n align: \"center\"\r\n },\r\n {\r\n headerClasses: \"invoice-detail-column-header\",\r\n dataField: \"total_amount\",\r\n formatter: formatTotal,\r\n text: f(\"invoice_detail.total_label\"),\r\n headerStyle: { width: '55px' },\r\n headerAlign: \"center\",\r\n align: \"center\"\r\n },\r\n ];\r\n\r\n\r\n const {\r\n customerAddress,\r\n invoiceRecipientAddress,\r\n itemData,\r\n totalAmount,\r\n showPayButton,\r\n \r\n } = state;\r\n \r\n let itemDataWithKey: any[] = itemData.map((_: any) => {\r\n _._key = _.item_number;\r\n return _;\r\n });\r\n\r\n \r\n\r\n function displayCard(row: any) {\r\n\r\n return (\r\n <div className=\"card\" >\r\n <div className=\"flex\">\r\n\r\n <div className=\"row invoice-detail-column-header \">\r\n <div className='col ml-1 p-0'>\r\n <label className='h5 bold'>{f(\"invoice_detail.article_number_label\")}</label>\r\n\r\n </div>\r\n <div className='col'>\r\n\r\n\r\n <label className='h5 bold'>{f(\"invoice_detail.description_label\")}</label>\r\n </div>\r\n\r\n </div>\r\n\r\n <div className='row'>\r\n <div className='col ml-1 p-0'>\r\n {row.material_number}\r\n </div>\r\n <div className='col'>\r\n {row.description}\r\n </div>\r\n </div>\r\n\r\n <div className='row ml-1'>\r\n <div >\r\n <div className='h5 bold mb-0'>{f(\"invoice_detail.item_label\")}</div>\r\n \r\n <div className=' bold '>{ formatColumn(row.item_number)} </div>\r\n \r\n <div className='h5 bold mb-0 mt-2'>{f(\"invoice_detail.quantity_label\")}</div>\r\n \r\n <div className=' bold'> {formatColumn(row.billed_quantity)}</div>\r\n \r\n <div className='h5 bold mb-0 mt-2'>{f(\"invoice_detail.unit_price_label\")}</div>\r\n \r\n <div className=' bold'>{calculateUnitPrice(\"\",row)}</div>\r\n \r\n <div className='h5 bold mb-0 mt-2'>{f(\"invoice_detail.total_label\")}</div>\r\n \r\n <div className=' bold ' > {formatTotal(\"\",row)}</div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n );\r\n\r\n }\r\n\r\n return (\r\n \r\n <div className=\"container\">\r\n \r\n <AccountChangeRedirect />\r\n {isPaymentDisable &&\r\n <div\r\n className={\"col-12 col-md d-flex justify-content-center align-items-baseline\"}>\r\n <span className={\"invoice-currency-warning\"}>\r\n <label> {paymentDisableMessage} </label>\r\n </span>\r\n </div>}\r\n <div className=\"row\">\r\n <div className=\"col justify-content-between d-flex pl0\">\r\n <div>\r\n <button className=\"btn button-back\" onClick={goBack}>\r\n <span>\r\n <i className=\"fas fa-angle-left\" /> {f(\"invoice_detail.back_button\")}\r\n </span>\r\n </button>\r\n </div>\r\n <div aria-disabled={isPaymentDisable}\r\n className={(isPaymentDisable) ? 'is-disabled' : ''}>\r\n {invoice && allowPay && document_status &&\r\n <button className=\"btn btn-primary buttonColor \" onClick={() => {\r\n pay(invoice)\r\n }}>\r\n <span\r\n className=\"invoice-detail-pay-button-text\">{f(\"invoice_detail.pay_invoice\")}</span>\r\n </button>}\r\n </div>\r\n </div>\r\n </div>\r\n <br />\r\n <div className=\"card\" style={{ margin: \"0.5em 1em\", paddingLeft: \"6.5em\", paddingRight:\"0em\" }}>\r\n \r\n \r\n {/*<div className=\"row align-items-center justify-content-center\">*/}\r\n {/* {!isCredit(invoice) && <span*/}\r\n {/* className=\"invoice-detail-header-text\">{`${f(\"invoice_detail.invoice_label\")}${' '}${docNumber}`}</span>}*/}\r\n {/* {isCredit(invoice) &&*/}\r\n {/* <span className=\"invoice-detail-header-text\">{`${f(\"invoice_detail.credit\")}${' '}${docNumber}`}</span>}*/}\r\n {/*</div>*/}\r\n \r\n\r\n <div className = \"row\">\r\n <div className=\"col-lg-3 col-md-6 col-sm-12 col-12 px-2\">\r\n {!isCredit(invoice) &&\r\n <>\r\n <span className=\" col-form-label text-secondary font-weight-bold marginBottom\">{`${f(\"invoice_detail.invoice_label\")}`}</span><br></br>\r\n <span className=\"col-form-label text-secondary nopadding\">{`${docNumber}`}</span>\r\n </>\r\n } \r\n {isCredit(invoice) &&\r\n <>\r\n <span className=\" col-form-label text-secondary font-weight-bold marginBottom\">{`${f(\"invoice_detail.credit\")}`}</span><br></br>\r\n <span className=\"col-form-label text-secondary nopadding\">{`${docNumber}`}</span>\r\n </>\r\n }\r\n \r\n \r\n\r\n {isStringNotEmptyOrNull(state.poNumber) && <div className=\"row\">\r\n <span\r\n className=\"col-md-4 col-sm-2 col-2 col-form-label text-secondary font-weight-bold marginBottom\">{intl.formatMessage({\r\n id: \"invoice_detail.purchase_order_number\",\r\n defaultMessage: \"PO Number\"\r\n })}</span>\r\n <span\r\n className=\"col-form-label col-form-label-sm text-secondary nopadding\">{state.poNumber}</span>\r\n </div>\r\n }\r\n </div>\r\n \r\n <div className=\"col-lg-3 col-md-6 col-sm-12 col-12 px-2\" >\r\n \r\n <span\r\n className=\"col-form-label text-secondary font-weight-bold marginBottom\" >{f(\"invoice_detail.date_label\")}</span><br></br>\r\n <span\r\n className=\"col-form-label col-form-label-sm text-secondary nopadding\">{headerDate}</span>\r\n \r\n {isStringNotEmptyOrNull(state.poNumber) && <div className=\"row\">\r\n <span\r\n className=\"col-md-4 col-sm-2 col-2 col-form-label text-secondary font-weight-bold marginBottom\">{intl.formatMessage({\r\n id: \"invoice_detail.purchase_order_number\",\r\n defaultMessage: \"PO Number\"\r\n })}</span>\r\n <span\r\n className=\"col-md-8 col-sm-10 col-10 col-form-label col-form-label-sm text-secondary nopadding\">{state.poNumber}</span>\r\n </div>}\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 col-sm-12 col-12 px-2 \">\r\n {companyCode?.startsWith(\"JP\") ? <div>\r\n <span\r\n className=\"col-form-label text-secondary font-weight-bold marginBottom\">{f(\"invoice_detail.customer_label\")}</span>\r\n \r\n  \r\n <br/>\r\n \r\n <span\r\n className=\"col-form-label col-form-label-sm text-secondary nopadding\">{customerAddress.name_2}</span>\r\n </div> :\r\n\r\n <>\r\n \r\n <span\r\n className=\"col-form-label text-secondary font-weight-bold marginBottom\">{f(\"invoice_detail.customer_label\")}</span>\r\n <br />\r\n <span\r\n className=\"col-form-label col-form-label-sm text-secondary nopadding\">{soldtoNumber}</span>\r\n <br/>\r\n <span\r\n className=\"col-form-label col-form-label-sm text-secondary nopadding\">{customerAddress.name}</span>\r\n </>\r\n }\r\n <div className=\"row\">\r\n <span\r\n className=\"col-form-label col-form-label-sm text-secondary nopadding\">{customerAddress.street}</span>\r\n </div>\r\n <div className=\"row\">\r\n <span\r\n className=\"col-form-label col-form-label-sm text-secondary nopadding\">{`${customerCity}${' '}${customerRegion}${' '}${customerPostalCode}`}</span>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-6 col-sm-12 col-12 px-2\">\r\n \r\n <span\r\n className=\" col-form-label text-secondary font-weight-bold marginBottom\">{f(\"invoice_detail.invoice_recipient_label\")}</span>\r\n <br />\r\n <span\r\n className=\"col-form-label col-form-label-sm text-secondary nopadding\">{payerNumber}</span>\r\n <br/>\r\n <span\r\n className=\"col-form-label col-form-label-sm text-secondary nopadding\">{invoiceRecipientAddress.name}</span>\r\n \r\n <div className=\"row\">\r\n <span\r\n className=\"col-form-label col-form-label-sm text-secondary nopadding\">{invoiceRecipientAddress.street}</span>\r\n </div>\r\n <div className=\"row\">\r\n <span\r\n className=\"col-form-label col-form-label-sm text-secondary nopadding\">{`${invoiceRecipientCity}${' '}${invoiceRecipientRegion}${' '}${invoiceRecipientCode}`}</span>\r\n </div>\r\n \r\n \r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <br />\r\n <br />\r\n <div className=\"container\">\r\n <div className=\"row\">\r\n {\r\n isMobile && itemDataWithKey.map((key, index) => displayCard(key))\r\n }\r\n {!isMobile && <div className={\"col-12\"}>\r\n <BootstrapTable\r\n data={itemDataWithKey}\r\n ref={tab}\r\n headerStyle={{ background: 'red', height: '40px', borderCollapse: 'collapse' }}\r\n classes={'wa-bootstrap-table-container invoice-detail-grid-cell'}\r\n scrollTop={top}\r\n defaultSorted={[{ dataField: \"item_number\", order: 'desc' }]}\r\n columns={columns}\r\n keyField={'_key'}\r\n bootstrap4={true}\r\n \r\n\r\n >\r\n </BootstrapTable>\r\n </div>}\r\n </div>\r\n <div className=\"row\">\r\n <div className={\"col-md-12 col-sm-12 d-flex justify-content-end invoice-total-amount\"}>\r\n <span\r\n className=\"invoice-detail-invoice-total-label\">{isCredit(invoice) ? f(\"invoice_detail.credit_note_total\") : f(\"invoice_detail.invoice_total_label\")}:</span>\r\n  \r\n  \r\n <span\r\n className=\"invoice-detail-invoice-total-text\"><CurrencyDisplay currency={state.currencyKey} value={parseFloat(totalAmount)} /></span>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n );\r\n}\r\n\r\nexport default withRouter(connect<any, any, any, any>((state, props) => ({\r\n invoices: state.default.invoices,\r\n activeInvoice: state.invoice.activeInvoice,\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(state),\r\n}), {\r\n addInvoiceToSelected,\r\n getInvoiceDetail\r\n})(_Detail));\r\n\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { connect, useSelector } from \"react-redux\";\r\nimport { toast } from \"react-toastify\";\r\nimport Flatpickr from \"react-flatpickr\";\r\nimport moment from \"moment\";\r\nimport { Link } from \"react-router-dom\";\r\nimport * as appConstants from \"../../constants/ApplicationConstants\";\r\nimport \"../../../node_modules/flatpickr/dist/themes/material_blue.css\";\r\nimport {\r\n getDefaultFilters,\r\n getImpersonatedUserId,\r\n getPayerSoldToForInvoiceQuery,\r\n getSelectedPrimaryAccount,\r\n getSelectedSecondaryAccount,\r\n} from \"../../selectors/Selectors\";\r\nimport {\r\n adjustCurrency,\r\n getInvoicesAjax,\r\n setsearchedInvoices,\r\n setsearchedinvoiceStatus,\r\n setsearchedinvoiceDueDate,\r\n setsearchedinvoiceType,\r\n setsearchedInvoiceNumber,\r\n setsearchedArticleNumber,\r\n setsearchedArticleDescription,\r\n setinvoiceSearchedPeriod,\r\n setinvoiceSearchedPeriodFromTo,\r\n} from \"../../actions/InvoiceActions\";\r\nimport { InvoiceSearchList } from \"./InvoiceList\";\r\nimport {\r\n DocumentStatus,\r\n DocumentType,\r\n InvoiceRequestBody,\r\n} from \"../../interfaces/invoice\";\r\nimport { FormattedMessage, useIntl } from \"react-intl\";\r\nimport { useCalendarTranslation } from \"../../hooks/CalendarTranslation\";\r\nimport { isStringNotEmptyOrNull } from \"../../utils\";\r\nimport { SecondarySelect } from \"../SecondarySelect\";\r\nimport { AccountType } from \"../../interfaces/Accounts\";\r\nimport { RootState } from \"../../reducers/RootReducer\";\r\nimport { useCurrencyDecimalLookup } from \"../../selectors/ConfigSelectors\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { CurrencySelector, useHasMultiCurrency } from \"./CurrencySelector\";\r\nimport { BootstrapField } from \"../../helpers/Field\";\r\nimport { PregnantWomanOutlined } from \"@material-ui/icons\";\r\ninterface InvoiceSearchState {\r\n invoices: any[];\r\n searched: boolean;\r\n status: DocumentStatus;\r\n dueDateFrom: string;\r\n dueDateTo: string;\r\n period: string;\r\n dateFrom: string;\r\n dateTo: string;\r\n characteristics: string;\r\n characteristicsValue: string;\r\n characteristicsLabel: string;\r\n showDatesDue: boolean;\r\n showPeriod: boolean;\r\n showDatesPeriod: boolean;\r\n showCharacteristicsValue: boolean;\r\n}\r\n\r\nfunction _InvoiceSearch(props) {\r\n //props.searchInvoices = null;\r\n const hasMultiCurrency = useHasMultiCurrency();\r\n const selectedCurrency = useSelector<RootState, string>(\r\n (state) => state.default.selectedCurrencyOptionValue\r\n );\r\n const intl = useIntl();\r\n const f = (id) => intl.formatMessage({ id: id });\r\n const calIl8n = useCalendarTranslation();\r\n const [toDate, setToDate] = useState(moment(new Date()).format(\"MM-DD-YYYY\"));\r\n const [fromDate, setFromDate] = useState(\r\n moment(new Date()).format(\"MM-DD-YYYY\")\r\n );\r\n const accountType = useSelector<RootState, AccountType>(\r\n (store) => store?.user_options?.accountType\r\n );\r\n const decimalLookup = useCurrencyDecimalLookup();\r\n const dispatch = useDispatch();\r\n let [state, setState] = useState({\r\n invoices: [],\r\n searched: false,\r\n status: DocumentStatus.OpenOrComplete,\r\n dueDateFrom: \"\",\r\n dueDateTo: \"\",\r\n period: \"all\",\r\n dateFrom: \"\",\r\n dateTo: \"\",\r\n characteristics: \"\",\r\n characteristicsValue: \"\",\r\n characteristicsLabel: \"\",\r\n showDatesDue: false,\r\n showPeriod: true,\r\n showDatesPeriod: false,\r\n showCharacteristicsValue: false,\r\n materialNumber: \"\",\r\n materialDescription: \"\",\r\n documentType: \"\",\r\n SoldToSearchParams: props.selectedSoldTo,\r\n });\r\n\r\n useEffect(() => {\r\n setState({\r\n ...state,\r\n invoices: [],\r\n searched: false,\r\n status: DocumentStatus.OpenOrComplete,\r\n dueDateFrom: \"\",\r\n dueDateTo: \"\",\r\n period: \"all\",\r\n dateFrom: \"\",\r\n dateTo: \"\",\r\n characteristics: \"\",\r\n characteristicsValue: \"\",\r\n characteristicsLabel: \"\",\r\n showDatesDue: false,\r\n showPeriod: true,\r\n showDatesPeriod: false,\r\n showCharacteristicsValue: false,\r\n materialNumber: \"\",\r\n materialDescription: \"\",\r\n documentType: \"\",\r\n SoldToSearchParams: props.selectedSoldTo,\r\n });\r\n }, [\r\n props.primaryAccountIndex,\r\n props.selectedSecondaryAccount,\r\n props.selectedCurrency,\r\n ]);\r\n\r\n //alert(props.selectedSoldTo);\r\n\r\n useEffect(() => {\r\n let searched = props.searchInvoices ? true : false;\r\n let invoices = [];\r\n let materialDescription = props.searchedArticleDescription;\r\n let SoldToSearchParams = props.selectedSoldTo;\r\n let materialNumber = props.searchedArticleNumber;\r\n let characteristicsValue = props.searchedInvoiceNumber;\r\n let status = props.searchedinvoiceStatus\r\n ? props.searchedinvoiceStatus\r\n : DocumentStatus.OpenOrComplete;\r\n let showDatesDue =\r\n props.searchedinvoiceStatus && props.searchedinvoiceStatus === \"01\"\r\n ? true\r\n : false;\r\n let showPeriod =\r\n props.searchedinvoiceStatus && props.searchedinvoiceStatus !== \"01\"\r\n ? true\r\n : false;\r\n let documentType = props.searchedinvoiceType;\r\n let period = props.invoiceSearchedPeriod;\r\n let showDatesPeriod =\r\n props.invoiceSearchedPeriod && props.invoiceSearchedPeriod === \"-1\";\r\n let dueDateFrom =\r\n props.searchedinvoiceDueDateFrom !== \"\"\r\n ? props.searchedinvoiceDueDateFrom\r\n : \"\";\r\n let dueDateTo =\r\n props.searchedinvoiceDueDateTo !== \"\"\r\n ? props.searchedinvoiceDueDateTo\r\n : \"\";\r\n let dateFrom =\r\n props.invoiceSearchedPeriodFrom !== \"\"\r\n ? props.invoiceSearchedPeriodFrom\r\n : \"\";\r\n let dateTo =\r\n props.invoiceSearchedPeriodTo !== \"\" ? props.invoiceSearchedPeriodTo : \"\";\r\n if (\r\n props.searchedinvoiceStatus === \"01\" &&\r\n props.searchedinvoiceDueDateFrom !== \"\" &&\r\n props.searchedinvoiceDueDateTo !== \"\"\r\n ) {\r\n setFromDate(props.searchedinvoiceDueDateFrom);\r\n setToDate(props.searchedinvoiceDueDateTo);\r\n }\r\n if (\r\n props.invoiceSearchedPeriod === \"-1\" &&\r\n props.invoiceSearchedPeriodFrom !== \"\" &&\r\n props.invoiceSearchedPeriodTo !== \"\"\r\n ) {\r\n setFromDate(props.invoiceSearchedPeriodFrom);\r\n setToDate(props.invoiceSearchedPeriodTo);\r\n }\r\n\r\n if (props.searchedinvoiceStatus === \"01\") {\r\n status = DocumentStatus.OpenOrComplete;\r\n }\r\n let currency = props.selectedCurrencyOptionValue;\r\n //let selectedSoldTo: props.user_options.selectedSoldTos,\r\n //let SoldToSearchParams=\r\n setState({\r\n ...state,\r\n searched: searched,\r\n invoices: invoices,\r\n materialDescription: materialDescription,\r\n materialNumber: materialNumber,\r\n characteristicsValue: characteristicsValue,\r\n status: status,\r\n showDatesDue: showDatesDue,\r\n showPeriod: showPeriod,\r\n documentType: documentType,\r\n period: period,\r\n showDatesPeriod: showDatesPeriod,\r\n dueDateFrom: dueDateFrom,\r\n dueDateTo: dueDateTo,\r\n dateFrom: dateFrom,\r\n dateTo: dateTo,\r\n SoldToSearchParams: props.SoldToSearchParams,\r\n //currency:currency,\r\n });\r\n }, []);\r\n\r\n let handleDueFromChange = (date) => {\r\n let fromDue = date;\r\n if (fromDue && fromDue.length > 0) {\r\n fromDue = moment(fromDue[0]).format(\"MM-DD-YYYY\");\r\n } else {\r\n fromDue = moment([new Date().getFullYear(), 11, 31]).format(\"MM-DD-YYYY\");\r\n }\r\n\r\n setFromDate(fromDue);\r\n\r\n // setState({\r\n // ...state,\r\n // dueDateFrom: fromDue,\r\n\r\n // });\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n dueDateFrom: fromDue,\r\n }));\r\n dispatch(setsearchedinvoiceDueDate(fromDue, toDate));\r\n };\r\n\r\n let handleDueToChange = (date) => {\r\n let toDue = date;\r\n if (toDue && toDue.length > 0) {\r\n toDue = moment(toDue[0]).format(\"MM-DD-YYYY\");\r\n } else {\r\n toDue = moment([new Date().getFullYear(), 11, 31]).format(\"MM-DD-YYYY\");\r\n }\r\n\r\n setToDate(toDue);\r\n // setState({\r\n // ...state,\r\n // dueDateTo: toDue,\r\n\r\n // });\r\n setState((prevState) => ({\r\n ...prevState,\r\n dueDateTo: toDue,\r\n }));\r\n dispatch(setsearchedinvoiceDueDate(fromDate, toDue));\r\n };\r\n\r\n let handlePeriodFromChange = (date) => {\r\n let fromPeriod = date;\r\n if (fromPeriod && fromPeriod.length > 0) {\r\n fromPeriod = moment(fromPeriod[0]).format(\"MM-DD-YYYY\");\r\n } else {\r\n fromPeriod = moment([new Date().getFullYear(), 11, 31]).format(\r\n \"MM-DD-YYYY\"\r\n );\r\n }\r\n\r\n setFromDate(fromPeriod);\r\n\r\n // setState({\r\n // ...state,\r\n // dateFrom: fromPeriod,\r\n\r\n // });\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n dateFrom: fromPeriod,\r\n }));\r\n\r\n dispatch(setinvoiceSearchedPeriodFromTo(fromPeriod, toDate));\r\n };\r\n\r\n let handlePeriodToChange = (date) => {\r\n let toPeriod = date;\r\n if (toPeriod && toPeriod.length > 0) {\r\n toPeriod = moment(toPeriod[0]).format(\"MM-DD-YYYY\");\r\n } else {\r\n toPeriod = moment([new Date().getFullYear(), 11, 31]).format(\r\n \"MM-DD-YYYY\"\r\n );\r\n }\r\n\r\n setToDate(toPeriod);\r\n // setState({\r\n // ...state,\r\n // dateTo: toPeriod,\r\n // });\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n dateTo: toPeriod,\r\n }));\r\n\r\n dispatch(setinvoiceSearchedPeriodFromTo(fromDate, toPeriod));\r\n };\r\n\r\n function onDateChange(selectedDates, dateStr, instance) {\r\n if (selectedDates && selectedDates.length > 0) {\r\n setToDate(selectedDates[0]);\r\n }\r\n if (selectedDates && selectedDates.length > 1) {\r\n setFromDate(selectedDates[1]);\r\n }\r\n\r\n let from = \"\";\r\n let to = \"\";\r\n if (selectedDates && selectedDates.length > 0) {\r\n from =\r\n selectedDates[0] && selectedDates[1]\r\n ? moment(selectedDates[0]).format(\"MM-DD-YYYY\")\r\n : \"\";\r\n to =\r\n selectedDates[0] && selectedDates[1]\r\n ? moment(selectedDates[1]).format(\"MM-DD-YYYY\")\r\n : \"\";\r\n }\r\n const controlId = instance.input.id;\r\n switch (controlId) {\r\n case \"datesDue\":\r\n // setState({\r\n // ...state,\r\n // dueDateFrom: from,\r\n // dueDateTo: to\r\n // });\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n dueDateFrom: from,\r\n dueDateTo: to,\r\n }));\r\n\r\n dispatch(setsearchedinvoiceDueDate(selectedDates[0], selectedDates[1]));\r\n\r\n break;\r\n case \"datesPeriod\":\r\n // setState({\r\n // ...state,\r\n // dateFrom: from, dateTo: to\r\n // });\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n dateFrom: from,\r\n dateTo: to,\r\n }));\r\n dispatch(\r\n setinvoiceSearchedPeriodFromTo(selectedDates[0], selectedDates[1])\r\n );\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n function onSelectChange(name) {\r\n return function (e) {\r\n let option = e.target.value;\r\n switch (name) {\r\n case \"status\":\r\n // setState({\r\n // ...state,\r\n // status: option,\r\n // showDatesDue: option && option === '01',\r\n // showPeriod: option && option !== '01',\r\n // period: 'all',\r\n // showDatesPeriod: false,\r\n // });\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n status: option,\r\n showDatesDue: option && option === \"01\",\r\n showPeriod: option && option !== \"01\",\r\n period: \"all\",\r\n showDatesPeriod: false,\r\n }));\r\n setFromDate(moment(new Date()).format(\"MM-DD-YYYY\"));\r\n\r\n setToDate(moment(new Date()).format(\"MM-DD-YYYY\"));\r\n dispatch(setsearchedinvoiceDueDate(\"\", \"\"));\r\n dispatch(setinvoiceSearchedPeriodFromTo(\"\", \"\"));\r\n dispatch(setsearchedinvoiceStatus(option));\r\n dispatch(setinvoiceSearchedPeriod(\"all\"));\r\n break;\r\n case \"period\":\r\n setState((prevState) => ({\r\n ...prevState,\r\n period: option,\r\n showDatesPeriod: option && option === \"-1\",\r\n }));\r\n\r\n setFromDate(\"\");\r\n setToDate(\"\");\r\n dispatch(setsearchedinvoiceDueDate(\"\", \"\"));\r\n dispatch(setinvoiceSearchedPeriodFromTo(\"\", \"\"));\r\n dispatch(setinvoiceSearchedPeriod(option));\r\n break;\r\n case \"characteristics\":\r\n // setState({\r\n // ...state,\r\n // characteristics: option ? option : '',\r\n // showCharacteristicsValue: option && option,\r\n // characteristicsLabel: option ? e.target.options[e.target.selectedIndex].text : '',\r\n // });\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n characteristics: option ? option : \"\",\r\n showCharacteristicsValue: option && option,\r\n characteristicsLabel: option\r\n ? e.target.options[e.target.selectedIndex].text\r\n : \"\",\r\n }));\r\n\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n }\r\n\r\n function onCharacteristicsValueChange(e) {\r\n // setState({\r\n // ...state,\r\n // characteristicsValue: e.target.value\r\n // });\r\n setState((prevState) => ({\r\n ...prevState,\r\n characteristicsValue: e.target.value,\r\n }));\r\n\r\n dispatch(setsearchedInvoiceNumber(e.target.value));\r\n }\r\n\r\n function onMaterialDescriptionChange(e) {\r\n // setState({\r\n // ...state,\r\n // materialDescription: e.target.value\r\n // });\r\n setState((prevState) => ({\r\n ...prevState,\r\n materialDescription: e.target.value,\r\n }));\r\n dispatch(setsearchedArticleDescription(e.target.value));\r\n }\r\n\r\n function onMaterialNumberChange(e) {\r\n // setState({\r\n // ...state,\r\n // materialNumber: e.target.value\r\n // });\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n materialNumber: e.target.value,\r\n }));\r\n\r\n dispatch(setsearchedArticleNumber(e.target.value));\r\n }\r\n\r\n function onDocumentTypeChange(e) {\r\n // setState({\r\n // ...state,\r\n // documentType: e.target.value\r\n // });\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n documentType: e.target.value,\r\n }));\r\n\r\n dispatch(setsearchedinvoiceType(e.target.value));\r\n }\r\n\r\n function getSearch(validate: boolean = false): InvoiceRequestBody | null {\r\n let { dueDateFrom, dueDateTo, dateFrom, dateTo } = state;\r\n const { status, period, characteristics, characteristicsValue } = state;\r\n const { selectedSoldTo } = props.selectedSoldTo;\r\n if (status === \"01\") {\r\n dueDateFrom = moment(dueDateFrom).format(\"MM-DD-YYYY\");\r\n dueDateTo = moment(dueDateTo).format(\"MM-DD-YYYY\");\r\n } else {\r\n dueDateFrom = \"\";\r\n dueDateTo = \"\";\r\n }\r\n if (period === \"all\") {\r\n dateFrom = \"01-01-1800\";\r\n dateTo = \"12-31-9999\";\r\n } else if (period === \"-1\") {\r\n dateFrom = moment(dateFrom).format(\"MM-DD-YYYY\");\r\n dateTo = moment(dateTo).format(\"MM-DD-YYYY\");\r\n } else if (period === \"0\") {\r\n //Today\r\n dateFrom = moment(new Date()).format(\"MM-DD-YYYY\");\r\n dateTo = moment(new Date()).format(\"MM-DD-YYYY\");\r\n } else if (period === \"1\") {\r\n //Since yesterday\r\n const today = new Date();\r\n const yesterday = new Date();\r\n yesterday.setDate(today.getDate() - 1);\r\n dateFrom = moment(yesterday).format(\"MM-DD-YYYY\");\r\n dateTo = moment(today).format(\"MM-DD-YYYY\");\r\n } else if (period === \"7\") {\r\n //Since last week\r\n const today = new Date();\r\n const lastSevenDays = new Date();\r\n lastSevenDays.setDate(today.getDate() - 7);\r\n dateFrom = moment(lastSevenDays).format(\"MM-DD-YYYY\");\r\n dateTo = moment(today).format(\"MM-DD-YYYY\");\r\n } else if (period === \"30\") {\r\n //Since last 30 days\r\n const today = new Date();\r\n const lastThirtyDays = new Date();\r\n lastThirtyDays.setDate(today.getDate() - 30);\r\n dateFrom = moment(lastThirtyDays).format(\"MM-DD-YYYY\");\r\n dateTo = moment(today).format(\"MM-DD-YYYY\");\r\n } else if (period === \"365\") {\r\n //Since last 30 days\r\n const today = new Date();\r\n const lastOneYear = new Date();\r\n lastOneYear.setDate(today.getDate() - 365);\r\n dateFrom = moment(lastOneYear).format(\"MM-DD-YYYY\");\r\n dateTo = moment(today).format(\"MM-DD-YYYY\");\r\n } else {\r\n dateFrom = \"\";\r\n dateTo = \"\";\r\n }\r\n const filters: { filter_type: string; value: string }[] = [];\r\n if (isStringNotEmptyOrNull(characteristicsValue)) {\r\n filters.push({ filter_type: \"01\", value: characteristicsValue });\r\n }\r\n if (isStringNotEmptyOrNull(state.materialNumber)) {\r\n filters.push({ filter_type: \"90\", value: state.materialNumber });\r\n }\r\n if (isStringNotEmptyOrNull(state.materialDescription)) {\r\n filters.push({ filter_type: \"91\", value: state.materialDescription });\r\n }\r\n if (state.documentType == \"invoice\") {\r\n filters.push({ filter_type: \"92\", value: \"X\" });\r\n }\r\n if (state.documentType == \"credit\") {\r\n filters.push({ filter_type: \"93\", value: \"X\" });\r\n }\r\n //props.selectedSoldTo\r\n let { payer_data, soldto_data } = getPayerSoldToForInvoiceQuery(\r\n props.accountType,\r\n props.secondaryAccount,\r\n props.primaryAccount\r\n );\r\n return {\r\n payer_data,\r\n soldto_data,\r\n search_parameters: {\r\n document_type: DocumentType.Invoice,\r\n status: status,\r\n date_from: dateFrom,\r\n date_to: dateTo,\r\n due_date_from: dueDateFrom,\r\n due_date_to: dueDateTo,\r\n currency_key: \"\",\r\n SoldTo_SearchParams: props.selectedSoldTo,\r\n filter: getDefaultFilters(\r\n props.accountType,\r\n props.impersonatedUserId\r\n ).concat(filters as any),\r\n invoice_filter: \"\",\r\n STATEMENT_ID:\"\",\r\n },\r\n };\r\n }\r\n\r\n function exportToPdf() {\r\n try {\r\n let search = getSearch();\r\n props.getInvoiceSearchPDF(search);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n function onFindClick() {\r\n let { dueDateFrom, dueDateTo, dateFrom, dateTo } = state;\r\n const { status, period, characteristics, characteristicsValue } = state;\r\n try {\r\n if (\r\n status === \"01\" &&\r\n (dueDateFrom === \"\" ||\r\n dueDateFrom === null ||\r\n dueDateTo === \"\" ||\r\n dueDateTo === null)\r\n ) {\r\n toast.error(f(\"invoice_search.error.due_dates_required\"), {\r\n position: toast.POSITION.TOP_RIGHT,\r\n });\r\n return;\r\n } else if (\r\n status === \"01\" &&\r\n moment(dueDateTo).isBefore(moment(dueDateFrom))\r\n ) {\r\n toast.error(f(\"invoice_search.error.due_to_date_should_greater\"), {\r\n position: toast.POSITION.TOP_RIGHT,\r\n });\r\n return;\r\n } else if (\r\n period === \"-1\" &&\r\n (dateFrom === \"\" ||\r\n dateFrom === null ||\r\n dateTo === \"\" ||\r\n dateTo === null)\r\n ) {\r\n toast.error(f(\"invoice_search.error.document_dates_required\"), {\r\n position: toast.POSITION.TOP_RIGHT,\r\n });\r\n return;\r\n }\r\n if (props.accoutType === \"Payer\" && props.selectedSoldTo.length === 0) {\r\n toast.error(f(\"invoice_search.error.select_customer\"), {\r\n position: toast.POSITION.TOP_RIGHT,\r\n });\r\n return;\r\n } else {\r\n let search = getSearch(true);\r\n\r\n if (search) {\r\n getInvoicesAjax(search).then((response) => {\r\n let invoices = response.data.document_list as any;\r\n invoices.forEach((invoice) => {\r\n const soldToNum = parseInt(invoice.soldto_number, 10);\r\n const payerNum = parseInt(invoice.payer_number, 10);\r\n invoice.open_amount = invoice.open_amount\r\n ? adjustCurrency(\r\n invoice.open_amount,\r\n decimalLookup(invoice.currency_key)\r\n )\r\n : invoice.open_amount;\r\n invoice.total_amount = invoice.total_amount\r\n ? adjustCurrency(\r\n invoice.total_amount,\r\n decimalLookup(invoice.currency_key)\r\n )\r\n : invoice.total_amount;\r\n invoice.paid_amount = invoice.paid_amount\r\n ? adjustCurrency(\r\n invoice.paid_amount,\r\n decimalLookup(invoice.currency_key)\r\n )\r\n : invoice.paid_amount;\r\n invoice.soldto_number = isNaN(soldToNum)\r\n ? invoice.soldto_number\r\n : soldToNum.toString();\r\n invoice.payer_number = isNaN(payerNum)\r\n ? invoice.payer_number\r\n : payerNum.toString();\r\n });\r\n dispatch(setsearchedInvoices(invoices));\r\n setState({\r\n ...state,\r\n invoices: invoices,\r\n searched: true,\r\n });\r\n sessionStorage.setItem(\"searched\", JSON.stringify(true));\r\n });\r\n }\r\n }\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n function getDateFrom(days) {\r\n const date = new Date();\r\n date.setDate(date.getDate() - days);\r\n return moment(date).format(\"MM-DD-YYYY\");\r\n }\r\n\r\n const countOfInvoices = state.invoices ? state.invoices.length : 0;\r\n return (\r\n <div className=\"container invoicePage\">\r\n <div className=\"row\" style={{ marginLeft: \"15px\" }}>\r\n <div className=\"col-lg-11 col-md-11 col-sm-11 col-11\">\r\n <h2 className=\"invoicesHeading bottompadding\">\r\n <FormattedMessage id={\"invoice_search.page_title\"} />\r\n </h2>\r\n </div>\r\n {/*<div className=\"col-lg-1 col-md-1 col-sm-1 col-1 nopadding\">*/}\r\n {/* <span>*/}\r\n {/* <Link to=\"/invoices\">*/}\r\n {/* <i className=\"fas fa-times text-secondary float-right\" />*/}\r\n {/* </Link>*/}\r\n {/* </span>*/}\r\n {/*</div>*/}\r\n </div>\r\n <div\r\n className=\"card\"\r\n style={{\r\n paddingTop: \"60px\",\r\n marginLeft: \"30px\",\r\n marginRight: \"30px\",\r\n marginBottom: \"30px\",\r\n }}\r\n >\r\n <div className=\"card-body nopadding\">\r\n <div className=\"row\">\r\n <div className=\"col-lg-2 col-md-4 col-sm-4 col-4 bottompadding\">\r\n <span className=\"float-right col-form-label col-form-label-sm text-secondary\">\r\n <FormattedMessage id={\"deposits.Account_label\"} />\r\n </span>\r\n </div>\r\n <div className=\"col-lg-4 col-md-8 col-sm-8 col-8 bottompadding customSelect\">\r\n <SecondarySelect accountType={accountType} />\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-lg-2 col-md-4 col-sm-4 col-4 bottompadding\">\r\n <span className=\"float-right col-form-label col-form-label-sm text-secondary\">\r\n <FormattedMessage id={\"invoice_search.status_label\"} />\r\n </span>\r\n </div>\r\n <div className=\"col-lg-4 col-md-8 col-sm-8 col-8 bottompadding customSelect\">\r\n <select\r\n name=\"status\"\r\n className=\"form-control\"\r\n // defaultValue={state.status}\r\n onChange={onSelectChange(\"status\")}\r\n >\r\n <option value={\"03\"} selected={state.status === \"03\"}>\r\n {f(\"invoice_search.status_filter.all\")}\r\n </option>\r\n <option value={\"01\"} selected={state.status === \"01\"}>\r\n {f(\"invoice_search.status_filter.due\")}\r\n </option>\r\n <option value={\"02\"} selected={state.status === \"02\"}>\r\n {f(\"invoice_search.status_filter.complete\")}\r\n </option>\r\n </select>\r\n <i className=\"fas fa-chevron-down select-arrow\" />\r\n </div>\r\n {/* <div\r\n className={`${'col-lg-2 col-md-4 col-sm-4 col-4 bottompadding'}${' '} ${state.showDatesDue ? '' : 'hideControl'}`}>\r\n <span\r\n className=\"float-right col-form-label col-form-label-sm text-secondary\">{f(\"invoice_search.status_filter.due\")}</span>\r\n </div> */}\r\n <div\r\n className={`${\"col-lg-4 col-md-8 col-sm-8 col-8 bottompadding\"}${\" \"} ${\r\n state.showDatesDue ? \"\" : \"hideControl\"\r\n }`}\r\n >\r\n <div className=\"col datetimepickerdiv\">\r\n <div className=\"form-check-inline-date-first\">\r\n <div>\r\n <i className=\"calendarPosition fa fa-calendar-alt\" />\r\n <Flatpickr\r\n className=\"inp form-control inv-calendar\"\r\n options={{\r\n formatDate: (date) => {\r\n return intl.formatDate(date);\r\n },\r\n locale: calIl8n,\r\n }}\r\n onClose={handleDueFromChange}\r\n placeholder=\"From\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"form-check-inline-date\">\r\n <div>\r\n <i className=\"calendarPosition fa fa-calendar-alt\" />\r\n <Flatpickr\r\n className=\"inp form-control inv-calendar\"\r\n options={{\r\n formatDate: (date) => {\r\n return intl.formatDate(date);\r\n },\r\n locale: calIl8n,\r\n }}\r\n onClose={handleDueToChange}\r\n placeholder=\"To\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div\r\n className={`${\"col-lg-2 col-md-4 col-sm-4 col-4 float-right bottompadding\"}${\" \"}${\r\n state.showPeriod ? \"\" : \"hideControl\"\r\n }`}\r\n >\r\n <span className=\"float-right col-form-label col-form-label-sm text-secondary\">\r\n <FormattedMessage id={\"invoice_search.period_label\"} />\r\n </span>\r\n </div>\r\n <div\r\n className={`${\"col-lg-4 col-md-8 col-sm-8 col-8 bottompadding customSelect\"}${\" \"}${\r\n state.showPeriod ? \"\" : \"hideControl\"\r\n }`}\r\n >\r\n <select\r\n name=\"period\"\r\n className=\"form-control\"\r\n value={state.period}\r\n onChange={onSelectChange(\"period\")}\r\n >\r\n <option value={\"all\"} selected={state.period === \"all\"}>\r\n {intl.formatMessage({\r\n id: \"invoice_search.status_filter.all\",\r\n defaultMessage: \"All\",\r\n })}\r\n </option>\r\n <option value={\"0\"} selected={state.period === \"0\"}>\r\n {f(\"invoice_search.date_filter.today\")}\r\n </option>\r\n <option value={\"1\"} selected={state.period === \"1\"}>\r\n {f(\"invoice_search.date_filter.yesterday\")}\r\n </option>\r\n <option value={\"7\"} selected={state.period === \"7\"}>\r\n {f(\"invoice_search.date_filter.last_7_days\")}\r\n </option>\r\n <option value={\"30\"} selected={state.period === \"30\"}>\r\n {f(\"invoice_search.date_filter.last_30_days\")}\r\n </option>\r\n <option value={\"365\"} selected={state.period === \"365\"}>\r\n {f(\"invoice_search.date_filter.last_year\")}\r\n </option>\r\n <option value={\"-1\"} selected={state.period === \"-1\"}>\r\n {f(\"invoice_search.date_filter.custom\")}\r\n </option>\r\n </select>\r\n <i className=\"fas fa-chevron-down select-arrow\" />\r\n </div>\r\n {/* <div\r\n className={`${'col-lg-2 col-md-4 col-sm-4 col-4 bottompadding'}${' '}${state.showPeriod && state.showDatesPeriod ? '' : 'hideControl'}`}>\r\n <span\r\n className=\"float-right col-form-label col-form-label-sm text-secondary\"><FormattedMessage\r\n id={\"invoice_search.from\"} /></span>\r\n </div> */}\r\n <div\r\n className={`${\"col-lg-4 col-md-8 col-sm-8 col-8 bottompadding\"}${\" \"}${\r\n state.showPeriod && state.showDatesPeriod ? \"\" : \"hideControl\"\r\n }`}\r\n >\r\n {/* <i className=\"calendarPosition fa fa-calendar\" />\r\n <Flatpickr\r\n className=\"inp form-control\"\r\n id=\"datesPeriod\"\r\n value={[fromDate, toDate]}\r\n onChange={onDateChange}\r\n options={{\r\n mode: 'range',\r\n minDate: moment().add(-5, 'year').format(\"YYYY-MM-DD\"),\r\n maxDate: moment().add(1, 'year').format(\"YYYY-MM-DD\"),\r\n formatDate: (date) => {\r\n return intl.formatDate(date)\r\n },\r\n locale: calIl8n,\r\n }}\r\n /> */}\r\n\r\n <div className=\"col datetimepickerdiv\">\r\n <div className=\"form-check-inline-date-first\">\r\n <div>\r\n <i className=\"calendarPosition fa fa-calendar-alt\" />\r\n <Flatpickr\r\n className=\"inp form-control inv-calendar\"\r\n options={{\r\n formatDate: (date) => {\r\n return intl.formatDate(date);\r\n },\r\n locale: calIl8n,\r\n }}\r\n onClose={handlePeriodFromChange}\r\n placeholder=\"From\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"form-check-inline-date\">\r\n <div>\r\n <i className=\"calendarPosition fa fa-calendar-alt\" />\r\n <Flatpickr\r\n className=\"inp form-control inv-calendar\"\r\n options={{\r\n formatDate: (date) => {\r\n return intl.formatDate(date);\r\n },\r\n locale: calIl8n,\r\n }}\r\n onClose={handlePeriodToChange}\r\n placeholder=\"To\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n {/* <div className=\"row\">\r\n <div className=\"col-lg-2 col-md-4 col-sm-4 col-4 bottompadding\">\r\n <span\r\n className=\"float-right col-form-label col-form-label-sm text-secondary\">\r\n <FormattedMessage id={\"invoice_search.search_options.type_label\"}\r\n defaultMessage={\"Type\"}/>\r\n </span>\r\n </div>\r\n <div className={\"col-lg-4 col-md-8 col-sm-8 col-8 bottompadding customSelect\"}>\r\n\r\n <select\r\n className=\"form-control\"\r\n value={state.documentType}\r\n onChange={onDocumentTypeChange}>\r\n <option value={'any'}>{intl.formatMessage({\r\n id: \"invoice_search.status_filter.all\",\r\n defaultMessage: \"Any\"\r\n })}</option>\r\n <option value={'invoice'}>{intl.formatMessage({\r\n id: \"invoice_detail.invoice_label\",\r\n defaultMessage: \"Invoice\"\r\n })}</option>\r\n <option value={'credit'}>{intl.formatMessage({\r\n id: \"invoice_detail.credit_note\",\r\n defaultMessage: \"Credit\"\r\n })}</option>\r\n </select>\r\n <i className=\"fas fa-chevron-down select-arrow\"/>\r\n </div>\r\n </div> */}\r\n <div className=\"row\">\r\n <div className=\"col-lg-2 col-md-4 col-sm-4 col-4 bottompadding\">\r\n <span className=\"float-right col-form-label col-form-label-sm text-secondary\">\r\n <FormattedMessage\r\n id={\"invoice_search.search_options.invoice_number\"}\r\n />\r\n </span>\r\n </div>\r\n <div className={\"col-lg-4 col-md-8 col-sm-8 col-8 bottompadding\"}>\r\n <input\r\n type=\"text\"\r\n className=\"form-control control-border\"\r\n placeholder={f(\"invoice_search.search_options.invoice_number\")}\r\n value={state.characteristicsValue}\r\n name=\"invNumbner\"\r\n onChange={onCharacteristicsValueChange}\r\n />\r\n </div>\r\n </div>\r\n {/* <div className=\"row\">\r\n <div className=\"col-lg-2 col-md-4 col-sm-4 col-4 bottompadding\">\r\n <span\r\n className=\"float-right col-form-label col-form-label-sm text-secondary\">\r\n <FormattedMessage id={\"invoice_search.material_number\"}/>\r\n </span>\r\n </div>\r\n <div className={\"col-lg-4 col-md-8 col-sm-8 col-8 bottompadding\"}>\r\n <input type=\"text\" className=\"form-control control-border\"\r\n placeholder={f(\"invoice_search.material_number\")}\r\n value={state.materialNumber} name=\"materialNumber\"\r\n onChange={onMaterialNumberChange}/>\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-lg-2 col-md-4 col-sm-4 col-4 bottompadding\">\r\n <span\r\n className=\"float-right col-form-label col-form-label-sm text-secondary\">\r\n <FormattedMessage id={\"invoice_search.material_description\"}/>\r\n </span>\r\n </div>\r\n <div className={\"col-lg-4 col-md-8 col-sm-8 col-8 bottompadding\"}>\r\n <input type=\"text\" className=\"form-control control-border\"\r\n placeholder={f(\"invoice_search.material_description\")}\r\n value={state.materialDescription} name=\"materialDescription\"\r\n onChange={onMaterialDescriptionChange}/>\r\n </div>\r\n </div> */}\r\n\r\n <div className=\"form-row text-center mt-4\">\r\n <div className=\"col-12\">\r\n <button\r\n type=\"button\"\r\n className=\"btn btn-primary findButtonColor form-control control-border button-class\"\r\n onClick={onFindClick}\r\n >\r\n <FormattedMessage id={\"invoice_search.find_button\"} />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <br />\r\n </div>\r\n </div>\r\n\r\n {/*{state.invoices && state.invoices.length > 0 && <div className=\"row mt-2\">*/}\r\n {/* <div className=\"col-lg-12 col-md-12 col-sm-12 col-12 justify-content-end d-flex\">*/}\r\n {/* <button type=\"button\"*/}\r\n {/* className=\"btn btn-primary btn-sm\"*/}\r\n {/* onClick={exportToPdf}>Export to PDF*/}\r\n {/* </button>*/}\r\n {/* </div>*/}\r\n {/*</div>*/}\r\n {/*}*/}\r\n <div className=\"row\">\r\n <div className=\"col-lg-12 col-md-12 col-sm-12 col-12\">\r\n <span className=\"invoiceSearch col-form-label col-form-label-sm text-secondary float-right\">\r\n {props.searched && (\r\n <span>\r\n {countOfInvoices} {f(\"invoices.found\")}\r\n </span>\r\n )}\r\n </span>\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col\">\r\n <InvoiceSearchList\r\n invoices={state.invoices}\r\n isSearch={true}\r\n invoiceSearchQuery={getSearch()}\r\n />\r\n </div>\r\n </div>\r\n <br />\r\n <br />\r\n <br />\r\n <br />\r\n </div>\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>(\r\n (store, props) => ({\r\n accountType: store.user_options.accountType,\r\n primaryAccount: getSelectedPrimaryAccount(store),\r\n primaryAccountIndex: store.user_options.selectedPrimaryAccountIndex, //getSelectedPrimaryAccountIndex(store, props),\r\n secondaryAccount: getSelectedSecondaryAccount(store),\r\n characteristicsOptions: store.default.characteristicsOptions,\r\n filter: store.user_options.filter,\r\n impersonatedUserId: getImpersonatedUserId(store),\r\n searchInvoices: store.invoice.searchInvoices,\r\n searchedinvoiceStatus: store.invoice.searchedinvoiceStatus,\r\n searchedinvoiceDueDateFrom: store.invoice.searchedinvoiceDueDateFrom,\r\n searchedinvoiceDueDateTo: store.invoice.searchedinvoiceDueDateTo,\r\n searchedinvoiceType: store.invoice.searchedinvoiceType,\r\n searchedInvoiceNumber: store.invoice.searchedInvoiceNumber,\r\n searchedArticleNumber: store.invoice.searchedArticleNumber,\r\n searchedArticleDescription: store.invoice.searchedArticleDescription,\r\n invoiceSearchedPeriod: store.invoice.invoiceSearchedPeriod,\r\n invoiceSearchedPeriodFrom: store.invoice.invoiceSearchedPeriodFrom,\r\n invoiceSearchedPeriodTo: store.invoice.invoiceSearchedPeriodTo,\r\n selectedSecondaryAccount: store.user_options.selectedSecondaryAccount,\r\n selectedSoldTo: store.user_options.selectedSoldTos,\r\n accoutType: store.user_options.accountType,\r\n }),\r\n {},\r\n null,\r\n { pure: false }\r\n)(_InvoiceSearch);\r\n","import axios from '../axios';\r\nimport {GET_USER_LIST} from \"../constants/ApiConstants\";\r\nimport {SapAccount} from \"../interfaces/SapAccount\";\r\nimport {User} from \"../interfaces/User\";\r\n\r\nexport function getUserList(status = \"\", profile = \"\", search = \"\") {\r\n if ((status == \"\") && (profile ?? \"\") == \"\" && (search ?? \"\") == \"\") {\r\n return Promise.resolve([]);\r\n }\r\n return axios.get(GET_USER_LIST, {params: {status, profile, search}}).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function getUser(userId) {\r\n return () => {\r\n return axios.get(`/api/users/${userId}`).then((response) => {\r\n return response.data;\r\n });\r\n }\r\n}\r\n\r\nexport function saveUser(user: User) {\r\n // user.use = parseInt(user.userProfileId);\r\n // user.profile = null; // passing a profile object will cause problems on .net side\r\n user.email = user.email.toLowerCase();\r\n if (user.user_id) {\r\n return axios.put(`/api/users/${user.user_id}`, user).then((response) => {\r\n return response.data;\r\n });\r\n } else {\r\n return axios.post('/api/users', user).then((response) => {\r\n return response.data;\r\n });\r\n }\r\n}\r\n\r\n// export function getProfiles() {\r\n// return axios.get('/api/profiles').then((response) => {\r\n// return response.data;\r\n// })\r\n// }\r\n\r\nfunction updateUserSapAccount(userId, account: SapAccount) {\r\n return axios.put(`/api/users/${userId}/accounts/${account.account_id}`, account).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nfunction createUserSapAccount(userId, account: SapAccount) {\r\n return axios.post(`/api/users/${userId}/accounts`, account).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function saveUserSapAccountByInvoice(userId, invoice) {\r\n return axios.post(`/api/users/${userId}/accounts/byinvoice`, invoice)\r\n\r\n}\r\nexport function deleteUserSapAccount(userId, account: SapAccount) {\r\n return axios.delete(`/api/users/${userId}/accounts/${account.account_id}`).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function saveUserSapAccount(userId, account: SapAccount) {\r\n if (account.account_id && account.account_id !== \"\") {\r\n return updateUserSapAccount(userId, account);\r\n }\r\n return createUserSapAccount(userId, account);\r\n}\r\n\r\nexport function getUserSapAccounts(userId) {\r\n return axios.get(`/api/users/${userId}/accounts`).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function getUserByInvite(invite) {\r\n return axios.get(`/api/users/invite/${invite}`).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function getUserByPasswordReset(id) {\r\n return axios.get(`/api/users/password-reset/${id}`).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function completeRegistration(inviteId, password, confirmPassword) {\r\n return axios.post(`/api/token/complete-registration`, {inviteId, password, confirmPassword}).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function passwordResetRequest(requestForm) {\r\n return axios.post(`/api/users/password-reset-request`, requestForm).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function completePasswordReset(id, password, confirmPassword) {\r\n return axios.post(`/api/token/complete-password-reset`, {id, password, confirmPassword}).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function getExclusionList(userId) {\r\n return axios.get(`/api/users/${userId}/exclusions`).then((response) => {\r\n if (response.status === 404) {\r\n throw(\"Cold not find exclusion list.\");\r\n }\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function updateExclusionList(userId, list) {\r\n return axios.put(`/api/users/${userId}/exclusions`, list).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function validateAccount(data) {\r\n return axios.put(`/api/users/account/validate`, data).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function getRegistrationAccount(token: string) {\r\n return axios.post(`/api/token/auto-register/accounts`, { key: token }).then((response) => {\r\n return response.data;\r\n })\r\n}\r\n\r\nexport function getUserAccounts() {\r\n return axios.get(`/api/token/auto-register/accounts`).then((response) => {\r\n return response.data;\r\n })\r\n}\r\n\r\nexport function registerUser(form) {\r\n let request={\r\n email: form.email,\r\n login: form.email,\r\n user_role: \"user\",\r\n first_name: form.first_name,\r\n last_name: form.last_name,\r\n Status: \"active\",\r\n Profile:\"dummy\",\r\n primary_account_type_id:\"Payer\",\r\n company: form.company,\r\n password: form.password,\r\n verify_password: form.verify_password,\r\n token: sessionStorage.getItem(\"_registerToken\")\r\n }\r\n return axios.post(`/api/token/auto-register/user`, request).then((response) => {\r\n \r\n return response.data;\r\n });\r\n}\r\n\r\nexport function confirmAccount(token: string) {\r\n return axios.post(`/api/token/auto-register/user-confirm/${token}`, {}).then((response) => {\r\n return response.data;\r\n })\r\n}\r\n\r\nexport function deleteUser(userId: number | string) {\r\n return axios.delete(`/api/users/${userId}`, {}).then((response) => {\r\n return response.data;\r\n })\r\n}\r\n\r\nexport function resendConfirmation(email) {\r\n return axios.put(`/api/token/auto-register/resend-confirmation`, {}).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n","import axios from \"../axios\";\r\n\r\nexport function submitRegistration(registration) {\r\n return axios.post(`/api/register`, registration).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function getRegistrationRequests(registration) {\r\n return axios.get(`/api/register`).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function getRegistrationRequestById(id) {\r\n return axios.get(`/api/register/${id}`).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n\r\nexport function markRegistrationCompleted(id) {\r\n return axios.post(`/api/register/${id}/completed`, {}).then((response) => {\r\n return response.data;\r\n });\r\n}\r\n","import React, {useEffect, useState} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {getUserCustomers, ResetPassword as ResetPasswordMethod} from '../../actions/UserActions';\r\nimport LinkedSapAccounts from \"../user-management/LinkedSapAccounts\";\r\nimport {\r\n deleteUserSapAccount,\r\n getExclusionList,\r\n getUserSapAccounts,\r\n updateExclusionList\r\n} from \"../../requests/UserRequests\";\r\nimport ExclusionList from \"../user-management/exclusions/ExclusionList\";\r\nimport {canManageOwnSAPAccounts} from \"../../selectors/PermissionSelectors\";\r\nimport {FormattedMessage, useIntl} from 'react-intl';\r\n\r\nlet errorClass = valid => (valid ? '' : 'invalid');\r\n\r\nfunction AccountSettingsPage(props:any){\r\n const t = useIntl();\r\n\r\n let [currentPassword, setCurrentPassword] = useState('');\r\n let [newPassword, setNewPassword] = useState('');\r\n let [confirmNewPassword, setConfirmNewPassword] = useState('');\r\n let [currentPasswordValid, setCurrentPasswordValid] = useState(true);\r\n let [newPasswordValid, setNewPasswordValid] = useState(true);\r\n let [confirmNewPasswordValid, setConfirmNewPasswordValid] = useState(true);\r\n \r\n let onResetClick = () => {\r\n if (validateFields()) {\r\n props.ResetPasswordMethod(currentPassword, newPassword, confirmNewPassword);\r\n }\r\n }\r\n\r\n let validateFields = () => {\r\n let isModelStateValid = false;\r\n setCurrentPasswordValid(currentPassword !== '');\r\n setNewPasswordValid(newPassword !== '');\r\n setConfirmNewPasswordValid(confirmNewPassword !== '');\r\n\r\n if (currentPassword !== '' && newPassword !== '' && confirmNewPassword !== '') {\r\n isModelStateValid = true;\r\n }\r\n return isModelStateValid;\r\n };\r\n\r\n let passwordChange = (e) => {\r\n if (e.currentTarget.name === 'currentPassword') {\r\n setCurrentPassword(e.target.value);\r\n setCurrentPasswordValid(e.target.value !== '');\r\n }\r\n if (e.currentTarget.name === 'newPassword') {\r\n setNewPassword(e.target.value);\r\n setNewPasswordValid(e.target.value !== '');\r\n }\r\n if (e.currentTarget.name === 'confirmNewPassword') {\r\n setConfirmNewPassword(e.target.value);\r\n setConfirmNewPasswordValid(e.target.value !== '');\r\n }\r\n };\r\n \r\n return (\r\n <div className=\"container\">\r\n <div className={\"row\"}>\r\n <div className={\"col\"}>\r\n <div className={\"card\"}>\r\n <div className={\"row\"}>\r\n <div className=\"col-lg-4 col-md-6 col-sm-12\">\r\n <h5><FormattedMessage id={\"settings.account.reset_password\"}/></h5>\r\n <div className=\"form-group\">\r\n <label className=\"col-form-label-sm text-secondary\" htmlFor=\"first_name\"><FormattedMessage id={\"settings.account.reset_password_confirm_password\"}/></label>\r\n <input type=\"password\" className={`form-control ${errorClass(currentPasswordValid)}`}\r\n name=\"currentPassword\" placeholder={t.formatMessage({id:'settings.account.reset_password_confirm_password_placeholder'})} onChange={passwordChange}/>\r\n {currentPasswordValid ? '' : <h6 className=\"invalid-Text\">\r\n <small>Required.</small>\r\n </h6>}\r\n </div>\r\n <div className=\"form-group\">\r\n <label className=\"col-form-label-sm text-secondary\" htmlFor=\"lastName\"><FormattedMessage id={\"settings.account.reset_password_new_password\"}/></label>\r\n <input type=\"password\" className={`form-control ${errorClass(newPasswordValid)}`}\r\n name=\"newPassword\"\r\n placeholder={t.formatMessage({id:'settings.account.reset_password_new_password_placeholder'})}\r\n onChange={passwordChange}/>\r\n {newPasswordValid ? '' : <h6 className=\"invalid-Text\">\r\n <small>Required.</small>\r\n </h6>}\r\n </div>\r\n <div className=\"form-group\">\r\n <input type=\"password\" className={`form-control ${errorClass(confirmNewPasswordValid)}`}\r\n name=\"confirmNewPassword\" placeholder={t.formatMessage({id: 'settings.account.reset_password_new_password_confirm_placeholder'})} onChange={passwordChange}/>\r\n {confirmNewPasswordValid ? '' : <h6 className=\"invalid-Text\">\r\n <small>Required.</small>\r\n </h6>}\r\n </div>\r\n <div className=\"form-group text-center\">\r\n <button className=\"btn btn-primary buttonColor buttonsize\" \r\n onClick={onResetClick}>\r\n {t.formatMessage({id: 'settings.account.reset_password_button'})}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>((store, props) => ({\r\n userId: store.default.currentUser.user_id,\r\n primaryAccountTypeId: store.default.currentUser.PrimaryAccountTypeId,\r\n accountTypes: store.default.accountTypes,\r\n canManageOwnSAPAccounts: canManageOwnSAPAccounts(store),\r\n}), {\r\n getUserCustomers,\r\n ResetPasswordMethod,\r\n})(AccountSettingsPage);\r\n","import React, { Component, useEffect, useState } from 'react';\r\nimport { connect, useSelector } from 'react-redux';\r\nimport PayerSelect from \"../invoice/PayerSelect\";\r\nimport ManagePaymentMethods from \"./manage-payment-methods/ManagePaymentMethods\";\r\nimport * as appConstants from \"../../constants/ApplicationConstants\";\r\nimport { AccountType } from \"../../interfaces/Accounts\";\r\nimport { FinalizePaymentProcess } from \"./manage-payment-methods/FinalizePaymentProcess\";\r\nimport { FormattedMessage, useIntl } from \"react-intl\";\r\nimport { RootState } from '../../reducers/RootReducer';\r\nimport { getMessageForPaymentDisable } from '../../actions/CommonActions';\r\nimport { CurrencyString } from '../../common/CurrencyDisplay';\r\nimport { getMaximumPaymentAllowed,getECheckMaximumPaymentAllowed } from '../../requests/ConfigRequests';\r\nimport { useCurrencyKey } from '../../selectors/ConfigSelectors';\r\n\r\n//const language;\r\n\r\nconst MaxPaymentMessage = (type) => {\r\n\r\n const intl = useIntl();\r\n let [maxPaymentAllowed, setmaxPaymentAllowed] = useState(0);\r\n let [maxECheckPaymentAllowed, setmaxECheckPaymentAllowed] = useState(0);\r\n\r\n let currencyKey = useSelector<RootState, string>(state => state.default.selectedCurrencyOptionValue);\r\n const currency_key = useCurrencyKey();\r\n if (currencyKey === '') {\r\n currencyKey = currency_key;\r\n }\r\n\r\n useEffect(() => {\r\n getMaximumPaymentAllowed().then(_ => setmaxPaymentAllowed(_))\r\n getECheckMaximumPaymentAllowed().then(_=> setmaxECheckPaymentAllowed(_))\r\n }, []);\r\n return <div className=\"row\">\r\n <div className=\"col\">\r\n \r\n {\r\n \r\n maxPaymentAllowed > 0 && type.selectedPaymentType === 'CC' &&\r\n <p className=\"text-danger\"><FormattedMessage id={\"payment_methods.maximum_card_payment_error\"} />{' '}{CurrencyString(maxPaymentAllowed, currencyKey, intl)}</p>\r\n\r\n }\r\n\r\n {\r\n maxECheckPaymentAllowed > 0 && type.selectedPaymentType === 'EC' &&\r\n <p className=\"text-danger\"><FormattedMessage id={\"payment_methods.maximum_check_payment_error\"} />{' '}{CurrencyString(maxECheckPaymentAllowed, currencyKey, intl)}</p>\r\n\r\n }\r\n </div>\r\n </div>\r\n};\r\nexport class AccountPaymentPage extends Component<any, any> {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { SelectedPaymentType: 'CC' }; \r\n }\r\n\r\n update(type) {\r\n this.setState({ SelectedPaymentType: type })\r\n\r\n }\r\n render() {\r\n const isSoldToAccount = this.props.accountType === AccountType.SoldTo;\r\n let isPaymentDisable = (sessionStorage.getItem(\"isPaymentDisable\")?.toString() === \"true\") ? true : false;\r\n var paymentDisableMessage;\r\n var paymentDisableKey = (sessionStorage.getItem(\"Language\")?.toString() + \"_paymentDisableMessageText\".trim());\r\n paymentDisableMessage = getMessageForPaymentDisable(paymentDisableKey);\r\n\r\n\r\n let MessageForPaymentDisable = sessionStorage.getItem(\"MessageForPaymentDisable\")!?.toString();\r\n return <div className={'container'}>\r\n {isPaymentDisable && <div\r\n className={\"col-12 col-md d-flex justify-content-center align-items-baseline\"}>\r\n <span className={\"invoice-currency-warning\"}>\r\n <label>{paymentDisableMessage}</label>\r\n </span>\r\n </div>}\r\n <br></br>\r\n <FinalizePaymentProcess />\r\n <div className=\"row mb-4\">\r\n <div className=\"col-md-6\">\r\n {isSoldToAccount ? <PayerSelect name={'payer_option'} /> : ''}\r\n </div>\r\n </div>\r\n <div className=\"card\">\r\n <ManagePaymentMethods selectedType={this.state.SelectedPaymentType} updateState={this.update.bind(this)} alwaysSaveOnFile={true} />\r\n </div>\r\n {/* <MaxPaymentMessage selectedPaymentType={this.state.SelectedPaymentType} /> */}\r\n\r\n </div>\r\n }\r\n}\r\n\r\n\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n accountType: state.user_options.accountType,\r\n }\r\n})(AccountPaymentPage);\r\n","import React, { Component, useEffect, useState } from \"react\";\r\nimport { getUserCustomers, setAccountType } from \"../../actions/UserActions\";\r\nimport { connect, useDispatch } from \"react-redux\";\r\nimport { clearSessionPaymentMethods } from \"../../reducers/PaymentReducer\";\r\nimport { canImpersonate } from \"../../selectors/PermissionSelectors\";\r\nimport { User } from \"../../interfaces/User\";\r\nimport * as types from '../../constants/ActionTypes';\r\nimport {\r\n setsearchedinvoiceStatus, setsearchedinvoiceDueDate, setsearchedinvoiceType,\r\n setsearchedInvoiceNumber, setsearchedArticleNumber, setsearchedArticleDescription,\r\n setinvoiceSearchedPeriod, setinvoiceSearchedPeriodFromTo, setsearchedInvoices, payerInvoiceDueAmount\r\n} from \"../../actions/InvoiceActions\";\r\nimport { updateState } from \"../../actions/CommonActions\";\r\ninterface UserImpersonateProps {\r\n impersonatedUserId?: string,\r\n user: User,\r\n currentUser: User,\r\n canImpersonate: boolean,\r\n getUserCustomers: Function,\r\n clearSessionPaymentMethods: Function,\r\n setAccountType: Function,\r\n setsearchedInvoiceNumber: Function,\r\n setsearchedinvoiceDueDate: Function,\r\n setinvoiceSearchedPeriodFromTo: Function,\r\n setsearchedinvoiceStatus: Function,\r\n setinvoiceSearchedPeriod: Function,\r\n setsearchedInvoices: Function,\r\n payerInvoiceDueAmount: Function,\r\n\r\n}\r\nfunction UserImpersonate(props: UserImpersonateProps) {\r\n const dispatch = useDispatch();\r\n\r\n const [isChecked, setIsChecked] = useState(false);\r\n useEffect(() => {\r\n const impersonatedUserId = props.impersonatedUserId;\r\n if (impersonatedUserId && impersonatedUserId === props.user.user_id) {\r\n setIsChecked(true);\r\n } else {\r\n setIsChecked(false);\r\n }\r\n }, [props.impersonatedUserId]);\r\n\r\n function onCheckClick() {\r\n let name = props.user.first_name + ' '+ props.user.last_name;\r\n if (props.user.user_id !== props.impersonatedUserId) {\r\n props.getUserCustomers(props.user.user_id, true);\r\n props.setAccountType(props.user.primary_account_type_id);\r\n props.setsearchedInvoices([]);\r\n props.setsearchedInvoiceNumber('');\r\n props.setsearchedinvoiceDueDate('', '');\r\n props.setinvoiceSearchedPeriodFromTo('', '');\r\n props.setsearchedinvoiceStatus('03');\r\n props.setinvoiceSearchedPeriod(\"all\");\r\n props.payerInvoiceDueAmount(0);\r\n updateState(dispatch, types.UPDATE_IMPERSONATE_USER_NAME, name);\r\n \r\n // setIsChecked(true);\r\n } else {\r\n props.getUserCustomers(\"\", true);\r\n props.setAccountType(props.currentUser.primary_account_type_id);\r\n props.setsearchedInvoices([]);\r\n props.setsearchedInvoiceNumber('');\r\n props.setsearchedinvoiceDueDate('', '');\r\n props.setinvoiceSearchedPeriodFromTo('', '');\r\n props.setsearchedinvoiceStatus('03');\r\n props.setinvoiceSearchedPeriod(\"all\");\r\n updateState(dispatch, types.UPDATE_IMPERSONATE_USER_NAME, '');\r\n\r\n // setIsChecked(false);\r\n }\r\n props.clearSessionPaymentMethods();\r\n };\r\n return (\r\n \r\n <div>\r\n {props.canImpersonate && <input\r\n className=\"rounded-circle\"\r\n type=\"checkbox\"\r\n onChange={onCheckClick}\r\n checked={isChecked}\r\n id={props.user.user_id}\r\n name={props.user.user_id}\r\n // disabled={user.accounts.length <= 0}\r\n />}\r\n </div>\r\n );\r\n}\r\nexport default connect<any, any, any, any>((state, props) => ({\r\n impersonatedUserId: state.user_options.impersonatedUserId,\r\n currentUser: state.default.currentUser,\r\n canImpersonate: canImpersonate(state)\r\n}), {\r\n getUserCustomers,\r\n clearSessionPaymentMethods,\r\n setAccountType,\r\n setsearchedInvoiceNumber,\r\n setsearchedinvoiceDueDate,\r\n setinvoiceSearchedPeriodFromTo,\r\n setsearchedinvoiceStatus,\r\n setinvoiceSearchedPeriod,\r\n setsearchedInvoices,\r\n payerInvoiceDueAmount\r\n})(UserImpersonate);","import React, { Component } from 'react';\r\n//import { BootstrapTable, TableHeaderColumn } from \"react-bootstrap-table\";\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport UserImpersonate from './UserImpersonate';\r\nimport { Link } from 'react-router-dom';\r\nimport { canImpersonate, canManageUsers } from \"../../selectors/PermissionSelectors\";\r\nimport { connect, useDispatch } from \"react-redux\";\r\nimport { User } from \"../../interfaces/User\";\r\nimport { useIntl } from \"react-intl\";\r\nimport * as types from '../../constants/ActionTypes';\r\nimport {\r\n updateState,\r\n requestErrored,\r\n loginFailed\r\n} from '../../actions/CommonActions';\r\n\r\nfunction formatColumn(cell) {\r\n if (cell) {\r\n return (`${''}${cell}${''}`);\r\n\r\n // return (`${'<div class=\"truncate\"><span>'}${cell}${'</span></div>'}`);\r\n }\r\n}\r\n\r\nfunction impersonateFormatter(cell, row) { // String example\r\n return <UserImpersonate user={row} />;\r\n};\r\n\r\nfunction formatStatusColumn(cell) {\r\n return <_StatusDisplay status={cell} />;\r\n}\r\n\r\nfunction _StatusDisplay(props: { status: string }) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n if (props.status.toLowerCase() === 'active') {\r\n return (<span style={{ color: \"#00b700\" }}>{f(\"edit_user.status.active\")}</span>);\r\n }\r\n if (props.status.toLowerCase() === 'deactive') {\r\n return (<span style={{ color: \"red\" }}>{f(\"edit_user.status.deactive\")}</span>);\r\n }\r\n if (props.status.toLowerCase() === 'locked') {\r\n return (<span style={{ color: \"red\" }}>{f(\"edit_user.status.locked\")}</span>);\r\n }\r\n if (props.status.toLowerCase() === 'waiting-confirmation') {\r\n return (<span style={{ color: \"red\" }}>{f(\"edit_user.status.waiting_confirmation\")}</span>);\r\n }\r\n return <span />;\r\n}\r\n\r\nfunction nameColumn(cell, row) {\r\n\r\n if (row.first_name || row.last_name) { \r\n return (`${''}${row.first_name} ${row.last_name}${''}`);\r\n }\r\n}\r\n\r\nfunction profileColumn(cell, row) {\r\n return <_ProfileLabel status={cell} />\r\n}\r\n\r\nfunction _ProfileLabel(props: { status: string }) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n\r\n\r\n if (props.status === 'SoldTo') {\r\n return (<span>{f(\"edit_user.primary_account_type.sold_to\")}</span>);\r\n }\r\n if (props.status === 'Payer') {\r\n return (<span>{f(\"edit_user.primary_account_type.payer\")}</span>);\r\n }\r\n return <span />;\r\n}\r\n\r\n\r\nfunction accountsColumn(cell, row) {\r\n let accountNumbers: string[] = [];\r\n row.accounts.forEach((a) => accountNumbers.push(a.primaryAcct));\r\n if (accountNumbers.length > 0) {\r\n return (`${'<div class=\"truncate\"><span>'}${accountNumbers.join(\", \")}${'</span></div>'}`);\r\n }\r\n}\r\n\r\nfunction UserList(props) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n\r\n function userName(cell, row: User) {\r\n if (cell) {\r\n if (props.canManageUsers) {\r\n return <Link to={`/settings/users/${row.user_id}`}>{cell}</Link>;\r\n } else {\r\n return cell;\r\n }\r\n }\r\n }\r\n const columns = [{\r\n headerClasses: \"column-header\",\r\n dataField: 'login',\r\n text: f(\"manage_users.table.impersonate\"),\r\n formatter: impersonateFormatter,\r\n hidden: !props.canImpersonate,\r\n align: \"center\",\r\n headerAlign: 'center',\r\n style: { width: '155px' }\r\n }, {\r\n headerClasses: \"column-header\",\r\n dataField: 'login',\r\n text: f(\"manage_users.table.user_id\"),\r\n formatter: userName,\r\n align: \"center\",\r\n headerAlign: 'center',\r\n style: { width: '55px' }\r\n\r\n }, {\r\n headerClasses: \"column-header\",\r\n text: f(\"manage_users.table.name\"),\r\n formatter: nameColumn,\r\n classes: \"truncate\",\r\n align: \"center\",\r\n headerAlign: 'center'\r\n\r\n }, {\r\n headerClasses: \"column-header\",\r\n dataField: 'company',\r\n text: f(\"manage_users.table.company\"),\r\n formatter: formatColumn,\r\n align: \"center\",\r\n headerAlign: 'center'\r\n\r\n }, {\r\n headerClasses: \"column-header\",\r\n dataField: 'email',\r\n text: f(\"manage_users.table.email\"),\r\n formatter: formatColumn,\r\n align: \"center\",\r\n headerAlign: 'center'\r\n\r\n }, {\r\n headerClasses: \"column-header\",\r\n dataField: 'status',\r\n text: f(\"manage_users.table.status\"),\r\n formatter: formatStatusColumn,\r\n align: \"center\",\r\n headerAlign: 'center'\r\n\r\n }, {\r\n headerClasses: \"column-header\",\r\n dataField: 'primary_account_type_id',\r\n text: f(\"manage_users.table.profile\"),\r\n formatter: profileColumn,\r\n align: \"center\",\r\n headerAlign: 'center'\r\n\r\n }];\r\n\r\n const defaultSorted = [{\r\n dataField: 'login',\r\n order: 'desc'\r\n }];\r\n const defaultEmptyDataMessage = () => {\r\n return \"There is no data to display\";\r\n }\r\n return (\r\n <div>\r\n\r\n <BootstrapTable\r\n bootstrap4\r\n keyField=\"login\"\r\n data={props.users}\r\n noDataIndication={defaultEmptyDataMessage}\r\n columns={columns}\r\n headerClasses=\"column-header\"\r\n defaultSorted={defaultSorted}\r\n bodyClasses=\"wa-bootstrap-small-text\"\r\n // wrapperClasses=\"wa-bootstrap-table-container custom-table-header\"\r\n classes={\r\n \"wa-bootstrap-table-container custom-table-header\"\r\n }\r\n />\r\n {/* \r\n <BootstrapTable data={props.users} headerStyle={{background: '#DFECF5'}}\r\n tableContainerClass={'wa-bootstrap-table-container'}\r\n tableBodyClass='wa-bootstrap-small-text'>\r\n {props.canImpersonate &&\r\n <TableHeaderColumn width=\"50\" className=\"headerColumnColor\" dataAlign=\"center\" dataField=\"login\"\r\n dataFormat={impersonateFormatter}>\r\n {f(\"manage_users.table.impersonate\")}\r\n </TableHeaderColumn>}\r\n <TableHeaderColumn width=\"65\" className=\"headerColumnColor\" dataAlign=\"center\" dataField=\"login\"\r\n dataFormat={userName} isKey>\r\n {f(\"manage_users.table.user_id\")}\r\n </TableHeaderColumn>\r\n <TableHeaderColumn width=\"55\" className=\"headerColumnColor\" dataAlign=\"center\"\r\n dataFormat={nameColumn}>\r\n {f(\"manage_users.table.name\")}\r\n </TableHeaderColumn>\r\n <TableHeaderColumn width=\"55\" className=\"headerColumnColor\" dataAlign=\"center\" dataField=\"company\"\r\n dataFormat={formatColumn}>\r\n {f(\"manage_users.table.company\")}\r\n </TableHeaderColumn>\r\n <TableHeaderColumn width=\"55\" className=\"headerColumnColor\" dataAlign=\"center\" dataField=\"email\"\r\n dataFormat={formatColumn}>\r\n {f(\"manage_users.table.email\")}\r\n </TableHeaderColumn>\r\n <TableHeaderColumn width=\"55\" className=\"headerColumnColor\" dataAlign=\"center\" dataField=\"status\"\r\n dataFormat={formatStatusColumn}>\r\n {f(\"manage_users.table.status\")}\r\n </TableHeaderColumn>\r\n <TableHeaderColumn width=\"55\" className=\"headerColumnColor\" dataAlign=\"center\" dataField={\"primary_account_type_id\"}\r\n dataFormat={profileColumn}>\r\n {f(\"manage_users.table.profile\")}\r\n </TableHeaderColumn>\r\n \r\n </BootstrapTable> */}\r\n </div>\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => ({\r\n canManageUsers: canManageUsers(state),\r\n canImpersonate: canImpersonate(state)\r\n}))(UserList);\r\n","import React, {useEffect, useState} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport UserList from \"./UserList\";\r\nimport {Link} from \"react-router-dom\";\r\nimport * as _ from 'lodash';\r\nimport {canManageUsers, canViewUsers} from \"../../selectors/PermissionSelectors\";\r\nimport {FormattedMessage, useIntl} from \"react-intl\";\r\n\r\nfunction ListUsersPage(props) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({id: id});\r\n \r\n let [users, setUsers] = useState<any[]>([]);\r\n let [status, setStatus] = useState('all');\r\n let [search, setSearch] = useState('');\r\n let [profile] = useState(null);\r\n\r\n let onSearchChangeDebounce = _.debounce((value) => {\r\n setSearch(value);\r\n }, 400);\r\n\r\n useEffect(getUsers, [status, search, profile]);\r\n\r\n function getUsers() {\r\n props.getUsers(status, profile, search).then((new_users) => {\r\n setUsers(new_users);\r\n });\r\n }\r\n\r\n function statusFilterChange(event) {\r\n setStatus(event.target.value);\r\n }\r\n\r\n function onSearchChange(event) {\r\n onSearchChangeDebounce(event.target.value);\r\n }\r\n\r\n return (<div className={\"container\"}>\r\n {\r\n (props.canViewUsers) ?\r\n <div>\r\n <div className={\"row\"}>\r\n <div className=\"col-12 col-md-3 d-flex\">\r\n <input type={\"text\"} className={\"form-control\"}\r\n placeholder={f(\"manage_users.search_placeholder\")}\r\n onChange={onSearchChange}/>\r\n <div className=\"search ml-2 mr-1\">\r\n <span className=\"fas fa-search fa-lg\"/>\r\n </div>\r\n </div>\r\n <div className=\"col-12 col-md-3\">\r\n <div className=\"customSelect\">\r\n <select onChange={statusFilterChange} value={status} className={\"form-control\"}>\r\n <option value=\"all\">{f(\"manage_users.status_filter.all\")}</option>\r\n <option value=\"active\">{f(\"manage_users.status_filter.active\")}</option>\r\n <option value=\"deactive\">{f(\"manage_users.status_filter.deactive\")}</option>\r\n <option value=\"locked\">{f(\"manage_users.status_filter.locked\")}</option>\r\n <option value=\"waiting-confirmation\">{f(\"manage_users.status_filter.waiting_confirmation\")}</option>\r\n </select>\r\n <span className=\"select-arrow\">\r\n <i className=\"fas fa-chevron-down\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <div className=\"col-12 col-md-3\">\r\n </div>\r\n <div className=\"col-12 col-md-2\">\r\n {props.canManageUsers && <Link to={\"/settings/users/add\"}>\r\n <button className=\"btn btn-primary buttonColor buttonsize\">{f(\"manage_users.add_user_button\")}</button>\r\n </Link>}\r\n </div>\r\n <div className=\"col-12 col-md-1 d-flex align-items-center\">\r\n <span><FormattedMessage id={\"manage_users.user_count_label\"} values={{count: users.length}}/></span>\r\n </div>\r\n </div>\r\n <div className={\"row mt-4\"}>\r\n <div className={\"col-12\"}>\r\n <UserList users={users}/>\r\n </div>\r\n </div>\r\n </div>\r\n : null\r\n }\r\n </div>)\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => ({\r\n canManageUsers: canManageUsers(state),\r\n canViewUsers: canViewUsers(state),\r\n}))(ListUsersPage);\r\n","import React, { useEffect, useState } from 'react';\r\nimport {Formik} from \"formik\";\r\nimport {BootstrapError, BootstrapField} from \"../../helpers/Field\";\r\nimport * as yup from 'yup';\r\nimport {toast} from 'react-toastify';\r\nimport moment from 'moment';\r\nimport {FormattedDate, IntlShape, useIntl} from \"react-intl\";\r\nimport {User} from \"../../interfaces/User\";\r\nimport {isStringNotEmptyOrNull} from \"../../utils\";\r\n\r\nlet schema = (intl: IntlShape) => {\r\n const f = id => intl.formatMessage({id: id});\r\n return yup.object().shape({\r\n login: yup.string().required(f(\"edit_user.user_id_required\")),\r\n first_name: yup.string().required(f(\"edit_user.first_name_required\")),\r\n last_name: yup.string().required(f(\"edit_user.last_name_required\")),\r\n company: yup.string().required(f(\"edit_user.company_required\")),\r\n email: yup.string().email().required(f(\"edit_user.email_required\")),\r\n password: yup.string(),\r\n status: yup.string().required(f(\"edit_user.status_required\")),\r\n primary_account_type_id: yup.string().required(f(\"edit_user.primary_account_type_required\")),\r\n user_role: yup.string().required(f(\"edit_user.user_role_required\")),\r\n });\r\n};\r\n\r\n\r\n\r\nfunction ManageUserForm(props: {user: User, save: Function, primaryAccountTypes: any}) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({id: id});\r\n \r\n function onSubmit(values, bag) {\r\n bag.setSubmitting(true);\r\n props.save(values).then((user) => {\r\n // this.setState({user: user});\r\n toast.success(f(\"edit_user.save\"), {position: toast.POSITION.TOP_RIGHT});\r\n bag.setSubmitting(false);\r\n }).catch(error => {\r\n if (error.response.data && error.response.data.message) {\r\n toast.warn(error.response.data.message, {position: toast.POSITION.TOP_RIGHT});\r\n bag.setSubmitting(false);\r\n }\r\n });\r\n }\r\n\r\n const createdDate = props?.user?.created_date_date ? new Date(props?.user?.created_date_date) : null;\r\n const lastLoginDate = props?.user?.last_login ? new Date(props?.user?.last_login) : null;\r\n const lastPasswordChange = props?.user?.last_password_change ? new Date(props?.user?.last_password_change) : null;\r\n \r\n const readonly = isStringNotEmptyOrNull(props?.user?.third_party_id);\r\n const [Checked, setChecked] = useState(false);\r\n const [passwordValue, setpasswordValue] = useState(false); \r\n function handleChange(e) {\r\n e.preventDefault();\r\n if (e.target.value != '') {\r\n setpasswordValue(true); \r\n }\r\n else {\r\n setpasswordValue(false);\r\n } \r\n }\r\n function checkboxSelectChange(e)\r\n {\r\n if (e.target.checked) {\r\n setChecked(true);\r\n }\r\n else {\r\n setChecked(false);\r\n }\r\n\r\n }\r\n return (\r\n <Formik\r\n initialValues={props.user}\r\n enableReinitialize={true}\r\n validationSchema={schema(intl)}\r\n onSubmit={onSubmit}\r\n render={(formProps) =>\r\n <form autoComplete={\"new-user-form\"} onSubmit={formProps.handleSubmit}>\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <div className={\"row no-gutters mb-2\"}>\r\n <h5 className={\"col-6\"}>{f(\"edit_user.user_info_title\")}</h5>\r\n <div className={\"col-6 text-right\"}>\r\n <button className=\"btn btn-primary buttonsize buttonColor\" type={\"submit\"} disabled={readonly || (Checked == true && passwordValue == false)}>{f(\"edit_user.save_user_button\")}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n < div className=\"row\">\r\n <div className=\"col-12 col-md-4\">\r\n <div className=\"form-group row no-gutters\">\r\n <label className={\"col-4 col-form-label wa-label\"}>{f(\"edit_user.user_id_label\")}</label>\r\n <div className=\"col-8\">\r\n <BootstrapField type=\"text\" name=\"login\" placeholder={f(\"edit_user.user_id_label\")} disabled={readonly}/>\r\n <BootstrapError name=\"login\"/>\r\n </div>\r\n </div>\r\n <div className=\"form-group row no-gutters\">\r\n <label className={\"col-4 col-form-label wa-label\"}>{f(\"edit_user.first_name_label\")}</label>\r\n <div className=\"col-8\">\r\n <BootstrapField type=\"text\" name=\"first_name\" placeholder={f(\"edit_user.first_name_label\")} disabled={readonly}/>\r\n <BootstrapError name=\"first_name\"/>\r\n </div>\r\n </div>\r\n <div className=\"form-group row no-gutters\">\r\n <label className={\"col-4 col-form-label wa-label\"}>{f(\"edit_user.last_name_label\")}</label>\r\n <div className=\"col-8\">\r\n <BootstrapField type=\"text\" name=\"last_name\" placeholder={f(\"edit_user.last_name_label\")} disabled={readonly}/>\r\n <BootstrapError name=\"last_name\"/>\r\n </div>\r\n </div>\r\n <div className=\"form-group row no-gutters\">\r\n <label className={\"col-4 col-form-label wa-label\"}>{f(\"edit_user.company_label\")}</label>\r\n <div className=\"col-8\">\r\n <BootstrapField type=\"text\" name=\"company\" placeholder={f(\"edit_user.company_label\")} disabled={readonly}/>\r\n <BootstrapError name=\"company\"/>\r\n </div>\r\n </div>\r\n <div className=\"form-group row no-gutters\">\r\n <label className={\"col-4 col-form-label wa-label\"}>{f(\"edit_user.email_label\")}</label>\r\n <div className=\"col-8\">\r\n <BootstrapField type=\"text\" name=\"email\" placeholder={f(\"edit_user.email_label\")} disabled={readonly}/>\r\n <BootstrapError name=\"email\"/>\r\n </div>\r\n </div>\r\n <div className={\"form-group form-check\"}>\r\n <BootstrapField id=\"setPasswordForTheUser\" name=\"setPasswordForTheUser\"\r\n placeholder={f(\"configuration.Users-Set-password\")}\r\n type={\"checkbox\"} checked={Checked} onChange = { checkboxSelectChange } />\r\n <label htmlFor=\"setPasswordForTheUser\"\r\n className=\"form-check-label\">{f(\"configuration.Users-Set-password\")}</label>\r\n </div>\r\n {Checked && <div className=\"form-group row no-gutters\">\r\n <label className={\"col-4 col-form-label wa-label\"}>{f(\"edit_user.password_label\")}</label>\r\n <div className=\"col-8\">\r\n <BootstrapField type=\"password\" name=\"password\" onKeyUp={handleChange} placeholder={formProps.values.email == \"\" ? f(\"edit_user.password_label\") : \"******\"} disabled={readonly} />\r\n <BootstrapError name=\"password\"/>\r\n </div>\r\n </div>}\r\n </div>\r\n <div className=\"col-12 col-md-4\">\r\n <div className=\"form-group row no-gutters\">\r\n <label className={\"col-4 col-form-label wa-label\"}>{f(\"edit_user.status_label\")}</label>\r\n <div className=\"col-8\">\r\n <BootstrapField component=\"select\" name=\"status\" placeholder={f(\"edit_user.status_label\")}\r\n value={formProps.values.status} disabled={readonly}>\r\n <option value=\"active\">{f(\"edit_user.status.active\")}</option>\r\n <option value=\"deactivated\">{f(\"edit_user.status.deactivated\")}</option>\r\n <option value=\"waiting-confirmation\">{f(\"edit_user.status.waiting_confirmation\")}</option>\r\n <option value=\"locked\">{f(\"edit_user.status.locked\")}</option>\r\n </BootstrapField>\r\n <BootstrapError name=\"status\"/>\r\n </div>\r\n </div>\r\n <div className=\"form-group row no-gutters\">\r\n <label className={\"col-4 col-form-label wa-label\"}>{f(\"edit_user.primary_account_type_label\")}</label>\r\n <div className=\"col-8\">\r\n <BootstrapField component=\"select\" name=\"primary_account_type_id\"\r\n placeholder={f(\"edit_user.primary_account_type_label\")}\r\n value={formProps.values.primary_account_type_id} disabled={readonly}>\r\n <option value=\"\">{f(\"edit_user.primary_account_type.select\")}</option>\r\n <option value=\"SoldTo\">{f(\"edit_user.primary_account_type.sold_to\")}</option>\r\n <option value=\"Payer\">{f(\"edit_user.primary_account_type.payer\")}</option>\r\n </BootstrapField>\r\n <BootstrapError name=\"primary_account_type_id\"/>\r\n </div>\r\n </div>\r\n <div className=\"form-group row no-gutters\">\r\n <label className={\"col-4 col-form-label wa-label\"}>{f(\"edit_user.user_role_label\")}</label>\r\n <div className=\"col-8\">\r\n <BootstrapField component=\"select\" name=\"user_role\" placeholder={f(\"edit_user.user_role_label\")} disabled={readonly}>\r\n <option value=\"\">{f(\"edit_user.user_role.select\")}</option>\r\n <option value=\"admin\">{f(\"edit_user.user_role.admin\")}</option>\r\n <option value=\"manager\">{f(\"edit_user.user_role.manager\")}</option>\r\n <option value=\"internal\">{f(\"edit_user.user_role.internal\")}</option>\r\n <option value=\"user\">{f(\"edit_user.user_role.user\")}</option>\r\n </BootstrapField>\r\n <BootstrapError name=\"user_role\"/>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-12 col-md-4\">\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-12\">\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-6 wa-label\">{f(\"edit_user.created_date_label\")}</div>\r\n <div className=\"col-6\">\r\n {createdDate && <FormattedDate value={createdDate}/>}\r\n </div>\r\n </div>\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-6 wa-label\">{f(\"edit_user.last_login_label\")}</div>\r\n <div className=\"col-6\">\r\n {lastLoginDate && <FormattedDate value={lastLoginDate}/>}\r\n \r\n </div>\r\n </div>\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-6 wa-label\">{f(\"edit_user.login_count_label\")}</div>\r\n <div className=\"col-6\"><span>{props.user.num_logins}</span></div>\r\n </div>\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-6 wa-label\">{f(\"edit_user.last_password_change_label\")}</div>\r\n <div className=\"col-6\">\r\n {lastPasswordChange && <FormattedDate value={lastPasswordChange}/>}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n }/>\r\n );\r\n}\r\n\r\nexport default ManageUserForm;\r\n","import React from 'react';\r\nimport { Formik } from 'formik';\r\nimport * as yup from 'yup';\r\nimport { connect } from 'react-redux';\r\nimport { useIntl, IntlShape } from 'react-intl';\r\nimport { BootstrapField, BootstrapError } from '../../helpers/Field';\r\n\r\nfunction schema(t: IntlShape) {\r\n return yup.object().shape({\r\n primary_account: yup.string()\r\n .matches(/^[a-zA-Z0-9]*$/, t.formatMessage({ id: \"errors.invalid_characters\" }))\r\n .required(t.formatMessage({ id: \"errors.required\" })),\r\n account_type: yup.string()\r\n .required(t.formatMessage({ id: \"errors.required\" })),\r\n sales_organization: yup.string()\r\n .matches(/^[a-zA-Z0-9]*$/, t.formatMessage({ id: \"errors.invalid_characters\" }))\r\n .required(t.formatMessage({ id: \"errors.required\" })),\r\n company_code: yup.string()\r\n .matches(/^[a-zA-Z0-9]*$/, t.formatMessage({ id: \"errors.invalid_characters\" }))\r\n .required(t.formatMessage({ id: \"errors.required\" })),\r\n division: yup.string()\r\n .matches(/^[a-zA-Z0-9]*$/, t.formatMessage({ id: \"errors.invalid_characters\" }))\r\n .required(t.formatMessage({ id: \"errors.required\" })),\r\n distribution_channel: yup.string()\r\n .matches(/^[a-zA-Z0-9]*$/, t.formatMessage({ id: \"errors.invalid_characters\" }))\r\n .required(t.formatMessage({ id: \"errors.required\" }))\r\n });\r\n}\r\n\r\nfunction AddManualSapAccount(props: any) {\r\n\r\n\r\n const intl = useIntl();\r\n const t = (id: string) => intl.formatMessage({ id: id });\r\n\r\n const _salesOrgs: string[] = (props.salesOrgs || []).map((item: any) => item.sales_organization);\r\n const _companyCodes: string[] = (props.companyCodes || []).map((item: any) => item.company_code);\r\n\r\n const initialAccount: any = { ...props.account };\r\n if (!initialAccount.company_code && _companyCodes.length === 1) {\r\n initialAccount.company_code = _companyCodes[0];\r\n }\r\n\r\n if (!initialAccount.sales_organization && _salesOrgs.length === 1) {\r\n initialAccount.sales_organization = _salesOrgs[0];\r\n }\r\n\r\n // Formik needs properties as empty strings instead of null.\r\n\r\n for (let propertyName in initialAccount) {\r\n if (initialAccount[propertyName] === null) {\r\n initialAccount[propertyName] = '';\r\n }\r\n }\r\n\r\n return (\r\n <div>\r\n <Formik\r\n validationSchema={schema(intl)}\r\n onSubmit={(values, bag) => {\r\n\r\n bag.setSubmitting(true);\r\n props.saveAccount(values).then(() => {\r\n // bag.setSubmitting(false);\r\n });\r\n }}\r\n initialValues={initialAccount}\r\n enableReinitialize={true}\r\n render={(formProps: any) => (\r\n <form onSubmit={formProps.handleSubmit}>\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <div className=\"form-group d-flex flex-row\">\r\n <label className=\"wa-label col-form-label pr-2 col-4 text-nowrap\" >{t('sap.account')}</label>\r\n <div className=\"flex-grow-1 col-8\">\r\n <BootstrapField type=\"text\" name=\"primary_account\" placeholder={t('sap.account')} />\r\n </div>\r\n </div>\r\n {props.accountTypes.length > 1 && (\r\n <div className=\"form-group d-flex flex-row\">\r\n <label className=\"wa-label col-form-label pr-2 col-4 text-nowrap\">{t('sap.account_type')}</label>\r\n <div className=\"flex-grow-1 col-8\">\r\n <BootstrapField\r\n component=\"select\"\r\n name=\"account_type\"\r\n value={formProps.values.account_type}\r\n >\r\n <option value=\"\" disabled>\r\n {t('sap.account_type')}\r\n </option>\r\n {props.accountTypes.map((accountType: any) => (\r\n <option value={accountType.accountTypeId} key={accountType.accountTypeId}>\r\n {accountType.accountTypeValue}\r\n </option>\r\n ))}\r\n </BootstrapField>\r\n <BootstrapError name=\"account_type\" />\r\n </div>\r\n </div>\r\n )}\r\n <div className=\"form-group d-flex flex-row\">\r\n <label className=\"wa-label col-form-label pr-2 col-4 text-nowrap\">{t('sap.company_code')}</label>\r\n <div className=\"flex-grow-1 col-8\">\r\n {_companyCodes.length === 1 ? (\r\n <BootstrapField\r\n component=\"input\"\r\n type=\"text\"\r\n name=\"company_code\"\r\n value={_companyCodes[0]}\r\n readOnly\r\n />\r\n ) : (\r\n <BootstrapField component=\"select\" name=\"company_code\">\r\n <option value=\"\" disabled>\r\n {t('sap.company_code')}\r\n </option>\r\n {_companyCodes.map((companyCode) => (\r\n <option value={companyCode} key={companyCode}>\r\n {companyCode}\r\n </option>\r\n ))}\r\n </BootstrapField>\r\n )}\r\n <BootstrapError name=\"company_code\" />\r\n </div>\r\n </div>\r\n <div className=\"form-group d-flex flex-row\">\r\n <label className=\"wa-label col-form-label pr-2 col-4 text-nowrap\">{t('sap.sales_organization')}</label>\r\n <div className=\"flex-grow-1 col-8\">\r\n {_salesOrgs.length === 1 ? (\r\n <BootstrapField\r\n component=\"input\"\r\n type=\"text\"\r\n name=\"sales_organization\"\r\n value={_salesOrgs[0]}\r\n readOnly\r\n />\r\n ) : (\r\n <BootstrapField component=\"select\" name=\"sales_organization\">\r\n <option value=\"\" disabled>\r\n {t('sap.sales_organization')}\r\n </option>\r\n {_salesOrgs.map((sales_organization) => (\r\n <option value={sales_organization} key={sales_organization}>\r\n {sales_organization}\r\n </option>\r\n ))}\r\n </BootstrapField>\r\n )}\r\n <BootstrapError name=\"sales_organization\" />\r\n </div>\r\n </div>\r\n <div className=\"form-group d-flex flex-row\">\r\n <label className=\"wa-label col-form-label pr-2 col-4 text-nowrap\">\r\n {t('sap.distribution_channel')}\r\n </label>\r\n <div className=\"flex-grow-1 col-8\">\r\n <BootstrapField type=\"text\" name=\"distribution_channel\" placeholder={t('sap.distribution_channel')} />\r\n <BootstrapError name=\"distribution_channel\" />\r\n </div>\r\n </div>\r\n <div className=\"form-group d-flex flex-row\">\r\n <label className=\"wa-label col-form-label pr-2 col-4 text-nowrap\">Company Division</label>\r\n <div className=\"flex-grow-1 col-8\">\r\n <BootstrapField type=\"text\" name=\"division\" placeholder={'Company Division'} />\r\n <BootstrapError name=\"division\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <button type=\"submit\" className={'btn btn-primary buttonColor buttonsize'}>\r\n Save\r\n </button>\r\n </div>\r\n </form>\r\n )}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>((store, props) => ({\r\n salesOrgs: store.app.config.sap.data?.sales_area_data,\r\n companyCodes: store.app.config.sap.data?.company_codes,\r\n}))(AddManualSapAccount);","import React, { useState } from 'react';\r\nimport { Formik } from 'formik';\r\nimport * as yup from 'yup';\r\nimport { connect } from 'react-redux';\r\nimport { useIntl, IntlShape } from 'react-intl';\r\nimport { BootstrapField, BootstrapError } from '../../helpers/Field';\r\n\r\nfunction schema(t: IntlShape) {\r\n return yup.object().shape({\r\n invoiceNumber: yup.string().required(t.formatMessage({ id: \"errors.invoice.required\" })),\r\n invoiceAmount: yup.string().test('amount_validation', t.formatMessage({ id: \"errors.invalid_amount\" }),\r\n value => value ? /^-?\\d+(\\.\\d{2})?$/.test(value) : true\r\n ).required(t.formatMessage({ id: \"errors.amount.required\" })),\r\n accountNumber: yup.string().matches(/^[a-zA-Z0-9]*$/, t.formatMessage({ id: \"errors.invalid_characters\" }))\r\n .required(t.formatMessage({ id: \"errors.account.required\" }))\r\n });\r\n}\r\n\r\nfunction AddInvoiceSapAccount(props: any) {\r\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\r\n const intl = useIntl();\r\n const t = (id: string) => intl.formatMessage({ id: id });\r\n\r\n const initialAccount = {};\r\n\r\n return (\r\n <div>\r\n <Formik\r\n validationSchema={schema(intl)}\r\n onSubmit={async (values, bag) => {\r\n bag.setSubmitting(true);\r\n try {\r\n await props.saveAccountByInvoice(values);\r\n } catch (error: any) {\r\n if (error.response && error.response.status === 400) {\r\n // Display the error message coming from the controller\r\n setErrorMessage(error.response.data.message);\r\n } else {\r\n setErrorMessage(error.message);\r\n }\r\n }\r\n }}\r\n initialValues={initialAccount}\r\n enableReinitialize={true}\r\n render={(formProps: any) => (\r\n <form onSubmit={formProps.handleSubmit}>\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <div className=\"form-group d-flex flex-row\">\r\n <label className=\"wa-label col-form-label pr-2 col-4 text-nowrap\">{t('account.billto_number')}</label>\r\n <div className=\"flex-grow-1 col-8\">\r\n <BootstrapField type=\"text\" name=\"accountNumber\" placeholder={t('account.billto_number')} />\r\n <BootstrapError name=\"accountNumber\" />\r\n </div>\r\n </div>\r\n <div className=\"form-group d-flex flex-row\">\r\n <label className=\"wa-label col-form-label pr-2 col-4 text-nowrap\">{t('invoice_search.search_options.invoice_number')}</label>\r\n <div className=\"flex-grow-1 col-8\">\r\n <BootstrapField type=\"text\" name=\"invoiceNumber\" placeholder={t('invoice_search.search_options.invoice_number')} maxLength={10} />\r\n <BootstrapError name=\"invoiceNumber\" />\r\n </div>\r\n </div>\r\n <div className=\"form-group d-flex flex-row\">\r\n <label className=\"wa-label col-form-label pr-2 col-4 text-nowrap\">{t('account.invoice_amount_label')}</label>\r\n <div className=\"flex-grow-1 col-8\">\r\n <BootstrapField type=\"text\" name=\"invoiceAmount\" placeholder={t('account.invoice_amount_label')} />\r\n <BootstrapError name=\"invoiceAmount\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div className=\"row\">\r\n <div className=\"col-4\">\r\n <button type=\"submit\" className=\"btn btn-primary buttonColor buttonsize\">\r\n Save\r\n </button>\r\n </div>\r\n {props.errorMessage &&\r\n ( <div className=\"col\">\r\n <p style={{ color: 'red' }}>{props.errorMessage }</p>\r\n </div>\r\n )}\r\n </div>\r\n \r\n\r\n </form>\r\n )}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport default connect()(AddInvoiceSapAccount);\r\n","import React, { useEffect, useState } from 'react';\r\nimport {useIntl} from \"react-intl\";\r\nimport AddManualSapAccount from './AddManualSapAccount';\r\nimport AddInvoiceSapAccount from './AddInvoiceSapAccount';\r\n\r\nexport default function ManageUserSapAccount(props: any) {\r\n\r\n const [saveType, setSaveType] = useState(\"invoice\")\r\n const [initialAccount, setInitialAccount] = useState<any>()\r\n\r\n const intl = useIntl();\r\n const t = (id:string) => intl.formatMessage({id: id});\r\n\r\n let _salesOrgs: any = {};\r\n props.salesOrgs?.filter(_ => _.active && _.active === \"X\").forEach(_ => _salesOrgs[_.sales_organization] = _.sales_organization);\r\n _salesOrgs = Object.keys(_salesOrgs);\r\n\r\n useEffect(() => {\r\n\r\n const account = { ...props.account }\r\n\r\n //if (!account.company_code && _companyCodes.length === 1) {\r\n // account.company_code = _companyCodes[0];\r\n //}\r\n\r\n if (account.primary_account && account.primary_account.length > 0) {\r\n setSaveType(\"manual\")\r\n }\r\n else {\r\n setSaveType(\"invoice\")\r\n }\r\n\r\n if (!account.sales_organization && _salesOrgs.length === 1) {\r\n account.sales_organization = _salesOrgs[0];\r\n }\r\n\r\n // Formik needs properties as empty strings instead of null.\r\n\r\n for (let propertyName in account) {\r\n if (account[propertyName] === null) {\r\n account[propertyName] = '';\r\n }\r\n }\r\n\r\n setInitialAccount(account)\r\n }, [props.account])\r\n\r\n\r\n return (\r\n <div className=\"mt-1\">\r\n\r\n {\r\n (!initialAccount?.primary_account || initialAccount?.primary_account.length == 0) &&\r\n <div className=\"form-group\">\r\n <div >\r\n <input type=\"radio\" name=\"saveAccountType\" id=\"invoice\" checked={saveType == \"invoice\"} onClick={() => setSaveType(\"invoice\")} /> {t('settings.account_entry.invoice')}\r\n </div>\r\n <div >\r\n <input type=\"radio\" name=\"saveAccountType\" id=\"manual\" checked={saveType == \"manual\"} onClick={() => setSaveType(\"manual\")} /> {t('settings.account_entry.manual')}\r\n </div>\r\n\r\n </div>\r\n }\r\n {\r\n saveType === \"invoice\" &&\r\n <AddInvoiceSapAccount saveAccountByInvoice={props.saveAccountByInvoice} errorMessage={props.errorMessage } />\r\n }\r\n {\r\n saveType === \"manual\" &&\r\n <AddManualSapAccount account={props.account} accountTypes={props.accountTypes}\r\n saveAccount={props.saveAccount} />\r\n }\r\n </div>\r\n );\r\n}","import React, {Component, useEffect, useState} from 'react';\r\nimport ManageUserSapAccount from \"./ManageUserSapAccount\";\r\nimport { saveUserSapAccount, saveUserSapAccountByInvoice } from \"../../requests/UserRequests\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome/index\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, useIntl} from 'react-intl';\r\nimport {SapAccount} from \"../../interfaces/SapAccount\";\r\nimport {useGetSapAccountTypes} from \"../../hooks/CommonHooks\";\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport {Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow} from \"@material-ui/core\";\r\nimport { toast } from 'react-toastify';\r\n\r\nconst useStyles = makeStyles({\r\n table: {\r\n minWidth: 650,\r\n },\r\n});\r\n\r\nfunction LinkedSapAccounts(props: { accounts: any, readonly: boolean, defaults: any, getAccounts: any, deleteAccount: any, refreshAccounts: Function, userId: string }) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n\r\n let [account, setAccount] = useState<SapAccount | null>(null);\r\n let [accounts, setAccounts] = useState<SapAccount[]>([]);\r\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\r\n\r\n\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n if (props.accounts) {\r\n setAccounts(props.accounts);\r\n } else {\r\n props.getAccounts(props.userId).then(accounts => {\r\n setAccounts(accounts);\r\n })\r\n }\r\n }, []);\r\n\r\n const accountTypes = useGetSapAccountTypes();\r\n\r\n let addNewAccount = () => {\r\n let accountType = \"\";\r\n if (accountTypes.length === 1) {\r\n accountType = accountTypes[0].accountTypeId;\r\n }\r\n setAccount(\r\n {\r\n account_type: accountType,\r\n company_code: '',\r\n distribution_channel: props.defaults.account.distribution_channel,\r\n division: props.defaults.account.division,\r\n primary_account: '',\r\n sales_organization: props.defaults.account.sales_organization,\r\n });\r\n };\r\n\r\n let close = () => {\r\n setAccount(null);\r\n };\r\n\r\n let refreshAccounts = () => {\r\n props.refreshAccounts(props.userId).then(accounts => {\r\n setAccounts(accounts);\r\n })\r\n };\r\n\r\n let editAccount = (account) => {\r\n setAccount(account);\r\n };\r\n\r\n let deleteAccount = (deleteAccount: SapAccount) => {\r\n props.deleteAccount(props.userId, deleteAccount).then(() => {\r\n if (account && (account.account_id === deleteAccount.account_id)) {\r\n setAccount(null);\r\n }\r\n refreshAccounts();\r\n });\r\n };\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <div className=\"row justify-content-between\">\r\n <h5><FormattedMessage id={\"settings.user.linked_accounts\"}/></h5>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-12 col-md-6\">\r\n <TableContainer>\r\n <Table className={classes.table} size=\"small\" aria-label=\"a dense table\">\r\n <TableHead>\r\n <TableRow>\r\n <TableCell>Account</TableCell>\r\n <TableCell align=\"left\">Company Code</TableCell>\r\n <TableCell align=\"left\">Sales Organization</TableCell>\r\n <TableCell align=\"left\">Distribution Channel</TableCell>\r\n <TableCell align=\"left\">Division</TableCell>\r\n <TableCell align=\"left\"/>\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {accounts.map((account) =>\r\n <TableRow>\r\n <TableCell>{account.primary_account}</TableCell>\r\n <TableCell>{account.company_code}</TableCell>\r\n <TableCell>{account.sales_organization}</TableCell>\r\n <TableCell>{account.distribution_channel}</TableCell>\r\n <TableCell>{account.division}</TableCell>\r\n <TableCell>\r\n {!props.readonly && <>\r\n <div style={{width: \"60px\"}} role={\"button\"} className={\"font-button-icon\"}\r\n onClick={() => editAccount(account)}><FontAwesomeIcon\r\n icon={\"edit\"}/>{f(\"edit\")}</div>\r\n <div role={\"button\"} className={\"font-button-icon\"} style={{width: \"60px\"}}\r\n onClick={() => deleteAccount(account)}><FontAwesomeIcon\r\n icon={\"trash\"}/> {f(\"delete\")}</div>\r\n </>}\r\n </TableCell>\r\n </TableRow>\r\n )}\r\n {/*{rows.map((row) => (*/}\r\n {/* <TableRow key={row.name}>*/}\r\n {/* <TableCell component=\"th\" scope=\"row\">*/}\r\n {/* {row.name}*/}\r\n {/* </TableCell>*/}\r\n {/* <TableCell align=\"right\">{row.calories}</TableCell>*/}\r\n {/* <TableCell align=\"right\">{row.fat}</TableCell>*/}\r\n {/* <TableCell align=\"right\">{row.carbs}</TableCell>*/}\r\n {/* <TableCell align=\"right\">{row.protein}</TableCell>*/}\r\n {/* </TableRow>*/}\r\n {/*))}*/}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n\r\n\r\n <div className=\"d-flex justify-content-center m-4\">\r\n {!props.readonly && <>\r\n <button className=\"btn btn-primary buttonsize buttonColor\"\r\n onClick={addNewAccount}>{f(\"user.add_linked_account\")}</button>\r\n </>}\r\n </div>\r\n </div>\r\n <div className=\"col-12 col-md-6\">\r\n {account && <div className={\"modify-section\"}>\r\n <span className={\"float-right font-button-icon top-right\"} onClick={close}>\r\n <FontAwesomeIcon icon={\"times\"}/>\r\n </span>\r\n <ManageUserSapAccount account={account} accountTypes={accountTypes} errorMessage={errorMessage}\r\n saveAccount={(account: SapAccount) => {\r\n return saveUserSapAccount(props.userId, account).then(() => {\r\n refreshAccounts();\r\n setAccount(null);\r\n });\r\n }}\r\n saveAccountByInvoice={(invoice) => {\r\n saveUserSapAccountByInvoice(props.userId, invoice)\r\n .then(() => {\r\n refreshAccounts();\r\n setAccount(null);\r\n setErrorMessage('');\r\n })\r\n .catch((error) => {\r\n if (error.response?.status === 401) {\r\n setErrorMessage(error.response.data.message);\r\n } else {\r\n setErrorMessage(error.response?.data ?? error.message);\r\n }\r\n });\r\n }}\r\n\r\n /></div>}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>(state => ({\r\n defaults: state.app.config.defaults\r\n })\r\n)(LinkedSapAccounts);\r\n","import React from 'react';\r\n\r\nconst RegistrationRequestDetails = props => {\r\n return (\r\n <div className={\"row\"}>\r\n <div className={\"col-12\"}>\r\n <div>\r\n <strong>Name:</strong> {props.request.first_name} {props.request.last_name}\r\n </div>\r\n <div>\r\n <strong>Company:</strong> {props.request.company}\r\n </div>\r\n <div>\r\n <strong>Email:</strong> {props.request.email}\r\n </div>\r\n <div>\r\n <strong>Message:</strong> {props.request.message}\r\n </div>\r\n </div> \r\n </div>\r\n );\r\n};\r\n\r\n\r\nexport default RegistrationRequestDetails;\r\n","import React, {Component} from 'react';\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\n\r\nclass ExclusionItem extends Component<any, any> {\r\n \r\n constructor(props){\r\n super(props); \r\n \r\n this._deleteItem = this._deleteItem.bind(this);\r\n }\r\n \r\n _deleteItem(){\r\n this.props.onDelete(this.props.index); \r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-4\">\r\n <span>{this.props.value}</span>\r\n </div> \r\n <div className=\"col-4 flex\">\r\n <div className={\"payment-type-actions\"}>\r\n <span role={\"button\"} className={\"font-button-icon\"} onClick={this._deleteItem}>\r\n <FontAwesomeIcon icon={\"trash\"} /> Delete\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default ExclusionItem;","import React, {Component} from 'react';\r\n\r\ninterface AddExclusionItemProps{\r\n onSubmit: (string: string) => any;\r\n}\r\ninterface AddExclusionItemState{\r\n inputValue: string; \r\n}\r\n\r\nclass AddExclusionItem extends Component<AddExclusionItemProps, AddExclusionItemState> {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n inputValue: \"\",\r\n };\r\n\r\n this._updateInput = this._updateInput.bind(this);\r\n this._submit = this._submit.bind(this);\r\n }\r\n\r\n _updateInput(event) {\r\n this.setState({\r\n inputValue: event.target.value,\r\n });\r\n }\r\n\r\n _submit(event) {\r\n event.preventDefault();\r\n if(this.state.inputValue.length > 0){\r\n this.props.onSubmit(this.state.inputValue);\r\n this.setState({\r\n inputValue: \"\",\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <form onSubmit={this._submit}>\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-6 col-md-10\">\r\n <div className=\"input-group input-group-sm mb-1\">\r\n <input type=\"text\" className=\"form-control\" placeholder=\"\"\r\n aria-label=\"account number\" aria-describedby=\"basic-addon2\"\r\n onChange={this._updateInput}\r\n value={this.state.inputValue}\r\n />\r\n <div className=\"input-group-append\">\r\n <button className=\"btn btn-primary\" type=\"submit\" onClick={this._submit}>Add</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n );\r\n }\r\n}\r\n\r\n\r\nexport default AddExclusionItem;","import React, {Component} from 'react';\r\nimport ExclusionItem from \"./ExclusionItem\";\r\nimport AddExclusionItem from \"./AddExclusionItem\";\r\nimport {toast} from \"react-toastify\";\r\nimport {refreshInvoices} from \"../../../reducers/InvoiceReducer\";\r\nimport {getImpersonatedUserId} from \"../../../selectors/Selectors\";\r\nimport {connect} from \"react-redux\";\r\n\r\nclass ExclusionList extends Component<any, any> {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n exclusions: [],\r\n };\r\n\r\n \r\n this._addExclusion = this._addExclusion.bind(this);\r\n this._removeExclusion = this._removeExclusion.bind(this);\r\n }\r\n \r\n componentDidMount() {\r\n this.props.getExclusions(this.props.userId).then((list) => {\r\n this.setState({\r\n exclusions: list\r\n });\r\n });\r\n }\r\n\r\n _addExclusion(value) {\r\n let newList = this.state.exclusions.slice(0);\r\n newList.push(value);\r\n this._updateExclusionList(newList);\r\n }\r\n \r\n _updateExclusionList(newList){\r\n this.props.updateExclusions(this.props.userId, newList).then((list) => {\r\n if(typeof list.status !== 'undefined' && list.status.message_type === \"E\" ){\r\n toast.error(list.status.message_line_string, { position: toast.POSITION.TOP_RIGHT });\r\n } else {\r\n this.setState({\r\n exclusions: list\r\n });\r\n this._refreshInvoices();\r\n }\r\n });\r\n \r\n }\r\n \r\n _refreshInvoices(){\r\n if(this.props.userId === this.props.impersonatedUserId){\r\n this.props.refreshInvoices();\r\n } \r\n }\r\n\r\n _removeExclusion(index) {\r\n let newList = this.state.exclusions.slice(0);\r\n newList.splice(index, 1);\r\n this._updateExclusionList(newList);\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"card\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <div className=\"row justify-content-between\">\r\n <h3>Exclusion List</h3>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row no-gutters\">\r\n <div className=\"col-12 col-md-4\">\r\n <div>\r\n {this.state.exclusions && this.state.exclusions.map((value, i, arr) => {\r\n return <React.Fragment key={`${value}-${i}`}>\r\n <ExclusionItem value={value} index={i} onDelete={this._removeExclusion}/>\r\n {i < arr.length &&\r\n <div className={\"dropdown-divider\"}/>\r\n }\r\n </React.Fragment>\r\n })}\r\n <AddExclusionItem onSubmit={this._addExclusion}/>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\n\r\nexport default connect<any, any, any, any>((store, props) => ({\r\n impersonatedUserId: getImpersonatedUserId(store)\r\n}), {\r\n refreshInvoices,\r\n})(ExclusionList);\r\n\r\n\r\n","import React, {Component, useEffect, useState} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport ManageUserForm from \"./ManageUserForm\";\r\nimport {\r\n deleteUser as deleteUserCall,\r\n deleteUserSapAccount,\r\n getExclusionList,\r\n getUserSapAccounts,\r\n saveUser,\r\n updateExclusionList\r\n} from \"../../requests/UserRequests\";\r\nimport LinkedSapAccounts from \"./LinkedSapAccounts\";\r\nimport {Link, withRouter} from 'react-router-dom';\r\nimport RegistrationRequestDetails from \"../settings-page/registration-requests/RegistrationRequestDetails\";\r\nimport {markRegistrationCompleted} from \"../../requests/RegistrationRequests\";\r\nimport ExclusionList from \"./exclusions/ExclusionList\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {FormattedMessage, useIntl} from \"react-intl\";\r\nimport {Modal} from \"react-bootstrap\";\r\nimport {isStringNotEmptyOrNull} from \"../../utils\";\r\n\r\nfunction ManageUserPage(props) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({id: id});\r\n const [show, setShow] = useState(false);\r\n\r\n const handleClose = () => setShow(false);\r\n const handleShow = () => setShow(true);\r\n\r\n let [user, setUser] = useState<any>({\r\n login: \"\",\r\n first_name: \"\",\r\n last_name: \"\",\r\n company: \"\",\r\n email: \"\",\r\n status: \"active\",\r\n created_date: \"\",\r\n last_login_date: \"\",\r\n num_logins: \"\",\r\n last_password_change: \"\",\r\n primary_account_type: \"\",\r\n user_role: \"\",\r\n third_party_id: \"\",\r\n });\r\n\r\n let [request, setRequest] = useState<any | null>(null);\r\n\r\n useEffect(() => {\r\n loadUser();\r\n if (props.fromRequest) {\r\n props.getRegistrationRequest(props.fromRequest).then((_request) => {\r\n setRequest(_request);\r\n setUser({\r\n ...user,\r\n first_name: _request.last_name,\r\n company: _request.company,\r\n email: _request.email,\r\n });\r\n });\r\n }\r\n }, []);\r\n\r\n function loadUser() {\r\n if (props.getUser) {\r\n props.getUser().then((user) => {\r\n setUser(user);\r\n return user;\r\n })\r\n }\r\n }\r\n\r\n function deleteUser() {\r\n deleteUserCall(user.user_id).then(() => {\r\n props.history.push(\"/settings/users\");\r\n })\r\n }\r\n\r\n function _saveUser(form) {\r\n return saveUser(form).then((user) => {\r\n if (request) {\r\n markRegistrationCompleted(request.registrationRequestId);\r\n }\r\n setUser(user);\r\n });\r\n }\r\n\r\n const firstName = user && user.first_name ? user.first_name : '';\r\n const lastName = user && user.last_name ? user.last_name : '';\r\n const readonly = isStringNotEmptyOrNull(user?.third_party_id);\r\n\r\n return (\r\n <div className={\"container\"}>\r\n <Modal show={show} onHide={handleClose}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>{f(\"edit_user.confirm_delete\")}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>{f(\"edit_user.confirm_delete_message\")}</Modal.Body>\r\n <Modal.Footer>\r\n <button type=\"button\" className=\"btn btn-primary buttonColor\" data-dismiss=\"modal\"\r\n onClick={deleteUser}>\r\n {f(\"ok\")}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"btn btn-secondary buttonColor\"\r\n onClick={handleClose}\r\n >\r\n <FormattedMessage id={\"cancel\"}/>\r\n </button>\r\n </Modal.Footer>\r\n </Modal>\r\n <div className=\"row\">\r\n <div className=\"col-4\">\r\n <Link to=\"/settings/users\" className=\"btn button-back\">\r\n <i className=\"fas fa-angle-left button-back-text\"/>  \r\n <span className=\"button-back-text\">{f(\"edit_user.back_to_users\")}</span>\r\n </Link>\r\n </div>\r\n <div className=\"col-4 text-center\">\r\n <span className=\"user-name\">{`${firstName}${' '}${lastName}`}</span>\r\n </div>\r\n </div>\r\n {request && <div className=\"row mt-2\">\r\n <div className={\"col-12\"}>\r\n <div className=\"card\">\r\n <RegistrationRequestDetails request={request}/>\r\n </div>\r\n </div>\r\n </div>}\r\n <div className=\"row mt-2\">\r\n <div className={\"col-12\"}>\r\n <div className=\"card\">\r\n {user && <ManageUserForm save={_saveUser} user={user}\r\n primaryAccountTypes={props.primaryAccountTypes}/>}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {user && user.accounts && <div className=\"row mt-4\">\r\n <div className={\"col-12\"}>\r\n <LinkedSapAccounts accounts={user.accounts} userId={user.user_id}\r\n refreshAccounts={getUserSapAccounts}\r\n getAccounts={getUserSapAccounts} deleteAccount={deleteUserSapAccount}\r\n accountTypes={props.accountTypes}\r\n readonly={readonly}/>\r\n </div>\r\n </div>\r\n }\r\n\r\n {user && user.primary_account_type_id === \"PayerAll\" && <div className=\"row mt-4\">\r\n <div className={\"col-12\"}>\r\n <ExclusionList getExclusions={getExclusionList} updateExclusions={updateExclusionList}\r\n userId={user.user_id}/>\r\n </div>\r\n </div>\r\n }\r\n <div className={\"row mt-4\"}>\r\n <div className={\"col\"}>\r\n {!readonly && <span role={\"button\"} className={\"font-button-icon\"}\r\n onClick={handleShow}\r\n >\r\n <FontAwesomeIcon icon={\"trash\"}/> {f(\"edit_user.delete_user_button\")}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n accountTypes: state.default.accountTypes,\r\n primaryAccountTypes: state.default.primaryAccountTypes,\r\n };\r\n}\r\n\r\nexport default withRouter(connect<any, any, any, any>(\r\n mapStateToProps,\r\n)(ManageUserPage));\r\n","import React, { Component } from 'react';\r\n//import {BootstrapTable, TableHeaderColumn} from \"react-bootstrap-table\";\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport { Link } from \"react-router-dom\";\r\n\r\nfunction nameColumn(cell, row) {\r\n return `${row.first_name} ${row.last_name}`;\r\n}\r\n\r\nclass RegistrationRequestList extends Component<any, any> {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.renderActionButton = this.renderActionButton.bind(this);\r\n }\r\n\r\n\r\n renderActionButton(val, row) {\r\n return <Link to={`/settings/users/add/${row.registrationRequestId}`}>Create User</Link>\r\n }\r\n\r\n render() {\r\n const columns = [{\r\n dataField: 'nameColumn',\r\n text: \"Name\",\r\n align: \"center\",\r\n headerAlign: 'center',\r\n }, {\r\n dataField: 'company',\r\n text: \"company\",\r\n align: \"center\",\r\n headerAlign: 'center',\r\n\r\n }, {\r\n dataField: 'email',\r\n text: \"Email\",\r\n align: \"center\",\r\n headerAlign: 'center'\r\n\r\n }, {\r\n dataField: 'message',\r\n text: \"Message\",\r\n align: \"center\",\r\n headerAlign: 'center'\r\n\r\n }, {\r\n dataField: this.renderActionButton,\r\n text: \"Email\",\r\n align: \"center\",\r\n headerAlign: 'center'\r\n\r\n }];\r\n\r\n const defaultSorted = [{\r\n dataField: 'login',\r\n order: 'desc'\r\n }];\r\n\r\n const defaultEmptyDataMessage=()=>{\r\n return \"There is no data to display\";\r\n }\r\n return (\r\n <div>\r\n <BootstrapTable\r\n bootstrap4\r\n keyField=\"registrationRequestId\"\r\n data={this.props.requests}\r\n noDataIndication={defaultEmptyDataMessage}\r\n columns={columns}\r\n headerClasses=\"headerColumnColor\"\r\n defaultSorted={defaultSorted}\r\n bodyClasses=\"wa-bootstrap-small-text\"\r\n wrapperClasses=\"wa-bootstrap-table-container\"\r\n />\r\n\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default RegistrationRequestList;\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport RegistrationRequestList from \"./RegistrationRequestList\";\r\nimport {canManageRegistrationRequests} from \"../../../selectors/PermissionSelectors\";\r\n\r\nclass RegistrationRequestsPage extends Component<any, any> {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { requests: [] };\r\n }\r\n\r\n componentDidMount() {\r\n this.props.getRequests().then(requests => {\r\n this.setState({ requests: requests });\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <div className={\"container\"}>\r\n {\r\n this.props.canAccess ?\r\n <div className=\"row\">\r\n <div className=\"col-md-12\">\r\n <RegistrationRequestList requests={this.state.requests} />\r\n </div>\r\n </div>\r\n : null\r\n }\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => ({\r\n canAccess: canManageRegistrationRequests(state) \r\n}))(RegistrationRequestsPage);\r\n","import React, {Component} from 'react';\r\n\r\nclass JsonViewer extends Component<any, any> {\r\n \r\n renderArray(arr, tab = 0){\r\n return arr.map(e => {\r\n return (<div>\r\n {this.renderProp(\"\", e, tab)}\r\n </div>)\r\n })\r\n } \r\n \r\n renderObject(json, tab = 0) {\r\n return Object.keys(json).map((p) => {\r\n return this.renderProp(p, json[p], tab);\r\n });\r\n }\r\n \r\n renderProp(key, val, tab = 0){\r\n let style = {marginLeft: (tab * 12) + \"px\"};\r\n if(Array.isArray(val)){\r\n return (<div style={style}>\r\n <div><strong>{this.renderName(key)}</strong></div>\r\n {this.renderArray(val, tab + 1)}\r\n </div>);\r\n } else if((typeof val === \"object\")) {\r\n return (<div style={style}>\r\n <div><strong>{this.renderName(key)}</strong></div>\r\n {this.renderObject(val, tab + 1)}\r\n </div>);\r\n } else {\r\n return (<div style={style}><strong>{this.renderName(key)}</strong> - {val}</div>);\r\n }\r\n }\r\n \r\n renderName(string){\r\n let words = string.split('_');\r\n words = words.map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase());\r\n return words.join(' ');\r\n }\r\n \r\n render() {\r\n return (\r\n this.renderObject(this.props.json)\r\n );\r\n }\r\n}\r\n\r\nexport default JsonViewer;","import React, { Component, useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport JSONViewer from './JSONViewer';\r\nimport { updateConfiguration, getAppConfiguration } from \"../../../requests/ConfigRequests\";\r\n\r\nimport { setConfig as setAppConfig } from \"../../../reducers/AppReducer\";\r\nimport { FormattedMessage, IntlShape, useIntl } from 'react-intl';\r\nimport { BootstrapField, BootstrapError } from \"../../../helpers/Field\";\r\nimport * as yup from 'yup';\r\nimport { Field, Formik } from \"formik\";\r\nimport { toast } from 'react-toastify';\r\n\r\nconst schema = (intl: IntlShape) => {\r\n return yup.object().shape({\r\n companyName: yup.string().required(),\r\n applicationUrl: yup.string().required(),\r\n\r\n });\r\n};\r\nexport function CustomizingPage(props) {\r\n let sapStatusGood = props.sapConfig.statusCode === 200 && props.sapConfig.data.status.message_type === \"S\";\r\n\r\n const [data, setData] = useState({});\r\n // let [config, setConfig] = useState(null);\r\n\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n useEffect(() => {\r\n getAppConfiguration().then(_ => setData(_?.sap?.data));\r\n }, []);\r\n let config = props.config;\r\n return (\r\n <div className='container' >\r\n\r\n <Formik\r\n initialValues={config}\r\n validationSchema={schema(intl)}\r\n onSubmit={(values, bag) => {\r\n\r\n bag.setSubmitting(true);\r\n updateConfiguration(values).then(() => {\r\n toast.success(f(\"configuration.save_configuration_alert\"), { position: toast.POSITION.TOP_RIGHT });\r\n bag.setSubmitting(false);\r\n })\r\n\r\n }\r\n }\r\n\r\n >\r\n {\r\n (formProps: any) => (\r\n\r\n <form onSubmit={formProps.handleSubmit}>\r\n\r\n <div className=\"col-lg-9 col-md-12 mt-2 mb-3 pl-1\">\r\n <h5>{f(\"configuration.email.parameters\")}</h5>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.application_url_label\")}</label>\r\n <div className=\"col\">\r\n\r\n <BootstrapField name=\"applicationUrl\" placeholder=\"Application Url\" />\r\n <BootstrapError name=\"applicationUrl\" />\r\n </div>\r\n </div>\r\n\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \"><FormattedMessage\r\n id={'configuration.company_name_label'} /></label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"companyName\"\r\n placeholder={intl.formatMessage({ id: 'configuration.company_name_label' })} />\r\n <BootstrapError name=\"companyName\" />\r\n </div>\r\n </div>\r\n <div>\r\n <button className={\"btn btn-primary buttonColor buttonsize\"} type={\"submit\"}><FormattedMessage\r\n id={f(\"configuration.save_configuration\")} /></button>\r\n </div>\r\n <br/>\r\n {/* SAP Connection Status */}\r\n <h5>{f(\"settings.header.sap_details\")}</h5>\r\n <div className={\"row \"}>\r\n <div className=\"col-6\">\r\n <strong> {f(\"configuration.sap_connection_status\")}</strong>\r\n <span style={{ fontSize: '1.2rem' }}> {sapStatusGood ? f(\"configuration.sap_connection_status_good\") : f(\"configuration.sap_connection_status_error\")}</span>\r\n {!sapStatusGood && <div>\r\n {props.sapConfig.statusMessage}<br />\r\n {props.sapConfig.statusCode === 200 &&\r\n <React.Fragment>{props.sapConfig.data.status.message_type}<br />\r\n {props.sapConfig.data.status.message_line_string}<br />\r\n </React.Fragment>}\r\n </div>}\r\n </div>\r\n </div>\r\n {/* <ReactJson src={data} theme=\"rjv-default\" iconStyle=\"triangle\" enableClipboard=\"false\" /> */}\r\n <div className=\"col-4\">\r\n <JSONViewer json={data}></JSONViewer>\r\n </div>\r\n </div>\r\n <br />\r\n\r\n </form>\r\n )\r\n }\r\n </Formik>\r\n </div >\r\n\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n sapConfig: state.app.config.sap,\r\n }\r\n})(CustomizingPage);","import React, { useEffect, useRef, useState } from 'react';\r\nimport * as yup from 'yup';\r\nimport { Formik } from \"formik\";\r\nimport AceEditor from \"react-ace\";\r\nimport { toast } from 'react-toastify';\r\nimport \"ace-builds/src-noconflict/mode-html\";\r\nimport \"ace-builds/src-noconflict/theme-xcode\";\r\nimport { getEmailConfig, updateEmailConfig } from \"../../../../requests/ConfigRequests\";\r\nimport { createEmailConfig, EmailConfig, EmailTemplate } from \"../../../../interfaces/EmailConfig\";\r\nimport { checkStatus, parseJson, returnNull } from \"../../../../fetch\";\r\nimport { useIntl, FormattedMessage, IntlShape } from \"react-intl\";\r\nimport { BootstrapField, BootstrapError } from \"../../../../helpers/Field\";\r\nimport { getConfiguration, smtpTest, updateConfiguration } from \"../../../../requests/ConfigRequests\";\r\n\r\n//ReactSession.setStoreType(\"localStorage\");\r\n\r\ninterface EmailTypes {\r\n key: string;\r\n label: string;\r\n}\r\n//constructor(){\r\n// super();\r\n// this.state = { name: '' };\r\n//}\r\n\r\nconst schema = (intl: IntlShape) => {\r\n return yup.object().shape({\r\n smtpAddress: yup.string().required(),\r\n smtpPort: yup.number().required(),\r\n smtpUseUser: yup.boolean(),\r\n isPaymentsDisable: yup.boolean(),\r\n registrationRequestEmail: yup.string().email(),\r\n overrideEmail: yup.string().email(),\r\n emailTemplateBody: yup.string(),\r\n maxPaymentAllowed: yup.string(),\r\n emailConfirmationContent: yup.string(),\r\n fromAddress: yup.string().email(),\r\n fromAddressName: yup.string(),\r\n smtpUser: yup.string().when('smtpUseUser', {\r\n is: true,\r\n then: yup.string().required(),\r\n }),\r\n smtpPassword: yup.string().when('smtpUseUser', {\r\n is: true,\r\n then: yup.string(),\r\n })\r\n });\r\n};\r\nexport function EmailConfiguration(props: {}) {\r\n //state = { Template: '' };\r\n let [config, setConfig] = useState(null);\r\n const [currentEmailConfig, setCurrentEmailConfig] = useState<EmailConfig>();\r\n const [selectedKey, setSelectedKey] = useState(\"welcome_email_content\");\r\n const [selectedLanguage, setSelectedLanguage] = useState(\"en\");\r\n const [emailTemplate, setEmailTemplate] = useState<EmailTemplate>({ email: \"\", language: \"\", title: \"\", template: \"\" });\r\n let [testEmail, setTestEmail] = useState(\"\");\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n const emailTypes: EmailTypes[] = [\r\n //{key: \"registration_request_email\", label: \"Registration Request Email\"},\r\n //{key: \"registration_requestor_email\", label: \"Registration Requestor Email\"},\r\n { key: \"welcome_email_content\", label: \"Welcome Email\" },\r\n { key: \"confirmation_email_content\", label: \"Confirmation Email\" },\r\n { key: \"reset_password_email_content\", label: \"Password Reset Email\" },\r\n { key: \"password_changed_email_content\", label: \"Password Changed Email\" },\r\n { key: \"invoice_receipt_content\", label: \"Payment Confirmation Email\" },\r\n ];\r\n\r\n const languages = [\r\n { key: \"en\", label: \"English\" },\r\n { key: \"fr\", label: \"French\" },\r\n { key: \"de\", label: \"German\" },\r\n { key: \"es\", label: \"Spanish\" },\r\n { key: \"it\", label: \"Italian\" },\r\n { key: \"ja\", label: \"Japanese\" },\r\n { key: \"pt\", label: \"Portuguese\" },\r\n { key: \"ru\", label: \"Russian\" },\r\n ];\r\n\r\n let fetchData = async () => {\r\n let config: EmailConfig | null = await getEmailConfig(selectedKey)\r\n .then(checkStatus(200))\r\n .then(parseJson)\r\n .catch(returnNull);\r\n if (config == null) {\r\n setCurrentEmailConfig(createEmailConfig(selectedKey));\r\n createNewTemplate();\r\n } else {\r\n setCurrentEmailConfig(config);\r\n if (config.templates[selectedLanguage]) {\r\n //setEmailTemplate(this.state.Template);\r\n //emailTemplate = this.state.Template;\r\n setEmailTemplate(config.templates[selectedLanguage]);\r\n\r\n // this.setState({ Template: [config.templates[selectedLanguage] })\r\n //this.state = { Template: [config.templates[selectedLanguage]]};\r\n } else {\r\n createNewTemplate();\r\n }\r\n }\r\n };\r\n\r\n function createNewTemplate() {\r\n setEmailTemplate({ title: \"\", language: selectedLanguage, email: \"\", template: \"\" });\r\n }\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [selectedKey, selectedLanguage]);\r\n\r\n useEffect(() => {\r\n getConfiguration().then(_ => setConfig(_));\r\n }, []);\r\n\r\n function handleEditorChange(content: string, editor) {\r\n setEmailTemplate({\r\n ...emailTemplate,\r\n email: content\r\n })\r\n }\r\n\r\n function handleTitleChange(e: React.ChangeEvent<HTMLInputElement>) {\r\n setEmailTemplate({\r\n ...emailTemplate,\r\n title: e.target.value\r\n })\r\n }\r\n function saveEmail(values) {\r\n if (currentEmailConfig) {\r\n sessionStorage.setItem(\"Template\", emailTemplate.email.toString());\r\n currentEmailConfig.templates[selectedLanguage] = emailTemplate;\r\n updateConfiguration(values).then(() => {\r\n updateEmailConfig(selectedKey, currentEmailConfig).then(() => {\r\n toast.success(f(\"configuration.save_configuration_alert\"), { position: toast.POSITION.TOP_RIGHT });\r\n })\r\n })\r\n }\r\n }\r\n\r\n function onEmailChange(e: React.ChangeEvent<HTMLSelectElement>) {\r\n setSelectedKey(e.target.value);\r\n }\r\n\r\n function onLanguageChange(e: React.ChangeEvent<HTMLSelectElement>) {\r\n setSelectedLanguage(e.target.value);\r\n }\r\n\r\n function sendTestEmail(values) {\r\n // createNewTemplate();\r\n //values = useState(\"Template\").toString();\r\n // var templateval = useState(\"Template\").toString();\r\n // this.state.Template\r\n //alert(EmailConfig);\r\n //template=config.templates[selectedLanguage];\r\n var vTemplate = sessionStorage.getItem(\"Template\");\r\n let _testEmail = prompt(\"Test Email\", testEmail);\r\n if (_testEmail == null) {\r\n setTestEmail(\"\");\r\n } else {\r\n setTestEmail(_testEmail);\r\n\r\n smtpTest({ ...values, testEmail: _testEmail, emailTemplate: vTemplate }).then((message) => {\r\n alert(message);\r\n });\r\n }\r\n //, template: useState(\"Template\").toString()\r\n }\r\n\r\n return (\r\n <div >\r\n {config && <React.Fragment>\r\n <Formik validationSchema={schema(intl)}\r\n initialValues={config}\r\n onSubmit={(values, bag) => {\r\n //if (currentEmailConfig) {\r\n // bag.setSubmitting(true);\r\n // updateConfiguration(values).then(() => {\r\n // toast.success(f(\"configuration.save_configuration_alert\"), { position: toast.POSITION.TOP_RIGHT });\r\n // bag.setSubmitting(false);\r\n // })\r\n //}\r\n saveEmail(values);\r\n }\r\n }\r\n\r\n render={\r\n (formProps: any) => <form onSubmit={formProps.handleSubmit}>\r\n <div className=\"row\">\r\n <div className=\"col-12 card\">\r\n <div className=\"col-lg-9 col-md-12 mt-2 mb-3\" >\r\n <div >\r\n <h5>{f(\"configuration.email.parameters\")}</h5>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.smtp_address_label\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"smtpAddress\"\r\n placeholder={f(\"configuration.smtp_address_label\")} />\r\n <BootstrapError name=\"smtpAddress\" />\r\n </div>\r\n </div>\r\n\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.smtp_port_label\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"smtpPort\"\r\n placeholder={f(\"configuration.smtp_port_label\")} />\r\n <BootstrapError name=\"smtpPort\" />\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.from_address_label\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"fromAddress\"\r\n placeholder={f(\"configuration.from_address_label\")} />\r\n <BootstrapError name=\"fromAddress\" />\r\n </div>\r\n </div>\r\n\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.from_address_name\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"fromAddressName\"\r\n placeholder={f(\"configuration.from_address_name\")} />\r\n <BootstrapError name=\"fromAddressName\" />\r\n </div>\r\n </div>\r\n\r\n {/*Email To Override*/}\r\n\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary bold\">{f(\"configuration.email.test_address_label\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"overrideEmail\"\r\n placeholder={f(\"configuration.email.test_address_label\")} />\r\n <BootstrapError name=\"overrideEmail\" />\r\n <p>\r\n <small>{f(\"configuration.email.test_request_address_desc\")}</small>\r\n </p>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.Authentication\")}</label>\r\n <div className=\"col form-group form-check\">\r\n <BootstrapField id=\"smtpUseUser\" name=\"smtpUseUser\"\r\n placeholder={f(\"configuration.email_use_auth_user\")}\r\n type={\"checkbox\"}\r\n checked={formProps?.values?.smtpUseUser} />\r\n <label htmlFor=\"smtpUseUser\"\r\n className=\"form-check-label\">{f(\"configuration.email_use_auth_user\")}</label>\r\n </div>\r\n </div>\r\n\r\n {formProps?.values?.smtpUseUser && <React.Fragment>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.smtp_user_label\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"smtpUser\"\r\n placeholder={f(\"configuration.smtp_user_label\")} />\r\n <BootstrapError name=\"smtpUser\" />\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.smtp_password_label\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"smtpPassword\" placeholder=\"******\"\r\n type=\"password\" />\r\n <BootstrapError name=\"smtpPassword\" />\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n }\r\n\r\n <React.Fragment>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \"></label>\r\n <div className=\"col Emailbutton\">\r\n <button className=\"btn button-back Emailbutton\" onClick={(event) => {\r\n event.preventDefault();\r\n sendTestEmail(formProps.values);\r\n }}>{f(\"configuration.smtp_test_email_button\")}\r\n </button>\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n </div>\r\n <h5>{f(\"configuration.email.templates\")}</h5>\r\n\r\n <div className=\"form-group row\">\r\n\r\n <label className=\"col-4 col-form-label-sm text-secondary\"\r\n htmlFor=\"exampleInputEmail1\"> {f(\"configuration.template_type_label\")}\r\n </label>\r\n <div className=\"col\">\r\n <select className={\"form-control\"} onChange={onEmailChange}>\r\n {emailTypes.map(_ => <option key={_.key} value={_.key}>{_.label}</option>)}\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div className=\"form-group row\">\r\n <label className=\"col-4 col-form-label-sm text-secondary\"\r\n htmlFor=\"exampleInputEmail1\">\r\n {f(\"configuration.template_language_label\")}\r\n </label>\r\n <div className=\"col\">\r\n <select className={\"form-control\"} onChange={onLanguageChange}>\r\n {languages.map(_ => <option key={_.key} value={_.key}>{_.label}</option>)}\r\n </select>\r\n </div>\r\n\r\n {/* <div className={\"col-auto\"}>\r\n <button className={\"btn btn-primary\"}\r\n onClick={saveEmail}\r\n >\r\n <FormattedMessage id={\"save\"} />\r\n </button>\r\n </div> */}\r\n </div>\r\n\r\n <div className=\"form-group row\">\r\n <label className=\"col-4 col-form-label-sm text-secondary\"\r\n htmlFor=\"exampleInputEmail1\">{f(\"configuration.email_subject_label\")}</label>\r\n <div className=\"col\">\r\n <input className={\"form-control\"} type={\"text\"} value={emailTemplate?.title}\r\n onChange={handleTitleChange} />\r\n </div>\r\n </div>\r\n\r\n <div className={\"row\"}>\r\n <div className={\"col\"}>\r\n <div className=\"form-group\">\r\n <label htmlFor=\"exampleInputEmail1\">{f(\"configuration.email_body_label\")}</label>\r\n <AceEditor\r\n name=\"emailConfirmationContent\"\r\n mode=\"html\"\r\n theme=\"xcode\"\r\n width={'100%'}\r\n onChange={handleEditorChange}\r\n fontSize={14}\r\n highlightActiveLine={true}\r\n wrapEnabled={false}\r\n showPrintMargin={false}\r\n value={emailTemplate?.email}\r\n setOptions={{\r\n enableBasicAutocompletion: false,\r\n enableLiveAutocompletion: false,\r\n enableSnippets: false,\r\n showLineNumbers: true,\r\n tabSize: 2,\r\n }} />\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <div className='row'>\r\n <button className={\"btn btn-primary buttonColor buttonsize\"} type={\"submit\"}><FormattedMessage\r\n id={f(\"configuration.save_configuration\")} /></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n }\r\n\r\n >\r\n\r\n </Formik>\r\n\r\n </React.Fragment>\r\n }\r\n\r\n\r\n\r\n </div>\r\n )\r\n\r\n}","export interface EmailConfig{\r\n isEnabled: boolean;\r\n key: string;\r\n templates: {[key: string]: EmailTemplate}\r\n}\r\n\r\nexport interface EmailTemplate{\r\n language: string;\r\n email:string;\r\n title: string;\r\n template: string;\r\n}\r\n\r\nexport function createEmailConfig(key: string): EmailConfig{\r\n return {\r\n isEnabled: true,\r\n key,\r\n templates: {}, \r\n } \r\n}\r\n\r\n\r\n","/* eslint-env browser */\r\n/* eslint-disable no-console */\r\nimport React from 'react';\r\nimport {withRouter, useHistory} from 'react-router-dom';\r\nimport {connect} from 'react-redux';\r\nimport {Logout} from '../../actions/UserActions';\r\nimport {FormattedMessage} from 'react-intl';\r\n\r\n\r\n\r\nexport function SimpleHeaderMaintenance(props: any) {\r\n const history = useHistory();\r\n const navLinkLogoutClick = (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n props.logout();\r\n// setTimeout(() => {\r\n// //history.push(\"/login/admin\");\r\n// window.location.href = \"/login\";\r\n// }, 100);\r\n };\r\n return (\r\n <React.Fragment>\r\n <nav id=\"appHeader\" className=\"webar-navbar navbar fixed-top navbar-expand-lg navbar-light\">\r\n <div className=\"container\"> \r\n <div className=\"navbar-collapse webar-navbar-collapse\" id=\"navbarSupportedContent\">\r\n <h5 className=\"Maintenanceheader-forecolor\"><FormattedMessage id=\"configuration.system_maintenance_title\"/> </h5>\r\n <ul className=\"navbar-nav ml-auto\">\r\n <li className={\"align-self-baseline align-self-lg-center Maintenanceheader-forecolor\"}>\r\n <span className=\"fas fa-cog fa-2x \"/>\r\n </li>\r\n <li className=\"nav-item align-self-baseline align-self-lg-center\">\r\n <a className=\"nav-link\" href=\"\" id=\"header-logout-button\"\r\n onClick={navLinkLogoutClick}>\r\n <span><FormattedMessage id=\"header.logout\"/></span>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </nav>\r\n </React.Fragment>\r\n );\r\n}\r\n\r\n\r\nexport default withRouter(connect<any, any, any, any>((store,props) => ({\r\n \r\n}), {\r\n logout: Logout,\r\n})(SimpleHeaderMaintenance));","import React, { useEffect, useState } from 'react';\r\nimport { BootstrapField, BootstrapError } from \"../../../helpers/Field\";\r\nimport * as yup from 'yup';\r\nimport { Formik, Field } from \"formik\";\r\nimport { toast } from 'react-toastify';\r\n\r\nimport { connect } from \"react-redux\";\r\nimport { useIntl, FormattedMessage, IntlShape } from \"react-intl\";\r\nimport { Paper, Tab, Tabs } from \"@material-ui/core\"\r\n\r\nimport { SystemMaintentenceUpdateConfig, getSystemMaintenanceEnabled, updateSystemMaintenanceConfig, SystemMaintentenceConfig, EnumMessages } from \"../../../interfaces/SystemMaintenance\";\r\nimport { updateBlackoutConfig, getBlackoutConfig, getIsBlackoutActive, getConfiguration, updateConfiguration } from \"../../../requests/ConfigRequests\";\r\nimport SimpleHeaderMaintenance from \"../../header/SimpleHeaderMaintenance\";\r\nimport { Footer } from '../../footer/Footer';\r\nimport \"./SystemMaintenance.css\";\r\nimport { LocalConvenienceStoreOutlined } from '@material-ui/icons';\r\nimport { resolveAny } from 'dns';\r\nimport _ from 'lodash';\r\nimport { setMessageForPaymentDisable } from '../../../actions/CommonActions';\r\n\r\nconst schema = (intl: IntlShape) => {\r\n return yup.object().shape({\r\n isEnabled: yup.boolean(),\r\n fromDateLocal: yup.string().nullable(),\r\n toDateLocal: yup.string().nullable(),\r\n language: yup.string(),\r\n messages: yup.array(),\r\n redirectUrl: yup.string().nullable()\r\n });\r\n};\r\n\r\n\r\nfunction _SystemMaintenance(props) {\r\n //let sapStatusGood = props.sapConfig.statusCode === 200 && props.sapConfig.data.status.message_type === \"S\";\r\n const intl = useIntl();\r\n const [isMaintenaceMode, setIsMaitenanceMode] = useState(false)\r\n const f = id => intl.formatMessage({ id: id });\r\n const [maintenanceConfig, setMaintenanceConfig] = useState({});\r\n const [config, setConfig] = useState({\r\n selectedLanguage: \"en\",\r\n messages: [{ language: \"en\", message: \"\" }],\r\n isEnabled: false,\r\n fromDateLocal: \"\",\r\n toDateLocal: \"\"\r\n });\r\n const [selectedLanguage, setselectedLanguage] = useState(\"en\");\r\n const [selectedLanguageMessage, setSelectedLanguageMessage] = useState(\"en_paymentDisableMessageText\");\r\n // const [selectedPaymentLanguageMessage, setSelectedPaymentLanguageMessage] = useState(\"en_paymentDisableMessageText\");\r\n\r\n\r\n\r\n useEffect(() => {\r\n getBlackoutConfig().then((_) => {\r\n const initialMessage = _.messages.find(firstMessage => firstMessage.language === \"en\")\r\n setConfig({\r\n ..._,\r\n ...props.paymentConfig,\r\n selectedLanguage: \"en\",\r\n notification: initialMessage?.message ?? \"\",\r\n isEnabled: _.isEnabled,\r\n fromDateLocal: _.fromDateLocal,\r\n toDateLocal: _.toDateLocal,\r\n })\r\n setIsMaitenanceMode(_.isEnabled)\r\n });\r\n }, []);\r\n\r\n const languages = [\r\n { key: \"en\", label: \"English\" ,paymentMessageId:\"en_paymentDisableMessageText\"},\r\n { key: \"fr\", label: \"French\" ,paymentMessageId:\"fr_paymentDisableMessageText\"},\r\n { key: \"de\", label: \"German\",paymentMessageId:\"de_paymentDisableMessageText\" },\r\n { key: \"es\", label: \"Spanish\",paymentMessageId:\"es_paymentDisableMessageText\" },\r\n { key: \"it\", label: \"Italian\",paymentMessageId:\"it_paymentDisableMessageText\" },\r\n { key: \"ja\", label: \"Japanese\" ,paymentMessageId:\"ja_paymentDisableMessageText\"},\r\n { key: \"pt\", label: \"Portuguese\",paymentMessageId:\"pt_paymentDisableMessageText\" },\r\n { key: \"ru\", label: \"Russian\",paymentMessageId:\"ru_paymentDisableMessageText\" },\r\n ];\r\n function onPaymentLanguageChange(e: React.ChangeEvent<HTMLSelectElement>) {\r\n e.preventDefault();\r\n let key= e.target.value.toString();\r\n\r\n let paymentMessageObject=languages.find(item=>item.key===key)\r\n\r\n let paymentMessageId=paymentMessageObject!.paymentMessageId\r\n setSelectedLanguageMessage(paymentMessageId);\r\n }\r\n\r\n\r\n function isPaymentDisablemsgexists(values: any) {\r\n if (values['en_paymentDisableMessageText'] == '' &&\r\n values['fr_paymentDisableMessageText'] == '' &&\r\n values['de_paymentDisableMessageText'] == '' &&\r\n values['it_paymentDisableMessageText'] == '' &&\r\n values['es_paymentDisableMessageText'] == '' &&\r\n values['pt_paymentDisableMessageText'] == '' &&\r\n values['ru_paymentDisableMessageText'] == '' &&\r\n values['ja_paymentDisableMessageText'] == '' &&\r\n values['ja_paymentDisableMessageText'] == '' &&\r\n values['isPaymentsDisable']) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n function onLanguageChange(e, notificationValue) {\r\n if (config.messages) {\r\n const Messages = config.messages;\r\n let selectedMessage = Messages.find((translationObjects) =>\r\n translationObjects.language.toString() === e.target.value.toString()\r\n )\r\n if (selectedMessage) {\r\n setselectedLanguage(e.target.value.toString());\r\n return selectedMessage.message.toString()\r\n } else {\r\n setselectedLanguage(e.target.value.toString());\r\n return \"\"\r\n }\r\n }\r\n }\r\n\r\n function isMaintenancemsgexists(values: any) {\r\n let isAnyMessageSet = values.messages.find((translationObjects) =>\r\n translationObjects.message.toString().trim() !== ''\r\n )\r\n // Early return if maintenence checkbox is not enabled\r\n if (!values.isEnabled) return true;\r\n\r\n if (isAnyMessageSet === undefined && values.isEnabled) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n function isStartDateValid(values: any) {\r\n if (!values.isEnabled) return true;\r\n\r\n if (values.isEnabled && (values.fromDateLocal === null || values.fromDateLocal === undefined || values.fromDateLocal === \"\")) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n function isEndDateValid(values: any) {\r\n if (!values.isEnabled) return true;\r\n\r\n if (values.isEnabled && (values.toDateLocal === null || values.toDateLocal === undefined || values.toDateLocal === \"\")) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n function updateMessage(e: React.ChangeEvent<HTMLTextAreaElement>) {\r\n const updatedMessage = e.target.value;\r\n if (config.messages && selectedLanguage) {\r\n let messageStorageObject = config.messages;\r\n let messageObject = messageStorageObject.find((msgObj) =>\r\n msgObj.language.toString() === selectedLanguage\r\n )\r\n if (!messageObject) {\r\n messageStorageObject.push({ language: selectedLanguage, message: updatedMessage })\r\n } else {\r\n messageObject.message = updatedMessage;\r\n }\r\n setConfig(config => ({ ...config, messages: messageStorageObject }))\r\n }\r\n }\r\n\r\n let showHeader = true;\r\n if (props.hideHeader)\r\n showHeader = false;\r\n\r\n const parts = window.location.href.split('/');\r\n const hostname = parts[0] + \"/\" + parts[1] + \"/\" + parts[2];\r\n\r\n return (\r\n\r\n \r\n <Formik\r\n validationSchema={schema(intl)}\r\n onSubmit={(values, bag) => {\r\n\r\n if (isMaintenaceMode && !values.isEnabled) {\r\n bag.setSubmitting(true);\r\n updateBlackoutConfig(values).then(() => {\r\n toast.success(f(\"configuration.maintnenance_turn_off\"), { position: toast.POSITION.TOP_RIGHT });\r\n bag.setSubmitting(false);\r\n })\r\n return;\r\n }\r\n if (isMaintenancemsgexists(values) && isStartDateValid(values) && isEndDateValid(values)) {\r\n bag.setSubmitting(true);\r\n updateBlackoutConfig(values).then(() => {\r\n // toast.success(\"Configuration Saved\", { position: toast.POSITION.TOP_RIGHT });\r\n // bag.setSubmitting(false);\r\n props.setParentConfig(values)\r\n })\r\n if (isPaymentDisablemsgexists(values) == true) {\r\n updateConfiguration(values).then(() => {\r\n toast.success(f(\"configuration.saved_configuration_message\"), { position: toast.POSITION.TOP_RIGHT });\r\n getConfiguration().then((value) => setMessageForPaymentDisable(value))\r\n bag.setSubmitting(false);\r\n })\r\n }\r\n }\r\n\r\n\r\n }}\r\n enableReinitialize={true}\r\n initialValues={config}\r\n render={(formProps: any) =>\r\n <form onSubmit={formProps.handleSubmit}>\r\n <div className={showHeader ? \"container pt-4\" : \"\"}>\r\n <React.Fragment>\r\n {showHeader && <SimpleHeaderMaintenance />}\r\n {/*<Paper square elevation={1}>*/}\r\n <div className={showHeader ? \"col-12 card mt-5\" : \"col-12\"} >\r\n <div className={\"row\"}>\r\n <div className=\"col-lg-9 col-md-12 mt-2 mb-3 pl-1\">\r\n <h5>{f(\"configuration.settings\")}</h5>\r\n <p className=\"font-weight-light small text-muted text-break font-italic\">\r\n {\r\n // @todo add translation text}\r\n }\r\n {f(\"configuration.system_maintenance_title_info_line_one\")}\r\n\r\n {f(\"configuration.system_maintenance_title_info_line_two\")}\r\n\r\n </p>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.system_maintenance_UserLogins\")}</label>\r\n <div className=\"col form-group form-check\">\r\n <BootstrapField id=\"isEnabled\" name=\"isEnabled\"\r\n placeholder={f(\"configuration.system_maintenance_DisableUserLogins\")}\r\n type={\"checkbox\"}\r\n checked={formProps?.values?.isEnabled} onChange={formProps.handleChange} />\r\n <label htmlFor=\"isEnabled\"\r\n className=\"form-check-label\">{f(\"configuration.system_maintenance_DisableUserLogins\")}</label>\r\n <BootstrapError name=\"isEnabled\" />\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.system_maintenance_Period\")}</label>\r\n <div className=\"col datetimepickerdiv\">\r\n <div className='row'>\r\n <div className='col-1'>\r\n <label className=\"datetimepickerLabel\">Start</label>\r\n </div>\r\n <div className='col-5'>\r\n <div className=\"\">\r\n\r\n <BootstrapField\r\n className=\"form-control-sm \"\r\n type=\"datetime-local\"\r\n name=\"fromDateLocal\"\r\n onChange={formProps.handleChange}\r\n />\r\n\r\n {!isStartDateValid(formProps?.values) &&\r\n <small className=\"form-text invalid-feedback show\">Start time is required</small>\r\n\r\n }\r\n </div>\r\n </div>\r\n\r\n <div className='col-1'>\r\n <label className=\"datetimepickerLabel\">End</label>\r\n </div>\r\n <div className='col-5 ' >\r\n <div className=\"\">\r\n\r\n\r\n <BootstrapField\r\n className={\"form-control-sm datePicker\"}\r\n type=\"datetime-local\"\r\n name=\"toDateLocal\"\r\n onChange={formProps.handleChange}\r\n />\r\n {!isEndDateValid(formProps?.values) &&\r\n <small className=\"form-text invalid-feedback show\">End time is required</small>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary bold\">{f(\"configuration.system_maintenance_Notification_Language\")}</label>\r\n <div className={\"col\"}>\r\n <select name=\"selectedLanguage\" className={\"form-control\"} onChange={(e) => formProps.setFieldValue('notification', onLanguageChange(e, formProps.values.notification))}>\r\n {languages.map(_ =>\r\n <option key={_.key} value={_.key}>{_.label}</option>\r\n )}\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.system_maintenance_Notification_Text\")}</label>\r\n <div className=\"col\">\r\n\r\n <BootstrapField name=\"notification\" component=\"textarea\" numberOfLines={4} onKeyUp={(e) => updateMessage(e)} />\r\n {!isMaintenancemsgexists(formProps?.values) &&\r\n <small className=\"form-text invalid-feedback show\">Notification text is required</small>}\r\n\r\n <BootstrapField type=\"hidden\" name=\"messages\" onChange={formProps.handleChange} />\r\n\r\n <p className=\"font-weight-light small text-muted text-break\">\r\n {\r\n // @todo add translation text}\r\n }\r\n {f(\"configuration.system_maintenance_login_message_text\")}\r\n </p>\r\n </div>\r\n\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label className=\"col-4 col-form-label-sm text-secondary bold\" htmlFor=\"exampleInputEmail1\">{f(\"configuration.system_maintenance_URL\")}</label>\r\n <div className={\"col\"}>\r\n <BootstrapField name=\"redirectUrl\" onChange={formProps.handleChange}\r\n placeholder={f(\"configuration.system_maintenance_URL.place_holder\")} />\r\n <BootstrapError name=\"redirectUrl\" />\r\n <p className=\"font-weight-light small text-muted text-break\">\r\n {f(\"configuration.system_maintenance_redirect_text\")}{\" ( \" + hostname + \"/login/admin\" + \" )\"}\r\n </p>\r\n </div>\r\n\r\n </div>\r\n <br />\r\n \r\n\r\n\r\n <div>\r\n <button className={\"btn btn-primary buttonColor buttonsize\"} type={\"submit\"}><FormattedMessage id={f(\"configuration.save_configuration\")} /> </button>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n {/*</Paper>*/}\r\n </React.Fragment>\r\n\r\n <Footer />\r\n </div>\r\n </form>\r\n } />\r\n )\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n sapConfig: state.app.config.sap,\r\n paymentConfig: props.paymentConfig,\r\n setParentConfig: props.setConfig,\r\n isBlackoutActive: state.user.isBlackoutActive,\r\n }\r\n})(_SystemMaintenance);\r\n\r\n","import React, {Component, useEffect, useState} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport SystemMaintenance from '../../../../components/Maintenance/MaintenanceLogin/SystemMaintenance';\r\n\r\nexport function MaintenancePage(props) {\r\n return (\r\n <div className=\"row\">\r\n <div className=\"col-12 card\">\r\n\r\n <SystemMaintenance hideHeader={true} setConfig={props.setConfig} paymentConfig={props.paymentConfig}/>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>((store) => ({\r\n //sapDetails: store.app.config.sap?.data,\r\n}), {\r\n\r\n})(MaintenancePage);\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport { BootstrapField, BootstrapError } from \"../../../helpers/Field\";\r\nimport * as yup from 'yup';\r\nimport { Formik } from \"formik\";\r\nimport { getAppConfiguration, getConfiguration, smtpTest, updateConfiguration, updateApplicationConfiguration } from \"../../../requests/ConfigRequests\";\r\nimport CustomizingPage from \"../customizing/CustomizingPage\";\r\nimport { toast } from 'react-toastify';\r\nimport classNames from \"classnames\";\r\nimport { connect } from \"react-redux\";\r\nimport { useIntl, FormattedMessage, IntlShape } from \"react-intl\";\r\nimport { Paper, Tab, Tabs } from \"@material-ui/core\"\r\nimport { EmailConfiguration } from \"./email-config/EmailConfiguration\";\r\nimport { createEmailConfig, EmailConfig, EmailTemplate } from \"../../../interfaces/EmailConfig\";\r\nimport { getEmailConfig, updateEmailConfig } from \"../../../requests/ConfigRequests\";\r\nimport { checkStatus, parseJson, returnNull } from \"../../../fetch\";\r\nimport { Label } from '@material-ui/icons';\r\nimport { getisPaymentDisable } from \"../../../requests/ConfigRequests\";\r\nimport { setisPaymentDisable, setMessageForPaymentDisable } from '../../../actions/CommonActions';\r\nimport { MaintenancePage } from \"./maintenance/MaintenancePage\";\r\nimport { string } from 'yup';\r\nimport { Editor } from \"@tinymce/tinymce-react\"\r\nimport { getAllowRegistration } from \"../../../requests/ConfigRequests\";\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport JoditEditor from 'jodit-react';\r\nimport { useDispatch } from \"react-redux\";\r\nimport { setFooterLinks } from '../../../actions/UserActions';\r\n\r\nconst schema = (intl: IntlShape) => {\r\n return yup.object().shape({\r\n isPaymentsDisable: yup.boolean(),\r\n registrationRequestEmail: yup.string().email(),\r\n bannerContent: yup.string(),\r\n registrationEmailExpiration: yup.string(),\r\n registrationEmailExpirationMessage: yup.string(),\r\n //bannerContentLanguage: yup.string(),\r\n // registrationRequestEmailContent: yup.string(),\r\n // registrationRequestorEmailContent: yup.string(),\r\n // welcomeEmailContent: yup.string(),\r\n // resetPasswordEmailContent: yup.string(),\r\n maxPaymentAllowed: yup.string(),\r\n emailConfirmationContent: yup.string(),\r\n fromAddress: yup.string().email(),\r\n fromAddressName: yup.string(),\r\n\r\n });\r\n};\r\n\r\nconst useStyles = makeStyles({\r\n tabs: {\r\n\r\n \"& .MuiTabs-indicator\": {\r\n backgroundColor: \"#336699\",\r\n },\r\n \"& .MuiTab-root.Mui-selected\": {\r\n color: '#336699'\r\n }\r\n }\r\n})\r\n\r\nfunction _EditConfiguration(props) {\r\n let sapStatusGood = props.sapConfig.statusCode === 200 && props.sapConfig.data.status.message_type === \"S\";\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n let [config, setConfig] = useState(null);\r\n let [showConfiguration, setShowConfiguration] = useState(false);\r\n let [testEmail, setTestEmail] = useState(\"\");\r\n let [settingsTab, setSettingsTab] = useState(0);\r\n const dispatch = useDispatch();\r\n\r\n const [selectedLanguage, setSelectedLanguage] = useState(\"en\");\r\n const [selectedKey, setSelectedKey] = useState(\"registration_request_email\");\r\n const [currentEmailConfig, setCurrentEmailConfig] = useState<EmailConfig>();\r\n const [emailTemplate, setEmailTemplate] = useState<EmailTemplate>({ email: \"\", language: \"\", title: \"\", template: \"\" });\r\n const [selectedLanguageMessage, setSelectedLanguageMessage] = useState(\"en_paymentDisableMessageText\");\r\n const [selectedLanguageMessageText, setselectedLanguageMessageText] = useState(\"\");\r\n const [bannerContent, setBannerContent] = useState(\"\");\r\n const [bannerContentLanguage, setBannerContentLanguage] = useState(\"\");\r\n\r\n const classes = useStyles();\r\n\r\n const editor = useRef(null);\r\n const [content, setContent] = useState('');\r\n\r\n //const [emailTemplate2, setSelectedTemplate] = emailTemplate;\r\n // GetEmailTemplate\r\n //SetEmailTemplate\r\n let template = \"\";\r\n const editorRef = useRef(\"\");\r\n const languages = [\r\n { key: \"en_paymentDisableMessageText\", label: \"English\" },\r\n { key: \"fr_paymentDisableMessageText\", label: \"French\" },\r\n { key: \"de_paymentDisableMessageText\", label: \"German\" },\r\n { key: \"es_paymentDisableMessageText\", label: \"Spanish\" },\r\n { key: \"it_paymentDisableMessageText\", label: \"Italian\" },\r\n { key: \"ja_paymentDisableMessageText\", label: \"Japanese\" },\r\n { key: \"pt_paymentDisableMessageText\", label: \"Portuguese\" },\r\n { key: \"ru_paymentDisableMessageText\", label: \"Russian\" },\r\n ];\r\n const languagesForPayment = [\r\n { key: \"en\", label: \"English\" ,paymentMessageId:\"en_paymentDisableMessageText\"},\r\n { key: \"fr\", label: \"French\" ,paymentMessageId:\"fr_paymentDisableMessageText\"},\r\n { key: \"de\", label: \"German\",paymentMessageId:\"de_paymentDisableMessageText\" },\r\n { key: \"es\", label: \"Spanish\",paymentMessageId:\"es_paymentDisableMessageText\" },\r\n { key: \"it\", label: \"Italian\",paymentMessageId:\"it_paymentDisableMessageText\" },\r\n { key: \"ja\", label: \"Japanese\" ,paymentMessageId:\"ja_paymentDisableMessageText\"},\r\n { key: \"pt\", label: \"Portuguese\",paymentMessageId:\"pt_paymentDisableMessageText\" },\r\n { key: \"ru\", label: \"Russian\",paymentMessageId:\"ru_paymentDisableMessageText\" },\r\n ];\r\n\r\n const languagesForBannerContent = [\r\n { key: \"en\", label: \"English\" },\r\n { key: \"fr\", label: \"French\" },\r\n { key: \"de\", label: \"German\"},\r\n { key: \"es\", label: \"Spanish\" },\r\n { key: \"it\", label: \"Italian\" },\r\n { key: \"ja\", label: \"Japanese\"},\r\n { key: \"pt\", label: \"Portuguese\" },\r\n { key: \"ru\", label: \"Russian\" },\r\n ];\r\n\r\n const emailExpirationHours = [\r\n { key: \"6\", label: \"6 Hours\" },\r\n { key: \"12\", label: \"12 Hours\" },\r\n { key: \"24\", label: \"24 Hours\" },\r\n { key: \"48\", label: \"48 Hours\" },\r\n { key: \"ne\", label: \"Never\" },\r\n ];\r\n\r\n const fetchBannerContent = async () => {\r\n let value = await getAllowRegistration(selectedLanguage);\r\n setBannerContent(value?.item2);\r\n }\r\n\r\n //let fetchData = async () => {\r\n // let config: EmailConfig | null = await getEmailConfig(selectedKey)\r\n // .then(checkStatus(200))\r\n // .then(parseJson)\r\n // .catch(returnNull);\r\n // if (config == null) {\r\n // setCurrentEmailConfig(createEmailConfig(selectedKey));\r\n // createNewTemplate();\r\n // } else {\r\n // setCurrentEmailConfig(config);\r\n // if (config.templates[selectedLanguage]) {\r\n // //this.template = config.templates[selectedLanguage];\r\n // setEmailTemplate(config.templates[selectedLanguage]);\r\n // } else {\r\n // createNewTemplate();\r\n // }\r\n // }\r\n //};\r\n\r\n\r\n //useEffect(() => {\r\n\r\n // fetchData();\r\n\r\n //}, [selectedKey, selectedLanguage]);\r\n\r\n \r\n\r\n useEffect(() => {\r\n\r\n fetchBannerContent();\r\n\r\n }, [selectedLanguage]);\r\n\r\n\r\n useEffect(() => {\r\n getConfiguration().then(_ => setConfig(_));\r\n getisPaymentDisable().then(_ => setisPaymentDisable(_));\r\n }, []);\r\n\r\n function handleSettingsTabChange(event, newValue) {\r\n setSettingsTab(newValue);\r\n }\r\n function createNewTemplate() {\r\n setEmailTemplate({ title: \"\", language: selectedLanguage, email: \"\", template: \"\" });\r\n }\r\n function toggleShowConfiguration() {\r\n if (showConfiguration) {\r\n setShowConfiguration(false);\r\n } else {\r\n setShowConfiguration(true);\r\n }\r\n }\r\n function onLanguageChange(e: React.ChangeEvent<HTMLSelectElement>) {\r\n e.preventDefault();\r\n setSelectedLanguageMessage(e.target.value.toString());\r\n setSelectedLanguage(e.target.value);\r\n }\r\n \r\n function isPaymentDisablemsgexists(values: any) {\r\n if (values['en_paymentDisableMessageText'] == '' &&\r\n values['fr_paymentDisableMessageText'] == '' &&\r\n values['de_paymentDisableMessageText'] == '' &&\r\n values['it_paymentDisableMessageText'] == '' &&\r\n values['es_paymentDisableMessageText'] == '' &&\r\n values['pt_paymentDisableMessageText'] == '' &&\r\n values['ru_paymentDisableMessageText'] == '' &&\r\n values['ja_paymentDisableMessageText'] == '' &&\r\n values['ja_paymentDisableMessageText'] == '' &&\r\n values['isPaymentsDisable']) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n function onPaymentLanguageChange(e: React.ChangeEvent<HTMLSelectElement>) {\r\n e.preventDefault();\r\n let key= e.target.value.toString();\r\n\r\n let paymentMessageObject=languagesForPayment.find(item=>item.key===key)\r\n\r\n let paymentMessageId=paymentMessageObject!.paymentMessageId\r\n setSelectedLanguageMessage(paymentMessageId);\r\n }\r\n\r\n \r\n\r\n\r\n\r\n function sendTestEmail(values) {\r\n // createNewTemplate();\r\n //values = useState(\"Template\").toString();\r\n // var templateval = useState(\"Template\").toString();\r\n // this.state.Template\r\n //alert(EmailConfig);\r\n //template=config.templates[selectedLanguage];\r\n var vTemplate = sessionStorage.getItem(\"Template\");\r\n let _testEmail = prompt(\"Test Email\", testEmail);\r\n if (_testEmail == null) {\r\n setTestEmail(\"\");\r\n } else {\r\n setTestEmail(_testEmail);\r\n }\r\n smtpTest({ ...values, testEmail: _testEmail, emailTemplate: vTemplate }).then((message) => {\r\n alert(message);\r\n });\r\n //, template: useState(\"Template\").toString()\r\n }\r\n function onEditorStateChange(editorState) {\r\n setBannerContent(editorState);\r\n };\r\n return (\r\n <div className=\"container\">\r\n\r\n {config && <React.Fragment>\r\n <Paper square elevation={1}>\r\n <Tabs\r\n className={classes.tabs}\r\n value={settingsTab}\r\n onChange={handleSettingsTabChange}\r\n aria-label=\"disabled tabs example\"\r\n \r\n >\r\n <Tab label={f(\"settings.header.application\")} />\r\n <Tab label={f(\"settings.header.email\")} />\r\n <Tab label={f(\"settings.header.maintenance\")} />\r\n <Tab label={f(\"settings.header.system\")} />\r\n </Tabs>\r\n </Paper>\r\n\r\n {settingsTab == 0 && <Formik\r\n \r\n onSubmit={(values, bag) => { \r\n if (isPaymentDisablemsgexists(values) == true) {\r\n bag.setSubmitting(true);\r\n updateApplicationConfiguration(values,selectedLanguage).then(() => {\r\n toast.success(f(\"configuration.save_configuration_alert\"), { position: toast.POSITION.TOP_RIGHT });\r\n getConfiguration().then((value) => {\r\n setMessageForPaymentDisable(value)\r\n let footerLinks = { privacyPolicy: '//' + value.privacyPolicy, termsAndConditions: '//' + value.termsAndConditions, contactUs: '//' + value.contactUs, }\r\n dispatch(setFooterLinks(footerLinks));\r\n })\r\n bag.setSubmitting(false);\r\n })\r\n }\r\n }\r\n }\r\n initialValues={config}\r\n render={(formProps: any) => <form onSubmit={formProps.handleSubmit}>\r\n <div className=\"row\">\r\n <div className=\"col-12 card\">\r\n <div className={\"row mt-2 mb-3\"}>\r\n <div className=\"col-lg-9 col-md-12\">\r\n <div>\r\n \r\n <h5>{f(\"configuration.email.login_page\")}</h5>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{\"Allow Registration\"}</label>\r\n <div className=\"col form-group form-check\">\r\n <BootstrapField id=\"allowRegistration\" name=\"allowRegistration\"\r\n placeholder={f(\"configuration.email_use_auth_user\")}\r\n type={\"checkbox\"}\r\n checked={formProps?.values?.allowRegistration} />\r\n\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.email.registration_request_email\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"registrationRequestEmail\"\r\n placeholder={f(\"configuration.email.registration_request_email\")} />\r\n <BootstrapError name=\"registrationRequestEmail\" />\r\n <p>\r\n <small className=\"font-weight-light small text-muted text-break font-italic\">{f(\"configuration.email.registration_request_address_desc\")}</small>\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {/* Email Expiration*/}\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.email.registration_email_expiration\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField component=\"select\"\r\n name=\"registrationEmailExpiration\"\r\n value={formProps?.values?.registrationEmailExpiration}\r\n className={\"form-control custom-dropdown\"}>\r\n {emailExpirationHours.map(code => {\r\n return (\r\n <option\r\n value={code.key}\r\n selected={code.key == formProps?.values?.registrationEmailExpiration}\r\n key={code.label}>\r\n {code.label}\r\n </option>\r\n )\r\n })}\r\n </BootstrapField>\r\n\r\n </div>\r\n </div>\r\n\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.email.registration_email_expiration_message\")}</label>\r\n <div className=\"col TextMultiline\">\r\n <BootstrapField component=\"textarea\"\r\n numberOfLines={4}\r\n name=\"registrationEmailExpirationMessage\"\r\n value={formProps?.values?.registrationEmailExpirationMessage}\r\n className={\"form-control\"}>\r\n </BootstrapField>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.banner_language\")}</label>\r\n <div className=\"col\" style={{ width: \"650px\" }}>\r\n <select className={\"form-control\"} onChange={onLanguageChange}>\r\n {languagesForBannerContent.map(_ => <option key={_.key} value={_.key}>{_.label}</option>)}\r\n </select>\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.banner\")}</label>\r\n <div className=\"col\" style={{width:\"650px\"}}>\r\n <JoditEditor\r\n ref={editor}\r\n value={bannerContent}\r\n onChange={newContent => {\r\n formProps.handleChange({ target: { name: 'bannerContent', value: newContent } })\r\n }}\r\n />\r\n \r\n </div>\r\n </div>\r\n\r\n\r\n {/* Request Email */}\r\n <h5>{f(\"configuration.links\")}</h5>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.site_privacy_policy\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"privacyPolicy\"\r\n placeholder={f(\"configuration.site_privacy_policy\")} />\r\n <BootstrapError name=\"privacyPolicy\" />\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.site_terms_conditions\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"termsAndConditions\"\r\n placeholder={f(\"configuration.site_terms_conditions\")} />\r\n <BootstrapError name=\"termsAndConditions\" />\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary \">{f(\"configuration.site_contactus\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"contactUs\"\r\n placeholder={f(\"configuration.site_contactus\")} />\r\n <BootstrapError name=\"contactUs\" />\r\n </div>\r\n </div>\r\n {!props.isBlackoutActive && <div>\r\n\r\n\r\n {/* payments */}\r\n <h5>{f(\"configuration.payment_Configuration\")}</h5>\r\n \r\n\r\n {/*{formProps?.values?.isPaymentsDisable &&*/}\r\n {/*<div className={\"container mb-1\"}>*/}\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary bold\">{f(\"configuration.Payment_Functionality\")}</label>\r\n <div className=\"col form-group form-check\">\r\n <BootstrapField id=\"isPaymentsDisable\" name=\"isPaymentsDisable\"\r\n placeholder={f(\"configuration.Payments-disable\")}\r\n type={\"checkbox\"}\r\n checked={formProps?.values?.isPaymentsDisable} />\r\n <label htmlFor=\"isPaymentsDisable\"\r\n className=\"form-check-label\">{f(\"configuration.Payments-disable\")}</label>\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary bold\">{f(\"configuration.payment_Message_Language\")}</label>\r\n <div className={\"col\"}>\r\n <select className={\"form-control\"} onChange={onPaymentLanguageChange}>\r\n {languagesForPayment.map(_ => <option key={_.key} value={_.key}>{_.label}</option>)}\r\n </select>\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary bold\">{f(\"configuration.Payments_Message_Text\")}</label>\r\n <div className=\"col TextMultiline\">\r\n <BootstrapField name={selectedLanguageMessage} component=\"textarea\" numberOfLines={4} />\r\n <BootstrapError name={selectedLanguageMessage} />\r\n {!isPaymentDisablemsgexists(formProps?.values) &&\r\n <div\r\n className={\"col-12 col-md d-flex justify-content-center align-items-baseline\"}>\r\n <span className={\"invoice-currency-warning\"}>\r\n <label><FormattedMessage\r\n id={f(\"configuration.disable_Payments_Validation_Message\")} /></label>\r\n </span>\r\n </div>}\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary bold\">{f(\"configuration.maximum_card_payment_allowed\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"maxPaymentAllowed\" type=\"number\" min=\"0\"\r\n />\r\n <BootstrapError name=\"maxPaymentAllowed\" />\r\n <p className=\"font-weight-light small text-muted text-break font-italic\">\r\n {f(\"configuration.max_amount_info\")}\r\n </p>\r\n </div>\r\n </div>\r\n <div className={\"form-group row\"}>\r\n <label\r\n className=\"col-4 col-form-label-sm text-secondary bold\">{f(\"configuration.maximum_echeck_payment_allowed\")}</label>\r\n <div className=\"col\">\r\n <BootstrapField name=\"maxECheckPaymentAllowed\" type=\"number\" min=\"0\"\r\n />\r\n <BootstrapError name=\"maxECheckPaymentAllowed\" />\r\n <p className=\"font-weight-light small text-muted text-break font-italic\">\r\n {f(\"configuration.max_amount_info\")}\r\n </p>\r\n </div>\r\n </div>\r\n {/*</div>*/}\r\n </div>}\r\n\r\n <div>\r\n <button className={\"btn btn-primary buttonColor buttonsize\"} type={\"submit\"}><FormattedMessage\r\n id={f(\"configuration.save_configuration\")} /></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>} />}\r\n {/* email templates */}\r\n {\r\n settingsTab === 1 && <EmailConfiguration />\r\n }\r\n\r\n {/* maintenance */}\r\n {\r\n settingsTab === 2 && <MaintenancePage paymentConfig={config} setConfig={setConfig} />\r\n }\r\n\r\n {/* SAP Details */}\r\n {\r\n settingsTab === 3 && <div>\r\n <div className=\"row\">\r\n <div className=\"col-12 card\">\r\n <CustomizingPage config={config} setConfig={setConfig} />\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n sapConfig: state.app.config.sap,\r\n }\r\n})(_EditConfiguration);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Route, Switch, NavLink } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\nimport { getUser, getUserList } from \"../../requests/UserRequests\";\r\nimport { getRegistrationRequestById, getRegistrationRequests } from \"../../requests/RegistrationRequests\";\r\nimport ResetPassword from \"../resetpassword/AccountSettingsPage\";\r\nimport AccountPaymentPage from \"../payment-methods/AccountPaymentPage\";\r\nimport ListUsersPage from \"../user-management/ListUsersPage\";\r\nimport ManageUserPage from \"../user-management/ManageUserPage\";\r\nimport RegistrationRequestsPage from \"./registration-requests/RegistrationRequestsPage\";\r\nimport EditConfiguration from './configuration/EditConfiguration';\r\nimport { updatePrimaryAccountTypes } from \"../../actions/InvoiceActions\";\r\nimport {\r\n canEditSystemConfig, canManagePaymentMethods,\r\n canManageRegistrationRequests,\r\n canManageUsers,\r\n canViewUsers\r\n} from \"../../selectors/PermissionSelectors\";\r\nimport { FormattedMessage } from 'react-intl';\r\nimport { useUser } from \"../../hooks/CommonHooks\";\r\nimport { isThirdPartyUser } from \"../../helpers/UserHelpers\";\r\n\r\nfunction _SettingsPage(props: any) {\r\n const [collapsed, setCollapsed] = useState(true);\r\n const user = useUser();\r\n\r\n function navBarToggleClick() {\r\n setCollapsed(!collapsed);\r\n }\r\n\r\n let collapsedClass = `${'collapse navbar-collapse webar-navbar-collapse'}`;\r\n\r\n if (!collapsed) {\r\n collapsedClass = 'navbar-collapse webar-navbar-collapse';\r\n }\r\n return (<div className={\"settings-content\"}>\r\n <nav\r\n className=\"settings-sub-header webar-navbar navbar fixed-top navbar-expand-lg navbar-light nav-color d-none d-lg-block\">\r\n <div className=\"container\">\r\n <button className=\"navbar-toggler\" type=\"button\" onClick={navBarToggleClick}>\r\n <span className=\"navbar-toggler-icon\" />\r\n </button>\r\n <div className={collapsedClass} id=\"navbarSupportedContent\">\r\n <ul className=\"navbar-nav mr-auto\">\r\n {!isThirdPartyUser(user) && <li className=\"nav-item\">\r\n <NavLink exact={true} to={\"/settings/profile\"} className=\"nav-link\"><FormattedMessage\r\n id={\"settings.header.account\"} /></NavLink>\r\n </li>}\r\n {(props.canViewUsers) ?\r\n <li className=\"nav-item\">\r\n <NavLink exact={true} to={\"/settings/users\"} className=\"nav-link\"><FormattedMessage\r\n id={\"settings.header.user_management\"} /></NavLink>\r\n </li> : null\r\n }\r\n {props.canManagePaymentMethods && <li className=\"nav-item\">\r\n <NavLink to={\"/settings/payment-methods\"} className=\"nav-link\"><FormattedMessage\r\n id={\"settings.header.payment_methods\"} /></NavLink>\r\n </li>\r\n }\r\n {props.canEditSystemConfig ?\r\n <li className=\"nav-item\">\r\n <NavLink exact={true} to={\"/settings/configuration\"}\r\n className=\"nav-link\"><FormattedMessage\r\n id={\"settings.header.configuration\"} /></NavLink>\r\n </li> : null\r\n }\r\n\r\n </ul>\r\n </div>\r\n </div>\r\n </nav>\r\n <div className={\"settings-page\"}>\r\n <React.Fragment>\r\n <Switch>\r\n {/* Order matters here! */}\r\n {props.canManageUsers &&\r\n <Route path=\"/settings/users/add/:request?\" render={(props) => <ManageUserPage\r\n fromRequest={props.match.params.request}\r\n getRegistrationRequest={getRegistrationRequestById} />} />}\r\n {props.canManageUsers && <Route path=\"/settings/users/:userId\"\r\n render={(props) => <ManageUserPage\r\n getUser={getUser(props.match.params.userId)} />} />}\r\n {props.canViewUsers &&\r\n <Route path=\"/settings/users\" render={(props) => <ListUsersPage getUsers={getUserList} />} />}\r\n {props.canManageRegistrationRequests && <Route path=\"/settings/registration-requests\"\r\n render={(props) => <RegistrationRequestsPage\r\n getRequests={getRegistrationRequests} />} />}\r\n {props.canEditSystemConfig && <Route path=\"/settings/configuration\"\r\n render={(props) => <EditConfiguration />} />}\r\n {props.canManagePaymentMethods &&\r\n <Route path=\"/settings/payment-methods\" component={AccountPaymentPage} />}\r\n <Route path={\"/settings/profile\"} component={ResetPassword} />\r\n </Switch>\r\n </React.Fragment>\r\n </div>\r\n </div>)\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => ({\r\n canEditSystemConfig: canEditSystemConfig(state),\r\n canManagePaymentMethods: canManagePaymentMethods(state),\r\n canManageRegistrationRequests: canManageRegistrationRequests(state),\r\n canManageUsers: canManageUsers(state),\r\n canViewUsers: canViewUsers(state),\r\n}), {\r\n updatePrimaryAccountTypes\r\n})(_SettingsPage);\r\n","import * as React from \"react\";\r\nimport {Component} from \"react\";\r\n\r\nexport default class BasePageErrorBoundary extends Component<any, any> {\r\n constructor(props) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError(error) {\r\n // Update state so the next render will show the fallback UI.\r\n return { hasError: true };\r\n }\r\n\r\n componentDidCatch(error, info) {\r\n // You can also log the error to an error reporting service\r\n }\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n // You can render any custom fallback UI\r\n return <div className={\"container\"}><h4>There was an error showing this page.</h4></div>;\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}","import * as React from \"react\";\r\nimport {Component} from \"react\";\r\n\r\nexport default class PaymentStatusErrorBoundary extends Component<any, any> {\r\n constructor(props) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError(error) {\r\n // Update state so the next render will show the fallback UI.\r\n return { hasError: true };\r\n }\r\n\r\n componentDidCatch(error, info) {\r\n // You can also log the error to an error reporting service\r\n }\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n // You can render any custom fallback UI\r\n return <div className={\"container\"}><h4>There was an error showing you the payment status page. Your payment may have still processed.</h4></div>;\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}","import React, {FunctionComponent, useState} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {toast} from 'react-toastify';\r\nimport {Logout, refreshToken} from \"../actions/UserActions\";\r\nimport IdleTimer from 'react-idle-timer';\r\nimport {ThunkFunction} from \"../interfaces/utils\";\r\nimport {FormattedMessage, useIntl} from \"react-intl\";\r\n\r\ninterface IdleHandlerProps{\r\n dispatch: (action) => any;\r\n}\r\ninterface IdleHandlerDispatchProps{\r\n logout: ThunkFunction<typeof Logout>;\r\n refreshToken: ThunkFunction<typeof refreshToken>;\r\n}\r\n\r\n\r\nexport const IdleHandler: FunctionComponent<IdleHandlerProps & IdleHandlerDispatchProps> = (props) => {\r\n let logoutTimer: IdleTimer | null = null;\r\n\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({id: id});\r\n \r\n const onAction = () => {\r\n // Refresh Token\r\n props.refreshToken();\r\n };\r\n\r\n const onIdle = () => {\r\n toast.info(f(\"toast.session_timeout\"), {position: toast.POSITION.TOP_RIGHT, autoClose: false});\r\n props.logout();\r\n };\r\n \r\n return (\r\n <IdleTimer\r\n ref={ref => {\r\n logoutTimer = ref\r\n }}\r\n element={document}\r\n onAction={onAction}\r\n throttle={1000* 60* 5}\r\n onIdle={onIdle}\r\n timeout={1000 * 60 * 30}>\r\n {props.children}\r\n </IdleTimer>);\r\n \r\n};\r\n\r\nexport const IdleHandlerConnected = connect<any, any, any, any>(() => ({}), {\r\n logout: Logout,\r\n refreshToken\r\n}, )(IdleHandler);\r\n","import React, {Component} from 'react';\r\nimport {connect, useSelector} from 'react-redux';\r\n//import {BootstrapTable, TableHeaderColumn} from 'react-bootstrap-table';\r\nimport BootstrapTable from 'react-bootstrap-table-next';\r\nimport {amountFormatter, payerFormatter, reasonFormatter, soldToFormatter} from '../../common/invoiceHelpers';\r\nimport {FormattedDate, FormattedMessage, useIntl} from \"react-intl\";\r\nimport {trimLeadingZeroes} from \"../../utils\";\r\nimport {getSelectedPaymentOption} from \"../../selectors/Selectors\";\r\nimport {adjustCurrency, extractLastCardNumbers} from \"../../actions/InvoiceActions\";\r\nimport {RootState} from \"../../reducers/RootReducer\";\r\nimport {useCurrencyDecimalLookup} from \"../../selectors/ConfigSelectors\";\r\n\r\ninterface PaymentStatus {\r\n document_number_finance: string;\r\n authorization_reference_code: string;\r\n authorization_amount: number;\r\n currency_key: string;\r\n}\r\n\r\nfunction DepositPaymentStatus(props:any) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n const statuses = props.paymentStatuses;\r\n const successMessage = statuses?.filter(_ => _.message_type === 'S').map(_ => _.message_line_string).join(\"; \");\r\n const errorMessage = statuses?.filter(_ => _.message_type === 'E').map(_ => _.message_line_string).join(\"; \");\r\n const success = successMessage.length > 0;\r\n const currencyKey = useSelector<RootState, string>(state => state.default.selectedCurrencyOptionValue);\r\n const decimalLookup = useCurrencyDecimalLookup();\r\n \r\n let paymentStatus: null | PaymentStatus = null;\r\n if (success) {\r\n paymentStatus = statuses[0];\r\n }\r\n const alertClass = successMessage.length > 0 ? 'alert alert-success' : 'alert alert-danger';\r\n const documentNumber = paymentStatus?.document_number_finance ?? '';\r\n const referenceCode = paymentStatus?.authorization_reference_code ?? '';\r\n const top = 'Top';\r\n const columns = [{\r\n dataField: 'authorization_amount',\r\n text: f(\"deposit_status.table.paid_header\"),\r\n formatter :amountFormatter,\r\n align:\"center\",\r\n headerAlign: 'center'\r\n }, {\r\n dataField: 'payer',\r\n text: f(\"deposit_status.table.payer_header\"),\r\n formatter :payerFormatter,\r\n align:\"center\",\r\n headerAlign: 'center'\r\n }, {\r\n dataField: 'deposit_note',\r\n text: f(\"deposit_status.table.deposit_note_header\"),\r\n align:\"center\",\r\n headerAlign: 'center'\r\n }, {\r\n dataField: 'reference_number',\r\n text: f(\"deposit_status.table.reference_number_header\"),\r\n align:\"center\",\r\n headerAlign: 'center'\r\n } ];\r\n\r\n const defaultSorted = [{\r\n dataField: '_index',\r\n order: 'desc'\r\n }];\r\n\r\n let deposits = [{\r\n _index: 0,\r\n authorization_amount: adjustCurrency(paymentStatus?.authorization_amount ?? 0, decimalLookup(currencyKey)),\r\n currency_key: props.deposit?.deposit_detail?.currency_key,\r\n payer: props.deposit?.payer_data?.customer_number,\r\n reason_code: props.deposit?.deposit_detail?.reason_code,\r\n deposit_note: props.deposit?.deposit_detail?.comment,\r\n reference_number: props.deposit?.deposit_detail?.reference_number,\r\n }];\r\n\r\n return (\r\n <div>\r\n <div className={alertClass}>\r\n <strong><FormattedMessage id={\"status\"} defaultMessage={\"Message\"}/>: </strong> {success ? <FormattedMessage id={\"payment.success_message\"} defaultMessage={\"Payment Success\"}/> : <FormattedMessage id={\"payment.error_message\"} defaultMessage={\"Error Processing Payment\"}/>} <br/>\r\n <strong><FormattedMessage\r\n id={\"payment_status.document_number\"}/>:</strong> {documentNumber.replace(/^0+/, '')}\r\n <br/>\r\n <strong><FormattedMessage\r\n id={\"payment_status.reference_code\"}/>:</strong> {referenceCode.replace(/^0+/, '')}\r\n <br/>\r\n {props.paymentCard &&\r\n <React.Fragment><strong><FormattedMessage id={\"payment_status.payment_method_label\"}/>: </strong>\r\n <FormattedMessage\r\n id={\"payment_status.payment_method\"}\r\n values={{\r\n type: props.paymentCard.payment_card_type,\r\n numbers: extractLastCardNumbers(props.paymentCard.payment_card_token, '-')\r\n }}\r\n /></React.Fragment>} <br/>\r\n <strong><FormattedMessage id={\"payment_status.processed_by\"}/>:</strong> {props.currentUser.login}\r\n <br/>\r\n <strong><FormattedMessage id={\"payment_status.processed_date\"}/>:</strong> <FormattedDate\r\n value={Date.now()}/>\r\n </div>\r\n <br/>\r\n <div>\r\n\r\n \r\n <BootstrapTable\r\n bootstrap4\r\n keyField=\"_index\"\r\n data={deposits}\r\n columns={columns}\r\n headerClasses =\"headerColumnColor\"\r\n defaultSorted={defaultSorted}\r\n />\r\n{/* \r\n <BootstrapTable data={deposits} scrollTop={top}\r\n keyField='_index'\r\n headerStyle={{background: '#DFECF5', height: '40px'}}>\r\n <TableHeaderColumn width=\"55\" className=\"headerColumnColor\" headerAlign=\"center\" dataAlign=\"right\"\r\n dataField=\"authorization_amount\" dataFormat={amountFormatter}>\r\n <FormattedMessage id={\"deposit_status.table.paid_header\"}/>\r\n </TableHeaderColumn>\r\n <TableHeaderColumn width=\"55\" className=\"headerColumnColor\" headerAlign=\"center\" dataAlign=\"right\"\r\n dataField=\"payer\" dataFormat={payerFormatter}>\r\n <FormattedMessage id={\"deposit_status.table.payer_header\"}/>\r\n </TableHeaderColumn>\r\n <TableHeaderColumn width=\"90px\" className=\"headerColumnColor\" headerAlign=\"center\"\r\n dataField=\"deposit_note\">\r\n <FormattedMessage id={\"deposit_status.table.deposit_note_header\"}/>\r\n </TableHeaderColumn>\r\n <TableHeaderColumn width=\"90px\" className=\"headerColumnColor\" headerAlign=\"center\"\r\n dataField=\"reference_number\">\r\n <FormattedMessage id={\"deposit_status.table.reference_number_header\"}/>\r\n </TableHeaderColumn>\r\n </BootstrapTable> */}\r\n <br />\r\n <br />\r\n <br/>\r\n\r\n <div className={\"row d-print-none\"}>\r\n <div className={\"col\"}>\r\n <p className={\"mt-2\"}><FormattedMessage id={\"payment_status.message\"}/>\r\n </p>\r\n <button className={\"btn btn-primary buttonColor buttonsize\"} style={{ backgroundColor: \"#336699\" }}\r\n onClick={() => window.print()}>{f('print')}</button>\r\n </div>\r\n bbrbr</div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>((store, props) => ({\r\n paymentStatuses: store.default.paymentStatuses,\r\n deposit: store.invoice.completed.deposit,\r\n details: store.invoice.completed.details,\r\n paymentCard: getSelectedPaymentOption(store),\r\n currentUser: store.default.currentUser,\r\n sapDetails: store.app.config.sap?.data,\r\n}))(DepositPaymentStatus);\r\n","import React from 'react';\r\nimport { Route } from 'react-router-dom';\r\nimport DepositPaymentStatus from './DepositPaymentStatus';\r\nimport { FormattedMessage } from \"react-intl\";\r\n\r\nexport function DepositPaymentStatusPage() { \r\n return (\r\n <div className=\"container\">\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <Route render={({ history }) => {\r\n return <button\r\n type=\"button\"\r\n id=\"closePaymentStatus\"\r\n className=\"btn button-back d-print-none\"\r\n \r\n onClick={() => {\r\n history.push(\"/\");\r\n }}\r\n >\r\n {' '}\r\n\r\n <i className=\"fas fa-angle-left\" /> <FormattedMessage id={\"payment_page.back_button\"} />{' '}\r\n </button>\r\n }} />\r\n </div>\r\n </div>\r\n <br />\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <DepositPaymentStatus />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}","import React, {useEffect} from 'react';\r\nimport {useHistory, useLocation} from \"react-router-dom\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {\r\n getBeforeCreditTotal, getCreditTotal, getCustomerNumber, getInvoiceTotal, getOverpayingAmount,\r\n getPayerAccount, getPayTotal, getSelectedPaymentOption,\r\n getSelectedPrimaryAccount,\r\n getSelectedSecondaryAccount\r\n} from \"../../selectors/Selectors\";\r\nimport {createPayerData, mapInvoiceListToPaymentDocuments, mapPaymentDetails} from \"./PaymentFunctions\";\r\nimport {PaymentRequest} from \"../../interfaces/PaymentRequest\";\r\nimport {getAndClearSessionStorage} from \"../../utils\";\r\nimport {\r\n PAYMENT_METHOD_DEFAULT,\r\n PAYMENT_METHOD_SAVE\r\n} from \"../payment-methods/manage-payment-methods/ManagePaymentMethods\";\r\nimport {\r\n finalizeAddPaymentMethod,\r\n finalizePaymentMethodAndRefresh\r\n} from \"../payment-methods/manage-payment-methods/FinalizePaymentProcess\";\r\nimport {PaymentCard} from \"../../interfaces/PayerDetails\";\r\nimport {getPaymentResponse} from \"../../requests/TokenRequests\";\r\nimport {\r\n isCvvRequired, isInvoiceOverpaymentAllowed, isPartialPaymentsAllowed,\r\n useCurrencyDecimalLookup,\r\n useCurrencyDecimals,\r\n useCurrencyKey\r\n} from \"../../selectors/ConfigSelectors\";\r\nimport {useInvoiceSearchQuery} from \"./InvoiceDataManager\";\r\nimport {getInvoices, makePayment} from \"../../actions/InvoiceActions\";\r\nimport {canManagePaymentMethods} from \"../../selectors/PermissionSelectors\";\r\nimport { CACHED_CVV } from \"./Payment\";\r\nimport * as appConstants from '../../constants/ApplicationConstants';\r\n\r\nexport function ProcessingPaymentPage(props: {}) {\r\n const location = useLocation();\r\n const history = useHistory();\r\n const search = new URLSearchParams(location.search);\r\n const accessToken = search.get(\"id\");\r\n const currencyKey = useCurrencyKey();\r\n const currencyDecimals = useCurrencyDecimals(currencyKey);\r\n const dispatch = useDispatch();\r\n const payer = useSelector<any, any>(getPayerAccount);\r\n const primaryAccount = useSelector<any, any>(getSelectedPrimaryAccount);\r\n const secondaryAccount = useSelector<any, any>(getSelectedSecondaryAccount);\r\n const currentUser = useSelector<any, any>(state => state.default.currentUser);\r\n const decimalLookup = useCurrencyDecimalLookup();\r\n const invoiceSearchQuery = useInvoiceSearchQuery();\r\n const customerNumber = useSelector(getCustomerNumber);\r\n const invoices = useSelector<any, any>(store => store.invoice.selected);\r\n const invoiceDetails = useSelector<any, any>(store => store.invoice.invoiceDetail);\r\n const payerDetails = useSelector<any, any>(store => store.default.payerDetails);\r\n const selectedPrimaryAccount = useSelector(getSelectedPrimaryAccount);\r\n const paymentOption = useSelector(getSelectedPaymentOption);\r\n\r\n useEffect(() => {\r\n if (accessToken) {\r\n (async () => {\r\n if (accessToken) {\r\n const cvv = getAndClearSessionStorage(CACHED_CVV);\r\n let {paymentcard, cardinal} = await getPaymentResponse(accessToken);\r\n let invoicesToPay = mapInvoiceListToPaymentDocuments(invoices, invoiceDetails);\r\n let paymentDetails = mapPaymentDetails(paymentOption, cvv, payerDetails.address_data, cardinal);\r\n let payerData = createPayerData(customerNumber, selectedPrimaryAccount.CompanyCode);\r\n let paymentRequest: PaymentRequest = {\r\n payer_data: payerData,\r\n soldto: {\r\n account_number: selectedPrimaryAccount.PrimaryAcct\r\n },\r\n payment_detail: paymentDetails,\r\n documents: invoicesToPay,\r\n currency_key: currencyKey,\r\n currency_decimals: currencyDecimals,\r\n log: {\r\n id: \"POST_INVOICE\",\r\n login: currentUser.email,\r\n epayv: appConstants.APP_VERSION,\r\n usrag: navigator.userAgent\r\n }\r\n };\r\n\r\n \r\n let success: any = await dispatch(makePayment(paymentRequest));\r\n history.replace('/invoices/payment-status');\r\n if (success) {\r\n dispatch(getInvoices(invoiceSearchQuery, decimalLookup, ''));\r\n }\r\n }\r\n })();\r\n } else {\r\n history.replace(\"/\");\r\n }\r\n }, [accessToken]);\r\n\r\n return <div/>;\r\n}","import React, {useEffect} from 'react';\r\nimport {useHistory, useLocation} from \"react-router-dom\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {\r\n getBeforeCreditTotal, getCreditTotal, getCustomerNumber, getInvoiceTotal, getOverpayingAmount,\r\n getPayerAccount, getPayTotal, getSelectedPaymentOption,\r\n getSelectedPrimaryAccount,\r\n getSelectedSecondaryAccount\r\n} from \"../../selectors/Selectors\";\r\nimport {\r\n createPayerData,\r\n mapDepositDetails,\r\n mapInvoiceListToPaymentDocuments,\r\n mapPaymentDetails\r\n} from \"./PaymentFunctions\";\r\nimport {PaymentRequest} from \"../../interfaces/PaymentRequest\";\r\nimport {getAndClearSessionStorage} from \"../../utils\";\r\nimport {\r\n PAYMENT_METHOD_DEFAULT,\r\n PAYMENT_METHOD_SAVE\r\n} from \"../payment-methods/manage-payment-methods/ManagePaymentMethods\";\r\nimport {\r\n finalizeAddPaymentMethod,\r\n finalizePaymentMethodAndRefresh\r\n} from \"../payment-methods/manage-payment-methods/FinalizePaymentProcess\";\r\nimport {PaymentCard} from \"../../interfaces/PayerDetails\";\r\nimport {getPaymentResponse} from \"../../requests/TokenRequests\";\r\nimport {\r\n isCvvRequired, isInvoiceOverpaymentAllowed, isPartialPaymentsAllowed,\r\n useCurrencyDecimalLookup,\r\n useCurrencyDecimals,\r\n useCurrencyKey\r\n} from \"../../selectors/ConfigSelectors\";\r\nimport {useInvoiceSearchQuery} from \"./InvoiceDataManager\";\r\nimport { getInvoices, makeDeposit, makePayment } from \"../../actions/InvoiceActions\";\r\nimport * as appConstants from '../../constants/ApplicationConstants';\r\nimport {canManagePaymentMethods} from \"../../selectors/PermissionSelectors\";\r\nimport {DepositRequest} from \"../../interfaces/DepositRequest\";\r\nimport { CACHED_CVV } from \"./Payment\";\r\nimport { TraceLog } from '../../interfaces/TraceLog';\r\n\r\nexport function ProcessingDepositPage(props: {}) {\r\n const location = useLocation();\r\n const history = useHistory();\r\n const search = new URLSearchParams(location.search);\r\n const accessToken = search.get(\"id\");\r\n const currencyKey = useCurrencyKey();\r\n const currencyDecimals = useCurrencyDecimals(currencyKey);\r\n const dispatch = useDispatch();\r\n const payer = useSelector<any, any>(getPayerAccount);\r\n const primaryAccount = useSelector<any, any>(getSelectedPrimaryAccount);\r\n const secondaryAccount = useSelector<any, any>(getSelectedSecondaryAccount);\r\n const currentUser = useSelector<any, any>(state => state.default.currentUser);\r\n const decimalLookup = useCurrencyDecimalLookup();\r\n const invoiceSearchQuery = useInvoiceSearchQuery();\r\n const customerNumber = useSelector(getCustomerNumber);\r\n const invoices = useSelector<any, any>(store => store.invoice.selected);\r\n const invoiceDetails = useSelector<any, any>(store => store.invoice.invoiceDetail);\r\n const payerDetails = useSelector<any, any>(store => store.default.payerDetails);\r\n const selectedPrimaryAccount = useSelector(getSelectedPrimaryAccount);\r\n const paymentOption = useSelector(getSelectedPaymentOption);\r\n\r\n useEffect(() => {\r\n if (accessToken) {\r\n (async () => {\r\n if (accessToken) {\r\n\r\n // Get cached deposit details\r\n const cvv = getAndClearSessionStorage(CACHED_CVV);\r\n let cached_deposit = sessionStorage.getItem(\"DEPOSIT_CACHE\");\r\n if (!cached_deposit) {\r\n return; // Hopefully should never happen. \r\n }\r\n\r\n let deposit_form = JSON.parse(cached_deposit);\r\n let {paymentcard, cardinal} = await getPaymentResponse(accessToken);\r\n let depositDetail = mapDepositDetails(deposit_form, currencyKey);\r\n let paymentDetails = mapPaymentDetails(paymentOption, cvv, payerDetails.address_data, cardinal);\r\n let payerData = createPayerData(customerNumber, selectedPrimaryAccount.CompanyCode);\r\n let log: TraceLog = {\r\n id: \"POST_DEPOSIT\",\r\n login: currentUser.email,\r\n epayv: appConstants.APP_VERSION,\r\n usrag: navigator.userAgent\r\n }\r\n let depositRequest: DepositRequest = {\r\n deposit_detail: depositDetail,\r\n payer_data: payerData,\r\n payment_detail: paymentDetails,\r\n log:log\r\n };\r\n let success: any = await dispatch(makeDeposit(depositRequest));\r\n history.replace('/deposits/payment-status');\r\n if (success) {\r\n dispatch(getInvoices(invoiceSearchQuery, decimalLookup, ''));\r\n }\r\n }\r\n })();\r\n } else {\r\n history.replace(\"/\");\r\n }\r\n }, [accessToken]);\r\n\r\n return <div/>;\r\n}","/* eslint-env browser */\r\n/* eslint-disable no-console */\r\nimport React from 'react';\r\nimport Logo from \"../Logo\";\r\nimport {Link} from \"react-router-dom\";\r\n\r\nexport default function SimpleHeader(props) {\r\n return (\r\n <nav id=\"appHeader\" className=\"webar-navbar navbar navbar-expand-lg navbar-light\">\r\n <div className=\"container\">\r\n <div id=\"navbarSupportedContent\">\r\n <Link to={\"/login\"}>\r\n <ul className=\"navbar-nav flat-left\">\r\n <Logo height={50}/>\r\n </ul>\r\n </Link>\r\n </div>\r\n </div>\r\n </nav>\r\n );\r\n}\r\n\r\n\r\n","import {withRouter} from \"react-router-dom\";\r\nimport React from \"react\";\r\nimport {Logout} from \"../actions/UserActions\";\r\nimport {connect} from \"react-redux\";\r\nimport { useIntl } from \"react-intl\";\r\n\r\nfunction BackToLogin(props) {\r\n\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n return (\r\n <a href={\"/login\"} onClick={(e) => {\r\n e.preventDefault();\r\n props.logout().then(() => {\r\n props.history.replace('/login'); \r\n })\r\n }}> {f(\"system.go_back_login\")}</a>\r\n );\r\n}\r\n\r\nexport default withRouter(connect<any, any, any, any>(() =>{}, {\r\n logout: Logout,\r\n})(BackToLogin));","import React, {Component, useState} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {Link} from \"react-router-dom\";\r\nimport {resendConfirmation} from \"../../../requests/UserRequests\";\r\nimport SimpleHeader from \"../../header/SimpleHeader\";\r\nimport {Footer} from \"../../footer/Footer\";\r\nimport BackToLogin from \"../../BackToLogin\";\r\nimport { render } from 'react-dom';\r\nimport { useHistory } from \"react-router\";\r\n\r\nfunction mapStateToProps(state) {\r\n return {};\r\n}\r\n\r\nfunction AutoRegisterWaitingConfirmation(props) {\r\n let [email, setEmail] = useState(\"\");\r\n\r\n return (\r\n\r\n\r\n <React.Fragment>\r\n <SimpleHeader />\r\n <div className={\"container mt-5\"}>\r\n <div className=\"row mt-4\">\r\n <div className=\"col-xl-6 col-lg-6 col-md-6 col-sm-12 mx-auto\">\r\n <div className=\"card\">\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <p>\r\n You have not confirmed your account yet.\r\n </p>\r\n <form>\r\n <div className={\"form-group\"}>\r\n <button className={\"btn btn-primary buttonColor buttonsize\"} onClick={e => {\r\n e.preventDefault();\r\n resendConfirmation(email)\r\n }}>Resend Confirmation Email\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row justify-content-center flex mt-3\">\r\n <BackToLogin />\r\n </div>\r\n </div>\r\n <Footer />\r\n </React.Fragment>\r\n );\r\n \r\n}\r\n\r\nexport default AutoRegisterWaitingConfirmation;\r\n\r\n\r\n\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Route, Switch, withRouter } from \"react-router-dom\";\r\nimport { Deposits } from \"./deposits/Deposits\";\r\nimport { useHistory } from \"react-router\";\r\nimport Statements from \"./statements/Statements\";\r\nimport Help from \"./help/Help\";\r\nimport Header from \"./header/Header\";\r\nimport { Footer } from \"./footer/Footer\";\r\nimport InvoicePage from \"./invoice/InvoicePage\";\r\nimport PaymentPage from \"./invoice/PaymentPage\";\r\nimport PaymentStatusPage from \"./invoice/PaymentStatusPage\";\r\nimport DetailPage from \"./invoice/DetailPage\";\r\nimport InvoiceSearch from \"./invoice/InvoiceSearch\";\r\nimport { connect, useDispatch } from \"react-redux\";\r\nimport { getSelectedPrimaryAccount } from \"../selectors/Selectors\";\r\nimport PayerDetailsDataManager, {\r\n reestablishSelectedValues,\r\n} from \"./invoice/PayerDetailsDataManager\";\r\nimport { getUser, getUserCustomers } from \"../actions/UserActions\";\r\nimport SettingsPage from \"./settings-page/SettingsPage\";\r\n// import InvoiceDataManager from \"./invoice/InvoiceDataManager\";\r\nimport { canEditSystemConfig } from \"../selectors/PermissionSelectors\";\r\nimport EditConfiguration from \"./settings-page/configuration/EditConfiguration\";\r\nimport BasePageErrorBoundary from \"../error-boundaries/BasePageErrorBoundary\";\r\nimport PaymentStatusErrorBoundary from \"../error-boundaries/PaymentStatusErrorBoundary\";\r\nimport { IdleHandlerConnected } from \"./IdleHandler\";\r\nimport { DepositPaymentStatusPage } from \"./deposits/DepositPaymentStatusPage\";\r\nimport { useCanMakePayments } from \"../selectors/ConfigSelectors\";\r\nimport { ProcessingPaymentPage } from \"./invoice/ProcessingPaymentPage\";\r\nimport { ProcessingDepositPage } from \"./invoice/ProcessingDepositPage\";\r\nimport AutoRegisterWaitingConfirmation from \"./register/auto-register/AutoRegisterWaitingConfirmation\";\r\nimport {\r\n IMPERSONATED_USER_ID,\r\n SELECTED_PRIMARY_INDEX_KEY,\r\n SELECTED_SECONDARY_INDEX_KEY,\r\n} from \"../reducers/UserOptionsReducer\";\r\nimport {\r\n updatePrimaryAccount,\r\n updateSecondaryAccount,\r\n} from \"../actions/InvoiceActions\";\r\n\r\nexport function BasePage(props) {\r\n const [systemError, setSystemError] = useState(false);\r\n const canMakePayment = useCanMakePayments();\r\n var waitingconfirmation = false;\r\n const dispatch = useDispatch();\r\n const [user, setUser] = useState(null);\r\n const [title, settitle] = useState(\"hhhh\");\r\n useEffect(() => {\r\n props.getUser().then(async (user) => {\r\n if (user) {\r\n if (\r\n props.sap.statusCode === 200 &&\r\n props.sap?.data.status.message_type === \"S\"\r\n ) {\r\n if (user && user.status === \"waiting-confirmation\") {\r\n props.history.push(\"/auto-register/waiting-confirmation\");\r\n waitingconfirmation = true;\r\n settitle(\"true\");\r\n }\r\n } else {\r\n if (user.Permissions.indexOf(\"CanEditSystemConfig\") > -1) {\r\n props.history.push(\"/settings/configuration\");\r\n } else {\r\n props.history.replace(\"/system-error\");\r\n }\r\n setSystemError(true);\r\n }\r\n\r\n const _primaryAccount = sessionStorage.getItem(\r\n SELECTED_PRIMARY_INDEX_KEY\r\n );\r\n const _secondaryAccount = sessionStorage.getItem(\r\n SELECTED_SECONDARY_INDEX_KEY\r\n );\r\n\r\n const _impersonatedUserId =\r\n sessionStorage.getItem(IMPERSONATED_USER_ID);\r\n\r\n if (_impersonatedUserId) {\r\n await dispatch(\r\n getUserCustomers(JSON.parse(_impersonatedUserId), true)\r\n );\r\n } else {\r\n await dispatch(getUserCustomers(\"\", true));\r\n }\r\n\r\n if (\r\n _primaryAccount !== null &&\r\n _primaryAccount !== \"\" &&\r\n _primaryAccount !== undefined\r\n ) {\r\n dispatch(updatePrimaryAccount(JSON.parse(_primaryAccount), false));\r\n }\r\n\r\n if (\r\n _secondaryAccount !== null &&\r\n _secondaryAccount !== \"\" &&\r\n _secondaryAccount !== undefined\r\n ) {\r\n if (_secondaryAccount.toString() !== \"undefined\") {\r\n dispatch(updateSecondaryAccount(JSON.parse(_secondaryAccount)));\r\n }\r\n }\r\n\r\n setUser(user);\r\n }\r\n });\r\n }, [setUser]);\r\n\r\n return (\r\n <React.Fragment>\r\n {user && (\r\n <React.Fragment>\r\n <IdleHandlerConnected />\r\n {title != \"true\" ? <Header /> : null}\r\n {!systemError ? (\r\n <React.Fragment>\r\n {/*<InvoiceDataManager render={*/}\r\n {/* (*/}\r\n <PayerDetailsDataManager\r\n render={\r\n <div className={\"app-content\"}>\r\n <Switch>\r\n <Route path=\"/invoices\">\r\n <React.Fragment>\r\n <Switch>\r\n {canMakePayment && (\r\n <Route\r\n path={\"/invoices/pay\"}\r\n render={() => (\r\n <BasePageErrorBoundary>\r\n <PaymentPage />\r\n </BasePageErrorBoundary>\r\n )}\r\n />\r\n )}\r\n {canMakePayment && (\r\n <Route\r\n path={\"/invoices/processing-payment\"}\r\n render={() => (\r\n <BasePageErrorBoundary>\r\n <ProcessingPaymentPage />\r\n </BasePageErrorBoundary>\r\n )}\r\n />\r\n )}\r\n {canMakePayment && (\r\n <Route\r\n path={\"/invoices/payment-status\"}\r\n render={() => (\r\n <PaymentStatusErrorBoundary>\r\n <PaymentStatusPage />\r\n </PaymentStatusErrorBoundary>\r\n )}\r\n />\r\n )}\r\n <Route\r\n path={\"/invoices/detail/:billingDocumentNumber\"}\r\n render={() => (\r\n <BasePageErrorBoundary>\r\n <DetailPage />\r\n </BasePageErrorBoundary>\r\n )}\r\n />\r\n\r\n <Route\r\n path={\"/invoices\"}\r\n render={() => (\r\n <BasePageErrorBoundary>\r\n <InvoicePage />\r\n </BasePageErrorBoundary>\r\n )}\r\n />\r\n </Switch>\r\n </React.Fragment>\r\n </Route>\r\n <Route\r\n path={\"/invoice-history\"}\r\n render={() => (\r\n <BasePageErrorBoundary>\r\n <InvoiceSearch />\r\n </BasePageErrorBoundary>\r\n )}\r\n />\r\n <Route path=\"/deposits\">\r\n <React.Fragment>\r\n <Switch>\r\n <Route\r\n path={\"/deposits/payment-status\"}\r\n render={() => (\r\n <PaymentStatusErrorBoundary>\r\n <DepositPaymentStatusPage />\r\n </PaymentStatusErrorBoundary>\r\n )}\r\n />\r\n <Route\r\n path={\"/deposits/processing-payment\"}\r\n render={() => (\r\n <PaymentStatusErrorBoundary>\r\n <ProcessingDepositPage />\r\n </PaymentStatusErrorBoundary>\r\n )}\r\n />\r\n <Route\r\n path=\"/deposits\"\r\n render={() => (\r\n <BasePageErrorBoundary>\r\n <Deposits />\r\n </BasePageErrorBoundary>\r\n )}\r\n />\r\n </Switch>\r\n </React.Fragment>\r\n </Route>\r\n <Route\r\n path=\"/statements\"\r\n render={() => (\r\n <BasePageErrorBoundary>\r\n <Statements />\r\n </BasePageErrorBoundary>\r\n )}\r\n />\r\n <Route\r\n path=\"/help\"\r\n render={() => (\r\n <BasePageErrorBoundary>\r\n <Help />\r\n </BasePageErrorBoundary>\r\n )}\r\n />\r\n <Route path={\"/settings\"} component={SettingsPage} />\r\n <Route\r\n path={\"/auto-register/waiting-confirmation\"}\r\n component={AutoRegisterWaitingConfirmation}\r\n />\r\n <Route\r\n path={\"/\"}\r\n render={() => (\r\n <BasePageErrorBoundary>\r\n <InvoicePage />\r\n </BasePageErrorBoundary>\r\n )}\r\n />\r\n </Switch>\r\n </div>\r\n }\r\n />\r\n {/*)*/}\r\n {/*}/>*/}\r\n </React.Fragment>\r\n ) : (\r\n <React.Fragment>\r\n {\" \"}\r\n {/* we want to still be able to get to system settings even if user doesn't have SAP accounts setup. */}\r\n <Switch>\r\n {props.canEditSystemConfig && (\r\n <Route\r\n path={\"/settings/configuration\"}\r\n render={(props) => (\r\n <div className={\"settings-page\"}>\r\n <EditConfiguration />\r\n </div>\r\n )}\r\n />\r\n )}\r\n </Switch>\r\n </React.Fragment>\r\n )}\r\n <Footer />\r\n </React.Fragment>\r\n )}\r\n </React.Fragment>\r\n );\r\n}\r\n\r\nexport default withRouter(\r\n connect<any, any, any, any>(\r\n (state, props) => {\r\n return {\r\n selectedPrimaryAccount: getSelectedPrimaryAccount(state),\r\n isLoggedIn: state.user.isLoggedIn,\r\n sap: state.app.config.sap,\r\n canEditSystemConfig: canEditSystemConfig(state),\r\n };\r\n },\r\n {\r\n getUser,\r\n }\r\n )(BasePage)\r\n);\r\n","import React, {Component} from 'react';\r\nimport * as yup from 'yup';\r\nimport {BootstrapError, BootstrapField} from \"../../helpers/Field\";\r\nimport {Formik} from \"formik\";\r\nimport {Redirect} from \"react-router-dom\";\r\nimport { FormattedMessage } from \"react-intl\";\r\n\r\nconst schema = yup.object().shape({\r\n password: yup.string().required('Password required.'),\r\n confirmPassword: yup.string()\r\n .oneOf([yup.ref('password'), null], 'Passwords do not match').required(\"Confirm password required.\"),\r\n});\r\n\r\nclass Register extends Component<any, any> {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n complete: false,\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n <Formik\r\n initialValues={{\r\n password: '',\r\n confirmPassword: '',\r\n }}\r\n validationSchema={schema}\r\n onSubmit={(values, bag) => {\r\n bag.setSubmitting(true);\r\n this.props.completeRegistration(this.props.inviteId, values.password, values.confirmPassword).then(response => {\r\n bag.setSubmitting(false);\r\n this.setState({complete: true});\r\n });\r\n }}\r\n render={(props) =>\r\n <form onSubmit={props.handleSubmit}>\r\n <div className={\"row\"}>\r\n {/*<div className=\"invoicesHeading\">*/}\r\n {/* <label> <FormattedMessage id={\"register.create_own_password\"}/></label>*/}\r\n {/*</div>*/}\r\n <div className=\"form-group\">\r\n <FormattedMessage id={\"register.type_confirm_password\"}/>\r\n </div>\r\n <div className=\"col-12\">\r\n <div className=\"form-group\">\r\n <label><FormattedMessage id={\"password\"}/></label>\r\n <BootstrapField name={\"password\"} type={\"password\"}/>\r\n <BootstrapError name={\"password\"}/>\r\n </div>\r\n <div className=\"form-group\">\r\n <label> <FormattedMessage id={\"register.confirm_password\"}/></label>\r\n <BootstrapField name={\"confirmPassword\"} type={\"password\"}/>\r\n <BootstrapError name={\"confirmPassword\"}/>\r\n </div>\r\n <div>\r\n <button type={\"submit\"} className={\"btn btn-primary buttonColor buttonsize\"}><FormattedMessage id={\"register.finish\"}/></button>\r\n </div>\r\n </div>\r\n {this.state.complete && <Redirect to={\"/login\"}/>}\r\n </div>\r\n </form>\r\n }\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default Register;\r\n","import React, {Component} from 'react';\r\nimport Register from \"./Register\";\r\nimport {completeRegistration} from \"../../requests/UserRequests\";\r\n\r\nclass RegisterPage extends Component<any, any> {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n userNotFound: false,\r\n user: null\r\n }\r\n }\r\n\r\n\r\n componentDidMount() {\r\n this.props.getUserByInvite(this.props.invite).then((user) => {\r\n this.setState({user: user});\r\n }).catch(() => {\r\n this.setState({userNotFound: true});\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <div className={\"container mt-5\"}>\r\n <div className=\"row\">\r\n <div className=\"col-xl-4 col-lg-4 col-md-6 col-sm-12 mx-auto\">\r\n <div className=\"card\">\r\n {this.state.user && <Register completeRegistration={completeRegistration} inviteId={this.props.invite}/>}\r\n {this.state.userNotFound && <div>\r\n <h1>Invalid invite token.</h1> \r\n </div>}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default RegisterPage;\r\n","import React, {Component} from 'react';\r\nimport {BootstrapField, BootstrapError} from \"../../helpers/Field\";\r\nimport * as yup from 'yup';\r\nimport {Formik} from \"formik\";\r\nimport {passwordResetRequest} from \"../../requests/UserRequests\";\r\nimport BackToLogin from \"../BackToLogin\";\r\nimport SimpleHeader from \"../header/SimpleHeader\";\r\nimport { Footer } from \"../footer/Footer\";\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\n\r\nclass ResetPasswordPage extends Component<any, any> {\r\n \r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n message: null,\r\n }\r\n }\r\n\r\n render() {\r\n \r\n return (\r\n <React.Fragment>\r\n <SimpleHeader/>\r\n <div className={\"container mt-5\"}>\r\n <div className=\"row\">\r\n <div className=\"col-xl-4 col-lg-4 col-md-6 col-sm-12 mx-auto\">\r\n {!this.state.message && <React.Fragment>\r\n <div className=\"card\">\r\n <Formik\r\n initialValues={{}}\r\n validationSchema={yup.object().shape({email: yup.string().email().required()})}\r\n onSubmit={(values, bag) => {\r\n passwordResetRequest(values).then((message) => {\r\n this.setState({message});\r\n })\r\n }}\r\n render={props =>\r\n <form onSubmit={props.handleSubmit}>\r\n <div className={\"form-group\"}>\r\n <label><FormattedMessage id={\"register.create_own_password\"} /></label>\r\n <FormattedMessage id=\"settings.account.email\" defaultMessage=\"email\">\r\n {(placeholder) => (<BootstrapField placeholder={placeholder} name=\"email\" type={\"email\"} />)}\r\n </FormattedMessage>\r\n {/*<BootstrapField name=\"email\" type={\"email\"} placeholder={intl.formatMessage({ id: \"invoice_export.sort\" })} />*/}\r\n <BootstrapError name={\"email\"}/>\r\n </div>\r\n <div>\r\n <button type={\"submit\"} className={\"btn btn-primary buttonColor buttonsize\"}> <FormattedMessage id={\"settings.account.reset_password\" }/>\r\n </button>\r\n </div>\r\n </form>\r\n }/>\r\n </div>\r\n <div className=\"row justify-content-center flex mt-3\">\r\n <BackToLogin/>\r\n </div>\r\n </React.Fragment>\r\n\r\n }\r\n {this.state.message && <React.Fragment>\r\n <div className=\"card\">\r\n {this.state.message}\r\n </div>\r\n <div className=\"row justify-content-center flex mt-3\">\r\n <BackToLogin/>\r\n </div>\r\n </React.Fragment>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <Footer/>\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nexport default ResetPasswordPage;\r\n","import React, {Component} from 'react';\r\nimport * as yup from 'yup';\r\nimport {BootstrapError, BootstrapField} from \"../../helpers/Field\";\r\nimport {Formik} from \"formik\";\r\nimport {Redirect} from \"react-router-dom\";\r\nimport { FormattedMessage } from \"react-intl\";\r\n\r\nconst schema = yup.object().shape({\r\n password: yup.string().required('Password required.'),\r\n confirmPassword: yup.string()\r\n .oneOf([yup.ref('password'), null], 'Passwords do not match').required(\"Confirm password required.\"),\r\n});\r\n\r\nclass ResetPasswordFinishForm extends Component<any, any> {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n complete: false,\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n <Formik\r\n initialValues={{password: '', confirmPassword: ''}}\r\n validationSchema={schema}\r\n onSubmit={(values, bag) => {\r\n bag.setSubmitting(true);\r\n this.props.onSubmit(this.props.id, values.password, values.confirmPassword).then(response => {\r\n bag.setSubmitting(false);\r\n this.setState({complete: true});\r\n });\r\n }}\r\n render={(props) =>\r\n <form onSubmit={props.handleSubmit}>\r\n <div className={\"row\"}>\r\n <div className=\"invoicesHeading\">\r\n <label> <FormattedMessage id={\"register.create_new_password\"} /></label>\r\n </div>\r\n <div className=\"form-group\">\r\n <FormattedMessage id={\"register.type_new_confirm_password\"} />\r\n </div>\r\n <div className=\"col-12\">\r\n\r\n <div className=\"form-group\">\r\n <label> <FormattedMessage id={\"edit_user.password_label\"} /></label>\r\n <BootstrapField name={\"password\"} type={\"password\"}/>\r\n <BootstrapError name={\"password\"}/>\r\n </div>\r\n <div className=\"form-group\">\r\n <label><FormattedMessage id={\"register.confirm_password\"} /></label>\r\n <BootstrapField name={\"confirmPassword\"} type={\"password\"}/>\r\n <BootstrapError name={\"confirmPassword\"}/>\r\n </div>\r\n <div>\r\n <button type={\"submit\"} className={\"btn btn-primary buttonColor buttonsize\"}><FormattedMessage id={\"settings.account.reset_password\"} /></button>\r\n </div>\r\n </div>\r\n {this.state.complete && <Redirect to={\"/login\"}/>}\r\n </div>\r\n </form>\r\n }\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default ResetPasswordFinishForm;\r\n","import React, {Component} from 'react';\r\nimport {completePasswordReset} from \"../../requests/UserRequests\";\r\nimport ResetPasswordFinishForm from \"./ResetPasswordFinishForm\";\r\nimport SimpleHeader from \"../header/SimpleHeader\";\r\nimport { Footer } from \"../footer/Footer\";\r\nimport { FormattedMessage, useIntl } from \"react-intl\";\r\n\r\nclass ResetPasswordFinishPage extends Component<any, any> {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n userNotFound: false,\r\n user: null\r\n }\r\n }\r\n\r\n\r\n componentDidMount() {\r\n this.props.getUserByPasswordReset(this.props.passwordReset).then((user) => {\r\n this.setState({user: user});\r\n }).catch(() => {\r\n this.setState({userNotFound: true});\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <SimpleHeader/>\r\n <div className={\"container mt-5\"}>\r\n <div className=\"row\">\r\n <div className=\"col-xl-4 col-lg-4 col-md-6 col-sm-12 mx-auto\">\r\n <div className=\"card\">\r\n {this.state.user &&\r\n <ResetPasswordFinishForm onSubmit={completePasswordReset} id={this.props.passwordReset}/>}\r\n {this.state.userNotFound && <div>\r\n <div className=\"invoice-currency-warning\">\r\n <FormattedMessage id={\"ResetPassword.ErrorMessage\"}></FormattedMessage>\r\n \r\n </div>\r\n </div>}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <Footer/>\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nexport default ResetPasswordFinishPage;\r\n","import {Component} from 'react';\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {setLastUrl} from \"../actions/UserActions\";\r\nimport {connect} from 'react-redux';\r\n\r\nfunction isPublicUrl(path){\r\n let ignoreList = [\r\n \"^/login\",\r\n \"^/reset-password\",\r\n \"^/registration-request\",\r\n \"^/auto-register/create\",\r\n \"^/request-password-reset\",\r\n \"^/register\",\r\n ];\r\n \r\n let ignore = false;\r\n for(let i = 0; i < ignoreList.length; i++){\r\n let results = path.match(ignoreList[i]);\r\n if(results !== null){\r\n ignore = true;\r\n }\r\n }\r\n return ignore;\r\n}\r\n\r\nclass RouterListener extends Component<any, any> {\r\n componentDidMount() {\r\n if (!isPublicUrl(this.props.location.pathname)) {\r\n this.props.setLastUrl(this.props.location.pathname);\r\n }\r\n this.props.history.listen((e) => {\r\n if (!isPublicUrl(e.pathname)) {\r\n this.props.setLastUrl(e.pathname);\r\n }\r\n });\r\n }\r\n \r\n\r\n render() {\r\n return null;\r\n }\r\n}\r\n\r\nexport default withRouter(connect<any, any, any, any>(state => ({}), {\r\n setLastUrl,\r\n})(RouterListener));\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n logo: state.app.config.style.login_logo,\r\n }\r\n})(({logo, width, height}) => {\r\n if (logo === \"\") {\r\n return null;\r\n } else {\r\n return <img src={logo} alt={\"Company Logo\"} width={width} height={height}/>\r\n }\r\n }\r\n);","/* eslint-env browser */\r\n/* eslint-disable no-console */\r\nimport React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport LoginLogo from '../login/LoginLogo';\r\nimport Logo from \"../Logo\";\r\n\r\n\r\nexport default function SimpleHeaderMaintenanceLogin(props: any) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n return (\r\n\r\n\r\n <nav id=\"appHeader\" className=\" \">\r\n <div className='row m-4'>\r\n <div className='col-9' >\r\n\r\n <LoginLogo width={350} height={100} />\r\n\r\n </div>\r\n <div className='col epay-portal-title'>\r\n <span className=''><FormattedMessage id={\"site.maitanence_title\"}></FormattedMessage></span>\r\n </div>\r\n </div>\r\n </nav>\r\n )\r\n}\r\n\r\n\r\n\r\n","import 'react-activity/dist/react-activity.css';\r\nimport React, { Component, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport {withRouter} from \"react-router-dom\";\r\nimport { toast } from 'react-toastify';\r\nimport { login } from '../../../actions/UserActions';\r\nimport {AuthStatus} from \"../../../interfaces/AuthStatus\";\r\n//import * as validationTypes from '../../constants/ValidationConstants';\r\nimport * as validationTypes from '../../../constants/ValidationConstants';\r\nimport { Link } from 'react-router-dom';\r\nimport MaintenanceLoginRedirectHandler from \"./MaintenanceLoginRedirectHandler\";\r\nimport { Footer } from \"../../footer/Footer\";\r\n//import Title from \"./Title\";\r\n//import LoginLogo from \"./LoginLogo\";\r\n//import Logo from \"../Logo\";\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport SimpleHeaderMaintenanceLogin from \"../../header/SimpleHeaderMaintenanceLogin\";\r\n//header / SimpleHeader\";\r\n//const LoginSchema = Yup.object().shape({\r\n// email: Yup.string().email('Email is invalid').required('Email is required'),\r\n// password: Yup.string().min(6, 'Password must be at least 6 characters').required('Password is required'),\r\n//});\r\n\r\nconst MaintenanceLogin = (props: any) => {\r\n let [email, setEmail] = useState(\"\");\r\n let [password, setPassword] = useState(\"\");\r\n let t = useIntl();\r\n\r\n let onMaintenanceLogin = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n validateCredentials();\r\n }\r\n\r\n let validateCredentials = () => {\r\n if (email === null || password === null || email === '' || password === '') {\r\n toast.error(validationTypes.CREDENTIALS_REQUIRED, { position: toast.POSITION.TOP_RIGHT });\r\n } else {\r\n props.login(email, password).then(()=> {}).catch((error) => {});\r\n }\r\n }\r\n\r\n let backgroundClasses = \"\";\r\n //if (props.useBackground) {\r\n // backgroundClasses += \" login-background\";\r\n //}\r\n return (\r\n\r\n <React.Fragment>\r\n <SimpleHeaderMaintenanceLogin/>\r\n <div > \r\n <div className={\"row align-items-center Maintenance-login-row\"}>\r\n <div className=\"col-xl-3 col-lg-4 col-md-6 col-sm-12 mx-auto login-area mt-3\"> \r\n <div className=\"row\">\r\n <div className={\"col\"}>\r\n <form action=\"\" id=\"loginForm\" onSubmit={onMaintenanceLogin}> {/*onSubmit={onLogin}*/}\r\n <div className=\"form-group mt-3\">\r\n <input type=\"text\" className=\"form-control control-border\" name=\"email\" placeholder={t.formatMessage({id: \"Email\"})}\r\n onChange={e => setEmail(e.target.value)} autoCapitalize=\"none\" autoCorrect=\"off\"/>\r\n </div>\r\n <div className=\"form-group\">\r\n <input type=\"password\" className=\"form-control control-border\" name=\"password\" placeholder={t.formatMessage({id:\"password\"})}\r\n onChange={e => setPassword(e.target.value)}/>\r\n </div>\r\n <div className=\"form-group\">\r\n <button type=\"submit\"\r\n className=\"btn btn-primary buttonColor buttonsize form-control control-border button-class\"> <FormattedMessage id={\"site.login\"} />\r\n </button>\r\n </div> \r\n <br/>\r\n <br/> \r\n </form>\r\n </div>\r\n {/*props.authStatus === AuthStatus.Authenticated && <MaintenanceLoginRedirectHandler/>*/}\r\n <Footer/>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div className={\"logo-bottom-right\"}>\r\n {/* <Logo width={\"80\"}/>*/}\r\n </div> \r\n </div>\r\n </React.Fragment>\r\n );\r\n}\r\n//}\r\n\r\nexport default withRouter(connect<any, any, any, any>((store,props) => ({\r\n isLoggedIn: store.user.isLoggedIn,\r\n useBackground: store.app.config.style.login_use_background_image,\r\n authStatus: store.user.authStatus,\r\n}), {\r\n login,\r\n})(MaintenanceLogin));\r\n","import React from 'react';\r\nimport {\r\n injectIntl,\r\n} from 'react-intl';\r\n\r\nexport default injectIntl(({intl}) => {\r\n document.title = intl.formatMessage({id: \"title\"});\r\n return null;\r\n});\r\n","import React from 'react';\r\nimport { Formik } from \"formik\";\r\nimport { BootstrapError, BootstrapField } from \"../../../helpers/Field\";\r\nimport * as yup from 'yup';\r\nimport { registerUser } from \"../../../requests/UserRequests\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport axios from \"../../../axios\";\r\nimport { connect } from \"react-redux\";\r\nimport { AuthStatus } from \"../../../interfaces/AuthStatus\";\r\nimport { setAuthStatus } from \"../../../actions/UserActions\";\r\nimport { useState } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\n\r\nconst schema = yup.object().shape({\r\n email: yup.string().email(\"Enter valid email.\").required(\"Email Required.\"),\r\n first_name: yup.string().required(\"First Name Required.\"),\r\n last_name: yup.string().required(\"Last Name Required.\"),\r\n company: yup.string().required(\"Company Required.\"),\r\n password: yup.string().required(\"Password Required.\"),\r\n verify_password: yup.string().required(\"Passwords must match.\"),\r\n});\r\n\r\n\r\nfunction RegistrationRequestForm(props) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n let [errorMessage, setErrorMessage] = useState(null);\r\n const history = useHistory();\r\n return (\r\n <div>\r\n <Formik\r\n initialValues={{}}\r\n validationSchema={schema}\r\n onSubmit={(formProps, bag) => {\r\n\r\n registerUser(formProps).then((response) => {\r\n if (!response.user.isConfirmed) { \r\n history.push(\"/auto-register/confirm-instructions\");\r\n }\r\n else {\r\n sessionStorage.setItem('token', response.token);\r\n sessionStorage.setItem('refreshToken', response.refreshToken);\r\n axios.instance.defaults.headers.common['Authorization'] = `Bearer ${response.token}`;\r\n props.setAuthStatus(AuthStatus.Authenticated); \r\n history.push(\"/invoices\"); \r\n sessionStorage.removeItem(\"_registerToken\");\r\n } \r\n }).catch(error => {\r\n setErrorMessage(error.response.data.message);\r\n });\r\n }}\r\n render={props =>\r\n <div className=\"card\">\r\n <form onSubmit={props.handleSubmit}>\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n {errorMessage && <p className={\"text-danger\"}>{errorMessage}</p>}\r\n <div className=\"form-group\">\r\n <label>{f(\"edit_user.email_label\")}</label>\r\n <BootstrapField type={\"email\"} name={\"email\"} />\r\n <BootstrapError name={\"email\"} />\r\n </div>\r\n <div className=\"form-group\">\r\n <label>{f(\"edit_user.first_name_label\")}</label>\r\n <BootstrapField type={\"text\"} name={\"first_name\"} />\r\n <BootstrapError name={\"first_name\"} />\r\n </div>\r\n <div className=\"form-group\">\r\n <label>{f(\"edit_user.last_name_label\")}</label>\r\n <BootstrapField type={\"text\"} name={\"last_name\"} />\r\n <BootstrapError name={\"last_name\"} />\r\n </div>\r\n <div className=\"form-group\">\r\n <label>{f(\"edit_user.company_label\")}</label>\r\n <BootstrapField type={\"text\"} name={\"company\"} />\r\n <BootstrapError name={\"company\"} />\r\n </div>\r\n <div className=\"form-group\">\r\n <label>{f(\"edit_user.password_label\")}</label>\r\n <BootstrapField type={\"password\"} name={\"password\"} />\r\n <BootstrapError name={\"password\"} />\r\n </div>\r\n <div className=\"form-group\">\r\n <label>{f(\"edit_user.verify_password\")}</label>\r\n <BootstrapField type={\"password\"} name={\"verify_password\"} />\r\n <BootstrapError name={\"verify_password\"} />\r\n </div>\r\n <div className={\"form-group\"}>\r\n <button type={\"submit\"} className={\"btn btn-primary buttonColor buttonsize\"}>{f(\"edit_user.next\")}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n } />\r\n </div>\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>(() => { }, {\r\n setAuthStatus,\r\n})(RegistrationRequestForm);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport RegisterForm from \"./RegisterForm\";\r\nimport AutoLinkAccount from \"./AutoLinkAccount\";\r\nimport AutoLinkAccountSuccess from \"./AutoLinkAccountSuccess\";\r\nimport AutoLinkAccountError from \"./AutoLinkAccountError\";\r\nimport {Footer} from \"../../footer/Footer\";\r\nimport SimpleHeader from \"../../header/SimpleHeader\";\r\nimport {Link} from \"react-router-dom\";\r\nimport BackToLogin from \"../../BackToLogin\";\r\n\r\nfunction mapStateToProps(state) {\r\n return {};\r\n}\r\n\r\nclass AutoRegisterPage extends Component<any, any> {\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <SimpleHeader/>\r\n <div className={\"container mt-5\"}>\r\n <div className=\"row\">\r\n <div className=\"col-xl-6 col-lg-6 col-md-6 col-sm-12 mx-auto\">\r\n <RegisterForm/>\r\n </div>\r\n </div>\r\n <div className=\"row justify-content-center flex mt-3\">\r\n <BackToLogin/>\r\n </div>\r\n </div>\r\n \r\n <Footer/>\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nexport default connect<any, any, any, any>(\r\n mapStateToProps,\r\n)(AutoRegisterPage);","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Footer } from \"../../footer/Footer\";\r\nimport SimpleHeader from \"../../header/SimpleHeader\";\r\nimport BackToLogin from \"../../BackToLogin\";\r\n\r\nfunction mapStateToProps(state) {\r\n return {};\r\n}\r\n\r\nclass AutoRegisterConfirmInstructions extends Component<any, any> {\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <SimpleHeader />\r\n <div className={\"container mt-5\"}>\r\n <div className=\"row mt-4\">\r\n <div className=\"col-xl-6 col-lg-6 col-md-6 col-sm-12 mx-auto\">\r\n <div className=\"card\">\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <p>\r\n You should receive a confirmation email shortly.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row justify-content-center flex mt-3\">\r\n <BackToLogin />\r\n </div>\r\n </div>\r\n <Footer />\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nexport default connect<any, any, any, any>(\r\n mapStateToProps,\r\n)(AutoRegisterConfirmInstructions);","import React, {useEffect, useState} from 'react';\r\n\r\nfunction PromiseComponent<T>(props: PromiseComponentProps<T>) {\r\n\r\n let [status, setStatus] = useState(\"waiting\");\r\n let [value, setValue] = useState(null);\r\n\r\n useEffect(() => {\r\n if (props.promise) {\r\n setStatus(\"waiting\");\r\n props.promise.then((result) => {\r\n setStatus(\"complete\");\r\n setValue(value);\r\n return result;\r\n }).catch((error) => {\r\n setStatus(\"error\");\r\n setValue(error);\r\n });\r\n }\r\n }, [\r\n props.promise\r\n ]);\r\n\r\n\r\n return (\r\n <React.Fragment>\r\n {status === \"complete\" && props.then(value)}\r\n {status === \"error\" && props.catch && props.catch(value)}\r\n {status === \"waiting\" && props.wait && props.wait(value)}\r\n </React.Fragment>\r\n );\r\n}\r\n\r\ninterface PromiseComponentProps<T> {\r\n promise: Promise<T>,\r\n then: (T) => any,\r\n catch: (T) => any,\r\n wait: (T) => any,\r\n}\r\n\r\n\r\nexport default PromiseComponent;","import React, {Component, useEffect, useState} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport RegisterForm from \"./RegisterForm\";\r\nimport AutoLinkAccount from \"./AutoLinkAccount\";\r\nimport PromiseComponent from \"../../../common/PromiseComponent\";\r\nimport {Link, withRouter} from \"react-router-dom\";\r\nimport {confirmAccount} from \"../../../requests/UserRequests\";\r\n\r\nfunction mapStateToProps(state) {\r\n return {};\r\n}\r\n\r\nfunction AutoRegisterConfirm(props) {\r\n let [confirm, setConfirm] = useState<any>(null);\r\n useEffect(() => {\r\n setConfirm(confirmAccount(props.match.params.token));\r\n }, []);\r\n\r\n return (\r\n <div className={\"container mt-5\"}>\r\n <div className=\"row\">\r\n <div className=\"col-xl-6 col-lg-6 col-md-6 col-sm-12 mx-auto\">\r\n <PromiseComponent promise={confirm}\r\n then={() => (<div className={\"card\"}>\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <p>Successfully confirmed your account.</p>\r\n <Link className={\"btn btn-primary buttonColor buttonsize\"}\r\n to={\"/login\"}>Continue to Login</Link>\r\n </div>\r\n </div>\r\n </div>)}\r\n catch={(resp) => {\r\n const message = resp?.response?.data ?? \"Could not validate account.\"\r\n return(\r\n <div className={\"card\"}>\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <p>{message}</p>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n wait={() => (<div></div>)}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default withRouter(connect<any, any, any, any>(\r\n mapStateToProps,\r\n)(AutoRegisterConfirm));","import React from 'react';\r\nimport * as yup from 'yup';\r\nimport { FormattedDate, FormattedMessage, useIntl } from \"react-intl\";\r\n\r\nconst schema = yup.object().shape({\r\n invoiceNumber: yup.string().required(\"Invoice number is required.\"),\r\n invoiceAmount: yup.number().required(\"Invoice amount is required.\"),\r\n accountNumber: yup.string().required(\"Account number is required.\"),\r\n});\r\n\r\nfunction AutoLinkAccountSuccess(props) {\r\n let address = \"1234 Road Road\";\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n if(props.invoice) {\r\n let invoice = props.invoice;\r\n \r\n return (\r\n <div className=\"card\">\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <strong>{f(\"success\")}</strong>\r\n <p>\r\n {invoice.name}<br/>\r\n {invoice.street}<br />\r\n {invoice.city}, {invoice.state} {invoice.postalCode} {invoice.country}<br />\r\n </p>\r\n <button type={\"submit\"} onClick={props.onClear} className={\"btn btn-primary buttonColor buttonsize\"}>{f(\"link_account.add_another_account\")}</button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\n\r\nexport default AutoLinkAccountSuccess;\r\n","import React, {Component, useContext, useState} from 'react';\r\nimport * as yup from 'yup';\r\nimport {InvoicesContext} from \"../../invoice/InvoiceDataManager\";\r\nimport { FormattedDate, FormattedMessage, useIntl } from \"react-intl\";\r\n\r\nconst schema = yup.object().shape({\r\n invoiceNumber: yup.string().required(\"Invoice number is required.\"),\r\n invoiceAmount: yup.number().required(\"Invoice amount is required.\"),\r\n accountNumber: yup.string().required(\"Account number is required.\"),\r\n});\r\n\r\nfunction AutoLinkAccountForm(props) {\r\n\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n let [requestComplete, setRequestComplete] = useState(false);\r\n const invoicesContext = useContext(InvoicesContext);\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <p><strong>Error</strong> - {props.message}</p>\r\n <button type={\"submit\"} className={\"btn btn-primary buttonColor buttonsize\"} onClick={props.onClear}>{f(\"register.try_again\")}</button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AutoLinkAccountForm;\r\n","import React, {useContext, useState} from 'react';\r\nimport {Formik} from \"formik\";\r\nimport {BootstrapError, BootstrapField} from \"../../../helpers/Field\";\r\nimport * as yup from 'yup';\r\nimport {InvoicesContext} from \"../../invoice/InvoiceDataManager\";\r\nimport {validateAccount} from \"../../../requests/UserRequests\";\r\nimport { IntlShape, useIntl } from 'react-intl';\r\n\r\nfunction schema(t: IntlShape) {\r\n return yup.object().shape({\r\n invoiceNumber: yup.string()\r\n .required(t.formatMessage({ id: \"errors.invoice.required\" })),\r\n invoiceAmount: yup.string()\r\n .test('amount_validation', t.formatMessage({ id: \"errors.invalid_amount\" }),\r\n (value) => {\r\n if (!value) {\r\n return true\r\n }\r\n // Convert number to string and check the format\r\n\r\n return /^-?\\d+(\\.\\d{2})?$/.test(value);\r\n }\r\n )\r\n .required(t.formatMessage({ id: \"errors.amount.required\" })),\r\n\r\n accountNumber: yup.string()\r\n .matches(/^[a-zA-Z0-9]*$/, t.formatMessage({ id: \"errors.invalid_characters\" }))\r\n .required(t.formatMessage({ id: \"errors.account.required\" })),\r\n registerToken: yup.string()\r\n })\r\n}\r\n\r\n\r\nfunction AutoLinkAccountForm(props) {\r\n let [requestComplete, setRequestComplete] = useState(false);\r\n const invoicesContext = useContext(InvoicesContext);\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n return (\r\n <div>\r\n {!requestComplete && <Formik\r\n initialValues={{\r\n registerToken: \"\"\r\n }}\r\n validationSchema={schema(intl)}\r\n onSubmit={(formProps, bag) => {\r\n formProps.registerToken = sessionStorage.getItem(\"_registerToken\") ?? \"\"\r\n validateAccount(formProps).then(response => {\r\n sessionStorage.setItem(\"_registerToken\", response.token)\r\n props.onSuccess(response.invoice);\r\n }).catch((error) => {\r\n if (error.response?.data?.token) {\r\n sessionStorage.setItem(\"_registerToken\", error.response?.data?.token)\r\n }\r\n if (error.response.status === 404) {\r\n props.onError(f(\"account.error_no_account_found\"))\r\n } else {\r\n if (error.response.data.key === \"duplicate\") {\r\n props.onError(f(\"account.error.already_added\"))\r\n } else {\r\n props.onError(f(\"account.error.too_many_attempts\"))\r\n }\r\n }\r\n });\r\n }}\r\n render={formProps =>\r\n <div className=\"card\">\r\n <p>{f(\"account.header_message\")}</p>\r\n <form onSubmit={formProps.handleSubmit}>\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <div className=\"form-group\">\r\n <label>{f(\"account.billto_number\")}</label>\r\n <BootstrapField type={\"text\"} name={\"accountNumber\"}/>\r\n <BootstrapError name={\"accountNumber\"}/>\r\n </div>\r\n <div className=\"form-group\">\r\n <label>{f(\"invoice_search.search_options.invoice_number\")}</label>\r\n <BootstrapField type={\"text\"} name={\"invoiceNumber\"} maxLength={10} />\r\n <BootstrapError name={\"invoiceNumber\"}/>\r\n </div>\r\n <div className=\"form-group\">\r\n <label> {f(\"account.invoice_amount_label\")}</label>\r\n <BootstrapField type={\"text\"} name={\"invoiceAmount\"}/>\r\n <BootstrapError name={\"invoiceAmount\"}/>\r\n </div>\r\n <div className={\"form-group\"}>\r\n <button type={\"submit\"} className={\"btn btn-primary buttonColor buttonsize\"}>{f(\"settings.user.linked_account_add_button\")}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n }/>}\r\n {requestComplete && <React.Fragment>\r\n <div className=\"card\">\r\n <div>\r\n {f(\"account.request_message\")}\r\n </div>\r\n </div>\r\n\r\n </React.Fragment>\r\n }\r\n </div>\r\n );\r\n}\r\n\r\nexport default AutoLinkAccountForm;\r\n","import React, {useState} from 'react';\r\nimport AutoLinkAccountSuccess from \"./AutoLinkAccountSuccess\";\r\nimport AutoLinkAccountError from \"./AutoLinkAccountError\";\r\nimport AutoLinkAccountForm from \"./AutoLinkAccountForm\";\r\n\r\n\r\n\r\nfunction AutoLinkAccount(props) {\r\n let [status, setStatus] = useState(\"form\");\r\n let [invoice, setInvoice] = useState(null);\r\n let [errorMessage, setErrorMessage] = useState(\"\");\r\n\r\n return (\r\n <div>\r\n {status === \"success\" && <AutoLinkAccountSuccess invoice={invoice} onClear={() => {\r\n setStatus(\"form\");\r\n setInvoice(null);\r\n }}/>}\r\n {status === \"error\" && <AutoLinkAccountError onClear={() => {\r\n setStatus(\"form\");\r\n setInvoice(null);\r\n }} message={errorMessage}/>}\r\n {status === \"form\" && <AutoLinkAccountForm\r\n onSuccess={(invoice) => {\r\n setStatus(\"success\");\r\n setInvoice(invoice);\r\n props.onAccountAdded();\r\n }}\r\n onError={(message) => {\r\n setStatus(\"error\");\r\n setErrorMessage(message);\r\n }}\r\n />\r\n }\r\n </div>\r\n );\r\n}\r\nexport default AutoLinkAccount;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport AutoLinkAccount from \"./AutoLinkAccount\";\r\nimport List from \"@material-ui/core/List\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport { getRegistrationAccount } from \"../../../requests/UserRequests\";\r\nimport { trimLeadingZeroes } from \"../../../utils\";\r\nimport { Link, useHistory } from \"react-router-dom\";\r\nimport { Footer } from \"../../footer/Footer\";\r\nimport SimpleHeader from \"../../header/SimpleHeader\";\r\nimport BackToLogin from \"../../BackToLogin\";\r\nimport { useIntl } from \"react-intl\";\r\n\r\nfunction mapStateToProps(state) {\r\n return {};\r\n}\r\n\r\nfunction AutoRegisterPage(props) {\r\n const intl = useIntl();\r\n const f = id => intl.formatMessage({ id: id });\r\n let [accounts, setAccounts] = useState<any[]>([]);\r\n const history = useHistory();\r\n\r\n function updateAccounts() {\r\n const token = sessionStorage.getItem(\"_registerToken\") ?? \"\"\r\n\r\n getRegistrationAccount(token).then((response) => {\r\n \r\n setAccounts(response)\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n updateAccounts();\r\n }, []);\r\n\r\n function createAccount() {\r\n history.push(\"/auto-register/create\");\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n <SimpleHeader />\r\n <div className={\"container mt-5\"}>\r\n <div className=\"row mt-4\">\r\n <div className=\"col-xl-6 col-lg-6 col-md-6 col-sm-12 mx-auto\">\r\n {accounts.length < 4 && <AutoLinkAccount onAccountAdded={updateAccounts} />}\r\n {accounts.length >= 4 && <div className=\"card\">\r\n <p>{f(\"register.max_no_of_accounts\")}</p>\r\n </div>\r\n }\r\n </div>\r\n <div className=\"col-xl-6 col-lg-6 col-md-6 col-sm-12 mx-auto\">\r\n <div className=\"card\">\r\n <div className=\"row\">\r\n <div className={\"col-12\"}>\r\n <p><strong>{f(\"register.accounts\")}</strong></p>\r\n {accounts.length === 0 && <p>{f(\"register.no_account_yet\")}</p>\r\n }\r\n <List>\r\n {accounts.map(a => {\r\n \r\n return (<React.Fragment>\r\n <ListItem>\r\n <ListItemText primary={`${a.name} - ${trimLeadingZeroes(a.accountId)}`} />\r\n </ListItem>\r\n <Divider />\r\n </React.Fragment>)\r\n })}\r\n </List>\r\n {accounts.length === 0 ?\r\n <button disabled={true} className={\"btn buttonsize buttonColor btnPay\"} >{f(\"register.continue\")}</button>\r\n :\r\n <button disabled={accounts.length === 0} className={\"btn btn-primary buttonsize buttonColor btnPay\"} onClick={createAccount}\r\n >{f(\"register.continue\")}</button>\r\n }\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row justify-content-center flex mt-3\">\r\n <BackToLogin />\r\n </div>\r\n </div>\r\n\r\n <Footer />\r\n </React.Fragment>\r\n );\r\n}\r\n\r\nexport default connect<any, any, any, any>((state, props) => {\r\n return {\r\n isLoggedIn: state.user.isLoggedIn,\r\n }\r\n})(AutoRegisterPage);\r\n","import React, {useEffect} from \"react\";\r\nimport {Logout} from \"../actions/UserActions\";\r\nimport {connect} from \"react-redux\";\r\n\r\nfunction SystemError(props) {\r\n useEffect(() => {\r\n props.logout();\r\n }, []);\r\n\r\n return (<div className={\"container\"}>\r\n <div className={\"row justify-content-md-center mt-5\"}>\r\n <div className={\"col-6\"}>\r\n <h4>There was an error with the system.<br/>Please try again later.</h4>\r\n </div>\r\n </div>\r\n </div>);\r\n}\r\n\r\nexport default connect<any, any, any, any>(() => {\r\n}, {logout: Logout})(SystemError);\r\n\r\n","import * as React from \"react\";\r\nimport {Component} from \"react\";\r\n\r\nexport default class SiteErrorBoundary extends Component<any, any> {\r\n constructor(props) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError(error) {\r\n // Update state so the next render will show the fallback UI.\r\n return { hasError: true };\r\n }\r\n\r\n componentDidCatch(error, info) {\r\n // You can also log the error to an error reporting service\r\n }\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n return <div className={\"container\"}><h4>Something is wrong with the site. Please try again later.</h4></div>;\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}","import {\r\n \r\n createTheme \r\n} from '@material-ui/core/styles';\r\n\r\ndeclare module '@material-ui/core/styles/createTheme' {\r\n interface Theme {\r\n status: {\r\n danger: string;\r\n };\r\n }\r\n // allow configuration using `createMuiTheme`\r\n interface ThemeOptions {\r\n status?: {\r\n danger?: string;\r\n };\r\n }\r\n}\r\n\r\nexport const defaultTheme = createTheme ({\r\n typography:{\r\n }\r\n});\r\n","import axios from 'axios'\r\nimport React, {Component, useEffect, useState} from 'react';\r\nimport {BrowserRouter, Route, Switch} from 'react-router-dom';\r\nimport {ToastContainer} from 'react-toastify';\r\nimport {Spinner} from 'react-activity';\r\nimport {connect} from 'react-redux';\r\nimport Login from './components/login/Login';\r\nimport BasePage from \"./components/BasePage\";\r\nimport RegisterPage from \"./components/register/RegisterPage\";\r\nimport {getUserByInvite, getUserByPasswordReset} from \"./requests/UserRequests\";\r\nimport RegistrationRequestPage from \"./components/register/RegistrationRequestPage\";\r\nimport ResetPasswordPage from \"./components/reset-password-page/ResetPasswordPage\";\r\nimport ResetPasswordFinishPage from \"./components/reset-password-page/ResetPasswordFinishPage\";\r\nimport RouterListener from \"./components/RouterListener\";\r\nimport './components/layout/Layout.scss';\r\nimport {IntlProvider} from \"react-intl\";\r\nimport {\r\n ThemeProvider,\r\n} from '@material-ui/core/styles';\r\n\r\nimport MaintenanceLogin from './components/Maintenance/MaintenanceLogin/MaintenanceLogin';\r\nimport SystemMaintenance from './components/Maintenance/MaintenanceLogin/SystemMaintenance';\r\n\r\n//fontawesome\r\nimport {library as faLibrary} from '@fortawesome/fontawesome-svg-core'\r\nimport {faMoneyCheck} from '@fortawesome/free-solid-svg-icons'\r\nimport {getAppConfiguration, getIsBlackoutActive, getBlackoutConfig} from \"./requests/ConfigRequests\";\r\nimport {setConfig} from \"./reducers/AppReducer\";\r\nimport DocumentTitle from \"./DocumentTitle\";\r\nimport AutoRegisterPage from \"./components/register/auto-register/AutoRegisterPage\";\r\nimport AutoRegisterConfirmInstructions from \"./components/register/auto-register/AutoRegisterConfirmInstructions\";\r\nimport AutoRegisterConfirm from \"./components/register/auto-register/AutoRegisterConfirm\";\r\nimport AutoRegisterAccounts from \"./components/register/auto-register/AutoRegisterAccounts\";\r\nimport AutoRegisterWaitingConfirmation from \"./components/register/auto-register/AutoRegisterWaitingConfirmation\";\r\nimport SystemError from \"./components/SystemError\";\r\nimport SiteErrorBoundary from \"./error-boundaries/SiteErrorBoundary\";\r\nimport {AuthStatus} from \"./interfaces/AuthStatus\";\r\nimport {setAuthStatus, setIsBlackoutActive} from \"./actions/UserActions\";\r\nimport {setToken, checkStatus, parseJson, returnNull} from \"./fetch\";\r\nimport {defaultTheme} from \"./theme/default\";\r\nimport {useParams} from \"react-router-dom\";\r\nimport {isStringNotEmptyOrNull} from \"./utils\";\r\nimport {clearSessionStorage} from \"./reducers/RootReducer\";\r\n\r\nfaLibrary.add(faMoneyCheck);\r\n\r\ndeclare global {\r\n interface Window {\r\n gigya: any;\r\n }\r\n}\r\n\r\ninterface LanguageMessages {\r\n [language: string]: { [key: string]: string }\r\n}\r\n\r\nfunction buildMessages(allMessages: LanguageMessages, language: string, country: string) {\r\n let messages: { [key: string]: string } = {};\r\n if (language == \"\") {\r\n language = \"en\";\r\n }\r\n let defaultMessages = allMessages[\"xx\"] ?? {};\r\n messages = Object.assign(messages, defaultMessages);\r\n let languageMessages = allMessages[language] ?? {};\r\n messages = Object.assign(messages, languageMessages);\r\n if (country !== \"\") {\r\n let countryMessages = allMessages[\"xx-\" + country] ?? {};\r\n messages = Object.assign(messages, countryMessages);\r\n let languageCountryMessages = allMessages[language + \"-\" + country] ?? {};\r\n messages = Object.assign(messages, languageCountryMessages);\r\n } else {\r\n let countryMessages = allMessages[\"xx-\" + country] ?? {};\r\n messages = Object.assign(messages, countryMessages);\r\n }\r\n return messages;\r\n}\r\n\r\nfunction App(props) {\r\n\r\n let [forceRefresh, setForceRefresh] = useState(false);\r\n\r\n const fetchIsBlackoutActiveAsync = async () => {\r\n const blackoutConfig = await getBlackoutConfig();\r\n\r\n //const isBlackoutActive = await getIsBlackoutActive();\r\n let isBlackoutActive = await getIsBlackoutActive();\r\n props.setIsBlackoutActive(isBlackoutActive);\r\n\r\n if (isBlackoutActive && blackoutConfig) {\r\n const blackoutRedirectUrl = blackoutConfig.redirectUrl;\r\n\r\n if (blackoutRedirectUrl && blackoutRedirectUrl !== \"\") {\r\n window.location.href = blackoutRedirectUrl;\r\n }\r\n }\r\n };\r\n\r\n const executeAfterGigyaLoad = (results: any) => {\r\n props.setConfig(results[0]);\r\n\r\n if (results[1].data.isLoggedIn) {\r\n if (results[1].data.token) {\r\n clearSessionStorage();\r\n setToken(results[1].data.token, results[1].data.refreshToken);\r\n }\r\n props.setAuthStatus(AuthStatus.Authenticated);\r\n } else {\r\n props.setAuthStatus(AuthStatus.Unauthenticated);\r\n }\r\n }\r\n useEffect(() => {\r\n let configPromise = getAppConfiguration();\r\n let loginStatusPromise = axios.get<{ isLoggedIn: boolean, token: string, refreshToken: string }>(\"/api/login-status\");\r\n const apiKeyPromise = axios.get('/api/configuration/gigyaapikey')\r\n Promise.all([configPromise, loginStatusPromise, apiKeyPromise]).then((results) => {\r\n const apiKey = results[2].data;\r\n\r\n if (apiKey && !window.gigya && !document.getElementById('gigyaScriptEl')) {\r\n\r\n const scriptTag = document.createElement(\"script\");\r\n\r\n scriptTag.id = 'gigyaScriptEl';\r\n\r\n scriptTag.src = `https://cdns.us1.gigya.com/js/gigya.js?apikey=${apiKey}&lang=en_US`;\r\n\r\n scriptTag.async = false;\r\n\r\n scriptTag.onload = () => {\r\n executeAfterGigyaLoad(results)\r\n }\r\n\r\n document.head.appendChild(scriptTag);\r\n }\r\n else {\r\n executeAfterGigyaLoad(results)\r\n }\r\n });\r\n\r\n\r\n fetchIsBlackoutActiveAsync();\r\n\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (forceRefresh) {\r\n setForceRefresh(false);\r\n \r\n fetchIsBlackoutActiveAsync();\r\n }\r\n }, [forceRefresh]);\r\n\r\n function getLanguageMessages() {\r\n let messages = {};\r\n if (typeof props.config.languages !== \"undefined\") {\r\n messages = buildMessages(props.config.languages, props.language, props.country);\r\n }\r\n return messages;\r\n }\r\n\r\n let messages = getLanguageMessages();\r\n\r\n const isBlackoutActive = props.isBlackoutActive;\r\n\r\n if (forceRefresh === false && (isBlackoutActive === null || isBlackoutActive === undefined)) {\r\n setForceRefresh(true);\r\n }\r\n\r\n return (\r\n <SiteErrorBoundary>\r\n <ThemeProvider theme={defaultTheme}>\r\n\r\n <IntlProvider locale={props.language} messages={messages}>\r\n <BrowserRouter>\r\n <div>\r\n <RouterListener/>\r\n <ToastContainer/>\r\n <Spinner animating={props.animating > 0} size={50} className=\"centered\"/>\r\n {props.loginChecked && <DocumentTitle/>}\r\n {\r\n (() => {\r\n switch (props.authStatus) {\r\n case AuthStatus.Waiting:\r\n return <div/>;\r\n case AuthStatus.Authenticated:\r\n return <Switch>\r\n {isBlackoutActive && <Route path={\"/blackout\"} component={SystemMaintenance} />}\r\n {isBlackoutActive && <Route path={\"/\"} component={SystemMaintenance} />}\r\n\r\n {!isBlackoutActive && <Route path=\"/\" component={BasePage}/>}\r\n </Switch>;\r\n case AuthStatus.Failed:\r\n case AuthStatus.TimedOut:\r\n case AuthStatus.LoggedOut:\r\n case AuthStatus.Unauthenticated:\r\n return <Switch>\r\n\r\n {isBlackoutActive && <Route path={\"/login/admin\"} component={MaintenanceLogin} />}\r\n {!isBlackoutActive && <Route path={\"/login\"} component={Login} />}\r\n \r\n <Route path=\"/register/:token\" render={props =>\r\n <RegisterPage invite={props.match.params.token}\r\n getUserByInvite={getUserByInvite}/>\r\n }/>\r\n <Route path=\"/system-error\" render={props =>\r\n <SystemError/>\r\n }/>\r\n {/*<Route path=\"/registration-request\" render={props =>*/}\r\n {/* <RegistrationRequestPage/>*/}\r\n {/*}/>*/}\r\n <Route path=\"/auto-register/create\" render={props =>\r\n <AutoRegisterPage/>\r\n }/>\r\n <Route path=\"/request-password-reset\" render={props =>\r\n <ResetPasswordPage/>\r\n }/>\r\n <Route path=\"/reset-password/:id\" render={props =>\r\n <ResetPasswordFinishPage\r\n getUserByPasswordReset={getUserByPasswordReset}\r\n passwordReset={props.match.params.id}/>\r\n }/>\r\n <Route path=\"/auto-register/confirm-instructions\" render={props =>\r\n <AutoRegisterConfirmInstructions/>\r\n }/>\r\n <Route path=\"/auto-register/confirm/:token\" render={props =>\r\n <AutoRegisterConfirm/>\r\n }/>\r\n <Route path=\"/auto-register/waiting-confirmation\" render={props =>\r\n <AutoRegisterWaitingConfirmation/>\r\n }/>\r\n <Route path=\"/auto-register/accounts\" render={props =>\r\n <AutoRegisterAccounts/>\r\n }/>\r\n {isStringNotEmptyOrNull(process.env.REACT_APP_SSO_REDIRECT_URL as string) &&\r\n <Route path={\"/\"} render={props => {\r\n window.location.href = process.env.REACT_APP_SSO_REDIRECT_URL as string;\r\n return null;\r\n }}/>\r\n }\r\n {!isStringNotEmptyOrNull(process.env.REACT_APP_SSO_REDIRECT_URL as string) &&\r\n <Route path={\"/\"} component={Login}/>\r\n }\r\n </Switch>\r\n }\r\n })()\r\n }\r\n </div>\r\n </BrowserRouter>\r\n </IntlProvider>\r\n </ThemeProvider>\r\n </SiteErrorBoundary>\r\n );\r\n}\r\n\r\n\r\nexport default connect<any, any, any, any>(state => ({\r\n animating: state.default.animating,\r\n authStatus: state.user.authStatus,\r\n language: state.user.language,\r\n country: state.user.country,\r\n config: state.app.config,\r\n isBlackoutActive: state.user.isBlackoutActive,\r\n}), {\r\n setAuthStatus,\r\n setConfig,\r\n setIsBlackoutActive,\r\n})(App);\r\n","import 'react-app-polyfill/ie11';\r\nimport 'core-js/fn/array/find';\r\nimport 'core-js/fn/array/from';\r\nimport 'core-js/fn/array/map';\r\nimport 'core-js/fn/array/includes';\r\nimport 'core-js/fn/array/filter';\r\nimport 'core-js/fn/object/values';\r\nimport 'core-js/fn/object/keys';\r\nimport 'core-js/fn/array/some';\r\nimport 'core-js/fn/promise';\r\nimport 'core-js/fn/set';\r\nimport 'core-js/fn/string/starts-with';\r\nimport 'core-js/fn/number/is-nan';\r\nimport 'url-search-params-polyfill';\r\nimport React from 'react';\r\nimport './index.scss';\r\nimport ReactDOM from 'react-dom';\r\nimport {Provider} from 'react-redux';\r\nimport store from './store';\r\nimport App from './App';\r\n\r\n\r\n\r\nimport '@formatjs/intl-pluralrules/polyfill';\r\nimport '@formatjs/intl-pluralrules/locale-data/en';\r\nimport '@formatjs/intl-pluralrules/locale-data/fr';\r\n\r\nimport '@formatjs/intl-relativetimeformat/polyfill';\r\nimport '@formatjs/intl-relativetimeformat/locale-data/en';\r\nimport '@formatjs/intl-relativetimeformat/locale-data/fr';\r\n\r\n\r\n\r\nexport const Index = () => (\r\n <Provider store={store}>\r\n <App/>\r\n </Provider>\r\n);\r\n\r\nReactDOM.render(<Index/>, document.getElementById('root'));\r\n"],"sourceRoot":""}