{"version":3,"sources":["apis/index.ts","store/auth/auth.reducer.ts","store/automation/automation.reducer.ts","store/farms/farms.reducer.ts","store/ui/ui.reducer.ts","store/users/users.reducer.ts","store/utils/utils.reducer.ts","store/tasks/tasks.reducer.ts","store/subscription/subscription.reducer.ts","store/inventories/inventories.reducer.ts","store/extra/extra.reducer.ts","store/rootReducer.ts","store/index.ts","components/shared/CalendarIcon.tsx","components/shared/DollarIcon.tsx","components/shared/CaretDownIcon.tsx","components/shared/CaretUpIcon.tsx","components/shared/CloseIcon.tsx","components/shared/ErrorIcon.tsx","components/shared/WarningIcon.tsx","components/shared/paragrapgh/Paragrapgh.tsx","components/shared/RadioButton.tsx","components/shared/ToggleButton.tsx","components/shared/CheckboxButton.tsx","components/shared/button/Button.tsx","components/shared/dropdown/Dropdown.tsx","components/shared/feedback/Feedback.tsx","components/shared/input/Input.tsx","components/shared/subtitle/Subtitle.tsx","util/useWidth.ts","store/ui/ui.selector.ts","lib/lang.helper.ts","components/shared/modal/Modal.tsx","components/shared/title/Title.tsx","components/shared/CaretRight.tsx","components/shared/tabs/Tabs.tsx","components/shared/breadcrumb/Breadcrumb.tsx","components/shared/navbar/Navbar.tsx","components/shared/UserIcon.tsx","components/shared/SettingIcon.tsx","util/toggleSecondMillisecond.ts","lib/common.helpers.ts","components/shared/tooltip/Tooltip.tsx","components/shared/tag/Tag.tsx","components/shared/datepicker/Datepicker.tsx","components/shared/avatar/Avatar.tsx","store/ui/ui.actions.ts","components/shared/feedback/ModalFeedbackView.tsx","components/shared/modal/InputModal.tsx","components/shared/Pen.tsx","components/shared/Key.tsx","components/shared/CreditCard.tsx","components/shared/Plus.tsx","components/shared/DotsIcon.tsx","components/shared/Trash.tsx","components/shared/Check.tsx","components/shared/CaretMainIcon.tsx","components/shared/ShortArrow.tsx","components/shared/tables-card/InterestGrowth.tsx","components/shared/tables-card/TablesCard.tsx","components/shared/tables/useMenuHandler.ts","components/shared/dropdown-menu/DropdownMenu.tsx","images/map-pin.svg","components/shared/spinner/Spinner.tsx","components/shared/map/Map.tsx","components/shared/PercentIcon.tsx","components/shared/name-with-percent/NameWithPercent.tsx","components/shared/bg-icon/BgIcon.tsx","components/shared/FarmIcon.tsx","components/shared/AbacusIcon.tsx","components/shared/CameraIcon.tsx","components/shared/positive-negative-title/PositiveNegativeTitle.tsx","components/shared/caret/Caret.tsx","components/shared/ExpandArrowIcon.tsx","components/shared/OwnerIcon.tsx","components/shared/ClockIcon.tsx","components/shared/SearchIcon.tsx","components/shared/search/Search.tsx","components/shared/SortIcon.tsx","components/shared/SearchBigIcon.tsx","components/shared/MinusIcon.tsx","components/shared/DownloadIcon.tsx","components/shared/CardDots.tsx","components/shared/VisaIcon.tsx","components/shared/MasterCard.tsx","components/shared/ErrorPageIcon.tsx","components/shared/ErrorSmallIcon.tsx","components/PrivateRoute.tsx","store/utils/utils.actions.ts","store/inventories/inventories.actions.ts","util/farmUtil.ts","store/farms/farms.actions.ts","store/automation/automation.actions.ts","store/users/users.actions.ts","store/tasks/tasks.actions.ts","store/extra/extra.actions.ts","store/auth/auth.actions.ts","components/header/MobileMenu.tsx","images/boat.png","entities/util-functions.ts","pages/boat-message/BoatMessageMenuItem.tsx","images/message-icon.png","store/auth/auth.selector.ts","store/utils/utils.selector.ts","store/extra/extra.selector.ts","components/header/HeaderWarning.tsx","components/header/Header.tsx","pages/static/Loading.tsx","pages/static/NotFound.tsx","pages/Profile/Security.tsx","pages/admin/AdminSecurityPage.tsx","pages/admin/AdminUsersPage.tsx","pages/admin/AdminAccountsPage.tsx","pages/admin/AdminRoute.tsx","components/ProtectedRoute.tsx","pages/auth/SignIn.tsx","components/sign-up/SignUp.tsx","components/sign-up/RegistrationMessage.tsx","pages/auth/SignUp.tsx","components/recover-password/PasswordMessage.tsx","components/recover-password/FirstRecoverPassword.tsx","pages/auth/RecoverPassword.tsx","pages/auth/SecondRecoverPassword.tsx","pages/Profile/ProfilePage.tsx","components/user-settings/LineAssessExpireDaysInput.tsx","components/user-settings/SeedStagesSize.tsx","components/farm-util/OysterHarvestTypes.tsx","pages/Profile/SettingsPage.tsx","store/subscription/subscription.actions.ts","store/subscription/subscription.selector.ts","store/farms/farms.selector.ts","store/users/users.selector.ts","pages/Profile/FinanceSettings.tsx","components/users/AccountXeroModal.tsx","pages/Profile/Xero.tsx","components/subscription/Plan.tsx","components/subscription/CreditCard.tsx","components/subscription/Transaction.tsx","components/subscription/CreditCardModal.tsx","components/subscription/SubscriptionModal.tsx","pages/Profile/Subscription.tsx","util/validation.ts","pages/Profile/EmailPreference.tsx","store/tasks/tasks.selector.ts","components/shared/dropdown-menu/DotsMenu.tsx","pages/Profile/TaskSettings.tsx","components/farm-util/ModalUtil.tsx","components/farm-util/UtilsTable.tsx","entities/inventory.entities.ts","pages/Profile/ProcessBagSettings.tsx","pages/Profile/StaticFieldsSetting.tsx","pages/Profile/ProfileRouter.tsx","pages/users/AddUsers.tsx","components/budget/GrowerInvoiceCreateView.tsx","components/shared/pictures-wall/PDFWall.tsx","util/getBase64.ts","components/grower-views/ExpensesForm.tsx","components/farm-modals/GrowerHarvestModal/MusselGrowerHarvestModal.tsx","components/farm-modals/GrowerHarvestModal/OysterGrowerHarvestModal.tsx","components/farm-modals/GrowerHarvestModal/index.tsx","pages/Inventories/InventoryModal.tsx","lib/farm.helpers.ts","components/farm-modals/GrowerMaintenanceModal.tsx","components/farm-modals/GrowerCycleModal.tsx","components/farm-modals/GrowerSeedModal/MusselGrowerSeedModal.tsx","components/farm-modals/GrowerSeedModal/OysterGrowerSeedModal.tsx","components/farm-modals/GrowerSeedModal/index.tsx","components/farm-modals/GrowerImportSelectModal.tsx","images/farm.png","lib/constant.ts","components/shared/modal/LineLocationModal.tsx","components/farm-modals/LineFormModal.tsx","components/CommonViews.tsx","components/lines/PhotosViewButton.tsx","components/shared/tables/LinesTable/MusselLinesTable.tsx","components/shared/tables/LinesTable/OysterLinesTable.tsx","components/shared/tables/LinesTable/SeaweedLinesTable.tsx","components/user-settings/LineColumnModifyModal.tsx","components/lines/LinesFilterView.tsx","components/shared/tables/LinesTable/index.tsx","components/farm-modals/FarmStatusModal.tsx","components/farm-util/FarmStatusButton.tsx","components/shared/tables/FarmsTable.tsx","components/shared/table-mobile/LinesMobile.tsx","components/shared/table-mobile/FarmsMobile.tsx","pages/Farms/Farms.tsx","util/BreadcrumbMenu.ts","components/farm-modals/BulkHarvestModal/MusselBulkHarvestModal.tsx","components/shared/pictures-wall/PicturesWall.tsx","components/shared/datepicker/DateTimePicker.tsx","components/shared/input/TimeTrackInput.tsx","images/north-dir-btn.png","images/east-dir-btn.png","images/south-dir-btn.png","images/west-dir-btn.png","components/farm-util/DirectionForm.tsx","components/farm-modals/BulkHarvestModal/OysterBulkHarvestModal.tsx","components/farm-modals/BulkHarvestModal/index.tsx","pages/Farms/Farm.tsx","components/farm-modals/CatchSpatModal/MusselCatchSpatModal.tsx","components/farm-modals/CatchSpatModal/OysterCatchSpatModal.tsx","components/farm-modals/CatchSpatModal/SeaweedCatchSpatModal.tsx","components/farm-modals/CatchSpatModal/index.tsx","images/right-arrow.png","components/farm-modals/WeatherInfoModal.tsx","images/weather-icon.png","components/farm-util/OysterLineProbTable.tsx","components/farm-modals/SeedingModal/InstantOysterAssesment.tsx","components/farm-modals/SeedingModal/OysterSeedModal.tsx","components/farm-modals/SeedingModal/InstantMusselAssesment.tsx","components/farm-modals/SeedingModal/MusselSeedModal.tsx","components/farm-modals/SeedingModal/SeaweedSeedModal.tsx","components/farm-modals/SeedingModal/index.tsx","components/view-modals/SpatJourneyModal.tsx","lib/form.helpers.ts","components/lines/ExtraSeedingsTable.tsx","components/farm-modals/GrowerDetailModal.tsx","components/farm-modals/HarvestCompleteModal/MusselHarvestModal.tsx","components/farm-modals/HarvestCompleteModal/OysterHarvestModal.tsx","components/farm-modals/HarvestCompleteModal/SeaweedHarvestModal.tsx","components/farm-modals/HarvestCompleteModal/index.tsx","components/farm-modals/HarvestSpatsModal.tsx","components/lines/HarvestsTable.tsx","components/farm-modals/MaintenanceModal.tsx","components/farm-modals/FloatManageModal.tsx","components/farm-modals/AssessmentModal/BatchAssessView.tsx","components/farm-modals/AssessmentModal/MusselAssessModal.tsx","components/farm-util/OysterSampleCalculator.tsx","components/farm-modals/AssessmentModal/OysterAssessModal.tsx","components/farm-modals/AssessmentModal/SeaweedAssessModal.tsx","components/farm-modals/AssessmentModal/index.tsx","components/lines/PendingDataTable.tsx","components/view-modals/HarvestViewModal/MusselHarvestViewModal.tsx","components/view-modals/HarvestViewModal/OysterHarvestViewModal.tsx","components/view-modals/HarvestViewModal/SeaweedHarvestViewModal.tsx","components/view-modals/HarvestViewModal/index.tsx","components/view-modals/AssessmentViewModal.tsx","components/view-modals/SeedViewModal/MusselSeedViewModal.tsx","components/view-modals/SeedViewModal/OysterSeedViewModal.tsx","components/view-modals/SeedViewModal/SeaweedSeedViewModal.tsx","components/view-modals/SeedViewModal/index.tsx","components/view-modals/MaintenanceViewModal.tsx","components/view-modals/FloatsViewModal.tsx","components/lines/TimelineView.tsx","images/prev-image.png","images/next-image.png","components/lines/LineSpatModal.tsx","components/lines/LineTagButton.tsx","components/lines/HarvestPredictButton.tsx","components/track-modals/SeedingTrackModal.tsx","entities/general.entities.ts","components/track-modals/AddTrackStatusModal.tsx","pages/FarmLine/FlupsyMusselLineDesktop.tsx","pages/FarmLine/MusselLineDesktop.tsx","components/farm-util/OysterLineProbModal.tsx","pages/FarmLine/OysterLineDesktop.tsx","pages/FarmLine/SeaweedLineDesktop.tsx","pages/FarmLine/LineTemplateDesktop.tsx","pages/FarmLine/MusselLineMobile.tsx","pages/FarmLine/OysterLineMobile.tsx","pages/FarmLine/SeaweedLineMobile.tsx","pages/FarmLine/FlupsyMusselLineMobile.tsx","pages/FarmLine/FlupsyOysterLineMobile.tsx","pages/FarmLine/LineTemplateMobile.tsx","components/lines/MaintenanceTable.tsx","pages/FarmLine/FarmLine.tsx","pages/Lines/AddLines.tsx","components/farmform/FarmForm.tsx","pages/Farms/FarmsForm.tsx","components/farm-modals/FarmLineInfoModal.tsx","pages/Farms/FarmVisualLinesPage.tsx","components/shared/modal/InputModalTwo.tsx","store/inventories/inventories.selector.ts","pages/Farms/VisualFarmsPage.tsx","pages/Farms/FarmsRouter.tsx","pages/static/Notifications.tsx","store/automation/automation.selector.ts","components/automation/MobileAutomation.tsx","components/automation/MobileAutomationTable.tsx","components/automation/AutomationTable.tsx","components/automation/AutomationModal.tsx","components/todo/AutoReportModal.tsx","components/automation/TagScheduleModal.tsx","pages/Task/AutomationPage.tsx","components/users/UserPermissionsModal.tsx","components/users/UpdateUserModal.tsx","pages/users/InvitedUsers.tsx","pages/users/Users.tsx","components/budget/BudgetYearArrows.tsx","pages/budget/BudgetTotalPage.tsx","components/shared/tables/BudgetLogsTable.tsx","components/shared/table-mobile/BudgetLogsMobile.tsx","pages/budget/BudgetLog.tsx","pages/AccountMessage/AccountMessageFunctions.ts","pages/AccountMessage/AccountMessagesPage.tsx","pages/SpatStorage/SpatStorageMobileTable.tsx","pages/SpatStorage/SpatStorageModal.tsx","components/view-modals/FlupsySectionsModal.tsx","pages/SpatStorage/FlupsyModal.tsx","pages/SpatStorage/SpatStoragesPage.tsx","images/right-icon.png","pages/Inventories/InventoriesPage.tsx","pages/Summary/HarvestPDFCodeButton.tsx","pages/Summary/SummaryHarvestPage.tsx","pages/Lines/LinesPage.tsx","pages/Report/ReportPage.tsx","images/down-close-icon.png","images/right-open-icon.png","images/warning-icon.png","components/shared/map/SeedingsOrder.tsx","components/shared/map/DottedLine.tsx","components/shared/map/MarkersMap.tsx","pages/Farms/FarmsMap.tsx","pages/harvest/MusselHarvestHeader.tsx","pages/harvest/OysterHarvestHeader.tsx","pages/harvest/SeaweedHarvestHeader.tsx","components/track-modals/HarvestTrackModal.tsx","pages/harvest/HarvestDetailPage.tsx","pages/UserMessage/UserMessagesFunctions.ts","pages/UserMessage/UserMessagesPage.tsx","pages/QueuedData/PaperFormModal.tsx","images/placeholder.png","pages/QueuedData/QueuedDataPage.tsx","pages/boat/BoatModal.tsx","pages/boat/BoatsPage.tsx","pages/line-spat/LineSpatPage.tsx","pages/import/ImportCyclesPage.tsx","lib/task.helper.ts","components/todo/ModalTask.tsx","pages/calendar/AssessmentCell.tsx","pages/calendar/HarvestCell.tsx","pages/calendar/InventorySeedCell.tsx","pages/calendar/MaintenanceCell.tsx","pages/calendar/RequireAssessmentCell.tsx","pages/calendar/SeedingCell.tsx","pages/calendar/TaskCell.tsx","pages/calendar/CalendarCell.tsx","components/farm-modals/FarmWeatherModal.tsx","images/clock-image.png","components/farm-modals/DailyReportModal.tsx","pages/calendar/CalendarPage.tsx","pages/Summary/TodayWindyPage.tsx","components/shared/tables-card/PlannedActualRate.tsx","components/budget/BudgetExpenseModal.tsx","pages/budget/BudgetFarmPage.tsx","pages/import/ImportLinesPage.tsx","pages/import/ImportAssessmentsPage.tsx","pages/boat-message/BoatMessagesPage.tsx","images/mussel-app.png","pages/qr-code/QRGeneratePage.tsx","pages/Summary/SummaryProcessPage.tsx","pages/qr-code/QRScanPage.tsx","pages/Summary/SummaryPerformancePage.tsx","pages/Summary/BiosecurityPage.tsx","pages/Summary/HarvestStagesPage.tsx","pages/LineGroup/LineGroupModal.tsx","pages/LineGroup/LineGroups.tsx","components/todo/TaskTypeButton.tsx","pages/Task/TaskListPage.tsx","pages/Profile/CustomFieldSetting.tsx","pages/Profile/TagsPage.tsx","pages/suggest/AssessmentSuggest.tsx","pages/suggest/SeedingSuggest.tsx","pages/suggest/HarvestSuggest.tsx","pages/suggest/FloatingSuggest.tsx","pages/suggest/OrderSuggest.tsx","pages/suggest/SuggestPage.tsx","pages/QueuedData/PaperSeedingForm.tsx","pages/QueuedData/PaperAssessForm.tsx","pages/QueuedData/PaperFloatingForm.tsx","pages/QueuedData/PaperHarvestForm.tsx","pages/QueuedData/PaperFormPage.tsx","pages/external-account/ExternalFarmAccessPage.tsx","pages/import/ImportTimeSheetPage.tsx","pages/home/FarmsOverviewChart.tsx","pages/home/PerformanceCharts.tsx","pages/home/CalendarView.tsx","pages/home/MessagesView.tsx","pages/home/UpcomingHarvests.tsx","pages/home/HomePage.tsx","pages/Summary/OysterSummaryPage.tsx","pages/Summary/OysterEstimatesPage.tsx","pages/Summary/OysterCalenderPage.tsx","pages/calendar/HarvestPlannerPage.tsx","pages/Summary/OysterLinesPage.tsx","pages/Farms/FarmSpatsPage.tsx","pages/RouterHelper.ts","pages/static/OnboardingPage.tsx","components/header/Footer.tsx","pages/Router.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["glbResponse","initialState","nextView","isSuccess","email","token","profile","userMeta","settings","harvestTypes","customTasks","friendEmails","showGpsWarning","authReducer","state","action","type","payload","newState","queue_count","isDemo","automationsData","customFields","automationReducer","tags","farmsData","spatStorages","inventoryPositions","queueData","farmsReducer","isSpinner","allFeedbacks","version","packageJson","uiReducer","filter","x","id","lang","visibleGuide","mapType","users","boats","usersReducer","newAccountMessage","newUserMessage","newBoatMessage","farmUtils","pusher_key","pusher_cluster","server_env","utilsReducer","env","tasks","status","plan_data","history","payment_method","xero_accounts","xero_contacts","subscriptReducer","inventories","inventoryReducer","extraReducer","farms","utils","accounts","rootReducer","combineReducers","auth","automation","ui","subscription","tasksReducer","extra","persistConfig","key","storage","persistedReducer","persistReducer","rootReducers","store","createStore","composeWithDevTools","applyMiddleware","thunk","persistor","persistStore","color","width","height","viewBox","fill","xmlns","fillRule","clipRule","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","className","Paragrapgh","children","size","align","fontWeight","paragrapghClasses","classNames","RadioButton","label","disabled","isError","value","isLeftText","isfullWidth","icon","date","radioClasses","ToggleButton","checked","defaultChecked","onChange","toggleClasses","labelClasses","CheckboxButton","isNegative","placeholder","checkboxClasses","Button","isNoneBorder","onClick","iconOnly","iconLeft","iconRight","name","onlyIconDisabled","buttonClasses","Option","Select","Dropdown","suffixIcon","defaultValue","options","isOptional","mode","undefined","showSearch","allowClear","useState","open","setOpen","CaretDownIcon","CaretUpIcon","htmlFor","onDropdownVisibleChange","o","filterOption","inputValue","option","toLowerCase","includes","map","Feedback","message","theme","isGlobal","onClose","position","isWithoutClosable","isIcon","feedbackClasses","style","top","closeText","CloseIcon","closable","WarningIcon","showIcon","Input","unit","onValChange","required","readonly","onValidate","dataType","min","max","isClear","isErrorRes","setIsError","setIsSuccess","inputClasses","checkInputh","isHandler","isValid","length","Date","getTime","match","handleOnChangeState","handleOnChangeValue","useEffect","handleOnChange","e","target","readOnly","format","mask","onValueChange","values","formattedValue","onWheel","event","blur","CalendarIcon","Subtitle","subtitleClasses","useWidth","setWidth","useLayoutEffect","document","documentElement","clientWidth","widthCallback","window","addEventListener","removeEventListener","selectVersion","createSelector","selectFeedbacks","feedbacks","selectSpin","spin","selectLang","selectVisibleGuide","selectMapType","translate","content","toString","error","idx","data","en","fr","es","template","replace","componentTranslate","elements","split","result","i","push","ModalComponent","visible","onCancel","onConfirm","hideCancelBtn","title","text","buttonText","warningText","useSelector","footer","closeIcon","ErrorIcon","Title","titleClasses","TabsComponent","items","defaultActiveKey","TabPane","useMemo","Tabs","tab","BreadcrumbComponent","separator","CaretRight","item","Item","to","link","linkName","Navbar","current","direction","selectedKeys","toggleSecondMillisecond","millisecond","Number","toFixed","second","moment","toDate","defaultDateFormat","eChar","ms","diffDays","from","diff","toMillisecond","toSecond","Math","round","areSimilarStrings","s1","s2","join","findMostSimilar","words","minDistance","Infinity","mostSimilar","forEach","word","distance","a","b","matrix","j","charAt","levenshtein","compareString","localeCompare","numeric","randomKey","random","substr","toStrSlug","s","trim","calcPeriodUnit","period","m","w","periodToStr","labelNumber","val","emptyCharacter","labelRange","calcDiffDays","fromTime","toTime","dozensToPieces","dozens","piecesToDozens","pcs","Tooltip","overlayClassName","placement","trigger","TagComponent","tagClasses","Datepicker","onRange","datepickerClasses","AvatarComponent","image","avatarClasses","shape","src","UserOutlined","spinner","dispatch","getState","showFeedback","feedback","setTimeout","hideFeedback","setLangUI","saveMapType","ModalFeedbackView","useDispatch","messages","isMessageModal","InputModal","confirmNameBtn","modalWidth","Plus","TrashIcon","InterestGrowth","isReverse","isGrow","interest","CaretMainIcon","ShortArrow","TablesCard","info","useMenuHandler","useHistory","redirectToFarm","idFarm","redirectToLine","idLine","redirectToEditFarm","redirectToFarmVisualLine","redirectToHarvestDetail","harvestId","DropdownMenu","column","onEdit","onDeleteRow","isRedirect","onArchiveRow","onDeactivate","onActivateUser","isAdmin","moreMenus","rowData","useRef","isEditable","edit_permission","menuClickHandler","dataRow","domEvent","stopPropagation","farm_id","onEditHandler","isRedirectLine","menu","userAdminMenu","role","overlay","bind","DotsIcon","Spinner","Loading","mapOptions","minZoom","maxZoom","MapWithMarkers","compose","withProps","googleMapURL","process","loadingElement","containerElement","mapElement","withScriptjs","withGoogleMap","zoom","defaultPosition","onCallback","polygons","lines","isStayLocation","hideMarker","defaultCenter","setState","handleSetPosition","newPosition","lat","latLng","lng","v","defaultZoom","center","mapTypeId","url","mapPin","defaultVisible","path","strokeColor","strokeOpacity","strokeWeight","fillOpacity","points","NameWithPercent","percent","index","isNextBg","reduce","acum","substring","initials","BgIcon","PositiveNegativeTitle","isColor","Caret","transform","Search","onSearch","onKeyDown","tabIndex","SearchIcon","active","unAuthRoutes","PrivateRoute","component","exact","isFinance","query","URLSearchParams","useLocation","search","condition","setCondition","some","location","pathname","backUrl","get","startsWith","origin","href","finance_permission","isRefreshingToken","lastAuthToken","sendRequest","method","requireAuth","Authorization","localStorage","getItem","req","headers","Accept","Object","assign","params","axios","response","resData","console","log","sendSingleRequest","delay","Promise","res","ws","waitForRefreshToken","r","access_token","refresh_token","refreshTokenAPI","responseRefresh","sendMultipart","resolve","checkFlag","p","removeItem","post","Refreshtoken","User","setItem","user_id","downloadInvoice","responseType","durl","URL","createObjectURL","Blob","createElement","setAttribute","body","appendChild","click","downloadReport","downloadPDF","loadingUtils","loadUtilsData","deleteUtilData","utilId","addUtilData","loadingInventories","loadInventories","isMessage","updateInventoryQuantity","quantity","findIndex","transformFarmWithKey","dataWithKey","farm","newFarm","newLines","line","y","newLine","getInterest","firstValue","secondValue","abs","loadingFarmsData","loadFarmsData","loadingStorages","loadSpatStorages","spats","loadingInventoryPositions","loadingQueueData","loadQueueData","qCnt","loadingAutomations","loadAutomationData","removeAutomation","automationId","loadingCustomFields","loadCustomFields","loadingTags","loadTags","loadingUsers","getAllUsers","createUser","loadingBoats","loadUserBoats","newMessageReceivedAction","actionType","loadingTasks","getTaskData","createTask","newTask","task_id","removeTask","taskId","updateTask","task","loadExtraData","FixedStorage","logOut","tmp","k","clear","JSON","stringify","source","signUp","authLogin","loadingMe","authLoadMe","simple","HARVEST_TYPE","CUSTOM_TASKS","FRIEND_EMAILS","SHOW_GPS_WARNING","updateTaskSettings","updateFriendEmailSetting","updateUserMeta","updateAvatar","updateProfile","updateEmail","updatePassword","updateAccountSetting","account","demoAccountLogin","currentAccessToken","refresh","MobileMenu","menuItems","isExact","activeClassName","hashColor","str","hash","charCodeAt","roundNumber","formatNumber","numberToMoneyStr","modules","operator","grower","is_user_allowed","module","processingPlantRoutes","checkRolePermission","allowedRoles","deniedRoles","customFieldsValues","fields","f","find","field_id","field_val","customSpecialValue","fd","BoatMessageMenuItem","alt","unread_messages_count","selectAccount","selectToken","selectProfile","selectSettings","selectUserMeta","meta","selectIsDemo","selectXeroIsConnected","xero_connects","connects","selectUtils","selectSeasons","seasons","selectPusher","cluster","selectServerEnv","selectFarmingMethods","methods","selectSizedOysters","getAccountByFarmID","farmID","myFarms","extraFarms","account_id","SelectIsMyFarm","getInventoriesByFarmID","SelectInventoriesByFarmID","selectAllFarms","getFarmsByFarmID","SelectFarmsByFarmID","SelectMusselFarmsByFarmID","SelectOysterFarmsByFarmID","getSpatsByFarmID","accountID","SelectMusselSpatsByFarmID","flupsy_storage","getIsBudgetVisible","show_budget_menu","is_financed","SelectIsBudgetVisible","getIsEditable","editable","getIsFarmable","farmable","SelectIsEditable","SelectIsFarmable","getUtilsByFarmID","SelectUtilsByFarmID","SelectSizedOystersByFarmID","SelectSeasonsByFarmID","getCustomFieldsByFarmID","SelectAssessFields","SelectSeedingFields","SelectHarvestFields","getSettingsByFarmID","SelectSettingsByFarmID","getTagsByFarmID","selectAllTags","extraTags","getAccountTypeByFarmID","account_type","SelectIsGrower","getAccountSettingByFarmID","setting","SelectAccountSetting","getProfileByFarmID","SelectProfileByFarmID","getUserMetaByFarmID","SelectUserMeta","getXeroContactsByFarmID","contacts","HeaderWarning","serverEnv","urgentLines","is_urgent","line_name","BoatIcon","boat_png","ValidationMenuItem","display","alignItems","Header","isOpen","setIsOpen","avatar","setAvatar","is_verified","getElementsByTagName","overflow","useParams","then","NotFound","ErrorPageIcon","ErrorSmallIcon","Security","password","emailFields","setEmailFields","new_password","passwordFields","setPasswordFields","setIsClear","setDisabled","handleOnChangePassword","changeData","handleOnChangeEmail","AdminSecurityPage","AdminUsersPage","setUsers","loading","setLoading","loadUsers","useCallback","loginAsUser","user","columns","render","last_location","rec_time","created_at","company_name","company_address","phone_number","rowKey","pagination","dataSource","owner","u","AdminAccountsPage","setAccounts","alert","updatePremium","isPremium","is_freemium","deleteClick","acc","confirm","tableColumns","AdminRoute","ProtectedRoute","checkLogin","encodeURIComponent","SignIn","isChecked","setIsChecked","isInviteAccept","setIsInviteAccept","setEmail","setPassword","isValidFields","setIsValidFields","isValidate","fieldsValid","setFieldsValid","remember","setRemember","handleOnValidFields","counter","newArr","field","onLogin","preventDefault","onSubmit","SignUpMain","hasCoupon","setHasCoupon","nextViewStore","coupon","setCoupon","setFields","handleOnChangeFields","onRegistration","password_confirmation","maxWidth","RegistrationMessage","setMessage","handlerOnReSend","SignUp","isNextVeiw","setIsNextVeiw","handleOnClose","PasswordMessage","authStore","FirstRecoverPassword","setIsValid","handleOnRecover","RecoverPassword","SecondRecoverPassword","confirmPassword","setConfirmPassword","FieldValidators","ProfilePage","setIsSpinner","setUser","handleOnAvatar","FormData","append","file","handleOnSave","viewDemoClick","premiumToken","parse","Avatar","customRequest","fileList","listType","accept","CameraIcon","phoneNumber","checkPhoneNumber","LineAssessExpireDaysInput","setVal","line_assess_expire_days","parseInt","isNaN","SeedStagesSize","stages","setStages","handleValueChange","seed_stages_size","time","l","splice","dataIndex","num_val","size_min","size_max","price","OysterHarvestTypes","oysterFields","onGrowWaste","oyster_crops","tableData","grow_ons","grow_ons_json","waste","waste_json","json","setVisible","setData","showError","updateField","confirmClick","sum","deletedFields","os","probSum","pp","row","removeField","Trash","ghost","MusselHarvestTypeList","checkedOptions","otherOptions","otherVal","setOtherVal","toggleCheck","onOtherAddClick","onOtherDeleteClick","GpsWarningSetting","c","TrackSettings","track_spat","track_original_spat","track_mortality","prv","HarvestSizeSetting","accSetting","harvest_min_size","minSize","setMinSize","grow_speed","growSpeed","setGrowSpeed","updateValue","updateClick","SettingsPage","setSubscriptionStatus","loadingXeroContacts","loadingXeroAccounts","selectXeroAccounts","selectFarmsData","selectSpatStorages","selectQueueData","queue","selectMusselFarms","selectOysterFarms","selectMusselSpats","selectBoats","selectNewAccountMessage","selectNewBoatMessage","selectNewUserMessage","selectUsers","TaxView","tax","setTax","taxCode","setTaxCode","xeroAccounts","Code","Name","TaxRate","xeroConnected","updateTax","code","updateTaxCode","FreqOption","RoundOption","LevyTypeOption","FinanceSettings","boatsData","levyFees","setLevyFees","boatTimes","setBoatTimes","factoryCosts","setFactoryCosts","includeTax","setIncludeTax","disable","setDisable","harLevy","setHarLevy","changeCostValue","fee","cost","unit_ton_price","addNewItem","frequency","boat_id","rounding","quality","deleteItem","levy_fees","boat_times","factory_costs","xero_tax_code","harvest_levy","include_tax","farmsOption","boatsOption","levy","selectLevyFarm","updateLevyType","updateFrequency","bt","selectTimeBoat","updateRounding","fc","updateQuality","AccountXeroModal","callbackURL","btoa","cid","setCID","cSec","setCSec","client_id","client_secret","redirect_url","Xero","showXero","setShowXero","deleteXero","account_xero_id","refreshXero","reload_token","repeat","tenant_id","Plan","onSubscription","onCancelSubscription","onResumeSubscription","onSubscriptionUpdate","onTrialUpdate","farmsCount","expire_at","CreditCard","onChangeCard","card","planData","onRemoveCard","isVisible","setIsVisible","brand","VisaIcon","MasterCard","CardDots","number","slice","holder","Modal","Transaction","invoiceId","Tag","border","background","DownloadIcon","CreditCardModal","textButton","onAdd","cardNumber","setCardNumber","validInput","setValidInput","cvv","setCVV","setDate","cardHolder","setCardHolder","handleOnCVV","clearState","handleOnCardNumber","handleOnCardHolder","handleOnDate","SubscriptionModal","onSubscribe","subscriptionStatus","setValue","isCoupon","setIsCoupon","couponValue","setCouponValue","isSuccessApply","setIsSuccessApply","handleOnConfirm","MinusIcon","coupon_used","CANCEL_SUBSCRIBE","PAYMENT_INACTIVE","Subscription","isLoaded","setIsLoaded","isSubModal","setIsSubModal","isCardModal","setIsCardModal","isAlertModal","setIsAlertModal","isSubscribing","setIsSubscribing","paymentInActive","setPaymentInActive","alertInfo","setAlertInfo","cardDetails","setCardDetails","getSubscriptionStats","pm","last4","month","year","showAlertModal","msg","qty","card_number","cvc","plan_id","expiration_month","expiration_year","onUpdateSubscription","onTrialSubscribe","onResumeSubscribe","doCancelSubscribe","onUpdateCard","downloadInvoiceFromId","getMessage","getMessageType","total","marginBottom","validationForZeroMinus","isEmailFormat","EmailPreference","email_preference","emails","setEmails","saveEmailsList","selectTasks","selectCustomTasks","DotsMenu","TaskSettingModal","form","setForm","actionOptions","TaskSettings","editItem","setEditItem","visibleAdd","setVisibleAdd","ModalUtil","flagLabel","flagPlaceholder","numLabel","numUnit","flag","UtilsTable","btnLabel","extraColumns","onUpdate","delUtil","setDelUtil","editUtil","setEditUtil","addUtil","setAddUtil","onModalConfirm","newData","curUtil","modalType","scroll","allData","element","cols","defaultBagMusselTypes","ProcessBagSettings","process_bags","StaticFieldsSetting","ports","delivers","packhouses","bioTypes","farmingMethods","expenseItems","customers","maintenances","seed_types","ProfileRouter","setCurrent","listen","UserIcon","Key","SettingIcon","navbarItems","handleOnSelectPage","list","AddUsers","isValidateEmail","setIsValidateEmail","Panel","Collapse","userType","setUserType","switchList","setSwitchList","setFarms","defaultFarm","typeChecked","genExtra","farmId","handleOnFarmCheck","CaretLeftOutlined","rotate","classnames","permissions","getPermissions","farmsAndLines","getFarms","inviting_user_id","farms_id","lines_id","line_id","view_permission","counterFarm","counterLine","Group","handleOnPermissions","expandIcon","isActive","header","lineId","handleOnSelectFarm","GrowerInvoiceCreateView","invoice","showButton","SelectXeroContactsByFarmID","ContactID","xero_contact_id","invoiceLink","setInvoiceLink","connID","setConnID","contID","setContID","contOptions","connect","connections","subTotal","line_items","unit_price","taxFee","reference","updateContactID","item_name","description","fontSize","contact_id","account_code","InvoiceID","PDFWall","previewFile","setPreviewFile","onPreview","Set","uid","beforeUpload","imgList","reader","FileReader","readAsDataURL","onload","thumbUrl","PlusOutlined","marginTop","minHeight","getBase64","reject","onerror","parseImageUrlToFileItem","now","ExpensesForm","additionalQuantity","additionalAmount","hideTotal","isOther","setIsOther","updateForm","amount","totalQuantity","totalAmount","tmp2","selectItem","defaultForm","complete_date","shell_length","shell_length_max","company","vessel","harvest_number","port_of_unload","rope_bags_quantity","comment","MusselGrowerHarvestModal","lineData","harvestData","updateId","overConfirm","paramData","confirmID","warningMessage","allLines","farm_name","isGrowing","growing_cycle","last_harvest","linesOption","bags_quantity","is_full","line_length","harvestedLines","setHarvestedLines","showConfirm","setShowConfirm","submittedData","setSubmittedData","expense_items","harvestCosts","setHarvestCosts","extractData","formData","setFormData","totAmount","setTotAmount","income","totIncome","setTotIncome","forInsert","setForInsert","ranges","setRanges","pdf_files","pdfFiles","setPdfFiles","is_final","isMiddle","setIsMiddle","updateHarvestLine","validData","totBags","tmpL","next_seed_date","expenses","toggleForInsert","lineSource","dt","cycles","lstH","harvests","main_seed","season_name","from_date","planned_date_seed","to_date","planned_date_harvest","seed_count","seedings","harvest_count","costSum","seedOptions","maskClosable","hl","t","rate","amt","invoiceDetail","selectLine","batch_seed_id","seeding_id","OysterGrowerHarvestModal","GrowerHarvestModal","InventoryModal","typeOptions","level","volume","errors","setErrors","validForm","tmpErr","handleConfirmClick","valid","updateLineColumn","col_no","Error","updateLinePriority","priority","getLineStatus","expire_days","ready_harvest","requireAssessment","lastDate","last_assessment","assessment_date","d1","d2","catchSpat","is_catch_spat","setFarmVisualFloatsPosition","inventory_id","positions","shouldQueue","setLocalFloatsPosition","VisualFloatsPositionTimer","clearTimeout","VisualFloatsPositionQueue","bulk_data","getLocalFloatsPosition","amountDays","calcOnGrowWastePercent","lineID","lines_grow_ons","lines_waste","calcOysterPercent","util","getEstHarvestDate","calcLineLastSize","shell_size","spat_size","spat_size_max","avg","getLineOysters","estimated_amount","current_amount_dz","current_amount_pcs","calcSpecieLineDozens","oysterSpecies","growPercent","wastePercent","calcOysterLineSize","minArr","maxArr","minSum","maxSum","getSpatSourceLabel","spatID","spat","source_line","src_line_name","seed_type","collection_date","makeSpatLabel","inventoryLabel","ivt","getMortalityLabel","harvest","amount_pcs","mortality","outInOptions","maintain_date","GrowerMaintenanceModal","onlyView","maintenanceData","growingLines","curLine","setCurLine","setExpenses","ivtItems","setIvtItems","showIvtModal","setShowIvtModal","updateIvtItem","deleteIvtItem","mx","available_quantity","inventories_sum","submitFloats","seedID","manage_date","evt","ExpensesView","setItems","updateCost","deleteCost","GrowerCycleModal","seed_date","spat_source","spat_amount","harvest_date","harvest_amount","harvest_income","seasonType","setSeasonType","seedExpenses","setSeedExpenses","harvestExpenses","setHarvestExpenses","floor","seed_expenses","harvest_expenses","harvestCost","density","density_unit","budget_unit_amount","budget_unit_price","drop","submersion","spacing","floats","spatAmountPlaceholder","available_weight","MusselGrowerSeedModal","seedData","seasonData","isEdit","spatOptions","seedLines","setSeedLines","seedItems","setSeedItems","custom_values","input_type","field_label","data_type","customValues","setCustomValues","addSpatSizeRange","setAddSpatSizeRange","updateSeedLine","spat_storage_id","new_spat","sx","ln","sp","cvs","updateCustomValue","fieldID","tmpSeedLines","keys","spat_storage","tmpLines","parent_id","tmpCustom","totCnt","lID","handleChangeSeedLine","changeIsNewSpat","OysterGrowerSeedModal","GrowerSeedModal","GrowerImportSelectModal","show","setShow","showSeed","setShowSeed","showHarvest","setShowHarvest","showMnt","setShowMnt","showCycle","setShowCycle","handleClose","LINE_COLORS","EMPTY","READY_HARVEST","REQUIRE_ASSESSMENT","CATCH_SPAT","NORMAL","LineLocationModal","onConfirmNext","bounds","firstLoc","setFirstLoc","secondLoc","setSecondLoc","centered","Map","pt","line_group_id","LineFormModal","farmData","groups","setGroups","backbone","line_group","basket_count","tank_area","farming_method","visibleMap","setVisibleMap","handleChangePoints","groupsOption","LineInventoriesLabel","pending_quantity","SeedInventoriesLabel","ivt_seeds","inventory_name","PhotosViewButton","images","setImages","onViewClick","cycle","assessments","img","original","thumbnail","originalTitle","sort","onOk","MusselLinesTable","linesData","isChild","onEditLineLocation","hiddenColumns","mussel_line_hidden_columns","columnsOrder","mussel_line_columns_order","editLine","setEditLine","deleteLine","changeTable","sorter","columnKey","orders","order","tempColumns","defaultSortOrder","current_line_length","line_idle","fill_percent","orderKey","col","Boolean","topScrollRef","bottomScrollRef","scrollTop","getElementById","tables","getElementsByClassName","ref","onScroll","scrollLeft","overflowX","onRow","OysterLinesTable","oyster_line_hidden_columns","oyster_line_columns_order","current_basket_count","estAmt","SeaweedLinesTable","musselColumns","oysterColumns","seaweedColumns","LineColumnModifyModal","musselHidden","oysterHidden","seaweedHidden","seaweed_line_hidden_columns","musselOrder","oysterOrder","seaweedOrder","seaweed_line_columns_order","initialColumns","setChecked","setTableColumns","handleDragOver","handleDrop","draggedIndex","dataTransfer","getData","newOrder","draggedItem","draggable","onDragStart","String","onDragOver","onDrop","sizeSteps","checkLineFilter","lineTags","spatSource","tagName","tag_lines","sizeIndexes","shellLen","LinesFilterView","allFarms","spatBatches","uniqueBatches","Array","tagNames","changeFilter","tagsOption","batchesOption","_","getSizeOption","lineFilterOptions","LinesTable","setFilter","visModify","setVisModify","editLineLocation","setEditLineLocation","updateLineLocation","goNext","nl","lineName","minWidth","FarmStatusModal","feeList","farm_status","all","farm_fee","start_date","closeModal","afterClick","days_left","due_date","add","updateDate","toISOString","FarmStatusButton","FarmsTable","visFarm","setVisFarm","deleteFarm","is_flupsy","farm_number","area","tooltipItems","owners","farm_image","expandable","expandedRowRender","onExpand","record","MusselLine","OysterLine","SeaweedLine","total_seeded_tank_area","LinesMobile","memo","editData","setEditData","filterOpt","setFilterOpt","filterName","setFilterName","profit_per_meter","TableHeader","onEditClick","onDeleteClick","FarmsMobile","editFarm","props","Farms","setTotal","isCardsSpinner","setIsCardsSpinner","visibleImport","setVisibleImport","getTotals","nextSeedData","nextHarvestData","rd","loadData","searchKey","setSearchKey","filteredFarms","FarmIcon","getNodes","OVERVIEW","FARMS","FARM_DETAIL","FARM_VISUAL","FARM_LINE","INVENTORIES","LINE_GROUPS","LINE_GROUP_DETAIL","SPAT_STORAGES","SUMMARY_PAGE","HARVEST_DETAIL","convertBreadcrumbs","replaceAll","getBreadcrumbMenu","pageName","root","MusselBulkHarvestModal","PicturesWall","handleChangeImages","previewVisible","setPreviewVisible","previewImage","setPreviewImage","previewTitle","setPreviewTitle","handlePreview","originFileObj","lastIndexof","uploadButton","DateTimePicker","showTime","toSecTimeTracks","prev","start_time","finish_time","TimeTrackInput","cursor","marginLeft","DirectionForm","northIcon","eastIcon","southIcon","westIcon","ReturningInventories","usedInventories","ivt_id","getNewLineData","amount_dz","return_amount_dz","return_amount_pcs","OysterBulkHarvestModal","port_of_unloads","delivered_tos","sizedOysters","linesOptions","metaFields","metaDefaults","signatureCanvas","time_tracks","delivered_to","packhouse","crop_owner","growing_area","harvester_name","sigCanLoaded","setSigCanLoaded","errorMsg","setErrorMsg","showPort","setShowPort","showDel","setShowDel","showPac","setShowPac","updateHarvestedLine","amountSum","nu","ivtData","tt","signature","toDataURL","track_code","fromDataURL","selectLines","flex","oyster_type","shell_condition","borderRadius","penColor","canvasProps","BulkHarvestModal","Farm","currentFarm","stats","setStats","showBulkHarvest","setShowBulkHarvest","breadcrumbItems","FARM_ID","FARM_NAME","loadStats","newGeneralStats","this_year","last_year","handleOnEdit","Breadcrumb","ExpandArrowIcon","OwnerIcon","ClockIcon","idle_avg","columnGap","stat","padding","RangePicker","DatePicker","density_max","MusselCatchSpatModal","showBudget","startDate","setStartDate","endDate","setEndDate","setError","fieldData","setFieldData","addDensityRange","setAddDensityRange","picked_inventories","pickedInventories","setPickedInventories","fieldValid","px","toggleAddRangeCheck","dataset","pickedArr","ovc","dates","dateStrings","textAlign","pArr","selectInventoryIds","OysterCatchSpatModal","SeaweedCatchSpatModal","CatchSpatModal","oneKnot","WindyIcon","wu","wv","sqrt","atan2","PI","arrow_png","WeatherInfoModal","latitude","longitude","sunset_time","temperature","wind_u","wind_v","precip","pressure","OysterLineProbTable","forwardRef","probabilities","amountType","defaultValues","percentSum","canSkip","every","nv","ov","checkIsValid","runConfirm","useImperativeHandle","defaultFormData","spat_amount_dz","spat_amount_pcs","estimated_dozens","size_avg","ready_to_harvest","measurement_units","InstantOysterAssesment","formDataPassed","errorsData","availableDozens","isMyFarm","tableRef","customAssesFields","customAssessValues","setCustomAsseesValues","updateCustomAssessValue","estimated_pcs","OysterSeedModal","updateID","parentID","farm_is_flupsy","SelectOysterSpatsByFarmID","isSeasonNew","setIsSeasonNew","getDefaultInventory","createAssessment","setCreateAssessment","availablePieces","assessment_template","ceil","tmpData","validFormData","containersCnt","validFormAssassment","origin_spat_id","btm_size_min","btm_size_max","btm_size_avg","ValidaAssamet","resAssasment","renderCustomError","assess_bottom","InstantMusselAssesment","assessBottom","setAssessBottom","MusselSeedModal","confirmBtnLabel","lineChangeable","isGrower","seedStages","stageMsg","setStageMsg","focFarmId","setFocFarmId","focLineId","setFocLineId","availableWeight","farmOptions","lineOptions","SeaweedSeedModal","SeedingModal","seedPropLabel","spatWeightLabel","available","weight","calcDiff","NodeDiv","node","parentDate","makeNode","leafCallback","ac","mc","SpatJourneyModal","focusLineID","setZoom","leafs","parent_harvest","parent_seeding","shiftKey","z","deltaY","convertSeedImportForm","paperImage","spat_source_farm","spat_source_line","spat_source_other","float_type","rest","farmNames","similarFarm","foundFarm","lineNames","similarLine","foundLine","stm","ftm","float","float_id","convertAssessImportForm","condition_score","blues","harvest_quality","cF","bF","hF","convertFloatingImportForm","inventory","convertHarvestImportForm","generateWeeklyRanges","weeks","startOfWeek","clone","startOf","endOfWeek","endOf","finish_date","day_label","week_label","generateMonthlyRanges","months","startOfMonth","endOfMonth","month_label","directionChar","ec","SpatColumn","businessType","ExtraSeedingsTable","loadLine","cyclePart","musselCycle","oysterCycle","visibleEdit","setVisibleEdit","visibleDelete","setVisibleDelete","selectedItem","setSelectedItem","infoShow","setInfoShow","infoText","setInfoText","visibleGallery","setVisibleGallery","gImages","setGImages","selectedWeather","setSelectedWeather","journeyData","setJourneyData","totalLength","totalBasketCount","showEditModal","handleConfirmDelete","openInfo","openImages","openJourney","from_root","getLastAssessment","tableRows","harvested","lastAss","verifier","weather_condition","weather_icon","stage","EditFilled","GrowerDetailModal","qtySum","ReseedForm","setFarm","flexBasis","updateLine","tag_color","mussel_type","mussels","meat_yield","marine_waste","backbone_ok","backbone_replace","lights_ids_in_place","flotation_on_farm","product_left_on_line","is_waste","stripped_reason","HarvestSpatsView","updateRow","selectHarvestSpats","borderBottom","ConfirmPartialDialog","SubmitConfirmDialog","reasonOptions","WasteHarvest","ReturnInventories","seedingId","availableInventories","pickedItems","setPickedItems","allIVTs","MusselHarvestModal","musselTypes","setCurrentFarm","currentLine","setCurrentLine","currentSeed","ivtFloats","growingLength","lastAssessment","lastHarvest","isPartial","setIsPartial","visibleConfirm","setVisibleConfirm","current_boat","reg_number","seed_id","reqPdf","setReqPdf","advancedLine","setAdvancedLine","harvestSpats","setHarvestSpats","trackMode","setTrackMode","reseedFarm","setReseedFarm","reseedForm","setReseedForm","toggleTrackMode","with_harvest_spats","track_harvest_id","bags","reseed","require_pdf","request_emails","harvest_spats","plannedDaysDiff","currentDaysDiff","h","tmpFarm","growing_spats","as","ls","DollarIcon","is_combined","OysterHarvestModal","setSpats","loadingSpats","setLoadingSpats","mf","lengthSum","loadSpats","basketCnt","amountDz","getSpatName","combine_id","SeaweedHarvestModal","total_harvested_tank_area","seededTankArea","harvestedTankArea","HarvestCompleteModal","HarvestSpatsModal","st","growerColumns","HarvestsTable","onUpdateRow","myRole","SelectProfileRole","openHarvest","setOpenHarvest","editHarvest","setEditHarvest","orgSpats","setOrgSpats","MaintenanceModal","visibleCost","FloatManageModal","manageCycle","lastSubmersion","seed_manages","arr","curIvt","setCurIvt","depth","setDepth","mainSeed","availableQty","submitLineDepth","dr","floating_id","inventoriesOption","selectInventory","BatchAssessView","batchID","onBatchSelect","spatsOptions","spat_source_id","getPrevPlannedDateHarvest","MusselAssessModal","warning","setWaring","trackOrigin","setTrackOrigin","oyster","OysterSampleCalculator","onInsert","modalData","setModalData","isModalVisible","setIsModalVisible","exceedsLimit","setExceedsLimit","totalOysters","handleCancel","sumOfAllAmounts","parseFloat","updateAmount","sumProb","probability","getEstimated","OysterAssessModal","setProbabilities","SeaweedAssessModal","AssessmentModal","QLabels","assessment","maintenance","inventory_seed","seeding","PendingDataTable","visibleAssessment","setVisibleAssessment","visibleMaintenance","setVisibleMaintenance","visibleFloats","setVisibleFloats","visibleSeeding","setVisibleSeeding","visibleHarvest","setVisibleHarvest","selectedData","setSelectedData","deletingItem","setDeletingItem","queueItems","afterConfirm","visibleUpdate","confirmSeeding","crop_type","confirmHarvest","clickQueueItem","item_id","MusselHarvestViewModal","OysterHarvestViewModal","SeaweedHarvestViewModal","HarvestViewModal","AssessmentViewModal","flexWrap","marginRight","MusselSeedViewModal","OysterSeedViewModal","SeaweedSeedViewModal","SeedViewModal","MaintenanceViewModal","textTransform","FloatsViewModal","inventorySeed","ChartJS","register","LinearScale","PointElement","LineElement","borderColor","backgroundColor","MtLabels","VISUAL_ASSESSMENT","LINE_CLEANING","GENERAL_MAINTENANCE","llFormat","toFloor","calcChart","days","labels","needY","getFullYear","Y","M","ty","tm","avgSize","TimelineView","dataItems","weathers","visSeed","setVisSeed","visAssess","setVisAssess","visMain","setVisMain","visFloat","setVisFloat","assistSeed","setAssistSeed","viewHar","setViewHar","compLine","setCompLine","compPoints","setCompPoints","setHeight","showLine","setShowLine","seed","oh","old_date","new_date","is_on","tag","logged_date","dateFrom","dateTo","chartData","getWs","temp","wind","rts","waves","waves_height","datasets","tension","yAxisID","hidden","data1","data2","selectCompLine","min_date","max_date","changeHeight","responsive","plugins","legend","spanGaps","scales","yl","yr","grid","drawOnChartArea","LineSpatModal","onLoadLine","spatCnt","setSpatCnt","setComment","spat_count","LineTagButton","selectedTags","isPast","setIsPast","tag_id","pastForm","setPastForm","toggleClick","toggleUrgent","pastConfirm","end_time","margin","CheckCircleFilled","MinusCircleOutlined","danger","HarvestPredictButton","predicted_date_harvest","trackTime","trackID","userName","SeedingTrackModal","seedingIDs","tracks","setTracks","track_id","statuses","tracked_time","last","track_lines","TrackStatus","HARVESTED","MIDDLE_HARVESTED","OFFLOADED_FROM_BOAT","LOADED_TO_COLD_STORAGE","STARTED_PROCESSING","FINISHED_PROCESSING","SEEDED","BagStatus","AddTrackStatusModal","seedingID","harvestID","setHarvestID","setCode","setStatus","harvestOptions","statusOptions","test","harvest_id","FlupsyMusselLineDesktop","onClickPrevGroup","onClickNextGroup","isPrevEnabled","isNextEnabled","showEditLineModal","showEditSeedModal","onSeedingClick","onAssessmentClick","onCatchSpatClick","onHarvestClick","onMaintenanceClick","onFloatingManageClick","onExtraSeedClick","checkedHistoryView","onHistoryViewClick","isFarmable","curFarm","longlineLength","cur","next","LINE_ID","LINE_NAME","showLineSpat","setShowLineSpat","trackSeedings","setTrackSeedings","qrSeed","setQrSeed","totalHarvested","total_harvested_amount","totalSeeded","total_seeded_amount","totalStorage","total_storage","lastActivityDate","timestamps","getNewestDate","prevIcon","nextIcon","is_growing","Pen","last_spat_count","fontStyle","textDecorationLine","MusselLineDesktop","assessmentColor","bagsQuantity","total_harvested_bags","harvestedLength","total_harvested_length","pending_inventories","OysterLineProbModal","OysterLineDesktop","curCycle","curL","prevL","nextL","growingBaskets","basketSum","visibleProb","setVisibleProb","total_harvested_basket_count","SeaweedLineDesktop","LineTemplateDesktop","MusselLineMobile","menuClick","OysterLineMobile","SeaweedLineMobile","FlupsyMusselLineMobile","FlupsyOysterLineMobile","LineTemplateMobile","SeedManageRow","colSpan","FloatsRow","onDelete","onWeatherOpen","AssessmentRow","onCommentOpen","onImageOpen","typeLabel","MaintenanceRow","MaintenanceTable","withTitle","mntData","setMntData","assData","setAssData","fltData","setFltData","weather","setWeather","is","deleteAssessment","deleteMaintenance","deleteFloating","concat","tableLayout","FarmLine","setLineData","musselLine","maxIdx","csIndex","setCsIndex","isNextEnable","isPrevEnable","mainSeedResource","handleClickPrevGroup","handleClickNextGroup","editLineData","setEditLineData","seedModal","setSeedModal","visibleAssess","setVisibleAssess","editSeedModal","setEditSeedModal","maintenanceModal","setMaintenanceModal","visibleInventories","setVisibleInventories","visibleExtraSeed","setVisibleExtraSeed","visibleCatchSpat","setVisibleCatchSpat","visibleHarvestModal","setVisibleHarvestModal","visibleTimeline","setVisibleTimeline","timelines","setTimelines","setWeathers","toggleVisibleTimeline","with_history","resp","inventory_seeds","wsp","lsp","logs","updated_at","planned","planned_date_history","isInternal","AddLines","lineGroups","setLineGroups","handleConfirmData","groupOptions","FarmForm","typeOf","onPosition","dataFarm","positionInMap","setBounds","locMethod","setLocMethod","maxLatitude","maxLongitude","isDisableOwner","setIsDisableOwner","handleOnAddLine","handleChangeLineData","obj","objIng","isValue","validValue","validLocation","valueArray","newV","handleChangeFields","updateBound","deleteBound","locationItems","paddingRight","ownersWithId","newOwner","handleMapClick","PercentIcon","validLat","validLng","filterOwners","long","addFarm","defaultLocation","FarmsForm","setPosition","setPositionInMap","mapPosition","FarmLineInfoModal","toDateFormat","SpatLabel","assessFields","seedFields","assessValues","seedValues","LineTr","moveGroup","moveOrder","groupId","showModal","over","setOver","lineStatus","onDragLeave","group_id","VisualLinesGroup","maxW","fromCharCode","NewGroup","FarmVisualLinesPage","selectedLine","setSelectedLine","buildGroups","g","pos","finish","catch","getMaxBackbone","group","InputModalTwo","onConfirmTwo","confirmNameBtnTwo","hideCancel","selectInventories","selectFloatInventories","selectIvtPositions","getMarkedLength","removeMarkedLength","LineRowItem","moveColumn","floatsPositions","floatsX","setFloatsX","allowDrag","setAllowDrag","colCode","tps","ids","setMarkedLength","old_len","handleDragStartPoint","clientX","handleClickFloatsPoint","zeroX","getBoundingClientRect","left","floatTypeId","floatId","clearData","onMouseDown","NewColumn","FarmVisualItem","showLineModal","goToFarm","onCol","setOnCol","classList","contains","parentNode","colNo","getAttribute","handleDragLeave","targetColNo","filterLineColumns","lineColumn","VisualFarmsPage","lineVisible","setLineVisible","curPage","setCurPage","visibleIvtModal","setVisibleIvtModal","goToLineDetail","goToFarmDetail","pageSize","page","FarmsRouter","notifications","Notifications","notification","selectCustomFields","selectTags","selectAssessmentFields","selectAutomations","automations","selectAutoReports","reports","timeLabel","MobileAutomation","tagSchedule","creator_id","assigned_to","MobileAutomationTable","AutomationTable","isTableChild","editField","checkPermission","assigned_boat_id","typeList","units","AutomationModal","editId","onSelectTag","types","periods","freOptions","report_type","AutoReportModal","TagScheduleModal","submitData","is_from_last","reportColumns","AutomationPage","autoReports","autoData","setAutoData","visAuto","setVisAuto","deleteAutomation","setDeleteAutomation","autoId","setAutoId","showReport","setShowReport","isTagType","setIsTagType","showAutomationAddModal","dat","onConfirmDelete","permissionsLabel","UserPermissionsModal","checkedFarms","setCheckedFarms","checkedLines","setCheckedLines","checkedPermissions","setCheckedPermissions","setRole","isSelectedLine","isFullSelected","togglePermission","fs","toggleFarm","toggleLine","UpdateUserModal","psConfirm","setPsConfirm","handleChange","register_url","navigator","clipboard","writeText","InvitedUsers","invites","setInvites","loadInvites","QRImageModal","qrCode","justifyContent","flexDirection","canvas","toBlob","blob","write","ClipboardItem","ViewQRButton","handleClick","defaultColumns","roles","Users","usersStore","isSearch","setIsSearch","isSort","setIsSort","roleSelected","setRoleSelected","delUser","setDelUser","closeUser","setCloseUser","selectedUser","setSelectedUser","ownerSelUser","setOwnerSelUser","userQR","setUserQR","handleFilter","defaultUser","handleOnRole","handleOnActiveSearch","handleOnActiveSort","updateUserStatus","toggleUserVerified","loginQRGenerate","SortIcon","SearchBigIcon","select","zeroPad","num","padStart","getYearRange","getMonth","BudgetYearArrows","disabledNext","disabledPrev","ValueCell","actual","ProfitSpan","farmColumns","total_harvest_income","total_seeding_cost","total_maintenance_cost","total_harvest_cost","lineColumns","seeding_cost","maintenance_cost","harvest_cost","BudgetTotalPage","setYear","summary","total_length","total_harvest_amount","BudgetLogsTable","logsData","onPagination","change","old","new","BudgetLogsMobile","onDeleteLog","viewLog","setViewLog","human_name","user_name","BudgetLog","setLogs","deleteId","setDeleteId","setPagination","handleOnDelete","budget_log_id","paginationOnChange","changePagination","isIn","current_page","page_size","CreateAccountMessage","success","failed","message_id","DeleteAccountMessage","ReadAccountMessages","offset","limit","MessageActionReadAll","message_ids","AccountMessagesPage","setContent","setMessages","itemId","sendMessage","sendReadAction","setReadAll","is_read","is_mine","SpatStorageMobileTable","showDeleteModal","destination_line","dst_line_name","seeded_date","src_line_id","dst_line_id","setHours","has_assessment","conditions","SpatStorageModal","seedTypeOptions","busType","setBusType","assessmentForm","setAssessmentForm","availableLines","tmpForm","FlupsySectionsModal","bucketsX","bucketsY","divisions","bucketsData","getLine","lineOutput","seeds","input_date","fluspy_position","buckets","lineNumber","gutter","justify","span","renderBuckets","basketsPerSectionsOptions","FlupsyModal","basketketsPerSection","setBasketketsPerSection","showCreateForm","setShowCreateForm","backetWidth","setBacketWidth","backetHeight","setBacketHeight","showFluspySectionsModal","setShowFluspySectionsModal","setBucketsData","existingData","setExistingData","fetchFlupsy","selectExisting","metadata","seedColumns","SpatTrackItem","curStorage","SpatTrackRow","ArchiveModal","spatStorage","archiveClick","close_action","is_closed","mortalityClick","loss","SpatStoragesPage","setShowModal","showFlupsyModal","setShowFlupsyModal","deleteShow","setDeleteShow","fltType","setFltType","pageOptions","setPageOptions","filterFarm","setFilterFarm","filterLine","setFilterLine","archiveData","setArchiveData","onAddClick","redirectTo","whiteSpace","harvested_weight","menus","filteredSpats","id_str","po","dR","spat_parents","getSubRows","found","lastItem","current_stock","last_float_job","last_assessment_date","subColumns","InventoriesPage","modalTitle","setModalTitle","performs","setPerforms","showAddModal","deleteSelectedItem","performance","basicColumns","rowsData","musselFields","MusselFormView","onNextClick","OysterFormView","spat_num","batch","indexOf","growingArea","batch_no","openPDF","HarvestPDFCodeButton","opened","setOpened","setType","paperQuantity","setPaperQuantity","showFinal","setShowFinal","modalClose","paper_quantity","CategoryScale","BarElement","Legend","convertRow","season","colors","getHarvests","date_from","date_to","SummaryHarvestPage","setHarvests","setLastHarvest","bestPerformingData","setBestPerformingData","catchSpatMonthData","setCatchSpatMonthData","monthData","setMonthData","fltOpt","setFltOpt","setSeasons","tmpHv","count","dateMin","dateMax","uniqueSeasons","ss","handlePageChange","getHarvestPerYearDataSets","getBestPerformingDataSets","getLastAssDate","sizeRange","shellSize","compareReady","al","sl","el","LinesPage","selectedOption","setSelectedOption","sizeFrom","setSizeFrom","sizeTo","setSizeTo","chkTags","setChkTags","fltStage","setFltStage","maxStage","flatMap","filteredLines","RowItem","isCollapsed","isFullChecked","toggleCollapse","onClickLabel","exp_cal_class","reportTypeOptions","budgetOption","periodTypeOptions","harvestFinalOptions","ReportPage","reportTypes","checkedFarmIds","setCheckedFarmIds","checkedLineIds","setCheckedLineIds","boatIDs","setBoatIDs","isFarmCollapsed","setIsFarmCollapsed","previewLink","setPreviewLink","rangeFrom","rangeTo","dateRange","setDateRange","updateDateRange","farmVisual","setFarmVisual","reportType","setReportType","setPeriod","fileType","setFileType","hvFinal","setHvFinal","isLineChecked","isFarmFullChecked","lineIds","toggleLineCheck","toggleFarmCheck","lTmp","toggleFarmCheckAll","requestReport","platform","range_from","range_to","file_type","download","revokeObjectURL","subtract","boat","cf","toggleFarmCollapse","frameBorder","collides","startBasket","occupied","SeedingsOrder","total_basket_line","movableSeed","updateLineSeedings","totalLine","lastUsed","start_position","end_position","start","end","autoAssignBaskets","setSeeds","isDragging","setIsDragging","saving","setSaving","dragStartX","setDragStartX","originalLeftBasket","setOriginalLeftBasket","containerRef","getOccupiedArray","handleMouseMove","container","seedLength","deltaPx","containerWidth","offsetWidth","basketsDelta","newStart","candidate","leftTry","rightTry","outOfBoundsLeft","outOfBoundsRight","snapToEmpty","updateMovableSeedPosition","handleMouseUp","getSeedStyle","leftPct","widthPct","isMovable","userSelect","handleSave","handleMouseDown","DottedLine","point","activeInfo","setActiveInfo","showAssessmentModal","setShowAssessmentModal","loadingLineData","setLoadingLineData","setSeedID","spatSourceId","setSpatSourceId","setSpatSource","showMove","setShowMove","markers","google","maps","LatLng","isInViewport","handleHarvestLoad","newPoints","totalLineLength","prepareData","hide_specie","prepareAssessmentData","emptyColor","MarkersMap","popup","mapRef","zoomed","setZoomed","gBounds","setGBounds","isShowDottedLine","onZoomChanged","currentZoom","getZoom","onBoundsChanged","newBounds","getBounds","view","onMouseOver","onMouseOut","mapPaneName","OverlayView","OVERLAY_LAYER","urgent","warningIcon","library","faSquareCheck","faSquare","toLatLng","topPosition","FarmMarker","FarmsMap","timer","setCenter","boatTracks","setBoatTracks","blurBit","setBlurBit","popupView","setPopupView","lnDtl","musselDtl","oysterDtl","lastSeed","spatSrc","updatedSeedings","setUpdatedSeedings","countOf","empty","require_assessment","catch_spat","growing_mussel","totalSeedLength","tmpLine","ol","total_seeded_basket_count","storageType","seedPercent","ml","total_seeded_length","lineLength","updatedSeed","farmMarkers","generateSeedingPoints","interpolatePoint","ratio","lastAssignedBasket","lastPoint","emptyEndRatio","emptyEndPoint","seedingEndRatio","seedingEndPoint","lineMarkers","boatMarkers","boat_tracks","fromNow","newSeedings","maxHeight","moveCenter","MusselHarvestHeader","firstStageLength","prevStageLength","lastStageLength","stageAmountSum","stageLengthSum","grownDays","lr","firstRatio","lastRatio","OysterHarvestHeader","stageMortalitySum","seededBaskets","SeaweedHarvestHeader","seededArea","ll","trackColumns","harvestNumber","bagColumns","bag_details","qr_data","bagDataColumns","HarvestTrackModal","trackIDs","trackRows","totProcessed","hc","HarvestDetailPage","HARVEST_ID","setHarvestData","asPhotoModalVisible","setAsPhotoModalVisible","assessPhotos","setAssessPhotos","visTrack","setVisTrack","tagLogs","setTagLogs","pdf_form","pdfFile","bn","atob","ba","Uint8Array","formDownload","first_stage_length","prev_stage_length","last_stage_length","stage_length_sum","stage_amount_sum","grown_days","stage_mortality_sum","getAccountUsers","getUserMessages","userId","receiver_id","setReadAction","lastMsgId","sender_id","last_message_id","UserMessagesPage","suId","setSuId","setLimit","loadingMsg","setLoadingMsg","readMsgHandle","uId","unread_msg_count","handleClickUser","scrollHeight","clientHeight","sender","PaperFormModal","assessmentFields","fileInputRef","setCurFarm","setImage","scanned","setScanned","parseImage","base64Image","handleConfirm","parsed","files","WarningBox","textDecoration","MapModal","titles","paper_seeding","paper_floating","paper_assessment","paper_harvest","bulk_mussel_harvest","bulk_oyster_harvest","bulk_mussel_seed","bulk_oyster_seed","QueuedDataPage","mapLoc","setMapLoc","updatingItem","setUpdatingItem","setWarning","showCustom","setShowCustom","showSuccess","confirmMaintenance","updateQueueItem","confirmAssessment","confirmInventorySeed","confirmBulkItem","suffix","_type","deleteQueueItem","isUpdate","mh","q","lines_count","is_unfinished","BoatModal","isAdding","BoatsPage","userBoats","setBoats","selectedBoat","setSelectedBoat","showDelete","setShowDelete","loadBoats","textDecorationColor","handleEditClick","handleDeleteClick","us","onSelectCrew","assignUser","boatId","MobileCard","onOpenInfo","onOpenImage","LineSpatsPage","selectedFarm","setSelectedFarm","cntMin","setCntMin","cntMax","setCntMax","spat_count_min","spat_count_max","removeLineSpat","spat_id","spatColumns","selectFarm","uploadExcel","ImportCyclesPage","setFile","setResult","special","setSpecial","defaultSeason","setDefaultSeason","default_season","failed_count","err","total_count","failed_data","activity_id","getTaskOptions","todayStr","is_completed","ModalTask","viewOnly","curBoat","setCurBoat","handleOnSelectLine","handleSelectBoat","AssessmentCell","assessData","onShowAssessment","HarvestCell","onClickCell","InventorySeedCell","floatsData","onShowFloats","MaintenanceCell","onShowMaintenance","RequireAssessmentCell","reqLine","onClickAssessment","SeedingCell","onShowSeed","TaskCell","onShowTask","onCompleteTask","onEditTask","onDeleteTask","Check","RefuelCell","fuel_price","fuel_amount","CalendarCell","cellData","onShowReqAssess","onShowHarvest","perPage","entities","req_assess_seeds","boat_refuels","btn","entityData","FarmWeatherModal","setFarmID","TimeTracks","TimeRange","ReportItem","DailyReportModal","dateStr","day","nextDay","viewModeOptions","TodayStr","CalendarPage","tasksData","loadedData","setLoadedData","curDay","setCurDay","setCreateTask","showTaskData","setShowTaskData","editTaskData","setEditTaskData","editTask","setEditTask","deleteTask","setDeleteTask","deleteTaskId","setDeleteTaskId","createTData","setCreateTData","checkingTask","setCheckingTask","focWeathers","setFocWeathers","dailyStr","setDailyStr","viewMode","setViewMode","assessCell","setAssessCell","mntCell","setMntCell","floatCell","setFloatCell","seedCell","setSeedCell","reqCell","setReqCell","harCell","setHarCell","getBusinessType","dayLabel","getDay","rows","ds","mm","yy","firstWeek","lastDay","getDate","getGridRows","insertData","insertWeather","handleOnCreateTask","handleUpdateMonth","handleOnConfirmDelete","min_time","max_time","wi","clock_icon","TodayWindyPage","windy","setWindy","setLatitude","setLongitude","cellSpacing","ts","PlannedActualRate","calcInterestRate","changeOptions","BudgetExpenseModal","paramLineId","budgetFarm","setMode","setLineId","setName","expenseType","setExpenseType","budgetType","setBudgetType","setAmount","setUnit","bud","CountContent","BudgetFarmPage","showExpense","setShowExpense","expense","profit","bordered","rowClassName","createNew","ImportLinesPage","setFarmId","setCreateNew","line_uid","LOCAL_PAGE_KEY","assessmentOptions","withFields","ImportAssessmentsPage","setHeaders","getFieldKey","extractKeys","assessOptions","saved","handleUpdateField","custom_fields","BoatMessagesPage","isReading","lastMessage","setLastMessage","sbId","setSbId","handleClickBoat","readMessage","unread_message_count","lastMsg","loadMessages","with_message_count","tempMsg","lastReadId","QRImage","mussel_logo","setPrint","this","contentWindow","__container__","onbeforeunload","removeChild","onafterprint","focus","print","QRGeneratePage","qrVal","setQrVal","cnt","setCnt","frames","remove","codes","frame","visibility","right","bottom","srcdoc","pngUrl","div","newCanvas","ctx","getContext","logoImg","Image","logoWidth","drawImage","logoX","downloadLink","processed","wasted","unprocessed","SummaryProcessPage","processing","curBag","setCurBag","speed","setSpeed","setTrackIDs","aTime","bTime","inStoreCnt","processingCnt","todayProcessedCnt","totMussels","totWasted","AbacusIcon","BagProcessModal","trackCode","bagNames","bagMussels","setMussels","parent_code","handleChangeInput","statusLabel","BagSumView","StatusButton","removeClick","upstate","ResultView","onRefresh","setUpstate","visModal","setVisModal","processedSum","splitCount","children_count","canProcess","CvtNum","QRScanPage","setSeedingId","setTrackCode","ExcelFile","ReactExport","ExcelSheet","calcRevenue","seed_length","seed_cost","total_fee","process_details","BudgetCell","budget","budget_amount","budget_price","SeasonArrow","lineSeason","setLineSeason","onChangeLineData","onPrevClick","previous","SeasonsNavigator","lineSeasons","setLineSeasons","prevAble","nextAble","len","prevClick","newSeasons","nextClick","SummaryPerformancePage","musselData","setMusselData","oysterData","setOysterData","wch","font","bold","button","dd","is_length","is_cost","harvest_bags","overCell","is_bold","fixed","cellDiv","excel","table","oysters","dataSet","BiosecurityPage","content_type","seed_size","harvest_size","grow_months","HarvestStagesPage","musselTable","oysterTable","seaweedTable","stageCnt","stage_order","musselParam","min_seed","max_harvest","months_sum","speed_sum","musselLines","oysterParam","oysterLines","seaweedParam","seaweedLines","avg_months","avg_speed","with_detail","LineGroupModal","lineGroup","LineGroups","addGroup","setAddGroup","editGroup","setEditGroup","groupColumns","TaskTypeButton","setLabel","archiveTask","cpt","TasksTable","isCompleted","onRowClick","rs","creator","dov","unix","tabs","TaskListPage","showTask","setShowTask","activeTab","setActiveTab","filterTitle","setFilterTitle","completedClearClick","completeTask","filteredTasks","zIndex","ActionLabel","inputOptions","dtOptions","FieldModal","FieldTable","CustomFieldSetting","addType","setAddType","handleDelete","periodOptions","TagModal","periodUnit","setPeriodUnit","TagsTable","hex","char","TagsPage","showAdd","setShowAdd","editTag","setEditTag","AssessmentSuggest","baseData","showAccept","setShowAccept","setBoatId","dueDate","setDueDate","slCnt","setSlCnt","farmsInfo","last_date","suggested","totalLines","totalCnt","acceptClick","Text","mark","renderItem","SeedingSuggest","last_seed","suggest","from_line","sourceLine","setSourceLine","target_line","targetLine","setTargetLine","emptyLines","firstStageLines","firstStateLines","totalEmpty","srcLine","tarLine","date_seed","HarvestSuggest","harvestPredictions","forecast_harvests","readyLines","totReadyCnt","totGrowingCnt","suggestLine","minD","is_ready","forecast_date","FloatingSuggest","last_floating","setAccept","ivtLabel","last_float_date","used_floats","estimate_weight","suggest_floats","EPS","LineRow","sizeNames","onToggleCheck","totSum","species","otherSum","ordersView","rowSpan","farmName","farmNumber","daysGrown","totalDz","totalBaskets","farmingMethod","spc","growing","paddingBottom","needBaskets","OrderSuggest","setOrders","suitLines","setSuitLines","taskData","setTaskData","totalRequired","updateOrder","suitHeaders","maxCnt","oam","final","insufficiency","finals","osm","usedDz","ordered","wasteDz","farmStr","MaintenanceSuggest","SuggestPage","baseAssess","setBaseAssess","baseSeed","setBaseSeed","baseHarvest","setBaseHarvest","baseFloat","setBaseFloat","tabKey","setTabKey","loadAssess","loadSeed","loadHarvest","loadFloating","activeKey","set","getJSTime","PaperSeedingForm","formID","float_quantity","extractForm","curFloat","goBack","PaperAssessForm","PaperFloatingForm","PaperHarvestForm","ivtSum","newInventories","changeInventory","PaperFormPage","SharedModal","approveClick","access_id","is_approved","r_columns","owner_name","s_columns","isTried","ExternalFarmAccessPage","requested","setRequested","shared","setShared","farmNo","setFarmNo","focShd","setFocShd","taskColumns","customTask","is_billable","hoursDiff","t1","t2","captureActivity","act","ImportTimeSheetPage","mondayOptions","today","threeMonthsAgo","reverse","getLastThreeMonthsMondays","setBoat","setTasks","monday","setMonday","importExcel","onchange","task_type","activity","client","tasksCount","actionsCount","getAction","totalHours","selectBoat","FarmsOverviewChart","emptyCnt","growingCnt","emp","borderWidth","PerformanceCharts","loadingHarvests","setLoadingHarvests","loadingPerformance","setLoadingPerformance","setPerformance","harvestsData","toLocaleString","getLastSixMonths","musselSums","oysterSums","performData","fDay","beginAtZero","indexAxis","Row","onTaskClick","todayDate","todayTimestamp","CalendarView","yesterday","tomorrow","newTaskDate","setNewTaskDate","viewTask","setViewTask","MessagesView","UpcomingHarvests","setRows","pfm","estimated_date","HomePage","OysterSummaryPage","rotations","setRotations","totalCell","onHand","ready","wait","notFull","percentFull","basketCapacity","basketUsed","linesCount","farmCells","sd","step","isBold","with_spats","ColumnModifyModal","oyster_estimate_hidden_columns","oysterEstinateOrder","oyster_estimate_columns_order","OysterEstimatesPage","filterFarmID","setFilterFarmID","editLineId","setEditLineId","rotation","ps","cs","estimates","spat_name","age","toRowData","flat","cropColumns","fromEntries","week","last_size","estimate_dz","OysterCalenderPage","accountSetting","setRowsData","setChartData","totalSum","linesProps","weekRanges","harvestSize","first","prop","pd","basketCount","etaDozens","last_final_harvest","monthRanges","chartValues","chartLabels","estimated","totalMussels","HarvestPlannerPage","totalMusselSum","totalOysterSum","total_mussels","total_oysters","downloadExcel","mcl","harvest_unit_amount","musselValues","oysterValues","musselSum","oysterSum","isFinal","isTotal","OysterLinesPage","dataCols","unitSum","normalRoutes","route","expandedRowKeys","setExpandedRowKeys","fetchData","paddingTop","expanded","CaretDownOutlined","OnboardingPage","ReactNativeWebView","postMessage","Footer","hideGuide","footerLogo","Router","pusherKey","pusherCluster","scrollTo","pusher","Pusher","subscribe","App","script","async","head","loadUsetifulScript","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM"],"mappings":"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cAET,CACElC,IAAK,YACL5D,KAAM,SACN8F,MAAO,aAET,CACElC,IAAK,YACL5D,KAAM,SACN8F,MAAO,aAET,CACElC,IAAK,eACL5D,KAAM,SACN8F,MAAO,gBAET,CACElC,IAAK,eACL5D,KAAM,SACN8F,MAAO,gBAET,CACElC,IAAK,YACL5D,KAAM,SACN8F,MAAO,aAET,CACElC,IAAK,aACL5D,KAAM,SACN8F,MAAO,cAET,CACElC,IAAK,kBACL5D,KAAM,SACN8F,MAAO,mBAET,CACElC,IAAK,cACL5D,KAAM,SACN8F,MAAO,eAET,CACElC,IAAK,UACL5D,KAAM,SACN8F,MAAO,eAET,CACElC,IAAK,aACL5D,KAAM,SACN8F,MAAO,cAET,CACElC,IAAK,QACL5D,KAAM,SACN8F,MAAO,mCAET,CACElC,IAAK,eACL5D,KAAM,SACN8F,MAAO,gBAET,CACElC,IAAK,cACL5D,KAAM,OACN8F,MAAO,eAET,CACElC,IAAK,mBACL5D,KAAM,OACN8F,MAAO,oBAET,CACElC,IAAK,sBACL5D,KAAM,OACN8F,MAAO,uBAET,CACElC,IAAK,oBACL5D,KAAM,OACN8F,MAAO,qBAET,CACElC,IAAK,qBACL5D,KAAM,SACN8F,MAAO,uBAET,CACElC,IAAK,uBACL5D,KAAM,SACN8F,MAAO,wBAET,CACElC,IAAK,cACL5D,KAAM,SACN8F,MAAO,uBAET,CACElC,IAAK,QACL5D,KAAM,SACN8F,MAAO,eAET,CACElC,IAAK,iBACL5D,KAAM,SACN8F,MAAO,kBAET,CACElC,IAAK,UACL5D,KAAM,SACN8F,MAAO,YAGX4xB,GAAyB,CACvB,CACE9zB,IAAK,WACL5D,KAAM,SACN8F,MAAO,YAET,CACElC,IAAK,iBACL5D,KAAM,SACN8F,MAAO,kBAET,CACElC,IAAK,eACL5D,KAAM,SACN8F,MAAO,gBAET,CACElC,IAAK,aACL5D,KAAM,SACN8F,MAAO,cAET,CACElC,IAAK,cACL5D,KAAM,SACN8F,MAAO,eAET,CACElC,IAAK,gBACL5D,KAAM,OACN8F,MAAO,oBAWP62F,GAAi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","file":"static/js/main.18ae8d20.chunk.js","sourcesContent":["import axios, { AxiosRequestConfig, Method, ResponseType } from 'axios';\n\ninterface ISingleAPIResponse {\n status: boolean;\n data: any;\n}\n\n(window as any).isRefreshingToken = false;\n(window as any).lastAuthToken = '';\nlet glbResponse;\n\nexport const sendRequest = async (\n data: any,\n method: 'GET' | 'POST' | 'DELETE' | 'PUT',\n url: string,\n requireAuth = false,\n) => {\n try {\n const Authorization = requireAuth\n ? {\n Authorization: `Bearer ${localStorage.getItem('marine-farm')}`,\n }\n : {};\n const req = {\n headers: {\n ...Authorization,\n Accept: '*',\n },\n method,\n url: `${process.env.REACT_APP_API_URL}${url}`,\n };\n\n Object.assign(req, method === 'GET' ? { params: data } : { data });\n const response = await axios(req);\n\n if (response.status >= 200 && response.status < 299) {\n const resData = await response.data;\n return resData;\n }\n\n return false;\n } catch (e: any) {\n console.log(e);\n return e?.response?.data;\n }\n};\n\nexport const sendSingleRequest = async (\n data: any,\n method: 'GET' | 'POST' | 'DELETE' | 'PUT',\n url: string,\n requireAuth = false,\n): Promise => {\n const delay = (ms: number) => new Promise(res => setTimeout(res, ms));\n\n for (let ws = 3; ws < 30; ws += 3) {\n try {\n await waitForRefreshToken();\n\n const Authorization = requireAuth\n ? {\n Authorization: `Bearer ${localStorage.getItem('marine-farm')}`,\n }\n : {};\n let req = {\n headers: {\n ...Authorization,\n Accept: '*',\n },\n method,\n url: `${process.env.REACT_APP_API_URL}${url}`,\n };\n\n Object.assign(req, method === 'GET' ? { params: data } : { data });\n let response = await axios(req);\n if (response.data.message === 'Unauthenticated.') {\n const r = await waitForRefreshToken();\n if (r && (window as any).lastAuthToken.length > 0) {\n req.headers.Authorization = `Bearer ${(window as any).lastAuthToken}`;\n response = await axios(req);\n } else if (r && (window as any).lastAuthToken.length <= 0) {\n window.location.href = window.location.origin + '/sign-in';\n return { status: false, data: null };\n } else {\n const auth: any = {\n access_token: localStorage.getItem('marine-farm') ?? undefined,\n refresh_token:\n localStorage.getItem('marine-farm-refresh') ?? undefined,\n id: localStorage.getItem('marine-farm-user_id') ?? undefined,\n };\n const responseRefresh = await refreshTokenAPI(auth);\n if (responseRefresh?.status === 'Success') {\n req.headers.Authorization = `Bearer ${responseRefresh.data.access_token}`;\n response = await axios(req);\n } else {\n window.location.href = window.location.origin + '/sign-in';\n return { status: false, data: null };\n }\n }\n }\n\n if (response.status >= 200 && response.status < 299) {\n const resData = await response.data;\n return {\n status: true,\n data: resData,\n };\n } else {\n const resData = await response.data;\n return {\n status: false,\n data: resData,\n };\n }\n } catch (e: any) {\n if (e?.response?.status === 429) {\n await delay(ws * 1000);\n continue;\n }\n console.log(e);\n return {\n status: false,\n data: e?.response?.data,\n };\n }\n }\n return { status: false, data: null };\n};\n\nexport const sendMultipart = async (\n data: any,\n method: 'GET' | 'POST' | 'DELETE' | 'PUT',\n url: string,\n requireAuth = false,\n access_token = '',\n): Promise => {\n try {\n await waitForRefreshToken();\n\n const Authorization = requireAuth\n ? {\n Authorization: `Bearer ${\n access_token\n ? `${access_token}`\n : localStorage.getItem('marine-farm')\n }`,\n }\n : {};\n const req = {\n headers: {\n ...Authorization,\n Accept: '*',\n 'Content-Type': 'multipart/form-data',\n },\n method,\n url: `${process.env.REACT_APP_API_URL}${url}`,\n };\n\n Object.assign(req, method === 'GET' ? { params: data } : { data });\n let response = await axios(req);\n\n if (response.data.message === 'Unauthenticated.') {\n const r = await waitForRefreshToken();\n if (r && (window as any).lastAuthToken.length > 0) {\n req.headers.Authorization = `Bearer ${(window as any).lastAuthToken}`;\n response = await axios(req);\n } else if (r && (window as any).lastAuthToken.length <= 0) {\n window.location.href = window.location.origin + '/sign-in';\n return { status: false, data: null };\n } else {\n const auth: any = {\n access_token: localStorage.getItem('marine-farm') ?? undefined,\n refresh_token:\n localStorage.getItem('marine-farm-refresh') ?? undefined,\n id: localStorage.getItem('marine-farm-user_id') ?? undefined,\n };\n const responseRefresh = await refreshTokenAPI(auth);\n if (responseRefresh?.status === 'Success') {\n req.headers.Authorization = `Bearer ${responseRefresh.data.access_token}`;\n response = await axios(req);\n } else {\n window.location.href = window.location.origin + '/sign-in';\n return { status: false, data: null };\n }\n }\n }\n\n if (response.status >= 200 && response.status < 299) {\n return {\n status: true,\n data: await response.data,\n };\n } else {\n return {\n status: false,\n data: await response.data,\n };\n }\n } catch (e: any) {\n return {\n status: false,\n data: e?.response?.data,\n };\n }\n};\n\nexport const waitForRefreshToken = () => {\n return new Promise(resolve => {\n function checkFlag(p: boolean) {\n if ((window as any).isRefreshingToken === false) {\n return resolve(p);\n } else window.setTimeout(() => checkFlag(true), 100);\n }\n checkFlag(false);\n });\n};\n\nconst refreshTokenAPI = async (auth: any) => {\n try {\n (window as any).isRefreshingToken = true;\n (window as any).lastAuthToken = '';\n\n localStorage.removeItem('marine-farm');\n localStorage.removeItem('marine-farm-refresh');\n localStorage.removeItem('marine-farm-user_id');\n\n glbResponse = await axios.post(\n `${process.env.REACT_APP_API_URL}api/refresh`,\n null,\n {\n headers: {\n Authorization: `Bearer ${auth.access_token}`,\n Refreshtoken: auth.refresh_token,\n User: auth.id,\n 'Content-Type': 'application/json',\n },\n },\n );\n\n if (glbResponse.status === 200) {\n const data = await glbResponse.data;\n if (data?.status === 'Success') {\n localStorage.setItem('marine-farm', data?.data.access_token);\n localStorage.setItem('marine-farm-refresh', data?.data.refresh_token);\n localStorage.setItem('marine-farm-user_id', data?.user_id);\n (window as any).lastAuthToken = data?.data.access_token;\n }\n (window as any).isRefreshingToken = false;\n return data;\n }\n (window as any).isRefreshingToken = false;\n return false;\n } catch (e: any) {\n (window as any).isRefreshingToken = false;\n return e;\n }\n};\n\nexport const downloadInvoice = async (id: string, access_token = '') => {\n try {\n const Authorization = {\n Authorization: `Bearer ${\n access_token ? `${access_token}` : localStorage.getItem('marine-farm')\n }`,\n };\n const req: AxiosRequestConfig = {\n headers: {\n ...Authorization,\n Accept: '*',\n },\n method: 'GET',\n url: `${process.env.REACT_APP_API_URL}api/subscription/invoices/download/${id}`,\n responseType: 'blob',\n };\n\n let response = await axios(req);\n\n if (response.data.message === 'Unauthenticated.') {\n const r = await waitForRefreshToken();\n if (r && (window as any).lastAuthToken.length > 0) {\n req.headers.Authorization = `Bearer ${(window as any).lastAuthToken}`;\n response = await axios(req);\n } else if (r && (window as any).lastAuthToken.length <= 0) {\n window.location.href = window.location.origin + '/sign-in';\n return { status: false, data: null };\n } else {\n const auth: any = {\n access_token: localStorage.getItem('marine-farm') ?? undefined,\n refresh_token:\n localStorage.getItem('marine-farm-refresh') ?? undefined,\n id: localStorage.getItem('marine-farm-user_id') ?? undefined,\n };\n const responseRefresh = await refreshTokenAPI(auth);\n if (responseRefresh?.status === 'Success') {\n req.headers.Authorization = `Bearer ${responseRefresh.data.access_token}`;\n response = await axios(req);\n } else {\n window.location.href = window.location.origin + '/sign-in';\n return { status: false, data: null };\n }\n }\n }\n\n const durl = window.URL.createObjectURL(new Blob([response.data]));\n const link = document.createElement('a');\n link.href = durl;\n link.setAttribute('download', 'invoice.pdf');\n document.body.appendChild(link);\n link.click();\n\n return false;\n } catch (e: any) {\n return e?.response?.data;\n }\n};\n\nexport const downloadReport = async (data: any, mode: string) => {\n try {\n await waitForRefreshToken();\n\n const Authorization = {\n Authorization: `Bearer ${localStorage.getItem('marine-farm')}`,\n };\n const req = {\n headers: {\n ...Authorization,\n Accept: '*',\n 'Content-Type': 'application/json',\n },\n method: 'POST' as Method,\n responseType: 'blob' as ResponseType,\n url: `${process.env.REACT_APP_API_URL}api/report/${mode}`,\n };\n Object.assign(req, { data });\n let response = await axios(req);\n\n if (response.data.message === 'Unauthenticated.') {\n const r = await waitForRefreshToken();\n if (r && (window as any).lastAuthToken.length > 0) {\n req.headers.Authorization = `Bearer ${(window as any).lastAuthToken}`;\n response = await axios(req);\n } else if (r && (window as any).lastAuthToken.length <= 0) {\n window.location.href = window.location.origin + '/sign-in';\n return { status: false, data: null };\n } else {\n const auth: any = {\n access_token: localStorage.getItem('marine-farm') ?? undefined,\n refresh_token:\n localStorage.getItem('marine-farm-refresh') ?? undefined,\n id: localStorage.getItem('marine-farm-user_id') ?? undefined,\n };\n const responseRefresh = await refreshTokenAPI(auth);\n if (responseRefresh?.status === 'Success') {\n req.headers.Authorization = `Bearer ${responseRefresh.data.access_token}`;\n response = await axios(req);\n } else {\n window.location.href = window.location.origin + '/sign-in';\n return { status: false, data: null };\n }\n }\n }\n\n return response;\n } catch (error) {\n throw error;\n }\n};\n\nexport const downloadPDF = async (\n data: any,\n method: 'POST' | 'GET',\n url: string,\n) => {\n try {\n await waitForRefreshToken();\n\n const Authorization = {\n Authorization: `Bearer ${localStorage.getItem('marine-farm')}`,\n };\n const req = {\n headers: {\n ...Authorization,\n Accept: '*',\n 'Content-Type': 'application/json',\n },\n method,\n responseType: 'blob' as ResponseType,\n url: `${process.env.REACT_APP_API_URL}${url}`,\n };\n Object.assign(req, { data });\n let response = await axios(req);\n\n if (response.data.message === 'Unauthenticated.') {\n const r = await waitForRefreshToken();\n if (r && (window as any).lastAuthToken.length > 0) {\n req.headers.Authorization = `Bearer ${(window as any).lastAuthToken}`;\n response = await axios(req);\n } else if (r && (window as any).lastAuthToken.length <= 0) {\n window.location.href = window.location.origin + '/sign-in';\n return { status: false, data: null };\n } else {\n const auth: any = {\n access_token: localStorage.getItem('marine-farm') ?? undefined,\n refresh_token:\n localStorage.getItem('marine-farm-refresh') ?? undefined,\n id: localStorage.getItem('marine-farm-user_id') ?? undefined,\n };\n const responseRefresh = await refreshTokenAPI(auth);\n if (responseRefresh?.status === 'Success') {\n req.headers.Authorization = `Bearer ${responseRefresh.data.access_token}`;\n response = await axios(req);\n } else {\n window.location.href = window.location.origin + '/sign-in';\n return { status: false, data: null };\n }\n }\n }\n\n return response;\n } catch (error) {\n throw error;\n }\n};\n","import { IAuthAction, IAuthState } from './auth.type';\n\nconst initialState: IAuthState = {\n nextView: {\n isSuccess: false,\n email: '',\n },\n token: null,\n profile: null,\n userMeta: null,\n settings: {\n harvestTypes: null,\n customTasks: null,\n friendEmails: null,\n showGpsWarning: null,\n },\n};\n\nconst authReducer = (state = initialState, action: IAuthAction): IAuthState => {\n switch (action.type) {\n case 'AUTH/SET_TOKEN': {\n return { ...state, token: action.payload };\n }\n case 'AUTH/SET_PROFILE': {\n return { ...state, profile: action.payload };\n }\n case 'AUTH/SET_NEXT_VIEW': {\n return { ...state, nextView: action.payload };\n }\n case 'AUTH/SET_USER_META': {\n return { ...state, userMeta: action.payload };\n }\n case 'AUTH/SET_SETTINGS': {\n return { ...state, settings: action.payload };\n }\n case 'AUTH/QUEUE_COUNT': {\n let newState = { ...state };\n if (newState.userMeta) {\n newState.userMeta.queue_count = action.payload;\n }\n return newState;\n }\n case 'AUTH/SET_DEMO_LOGIN': {\n return { ...state, isDemo: action.payload };\n }\n case 'AUTH/LOGOUT': {\n return initialState;\n }\n default:\n return state;\n }\n};\n\nexport default authReducer;\n","import {\n IAutomation,\n ICustomField,\n ITag,\n ITagSchedule,\n} from '../../entities/automation.entities';\nimport { IAutomationAction } from './automation.type';\n\ninterface IAutomationState {\n automationsData: IAutomation[];\n customFields: ICustomField[];\n tags?: ITag[];\n tagSchedules?: ITagSchedule[];\n}\n\nconst initialState: IAutomationState = {\n automationsData: [],\n customFields: [],\n};\n\nconst automationReducer = (\n state = initialState,\n action: IAutomationAction,\n): IAutomationState => {\n switch (action.type) {\n case 'AUTOMATIONS/SET_AUTOMATIONS_DATA': {\n return { ...state, automationsData: action.payload };\n }\n\n case 'AUTOMATIONS/SET_CUSTOM_FIELDS': {\n return { ...state, customFields: action.payload };\n }\n\n case 'AUTOMATIONS/SET_TAGS': {\n return { ...state, tags: action.payload };\n }\n\n case 'AUTH/LOGOUT': {\n return initialState;\n }\n\n default:\n return state;\n }\n};\n\nexport default automationReducer;\n","import { IQueueItem } from '../../entities/automation.entities';\nimport {\n IFarmResource,\n ISpatStorageResource,\n} from '../../entities/farms.entities';\nimport { IInventoryPosition } from '../../entities/inventory.entities';\nimport { IFarmAction } from './farms.type';\n\ninterface IFarmState {\n farmsData: Array;\n spatStorages: ISpatStorageResource[];\n inventoryPositions?: IInventoryPosition[];\n queueData?: IQueueItem[];\n}\n\nconst initialState: IFarmState = {\n farmsData: [],\n spatStorages: [],\n inventoryPositions: [],\n queueData: [],\n};\n\nconst farmsReducer = (\n state = initialState,\n action: IFarmAction,\n): IFarmState => {\n switch (action.type) {\n case 'FARMS/SET_FARMS_DATA': {\n return { ...state, farmsData: action.payload };\n }\n case 'FARMS/SET_SPAT_STORAGES': {\n return { ...state, spatStorages: action.payload };\n }\n case 'FARMS/SET_INVENTORY_POSITIONS': {\n return { ...state, inventoryPositions: action.payload };\n }\n case 'FARMS/SET_QUEUE_DATA': {\n return { ...state, queueData: action.payload };\n }\n case 'AUTH/LOGOUT': {\n return initialState;\n }\n default:\n return state;\n }\n};\n\nexport default farmsReducer;\n","import { ISetUIAction, IUIState } from './ui.type';\nimport packageJson from '../../../package.json';\n\nconst initialState: IUIState = {\n isSpinner: false,\n allFeedbacks: [],\n version: packageJson.version,\n};\n\nconst uiReducer = (state = initialState, action: ISetUIAction): IUIState => {\n switch (action.type) {\n case 'UI/IS_SPINNER': {\n return { ...state, isSpinner: action.payload };\n }\n case 'UI/ADD_FEEDBACK': {\n return {\n ...state,\n allFeedbacks: [...(state.allFeedbacks ?? []), action.payload],\n };\n }\n case 'UI/REMOVE_FEEDBACK': {\n return {\n ...state,\n allFeedbacks:\n state.allFeedbacks?.filter(x => x.id !== action.payload) ?? [],\n };\n }\n case 'UI/CLEAR_FEEDBACK': {\n return { ...state, allFeedbacks: [] };\n }\n case 'UI/SET_LANG': {\n return { ...state, lang: action.payload };\n }\n case 'UI/SET_VISIBLE_GUIDE': {\n return { ...state, visibleGuide: action.payload };\n }\n case 'UI/SET_MAP_TYPE': {\n return { ...state, mapType: action.payload };\n }\n case 'AUTH/LOGOUT': {\n return initialState;\n }\n default: {\n return state;\n }\n }\n};\n\nexport default uiReducer;\n","import { IUsersAction, IUsersState } from './users.type';\n\nconst initialState: IUsersState = {\n users: [],\n boats: [],\n};\n\nconst usersReducer = (\n state = initialState,\n action: IUsersAction,\n): IUsersState => {\n switch (action.type) {\n case 'USERS/SET_USERS': {\n return { ...state, users: action.payload };\n }\n\n case 'USERS/SET_BOATS': {\n return { ...state, boats: action.payload };\n }\n\n case 'USERS/SET_NEW_ACCOUNT_MESSAGE': {\n return { ...state, newAccountMessage: action.payload };\n }\n\n case 'USERS/SET_NEW_USER_MESSAGE': {\n return { ...state, newUserMessage: action.payload };\n }\n\n case 'USERS/SET_NEW_BOAT_MESSAGE': {\n return { ...state, newBoatMessage: action.payload };\n }\n\n case 'AUTH/LOGOUT': {\n return initialState;\n }\n\n default: {\n return state;\n }\n }\n};\n\nexport default usersReducer;\n","import { IUtilsAction, IUtilsState } from './utils.type';\n\nconst initialState: IUtilsState = {\n farmUtils: [],\n pusher_key: '',\n pusher_cluster: '',\n server_env: 'production',\n};\n\nconst utilsReducer = (\n state = initialState,\n action: IUtilsAction,\n): IUtilsState => {\n switch (action.type) {\n case 'UTILS/SET_FARM_UTILS': {\n return {\n ...state,\n farmUtils: action.payload,\n };\n }\n case 'UTILS/SET_SYSTEM_SETTINGS': {\n return {\n ...state,\n pusher_key: action.payload.pusher_key,\n pusher_cluster: action.payload.pusher_cluster,\n server_env: action.payload.env,\n };\n }\n case 'AUTH/LOGOUT': {\n return initialState;\n }\n default: {\n return state;\n }\n }\n};\n\nexport default utilsReducer;\n","import { ITaskAction, ITaskState } from './tasks.type';\n\nconst initialState: ITaskState = {\n tasks: [],\n};\n\nconst utilsReducer = (\n state = initialState,\n action: ITaskAction,\n): ITaskState => {\n switch (action.type) {\n case 'TASKS/SET_TASK_DATA': {\n return { ...state, tasks: action.payload };\n }\n case 'AUTH/LOGOUT': {\n return initialState;\n }\n default: {\n return state;\n }\n }\n};\n\nexport default utilsReducer;\n","import { ISubscriptionAction, ISubscriptionState } from './subscription.type';\n\nconst initialState: ISubscriptionState = {\n status: 'not_subscribe',\n plan_data: null,\n history: null,\n payment_method: null,\n xero_accounts: [],\n xero_contacts: [],\n};\n\nconst subscriptReducer = (\n state = initialState,\n action: ISubscriptionAction,\n): ISubscriptionState => {\n switch (action.type) {\n case 'SUBSCRIPT/SET_STATUS': {\n return { ...state, ...action.payload };\n }\n case 'SUBSCRIPT/SET_XERO_ACCOUNTS': {\n return { ...state, xero_accounts: action.payload };\n }\n case 'SUBSCRIPT/SET_XERO_CONTACTS': {\n return { ...state, xero_contacts: action.payload };\n }\n case 'AUTH/LOGOUT': {\n return initialState;\n }\n default:\n return state;\n }\n};\n\nexport default subscriptReducer;\n","import { IInventoryAction, IInventoryState } from './inventories.type';\n\nconst initialState: IInventoryState = {\n inventories: [],\n};\n\nconst inventoryReducer = (\n state = initialState,\n action: IInventoryAction,\n): IInventoryState => {\n switch (action.type) {\n case 'INVENTORIES/SET_INVENTORIES': {\n return { ...state, inventories: action.payload };\n }\n case 'AUTH/LOGOUT': {\n return initialState;\n }\n default:\n return state;\n }\n};\n\nexport default inventoryReducer;\n","import { ICustomField, ITag } from '../../entities/automation.entities';\nimport {\n IFarmResource,\n ISpatStorageResource,\n} from '../../entities/farms.entities';\nimport { IInventoryResource } from '../../entities/inventory.entities';\nimport { IAccountSetting } from '../../entities/user.entities';\nimport { IUtilData } from '../../entities/utils.entities';\nimport { TExtraAction } from './extra.type';\n\ninterface IAccount {\n id: number;\n setting: IAccountSetting | null;\n type: 'operator' | 'grower';\n}\n\ninterface IExtraState {\n farms?: IFarmResource[];\n spatStorages?: ISpatStorageResource[];\n inventories?: IInventoryResource[];\n utils?: IUtilData[];\n customFields?: ICustomField[];\n tags?: ITag[];\n accounts?: IAccount[];\n}\n\nconst initialState: IExtraState = {};\n\nconst extraReducer = (\n state = initialState,\n action: TExtraAction,\n): IExtraState => {\n switch (action.type) {\n case 'EXTRA/SET_EXTRA_FARMS': {\n return { ...state, farms: action.payload };\n }\n case 'EXTRA/SET_EXTRA_INVENTORIES': {\n return { ...state, inventories: action.payload };\n }\n case 'EXTRA/SET_EXTRA_SPAT_STORAGES': {\n return { ...state, spatStorages: action.payload };\n }\n case 'EXTRA/SET_EXTRA_UTILS': {\n return { ...state, utils: action.payload };\n }\n case 'EXTRA/SET_CUSTOM_FIELDS': {\n return { ...state, customFields: action.payload };\n }\n case 'EXTRA/SET_TAGS': {\n return { ...state, tags: action.payload };\n }\n case 'EXTRA/SET_ACCOUNTS': {\n return { ...state, accounts: action.payload };\n }\n case 'AUTH/LOGOUT': {\n return initialState;\n }\n default: {\n return state;\n }\n }\n};\n\nexport default extraReducer;\n","import { combineReducers, Dispatch } from 'redux';\n\nimport authReducer from './auth/auth.reducer';\nimport automationReducer from './automation/automation.reducer';\nimport farmsReducer from './farms/farms.reducer';\nimport uiReducer from './ui/ui.reducer';\nimport usersReducer from './users/users.reducer';\nimport utilsReducer from './utils/utils.reducer';\nimport tasksReducer from './tasks/tasks.reducer';\nimport subscriptReducer from './subscription/subscription.reducer';\nimport inventoryReducer from './inventories/inventories.reducer';\nimport extraReducer from './extra/extra.reducer';\n\nconst rootReducer = combineReducers({\n auth: authReducer,\n automation: automationReducer,\n farms: farmsReducer,\n ui: uiReducer,\n users: usersReducer,\n subscription: subscriptReducer,\n utils: utilsReducer,\n tasks: tasksReducer,\n inventories: inventoryReducer,\n extra: extraReducer,\n});\n\nexport default rootReducer;\nexport type RootState = ReturnType;\nexport type IThunkType = Dispatch;\n","import { createStore, applyMiddleware } from 'redux';\nimport { persistStore, persistReducer } from 'redux-persist';\nimport storage from 'redux-persist/lib/storage';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport thunk from 'redux-thunk';\n\nimport rootReducers from './rootReducer';\n\nconst persistConfig = {\n key: 'root',\n storage,\n};\n\nconst persistedReducer = persistReducer(persistConfig, rootReducers);\n\nexport const store = createStore(\n persistedReducer,\n composeWithDevTools(applyMiddleware(thunk)),\n);\n\nexport const persistor = persistStore(store);\n","import React from 'react';\n\nexport default ({ color }: any) => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n \n);\n","import React from 'react';\n\nexport default ({ className }: any) => (\n \n \n \n);\n","import React from 'react';\n\nexport default ({ className }: any) => (\n \n \n \n);\n","import React, { FC, ReactNode } from 'react';\nimport classNames from 'classnames';\n\nimport './styles.scss';\n\ninterface IOwnProps {\n children: ReactNode;\n size: number;\n align: string;\n fontWeight: number;\n color: string;\n className?: string;\n}\n\nconst Paragrapgh: FC = ({\n children,\n size,\n align,\n fontWeight,\n color,\n className,\n}) => {\n const paragrapghClasses = classNames(\n className,\n 'paragrapgh',\n `paragrapgh--${size}`,\n `paragrapgh--${fontWeight}`,\n `paragrapgh--${color}`,\n `paragrapgh--${align}`,\n );\n return

{children}

;\n};\n\nexport default Paragrapgh;\n","import React, { FC, ReactNode } from 'react';\nimport classNames from 'classnames';\nimport { Radio } from 'antd';\n\nimport Paragrapgh from './paragrapgh/Paragrapgh';\n\ninterface IOwnProps {\n label: string;\n disabled?: boolean;\n isError?: boolean;\n value?: string | number;\n className?: string;\n isLeftText?: boolean;\n isfullWidth?: boolean;\n icon?: ReactNode;\n date?: string;\n}\n\nconst RadioButton: FC = ({\n label,\n disabled,\n isError,\n value,\n className,\n isLeftText,\n isfullWidth,\n icon,\n date,\n}) => {\n const radioClasses = classNames(className, {\n 'ant-radio-wrapper-error': isError,\n 'ant-wrapper-fullWidth': isfullWidth,\n 'ant-wrapper-leftText': isLeftText,\n });\n\n return (\n \n {icon && {icon}}\n \n {label}\n \n {date && (\n \n {date}\n \n )}\n \n );\n};\n\nexport default RadioButton;\n","import React, { FC } from 'react';\nimport { Switch } from 'antd';\nimport classNames from 'classnames';\n\nimport Paragrapgh from './paragrapgh/Paragrapgh';\n\ninterface IOwnProps {\n label: string;\n disabled?: boolean;\n defaultChecked?: boolean;\n checked?: boolean;\n className?: string;\n isLeftText?: boolean;\n isfullWidth?: boolean;\n onChange: (event: boolean) => void;\n}\n\nconst ToggleButton: FC = ({\n label,\n disabled,\n defaultChecked,\n checked,\n onChange,\n className,\n isLeftText,\n isfullWidth,\n}) => {\n const toggleClasses = classNames(className, 'd-flex align-items-center', {\n 'ant-wrapper-fullWidth': isfullWidth,\n 'ant-wrapper-leftText': isLeftText,\n });\n\n const labelClasses = classNames(`ant-switch-label`);\n\n return (\n
\n \n \n {label}\n \n
\n );\n};\n\nexport default ToggleButton;\n","import { FC } from 'react';\nimport { Checkbox } from 'antd';\nimport classNames from 'classnames';\nimport { CheckboxChangeEvent } from 'antd/lib/checkbox/Checkbox';\n\nimport Paragrapgh from './paragrapgh/Paragrapgh';\n\ninterface IOwnProps {\n label: string;\n disabled?: boolean;\n isError?: boolean;\n isNegative?: boolean;\n checked?: boolean;\n className?: string;\n date?: string;\n isLeftText?: boolean;\n isfullWidth?: boolean;\n placeholder?: string;\n onChange: (event: CheckboxChangeEvent) => void;\n}\n\nconst CheckboxButton: FC = ({\n label,\n disabled,\n isError,\n isNegative,\n checked,\n className,\n isLeftText,\n isfullWidth,\n date,\n placeholder,\n onChange,\n}) => {\n const checkboxClasses = classNames(className, {\n 'ant-checkbox-wrapper-error': isError,\n 'ant-checkbox-wrapper-negative': isNegative,\n 'ant-wrapper-fullWidth': isfullWidth,\n 'ant-wrapper-leftText': isLeftText,\n });\n\n return (\n <>\n \n \n {label}\n \n {date && (\n \n {date}\n \n )}\n \n {!!placeholder && (\n \n {placeholder}\n \n )}\n \n );\n};\n\nexport default CheckboxButton;\n","import React, { FC, ReactNode, MouseEvent } from 'react';\nimport classNames from 'classnames';\n\nimport './styles.scss';\n\ninterface IOwnProps {\n disabled?: boolean;\n width: string;\n size: number;\n type: string;\n iconRight?: boolean;\n iconLeft?: boolean;\n iconOnly?: boolean;\n isNoneBorder?: boolean;\n onClick?: (event: MouseEvent) => void;\n color?: string;\n className?: string;\n children?: ReactNode;\n name?: string;\n onlyIconDisabled?: boolean | undefined;\n}\n\nconst Button: FC = ({\n disabled,\n size,\n width,\n type,\n color,\n className,\n isNoneBorder,\n onClick,\n iconOnly,\n iconLeft,\n iconRight,\n name,\n children,\n onlyIconDisabled,\n}) => {\n const buttonClasses = classNames(\n className,\n 'button',\n `button--${size}`,\n `button--${color}`,\n `button--${width}`,\n `button--${type}`,\n {\n 'button--disabled': disabled,\n 'button--rightIcon': iconRight,\n 'button--leftIcon': iconLeft,\n 'button--onlyIcon': iconOnly,\n 'button--border-none': isNoneBorder,\n 'button--disabled-icon': onlyIconDisabled,\n },\n );\n\n return (\n \n {children}\n \n );\n};\n\nexport default Button;\n","import { useState } from 'react';\n/* eslint-disable */\nimport { Select } from 'antd';\nconst { Option }: any = Select;\nimport CaretUpIcon from '../CaretUpIcon';\nimport CaretDownIcon from '../CaretDownIcon';\nimport { IMainList } from '../../../entities/general.entities';\n\ninterface Props {\n defaultValue?: string;\n value?: string;\n onChange?: (value: string, event: any) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n label: string;\n options: IMainList[];\n isOptional?: boolean;\n mode?: 'multiple' | 'tags' | undefined;\n showSearch?: boolean;\n allowClear?: boolean;\n}\n\nconst Dropdown = ({\n defaultValue,\n value,\n onChange,\n placeholder,\n className,\n disabled,\n label,\n options,\n isOptional = false,\n mode = undefined,\n showSearch,\n allowClear,\n}: Props) => {\n const [open, setOpen] = useState(false);\n\n let suffixIcon;\n if (open) {\n suffixIcon = (\n
\n \n
\n );\n } else {\n suffixIcon = (\n
\n \n
\n );\n }\n\n return (\n
\n {isOptional ? (\n
\n \n

\n Optional\n

\n
\n ) : (\n \n )}\n setOpen(o)}\n onChange={onChange}\n showSearch={showSearch}\n filterOption={(inputValue, option) =>\n option?.children.toLowerCase().includes(inputValue.toLowerCase())\n }\n allowClear={allowClear}\n >\n {options &&\n options.map((option: IMainList) => (\n \n ))}\n \n
\n );\n};\n\nexport default Dropdown;\n","import React, { FC, ReactNode } from 'react';\nimport { Alert } from 'antd';\nimport classNames from 'classnames';\n\nimport CloseIcon from '../CloseIcon';\nimport WarningIcon from '../WarningIcon';\n\nimport './styles.scss';\n\ninterface IOwnProps {\n message: ReactNode;\n type: string;\n isGlobal?: boolean;\n className?: string;\n theme: 'light' | 'dark';\n onClose?: () => void;\n position?: number | undefined;\n isWithoutClosable?: boolean;\n isIcon?: boolean;\n}\n\nconst Feedback: FC = ({\n message,\n type,\n theme,\n className,\n isGlobal,\n onClose,\n position,\n isWithoutClosable,\n isIcon,\n}) => {\n const feedbackClasses = classNames(\n className,\n 'ant-alert',\n `ant-alert--${theme}`,\n `ant-alert--${type}`,\n { 'ant-alert--global': isGlobal },\n { 'ant-alert--withoutClose': isWithoutClosable },\n { 'ant-alert--icon': isIcon },\n );\n return (\n }\n closable\n className={feedbackClasses}\n onClose={onClose}\n icon={isIcon ? : null}\n showIcon={isIcon}\n />\n );\n};\n\nexport default Feedback;\n","import {\n FC,\n ReactNode,\n ChangeEvent,\n FocusEvent,\n useEffect,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport NumberFormat from 'react-number-format';\nimport CalendarIcon from '../CalendarIcon';\nimport Paragrapgh from '../paragrapgh/Paragrapgh';\nimport './styles.scss';\n\ninterface IOwnProps {\n disabled?: boolean;\n type: string;\n className?: string;\n label: string;\n placeholder?: string;\n value: string;\n unit?: ReactNode;\n readonly?: boolean;\n onChange?: (\n event: ChangeEvent,\n data?: string,\n ) => void;\n onValChange?: (data: string) => void;\n required?: boolean;\n onValidate?: (e: boolean, data?: string) => void;\n dataType?: string;\n name?: string;\n min?: number;\n max?: number;\n isOptional?: boolean;\n isClear?: boolean;\n isErrorRes?: boolean;\n}\n\nconst Input: FC = ({\n disabled,\n className,\n label,\n type,\n placeholder,\n value,\n unit,\n onChange,\n onValChange,\n required,\n readonly,\n onValidate,\n dataType,\n name,\n min,\n max,\n isOptional,\n isClear,\n isErrorRes,\n}) => {\n const [isError, setIsError] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n\n const inputClasses = classNames(className, 'input', {\n 'input--disabled': disabled,\n 'input--success': isSuccess,\n 'input--error': isError,\n 'input--marker': unit,\n 'input--textarea': type === 'textarea',\n 'input--readonly': readonly,\n });\n\n const handleOnChangeValue = (isValid: any) => {\n if (isValid && onValidate) {\n onValidate(true, dataType);\n } else if (onValidate) {\n onValidate(false, dataType);\n }\n };\n\n const handleOnChangeState = (isValid: any) => {\n if (isValid) {\n setIsSuccess(true);\n setIsError(false);\n if (onValidate) {\n onValidate(true, dataType);\n }\n } else {\n setIsError(true);\n setIsSuccess(false);\n\n if (onValidate) {\n onValidate(false, dataType);\n }\n }\n\n if (\n (!required && type === 'text' && !min && !max) ||\n type === 'textarea' ||\n type === 'number'\n ) {\n setIsError(false);\n setIsSuccess(false);\n }\n };\n\n const checkInputh = (inputValue: string, isHandler: boolean) => {\n let isValid;\n if (required) {\n isValid = inputValue.length >= 1;\n }\n if (type === 'date') {\n isValid = new Date(inputValue).getTime();\n } else if (type === 'email') {\n isValid = inputValue.match(/^([\\w.%+-]+)@([\\w-]+\\.)+([\\w]{2,})$/i);\n } else if (type === 'password') {\n isValid = inputValue.length >= 8;\n } else if (min) {\n isValid = inputValue.length >= min;\n if (!required && inputValue === '') {\n isValid = true;\n }\n } else if (max) {\n isValid = inputValue.length <= max;\n }\n\n if (isHandler) {\n handleOnChangeState(isValid);\n } else {\n handleOnChangeValue(isValid);\n }\n };\n\n useEffect(() => {\n checkInputh(value, false);\n }, []);\n\n useEffect(() => {\n if (isErrorRes) {\n setIsError(true);\n if (isSuccess) {\n setIsSuccess(false);\n }\n }\n }, [isErrorRes]);\n\n const handleOnChange = (e: ChangeEvent) => {\n checkInputh(e.target.value, true);\n\n if (onChange) {\n onChange(e, dataType);\n }\n };\n\n const handleOnFocus = (e: FocusEvent) => {\n checkInputh(e.target.value, true);\n };\n\n useEffect(() => {\n if (isClear) {\n if (isSuccess) {\n setIsSuccess(false);\n }\n if (isError) {\n setIsError(false);\n }\n }\n }, [value]);\n\n if (type === 'search') {\n return (\n
\n
\n \n\n {unit && {unit}}\n
\n
\n );\n }\n\n return (\n
\n {label && (\n
\n \n {label}\n \n {isOptional && (\n \n Optional\n \n )}\n
\n )}\n
\n {type === 'cardnumber' && (\n onValChange && onValChange(values.value)}\n disabled={disabled}\n className={inputClasses}\n placeholder={placeholder}\n value={value}\n data-type={dataType}\n name={name}\n />\n )}\n {type === 'expiration' && (\n \n onValChange && onValChange(values.formattedValue)\n }\n disabled={disabled}\n className={inputClasses}\n placeholder={placeholder}\n value={value}\n data-type={dataType}\n name={name}\n />\n )}\n {type === 'cvv' && (\n onValChange && onValChange(values.value)}\n type='password'\n disabled={disabled}\n className={inputClasses}\n placeholder={placeholder}\n value={value}\n data-type={dataType}\n name={name}\n />\n )}\n {type === 'textarea' && (\n \n )}\n {type !== 'textarea' &&\n type !== 'cardnumber' &&\n type !== 'expiration' &&\n type !== 'cvv' && (\n (event as any).target.blur()}\n />\n )}\n {type === 'date' && disabled && (\n \n \n \n )}\n {unit && {unit}}\n
\n
\n );\n};\n\nexport default Input;\n","import React, { FC, ReactNode } from 'react';\nimport classNames from 'classnames';\n\nimport './styles.scss';\n\ninterface IOwnProps {\n children: ReactNode;\n size: number;\n align: string;\n fontWeight: number;\n color: string;\n className?: string;\n disabled?: boolean | undefined;\n}\n\nconst Subtitle: FC = ({\n children,\n size,\n align,\n fontWeight,\n color,\n className,\n disabled,\n}) => {\n const subtitleClasses = classNames(\n className,\n 'subtitle',\n `subtitle--${size}`,\n `subtitle--${fontWeight}`,\n `subtitle--${color}`,\n `subtitle--${align}`,\n {\n 'subtitle--disabled': disabled,\n },\n );\n return
{children}
;\n};\n\nexport default Subtitle;\n","import { useState, useLayoutEffect } from 'react';\n\nexport const useWidth = () => {\n const [width, setWidth] = useState(0);\n\n useLayoutEffect(() => {\n setWidth(document.documentElement.clientWidth);\n const widthCallback = () => setWidth(document.documentElement.clientWidth);\n window.addEventListener('resize', widthCallback);\n\n return () => {\n window.removeEventListener('resize', widthCallback);\n };\n }, []);\n\n return width;\n};\n","import { createSelector } from 'reselect';\nimport { RootState } from '../rootReducer';\n\nexport const selectVersion = createSelector(\n (state: RootState) => state.ui.version,\n version => version,\n);\n\nexport const selectFeedbacks = createSelector(\n (state: RootState) => state.ui.allFeedbacks,\n feedbacks => feedbacks,\n);\n\nexport const selectSpin = createSelector(\n (state: RootState) => state.ui.isSpinner,\n spin => spin,\n);\n\nexport const selectLang = createSelector(\n (state: RootState) => state.ui.lang,\n lang => lang,\n);\n\nexport const selectVisibleGuide = createSelector(\n (state: RootState) => state.ui.visibleGuide,\n visibleGuide => visibleGuide,\n);\n\nexport const selectMapType = createSelector(\n (state: RootState) => state.ui.mapType,\n mapType => mapType,\n);\n","import { TLang } from '../entities/ui.entities';\nimport en from '../lang/en.json';\nimport fr from '../lang/fr.json';\nimport es from '../lang/es.json';\nimport { ReactElement } from 'react';\n\nexport const translate = (\n lang: TLang | undefined,\n content: string,\n ...values: Array\n) => {\n if (typeof content !== 'string') {\n try {\n content = (content as any).toString();\n } catch (error) {\n content = 'Unknown error';\n }\n }\n let idx = 0;\n const data: any =\n lang === 'en' ? en : lang === 'fr' ? fr : lang === 'es' ? es : en;\n const template = content in data ? data[content] : content;\n\n return template.replace(/%s/g, () =>\n idx < values.length ? values[idx++] : '',\n );\n};\n\nexport const componentTranslate = (\n lang: TLang | undefined,\n content: string,\n ...values: Array\n) => {\n if (typeof content !== 'string') {\n try {\n content = (content as any).toString();\n } catch (error) {\n content = 'Unknown error';\n }\n }\n const data: any =\n lang === 'en' ? en : lang === 'fr' ? fr : lang === 'es' ? es : en;\n const template = content in data ? data[content] : content;\n const elements = template.split('%s');\n\n let result: any = [];\n for (let i = 0; i < elements.length; i++) {\n result.push(elements[i]);\n if (i < values.length) {\n result.push(values[i]);\n }\n }\n return result;\n};\n","import { Modal } from 'antd';\nimport Button from '../button/Button';\nimport CloseIcon from '../CloseIcon';\nimport WarningIcon from '../WarningIcon';\nimport ErrorIcon from '../ErrorIcon';\nimport Paragrapgh from '../paragrapgh/Paragrapgh';\nimport Subtitle from '../subtitle/Subtitle';\nimport Feedback from '../feedback/Feedback';\nimport { useWidth } from '../../../util/useWidth';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport './styles.scss';\nimport { translate } from '../../../lib/lang.helper';\n\ninterface Props {\n type: string;\n onCancel: () => void;\n onConfirm?: () => void;\n className?: string;\n hideCancelBtn?: boolean;\n text: string | React.ReactElement;\n title: string;\n visible: boolean;\n disabled?: boolean;\n buttonText?: string;\n warningText?: string;\n}\n\nconst ModalComponent = ({\n visible,\n onCancel,\n onConfirm,\n hideCancelBtn,\n title,\n text,\n type,\n className,\n disabled,\n buttonText,\n warningText,\n}: Props) => {\n const width = useWidth();\n const lang = useSelector(selectLang);\n\n return (\n }\n width={600}\n >\n
\n {type === 'warning' && !warningText && (\n \n )}\n {type === 'delete' && }\n \n {translate(lang, title)}\n \n
\n \n {text}\n \n {warningText && (\n \n )}\n
\n {type && !hideCancelBtn && (\n \n {translate(lang, 'Cancel')}\n \n )}\n {type === 'confirm' && (\n \n {typeof buttonText === 'string'\n ? buttonText\n : translate(lang, 'Confirm')}\n \n )}\n {type === 'warning' && (\n \n {typeof buttonText === 'string'\n ? buttonText\n : translate(lang, 'Confirm')}\n \n )}\n {type === 'delete' && (\n \n {translate(lang, 'Delete')}\n \n )}\n
\n \n );\n};\n\nexport default ModalComponent;\n","import React, { FC, ReactNode } from 'react';\nimport classNames from 'classnames';\n\nimport './styles.scss';\n\ninterface IOwnProps {\n children: ReactNode;\n size: number;\n align: string;\n fontWeight: number;\n color: string;\n className?: string;\n}\n\nconst Title: FC = ({\n children,\n size,\n align,\n fontWeight,\n color,\n className,\n}) => {\n const titleClasses = classNames(\n className,\n 'title',\n `title--${size}`,\n `title--${fontWeight}`,\n `title--${color}`,\n `title--${align}`,\n );\n return (\n <>\n {size === 1 &&

{children}

}\n {size === 2 &&

{children}

}\n {size === 3 &&

{children}

}\n {size === 4 &&

{children}

}\n {size === 5 &&
{children}
}\n {size === 6 &&
{children}
}\n \n );\n};\n\nexport default Title;\n","import React from 'react';\n\nexport default ({ color = '#07689F' }) => (\n \n \n \n);\n","import { FC, ReactNode, useMemo } from 'react';\nimport { Tabs } from 'antd';\nimport './styles.scss';\n\ninterface ITab {\n content: ReactNode;\n title: string;\n id: string;\n}\n\ninterface IOwnProps {\n items: ITab[];\n defaultActiveKey?: string;\n onChange?: (event: string) => void;\n}\n\nconst TabsComponent: FC = ({\n items,\n defaultActiveKey,\n onChange,\n}) => {\n const { TabPane } = useMemo(() => Tabs, []);\n\n return (\n \n {items.map((tab, i) => (\n \n {tab.content}\n \n ))}\n \n );\n};\n\nexport default TabsComponent;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Breadcrumb } from 'antd';\nimport CaretRight from '../CaretRight';\nimport Paragrapgh from '../paragrapgh/Paragrapgh';\nimport { IBreadcrumb } from '../../../util/BreadcrumbMenu';\nimport './styles.scss';\n\ninterface IOwnProps {\n items: IBreadcrumb[];\n}\n\nconst BreadcrumbComponent: React.FC = ({ items }) => {\n return (\n }>\n {items.map(item => (\n \n \n \n {item.linkName}\n \n \n \n ))}\n \n );\n};\n\nexport default BreadcrumbComponent;\n","import { FC } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Menu } from 'antd';\nimport Paragrapgh from '../paragrapgh/Paragrapgh';\nimport { INavbar } from '../../../entities/general.entities';\nimport './styles.scss';\n\ninterface IOwnProps {\n current: string;\n direction: 'horizontal' | 'vertical' | undefined;\n items: INavbar[];\n className?: string;\n onClick?: () => void;\n}\n\nconst Navbar: FC = ({\n current,\n direction,\n items,\n className,\n onClick,\n}) => {\n return (\n \n {items.map(item => (\n \n \n \n {item.title}\n \n \n \n ))}\n \n );\n};\n\nexport default Navbar;\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import moment from 'moment';\n\nconst toggleSecondMillisecond = (date: string | number): number => {\n if (date) {\n if (date.toString().length <= 10) {\n const millisecond = (Number(date) * 1000).toFixed();\n return Number(millisecond);\n }\n\n if (date.toString().length === 13) {\n const second = (Number(date) / 1000).toFixed();\n return Number(second);\n }\n }\n\n return moment().toDate().getTime();\n};\n\nexport default toggleSecondMillisecond;\n\nexport const defaultDateFormat = (\n date: string | number | null | undefined,\n eChar: string | null = null,\n): string | null => {\n if (date) {\n let ms = date;\n if (date.toString().length === 10) ms = (Number(date) * 1000).toFixed();\n return moment(Number(ms)).format('DD.MM.YYYY');\n } else {\n return eChar;\n }\n};\n\nexport const diffDays = (\n from: number | null | undefined,\n to = moment().toDate().getTime(),\n) => {\n if (!from) return '-';\n if (from.toString().length <= 10) from = 1000 * from;\n if (to.toString().length <= 10) to = 1000 * to;\n\n return `${moment(to).diff(from, 'days')} days`;\n};\n\nexport const toMillisecond = (\n date: string | number | undefined | null,\n): number => {\n if (date) {\n if (date.toString().length <= 10) {\n const millisecond = (Number(date) * 1000).toFixed();\n return Number(millisecond);\n } else {\n return Number(date);\n }\n }\n return moment().toDate().getTime();\n};\n\nexport const toSecond = (date: string | number | null | undefined): number => {\n if (date) {\n if (date.toString().length <= 10) {\n return Number(date);\n } else {\n return Math.round(Number(date) / 1000);\n }\n }\n return Math.round(moment().toDate().getTime() / 1000);\n};\n","import moment from 'moment';\nimport { toMillisecond } from '../util/toggleSecondMillisecond';\n\nexport const areSimilarStrings = (\n s1: string | null | undefined,\n s2: string | null | undefined,\n) => {\n if (s1 === null || s1 === undefined || s2 === null || s2 === undefined)\n return false;\n\n const c1 = s1.split(' ').join('').toLowerCase(),\n c2 = s2.split(' ').join('').toLowerCase();\n\n return c1 === c2;\n};\n\nconst levenshtein = (a: string, b: string): number => {\n const matrix = [];\n\n for (let i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n for (let j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) == a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1,\n Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1),\n );\n }\n }\n }\n\n return matrix[b.length][a.length];\n};\n\nexport const findMostSimilar = (\n target: string | null | undefined,\n words: string[],\n): string | null => {\n if (!target) {\n return null;\n }\n let minDistance = Infinity;\n let mostSimilar = '';\n\n words.forEach(word => {\n const distance = levenshtein(target, word);\n if (distance < minDistance) {\n minDistance = distance;\n mostSimilar = word;\n }\n });\n\n return mostSimilar;\n};\n\nexport const compareString = (\n s1: string | undefined | null,\n s2: string | undefined | null,\n) => {\n return (s1 ?? '').localeCompare(s2 ?? '', 'en', {\n numeric: true,\n });\n};\n\nexport const randomKey = (): string => {\n const key = `${Math.random().toString(36).substr(2, 9)}`;\n return key;\n};\n\nexport const toStrSlug = (s: string) => {\n return s\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, '_');\n};\n\nexport const calcPeriodUnit = (period: number) => {\n const m = 3600 * 24 * 30;\n const w = 3600 * 24 * 7;\n const d = 3600 * 24;\n if (period % m === 0) {\n return { unit: 'month', value: period / m };\n }\n if (period % w === 0) {\n return { unit: 'week', value: period / w };\n }\n if (period % d === 0) {\n return { unit: 'day', value: period / d };\n }\n return { unit: 'hour', value: period / 3600 };\n};\n\nexport const periodToStr = (period: number) => {\n const { unit, value } = calcPeriodUnit(period);\n return `${value} ${unit}${value > 1 ? 's' : ''}`;\n};\n\nexport const labelNumber = (\n val: number | undefined | null,\n unit: string = '',\n emptyCharacter: string = '',\n) => (val === undefined || val === null ? emptyCharacter : `${val} ${unit}`);\n\nexport const labelRange = (\n min: number | undefined,\n max: number | undefined,\n unit: string = '',\n emptyCharacter: string = '-',\n) => {\n if (min === undefined) {\n return emptyCharacter;\n }\n return `${min}${max === undefined ? '' : `-${max}`} ${unit}`;\n};\n\nexport const calcDiffDays = (\n fromTime: number,\n toTime: number = moment().toDate().getTime(),\n) => moment(toMillisecond(toTime)).diff(toMillisecond(fromTime), 'days');\n\nexport const invertColor = (hex: string) => {\n hex = hex.replace(/^#/, '');\n if (hex.length === 3) {\n hex = hex\n .split('')\n .map(char => char + char)\n .join('');\n }\n const r = 255 - parseInt(hex.substring(0, 2), 16);\n const g = 255 - parseInt(hex.substring(2, 4), 16);\n const b = 255 - parseInt(hex.substring(4, 6), 16);\n\n return '#' + [r, g, b].map(c => c.toString(16).padStart(2, '0')).join('');\n};\n\nexport const dozensToPieces = (dozens: number | string) => 12 * Number(dozens);\n\nexport const piecesToDozens = (pcs: number | string) =>\n Math.round((100 * Number(pcs)) / 12) / 100;\n","import { FC, ReactNode } from 'react';\nimport { Popover } from 'antd';\nimport { randomKey } from '../../../lib/common.helpers';\nimport './styles.scss';\n\ninterface IList {\n title: string;\n id?: string | number;\n}\n\ninterface IOwnProps {\n children: ReactNode;\n content: IList[];\n position:\n | 'top'\n | 'left'\n | 'right'\n | 'bottom'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight'\n | 'leftTop'\n | 'leftBottom'\n | 'rightTop'\n | 'rightBottom'\n | undefined;\n className?: string;\n}\n\nconst Tooltip: FC = ({\n content = [],\n position,\n className,\n children,\n}) => {\n return (\n \n {content.map(item => {\n const key = randomKey();\n return (\n

\n {item.title}\n

\n );\n })}\n \n }\n trigger='hover'\n >\n {children}\n \n );\n};\n\nexport default Tooltip;\n","import React, { FC, FormEvent, ReactNode } from 'react';\nimport { Tag } from 'antd';\nimport classNames from 'classnames';\n\nimport './styles.scss';\n\ninterface IOwnProps {\n children: ReactNode;\n color: 'green' | 'red' | 'orange' | 'gray';\n className?: string;\n onChange?: (event: FormEvent) => void;\n}\n\nconst TagComponent: FC = ({ children, color, className }) => {\n const tagClasses = classNames(className, `ant-tag--${color}`);\n return {children};\n};\n\nexport default TagComponent;\n","import { FC, useState } from 'react';\nimport { DatePicker } from 'antd';\nimport moment from 'moment';\nimport classNames from 'classnames';\nimport CalendarIcon from '../CalendarIcon';\nimport Paragrapgh from '../paragrapgh/Paragrapgh';\nimport './styles.scss';\n\ninterface IOwnProps {\n onChange: (e: moment.Moment | null, value: string) => void;\n onRange?: (e: boolean) => void;\n disabled?: boolean;\n label: string;\n required?: boolean;\n className?: string;\n format?: string;\n defaultValue?: number | undefined;\n}\n\nconst Datepicker: FC = ({\n onChange,\n required,\n onRange,\n disabled,\n label,\n className,\n format,\n defaultValue,\n}) => {\n const [isError, setIsError] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n\n const datepickerClasses = classNames(className, 'w-100', {\n 'ant-picker-input--success': isSuccess,\n 'ant-picker-input--error': isError,\n });\n\n const handleOnChange = (e: moment.Moment | null, value: string) => {\n if (e && onRange && required) {\n setIsSuccess(true);\n setIsError(false);\n onRange(true);\n } else if (onRange && required) {\n setIsSuccess(false);\n setIsError(true);\n onRange(false);\n }\n\n onChange(e, value);\n };\n\n return (\n
\n \n {label}\n \n }\n />\n
\n );\n};\n\nexport default Datepicker;\n","import React, { FC, ReactNode } from 'react';\nimport { Avatar } from 'antd';\nimport { UserOutlined } from '@ant-design/icons';\nimport classNames from 'classnames';\n\nimport './styles.scss';\n\ninterface IOwnProps {\n color?: string;\n image?: string;\n className?: string;\n children?: ReactNode;\n size?: number;\n}\n\nconst AvatarComponent: FC = ({\n color,\n image,\n children,\n size,\n className,\n}) => {\n const avatarClasses = classNames(className, `ant-avatar--${color}`);\n return (\n }\n >\n {children}\n \n );\n};\n\nexport default AvatarComponent;\n","import { IFeedback, TLang } from '../../entities/ui.entities';\nimport { randomKey } from '../../lib/common.helpers';\nimport { RootState, IThunkType } from '../rootReducer';\nimport { ISetUIAction } from './ui.type';\n\nconst setUI = (ui: ISetUIAction): ISetUIAction => ui;\n\nexport const isSpinner = (spinner: boolean) => {\n return (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(setUI({ type: 'UI/IS_SPINNER', payload: spinner }));\n };\n};\n\nexport const clearFeedback = () => {\n return (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(setUI({ type: 'UI/CLEAR_FEEDBACK' }));\n };\n};\n\nexport const showFeedback = (data: IFeedback) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const feedback = {\n ...data,\n id: randomKey(),\n };\n await dispatch(setUI({ type: 'UI/ADD_FEEDBACK', payload: feedback }));\n\n setTimeout(\n () =>\n dispatch(setUI({ type: 'UI/REMOVE_FEEDBACK', payload: feedback.id })),\n 3000,\n );\n };\n};\n\nexport const hideFeedback = (id: any) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(setUI({ type: 'UI/REMOVE_FEEDBACK', payload: id }));\n };\n};\n\nexport const setLangUI = (lang: TLang) => {\n return (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(setUI({ type: 'UI/SET_LANG', payload: lang }));\n };\n};\n\nexport const showGuideModal = () => {\n return (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(setUI({ type: 'UI/SET_VISIBLE_GUIDE', payload: true }));\n };\n};\n\nexport const hideGuideModal = () => {\n return (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(setUI({ type: 'UI/SET_VISIBLE_GUIDE', payload: false }));\n };\n};\n\nexport const saveMapType = (type: string) => {\n return (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(setUI({ type: 'UI/SET_MAP_TYPE', payload: type }));\n };\n};\n","import { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from '../../../store/rootReducer';\nimport { hideFeedback } from '../../../store/ui/ui.actions';\nimport Feedback from './Feedback';\n\nconst ModalFeedbackView = () => {\n const dispatch = useDispatch();\n\n const messages = useSelector(\n (state: RootState) => state.ui.allFeedbacks,\n )?.filter(x => x.isMessageModal);\n\n return (\n <>\n {messages?.map((x, i) => (\n dispatch(hideFeedback(x.id))}\n />\n ))}\n \n );\n};\n\nexport default ModalFeedbackView;\n","import { ReactNode } from 'react';\nimport { Modal } from 'antd';\nimport Button from '../button/Button';\nimport CloseIcon from '../CloseIcon';\nimport Subtitle from '../subtitle/Subtitle';\nimport { useWidth } from '../../../util/useWidth';\nimport ModalFeedbackView from '../feedback/ModalFeedbackView';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport './styles.scss';\n\ninterface Props {\n type: string;\n onCancel: () => void;\n onConfirm: () => void;\n className?: string;\n children: ReactNode;\n hideCancelBtn?: boolean;\n title: string;\n visible: boolean;\n disabled?: boolean;\n confirmNameBtn?: string | undefined;\n modalWidth?: number | undefined;\n}\n\nconst InputModal = ({\n visible,\n onCancel,\n onConfirm,\n hideCancelBtn,\n title,\n children,\n type,\n disabled,\n className,\n confirmNameBtn,\n modalWidth,\n}: Props) => {\n const width = useWidth();\n const lang = useSelector(selectLang);\n\n return (\n }\n width={modalWidth !== undefined ? modalWidth : 600}\n >\n \n
\n
\n \n {translate(lang, title)}\n \n
\n {children}\n
\n
\n {hideCancelBtn && (\n \n {translate(lang, 'Cancel')}\n \n )}\n {type === 'confirm' && (\n \n {confirmNameBtn || <>{translate(lang, 'Confirm')}}\n \n )}\n {type === 'create' && (\n \n {translate(lang, 'Create')}\n \n )}\n {type === 'close' && (\n \n {translate(lang, 'Close')}\n \n )}\n
\n \n );\n};\n\nexport default InputModal;\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","interface Props {\n color?: string;\n}\n\nconst Plus = ({ color }: Props) => (\n \n \n \n);\n\nexport default Plus;\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\ninterface Props {\n color?: string;\n}\n\nconst TrashIcon = ({ color }: Props) => (\n \n \n \n);\n\nexport default TrashIcon;\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React, { FC } from 'react';\nimport classNames from 'classnames';\n\nimport { useWidth } from '../../../util/useWidth';\nimport CaretMainIcon from '../CaretMainIcon';\nimport ShortArrow from '../ShortArrow';\n\nimport './styles.scss';\n\ninterface IOwnProps {\n isGrow: boolean;\n interest: number;\n isReverse?: boolean;\n}\n\nconst InterestGrowth: FC = ({ isReverse, isGrow, interest }) => {\n const width = useWidth();\n return (\n \n
\n {width > 768 ? : }\n
\n
{interest}%
\n \n );\n};\n\nexport default InterestGrowth;\n","import Paragrapgh from '../paragrapgh/Paragrapgh';\nimport InterestGrowth from './InterestGrowth';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\nimport { randomKey } from '../../../lib/common.helpers';\nimport { IFarmCard } from '../../../entities/farms.entities';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport './styles.scss';\n\ninterface Props {\n data: IFarmCard[];\n type?: string;\n}\n\nconst TablesCard = ({ type, data }: Props) => {\n const lang = useSelector(selectLang);\n\n return (\n
\n {(type === 'next-seed' || type === 'next-harvest') && (\n \n {translate(\n lang,\n type === 'next-seed' ? 'Next seeds' : 'Next Harvests',\n )}\n \n )}\n {(type === 'next-seed' || type === 'next-harvest') && !data.length && (\n \n {translate(\n lang,\n type === 'next-seed'\n ? 'No planned seedings yet'\n : 'No planned harvests yet',\n )}\n \n )}\n
\n
\n {data.map((info: IFarmCard) => (\n
\n {info.name && (\n \n {translate(lang, info.name)}\n \n )}\n \n {info?.date\n ? defaultDateFormat(Number(info?.date))\n : info.value}\n {` ${info?.unit ?? ''}`}\n \n
\n ))}\n
\n {data.length > 0 && data[0].interest && (\n
\n \n
\n )}\n
\n
\n );\n};\n\nexport default TablesCard;\n","import { useHistory } from 'react-router-dom';\n\nconst useMenuHandler = () => {\n const history = useHistory();\n\n const redirectToFarm = (idFarm: string | number) => {\n history.push(`/farms/${idFarm}`);\n };\n\n const redirectToLine = (idFarm: string | number, idLine: string | number) => {\n history.push(`/farms/${idFarm}/${idLine}`);\n };\n\n const redirectToEditFarm = (idFarm: string) => {\n history.push(`/farms/farm-edit/${idFarm}`);\n };\n\n const redirectToFarmVisualLine = (idFarm: string | number) => {\n history.push(`/farms/visual-lines/${idFarm}`);\n };\n\n const redirectToHarvestDetail = (harvestId: string | number) => {\n history.push(`/harvest/${harvestId}`);\n };\n\n return {\n redirectToFarm,\n redirectToLine,\n redirectToEditFarm,\n redirectToFarmVisualLine,\n redirectToHarvestDetail,\n };\n};\n\nexport default useMenuHandler;\n","import { FC, ReactNode, useRef } from 'react';\nimport { Dropdown, Menu } from 'antd';\nimport { useSelector } from 'react-redux';\nimport useMenuHandler from '../tables/useMenuHandler';\nimport DotsIcon from '../DotsIcon';\nimport { RootState } from '../../../store/rootReducer';\nimport './styles.scss';\n\ninterface IMenu {\n label: string;\n onClick: (d: any) => void;\n}\n\ninterface Props {\n data: any;\n type?: 'farms' | 'todo' | 'isModal' | 'isRedirect' | 'utils' | 'automations';\n icon?: ReactNode;\n column?: string;\n onEdit?: (data: any, col?: string | undefined) => void | undefined;\n onDeleteRow?: (data: any) => void;\n onArchiveRow?: (data: any) => void;\n onDeactivate?: (data: any) => void;\n onActivateUser?: (data: any) => void;\n isRedirect?: undefined | string;\n isAdmin?: boolean;\n moreMenus?: IMenu[];\n}\n\nconst DropdownMenu: FC = ({\n data,\n column,\n icon,\n type,\n onEdit,\n isRedirect,\n onDeleteRow,\n onArchiveRow,\n onDeactivate,\n onActivateUser,\n isAdmin = false,\n moreMenus,\n}) => {\n const rowData = useRef(\n null,\n );\n const { redirectToFarm, redirectToLine, redirectToEditFarm } =\n useMenuHandler();\n\n const profile = useSelector((state: RootState) => state.auth.profile);\n const isEditable = profile?.edit_permission;\n\n const onCLickDropdown = (d: any, event: any): void => {\n event.stopPropagation();\n rowData.current = d;\n };\n\n const onInfoHandler = (dataRow: any): void => {\n if (column === 'isFarms') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n redirectToFarm(dataRow.id);\n }\n if (column === 'isFarm') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n redirectToLine(dataRow.farm_id, dataRow.id);\n }\n };\n\n const onEditHandler = (dataRow: any): void => {\n if (\n (type === 'todo' ||\n type === 'isModal' ||\n type === 'isRedirect' ||\n type === 'automations') &&\n onEdit\n ) {\n onEdit(dataRow);\n }\n\n if (column === 'isFarms') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n redirectToEditFarm(dataRow.id);\n }\n\n if (column === 'isUsers' && onEdit) {\n onEdit(dataRow);\n }\n\n if (column === 'isFarm' && onEdit) {\n onEdit(dataRow, column);\n }\n\n if (column === 'isLine' && onEdit) {\n onEdit(dataRow, column);\n }\n\n if (column === 'isUtil' && onEdit) {\n onEdit(dataRow, column);\n }\n };\n\n const menuClickHandler = ({ key, domEvent }: any) => {\n domEvent.stopPropagation();\n\n if (key === 'info' && type === 'farms') {\n onInfoHandler(rowData.current);\n }\n\n if (key === 'edit') {\n onEditHandler(rowData.current);\n }\n\n if (key === 'deactivate' && onDeactivate) {\n onDeactivate(rowData.current);\n }\n\n if (key === 'activate' && onActivateUser) {\n onActivateUser(rowData.current);\n }\n\n if (\n key === 'delete' &&\n column !== 'isUsers' &&\n column !== 'isBudgetLog' &&\n column !== 'isUtil' &&\n type !== 'todo' &&\n type !== 'automations'\n ) {\n let redirect;\n if (column === 'isFarms') {\n redirect = isRedirect;\n }\n if (column === 'isFarm' && rowData?.current?.isRedirectLine) {\n redirect = `/farms/${rowData?.current?.farm_id}`;\n }\n }\n\n if (\n key === 'delete' &&\n onDeleteRow &&\n (column === 'isUsers' || column === 'isBudgetLog' || column === 'isUtil')\n ) {\n onDeleteRow(rowData.current);\n }\n\n if (key === 'delete' && type === 'todo' && onDeleteRow) {\n onDeleteRow(rowData.current);\n }\n\n if (key === 'delete' && type === 'automations' && onDeleteRow) {\n onDeleteRow(rowData.current);\n }\n\n if (key === 'archive' && type === 'todo' && onArchiveRow) {\n onArchiveRow(rowData.current);\n }\n };\n\n const menu = (\n \n {type === 'farms' &&\n column !== 'isLine' &&\n column !== 'isUsers' &&\n column !== 'isBudgetLog' && Info}\n {column !== 'isUsers' && column !== 'isBudgetLog' && isEditable && (\n Edit\n )}\n {column === 'isUsers' && data.status === 'active' && isEditable && (\n Edit\n )}\n {column === 'isUsers' &&\n data.status !== 'deactivated' &&\n data.status !== 'pending' && (\n Deactivate\n )}\n {column === 'isUsers' && data.status === 'deactivated' && (\n Activate\n )}\n {isEditable && type === 'todo' && (\n Complete Task\n )}\n {isEditable && Delete}\n {type === 'todo' &&\n column !== 'isUsers' &&\n column !== 'isBudgetLog' &&\n isEditable === false && (\n <>\n Edit\n Complete Task\n Delete\n \n )}\n {moreMenus?.map((x, i) => (\n \n {x.label}\n \n ))}\n \n );\n\n const userAdminMenu = (\n <>\n {data?.role !== 'admin' && (\n \n {column === 'isUsers' && data?.status === 'active' && (\n Edit\n )}\n {data?.status !== 'deactivated' && data?.status !== 'pending' && (\n Deactivate\n )}\n {data?.status === 'deactivated' && (\n Activate\n )}\n Delete\n \n )}\n \n );\n\n return (\n
\n \n
{icon || }
\n \n
\n );\n};\n\nexport default DropdownMenu;\n","export default __webpack_public_path__ + \"static/media/map-pin.b59a59d0.svg\";","import React, { FC } from 'react';\n\nimport './styles.scss';\n\ninterface ISpiner {\n position?: 'local' | 'global';\n}\n\nconst Spinner: FC = ({ position = 'local' }) => (\n
\n
\n
\n);\n\nexport default Spinner;\n","import { useState, useEffect, useRef } from 'react';\nimport { compose, withProps } from 'recompose';\nimport {\n GoogleMap,\n Marker,\n InfoWindow,\n withScriptjs,\n withGoogleMap,\n Polygon,\n Polyline,\n} from 'react-google-maps';\nimport mapPin from '../../../images/map-pin.svg';\nimport { ILocation } from '../../../entities/general.entities';\nimport Spinner from '../spinner/Spinner';\nimport Dropdown from '../dropdown/Dropdown';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectMapType } from '../../../store/ui/ui.selector';\nimport { saveMapType } from '../../../store/ui/ui.actions';\nimport './styles.scss';\n\nconst Loading = () => (\n
\n \n
\n);\n\nconst mapOptions = [\n { id: 'roadmap', label: 'Roadmap', value: 'roadmap' },\n { id: 'satellite', label: 'Satellite', value: 'satellite' },\n { id: 'hybrid', label: 'Hybrid', value: 'hybrid' },\n { id: 'terrain', label: 'Terrain', value: 'terrain' },\n];\n\nconst options = {\n minZoom: 3,\n maxZoom: 20,\n};\n\ninterface ILine {\n points: ILocation[];\n color: string;\n}\n\ninterface Props {\n position?: ILocation;\n zoom: number;\n defaultPosition: ILocation;\n onCallback?: (p: ILocation) => void;\n polygons?: Array;\n lines?: ILine[];\n isStayLocation?: boolean;\n hideMarker?: boolean;\n}\n\nconst MapWithMarkers = compose(\n withProps({\n googleMapURL: `https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,drawing,places&key=${process.env.REACT_APP_GOOGLE_MAP_KEY}`,\n loadingElement: ,\n containerElement: (\n
\n ),\n mapElement: (\n
\n ),\n }),\n withScriptjs,\n withGoogleMap,\n)(\n ({\n position,\n zoom,\n defaultPosition,\n onCallback,\n polygons,\n lines,\n isStayLocation,\n hideMarker,\n }) => {\n const dispatch = useDispatch();\n const mapType = useSelector(selectMapType);\n const defaultCenter = useRef(defaultPosition);\n\n const [state, setState] = useState();\n\n useEffect(() => {\n if (position) {\n setState(position);\n }\n }, [position]);\n\n const handleSetPosition = (event: any) => {\n const newPosition = {\n lat: event.latLng.lat(),\n lng: event.latLng.lng(),\n };\n if (onCallback) {\n onCallback(newPosition);\n }\n setState(newPosition);\n };\n\n return (\n
\n
\n dispatch(saveMapType(v))}\n />\n
\n \n {state && (\n \n \n
\n {state && state.lat}\n {state?.lng}\n
\n
\n \n )}\n {polygons?.map((data, idx) => (\n
\n \n
\n ))}\n {lines?.map((item, idx) => (\n
\n \n
\n ))}\n \n
\n );\n },\n);\n\nexport default MapWithMarkers;\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React, { useState, FC } from 'react';\nimport classNames from 'classnames';\n\nimport './styles.scss';\n\ninterface INameWithPercent {\n title: string;\n percent: string;\n index: number;\n}\n\nconst NameWithPercent: FC = ({\n title = '',\n percent,\n index = 1,\n}) => {\n const [isNextBg] = useState(index % 2 === 0);\n const [initials] = useState(() => {\n const initial = title.split(' ').reduce((acum: string, value: string) => {\n return acum + value.substring(0, 1);\n }, '');\n\n return initial;\n });\n\n return (\n \n
{initials}
\n -\n
{percent}%
\n
\n );\n};\n\nexport default NameWithPercent;\n","import React, { FC, ReactNode } from 'react';\nimport './styles.scss';\n\ninterface IOwnProps {\n icon: ReactNode;\n color: string;\n}\n\nconst BgIcon: FC = ({ icon, color }) => {\n return
{icon}
;\n};\n\nexport default BgIcon;\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React, { FC } from 'react';\nimport classNames from 'classnames';\n\nimport './styles.scss';\n\ninterface IPositiveNegativeTitle {\n isColor: string | undefined;\n}\n\nconst PositiveNegativeTitle: FC = ({\n isColor,\n children,\n}) => {\n return (\n \n {children}\n \n );\n};\n\nexport default PositiveNegativeTitle;\n","import React, { FC } from 'react';\nimport classNames from 'classnames';\nimport './styles.scss';\n\ninterface ICaret {\n color?: string;\n direction?: string;\n fontWeight?: string;\n}\n\nconst Caret: FC = ({\n color = '#07689F',\n direction,\n fontWeight = 'small',\n}) => (\n \n {fontWeight === 'small' && (\n \n \n \n )}\n\n {fontWeight === 'big' && (\n
\n \n \n \n
\n )}\n
\n);\n\nexport default Caret;\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React, { ChangeEvent, FC, KeyboardEvent } from 'react';\nimport Input from '../input/Input';\nimport SearchIcon from '../SearchIcon';\n\nimport './styles.scss';\n\ninterface IOwnProps {\n onChange?: (\n event: ChangeEvent,\n data?: string,\n ) => void;\n value: string;\n onSearch: () => void;\n}\n\nconst Search: FC = ({ onChange, value, onSearch }) => {\n const handleOnKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') onSearch();\n };\n\n return (\n
\n \n onSearch()}\n onKeyDown={() => onSearch()}\n role='button'\n tabIndex={0}\n >\n \n \n
\n );\n};\n\nexport default Search;\n","import React from 'react';\n\ninterface IOwnProps {\n active: boolean;\n}\n\nexport default ({ active }: IOwnProps) => (\n \n \n \n);\n","import React from 'react';\n\ninterface IOwnProps {\n active: boolean;\n}\n\nexport default ({ active }: IOwnProps) => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n \n mc_vrt_rgb_pos\n \n \n \n \n \n \n \n \n \n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n \n \n);\n","import React from 'react';\n\nexport default () => (\n \n \n \n \n \n);\n","import { FC, useLayoutEffect, useState } from 'react';\nimport { Route, Redirect, useHistory, useLocation } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { RootState } from '../store/rootReducer';\nimport { Spinner } from './shared';\n\nconst unAuthRoutes = [\n '/sign-in',\n '/sign-up',\n '/recover-password/',\n '/message-registration',\n '/message-password',\n];\n\nconst PrivateRoute: FC<{\n component: FC;\n path: string;\n exact: boolean;\n isAdmin?: boolean;\n isFinance?: boolean;\n}> = ({ component, path, exact, isAdmin = false, isFinance = false }) => {\n const history = useHistory();\n const query = new URLSearchParams(useLocation().search);\n const profile = useSelector((state: RootState) => state.auth.profile);\n\n const [condition, setCondition] = useState();\n\n useLayoutEffect(() => {\n setCondition(null);\n if (unAuthRoutes.some(x => history.location.pathname.includes(x))) {\n const backUrl = query.get('redirect');\n if (!backUrl) {\n history.push('/');\n } else if (backUrl.startsWith(window.location.origin)) {\n history.push(backUrl.substring(window.location.origin.length));\n } else {\n window.location.href = backUrl;\n }\n }\n if (profile?.role) {\n if (\n (isAdmin && profile?.role !== 'owner' && profile.role !== 'admin') ||\n (isFinance &&\n profile.role !== 'owner' &&\n profile.role !== 'admin' &&\n !profile.finance_permission)\n ) {\n history.push('/');\n } else if (\n profile.role === 'processing_plant' &&\n history.location.pathname === '/'\n ) {\n history.replace('/farms');\n } else {\n setCondition(true);\n }\n }\n }, [history.location.pathname, profile]);\n\n return (\n <>\n {condition === false && }\n {condition === true && (\n \n )}\n {!(condition === false || condition === true) && (\n
\n \n
\n )}\n \n );\n};\nexport default PrivateRoute;\n","import { RootState, IThunkType } from '../rootReducer';\nimport { sendSingleRequest } from '../../apis';\nimport { IUtilsAction } from './utils.type';\nimport { IUtilData } from '../../entities/utils.entities';\n\nconst setUtils = (util: IUtilsAction): IUtilsAction => util;\n\nlet loadingUtils = false;\n\nexport const loadUtilsData = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n if (loadingUtils) return true;\n loadingUtils = true;\n\n const res = await sendSingleRequest({}, 'GET', 'api/utils', true);\n\n loadingUtils = false;\n\n if (res.status) {\n dispatch(setUtils({ type: 'UTILS/SET_FARM_UTILS', payload: res.data }));\n return true;\n } else {\n return res.data?.message ?? 'Failed to load utils';\n }\n };\n};\n\nexport const deleteUtilData = (utilId: number) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const res = await sendSingleRequest(\n {},\n 'DELETE',\n `api/utils/${utilId}`,\n true,\n );\n if (res.status) {\n await dispatch(loadUtilsData());\n\n return true;\n } else {\n return res.data?.message ?? 'Failed to delete util';\n }\n };\n};\n\nexport const addUtilData = (type: IUtilData['type'], name: string) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const res = await sendSingleRequest(\n { name, type },\n 'POST',\n 'api/utils',\n true,\n );\n if (res.status) {\n await dispatch(loadUtilsData());\n return true;\n } else {\n return res.data?.message ?? 'Failed to add new util';\n }\n };\n};\n\nexport const updateSystemSettings = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const result = await sendSingleRequest(\n null,\n 'GET',\n 'api/system-settings',\n false,\n );\n if (result.status) {\n dispatch(\n setUtils({ type: 'UTILS/SET_SYSTEM_SETTINGS', payload: result.data }),\n );\n }\n };\n};\n","import { RootState, IThunkType } from '../rootReducer';\nimport { isSpinner, showFeedback } from '../ui/ui.actions';\nimport { sendSingleRequest } from '../../apis/index';\nimport { IInventoryAction } from './inventories.type';\n\nconst setInventory = (ivt: IInventoryAction): IInventoryAction => ivt;\n\nlet loadingInventories = false;\n\nexport const loadInventories = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n if (loadingInventories) return;\n loadingInventories = false;\n\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/inventory/inventories',\n true,\n );\n if (response.status) {\n dispatch(\n setInventory({\n type: 'INVENTORIES/SET_INVENTORIES',\n payload: response.data,\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Something went wrong',\n }),\n );\n }\n\n loadingInventories = false;\n };\n};\n\nexport const updateInventoryQuantity = (id: number, quantity: number) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n let inventories = [...getState().inventories.inventories];\n const i = inventories.findIndex(x => x.id === id);\n if (i < -1) {\n return `Inventory not found`;\n }\n\n const response = await sendSingleRequest(\n { quantity },\n 'PUT',\n `api/inventory/inventories/${id}`,\n true,\n );\n if (response.status) {\n inventories[i] = response.data;\n dispatch(\n setInventory({\n type: 'INVENTORIES/SET_INVENTORIES',\n payload: inventories,\n }),\n );\n\n return true;\n } else {\n return response.data?.message ?? 'Update failed';\n }\n };\n};\n","export const transformFarmWithKey = (data: any = []): any => {\n const dataWithKey = data.map((farm: any, i: number) => {\n const newFarm = { ...farm };\n newFarm.key = i + 1;\n\n const newLines = farm?.lines?.map((line: any, y: number) => {\n const newLine = { ...line };\n newLine.key = y + 1;\n return newLine;\n });\n\n return { ...newFarm, lines: newLines };\n });\n\n return dataWithKey;\n};\n\ninterface IValues {\n value?: number;\n isGrow?: boolean;\n interest?: number;\n isReverse?: boolean;\n}\n\nexport const getInterest = (\n firstValue: number,\n secondValue: number | null,\n): IValues => {\n let interest;\n let values: IValues = {};\n if (secondValue !== null && secondValue !== 0) {\n interest = ((firstValue - secondValue) / secondValue) * 100;\n values = {\n isGrow: !(secondValue > firstValue),\n interest: Number(Math.abs(interest).toFixed(2)),\n value: firstValue,\n };\n } else if (secondValue === 0) {\n values = {\n isGrow: !(+firstValue < 0),\n interest: +firstValue === 0 ? 0 : 100,\n value: firstValue,\n };\n } else if (secondValue === null) {\n values = {\n isGrow: true,\n interest: 0,\n value: firstValue,\n };\n } else {\n values = {\n value: firstValue,\n };\n }\n\n return values;\n};\n","import { RootState, IThunkType } from '../rootReducer';\nimport { isSpinner, showFeedback, showGuideModal } from '../ui/ui.actions';\nimport { transformFarmWithKey } from '../../util/farmUtil';\nimport { sendSingleRequest } from '../../apis';\nimport { IFarmAction } from './farms.type';\n\nconst setFarm = (farm: IFarmAction): IFarmAction => farm;\n\nlet loadingFarmsData = false;\n\nexport const loadFarmsData = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n if (loadingFarmsData) return;\n loadingFarmsData = true;\n\n const response = await sendSingleRequest(\n {},\n 'GET',\n `api/farm/farms-all`,\n true,\n );\n if (response.status) {\n const dataWithKey = transformFarmWithKey(response.data);\n\n if (dataWithKey.length <= 0 && getState().ui.visibleGuide === undefined) {\n dispatch(showGuideModal());\n }\n\n dispatch(setFarm({ type: 'FARMS/SET_FARMS_DATA', payload: dataWithKey }));\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: `Failed to load information`,\n }),\n );\n }\n loadingFarmsData = false;\n };\n};\n\nexport const addFarm = (data: any, history?: any) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(isSpinner(true));\n\n const response = await sendSingleRequest(\n { ...data, user_id: getState().auth.profile?.id },\n 'POST',\n 'api/farm/farms',\n true,\n );\n if (response.status) {\n dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Farm added successfully',\n }),\n );\n history.push('/farms');\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Farm not added',\n }),\n );\n }\n dispatch(isSpinner(false));\n };\n};\n\nexport const editFarm = (\n data: any,\n farmId: string | undefined,\n history: any,\n) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(isSpinner(true));\n const response = await sendSingleRequest(\n data,\n 'PUT',\n `api/farm/farms/${farmId}`,\n true,\n );\n if (response.status) {\n dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Update farm completed',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Update farm failed',\n }),\n );\n }\n history.push('/farms');\n dispatch(isSpinner(false));\n };\n};\n\nlet loadingStorages = false;\n\nexport const loadSpatStorages = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n if (loadingStorages) return;\n loadingStorages = true;\n\n const res = await sendSingleRequest(\n {},\n 'GET',\n 'api/farm/spat-storage',\n true,\n );\n const spats = res.status ? res.data : [];\n dispatch(setFarm({ type: 'FARMS/SET_SPAT_STORAGES', payload: spats }));\n\n loadingStorages = false;\n };\n};\n\nlet loadingInventoryPositions = false;\n\nexport const loadInventoryPositions = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n if (loadingInventoryPositions) return true;\n loadingInventoryPositions = true;\n\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/farm/line/visual-floats-position',\n true,\n );\n if (!response.status) {\n loadingInventoryPositions = false;\n return false;\n }\n\n dispatch(\n setFarm({\n type: 'FARMS/SET_INVENTORY_POSITIONS',\n payload: response.data,\n }),\n );\n loadingInventoryPositions = false;\n\n return true;\n };\n};\n\nlet loadingQueueData = false;\n\nexport const loadQueueData = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n if (loadingQueueData) return true;\n loadingQueueData = true;\n\n const result = await sendSingleRequest({}, 'GET', 'api/queue/all', true);\n if (!result.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: result.data?.message ?? 'Something went wrong',\n }),\n );\n loadingQueueData = false;\n return false;\n }\n\n dispatch(setFarm({ type: 'FARMS/SET_QUEUE_DATA', payload: result.data }));\n\n const qCnt = result.data?.length ?? 0;\n dispatch({ type: 'AUTH/QUEUE_COUNT', payload: qCnt });\n\n loadingQueueData = false;\n return true;\n };\n};\n","import { RootState, IThunkType } from '../rootReducer';\nimport { IAutomationAction } from './automation.type';\nimport { sendSingleRequest } from '../../apis';\n\nconst setAutomation = (auto: IAutomationAction): IAutomationAction => auto;\n\nlet loadingAutomations = false;\n\nexport const loadAutomationData = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n if (loadingAutomations) return;\n loadingAutomations = true;\n\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/automation/automations',\n true,\n );\n loadingAutomations = false;\n if (response.status) {\n dispatch(\n setAutomation({\n type: 'AUTOMATIONS/SET_AUTOMATIONS_DATA',\n payload: response.data,\n }),\n );\n return true;\n } else {\n return response.data?.message ?? 'Failed to load';\n }\n };\n};\n\nexport const removeAutomation = (automationId: number) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const response = await sendSingleRequest(\n {},\n 'DELETE',\n `api/automation/automations/${automationId}`,\n true,\n );\n if (response.status) {\n await dispatch(loadAutomationData());\n\n return true;\n } else {\n return response.data?.message ?? 'Failed to delete';\n }\n };\n};\n\nlet loadingCustomFields = false;\n\nexport const loadCustomFields = () => {\n return async (dispatch: IThunkType) => {\n if (loadingCustomFields) return;\n loadingCustomFields = true;\n\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/custom-field',\n true,\n );\n loadingCustomFields = false;\n\n if (response.status) {\n dispatch(\n setAutomation({\n type: 'AUTOMATIONS/SET_CUSTOM_FIELDS',\n payload: response.data,\n }),\n );\n return true;\n } else {\n return response.data?.message ?? 'Unknown error';\n }\n };\n};\n\nlet loadingTags = false;\n\nexport const loadTags = () => {\n return async (dispatch: IThunkType) => {\n if (loadingTags) return;\n loadingTags = true;\n\n const response = await sendSingleRequest({}, 'GET', 'api/tag', true);\n loadingTags = false;\n\n if (response.status) {\n dispatch(\n setAutomation({ type: 'AUTOMATIONS/SET_TAGS', payload: response.data }),\n );\n return true;\n } else {\n return response.data?.message ?? 'Unknown error';\n }\n };\n};\n","import { RootState, IThunkType } from '../rootReducer';\nimport { IUsersAction } from './users.type';\nimport { sendSingleRequest } from '../../apis';\n\nconst setUsers = (users: IUsersAction): IUsersAction => users;\n\nlet loadingUsers = false;\n\nexport const getAllUsers = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n if (loadingUsers) return true;\n loadingUsers = true;\n\n const response = await sendSingleRequest({}, 'GET', 'api/user/users', true);\n loadingUsers = false;\n\n if (response.status) {\n dispatch(setUsers({ type: 'USERS/SET_USERS', payload: response.data }));\n\n return true;\n } else {\n return response.data?.message;\n }\n };\n};\n\nexport const createUser = (data: any, history: any) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const response = await sendSingleRequest(\n data,\n 'POST',\n 'api/user/invite',\n true,\n );\n if (response.status) {\n const users = [...getState().users.users, response.data.data];\n dispatch(setUsers({ type: 'USERS/SET_USERS', payload: users }));\n\n return true;\n } else {\n return response.data?.message ?? 'Failed to invite user';\n }\n };\n};\n\nlet loadingBoats = false;\n\nexport const loadUserBoats = (filter: any = {}) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n if (loadingBoats) return true;\n loadingBoats = true;\n\n const res = await sendSingleRequest(filter, 'GET', 'api/boat/boats', true);\n\n loadingBoats = false;\n\n if (res.status) {\n dispatch(setUsers({ type: 'USERS/SET_BOATS', payload: res.data }));\n return true;\n } else {\n return res.data?.message;\n }\n };\n};\n\nexport const deleteUserBoat = (boatId: number) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const res = await sendSingleRequest(\n { boat_id: boatId },\n 'DELETE',\n `api/boat/boat/${boatId}`,\n true,\n );\n if (res.status) {\n let boats = getState().users.boats ? [...getState().users.boats] : [];\n dispatch(\n setUsers({\n type: 'USERS/SET_BOATS',\n payload: boats.filter(x => x.id !== boatId),\n }),\n );\n return true;\n } else {\n return res.data?.message;\n }\n };\n};\n\nexport const newMessageReceivedAction = (\n actionType: 'ACCOUNT' | 'USER' | 'BOAT',\n message: any,\n) => {\n return (dispatch: IThunkType, getState: () => RootState) => {\n const type =\n actionType === 'ACCOUNT'\n ? 'USERS/SET_NEW_ACCOUNT_MESSAGE'\n : actionType === 'BOAT'\n ? 'USERS/SET_NEW_BOAT_MESSAGE'\n : 'USERS/SET_NEW_USER_MESSAGE';\n dispatch(setUsers({ type, payload: message }));\n };\n};\n","import { RootState, IThunkType } from '../rootReducer';\nimport { isSpinner } from '../ui/ui.actions';\nimport { sendSingleRequest } from '../../apis';\nimport { ITaskAction } from './tasks.type';\nimport {\n ITaskData,\n ITaskRequest,\n ITaskResource,\n} from '../../entities/task.entities';\nimport { loadTags } from '../automation/automation.actions';\n\nconst setTask = (task: ITaskAction): ITaskAction => task;\n\nlet loadingTasks = false;\n\nexport const getTaskData = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n if (loadingTasks) return;\n loadingTasks = true;\n\n dispatch(isSpinner(true));\n const response = await sendSingleRequest({}, 'GET', 'api/task/tasks', true);\n if (response.status) {\n dispatch(\n setTask({ type: 'TASKS/SET_TASK_DATA', payload: response.data.data }),\n );\n }\n\n dispatch(isSpinner(false));\n loadingTasks = false;\n };\n};\n\nexport const createTask = (newTask: ITaskRequest) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(isSpinner(true));\n\n const response = await sendSingleRequest(\n newTask,\n 'POST',\n 'api/task/tasks',\n true,\n );\n if (response.status) {\n await dispatch(getTaskData());\n await sendSingleRequest(\n { task_id: response.data.id },\n 'POST',\n 'api/user/notification/task-created',\n true,\n );\n }\n dispatch(isSpinner(false));\n };\n};\n\nexport const removeTask = (taskId: number, history: any) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(isSpinner(true));\n\n const response = await sendSingleRequest(\n {},\n 'DELETE',\n `api/task/tasks/${taskId}`,\n true,\n );\n if (response.status) {\n await dispatch(getTaskData());\n }\n dispatch(isSpinner(false));\n };\n};\n\nexport const updateTask = (task: ITaskData | ITaskResource, history: any) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(isSpinner(true));\n\n const response = await sendSingleRequest(\n task,\n 'PUT',\n `api/task/tasks/${task.id}`,\n true,\n );\n if (response.status) {\n await dispatch(getTaskData());\n if (task.type === 'TAGGING') {\n await dispatch(loadTags());\n }\n }\n dispatch(isSpinner(false));\n };\n};\n","import { IThunkType, RootState } from '../rootReducer';\nimport { TExtraAction } from './extra.type';\n\nconst setExtra = (extra: TExtraAction): TExtraAction => extra;\n\nexport const loadExtraData = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(setExtra({ type: 'EXTRA/SET_EXTRA_FARMS', payload: [] }));\n dispatch(\n setExtra({\n type: 'EXTRA/SET_EXTRA_SPAT_STORAGES',\n payload: [],\n }),\n );\n dispatch(\n setExtra({\n type: 'EXTRA/SET_EXTRA_INVENTORIES',\n payload: [],\n }),\n );\n dispatch(setExtra({ type: 'EXTRA/SET_EXTRA_UTILS', payload: [] }));\n dispatch(\n setExtra({\n type: 'EXTRA/SET_CUSTOM_FIELDS',\n payload: [],\n }),\n );\n dispatch(setExtra({ type: 'EXTRA/SET_TAGS', payload: [] }));\n dispatch(setExtra({ type: 'EXTRA/SET_ACCOUNTS', payload: [] }));\n\n return true;\n };\n};\n","import { IAuthAction, ILoginData, INextView } from './auth.type';\nimport { RootState, IThunkType } from '../rootReducer';\nimport { sendMultipart, sendRequest, sendSingleRequest } from '../../apis';\nimport { showFeedback } from '../ui/ui.actions';\nimport { loadUtilsData } from '../utils/utils.actions';\nimport { loadInventories } from '../inventories/inventories.actions';\nimport { loadFarmsData, loadSpatStorages } from '../farms/farms.actions';\nimport { loadCustomFields, loadTags } from '../automation/automation.actions';\nimport { loadUserBoats } from '../users/users.actions';\nimport { IRegistration } from '../../entities/auth.entities';\nimport { getTaskData } from '../tasks/tasks.actions';\nimport { loadExtraData } from '../extra/extra.actions';\nimport { ITaskSetting } from '../../entities/user.entities';\n\nconst setAuth = (auth: IAuthAction): IAuthAction => auth;\n\nconst FixedStorage = ['assessment_import_headers'];\n\nexport const logOut = () => {\n return (dispatch: IThunkType) => {\n dispatch(\n setAuth({\n type: 'AUTH/LOGOUT',\n }),\n );\n let tmp: any = {};\n for (let k of FixedStorage) {\n const x = localStorage.getItem(k);\n if (x) tmp[k] = x;\n }\n localStorage.clear();\n localStorage.setItem(\n 'redux-local-tab-sync',\n JSON.stringify({ source: 'another tab', type: 'AUTH/LOGOUT' }),\n );\n for (let k in tmp) {\n localStorage.setItem(k, tmp[k]);\n }\n };\n};\n\nexport const nextView = (value: INextView) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(setAuth({ type: 'AUTH/SET_NEXT_VIEW', payload: value }));\n };\n};\n\nexport const signUp = (data: IRegistration, type: string) => {\n return async (dispatch: IThunkType) => {\n let res;\n if (type === 'signUp') {\n res = await sendRequest(data, 'POST', 'api/auth/signup');\n }\n if (type === 'invite') {\n res = await sendRequest(data, 'POST', 'api/auth/signup-by-invitation');\n }\n if (type === 'forgotPassword') {\n res = await sendRequest(data, 'POST', 'api/password/create');\n }\n\n if (res?.status === 'Success') {\n dispatch(\n nextView({\n isSuccess: true,\n email: data?.email,\n }),\n );\n } else if (type === 'forgotPassword' && res?.status !== 'Error') {\n dispatch(\n nextView({\n isSuccess: true,\n email: data?.email,\n }),\n );\n } else if (type === 'invite' && res?.status === 'success') {\n dispatch(\n nextView({\n isSuccess: false,\n message: 'Success',\n }),\n );\n } else {\n dispatch(\n nextView({\n isSuccess: false,\n message: res?.message || res?.status,\n }),\n );\n }\n };\n};\n\nexport const authLogin = (data: ILoginData) => {\n return async (dispatch: IThunkType) => {\n const res = await sendRequest(data, 'POST', 'api/auth/login');\n if (res?.status === 'Success') {\n localStorage.setItem('marine-farm', res?.data.access_token);\n localStorage.setItem('marine-farm-refresh', res?.data.refresh_token);\n localStorage.setItem('marine-farm-user_id', res?.user_id);\n await dispatch(\n setAuth({ type: 'AUTH/SET_TOKEN', payload: res?.data.access_token }),\n );\n\n return true;\n } else {\n dispatch(logOut());\n dispatch(\n showFeedback({\n type: 'error',\n isMessage: true,\n message: res?.message ?? 'Failed to login',\n }),\n );\n return false;\n }\n };\n};\n\nlet loadingMe = false;\n\nexport const authLoadMe = (simple = false) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const token = localStorage.getItem('marine-farm');\n if (!token) {\n dispatch(logOut());\n return false;\n }\n if (loadingMe) return true;\n loadingMe = true;\n\n let response = await sendSingleRequest({}, 'POST', 'api/auth/me', true);\n if (!response.status) {\n dispatch(logOut());\n dispatch(\n showFeedback({\n type: 'error',\n isMessage: true,\n message: response.data?.message ?? 'Failed to login',\n }),\n );\n loadingMe = false;\n return false;\n }\n dispatch(setAuth({ type: 'AUTH/SET_PROFILE', payload: response.data }));\n\n if (simple) {\n loadingMe = false;\n return true;\n }\n\n const type = response.data.type;\n if (type !== 'admin') {\n response = await sendSingleRequest({}, 'GET', 'api/user-meta', true);\n if (response.status) {\n dispatch(\n setAuth({ type: 'AUTH/SET_USER_META', payload: response.data }),\n );\n }\n dispatch(loadFarmsData());\n (async () => {\n await dispatch(loadUtilsData());\n await dispatch(loadCustomFields());\n await dispatch(loadInventories());\n })();\n (async () => {\n await dispatch(loadSpatStorages());\n await dispatch(loadUserBoats());\n await dispatch(loadTags());\n })();\n (async () => {\n await dispatch(getTaskData());\n await dispatch(loadExtraData());\n })();\n response = await sendSingleRequest({}, 'GET', 'api/user/settings', true);\n if (response.status) {\n const harvestTypes = response.data.HARVEST_TYPE ?? [],\n customTasks = response.data.CUSTOM_TASKS ?? [],\n friendEmails = response.data.FRIEND_EMAILS ?? [],\n showGpsWarning = !!response.data.SHOW_GPS_WARNING;\n dispatch(\n setAuth({\n type: 'AUTH/SET_SETTINGS',\n payload: {\n ...getState().auth.settings,\n harvestTypes,\n customTasks,\n friendEmails,\n showGpsWarning,\n },\n }),\n );\n }\n\n loadingMe = false;\n return true;\n } else {\n loadingMe = false;\n\n return true;\n }\n };\n};\n\nexport const updateShowGpsWarning = (data: boolean) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const res = await sendSingleRequest(\n { type: 'SHOW_GPS_WARNING', data },\n 'POST',\n 'api/user/settings',\n true,\n );\n if (res.status) {\n dispatch(\n setAuth({\n type: 'AUTH/SET_SETTINGS',\n payload: { ...getState().auth.settings, showGpsWarning: data },\n }),\n );\n } else {\n return res.data?.message ?? 'Failed to update setting';\n }\n };\n};\n\nexport const updateTaskSettings = (data: ITaskSetting[]) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const res = await sendSingleRequest(\n { type: 'CUSTOM_TASKS', data },\n 'POST',\n 'api/user/settings',\n true,\n );\n if (res.status) {\n dispatch(\n setAuth({\n type: 'AUTH/SET_SETTINGS',\n payload: { ...getState().auth.settings, customTasks: data },\n }),\n );\n return true;\n } else {\n return res.data?.message ?? 'Failed to update';\n }\n };\n};\n\nexport const updateFriendEmailSetting = (data: string[]) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const res = await sendSingleRequest(\n { type: 'FRIEND_EMAILS', data },\n 'POST',\n 'api/user/settings',\n true,\n );\n if (res.status) {\n dispatch(\n setAuth({\n type: 'AUTH/SET_SETTINGS',\n payload: { ...getState().auth.settings, friendEmails: data },\n }),\n );\n return true;\n } else {\n return res.data?.message ?? 'Failed to update';\n }\n };\n};\n\nexport const adminLoginAsUser = (data: any) => {\n return async (dispatch: IThunkType) => {\n const res = await sendRequest(\n data,\n 'POST',\n 'api/admin/login-as-user',\n true,\n );\n if (res?.status === 'Success') {\n localStorage.setItem('marine-farm', res?.data.access_token);\n localStorage.setItem('marine-farm-refresh', res?.data.refresh_token);\n\n await dispatch(\n setAuth({ type: 'AUTH/SET_TOKEN', payload: res?.data.access_token }),\n );\n await dispatch(authLoadMe());\n\n return true;\n } else {\n return res?.data?.message ?? 'Failed to login';\n }\n };\n};\n\nexport const updateUserMeta = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const res = await sendSingleRequest({}, 'GET', 'api/user-meta', true);\n if (res.status) {\n dispatch(setAuth({ type: 'AUTH/SET_USER_META', payload: res.data }));\n\n return true;\n } else {\n return res.data?.message ?? 'Something went wrong';\n }\n };\n};\n\nexport const updateAvatar = (data: any) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const res = await sendMultipart(\n data,\n 'POST',\n `api/user/update-avatar`,\n true,\n );\n if (res.status) {\n await dispatch(authLoadMe(true));\n\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Updated successfully',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: res.data?.message ?? 'Error',\n }),\n );\n }\n };\n};\n\nexport const updateProfile = (data: any) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const res = await sendSingleRequest(\n data,\n 'POST',\n `api/user/update-profile`,\n true,\n );\n if (res.status) {\n await dispatch(authLoadMe(true));\n\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Updated successfully',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: res.data?.message || 'Error',\n }),\n );\n }\n };\n};\n\nexport const updateEmail = (data: any) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const res = await sendSingleRequest(data, 'POST', 'api/user/email', true);\n if (res.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message:\n 'Your request has been submitted successfully. Please check your email.',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: res.data?.message || 'Error',\n }),\n );\n }\n };\n};\n\nexport const updatePassword = (data: any) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const res = await sendSingleRequest(\n data,\n 'POST',\n 'api/user/password',\n true,\n );\n if (res.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Updated successfully',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: res.data?.message || 'Error',\n }),\n );\n }\n };\n};\n\nexport const updateAccountSetting = (data: any) => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const response = await sendSingleRequest(\n data,\n 'POST',\n 'api/user/account-settings',\n true,\n );\n if (response.status) {\n const profile = getState().auth.profile;\n if (!profile) return false;\n\n dispatch(\n setAuth({\n type: 'AUTH/SET_PROFILE',\n payload: {\n ...profile,\n account: !profile.account ? data : { ...profile.account, ...data },\n },\n }),\n );\n\n return true;\n } else {\n return response.data;\n }\n };\n};\n\nexport const demoAccountLogin = () => {\n return async (dispatch: IThunkType) => {\n const res = await sendRequest({}, 'POST', 'api/auth/demo-sign');\n if (res?.status === 'Success') {\n const currentAccessToken = JSON.stringify({\n token: localStorage.getItem('marine-farm'),\n refresh: localStorage.getItem('marine-farm-refresh'),\n user_id: localStorage.getItem('marine-farm-user_id'),\n });\n localStorage.clear();\n\n if (currentAccessToken) {\n localStorage.setItem('mussel-app-premium-token', currentAccessToken);\n }\n\n localStorage.setItem('marine-farm', res?.data.access_token);\n localStorage.setItem('marine-farm-refresh', res?.data.refresh_token);\n localStorage.setItem('marine-farm-user_id', res?.user_id);\n\n await dispatch(\n setAuth({ type: 'AUTH/SET_TOKEN', payload: res?.data.access_token }),\n );\n await dispatch(setAuth({ type: 'AUTH/SET_DEMO_LOGIN', payload: true }));\n await dispatch(authLoadMe());\n\n return true;\n } else {\n dispatch(\n showFeedback({\n type: 'error',\n isMessage: true,\n message: res?.message ?? 'Failed to view demo',\n }),\n );\n return false;\n }\n };\n};\n\nexport const exitDemoAccount = () => {\n return async (dispatch: IThunkType) => {\n const premiumToken = localStorage.getItem('mussel-app-premium-token');\n if (!premiumToken) {\n dispatch(logOut());\n\n return false;\n }\n localStorage.clear();\n\n const token = JSON.parse(premiumToken);\n localStorage.setItem('marine-farm', token.token);\n localStorage.setItem('marine-farm-refresh', token.refresh);\n localStorage.setItem('marine-farm-user_id', token.user_id);\n\n await dispatch(setAuth({ type: 'AUTH/SET_TOKEN', payload: token.token }));\n await dispatch(setAuth({ type: 'AUTH/SET_DEMO_LOGIN', payload: false }));\n await dispatch(authLoadMe());\n\n return true;\n };\n};\n","import { NavLink } from 'react-router-dom';\nimport { TLang } from '../../entities/ui.entities';\nimport { translate } from '../../lib/lang.helper';\nimport { ILink } from '../../entities/general.entities';\nimport './styles.scss';\n\ninterface Props {\n menuItems: ILink[];\n onClick: () => void;\n lang?: TLang;\n}\n\nconst MobileMenu = ({ menuItems, onClick, lang }: Props) => (\n \n);\n\nexport default MobileMenu;\n","export default __webpack_public_path__ + \"static/media/boat.f104012a.png\";","import { ICustomField, ICustomValue } from './automation.entities';\nimport { IProfileResource } from './user.entities';\n\nexport const hashColor = (str: string): string => {\n var hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n var color = '#';\n for (let i = 0; i < 3; i++) {\n var value = (hash >> (i * 8)) & 0xff;\n color += ('00' + value.toString(16)).substr(-2);\n }\n return color;\n};\n\nexport const calcInterestRate = (planned: number, actual: number) => {\n if (planned <= 0) return 0;\n\n return ((actual - planned) / planned) * 100.0;\n};\n\nexport const roundNumber = (v: number, p = 2) =>\n v % 1 === 0 ? v : Number(v.toFixed(p));\n\nexport const formatNumber = (v: number, p = 2) =>\n roundNumber(v, p)\n .toString()\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\nexport const numberToMoneyStr = (v: number) =>\n v.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\nexport type TModuleName =\n | 'home'\n | 'profile'\n | 'user'\n | 'farm'\n | 'budget'\n | 'line'\n | 'spat-storage'\n | 'message'\n | 'automation'\n | 'inventory'\n | 'report'\n | 'import'\n | 'validation'\n | 'task'\n | 'calendar'\n | 'boat';\nconst modules = {\n operator: [\n 'home',\n 'profile',\n 'user',\n 'farm',\n 'budget',\n 'line',\n 'spat-storage',\n 'message',\n 'automation',\n 'inventory',\n 'report',\n 'validation',\n 'task',\n 'calendar',\n 'boat',\n 'import',\n ],\n grower: [\n 'home',\n 'profile',\n 'farm',\n 'budget',\n 'line',\n 'message',\n 'automation',\n 'report',\n 'import',\n 'task',\n 'calendar',\n 'user',\n 'inventory',\n 'spat-storage',\n 'validation',\n ],\n};\n\nexport const is_user_allowed = (\n type: 'operator' | 'grower' | undefined,\n module: TModuleName,\n) => {\n if (!type) return false;\n\n return modules[type].includes(module);\n};\n\nconst processingPlantRoutes = ['/summary/processing', '/farms', '/qr-scan'];\n\nexport const is_role_allowed = (\n role: IProfileResource['role'] | undefined,\n link: string,\n) => {\n if (!role) {\n return false;\n } else if (role === 'processing_plant') {\n return processingPlantRoutes.includes(link);\n } else {\n return true;\n }\n};\n\nexport const checkRolePermission = (\n data: {\n allowedRoles?: Array;\n deniedRoles?: Array;\n },\n role?: IProfileResource['role'],\n) => {\n const { allowedRoles, deniedRoles } = data;\n\n if (!role) {\n return true;\n } else if (allowedRoles) {\n return allowedRoles.includes(role);\n } else if (deniedRoles) {\n return !deniedRoles.includes(role);\n } else {\n return true;\n }\n};\n\nexport const customFieldsValues = (\n fields: ICustomField[] | null | undefined,\n values: ICustomValue[] | null | undefined,\n) => {\n return fields?.map(f => ({\n id: f.id,\n label: f.name,\n value: values?.find(x => x.field_id === f.id)?.field_val,\n unit: f.unit,\n }));\n};\n\nexport const customSpecialValue = (\n fields: ICustomField[] | undefined | null,\n values: ICustomValue[] | undefined | null,\n key: string,\n) => {\n const fd = fields?.find(x => x.name === key);\n if (!fd) return null;\n\n return values?.find(x => x.field_id === fd.id)?.field_val;\n};\n","import { useSelector } from 'react-redux';\nimport { NavLink } from 'react-router-dom';\nimport { RootState } from '../../store/rootReducer';\nimport message_icon from '../../images/message-icon.png';\nimport './styles.scss';\n\nconst BoatMessageMenuItem = () => {\n const userMeta = useSelector((state: RootState) => state.auth.userMeta);\n\n return (\n <>\n \n message\n \n {(userMeta?.unread_messages_count ?? 0) > 0 && (\n \n {userMeta?.unread_messages_count}\n \n )}\n \n );\n};\n\nexport default BoatMessageMenuItem;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAYAAAA+s9J6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA2IDc5LjE2NDc1MywgMjAyMS8wMi8xNS0xMTo1MjoxMyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjMgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkQyNTRBODNBN0YzNjExRUNCRjJFQkU2MjU4REVDNEVCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkQyNTRBODNCN0YzNjExRUNCRjJFQkU2MjU4REVDNEVCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RDI1NEE4Mzg3RjM2MTFFQ0JGMkVCRTYyNThERUM0RUIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RDI1NEE4Mzk3RjM2MTFFQ0JGMkVCRTYyNThERUM0RUIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7IFGL5AAAUIklEQVR42uydC3Ac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\"","import { createSelector } from 'reselect';\nimport { RootState } from '../rootReducer';\n\nexport const selectAccount = createSelector(\n (state: RootState) => state.auth.profile?.account,\n account => account,\n);\n\nexport const selectToken = createSelector(\n (state: RootState) => state.auth.token,\n token => token,\n);\n\nexport const selectProfile = createSelector(\n (state: RootState) => state.auth.profile,\n profile => profile,\n);\n\nexport const selectSettings = createSelector(\n (state: RootState) => state.auth.settings,\n settings => settings,\n);\n\nexport const selectUserMeta = createSelector(\n (state: RootState) => state.auth.userMeta,\n meta => meta,\n);\n\nexport const selectIsDemo = createSelector(\n (state: RootState) => state.auth.isDemo,\n isDemo => isDemo,\n);\n\nexport const selectXeroIsConnected = createSelector(\n (state: RootState) => state.auth.profile?.xero_connects,\n connects => connects && connects?.length > 0,\n);\n","import { createSelector } from 'reselect';\nimport { RootState } from '../rootReducer';\nimport { ISizedOyster } from '../../entities/utils.entities';\n\nexport const selectUtils = createSelector(\n (state: RootState) => state.utils.farmUtils,\n utils => utils,\n);\n\nexport const selectSeasons = createSelector(\n (state: RootState) => state.utils.farmUtils,\n seasons => seasons.filter(x => x.type === 'season'),\n);\n\nexport const selectPusher = createSelector(\n (state: RootState) => state.utils,\n utils => ({ key: utils.pusher_key, cluster: utils.pusher_cluster }),\n);\n\nexport const selectServerEnv = createSelector(\n (state: RootState) => state.utils.server_env,\n env => env,\n);\n\nexport const selectFarmingMethods = createSelector(\n (state: RootState) => state.utils.farmUtils,\n methods => methods.filter(x => x.type === 'farming_method'),\n);\n\nexport const selectSizedOysters = createSelector(\n (state: RootState) => state.utils.farmUtils,\n fields => fields.filter(x => x.type === 'oyster_harvest') as ISizedOyster[],\n);\n","import { createSelector } from 'reselect';\nimport { RootState } from '../rootReducer';\nimport { useSelector } from 'react-redux';\nimport { IMusselFarm, IOysterFarm } from '../../entities/farms.entities';\nimport { ISizedOyster } from '../../entities/utils.entities';\n\nconst getAccountByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const myFarms = state.farms.farmsData;\n const extraFarms = state.extra.farms;\n if (!farmID || myFarms.some(x => x.id === farmID)) {\n return undefined;\n }\n if (!extraFarms) {\n return undefined;\n }\n const farm = extraFarms.find(x => x.id === farmID);\n return farm?.account_id;\n },\n id => id,\n);\n\nexport const SelectIsMyFarm = (farmID: number | undefined) =>\n useSelector((state: RootState) => !getAccountByFarmID(state, farmID));\n\nconst getInventoriesByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const accountID = getAccountByFarmID(state, farmID);\n if (accountID) {\n return state.extra.inventories ?? [];\n } else {\n return state.inventories.inventories ?? [];\n }\n },\n inventories => inventories,\n);\n\nexport const SelectInventoriesByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getInventoriesByFarmID(state, farmID));\n\nexport const selectAllFarms = createSelector(\n (state: RootState) => state.farms.farmsData,\n (state: RootState) => state.extra.farms,\n (myFarms, extraFarms) => (extraFarms ? [...myFarms, ...extraFarms] : myFarms),\n);\n\nconst getFarmsByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const myFarms = state.farms.farmsData;\n const extraFarms = state.extra.farms;\n if (!farmID || myFarms.some(x => x.id === farmID)) {\n return myFarms;\n }\n if (!extraFarms) {\n return [];\n }\n const farm = extraFarms.find(x => x.id === farmID);\n return extraFarms.filter(x => x.account_id === farm?.account_id);\n },\n farms => farms,\n);\n\nexport const SelectFarmsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getFarmsByFarmID(state, farmID));\n\nexport const SelectMusselFarmsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getFarmsByFarmID(state, farmID)).filter(\n x => x.type === 'MUSSEL',\n ) as IMusselFarm[];\n\nexport const SelectOysterFarmsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getFarmsByFarmID(state, farmID)).filter(\n x => x.type === 'OYSTER',\n ) as IOysterFarm[];\n\nexport const SelectSeaweedFarmsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getFarmsByFarmID(state, farmID)).filter(\n x => x.type === 'SEAWEED',\n );\n\nconst getSpatsByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const accountID = getAccountByFarmID(state, farmID);\n if (accountID) {\n return (\n state.extra.spatStorages?.filter(x => x.account_id === accountID) ?? []\n );\n } else {\n return state.farms.spatStorages;\n }\n },\n spats => spats,\n);\n\nexport const SelectSpatStoragesByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getSpatsByFarmID(state, farmID));\n\nexport const SelectMusselSpatsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getSpatsByFarmID(state, farmID)).filter(\n x => x.type === 'MUSSEL' && (!x.flupsy_storage || undefined === x.flupsy_storage),\n );\n\nexport const SelectOysterSpatsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getSpatsByFarmID(state, farmID)).filter(\n x => x.type === 'OYSTER' && (!x.flupsy_storage || undefined === x.flupsy_storage),\n );\n\nexport const SelectSeaweedSpatsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getSpatsByFarmID(state, farmID)).filter(\n x => x.type === 'SEAWEED' && (!x.flupsy_storage || undefined === x.flupsy_storage),\n );\n\nexport const SelectMusselFlupsySpatsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getSpatsByFarmID(state, farmID)).filter(\n x => x.type === 'MUSSEL' && x.flupsy_storage,\n );\n\nexport const SelectOysterFlupsySpatsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getSpatsByFarmID(state, farmID)).filter(\n x => x.type === 'OYSTER' && x.flupsy_storage,\n );\n\nexport const SelectSeaweedFlupsySpatsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getSpatsByFarmID(state, farmID)).filter(\n x => x.type === 'SEAWEED' && x.flupsy_storage,\n );\n\nconst getIsBudgetVisible = createSelector(\n (state: RootState, farmID: number | undefined) => {\n if (!farmID || state.farms.farmsData.some(x => x.id === farmID)) {\n return !!state.auth.profile?.account?.show_budget_menu;\n }\n const farm = state.extra.farms?.find(x => x.id === farmID);\n\n return farm && !!farm.is_financed;\n },\n visible => visible,\n);\n\nexport const SelectIsBudgetVisible = (farmID: number | undefined) =>\n useSelector((state: RootState) => getIsBudgetVisible(state, farmID));\n\nconst getIsEditable = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const profile = state.auth.profile;\n if (!profile) return false;\n const res =\n ['owner', 'admin'].includes(profile.role) || !!profile.edit_permission;\n if (!farmID) return res;\n const accountID = getAccountByFarmID(state, farmID);\n return !accountID ? res : false;\n },\n editable => editable,\n);\n\nconst getIsFarmable = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const profile = state.auth.profile;\n if (!profile) return false;\n const res =\n ['owner', 'admin'].includes(profile.role) || !!profile.edit_permission;\n\n if (!farmID) return res;\n const accountID = getAccountByFarmID(state, farmID);\n return !accountID ? res : true;\n },\n farmable => farmable,\n);\n\nexport const SelectIsEditable = (farmID: number | undefined) =>\n useSelector((state: RootState) => getIsEditable(state, farmID));\n\nexport const SelectIsFarmable = (farmID: number | undefined) =>\n useSelector((state: RootState) => getIsFarmable(state, farmID));\n\nconst getUtilsByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n if (!farmID) {\n return state.utils.farmUtils;\n }\n const accountID = getAccountByFarmID(state, farmID);\n if (accountID) {\n return state.extra.utils?.filter(x => x.account_id === accountID) ?? [];\n } else {\n return state.utils.farmUtils;\n }\n },\n utils => utils,\n);\n\nexport const SelectUtilsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getUtilsByFarmID(state, farmID));\n\nexport const SelectSizedOystersByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getUtilsByFarmID(state, farmID)).filter(\n x => x.type === 'oyster_harvest',\n ) as ISizedOyster[];\n\nexport const SelectSeasonsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getUtilsByFarmID(state, farmID)).filter(\n x => x.type === 'season',\n );\n\nconst getCustomFieldsByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const accountID = getAccountByFarmID(state, farmID);\n if (!accountID) {\n return state.automation.customFields;\n } else {\n return (\n state.extra.customFields?.filter(x => x.account_id === accountID) ?? []\n );\n }\n },\n customFields => customFields,\n);\n\nexport const SelectAssessFields = (farmID: number | undefined) =>\n useSelector((state: RootState) =>\n getCustomFieldsByFarmID(state, farmID),\n ).filter(x => x.type === 'ASSESSMENT');\n\nexport const SelectSeedingFields = (farmID: number | undefined) =>\n useSelector((state: RootState) =>\n getCustomFieldsByFarmID(state, farmID),\n ).filter(x => x.type === 'SEEDING');\n\nexport const SelectHarvestFields = (farmID: number | undefined) =>\n useSelector((state: RootState) =>\n getCustomFieldsByFarmID(state, farmID),\n ).filter(x => x.type === 'HARVEST');\n\nconst getSettingsByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n if (!farmID) {\n return state.auth.settings;\n }\n const accountID = getAccountByFarmID(state, farmID);\n if (!accountID) {\n return state.auth.settings;\n } else {\n return undefined;\n }\n },\n settings => settings,\n);\n\nexport const SelectSettingsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getSettingsByFarmID(state, farmID));\n\nconst getTagsByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const accountID = getAccountByFarmID(state, farmID);\n if (!accountID) {\n return state.automation.tags;\n } else {\n return state.extra.tags?.filter(x => x.account_id === accountID) ?? [];\n }\n },\n tags => tags,\n);\n\nexport const SelectTagsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getTagsByFarmID(state, farmID));\n\nexport const selectAllTags = createSelector(\n (state: RootState) => state.automation.tags,\n (state: RootState) => state.extra.tags,\n (tags, extraTags) => [...(tags ?? []), ...(extraTags ?? [])],\n);\n\nconst getAccountTypeByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const accountID = getAccountByFarmID(state, farmID);\n if (!accountID) {\n return state.auth.profile?.account_type;\n }\n const account = state.extra.accounts?.find(x => x.id === accountID);\n return account?.type;\n },\n type => type,\n);\n\nexport const SelectIsGrower = (farmID: number | undefined) =>\n useSelector(\n (state: RootState) => getAccountTypeByFarmID(state, farmID) === 'grower',\n );\n\nconst getAccountSettingByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const accountID = getAccountByFarmID(state, farmID);\n if (!accountID) {\n return state.auth.profile?.account;\n }\n const account = state.extra.accounts?.find(x => x.id === accountID);\n return account?.setting;\n },\n account => account,\n);\n\nexport const SelectAccountSetting = (farmID: number | undefined) =>\n useSelector((state: RootState) => getAccountSettingByFarmID(state, farmID));\n\nconst getProfileByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const accountID = getAccountByFarmID(state, farmID);\n if (!accountID) {\n return state.auth.profile;\n }\n return undefined;\n },\n role => role,\n);\n\nexport const SelectProfileRole = (farmID: number | undefined) =>\n useSelector((state: RootState) => getProfileByFarmID(state, farmID)?.role);\n\nexport const SelectProfileByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getProfileByFarmID(state, farmID));\n\nconst getUserMetaByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const accountID = getAccountByFarmID(state, farmID);\n if (!accountID) {\n return state.auth.userMeta;\n }\n return undefined;\n },\n meta => meta,\n);\n\nexport const SelectUserMeta = (farmID: number | undefined) =>\n useSelector((state: RootState) => getUserMetaByFarmID(state, farmID));\n\nconst getXeroContactsByFarmID = createSelector(\n (state: RootState, farmID: number | undefined) => {\n const accountID = getAccountByFarmID(state, farmID);\n if (!accountID) {\n return state.subscription.xero_contacts;\n }\n return undefined;\n },\n contacts => contacts,\n);\n\nexport const SelectXeroContactsByFarmID = (farmID: number | undefined) =>\n useSelector((state: RootState) => getXeroContactsByFarmID(state, farmID));\n","import { useSelector } from 'react-redux';\nimport { selectServerEnv } from '../../store/utils/utils.selector';\nimport { useMemo } from 'react';\nimport { selectLang, selectVersion } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectAllFarms } from '../../store/extra/extra.selector';\n\nconst HeaderWarning = () => {\n const serverEnv = useSelector(selectServerEnv);\n const version = useSelector(selectVersion);\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectAllFarms);\n\n const urgentLines = useMemo(() => {\n let result: Array<{ id: number; name: string }> = [];\n for (let farm of farmsData) {\n for (let line of farm.lines) {\n if (line.is_urgent) {\n result.push({\n id: line.id,\n name: `${farm.name} - ${line.line_name}`,\n });\n }\n }\n }\n return result;\n }, [farmsData]);\n\n return (\n <>\n {serverEnv === 'local' && (\n
\n {translate(lang, '_is_testing_env', version)}\n
\n )}\n {urgentLines.length > 0 && (\n
\n {translate(\n lang,\n '%s line(s) are required to urgent attention',\n urgentLines.map(x => x.name).join(', '),\n )}\n
\n )}\n \n );\n};\n\nexport default HeaderWarning;\n","import { useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, NavLink, useHistory } from 'react-router-dom';\nimport { Menu, Dropdown, Avatar } from 'antd';\nimport { UserOutlined } from '@ant-design/icons';\nimport { Feedback, Paragrapgh } from '../shared';\nimport { logOut } from '../../store/auth/auth.actions';\nimport { useWidth } from '../../util/useWidth';\nimport MobileMenu from './MobileMenu';\nimport boat_png from '../../images/boat.png';\nimport { hideFeedback } from '../../store/ui/ui.actions';\nimport {\n checkRolePermission,\n is_user_allowed,\n} from '../../entities/util-functions';\nimport BoatMessageMenuItem from '../../pages/boat-message/BoatMessageMenuItem';\nimport { selectProfile, selectUserMeta } from '../../store/auth/auth.selector';\nimport { selectFeedbacks, selectLang } from '../../store/ui/ui.selector';\nimport HeaderWarning from './HeaderWarning';\nimport { translate } from '../../lib/lang.helper';\nimport { ILink } from '../../entities/general.entities';\nimport './styles.scss';\n\nconst BoatIcon = () => (\n
\n boat\n
\n);\n\nconst ValidationMenuItem = () => {\n const qCnt = useSelector(selectUserMeta)?.queue_count;\n const lang = useSelector(selectLang);\n\n return (\n \n \n {translate(lang, 'Validation')}\n \n {!!qCnt && qCnt > 0 && {qCnt}}\n \n );\n};\n\nconst Header = () => {\n const dispatch = useDispatch();\n const history = useHistory();\n const width = useWidth();\n\n const lang = useSelector(selectLang);\n const profile = useSelector(selectProfile);\n const allFeedbacks = useSelector(selectFeedbacks);\n\n const [isOpen, setIsOpen] = useState(false);\n const [avatar, setAvatar] = useState();\n\n const menuItems = useMemo(() => {\n if (profile?.type === 'admin') {\n return [\n { link: '/admin/users', name: 'Users', isExact: true },\n { link: '/profile/security', name: 'Security', isExact: true },\n { link: '/admin/accounts', name: 'Accounts', isExact: true },\n ];\n }\n if (profile?.role === 'processing_plant') {\n return [\n { link: '/farms', name: 'Farms', isExact: false },\n {\n link: '/summary/processing',\n name: 'Processing Stats',\n isExact: true,\n },\n { link: '/qr-scan', name: 'Scan Code', isExact: false },\n ];\n }\n let items: ILink[] = [\n { module: 'home', link: '/', name: 'Overview', isExact: true },\n { module: 'farm', link: '/farms', name: 'Farms', isExact: false },\n { module: 'farm', link: '/farms-map', name: 'Map', isExact: false },\n {\n module: 'home',\n link: '/summary/harvest',\n name: 'Stats',\n isExact: false,\n children: [\n {\n module: 'home',\n link: '/summary/harvest',\n name: 'Harvest',\n isExact: false,\n },\n {\n module: 'home',\n link: '/summary/processing',\n name: 'Processing',\n isExact: false,\n },\n {\n module: 'home',\n link: '/summary/performance',\n name: 'Performance',\n isExact: false,\n },\n {\n module: 'home',\n link: '/summary/biosecurity',\n name: 'Biosecurity',\n isExact: false,\n },\n {\n module: 'home',\n link: '/summary/stages',\n name: 'Stages',\n isExact: false,\n },\n {\n module: 'home',\n link: '/oyster-summary/growth',\n name: 'Oyster Summary',\n isExact: false,\n },\n ],\n },\n { module: 'budget', link: '/budget', name: 'Budget', isExact: false },\n {\n module: 'calendar',\n link: '/calendar',\n name: 'Calendar',\n isExact: false,\n children: [\n {\n module: 'calendar',\n link: '/calendar',\n name: 'Calendar',\n isExact: false,\n },\n {\n module: 'task',\n link: '/tasks',\n name: 'Things to do',\n isExact: false,\n },\n {\n module: 'calendar',\n link: '/suggest',\n name: \"Today's suggestions\",\n isExact: false,\n },\n {\n module: 'calendar',\n link: '/harvest-planner',\n name: 'Harvest planner',\n isExact: false,\n },\n ],\n },\n {\n module: 'spat-storage',\n link: '/spat-storage',\n name: 'Spat Storage',\n isExact: false,\n },\n {\n module: 'inventory',\n link: '/inventory',\n name: 'Inventory',\n isExact: false,\n },\n { module: 'report', link: '/report', name: 'Report', isExact: false },\n ];\n if (!profile?.finance_permission) {\n items = items.filter(\n x => x.link !== '/budget' && x.link !== '/budget-log',\n );\n }\n if (!profile?.account?.show_budget_menu) {\n items = items.filter(x => x.name !== 'Budget');\n }\n if (\n !!profile?.is_verified ||\n profile?.role === 'owner' ||\n profile?.role === 'admin'\n ) {\n items.push({\n module: 'validation',\n link: '/queue',\n name: 'Validation',\n isExact: false,\n });\n }\n items = items.filter(x =>\n is_user_allowed(profile?.account_type, x.module ?? 'home'),\n );\n\n return items;\n }, [profile]);\n\n useEffect(() => {\n setAvatar(profile?.avatar as string);\n }, [profile?.avatar]);\n\n const onDropdownClick = () => {\n history.push(`/sign-in`);\n dispatch(logOut());\n };\n\n useEffect(() => {\n if (isOpen) {\n const bodyElement = document.getElementsByTagName('body');\n bodyElement[0].style.overflow = 'hidden';\n } else {\n const bodyElement = document.getElementsByTagName('body');\n bodyElement[0].style.overflow = 'visible';\n }\n }, [isOpen]);\n\n const menu = (\n \n {checkRolePermission(\n { deniedRoles: ['processing_plant'] },\n profile?.role,\n ) && (\n <>\n \n \n \n {profile?.name}\n \n \n {translate(lang, 'View profile')}\n \n \n \n \n \n \n {translate(lang, 'Users')}\n \n \n \n {is_user_allowed(profile?.account_type, 'boat') && (\n \n \n \n {translate(lang, 'Boats')} \n \n \n )}\n \n \n {translate(lang, 'Custom Fields')} \n \n \n \n \n {translate(lang, 'Tags')} \n \n \n \n \n {translate(lang, 'Connect to another account')}\n \n \n \n )}\n \n {translate(lang, 'Log out')}\n \n \n );\n\n return (\n <>\n \n
\n
\n
\n {width < 867 ? (\n <>\n setIsOpen(!isOpen)}\n onKeyDown={() => setIsOpen(!isOpen)}\n role='button'\n tabIndex={0}\n >\n \n \n \n \n
\n {isOpen && (\n setIsOpen(!isOpen)}\n menuItems={menuItems}\n lang={lang}\n />\n )}\n \n ) : (\n \n )}\n\n
\n \n }\n />\n \n {checkRolePermission(\n { deniedRoles: ['processing_plant'] },\n profile?.role,\n ) && }\n
\n
\n {allFeedbacks &&\n allFeedbacks\n .filter(x => x.isMessage)\n .map((feedback: any, i: number) => (\n dispatch(hideFeedback(feedback.id))}\n />\n ))}\n
\n \n \n );\n};\n\nexport default Header;\n","import { useEffect } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { Spinner } from '../../components/shared';\nimport { useDispatch } from 'react-redux';\nimport { authLoadMe } from '../../store/auth/auth.actions';\n\nconst Loading = () => {\n const params = useParams<{ type: string }>();\n const history = useHistory();\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (params.type === 'xero') {\n dispatch(authLoadMe(true)).then(() => history.replace('/profile/xero'));\n } else {\n history.push('/');\n }\n }, []);\n\n return (\n
\n \n
\n );\n};\n\nexport default Loading;\n","import { Link } from 'react-router-dom';\nimport {\n Button,\n ErrorPageIcon,\n ErrorSmallIcon,\n Paragrapgh,\n Title,\n} from '../../components/shared';\nimport { useWidth } from '../../util/useWidth';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst NotFound = () => {\n const width = useWidth();\n const lang = useSelector(selectLang);\n\n return (\n
\n
\n {width > 660 ? : }\n 660 ? 'pt-48' : 'pt-32'}\n size={5}\n fontWeight={500}\n align='default'\n color='black-3'\n >\n {translate(lang, '_page_not_found_title')}\n \n \n {translate(lang, '_page_not_found_body')}\n \n 660 ? 'mt-24' : 'mt-32'}>\n \n {translate(lang, '_page_not_found_btn')}\n \n \n
\n
\n );\n};\n\nexport default NotFound;\n","import { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Input, Title, Button, Paragrapgh } from '../../components/shared';\nimport { useWidth } from '../../util/useWidth';\nimport { updateEmail, updatePassword } from '../../store/auth/auth.actions';\nimport { IChangePassword } from '../../entities/auth.entities';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\n\nconst Security = () => {\n const dispatch = useDispatch();\n const width = useWidth();\n\n const lang = useSelector(selectLang);\n const profile = useSelector(selectProfile);\n\n const [emailFields, setEmailFields] = useState({ email: '', password: '' });\n const [passwordFields, setPasswordFields] = useState({\n password: '',\n new_password: '',\n });\n const [isClear, setIsClear] = useState(false);\n const [disabled, setDisabled] = useState(false);\n\n useEffect(() => {\n if (isClear) {\n setIsClear(false);\n }\n }, [isClear]);\n\n const handleOnChangePassword = async () => {\n setDisabled(true);\n const changeData: IChangePassword = {\n password: passwordFields.password,\n new_password: passwordFields.new_password,\n };\n await dispatch(updatePassword(changeData));\n setPasswordFields({ password: '', new_password: '' });\n setDisabled(false);\n };\n\n const handleOnChangeEmail = async () => {\n setDisabled(true);\n await dispatch(updateEmail(emailFields));\n setDisabled(false);\n };\n\n return (\n
\n {width > 768 && (\n \n {translate(lang, 'Security')}\n \n )}\n \n {translate(lang, 'Change email')}\n \n \n {translate(lang, 'Current email')} -\n {profile?.email}\n \n \n setEmailFields({ ...emailFields, email: e.target.value })\n }\n value={emailFields.email}\n placeholder=''\n />\n \n {translate(lang, 'Change email')}\n \n \n {translate(lang, 'Change password')}\n \n \n setPasswordFields({ ...passwordFields, new_password: e.target.value })\n }\n placeholder=''\n isClear={isClear}\n />\n \n {translate(lang, 'Change password')}\n \n
\n );\n};\n\nexport default Security;\n","import Security from '../Profile/Security';\n\nconst AdminSecurityPage = () => (\n
\n
\n
\n
\n \n
\n
\n
\n);\n\nexport default AdminSecurityPage;\n","import { useCallback, useEffect, useState } from 'react';\nimport { Table } from 'antd';\nimport { useDispatch } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { Button, Spinner, Title } from '../../components/shared';\nimport { adminLoginAsUser } from '../../store/auth/auth.actions';\nimport { useHistory } from 'react-router-dom';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport moment from 'moment';\nimport { toMillisecond } from '../../util/toggleSecondMillisecond';\nimport './styles.scss';\n\ninterface ILastLocation {\n created_at: number;\n content: any | null;\n}\n\ninterface IUserResource {\n id: number;\n name: string;\n email: string;\n company_name: string | null;\n company_address: string | null;\n phone_number: string | null;\n account_id: number;\n status: number;\n is_verified: boolean;\n last_location?: ILastLocation;\n}\n\nconst AdminUsersPage = () => {\n const dispatch = useDispatch();\n const history = useHistory();\n\n const [users, setUsers] = useState();\n const [loading, setLoading] = useState(false);\n\n const loadUsers = useCallback(() => {\n setLoading(true);\n sendSingleRequest({}, 'GET', 'api/admin/users', true).then(res => {\n setLoading(false);\n if (res.status) {\n setUsers(res.data);\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: res.data?.message ?? 'Something went wrong',\n }),\n );\n }\n });\n }, []);\n\n const loginAsUser = (user: IUserResource) => {\n setLoading(true);\n dispatch(adminLoginAsUser({ user_id: user.id })).then((r: any) => {\n if (r === true) {\n history.replace('/');\n } else {\n setLoading(false);\n dispatch(showFeedback({ isMessage: true, type: 'error', message: r }));\n }\n });\n };\n\n useEffect(() => loadUsers(), [loadUsers]);\n\n const columns = [\n {\n title: 'ID',\n key: 'id',\n render: (x: IUserResource) => {x.id},\n },\n {\n title: 'Name',\n key: 'name',\n render: (x: IUserResource) => {x.name},\n },\n {\n title: 'Email',\n key: 'email',\n render: (x: IUserResource) =>\n x.last_location ? (\n \n
{x.email}
\n
\n {`Last activated on mobile device at ${moment(\n toMillisecond(\n x.last_location.content?.rec_time ??\n x.last_location.created_at,\n ),\n ).format('lll')}`}\n
\n
\n ) : (\n {x.email}\n ),\n },\n {\n title: 'Company name',\n key: 'company_name',\n render: (x: IUserResource) => {x.company_name ?? ''},\n },\n {\n title: 'Company address',\n key: 'company_address',\n render: (x: IUserResource) => {x.company_address ?? ''},\n },\n {\n title: 'Phone number',\n key: 'phone_number',\n render: (x: IUserResource) => {x.phone_number ?? ''},\n },\n {\n title: 'Account ID',\n key: 'account_id',\n render: (x: IUserResource) => {x.account_id},\n },\n {\n title: 'Activated',\n key: 'status',\n render: (x: IUserResource) => (\n \n {x.status === 1 ? 'Activated' : x.status === 0 ? 'Pending' : 'Closed'}\n \n ),\n },\n {\n title: 'Verified',\n key: 'is_verified',\n render: (x: IUserResource) => {x.is_verified ? 'Yes' : 'No'},\n },\n {\n title: 'Action',\n key: 'action',\n render: (x: IUserResource) => (\n \n Login\n \n ),\n },\n {\n title: '',\n key: 'right',\n render: (x: IUserResource) => ,\n },\n ];\n\n return (\n
\n
\n
\n \n All Users\n \n
\n
\n {loading ? (\n
\n \n
\n ) : (\n \n )}\n
\n
\n
\n );\n};\n\nexport default AdminUsersPage;\n","import { useCallback, useEffect, useState } from 'react';\nimport { Table } from 'antd';\nimport { sendSingleRequest } from '../../apis';\nimport {\n Button,\n CheckboxButton,\n Spinner,\n Title,\n} from '../../components/shared';\nimport './styles.scss';\n\ninterface IUser {\n id: number;\n name: string | null;\n email: string;\n}\n\ninterface IAccount {\n id: number;\n users: IUser[];\n owner: IUser | null;\n is_freemium: boolean;\n created_at: string | null;\n}\n\nconst columns = [\n {\n title: 'ID',\n key: 'id',\n render: (x: IAccount) => {x.id},\n },\n {\n title: 'Owner',\n key: 'owner',\n render: (x: IAccount) => (\n {x.owner ? `${x.owner.email} - ${x.owner.name}` : ''}\n ),\n },\n {\n title: 'Users',\n key: 'users',\n render: (x: IAccount) => (\n \n {x.users.map(u => (\n
{`${u.email} - ${u.name}`}
\n ))}\n
\n ),\n },\n {\n title: 'Created at',\n key: 'created_at',\n render: (x: IAccount) => {x.created_at},\n },\n];\n\nconst AdminAccountsPage = () => {\n const [accounts, setAccounts] = useState();\n const [loading, setLoading] = useState(false);\n const [disabled, setDisabled] = useState(false);\n\n const loadUsers = useCallback(async () => {\n setLoading(true);\n const res = await sendSingleRequest({}, 'GET', 'api/admin/accounts', true);\n if (res.status) {\n setAccounts(res.data);\n } else {\n window.alert(res.data?.message ?? 'Something went wrong');\n }\n setLoading(false);\n }, []);\n\n const updatePremium = async (account_id: number, isPremium: boolean) => {\n setDisabled(true);\n const res = await sendSingleRequest(\n { account_id, is_freemium: !isPremium },\n 'PUT',\n 'api/admin/account',\n true,\n );\n if (!res.status) {\n window.alert(res.data?.message ?? 'Something went wrong');\n setDisabled(false);\n } else {\n await loadUsers();\n setDisabled(false);\n }\n };\n const deleteClick = async (acc: IAccount) => {\n if (\n !window.confirm(\n 'This account and all its users will be deleted now. Please make sure you download a backup Excel of data just in case if user would like to access the data in the future.',\n )\n )\n return;\n setDisabled(true);\n const res = await sendSingleRequest(\n { account_id: acc.id },\n 'DELETE',\n 'api/admin/account',\n true,\n );\n setDisabled(false);\n if (res.status) {\n await loadUsers();\n } else {\n window.alert(res.data?.message ?? 'Something went wrong');\n }\n };\n\n const tableColumns = [\n ...columns,\n {\n title: 'Freemium/Premium',\n key: 'is_freemium',\n render: (x: IAccount) => (\n updatePremium(x.id, e.target.checked)}\n disabled={disabled}\n />\n ),\n },\n {\n title: 'Action',\n key: 'action',\n render: (x: IAccount) => (\n deleteClick(x)}\n >\n Delete\n \n ),\n },\n { title: '', key: 'right', render: () => },\n ];\n\n useEffect(() => {\n loadUsers();\n }, [loadUsers]);\n\n return (\n
\n
\n
\n \n All Accounts\n \n
\n
\n {loading ? (\n
\n \n
\n ) : (\n \n )}\n
\n
\n
\n );\n};\n\nexport default AdminAccountsPage;\n","import { useSelector } from 'react-redux';\nimport { Switch, Route } from 'react-router-dom';\nimport { RootState } from '../../store/rootReducer';\nimport AdminSecurityPage from './AdminSecurityPage';\nimport AdminUsersPage from './AdminUsersPage';\nimport AdminAccountsPage from './AdminAccountsPage';\n\nconst AdminRoute = () => {\n const profile = useSelector((state: RootState) => state.auth.profile);\n\n if (profile?.type !== 'admin') {\n return null;\n }\n return (\n \n \n \n \n \n \n );\n};\n\nexport default AdminRoute;\n","import { FC, useEffect, useState } from 'react';\nimport { Route, Redirect, useLocation, useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { logOut } from '../store/auth/auth.actions';\nimport { selectToken } from '../store/auth/auth.selector';\n\nconst unAuthRoutes = [\n '/sign-in',\n '/sign-up',\n '/recover-password/',\n '/message-registration',\n '/message-password',\n '/onboarding',\n];\n\nconst ProtectedRoute: FC<{\n component: FC;\n path: string;\n exact: boolean;\n}> = ({ component, path, exact }) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const token = useSelector(selectToken);\n const query = new URLSearchParams(useLocation().search);\n const [condition, setCondition] = useState();\n\n const checkLogin = async () => {\n if (!!token) {\n setCondition(true);\n } else if (localStorage.getItem('marine-farm-refresh') !== null) {\n setCondition(true);\n } else {\n setCondition(false);\n }\n };\n\n useEffect(() => {\n const backUrl =\n window.location.pathname === '/' ||\n unAuthRoutes.some(x => window.location.href.includes(x))\n ? ''\n : window.location.href;\n\n if (\n (query.get('email') && query.get('token')) ||\n path.includes('checked') ||\n path.includes('recover-password/password')\n ) {\n dispatch(logOut());\n setCondition(false);\n } else {\n checkLogin();\n }\n if (!unAuthRoutes.some(x => history.location.pathname.includes(x))) {\n history.replace(\n backUrl\n ? `/sign-in?redirect=${encodeURIComponent(backUrl)}`\n : '/sign-in',\n );\n }\n }, [component, history.location.pathname]);\n\n return (\n <>\n {condition === true && }\n {condition === false && (\n \n )}\n \n );\n};\nexport default ProtectedRoute;\n","import { FormEvent, useEffect, useState } from 'react';\nimport { Link, useHistory, useLocation, useParams } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Button,\n CheckboxButton,\n Input,\n Title,\n Paragrapgh,\n Feedback,\n Dropdown,\n} from '../../components/shared';\nimport { authLogin } from '../../store/auth/auth.actions';\nimport { ILoginData } from '../../store/auth/auth.type';\nimport { useWidth } from '../../util/useWidth';\nimport { selectToken } from '../../store/auth/auth.selector';\nimport { selectFeedbacks, selectLang } from '../../store/ui/ui.selector';\nimport { setLangUI } from '../../store/ui/ui.actions';\nimport { translate } from '../../lib/lang.helper';\n\nconst SignIn = () => {\n const query = new URLSearchParams(useLocation().search);\n const dispatch = useDispatch();\n const params = useParams<{ checked: string }>();\n const history = useHistory();\n const width = useWidth();\n\n const lang = useSelector(selectLang);\n const token = useSelector(selectToken);\n const allFeedbacks = useSelector(selectFeedbacks);\n\n const [disabled, setDisabled] = useState(false);\n const [isChecked, setIsChecked] = useState(false);\n const [isInviteAccept, setIsInviteAccept] = useState(false);\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [isValidFields, setIsValidFields] = useState(false);\n const [fieldsValid, setFieldsValid] = useState([\n {\n name: 'password',\n isValidate: false,\n },\n {\n name: 'email',\n isValidate: false,\n },\n ]);\n const [remember, setRemember] = useState(false);\n\n const updateLanguage = (v: any) => dispatch(setLangUI(v));\n\n useEffect(() => {\n if (!!token) {\n const backUrl = query.get('redirect');\n if (!backUrl) {\n history.push('/');\n } else if (backUrl.startsWith(window.location.origin)) {\n history.push(backUrl.substring(window.location.origin.length));\n } else {\n window.location.href = backUrl;\n }\n }\n }, [token]);\n\n useEffect(() => {\n if (params.checked === 'checked') {\n setIsChecked(true);\n }\n\n if (params.checked === 'invite-accept') {\n setIsInviteAccept(true);\n }\n }, []);\n\n useEffect(() => {\n if (isChecked) {\n setTimeout(() => {\n setIsChecked(false);\n }, 3000);\n }\n if (isInviteAccept) {\n setTimeout(() => {\n setIsInviteAccept(false);\n }, 3000);\n }\n }, [isChecked, isInviteAccept]);\n\n const handleOnChangeEmail = (value: string) => {\n setEmail(value);\n };\n const handleOnChangePassword = (value: string) => {\n setPassword(value);\n };\n const handleOnValidFields = (value: boolean, data: string | undefined) => {\n let counter = 0;\n const newArr = fieldsValid.map(field => {\n /* eslint-disable*/\n if (field.name === data) {\n if (value) counter++;\n return { ...field, isValidate: value };\n }\n if (field.name !== data && field.isValidate) counter++;\n return field;\n });\n\n setFieldsValid(newArr);\n setIsValidFields(2 === counter || false);\n };\n\n const onLogin = async (e: FormEvent) => {\n e.preventDefault();\n setDisabled(true);\n const data: ILoginData = {\n email,\n password,\n remember,\n };\n if (isValidFields) {\n const res = await dispatch(authLogin(data));\n if (!res) {\n setDisabled(false);\n }\n }\n };\n\n return (\n <>\n 768\n ? 'd-flex justify-content-center align-items-center h-80-vh'\n : 'd-block'\n }\n >\n
\n
\n \n {translate(lang, 'Sign In')}\n \n {width > 768 && (\n
\n \n {translate(lang, \"Don't have an account?\")}\n \n \n \n {translate(lang, 'Sign Up')}\n \n \n
\n )}\n
\n \n
\n
\n handleOnChangeEmail(e.target.value)}\n type='email'\n value={email}\n className='mb-16'\n dataType='email'\n onValidate={(e, data) => handleOnValidFields(e, data)}\n />\n handleOnChangePassword(e.target.value)}\n type='password'\n value={password}\n className='mb-16'\n dataType='password'\n onValidate={(e, data) => handleOnValidFields(e, data)}\n />\n
\n setRemember(e.target.checked)}\n />\n \n \n {translate(lang, 'Forgot Password')}?\n \n \n
\n
\n \n {translate(lang, 'Sign In')}\n \n {width < 769 && (\n
\n \n {translate(lang, \"Don't have an account?\")}\n \n \n \n {translate(lang, 'Sign Up')}\n \n \n
\n )}\n
\n \n
\n
\n \n {allFeedbacks &&\n allFeedbacks.map(item => (\n \n ))}\n {isChecked && (\n \n )}\n {isInviteAccept && (\n \n )}\n \n );\n};\n\nexport default SignIn;\n","import { FC, useState, FormEvent, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, useLocation } from 'react-router-dom';\nimport { Button, Input, Title, Paragrapgh, CheckboxButton } from '../shared';\nimport { logOut, signUp } from '../../store/auth/auth.actions';\nimport { RootState } from '../../store/rootReducer';\nimport { useWidth } from '../../util/useWidth';\nimport { IRegistration } from '../../entities/auth.entities';\n\nconst SignUpMain: FC = () => {\n const dispatch = useDispatch();\n const width = useWidth();\n const [disabled, setDisabled] = useState(false);\n const [hasCoupon, setHasCoupon] = useState(false);\n\n const nextViewStore = useSelector((state: RootState) => state.auth.nextView);\n const query = new URLSearchParams(useLocation().search);\n const [isValidFields, setIsValidFields] = useState();\n const [coupon, setCoupon] = useState('');\n const [fields, setFields] = useState([\n {\n name: 'fullName',\n value: '',\n },\n {\n name: 'password',\n value: '',\n },\n {\n name: 'email',\n value: '',\n },\n ]);\n const [fieldsValid, setFieldsValid] = useState([\n {\n name: 'fullName',\n isValidate: false,\n },\n {\n name: 'password',\n isValidate: false,\n },\n {\n name: 'email',\n isValidate: false,\n },\n ]);\n\n useEffect(() => {\n if (nextViewStore.message) {\n dispatch(logOut());\n }\n if (query.get('email')) {\n const email = query.get('email') as string;\n setFields(\n fields.map(field =>\n field.name === 'email'\n ? { ...field, value: email.replace(' ', '+') }\n : field,\n ),\n );\n setFieldsValid(\n fieldsValid.map(field =>\n field.name === 'email' ? { ...field, isValidate: true } : field,\n ),\n );\n }\n }, []);\n\n useEffect(() => {\n if (\n nextViewStore.message !== 'Success' &&\n query.get('email') &&\n query.get('token')\n ) {\n setDisabled(false);\n }\n }, [nextViewStore.message]);\n\n const handleOnValidFields = (value: boolean, data: string | undefined) => {\n let counter = 0;\n const newArr = fieldsValid.map(field => {\n /* eslint-disable*/\n if (field.name === data) {\n if (value) counter++;\n return { ...field, isValidate: value };\n }\n if (field.name !== data && field.isValidate) counter++;\n return field;\n });\n\n setFieldsValid(newArr);\n setIsValidFields(fields.length === counter || false);\n };\n\n const handleOnChangeFields = (value: string, data: string | undefined) => {\n setFields(\n fields.map(field => (field.name === data ? { ...field, value } : field)),\n );\n };\n\n const onRegistration = async (e: FormEvent) => {\n e.preventDefault();\n setDisabled(true);\n let data: IRegistration = {};\n if (query.get('email') && query.get('token')) {\n data = {\n email: fields[2].value,\n password: fields[1].value,\n name: fields[0].value,\n token: query.get('token') as string,\n };\n if (isValidFields) {\n await dispatch(signUp(data, 'invite'));\n }\n } else {\n data = {\n email: fields[2].value,\n password: fields[1].value,\n password_confirmation: fields[1].value,\n name: fields[0].value,\n remember: true,\n coupon: 'none',\n };\n\n if (hasCoupon) {\n data.coupon = coupon;\n }\n if (isValidFields) {\n await dispatch(signUp(data, 'signUp'));\n }\n setDisabled(false);\n }\n };\n\n return (\n 768\n ? 'd-flex justify-content-center align-items-center h-80-vh'\n : 'd-block'\n }\n >\n
\n
\n \n Sign Up\n \n {width > 768 &&\n (!query.get('email') || !query.get('token') ? (\n
\n \n Have an account?\n \n \n \n Sign In\n \n \n
\n ) : (\n \n Please fill out your full name and password to finalize\n registration\n \n ))}\n
\n handleOnChangeFields(e.target.value, data)}\n type='text'\n className='mb-16'\n value={fields[0].value}\n label='Full Name'\n dataType='fullName'\n placeholder='full name'\n onValidate={(e, data) => handleOnValidFields(e, data)}\n required\n />\n handleOnChangeFields(e.target.value, data)}\n type='email'\n value={fields[2].value}\n label='Email'\n className='mb-16'\n dataType='email'\n placeholder='email'\n onValidate={(e, data) => handleOnValidFields(e, data)}\n />\n handleOnChangeFields(e.target.value, data)}\n type='password'\n value={fields[1].value}\n label='Password'\n className='mb-24'\n dataType='password'\n onValidate={(e, data) => handleOnValidFields(e, data)}\n placeholder='password'\n />\n
\n setHasCoupon(e.target.checked)}\n />\n \n \n Forgot Password?\n \n \n
\n {hasCoupon && (\n setCoupon(e.target.value)}\n type='text'\n value={coupon}\n label='Coupon Code'\n className='mb-16'\n placeholder='coupon code'\n />\n )}\n
\n \n {query.get('email') && query.get('token')\n ? 'Sign up'\n : 'Start my free trial'}\n \n {width < 769 && (\n
\n \n Have an account?\n \n \n \n Sign In\n \n \n
\n )}\n
\n \n
\n
\n \n );\n};\n\nexport default SignUpMain;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { logOut, nextView } from '../../store/auth/auth.actions';\nimport { Button, Title, Paragrapgh, Feedback } from '../shared';\nimport { sendRequest } from '../../apis';\nimport { RootState } from '../../store/rootReducer';\nimport { useWidth } from '../../util/useWidth';\n\nconst RegistrationMessage = () => {\n const [message, setMessage] = useState();\n const [email, setEmail] = useState();\n const [disabled, setDisabled] = useState(false);\n const width = useWidth();\n const nextViewStore = useSelector((state: RootState) => state.auth.nextView);\n const dispatch = useDispatch();\n\n useEffect(() => {\n setEmail(nextViewStore.email);\n return () => {\n dispatch(\n nextView({\n isSuccess: false,\n email: '',\n }),\n );\n if (nextViewStore.message) {\n dispatch(logOut());\n }\n };\n }, []);\n\n const handlerOnReSend = async () => {\n setDisabled(true);\n const res = await sendRequest(\n { email },\n 'POST',\n 'api/auth/resend-activation-email',\n );\n if (res.status === 'Success') {\n setMessage('Success');\n } else {\n setMessage(res?.message);\n }\n setDisabled(false);\n };\n\n useEffect(() => {\n if (message) {\n setTimeout(() => {\n setMessage('');\n }, 3000);\n }\n }, [message]);\n\n return (\n <>\n 768\n ? 'd-flex justify-content-center align-items-center h-80-vh'\n : 'd-block'\n }\n >\n
\n
\n \n Thank you for registering\n \n \n We have sent a confirmation email to your mail. Confirm your mail\n to start using the resource. If you have not received your\n message, check your spam folder or request a new message\n \n
\n \n \n \n \n Resend message\n \n
\n
\n
\n \n {message && (\n \n )}\n \n );\n};\n\nexport default RegistrationMessage;\n","import { useEffect, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useLocation, useHistory } from 'react-router-dom';\nimport { SignUpMain, RegistrationMessage } from '../../components/sign-up';\nimport { RootState } from '../../store/rootReducer';\nimport { Feedback } from '../../components/shared';\nimport { nextView } from '../../store/auth/auth.actions';\n\nconst SignUp = () => {\n const nextViewStore = useSelector((state: RootState) => state.auth.nextView);\n const query = new URLSearchParams(useLocation().search);\n const dispatch = useDispatch();\n const history = useHistory();\n const [isNextVeiw, setIsNextVeiw] = useState(false);\n\n const handleOnClose = () => {\n dispatch(\n nextView({\n isSuccess: nextViewStore.isSuccess,\n email: nextViewStore?.email,\n message: '',\n }),\n );\n };\n\n useEffect(() => {\n if (nextViewStore.message) {\n setTimeout(() => {\n handleOnClose();\n }, 3000);\n }\n if (\n nextViewStore.message === 'Success' &&\n query.get('email') &&\n query.get('token')\n ) {\n setTimeout(() => {\n history.push('/sign-in');\n }, 2000);\n }\n }, [nextViewStore.message]);\n\n useEffect(() => {\n setIsNextVeiw(nextViewStore.isSuccess as boolean);\n }, [nextViewStore.isSuccess]);\n\n return (\n <>\n {!isNextVeiw && }\n {isNextVeiw && }\n {nextViewStore.message && (\n handleOnClose()}\n />\n )}\n \n );\n};\n\nexport default SignUp;\n","import { useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button, Title, Paragrapgh, Feedback } from '../shared';\nimport { logOut, nextView } from '../../store/auth/auth.actions';\nimport { RootState } from '../../store/rootReducer';\nimport { sendRequest } from '../../apis';\nimport { useWidth } from '../../util/useWidth';\n\nconst PasswordMessage = () => {\n const dispatch = useDispatch();\n const width = useWidth();\n const [message, setMessage] = useState();\n const [disabled, setDisabled] = useState(false);\n const [email, setEmail] = useState();\n const nextViewStore = useSelector((state: RootState) => state.auth.nextView);\n const authStore = useSelector((state: RootState) => state.auth);\n\n useEffect(() => {\n if (message) {\n setTimeout(() => {\n setMessage('');\n }, 3000);\n }\n }, [message]);\n\n useEffect(() => {\n setEmail(nextViewStore.email);\n return () => {\n dispatch(\n nextView({\n isSuccess: false,\n email: '',\n }),\n );\n if (authStore.nextView.message) {\n dispatch(logOut());\n }\n };\n }, []);\n\n const handlerOnReSend = async () => {\n setDisabled(true);\n const res = await sendRequest({ email }, 'POST', 'api/password/create');\n if (res.message) {\n setMessage('Success');\n } else {\n setMessage(res.message);\n }\n setDisabled(false);\n };\n\n return (\n <>\n 768\n ? 'd-flex justify-content-center align-items-center h-80-vh'\n : 'd-block'\n }\n >\n
\n
\n \n Recover password\n \n \n We have sent email to your mail. If you have not received your\n message, check your spam folder or request a new message\n \n
\n \n \n \n \n Resend message\n \n
\n
\n
\n \n {message && (\n \n )}\n \n );\n};\n\nexport default PasswordMessage;\n","import React, { FC, FormEvent, useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button, Input, Title } from '../shared';\nimport { logOut, signUp } from '../../store/auth/auth.actions';\nimport { RootState } from '../../store/rootReducer';\nimport { useWidth } from '../../util/useWidth';\n\nconst FirstRecoverPassword: FC = () => {\n const [email, setEmail] = useState('');\n const [isValid, setIsValid] = useState();\n const [disabled, setDisabled] = useState(false);\n const width = useWidth();\n const dispatch = useDispatch();\n const authStore = useSelector((state: RootState) => state.auth);\n\n useEffect(() => {\n if (authStore.nextView.message) {\n dispatch(logOut());\n }\n }, []);\n\n const handleOnChangeEmail = (value: string) => {\n setEmail(value);\n };\n\n const handleOnRecover = async (e: FormEvent) => {\n e.preventDefault();\n setDisabled(true);\n if (isValid) {\n await dispatch(signUp({ email }, 'forgotPassword'));\n setDisabled(false);\n }\n };\n\n return (\n 768\n ? 'd-flex justify-content-center align-items-center h-80-vh'\n : 'd-block'\n }\n >\n
\n
\n \n Recover Password\n \n
\n handleOnChangeEmail(e.target.value)}\n type='email'\n value={email}\n label='Email'\n className='mb-16'\n placeholder='email'\n onValidate={(e: boolean) => setIsValid(e)}\n />\n
\n \n Recover Password\n \n \n \n \n
\n \n
\n
\n \n );\n};\n\nexport default FirstRecoverPassword;\n","import React, { useEffect, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n FirstRecoverPassword,\n PasswordMessage,\n} from '../../components/recover-password';\nimport { RootState } from '../../store/rootReducer';\nimport { Feedback } from '../../components/shared';\nimport { nextView } from '../../store/auth/auth.actions';\n\nconst RecoverPassword = () => {\n const nextViewStore = useSelector((state: RootState) => state.auth.nextView);\n const [isNextVeiw, setIsNextVeiw] = useState(false);\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (nextViewStore.message) {\n setTimeout(() => {\n dispatch(\n nextView({\n isSuccess: nextViewStore.isSuccess,\n email: nextViewStore?.email,\n message: '',\n }),\n );\n }, 3000);\n }\n }, [nextViewStore.message]);\n\n useEffect(() => {\n setIsNextVeiw(nextViewStore.isSuccess as boolean);\n }, [nextViewStore.isSuccess]);\n\n return (\n <>\n {!isNextVeiw && }\n {isNextVeiw && }\n {!nextViewStore.isSuccess && nextViewStore.message && (\n \n )}\n \n );\n};\n\nexport default RecoverPassword;\n","import { FormEvent, useEffect, useState } from 'react';\nimport { Link, useHistory, useParams } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button, Feedback, Input, Title } from '../../components/shared';\nimport { sendRequest } from '../../apis';\nimport { nextView } from '../../store/auth/auth.actions';\nimport { useWidth } from '../../util/useWidth';\nimport { IChangePassword } from '../../entities/auth.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst SecondRecoverPassword = () => {\n const history = useHistory();\n const dispatch = useDispatch();\n const width = useWidth();\n const params = useParams<{ token: string; email: string }>();\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [message, setMessage] = useState();\n const [isValidFields, setIsValidFields] = useState();\n const [fieldsValid, setFieldsValid] = useState([\n {\n name: 'password',\n isValidate: false,\n },\n {\n name: 'passwordConfirm',\n isValidate: false,\n },\n ]);\n\n const handleOnChangePassword = (value: string) => {\n setPassword(value);\n };\n const handleOnChangeConfirm = (value: string) => {\n setConfirmPassword(value);\n };\n\n const handleOnRecover = async (e: FormEvent) => {\n e.preventDefault();\n setDisabled(true);\n const data: IChangePassword = {\n email: params.email,\n password,\n password_confirmation: confirmPassword,\n token: params.token,\n };\n const res = await sendRequest(data, 'POST', 'api/password/reset');\n if (res.email) {\n setMessage('Success');\n } else {\n setMessage(res.message);\n }\n setDisabled(false);\n };\n\n useEffect(() => {\n if (message) {\n setTimeout(() => {\n setMessage('');\n }, 3000);\n }\n }, [message]);\n\n useEffect(() => {\n if (message === 'Success') {\n setTimeout(() => {\n history.push(`/`);\n }, 3000);\n }\n dispatch(\n nextView({\n isSuccess: false,\n message: '',\n }),\n );\n }, [message]);\n\n const handleOnValidFields = (value: boolean, data: string | undefined) => {\n let counter = 0;\n const newArr = fieldsValid.map(field => {\n /* eslint-disable*/\n if (field.name === data) {\n if (value) counter++;\n return { ...field, isValidate: value };\n }\n if (field.name !== data && field.isValidate) counter++;\n return field;\n });\n\n setFieldsValid(newArr);\n setIsValidFields(2 === counter || false);\n };\n\n return (\n <>\n 768\n ? 'd-flex justify-content-center align-items-center h-80-vh'\n : 'd-block'\n }\n >\n
\n
\n \n {translate(lang, 'Recover Password')}\n \n
\n handleOnChangePassword(e.target.value)}\n type='password'\n value={password}\n className='mb-16'\n dataType='password'\n onValidate={(e, data) => handleOnValidFields(e, data)}\n />\n handleOnChangeConfirm(e.target.value)}\n type='password'\n value={confirmPassword}\n className='mb-24'\n dataType='passwordConfirm'\n onValidate={(e, data) => handleOnValidFields(e, data)}\n />\n
\n \n {translate(lang, 'Recover')}\n \n \n \n \n
\n \n
\n
\n \n {message && (\n \n )}\n \n );\n};\n\nexport default SecondRecoverPassword;\n","import { FormEvent, useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport ImgCrop from 'antd-img-crop';\nimport { Upload } from 'antd';\nimport {\n Input,\n Title,\n Button,\n AvatarComponent,\n CameraIcon,\n Spinner,\n} from '../../components/shared';\nimport { useWidth } from '../../util/useWidth';\nimport {\n demoAccountLogin,\n exitDemoAccount,\n updateAvatar,\n updateProfile,\n} from '../../store/auth/auth.actions';\nimport { selectIsDemo, selectProfile } from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst FieldValidators = [\n {\n name: 'fullName',\n isValidate: true,\n },\n {\n name: 'phone',\n isValidate: true,\n },\n {\n name: 'companyName',\n isValidate: true,\n },\n {\n name: 'companyAddress',\n isValidate: true,\n },\n];\n\ninterface IForm {\n name: string;\n phone_number: string;\n company_name: string;\n company_address: string;\n avatar: string;\n}\n\nconst ProfilePage = () => {\n const width = useWidth();\n const dispatch = useDispatch();\n const profile = useSelector(selectProfile);\n const isDemo = useSelector(selectIsDemo);\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [isSpinner, setIsSpinner] = useState(false);\n const [isValidFields, setIsValidFields] = useState();\n const [fieldsValid, setFieldsValid] = useState(FieldValidators);\n\n const handleOnValidFields = (value: boolean, data: string | undefined) => {\n let counter = 0;\n const newArr = fieldsValid.map(field => {\n /* eslint-disable*/\n if (field.name === data) {\n if (value) counter++;\n return { ...field, isValidate: value };\n }\n if (field.name !== data && field.isValidate) counter++;\n return field;\n });\n\n setFieldsValid(newArr);\n setIsValidFields(fieldsValid.length === counter || false);\n };\n\n const [user, setUser] = useState({\n name: profile?.name ?? '',\n phone_number: profile?.phone_number ?? '',\n company_name: profile?.company_name ?? '',\n company_address: profile?.company_address ?? '',\n avatar: profile?.avatar ?? '',\n });\n\n const handleOnAvatar = async (e: any) => {\n setIsSpinner(true);\n const data = new FormData();\n data.append('image', e.file);\n await dispatch(updateAvatar(data));\n setIsSpinner(false);\n };\n\n const handleOnSave = async (e: FormEvent) => {\n e.preventDefault();\n setDisabled(true);\n await dispatch(updateProfile(user));\n setDisabled(false);\n };\n\n const checkPhoneNumber = (e: any) => {\n let phoneNumber = e.target.value\n .replace(/\\D/g, '')\n .match(/(\\d{0,2})(\\d{0,3})(\\d{0,3})(\\d{0,4})/);\n if (e.target.value !== '') {\n phoneNumber = !phoneNumber[3]\n ? `+${phoneNumber[1]}${phoneNumber[2] ? ` ${phoneNumber[2]}` : ''}`\n : `+${phoneNumber[1]} (${phoneNumber[2]}) ${phoneNumber[3]}${\n phoneNumber[4] ? `-${phoneNumber[4]}` : ''\n }`;\n } else {\n phoneNumber = '';\n }\n\n setUser({ ...user, phone_number: phoneNumber } as any);\n };\n const viewDemoClick = async () => {\n setDisabled(true);\n if (isDemo) {\n await dispatch(exitDemoAccount());\n } else {\n await dispatch(demoAccountLogin());\n }\n setDisabled(false);\n };\n\n useEffect(() => {\n setUser({\n name: profile?.name ?? '',\n phone_number: profile?.phone_number ?? '',\n company_name: profile?.company_name ?? '',\n company_address: profile?.company_address ?? '',\n avatar: profile?.avatar ?? '',\n });\n }, [profile]);\n\n return (\n <>\n
\n
\n {width > 768 && (\n \n {translate(lang, 'Profile')}\n \n )}\n \n {translate(lang, isDemo ? 'Exit Demo' : 'View Demo')}\n \n
\n
\n {isSpinner ? (\n
\n \n
\n ) : (\n <>\n \n \n handleOnAvatar(e)}\n fileList={[]}\n listType='picture-card'\n accept='image/x-png,image/gif,image/jpeg'\n >\n \n \n \n \n )}\n
\n
\n \n {translate(lang, 'General info')}\n \n
\n
\n setUser({ ...user, name: e.target.value } as any)}\n value={user?.name ? user.name : ''}\n placeholder=''\n dataType='fullName'\n max={255}\n required\n onValidate={(e, data) => handleOnValidFields(e, data)}\n />\n checkPhoneNumber(e)}\n value={user?.phone_number ? user.phone_number : ''}\n dataType='phone'\n min={17}\n placeholder=''\n onValidate={(e, data) => handleOnValidFields(e, data)}\n />\n \n setUser({ ...user, company_name: e.target.value } as any)\n }\n value={user?.company_name ? user.company_name : ''}\n dataType='companyName'\n max={255}\n placeholder=''\n onValidate={(e, data) => handleOnValidFields(e, data)}\n />\n \n setUser({ ...user, company_address: e.target.value } as any)\n }\n value={user?.company_address ? user.company_address : ''}\n dataType='companyAddress'\n max={255}\n placeholder=''\n onValidate={(e, data) => handleOnValidFields(e, data)}\n />\n \n {translate(lang, 'Save')}\n \n \n
\n \n );\n};\n\nexport default ProfilePage;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { updateUserMeta } from '../../store/auth/auth.actions';\nimport { Button, Input, Title } from '../shared';\nimport { selectUserMeta } from '../../store/auth/auth.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\n\nconst LineAssessExpireDaysInput = () => {\n const dispatch = useDispatch();\n const userMeta = useSelector(selectUserMeta);\n const lang = useSelector(selectLang);\n\n const [val, setVal] = useState('');\n\n const handleInput = (\n event: React.ChangeEvent,\n ) => {\n setVal(event.target.value);\n };\n const submitVal = () => {\n let line_assess_expire_days = parseInt(val);\n if (isNaN(line_assess_expire_days) || line_assess_expire_days < 0) return;\n sendSingleRequest(\n { line_assess_expire_days },\n 'POST',\n `api/user-meta`,\n true,\n ).then(() => dispatch(updateUserMeta()));\n };\n\n useEffect(() => {\n setVal((userMeta?.line_assess_expire_days ?? 90).toString());\n }, [userMeta?.line_assess_expire_days]);\n\n return (\n
\n
\n \n {translate(lang, 'Line Assessment Expire Days')}\n \n
\n
\n \n \n {translate(lang, 'Update')}\n \n
\n
\n );\n};\n\nexport default LineAssessExpireDaysInput;\n","import { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { updateUserMeta } from '../../store/auth/auth.actions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { Button, Dropdown, Input, Title } from '../shared';\nimport { selectUserMeta } from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst SeedStagesSize = () => {\n const dispatch = useDispatch();\n const userMeta = useSelector(selectUserMeta);\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [stages, setStages] = useState<{ size: number; time: number }[]>([]);\n\n const handleSelectStagesCount = (val: string) => {\n let l = Number(val);\n let s = [...stages];\n\n while (s.length < l) s.push({ size: 0, time: 0 });\n s = s.splice(0, l);\n\n setStages(s);\n };\n\n const handleValueChange = (\n idx: number,\n key: 'size' | 'time',\n val: string,\n ) => {\n let s = [...stages];\n if (idx >= s.length) return;\n s[idx][key] = Number(val);\n setStages(s);\n };\n\n const handleSubmitClick = () => {\n setDisabled(true);\n sendSingleRequest(\n { seed_stages_size: stages },\n 'POST',\n 'api/user-meta',\n true,\n ).then(r => {\n setDisabled(false);\n if (r.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, 'Updated successfully'),\n type: 'success',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, r.data?.message ?? 'Unknown error'),\n type: 'error',\n }),\n );\n }\n dispatch(updateUserMeta());\n });\n };\n\n useEffect(() => {\n if (userMeta?.seed_stages_size && userMeta.seed_stages_size.length > 0) {\n setStages(userMeta.seed_stages_size);\n } else {\n setStages([{ size: 0, time: 0 }]);\n }\n }, [userMeta]);\n\n return (\n
\n
\n \n {translate(lang, 'How many stages of seeding you farm')}\n \n
\n
\n ({\n id: x,\n label: x,\n value: x,\n }))}\n onChange={handleSelectStagesCount.bind(this)}\n />\n
\n {stages.map((item, idx) => (\n
\n
\n handleValueChange(idx, 'size', e.target.value)}\n />\n
\n
\n handleValueChange(idx, 'time', e.target.value)}\n />\n
\n
\n ))}\n
\n \n {translate(lang, 'Update')}\n \n
\n
\n );\n};\n\nexport default SeedStagesSize;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { Button, Input, Subtitle, Title, TrashIcon } from '../shared';\nimport { translate } from '../../lib/lang.helper';\nimport { useMemo, useState } from 'react';\nimport { Modal, Table, Button as AntBtn } from 'antd';\nimport { selectSizedOysters } from '../../store/utils/utils.selector';\nimport { selectAccount } from '../../store/auth/auth.selector';\nimport { sendSingleRequest } from '../../apis';\nimport { updateAccountSetting } from '../../store/auth/auth.actions';\nimport { loadUtilsData } from '../../store/utils/utils.actions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\n\ninterface IRow {\n id?: string | number;\n name: string;\n num_val?: number | null;\n type: string;\n size_min?: number;\n size_max?: number;\n price?: number;\n}\n\ntype TUKey = 'name' | 'num_val' | 'size_min' | 'size_max' | 'price';\n\nconst columns = (lang: any): any => [\n {\n title: translate(lang, 'Name'),\n dataIndex: 'name',\n key: 'name',\n render: (name: string) =>
{name}
,\n },\n {\n title: translate(lang, 'Probability'),\n key: 'num_val',\n render: (x: IRow) => (\n
\n {x.num_val !== null && x.num_val !== undefined ? `${x.num_val} %` : '-'}\n
\n ),\n },\n {\n title: translate(lang, 'Min'),\n key: 'min',\n render: (x: IRow) => (\n
\n {x.size_min === undefined || x.size_min === null\n ? '-'\n : `${x.size_min} mm`}\n
\n ),\n },\n {\n title: translate(lang, 'Max'),\n key: 'max',\n render: (x: IRow) => (\n
\n {x.size_max === undefined || x.size_max === null\n ? '-'\n : `${x.size_max} mm`}\n
\n ),\n },\n {\n title: translate(lang, 'Price'),\n key: 'price',\n render: (x: IRow) => (\n
\n {x.price === undefined || x.price === null ? '-' : `$ ${x.price}`}\n
\n ),\n align: 'left',\n },\n];\n\nconst OysterHarvestTypes = () => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const oysterFields = useSelector(selectSizedOysters);\n const onGrowWaste = useSelector(selectAccount)?.oyster_crops;\n\n const tableData = useMemo(\n () => [\n {\n id: 'grown',\n name: translate(lang, 'Grown ons'),\n type: 'oyster_harvest',\n num_val: onGrowWaste?.grow_ons,\n size_min: onGrowWaste?.grow_ons_json?.size_min,\n size_max: onGrowWaste?.grow_ons_json?.size_max,\n price: onGrowWaste?.grow_ons_json?.price,\n },\n {\n id: 'waste',\n name: translate(lang, 'Waste'),\n type: 'oyster_harvest',\n num_val: onGrowWaste?.waste,\n size_min: onGrowWaste?.waste_json?.size_min,\n size_max: onGrowWaste?.waste_json?.size_max,\n price: onGrowWaste?.waste_json?.price,\n },\n ...oysterFields.map(x => ({\n id: x.id,\n name: x.name,\n num_val: x.num_val,\n type: x.type,\n size_min: x.json?.size_min,\n size_max: x.json?.size_max,\n price: x.json?.price,\n })),\n ],\n [onGrowWaste, oysterFields],\n );\n\n const [visible, setVisible] = useState(false);\n const [data, setData] = useState(tableData);\n const [disabled, setDisabled] = useState(false);\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n type: 'error',\n message,\n isMessageModal: true,\n }),\n );\n const updateField = (i: number, key: TUKey, value: string) => {\n const val =\n key === 'name' ? value : value.length <= 0 ? null : Number(value);\n const tmp = [...data];\n tmp[i] = { ...tmp[i], [key]: val };\n setData(tmp);\n };\n const addNewField = () => {\n setData([...data, { name: '', num_val: null, type: 'oyster_harvest' }]);\n };\n const removeField = (i: number) => {\n const tmp = [...data];\n tmp.splice(i, 1);\n setData(tmp);\n };\n const confirmClick = async () => {\n if (data.some(x => !x.name)) {\n showError(translate(lang, 'Please fill name'));\n return;\n }\n if (data.some(x => x.num_val !== undefined && x.num_val !== null)) {\n const sum = data.reduce((acc, x) => acc + (x.num_val || 0), 0);\n if (Math.abs(100 - sum) > 0.0001) {\n showError(\n translate(lang, 'All probability values should total to 100%'),\n );\n return;\n }\n }\n setDisabled(true);\n const deletedFields = oysterFields.filter(\n x => !data.some(y => y.id === x.id),\n );\n for (const d of deletedFields) {\n await sendSingleRequest({}, 'DELETE', `api/utils/${d.id}`, true);\n }\n const utils = data\n .filter(x => x.id !== 'grown' && x.id !== 'waste')\n .map(x => {\n const os = oysterFields.find(y => y.id === x.id);\n if (!os) {\n return {\n name: x.name,\n type: 'oyster_harvest',\n num_val: x.num_val,\n json: {\n size_min: x.size_min,\n size_max: x.size_max,\n price: x.price,\n },\n };\n } else {\n const tmp = {\n size_min: x.size_min,\n size_max: x.size_max,\n price: x.price,\n };\n return {\n ...os,\n name: x.name,\n num_val: x.num_val,\n json: os.json ? { ...os.json, ...tmp } : tmp,\n };\n }\n });\n const res = await sendSingleRequest(utils, 'POST', 'api/utils/bulk', true);\n if (!res.status) {\n showError(res.data?.message ?? 'Server error');\n }\n const oyster_crops = {\n ...onGrowWaste,\n grow_ons: data[0].num_val,\n waste: data[1].num_val,\n grow_ons_json: {\n size_min: data[0].size_min,\n size_max: data[0].size_max,\n price: data[0].price,\n },\n waste_json: {\n size_min: data[1].size_min,\n size_max: data[1].size_max,\n price: data[1].price,\n },\n };\n const r = await dispatch(updateAccountSetting({ oyster_crops }));\n if (r !== true) {\n showError(r ?? 'Server error');\n }\n await dispatch(loadUtilsData());\n setDisabled(false);\n setVisible(false);\n };\n const probSum =\n Math.round(data.reduce((acc, x) => acc + (x.num_val || 0), 0) * 100) / 100;\n\n const tableColumns = [\n {\n title: translate(lang, 'Name'),\n key: 'name',\n render: (pp: any, row: IRow, i: number) => (\n updateField(i, 'name', e.target.value)}\n disabled={row.id === 'grown' || row.id === 'waste'}\n />\n ),\n },\n {\n title:\n translate(lang, 'Probability') +\n (Math.abs(100 - probSum) > 0.0001 ? ` (${probSum}%)` : ''),\n key: 'probability',\n render: (pp: any, row: IRow, i: number) => (\n updateField(i, 'num_val', e.target.value)}\n unit='%'\n />\n ),\n },\n {\n title: translate(lang, 'Min'),\n key: 'min',\n render: (pp: any, row: IRow, i: number) => (\n updateField(i, 'size_min', e.target.value)}\n unit='mm'\n />\n ),\n },\n {\n title: translate(lang, 'Max'),\n key: 'max',\n render: (pp: any, row: IRow, i: number) => (\n updateField(i, 'size_max', e.target.value)}\n unit='mm'\n />\n ),\n },\n {\n title: translate(lang, 'Price'),\n key: 'price',\n render: (pp: any, row: IRow, i: number) => (\n updateField(i, 'price', e.target.value)}\n unit='$'\n />\n ),\n },\n {\n title: '',\n key: 'action',\n render: (pp: any, row: IRow, i: number) =>\n row.id !== 'grown' && row.id !== 'waste' ? (\n removeField(i)}\n >\n \n \n ) : (\n <>\n ),\n },\n ];\n\n return (\n
\n
\n \n {translate(lang, 'Oyster harvest type List')}\n \n
\n
\n
\n {\n setVisible(true);\n setData(tableData);\n }}\n >\n {translate(lang, 'Update data')}\n \n
\n
\n \n {visible && (\n setVisible(false)}\n footer={null}\n width={1200}\n >\n
\n
\n \n {translate(lang, 'Add new')}\n \n
\n
\n \n \n {translate(lang, 'Add new')}\n \n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n
\n \n \n )}\n
\n );\n};\n\nexport default OysterHarvestTypes;\n","import { useCallback, useState, useEffect } from 'react';\nimport {\n Button,\n CheckboxButton,\n Dropdown,\n Input,\n Title,\n TrashIcon,\n} from '../../components/shared';\nimport { useWidth } from '../../util/useWidth';\nimport LineAssessExpireDaysInput from '../../components/user-settings/LineAssessExpireDaysInput';\nimport { useDispatch, useSelector } from 'react-redux';\nimport SeedStagesSize from '../../components/user-settings/SeedStagesSize';\nimport {\n updateAccountSetting,\n updateShowGpsWarning,\n} from '../../store/auth/auth.actions';\nimport {\n addUtilData,\n deleteUtilData,\n loadUtilsData,\n} from '../../store/utils/utils.actions';\nimport { setLangUI, showFeedback } from '../../store/ui/ui.actions';\nimport { selectUtils } from '../../store/utils/utils.selector';\nimport { selectAccount, selectSettings } from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport OysterHarvestTypes from '../../components/farm-util/OysterHarvestTypes';\nimport './styles.scss';\n\nconst harvestTypes = [\n 'Whole Mussel',\n 'Half Shell',\n 'Meat',\n 'Oil Product',\n 'Powder Product',\n];\n\nconst MusselHarvestTypeList = () => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const checkedOptions = useSelector(selectUtils).filter(\n x => x.type === 'harvest_type',\n );\n const otherOptions = checkedOptions.filter(\n x => !harvestTypes.includes(x.name),\n );\n const [otherVal, setOtherVal] = useState('');\n\n const isChecked = useCallback(\n (v: string) => checkedOptions.some(x => x.name === v),\n [checkedOptions],\n );\n const toggleCheck = useCallback(\n (v: string) => {\n let item = checkedOptions.find(x => x.name === v);\n if (item) {\n dispatch(deleteUtilData(item.id));\n } else {\n dispatch(addUtilData('harvest_type', v));\n }\n },\n [checkedOptions, dispatch],\n );\n const onOtherAddClick = async () => {\n if (otherVal.length <= 0 || checkedOptions.some(x => x.name === otherVal))\n return;\n await dispatch(addUtilData('harvest_type', otherVal));\n setOtherVal('');\n };\n const onOtherDeleteClick = async (v: string) => {\n let item = checkedOptions.find(x => x.name === v);\n if (item) {\n await dispatch(deleteUtilData(item.id));\n }\n };\n\n return (\n
\n
\n \n {translate(lang, 'Mussel harvest type List')}\n \n
\n
\n {harvestTypes.map((s, i) => (\n toggleCheck(s)}\n />\n ))}\n {otherOptions.map(x => (\n
\n \n onOtherDeleteClick(x.name)}\n >\n \n \n
\n ))}\n
\n setOtherVal(e.target.value)}\n />\n \n {translate(lang, 'Add')}\n \n
\n
\n
\n );\n};\n\nconst GpsWarningSetting = () => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const checked = useSelector(selectSettings).showGpsWarning;\n const toggleCheck = (c: boolean) => dispatch(updateShowGpsWarning(c));\n\n return (\n
\n
\n \n {translate(lang, 'Show Gps Warning')}\n \n
\n
\n toggleCheck(e.target.checked)}\n />\n
\n
\n );\n};\n\nconst TrackSettings = () => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const track_spat = useSelector(selectAccount)?.track_original_spat;\n const track_mortality = useSelector(selectAccount)?.track_mortality;\n\n const [disabled, setDisabled] = useState({\n track_original_spat: false,\n track_mortality: false,\n });\n\n const toggleCheck = (\n key: 'track_original_spat' | 'track_mortality',\n c: boolean,\n ) => {\n setDisabled(prv => ({ ...prv, [key]: true }));\n dispatch(updateAccountSetting({ [key]: c })).then((res: any) => {\n setDisabled(prv => ({ ...prv, [key]: false }));\n if (res !== true) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, res?.data?.message ?? 'Server error'),\n }),\n );\n }\n });\n };\n\n return (\n <>\n
\n
\n \n {translate(lang, 'Track Original Spats')}\n \n
\n
\n toggleCheck('track_original_spat', e.target.checked)}\n />\n
\n
\n
\n
\n \n {translate(lang, 'Track Mortality')}\n \n
\n
\n toggleCheck('track_mortality', e.target.checked)}\n />\n
\n
\n \n );\n};\n\nconst HarvestSizeSetting = () => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const accSetting = useSelector(selectAccount);\n\n const [minSize, setMinSize] = useState(accSetting?.harvest_min_size);\n const [growSpeed, setGrowSpeed] = useState(accSetting?.grow_speed);\n const [disabled, setDisabled] = useState(false);\n\n const updateValue = (key: 'size' | 'speed', value: string) => {\n const val = value.length <= 0 ? undefined : Number(value);\n if (key === 'size') {\n setMinSize(val);\n } else {\n setGrowSpeed(val);\n }\n };\n const updateClick = async () => {\n setDisabled(true);\n await dispatch(\n updateAccountSetting({\n harvest_min_size: minSize,\n grow_speed: growSpeed,\n }),\n );\n setDisabled(false);\n };\n\n return (\n
\n
\n \n {`${translate(lang, 'Size')} & ${translate(lang, 'Speed')}`}\n \n
\n
\n
\n updateValue('size', e.target.value)}\n type='number'\n unit='mm'\n />\n
\n
\n updateValue('speed', e.target.value)}\n type='number'\n unit='mm per month'\n />\n
\n
\n \n {translate(lang, 'Update')}\n \n
\n );\n};\n\nconst SettingsPage = () => {\n const lang = useSelector(selectLang);\n const dispatch = useDispatch();\n const width = useWidth();\n\n const updateLanguage = (v: any) => dispatch(setLangUI(v));\n\n useEffect(() => {\n dispatch(loadUtilsData());\n }, [dispatch]);\n\n return (\n
\n {width > 768 && (\n \n {translate(lang, 'Setting')}\n \n )}\n
\n \n
\n \n \n \n \n \n \n \n
\n );\n};\n\nexport default SettingsPage;\n","import { sendSingleRequest } from '../../apis';\nimport { RootState, IThunkType } from '../rootReducer';\nimport { ISubscriptionAction, ISubscriptionState } from './subscription.type';\n\nconst setSubscription = (sub: ISubscriptionAction): ISubscriptionAction => sub;\n\nexport const setSubscriptionStatus = (payload: ISubscriptionState) => {\n return (dispatch: IThunkType, getState: () => RootState) => {\n dispatch(setSubscription({ type: 'SUBSCRIPT/SET_STATUS', payload }));\n };\n};\n\nlet loadingXeroContacts = false;\n\nexport const loadXeroContacts = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const profile = getState().auth.profile;\n if (!profile?.xero_connects || profile.xero_connects.length <= 0) {\n return 'Xero is not connected';\n }\n if (loadingXeroContacts) return true;\n loadingXeroContacts = true;\n\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/xero-data/contacts',\n true,\n );\n if (!response.status) {\n loadingXeroContacts = false;\n return response.data?.message;\n }\n dispatch(\n setSubscription({\n type: 'SUBSCRIPT/SET_XERO_CONTACTS',\n payload: response.data,\n }),\n );\n loadingXeroContacts = false;\n return true;\n };\n};\n\nlet loadingXeroAccounts = false;\n\nexport const loadXeroAccounts = () => {\n return async (dispatch: IThunkType, getState: () => RootState) => {\n const profile = getState().auth.profile;\n if (!profile?.xero_connects || profile.xero_connects.length <= 0) {\n return 'Xero is not connected';\n }\n if (loadingXeroAccounts) return true;\n loadingXeroAccounts = true;\n\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/xero-data/accounts',\n true,\n );\n if (!response.status) {\n loadingXeroAccounts = false;\n return response.data?.message;\n }\n dispatch(\n setSubscription({\n type: 'SUBSCRIPT/SET_XERO_ACCOUNTS',\n payload: response.data,\n }),\n );\n loadingXeroAccounts = false;\n return true;\n };\n};\n","import { createSelector } from 'reselect';\nimport { RootState } from '../rootReducer';\n\nexport const selectXeroContacts = createSelector(\n (state: RootState) => state.subscription.xero_contacts,\n contacts => contacts,\n);\n\nexport const selectXeroAccounts = createSelector(\n (state: RootState) => state.subscription.xero_accounts,\n accounts => accounts,\n);\n","import { createSelector } from 'reselect';\nimport { RootState } from '../rootReducer';\nimport { IMusselFarm, IOysterFarm } from '../../entities/farms.entities';\n\nexport const selectFarmsData = createSelector(\n (state: RootState) => state.farms.farmsData,\n farms => farms,\n);\n\nexport const selectSpatStorages = createSelector(\n (state: RootState) => state.farms.spatStorages,\n spats => spats,\n);\n\nexport const selectQueueData = createSelector(\n (state: RootState) => state.farms.queueData,\n queue => queue,\n);\n\nexport const selectMusselFarms = createSelector(\n (state: RootState) => state.farms.farmsData.filter(x => x.type === 'MUSSEL'),\n farms => farms as IMusselFarm[],\n);\n\nexport const selectOysterFarms = createSelector(\n (state: RootState) => state.farms.farmsData.filter(x => x.type === 'OYSTER'),\n farms => farms as IOysterFarm[],\n);\n\nexport const selectSeaweedFarms = createSelector(\n (state: RootState) => state.farms.farmsData.filter(x => x.type === 'SEAWEED'),\n farms => farms,\n);\n\nexport const selectMusselSpats = createSelector(\n (state: RootState) => state.farms.spatStorages,\n spats => spats.filter(x => x.type === 'MUSSEL'),\n);\n","import { createSelector } from 'reselect';\nimport { RootState } from '../rootReducer';\n\nexport const selectBoats = createSelector(\n (state: RootState) => state.users.boats,\n boats => boats,\n);\n\nexport const selectNewAccountMessage = createSelector(\n (state: RootState) => state.users.newAccountMessage,\n newAccountMessage => newAccountMessage,\n);\n\nexport const selectNewBoatMessage = createSelector(\n (state: RootState) => state.users.newBoatMessage,\n newBoatMessage => newBoatMessage,\n);\n\nexport const selectNewUserMessage = createSelector(\n (state: RootState) => state.users.newUserMessage,\n newUserMessage => newUserMessage,\n);\n\nexport const selectUsers = createSelector(\n (state: RootState) => state.users.users,\n users => users,\n);\n","import { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Button,\n CheckboxButton,\n Dropdown,\n Input,\n Title,\n} from '../../components/shared';\nimport {\n IBoatTime,\n IFactoryCost,\n ILevyFee,\n} from '../../entities/user.entities';\nimport { updateAccountSetting } from '../../store/auth/auth.actions';\nimport { loadXeroAccounts } from '../../store/subscription/subscription.actions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { useWidth } from '../../util/useWidth';\nimport { selectXeroAccounts } from '../../store/subscription/subscription.selector';\nimport {\n selectAccount,\n selectXeroIsConnected,\n} from '../../store/auth/auth.selector';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectBoats } from '../../store/users/users.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface TaxProps {\n tax: { type: string; label: string; value: number };\n setTax: (d: any) => void;\n taxCode: string;\n setTaxCode: (d: any) => void;\n}\n\nconst TaxView = ({ tax, setTax, taxCode, setTaxCode }: TaxProps) => {\n const lang = useSelector(selectLang);\n const xeroAccounts = useSelector(selectXeroAccounts);\n const accounts = xeroAccounts.length <= 0 ? null : xeroAccounts[0].accounts;\n const options = accounts?.map(x => ({\n id: x.Code,\n value: x.Code,\n label: `${x.Code} - ${x.Name} (${x.TaxRate}%)`,\n }));\n const xeroConnected = !!useSelector(selectXeroIsConnected);\n\n const updateTax = (key: 'label' | 'value', val: any) => {\n if (key === 'value') {\n val = Number(val);\n }\n setTax({ ...tax, [key]: val });\n };\n const updateTaxCode = (code: string) => {\n const acc = accounts?.find(x => x.Code === code);\n if (acc) {\n setTax({ ...tax, label: acc.Name, value: Number(acc.TaxRate) });\n }\n setTaxCode(code);\n };\n\n return xeroConnected ? (\n
\n updateTaxCode(v)}\n />\n
\n ) : (\n
\n updateTax('label', e.target.value)}\n />\n
\n updateTax('value', e.target.value)}\n unit={tax.type === 'PERCENT' ? '%' : '$'}\n />\n
\n
\n );\n};\n\nconst FreqOption = [\n { id: 'M', label: 'Monthly', value: 'M' },\n { id: 'Y', label: 'Annually', value: 'Y' },\n];\n\nconst RoundOption = [\n { id: '15', label: '15 mins', value: '15' },\n { id: '30', label: '30 mins', value: '30' },\n { id: '60', label: '1 h', value: '60' },\n];\n\nconst LevyTypeOption = [\n { id: '$', label: '$', value: '$' },\n { id: '%', label: '%', value: '%' },\n];\n\nconst FinanceSettings = () => {\n const width = useWidth();\n const dispatch = useDispatch();\n\n const settings = useSelector(selectAccount);\n const farmsData = useSelector(selectFarmsData);\n const boatsData = useSelector(selectBoats);\n const lang = useSelector(selectLang);\n\n const [levyFees, setLevyFees] = useState([]);\n const [boatTimes, setBoatTimes] = useState([]);\n const [factoryCosts, setFactoryCosts] = useState([]);\n const [includeTax, setIncludeTax] = useState(false);\n const [tax, setTax] = useState({\n type: 'PERCENT',\n label: '15% GST',\n value: 15,\n });\n const [taxCode, setTaxCode] = useState();\n const [disable, setDisable] = useState(false);\n const [harLevy, setHarLevy] = useState();\n\n const selectLevyFarm = (i: number, farm_id: string) => {\n let tmp = levyFees ? [...levyFees] : [];\n if (i >= tmp.length) return;\n tmp[i].farm_id = Number(farm_id);\n setLevyFees(tmp);\n };\n const changeCostValue = (type: 'L' | 'B' | 'F', i: number, v: string) => {\n if (type === 'L') {\n let tmp = levyFees ? [...levyFees] : [];\n if (i >= tmp.length) return;\n tmp[i].fee = Number(v);\n setLevyFees(tmp);\n } else if (type === 'B') {\n let tmp = boatTimes ? [...boatTimes] : [];\n if (i >= tmp.length) return;\n tmp[i].cost = Number(v);\n setBoatTimes(tmp);\n } else {\n let tmp = factoryCosts ? [...factoryCosts] : [];\n if (i >= tmp.length) return;\n tmp[i].unit_ton_price = Number(v);\n setFactoryCosts(tmp);\n }\n };\n const updateFrequency = (i: number, v: string) => {\n let tmp = levyFees ? [...levyFees] : [];\n tmp[i].frequency = v === 'M' ? 'M' : 'Y';\n setLevyFees(tmp);\n };\n const selectTimeBoat = (i: number, v: string) => {\n let tmp = boatTimes ? [...boatTimes] : [];\n tmp[i].boat_id = Number(v);\n setBoatTimes(tmp);\n };\n const updateRounding = (i: number, v: string) => {\n let tmp = boatTimes ? [...boatTimes] : [];\n tmp[i].rounding = Number(v) as any;\n setBoatTimes(tmp);\n };\n const addNewItem = (type: 'L' | 'B' | 'F') => {\n if (type === 'L') {\n let tmp = levyFees ? [...levyFees] : [];\n tmp.push({ farm_id: 0, fee: 0, frequency: 'M', type: '$' });\n setLevyFees(tmp);\n } else if (type === 'B') {\n let tmp = boatTimes ? [...boatTimes] : [];\n tmp.push({ boat_id: 0, cost: 0, rounding: 15 });\n setBoatTimes(tmp);\n } else {\n let tmp = factoryCosts ? [...factoryCosts] : [];\n tmp.push({ quality: '', unit_ton_price: 0 });\n setFactoryCosts(tmp);\n }\n };\n const deleteItem = (type: 'L' | 'B' | 'F', i: number) => {\n if (type === 'L') {\n let tmp = levyFees ? [...levyFees] : [];\n if (i >= tmp.length) return;\n tmp.splice(i, 1);\n setLevyFees(tmp);\n } else if (type === 'B') {\n let tmp = boatTimes ? [...boatTimes] : [];\n if (i >= tmp.length) return;\n tmp.splice(i, 1);\n setBoatTimes(tmp);\n } else {\n let tmp = factoryCosts ? [...factoryCosts] : [];\n if (i >= tmp.length) return;\n tmp.splice(i, 1);\n setFactoryCosts(tmp);\n }\n };\n const updateQuality = (i: number, v: string) => {\n let tmp = factoryCosts ? [...factoryCosts] : [];\n if (i >= tmp.length) return;\n tmp[i].quality = v;\n setFactoryCosts(tmp);\n };\n const updateLevyType = (i: number, v: string) => {\n let tmp = levyFees ? [...levyFees] : [];\n tmp[i].type = v as any;\n setLevyFees(tmp);\n };\n\n useEffect(() => dispatch(loadXeroAccounts()), [dispatch]);\n\n useEffect(() => {\n if (settings?.levy_fees && settings.levy_fees.length > 0) {\n setLevyFees(settings.levy_fees);\n } else {\n setLevyFees([{ farm_id: 0, fee: 0, frequency: 'M', type: '$' }]);\n }\n if (settings?.boat_times && settings.boat_times.length > 0) {\n setBoatTimes(settings.boat_times);\n } else {\n setBoatTimes([{ boat_id: 0, cost: 0, rounding: 15 }]);\n }\n if (settings?.factory_costs && settings.factory_costs.length > 0) {\n setFactoryCosts(settings.factory_costs);\n } else {\n setFactoryCosts([{ quality: '', unit_ton_price: 0 }]);\n }\n if (!!settings?.tax) {\n setTax(settings.tax);\n }\n if (settings?.xero_tax_code) {\n setTaxCode(settings.xero_tax_code);\n }\n if (settings?.harvest_levy) {\n setHarLevy(settings.harvest_levy);\n }\n setIncludeTax(settings?.include_tax ?? false);\n\n return () => {};\n }, [settings]);\n\n const farmsOption = [\n { id: '0', value: '0', label: translate(lang, 'Select farm') },\n ...farmsData.map(f => ({\n id: f.id.toString(),\n label: f.name,\n value: f.id.toString(),\n })),\n ];\n const boatsOption = [\n { id: '0', value: '0', label: translate(lang, 'Select boat') },\n ...boatsData\n .filter(x => (boatTimes?.findIndex(b => b.boat_id === x.id) ?? -1) < 0)\n .map(b => ({\n id: b.id.toString(),\n label: b.name,\n value: b.id.toString(),\n })),\n ];\n\n const saveSettings = () => {\n const levy_fees = levyFees?.filter(x => x.farm_id);\n const boat_times = boatTimes?.filter(x => x.boat_id);\n const factory_costs = factoryCosts?.filter(\n x => x.quality && x.quality.length > 0 && x.unit_ton_price > 0,\n );\n setDisable(true);\n let data: any = {\n levy_fees,\n boat_times,\n factory_costs,\n include_tax: includeTax,\n tax,\n };\n if (taxCode) {\n data.xero_tax_code = taxCode;\n }\n if (harLevy) {\n data.harvest_levy = harLevy;\n }\n dispatch(updateAccountSetting(data)).then((res: any) => {\n setDisable(false);\n dispatch(\n showFeedback({\n isMessage: true,\n type: res === true ? 'success' : 'error',\n message: translate(\n lang,\n res === true\n ? 'Saved successfully'\n : res?.message ?? 'Failed to update',\n ),\n }),\n );\n });\n };\n\n return (\n
\n
\n \n {translate(lang, 'Levy fees')}\n \n addNewItem('L')}\n >\n {translate(lang, 'Add new')}\n \n
\n
\n {levyFees?.map((levy, i) => (\n \n x.id === levy.farm_id)?.name\n : '0'\n }\n options={farmsOption}\n onChange={v => selectLevyFarm(i, v)}\n />\n
\n changeCostValue('L', i, e.target.value)}\n />\n
\n updateLevyType(i, v)}\n />\n updateFrequency(i, v)}\n />\n
\n deleteItem('L', i)}\n >\n {translate(lang, 'Delete')}\n \n
\n
\n ))}\n
\n \n setHarLevy(\n e.target.value.length <= 0 ? undefined : Number(e.target.value),\n )\n }\n unit='$'\n />\n
\n
\n
\n \n {translate(lang, 'Boat time')}\n \n addNewItem('B')}\n >\n {translate(lang, 'Add new')}\n \n
\n
\n {boatTimes?.map((bt, i) => (\n \n x.id === bt.boat_id)?.name\n : '0'\n }\n options={boatsOption}\n onChange={v => selectTimeBoat(i, v)}\n />\n
\n changeCostValue('B', i, e.target.value)}\n />\n
\n updateRounding(i, v)}\n />\n
\n deleteItem('B', i)}\n >\n {translate(lang, 'Delete')}\n \n
\n
\n ))}\n \n
\n \n {translate(lang, 'Factory cost per ton')}\n \n addNewItem('F')}\n >\n {translate(lang, 'Add new')}\n \n
\n
\n {factoryCosts?.map((fc, i) => (\n \n
\n updateQuality(i, e.target.value)}\n />\n
\n
\n changeCostValue('F', i, e.target.value)}\n />\n
\n
\n deleteItem('F', i)}\n >\n {translate(lang, 'Delete')}\n \n
\n
\n ))}\n \n
\n setIncludeTax(e.target.checked)}\n />\n {!!includeTax && (\n \n )}\n
\n
\n \n {translate(lang, 'Save')}\n \n
\n \n );\n};\n\nexport default FinanceSettings;\n","import { useState } from 'react';\nimport { Modal } from 'antd';\nimport { Button, CloseIcon, Input, Subtitle } from '../shared';\nimport { useSelector } from 'react-redux';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n visible: boolean;\n title?: string;\n onClose: () => void;\n}\n\nconst AccountXeroModal = ({ visible, title, onClose }: Props) => {\n const lang = useSelector(selectLang);\n const profile = useSelector(selectProfile);\n const callbackURL = `${process.env.REACT_APP_API_URL}xero/callback/${btoa(\n profile?.id.toString() ?? '',\n )}`;\n\n const [cid, setCID] = useState('');\n const [cSec, setCSec] = useState('');\n\n const confirmClick = () => {\n if (!cid || !cSec) {\n window.alert(translate(lang, 'Please enter Client ID and Client Secret'));\n return;\n }\n const params = {\n user_id: profile?.id.toString() ?? '',\n client_id: cid,\n client_secret: cSec,\n redirect_url: callbackURL,\n };\n const url = `${\n process.env.REACT_APP_API_URL\n }xero/connect?${new URLSearchParams(params).toString()}`;\n\n window.location.replace(url);\n };\n\n return (\n }\n width={650}\n >\n
\n
\n \n {translate(lang, title ?? 'Connect Xero Account')}\n \n
\n
\n setCID(e.target.value)}\n value={cid}\n required\n />\n setCSec(e.target.value)}\n value={cSec}\n required\n />\n
\n
\n
\n \n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default AccountXeroModal;\n","import { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Title,\n Feedback,\n Input,\n Button,\n CheckboxButton,\n Spinner,\n} from '../../components/shared';\nimport { useWidth } from '../../util/useWidth';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport {\n authLoadMe,\n updateAccountSetting,\n} from '../../store/auth/auth.actions';\nimport FinanceSettings from './FinanceSettings';\nimport AccountXeroModal from '../../components/users/AccountXeroModal';\nimport { sendSingleRequest } from '../../apis';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\nconst Xero = () => {\n const width = useWidth();\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const profile = useSelector(selectProfile);\n const callbackURL = `${process.env.REACT_APP_API_URL}xero/callback/${btoa(\n profile?.id.toString() ?? '',\n )}`;\n\n const [loading, setLoading] = useState(false);\n const [showXero, setShowXero] = useState(false);\n const [disabled, setDisabled] = useState(false);\n\n const updateSetting = (show_budget_menu: boolean) => {\n setLoading(true);\n dispatch(updateAccountSetting({ show_budget_menu })).then((res: any) => {\n setLoading(false);\n if (res !== true) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Failed'),\n }),\n );\n }\n });\n };\n const deleteXero = async (account_xero_id: number) => {\n if (!window.confirm(translate(lang, 'Are you sure to delete this data?')))\n return;\n setDisabled(true);\n await sendSingleRequest(\n { account_xero_id },\n 'DELETE',\n 'api/user/account-xero',\n true,\n );\n await dispatch(authLoadMe(true));\n setDisabled(false);\n };\n const refreshXero = async (account_xero_id: number) => {\n setDisabled(true);\n const response = await sendSingleRequest(\n { account_xero_id },\n 'POST',\n 'api/user/refresh-xero',\n true,\n );\n setDisabled(false);\n if (response.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Refreshed successfully'),\n }),\n );\n } else if (response.data.reload_token) {\n const url = `${process.env.REACT_APP_API_URL}xero/reconnect?reload_token=${response.data.reload_token}`;\n\n window.location.replace(url);\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, response.data?.message ?? 'Unknown error'),\n }),\n );\n }\n };\n\n return (\n <>\n
\n {width > 768 && (\n \n {translate(lang, 'Budget Setting')}\n \n )}\n
\n updateSetting(e.target.checked)}\n />\n {loading && }\n
\n {!profile?.xero_connects || profile.xero_connects.length <= 0 ? (\n \n ) : (\n \n )}\n
\n {profile?.xero_connects?.map(x => (\n
\n
\n
{translate(lang, 'Client ID')}
\n
{x.client_id}
\n
\n
\n
\n {translate(lang, 'Client Secret')}\n
\n
\n {`${'*'.repeat(44)}${x.client_secret}`}\n
\n
\n
\n
{translate(lang, 'Tenant ID')}
\n
\n {`${'*'.repeat(32)}${x.tenant_id}`}\n
\n
\n
\n refreshXero(x.id)}\n disabled={disabled}\n >\n {translate(lang, 'Refresh')}\n \n deleteXero(x.id)}\n disabled={disabled}\n >\n {translate(lang, 'Delete')}\n \n
\n
\n ))}\n
\n {showXero && (\n setShowXero(false)} />\n )}\n \n setShowXero(true)}\n type='fill'\n >\n {translate(lang, 'Add Xero Account')}\n \n \n
\n \n );\n};\n\nexport default Xero;\n","import React, { FC } from 'react';\n\nimport './styles.scss';\nimport { Button, Paragrapgh, Subtitle } from '../shared';\nimport { useWidth } from '../../util/useWidth';\n\ninterface IOwnProps {\n onSubscription: () => void;\n onCancelSubscription: () => void;\n onResumeSubscription: () => void;\n onSubscriptionUpdate: () => void;\n onTrialUpdate: () => void;\n info: any;\n status: string;\n farmsCount: number;\n}\n\nconst Plan: FC = ({\n onSubscription,\n onCancelSubscription,\n onResumeSubscription,\n onSubscriptionUpdate,\n onTrialUpdate,\n info,\n status,\n farmsCount,\n}) => {\n const width = useWidth();\n\n return (\n
\n 520\n ? 'd-flex pb-20 line-bottom align-items-center justify-content-between'\n : 'd-flex pb-24 align-items-center justify-content-between'\n }\n >\n
520 ? 'ml-24' : 'ml-12'}>\n 520 ? 2 : 3}\n color='black-2'\n align='default'\n fontWeight={500}\n >\n Your plan\n \n 520 ? 1 : 4}\n color='black-3'\n align='default'\n fontWeight={400}\n >\n {info ? info?.quantity : '--'} Farms\n \n
\n
\n 520 ? 2 : 3}\n color='black-2'\n align='default'\n fontWeight={500}\n >\n Active farms\n \n
\n 520 ? 1 : 4}\n color='black-3'\n align='default'\n fontWeight={400}\n >\n {farmsCount}\n \n 520 ? 2 : 3}\n color='black-3'\n align='default'\n fontWeight={400}\n >\n of {info ? info?.quantity : '--'}\n \n
\n
\n
520 ? 'mr-70' : 'mr-24'}>\n 520 ? 2 : 3}\n color='black-2'\n align='default'\n fontWeight={500}\n >\n Expires\n \n 520 ? 1 : 4}\n color='black-3'\n align='default'\n fontWeight={400}\n >\n {info?.expire_at ? info.expire_at : '-- / -- ----'}\n \n
\n
\n
520 ? 'mt-16 ml-24' : 'mb-8 pl-12 pr-12'}>\n {status === 'trial' && (\n 520 ? 'normal' : 'wide'}\n type='bordered'\n onClick={onTrialUpdate}\n >\n Update Plan\n \n )}\n {(status === 'not_subscribe' || status === 'cancelled') && (\n 520 ? 'normal' : 'wide'}\n type='bordered'\n onClick={onSubscription}\n >\n Start Subscription\n \n )}\n {status === 'active' && (\n <>\n 520 ? 'normal' : 'wide'}\n type='bordered'\n onClick={onSubscriptionUpdate}\n >\n Update Subscription\n \n 520 ? 'normal' : 'wide'}\n type='bordered'\n onClick={onCancelSubscription}\n >\n Cancel Subscription\n \n \n )}\n {status === 'grace' && (\n 520 ? 'normal' : 'wide'}\n type='bordered'\n onClick={onResumeSubscription}\n >\n Resume Subscription\n \n )}\n
\n \n );\n};\n\nexport default Plan;\n","import React, { FC, useState } from 'react';\n\nimport {\n Button,\n CardDots,\n MasterCardIcon,\n ModalComponent,\n Paragrapgh,\n VisaIcon,\n} from '../shared';\nimport { useWidth } from '../../util/useWidth';\nimport { ICardDetails, IPlan } from '../../entities/subscription.entities';\nimport './styles.scss';\n\ninterface IOwnProps {\n onChangeCard: () => void;\n onRemoveCard: () => void;\n card: ICardDetails;\n planData?: IPlan | null;\n status: string;\n}\n\nconst CreditCard: FC = ({\n onChangeCard,\n card,\n planData,\n status,\n onRemoveCard,\n}) => {\n const width = useWidth();\n const [isVisible, setIsVisible] = useState(false);\n return (\n
\n
520 ? 'pb-20 line-bottom' : 'pb-24'}>\n
520 ? 'ml-24 mr-24' : 'ml-12 mr-12'}>\n
\n {card.brand === 'visa' && }\n {card.brand !== 'visa' && }\n
\n
\n \n \n \n \n {card.number.slice(-4)}\n \n
\n \n {card.holder} - Expired {card.date}\n \n {planData?.expire_at && (\n \n Next billing:\n {` $${\n planData.quantity * 99\n } on ${planData.expire_at}`}\n \n )}\n
\n
\n
520 ? 'd-flex mt-16 ml-24' : 'pl-12 pr-12'}>\n 520 ? 'mr-16' : 'mb-8'}\n color='blue'\n size={1}\n width={width > 520 ? 'normal' : 'wide'}\n type='bordered'\n onClick={onChangeCard}\n >\n Change card\n \n {status !== 'active' && (\n 520 ? 'normal' : 'wide'}\n type='transparent'\n onClick={() => setIsVisible(true)}\n >\n Remove\n \n )}\n
\n setIsVisible(false)}\n buttonText='Remove card'\n type='warning'\n title='Are you sure?'\n text='If you delete the payment method, you will not be able to renew your subscription and you will lose access to your data. Are you sure you want to delete a payment method?'\n onConfirm={onRemoveCard}\n />\n
\n );\n};\n\nexport default CreditCard;\n","import React, { FC } from 'react';\nimport { DownloadIcon, Paragrapgh, TagComponent } from '../shared';\n\ninterface IOwnProps {\n date: string;\n price: string;\n status: string;\n className?: string;\n invoiceId: string;\n downloadInvoice: (id: string) => void;\n}\n\nconst Transaction: FC = ({\n date,\n price,\n status,\n className,\n invoiceId,\n downloadInvoice,\n}) => {\n return (\n
\n \n {date}\n \n \n {price}\n \n {status}\n downloadInvoice(invoiceId)}\n >\n \n \n
\n );\n};\n\nexport default Transaction;\n","import React, { ChangeEvent, FC, useState } from 'react';\n\nimport { InputModal, Input, Feedback } from '../shared';\n\nimport './styles.scss';\nimport { useWidth } from '../../util/useWidth';\n\ninterface IOwnProps {\n onCancel: () => void;\n onAdd: (data: any) => void;\n visible: boolean;\n title: string;\n textButton: string;\n}\nconst CreditCardModal: FC = ({\n textButton,\n title,\n onAdd,\n onCancel,\n visible,\n}) => {\n const width = useWidth();\n const [email, setEmail] = useState('');\n const [cardNumber, setCardNumber] = useState('');\n const [validInput, setValidInput] = useState(true);\n const [cvv, setCVV] = useState('');\n const [date, setDate] = useState('');\n const [cardHolder, setCardHolder] = useState('');\n\n const handleOnEmail = (\n e: ChangeEvent,\n ) => {\n setEmail(e.target.value);\n };\n\n const handleOnCardHolder = (e: string) => {\n setCardHolder(e);\n };\n\n const handleOnDate = (e: string) => {\n setDate(e);\n };\n\n const handleOnCardNumber = (e: string) => {\n setCardNumber(e);\n };\n\n const handleOnCVV = (e: string) => {\n setCVV(e);\n };\n\n const clearState = () => {\n setCVV('');\n setDate('');\n setCardNumber('');\n setCardHolder('');\n setEmail('');\n };\n\n const handleOnCancel = () => {\n clearState();\n onCancel();\n };\n\n const handleOnConfirm = () => {\n if (\n cvv.length === 3 &&\n date.length === 5 &&\n cardNumber.length === 16 &&\n email &&\n cardHolder\n ) {\n clearState();\n onAdd({\n number: cardNumber,\n holder: cardHolder,\n email,\n cvv,\n date,\n });\n } else {\n setValidInput(false);\n }\n };\n\n return (\n \n 595 ? 'pos-relative pt-8 w-100 pb-21 mb-24' : 'w-100 mb-16'\n }\n >\n
\n handleOnCardNumber(e)}\n type='cardnumber'\n className='mb-20 addCard__cardNumber'\n value={cardNumber}\n label='Card number'\n placeholder='Card number'\n required\n />\n
\n
\n handleOnCardHolder(e.target.value)}\n type='text'\n value={cardHolder}\n label='Name on card'\n placeholder='John Doe'\n required\n />\n
\n
\n handleOnDate(e)}\n type='expiration'\n value={date}\n label='Expiration'\n placeholder='MM / YY'\n required\n />\n {width < 596 && (\n handleOnCVV(e)}\n type='cvv'\n value={cvv}\n label='CVV'\n placeholder='***'\n required\n />\n )}\n
\n
\n
\n {width > 595 && (\n
\n
\n
\n handleOnCVV(e)}\n type='cvv'\n value={cvv}\n label='CVV'\n placeholder='***'\n required\n />\n
\n
\n )}\n
\n \n {!validInput && (\n \n )}\n \n );\n};\n\nexport default CreditCardModal;\n","import { FC, useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport {\n Button,\n PlusIcon,\n InputModal,\n Paragrapgh,\n Input,\n MinusIcon,\n Title,\n Feedback,\n Spinner,\n} from '../shared';\nimport { useWidth } from '../../util/useWidth';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport './styles.scss';\n\ninterface IOwnProps {\n onCancel: () => void;\n onSubscribe: (qty: number, coupon: string) => void;\n subscriptionStatus: any;\n visible: boolean;\n title: string;\n textButton: string;\n disabled?: boolean;\n}\n\nconst SubscriptionModal: FC = ({\n textButton,\n title,\n onCancel,\n onSubscribe,\n visible,\n disabled,\n subscriptionStatus,\n}) => {\n const farmsData = useSelector(selectFarmsData);\n const width = useWidth();\n\n const [value, setValue] = useState('0');\n const [isCoupon, setIsCoupon] = useState(false);\n const [couponValue, setCouponValue] = useState('');\n const [isSuccessApply, setIsSuccessApply] = useState(false);\n\n useEffect(() => {\n setValue(farmsData.length.toString());\n }, []);\n\n const handleOnApply = () => {\n setIsSuccessApply(true);\n };\n\n const clearState = () => {\n setIsCoupon(false);\n setIsSuccessApply(false);\n setValue(farmsData.length.toString());\n setCouponValue('');\n };\n\n const handleOnCancel = () => {\n clearState();\n onCancel();\n };\n\n const handleOnConfirm = async () => {\n await onSubscribe(Number(value), isSuccessApply ? couponValue : 'none');\n clearState();\n };\n\n return (\n \n \n The plan will switch immediately, but no fees will be required until\n \n {subscriptionStatus.plan_data?.expire_at}\n \n \n }\n type='info'\n />\n 520\n ? 'line-bottom mt-8 pb-20 d-flex align-items-center justify-content-between'\n : 'line-bottom mt-8 pb-20'\n }\n >\n 520 ? '' : 'pb-8'}\n size={1}\n color='black'\n align='default'\n fontWeight={400}\n >\n Number of farms\n \n
\n \n setValue(\n Number(value) - 1 < 0 ? '0' : (Number(value) - 1).toString(),\n )\n }\n >\n \n \n
\n \n setValue(Number(e.target.value) < 0 ? '0' : e.target.value)\n }\n type='text'\n readonly\n value={value}\n label=''\n placeholder='0'\n />\n
\n setValue((Number(value) + 1).toString())}\n >\n \n \n
\n \n {subscriptionStatus?.status === 'trial' &&\n !subscriptionStatus.plan_data?.coupon_used &&\n !isCoupon && (\n
\n \n Have a coupon?\n undefined}\n onClick={() => setIsCoupon(true)}\n role='button'\n tabIndex={0}\n >\n Enter\n \n \n
\n )}\n {subscriptionStatus?.status === 'trial' &&\n !subscriptionStatus.plan_data?.coupon_used &&\n isCoupon && (\n
\n 520\n ? 'd-flex align-items-center justify-content-between'\n : ''\n }\n >\n 520 ? '' : 'pb-4'}\n size={1}\n color='black'\n align='default'\n fontWeight={400}\n >\n Coupon\n \n
520 ? 'd-flex' : ''}>\n setCouponValue(e.target.value)}\n type='text'\n className='coupon-input'\n value={couponValue}\n label=''\n placeholder=''\n required\n readonly={isSuccessApply}\n />\n 520 ? 'ml-8' : 'mt-8'}\n color='blue'\n size={1}\n width={width > 520 ? 'small' : 'wide'}\n type='bordered'\n onClick={handleOnApply}\n disabled={isSuccessApply || couponValue === ''}\n >\n Apply\n \n
\n
\n {/* {isSuccessApply && (\n \n You have activated a coupon for 3 free months. The coupon is\n valid from the next month and will be valid until\n August 01, 2021\n \n }\n type='success'\n />\n )} */}\n \n )}\n
\n \n Total:\n \n
\n
\n \n ${Number(value) * 99}\n \n \n /month\n \n
\n \n $99 per farm x {Number(value)} farms\n \n
\n
\n {disabled && }\n \n );\n};\n\nexport default SubscriptionModal;\n","import { useState, useEffect, FC } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Button,\n Feedback,\n Subtitle,\n Title,\n ModalComponent,\n Spinner,\n} from '../../components/shared';\nimport Plan from '../../components/subscription/Plan';\nimport CreditCard from '../../components/subscription/CreditCard';\nimport Transaction from '../../components/subscription/Transaction';\nimport CreditCardModal from '../../components/subscription/CreditCardModal';\nimport SubscriptionModal from '../../components/subscription/SubscriptionModal';\nimport { downloadInvoice, sendSingleRequest } from '../../apis/index';\nimport { RootState } from '../../store/rootReducer';\nimport { ISubscriptionState } from '../../store/subscription/subscription.type';\nimport { setSubscriptionStatus } from '../../store/subscription/subscription.actions';\nimport { ICardDetails, IInvoice } from '../../entities/subscription.entities';\n\ninterface IAlertInfo {\n type: string;\n title: string;\n text: string;\n buttonText?: string;\n hideCancelBtn?: boolean;\n}\n\nconst APPLY_SUBSCRIBE = 'Please Add Payment Method';\nconst CANCEL_SUBSCRIBE = 'Are you really going to unsubscribe?';\nconst PAYMENT_INACTIVE =\n 'The payment attempt failed because additional action is required before it can be completed.';\n\nconst Subscription: FC = () => {\n const dispatch = useDispatch();\n\n const [isLoaded, setIsLoaded] = useState(false);\n const [isSubModal, setIsSubModal] = useState(false);\n const [isCardModal, setIsCardModal] = useState(false);\n const [isAlertModal, setIsAlertModal] = useState(false);\n const [isSubscribing, setIsSubscribing] = useState(false);\n const [paymentInActive, setPaymentInActive] = useState(false);\n const [alertInfo, setAlertInfo] = useState({\n type: '',\n title: '',\n text: '',\n buttonText: '',\n });\n const [cardDetails, setCardDetails] = useState(null);\n\n const auth = useSelector((state: RootState) => state.auth);\n const subscriptionStatus = useSelector(\n state => state.subscription,\n );\n const farmsCount = useSelector(\n state => state.farms.farmsData?.length,\n );\n\n const getSubscriptionStats = async () => {\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/subscription/get-subscription-status',\n true,\n );\n if (!response.status) {\n setCardDetails(null);\n setIsLoaded(true);\n return;\n }\n\n const pm = response.data?.payment_method;\n if (pm) {\n setCardDetails({\n cvv: '',\n number: pm.last4,\n brand: pm.brand,\n date:\n pm.month < 10\n ? `0${pm.month} / ${pm.year % 100}`\n : `${pm.month} / ${pm.year}`,\n });\n } else {\n setCardDetails(null);\n }\n if (response.data?.status === 'incomplete_payment') {\n setIsLoaded(false);\n setPaymentInActive(true);\n setTimeout(() => window.location.replace(response.data.url!), 3000);\n return;\n }\n dispatch(setSubscriptionStatus(response.data));\n setIsLoaded(true);\n };\n\n const showAlertModal = (type: string, msg?: string) => {\n if (type === 'input_card') {\n setAlertInfo({\n type: 'warning',\n title: 'Warning',\n buttonText: 'OK',\n text: APPLY_SUBSCRIBE,\n });\n setIsAlertModal(true);\n }\n if (type === 'cancel_subscribe') {\n setAlertInfo({\n type: 'warning',\n title: 'Warning',\n buttonText: 'Confirm',\n text: CANCEL_SUBSCRIBE,\n });\n setIsAlertModal(true);\n }\n if (type === 'show_msg') {\n setAlertInfo({\n type: 'info',\n title: 'Note',\n buttonText: 'OK',\n hideCancelBtn: true,\n text: msg!,\n });\n setIsAlertModal(true);\n }\n };\n\n const onSubscribe = async (qty: number) => {\n setIsSubscribing(true);\n const response = await sendSingleRequest(\n {\n card_number: cardDetails?.number,\n cvc: cardDetails?.cvv,\n plan_id: '1',\n expiration_month: cardDetails?.date.slice(0, 2),\n expiration_year: cardDetails?.date.slice(-2),\n quantity: qty,\n },\n 'POST',\n 'api/subscription/subscription',\n true,\n );\n if (!response.status) {\n window.alert(response.data?.message ?? 'Failed');\n return;\n }\n if (response.data?.message === 'Successfully subscribed') {\n await getSubscriptionStats();\n } else if (response.data?.message === PAYMENT_INACTIVE) {\n setIsLoaded(false);\n setPaymentInActive(true);\n setIsSubscribing(false);\n setIsSubModal(false);\n await getSubscriptionStats();\n } else if (response.data?.message) {\n setAlertInfo({\n type: 'info',\n title: 'Note',\n buttonText: 'OK',\n hideCancelBtn: true,\n text: response.data.message,\n });\n setIsAlertModal(true);\n }\n setIsSubscribing(false);\n setIsSubModal(false);\n };\n\n const onUpdateSubscription = async (qty: number) => {\n setIsSubscribing(true);\n const response = await sendSingleRequest(\n { plan_id: '1', quantity: qty },\n 'POST',\n 'api/subscription/update-subscription',\n true,\n );\n if (!response.status) {\n window.alert(response.data?.message ?? 'Failed');\n return;\n }\n if (response.data?.status === 1) {\n await getSubscriptionStats();\n } else if (response.data?.message) {\n setAlertInfo({\n type: 'info',\n title: 'Note',\n buttonText: 'OK',\n hideCancelBtn: true,\n text: response.data.message,\n });\n setIsAlertModal(true);\n }\n setIsSubscribing(false);\n setIsSubModal(false);\n };\n\n const onTrialSubscribe = async (qty: number, coupon: string) => {\n setIsSubscribing(true);\n const response = await sendSingleRequest(\n {\n quantity: qty,\n coupon,\n },\n 'POST',\n 'api/subscription/update-trial',\n true,\n );\n if (!response.status) {\n window.alert(response.data?.message ?? 'Failed');\n return;\n }\n if (response.data?.status === 1) {\n await getSubscriptionStats();\n } else if (response.data?.message) {\n setAlertInfo({\n type: 'warning',\n title: 'Note',\n buttonText: 'OK',\n hideCancelBtn: true,\n text: response.data.message,\n });\n setIsAlertModal(true);\n }\n setIsSubscribing(false);\n setIsSubModal(false);\n };\n\n const onCancelSubscribe = () => {\n showAlertModal('cancel_subscribe');\n };\n\n const onResumeSubscribe = async () => {\n setIsLoaded(false);\n const response = await sendSingleRequest(\n {},\n 'POST',\n 'api/subscription/resume',\n true,\n );\n if (!response.status) {\n window.alert(response.data?.message ?? 'Failed');\n return;\n }\n if (response.data?.status === '1') {\n await getSubscriptionStats();\n setIsLoaded(true);\n } else {\n setIsLoaded(true);\n showAlertModal('show_msg', response.data?.message);\n }\n };\n\n const doCancelSubscribe = async () => {\n setIsLoaded(false);\n const response = await sendSingleRequest(\n {},\n 'POST',\n 'api/subscription/cancel',\n true,\n );\n if (!response.status) {\n window.alert(response.data?.message ?? 'Failed');\n return;\n }\n if (response.data?.status === '1') {\n await getSubscriptionStats();\n } else {\n showAlertModal('show_msg', response.data?.message);\n }\n setIsLoaded(true);\n };\n\n const onUpdateCard = async (card: ICardDetails) => {\n setIsCardModal(false);\n setIsLoaded(false);\n const response = await sendSingleRequest(\n {\n card_number: card?.number,\n cvc: card?.cvv,\n expiration_month: card?.date.slice(0, 2),\n expiration_year: card?.date.slice(-2),\n },\n 'POST',\n 'api/subscription/update-card',\n true,\n );\n if (!response.status) {\n window.alert(response.data?.message ?? 'Failed');\n return;\n }\n if (response.data?.status === 1) {\n await getSubscriptionStats();\n } else if (response.data?.message) {\n setAlertInfo({\n type: 'info',\n title: 'Note',\n buttonText: 'OK',\n hideCancelBtn: true,\n text: response.data.message,\n });\n setIsAlertModal(true);\n setIsLoaded(true);\n }\n };\n\n const onRemoveCard = async () => {\n if (subscriptionStatus.status === 'not_subscribe') {\n setCardDetails(null);\n return;\n }\n setIsLoaded(false);\n const response = await sendSingleRequest(\n {},\n 'POST',\n 'api/subscription/delete-card',\n true,\n );\n if (!response.status) {\n window.alert(response.data?.message ?? 'Failed');\n return;\n }\n if (response.data?.status === 1) {\n await getSubscriptionStats();\n } else if (response.data?.message) {\n setAlertInfo({\n type: 'info',\n title: 'Note',\n buttonText: 'OK',\n hideCancelBtn: true,\n text: response.data.message,\n });\n setIsAlertModal(true);\n setIsLoaded(true);\n }\n };\n\n const getMessage = () => {\n switch (subscriptionStatus?.status) {\n case 'not_subscribe':\n return (\n <>\n Your trial has expired and you are not subcribed yet. You need to\n subscribe to continue using the platform.\n \n );\n case 'grace':\n return (\n <>\n You cancelled subscription and you are on grace period until\n \n {` ${subscriptionStatus?.plan_data?.expire_at}. `}\n \n Please resume subscription to continue using the platform.\n \n );\n case 'cancelled':\n return (\n <>\n Your subscription has expired. You need to re-subscribe to continue\n using the platform.\n \n );\n case 'active':\n return (\n <>\n You are subscribed until\n \n {` ${subscriptionStatus?.plan_data?.expire_at}.`}\n \n \n );\n case 'trial':\n return (\n <>\n You are on trial period until\n \n {` ${subscriptionStatus?.plan_data?.expire_at}.`}\n \n \n );\n default:\n return <>;\n }\n };\n\n const getMessageType = () => {\n switch (subscriptionStatus?.status) {\n case 'not_subscribe':\n return 'warning';\n case 'active':\n return 'info';\n default:\n return 'warning';\n }\n };\n\n const downloadInvoiceFromId = (id: string) => {\n downloadInvoice(id, auth.token ?? '');\n };\n\n useEffect(() => {\n getSubscriptionStats();\n }, []);\n\n return (\n
\n \n Plan & billing\n \n {isLoaded ? (\n <>\n \n
\n \n Active subscription\n \n {\n if (cardDetails) {\n setIsSubModal(true);\n } else showAlertModal('input_card');\n }}\n onCancelSubscription={onCancelSubscribe}\n onResumeSubscription={onResumeSubscribe}\n onSubscriptionUpdate={() => {\n setIsSubModal(true);\n }}\n onTrialUpdate={() => {\n setIsSubModal(true);\n }}\n />\n
\n {subscriptionStatus.status !== 'trial' && (\n <>\n
\n \n Payment method\n \n {!cardDetails && (\n setIsCardModal(true)}\n >\n Add Payment method\n \n )}\n {cardDetails && (\n setIsCardModal(true)}\n onRemoveCard={onRemoveCard}\n />\n )}\n
\n
\n \n Last tansactions\n \n {subscriptionStatus?.history?.length ? (\n subscriptionStatus.history.map((e: IInvoice) => (\n \n ))\n ) : (\n \n No Transactions yet\n \n )}\n
\n \n )}\n \n ) : (\n <>\n
\n \n
\n {paymentInActive && (\n \n )}\n \n )}\n {\n if (subscriptionStatus.status === 'trial')\n onTrialSubscribe(qty, coupon);\n if (subscriptionStatus.status === 'active') onUpdateSubscription(qty);\n else onSubscribe(qty);\n }}\n onCancel={() => setIsSubModal(false)}\n visible={isSubModal}\n disabled={isSubscribing}\n subscriptionStatus={subscriptionStatus}\n title='Subscription'\n />\n setIsCardModal(false)}\n onAdd={card => {\n if (subscriptionStatus.status !== 'not_subscribe') {\n onUpdateCard(card);\n } else {\n setCardDetails(card);\n setIsCardModal(false);\n }\n }}\n visible={isCardModal}\n title={cardDetails ? 'Update credit card' : 'Add credit card'}\n />\n {\n setIsAlertModal(false);\n if (alertInfo.text === CANCEL_SUBSCRIBE) doCancelSubscribe();\n }}\n onCancel={() => setIsAlertModal(false)}\n />\n
\n );\n};\n\nexport default Subscription;\n","export const validationForZeroMinus = (value: string | number): string => {\n const newValue = value.toString().split('');\n const validValue = newValue\n .filter((word, i) => {\n if (i === 0) {\n return Number(word) !== 0;\n }\n\n return word;\n })\n .filter(word => word !== '-')\n .join('');\n\n return validValue;\n};\n\nexport const isEmailFormat = (s: string) =>\n !!s.match(/^([\\w.%+-]+)@([\\w-]+\\.)+([\\w]{2,})$/i);\n\nexport const isColorFormat = (color: string) =>\n color && /^#([0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(color);\n","import { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport {\n Button,\n CheckboxButton,\n Input,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport {\n updateFriendEmailSetting,\n updateUserMeta,\n} from '../../store/auth/auth.actions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { useWidth } from '../../util/useWidth';\nimport { isEmailFormat } from '../../util/validation';\nimport {\n selectProfile,\n selectSettings,\n selectUserMeta,\n} from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst EmailPreference = () => {\n const width = useWidth();\n const dispatch = useDispatch();\n const userMeta = useSelector(selectUserMeta);\n const profile = useSelector(selectProfile);\n const settings = useSelector(selectSettings);\n const val = !!userMeta?.email_preference;\n const lang = useSelector(selectLang);\n\n const [emails, setEmails] = useState(settings.friendEmails?.join(',') ?? '');\n const [disabled, setDisabled] = useState(false);\n\n const updateValue = (val: boolean) => {\n sendSingleRequest(\n { email_preference: val ? 1 : 0 },\n 'POST',\n `api/user-meta`,\n true,\n ).then(() => dispatch(updateUserMeta()));\n };\n\n const saveEmailsList = async () => {\n if (emails && emails.split(',').some(x => !isEmailFormat(x))) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, '_invalid_emails'),\n }),\n );\n return;\n }\n setDisabled(true);\n const data = emails ? emails.split(',') : [];\n const res = await dispatch(updateFriendEmailSetting(data));\n setDisabled(false);\n if (res === true) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Email list is updated successfully'),\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, res),\n }),\n );\n }\n };\n\n return (\n
\n
\n {width > 768 && (\n \n {translate(lang, 'Email Preference')}\n \n )}\n
\n \n {profile?.email}\n \n
\n
\n updateValue(e.target.checked)}\n />\n
\n
\n
\n
\n setEmails(e.target.value)}\n value={emails}\n placeholder='Please enter emails separate by comma'\n />\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n
\n
\n );\n};\n\nexport default EmailPreference;\n","import { createSelector } from 'reselect';\nimport { RootState } from '../rootReducer';\n\nexport const selectTasks = createSelector(\n (state: RootState) => state.tasks.tasks,\n tasks => tasks,\n);\n\nexport const selectCustomTasks = createSelector(\n (state: RootState) => state.auth.settings.customTasks,\n customTasks => customTasks,\n);\n","import { Dropdown, Menu } from 'antd';\nimport DotsIcon from '../DotsIcon';\nimport './styles.scss';\n\ninterface IMenu {\n label: string;\n onClick?: (d: any) => void;\n}\n\ninterface Props {\n items: IMenu[];\n className?: string;\n}\n\nconst DotsMenu = ({ className, items }: Props) => (\n e.stopPropagation()}\n >\n \n {items.map((item, index) => (\n \n {item.label}\n \n ))}\n \n }\n placement='bottomRight'\n trigger={['click']}\n >\n
\n \n
\n \n \n);\n\nexport default DotsMenu;\n","import { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Button,\n CloseIcon,\n Input,\n Paragrapgh,\n Subtitle,\n Title,\n Dropdown as Select,\n} from '../../components/shared';\nimport { updateTaskSettings } from '../../store/auth/auth.actions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectCustomTasks } from '../../store/tasks/tasks.selector';\nimport { ITaskSetting } from '../../entities/user.entities';\nimport { Modal, Table } from 'antd';\nimport ModalFeedbackView from '../../components/shared/feedback/ModalFeedbackView';\nimport DotsMenu from '../../components/shared/dropdown-menu/DotsMenu';\nimport './styles.scss';\n\ninterface ModalProps {\n visible: boolean;\n onClose: () => void;\n data?: ITaskSetting;\n}\n\nconst TaskSettingModal = ({ visible, onClose, data }: ModalProps) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const customTasks = useSelector(selectCustomTasks);\n\n const [form, setForm] = useState(\n data ?? { name: '', action: null },\n );\n const [disabled, setDisabled] = useState(false);\n\n const actionOptions = [\n { id: 'NONE', value: '', label: translate(lang, 'None') },\n { id: 'SEEDING', value: 'SEEDING', label: translate(lang, 'Seeding') },\n { id: 'HARVEST', value: 'HARVEST', label: translate(lang, 'Harvest') },\n {\n id: 'ASSESSMENT',\n value: 'ASSESSMENT',\n label: translate(lang, 'Assessment'),\n },\n ];\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n message,\n type: 'error',\n }),\n );\n const confirmClick = async () => {\n if (!form.name) {\n showError(translate(lang, 'Task name is required'));\n return;\n }\n const tasks = data\n ? customTasks?.map(x => (x.name === data.name ? form : x)) ?? []\n : [...(customTasks ?? []), form];\n setDisabled(true);\n const r = await dispatch(updateTaskSettings(tasks));\n setDisabled(false);\n if (r === true) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Updated successfully'),\n }),\n );\n onClose();\n } else {\n showError(translate(lang, r));\n }\n };\n\n return (\n }\n footer={null}\n width={650}\n >\n
\n
\n \n {translate(lang, data ? 'Edit task setting' : 'Add task setting')}\n \n
\n
\n setForm({ ...form, name: e.target.value })}\n />\n
\n
\n \n setForm({ ...form, action: v === '' ? null : v })\n }\n />\n
\n
\n
\n \n {translate(lang, 'Close')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n \n \n );\n};\n\nconst TaskSettings = () => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const customTasks = useSelector(selectCustomTasks);\n\n const [disabled, setDisabled] = useState(false);\n const [editItem, setEditItem] = useState();\n const [visibleAdd, setVisibleAdd] = useState(false);\n\n const deleteItem = async (name: string) => {\n const tmp = customTasks?.filter(x => x.name !== name) ?? [];\n setDisabled(true);\n const r = await dispatch(updateTaskSettings(tmp));\n setDisabled(false);\n if (r === true) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Updated successfully'),\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, r),\n }),\n );\n }\n };\n\n const columns = [\n {\n title: translate(lang, 'Name'),\n key: 'name',\n render: (x: ITaskSetting) => {x.name},\n },\n {\n title: translate(lang, 'Action'),\n key: 'action',\n render: (x: ITaskSetting) => {x.action},\n },\n {\n title: '',\n key: 'edit-remove',\n render: (x: ITaskSetting) => (\n setEditItem(x),\n },\n {\n label: translate(lang, 'Delete'),\n onClick: () => deleteItem(x.name),\n },\n ]}\n />\n ),\n },\n ];\n\n return (\n
\n
\n \n {translate(lang, 'Custom Tasks')}\n \n
\n setVisibleAdd(true)}\n >\n {translate(lang, 'Add')}\n \n
\n
\n
\n {customTasks && customTasks.length > 0 ? (\n \n ) : (\n
\n \n {translate(lang, 'No data available')}\n \n
\n )}\n
\n {visibleAdd && (\n setVisibleAdd(false)} />\n )}\n {editItem && (\n setEditItem(undefined)}\n data={editItem}\n />\n )}\n
\n );\n};\n\nexport default TaskSettings;\n","import { useState } from 'react';\nimport { InputModal, Input, Paragrapgh, CheckboxButton } from '../shared';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\ninterface IForm {\n name: string;\n flag?: boolean;\n num_val?: number | null;\n}\n\ninterface Props {\n type: 'delete' | 'create' | 'update';\n data: IForm;\n onCancel: () => void;\n onConfirm: (d: IForm) => void;\n title: string;\n visible: boolean;\n disabled?: boolean;\n flagLabel?: string;\n flagPlaceholder?: string;\n numLabel?: string;\n numUnit?: string;\n}\n\nconst ModalUtil = ({\n type,\n data,\n onCancel,\n onConfirm,\n title,\n visible,\n disabled,\n flagLabel,\n flagPlaceholder,\n numLabel,\n numUnit,\n}: Props) => {\n const lang = useSelector(selectLang);\n\n const [form, setForm] = useState(data);\n\n return (\n {\n setForm({ name: '' });\n onCancel();\n }}\n title={title}\n type={type === 'create' ? 'create' : 'confirm'}\n onConfirm={() => onConfirm(form)}\n disabled={disabled}\n >\n {type !== 'delete' && (\n <>\n
\n setForm({ ...form, name: e.target.value })}\n placeholder={data.name}\n value={form.name}\n label={translate(lang, 'Name')}\n max={255}\n required\n />\n
\n {!!flagLabel && (\n
\n setForm({ ...form, flag: !form.flag })}\n />\n
\n )}\n {!!numLabel && (\n
\n \n setForm({\n ...form,\n num_val:\n e.target.value.length > 0 ? Number(e.target.value) : null,\n })\n }\n placeholder={data.num_val?.toString() ?? ''}\n value={form.num_val?.toString() ?? ''}\n unit={numUnit}\n required\n />\n
\n )}\n \n )}\n {type === 'delete' && (\n \n {translate(lang, 'Are you sure to delete the record?')}\n \n )}\n \n );\n};\n\nexport default ModalUtil;\n","import { useState } from 'react';\nimport { Table } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Title, Button, DropdownMenu } from '../shared';\nimport ModalUtil from './ModalUtil';\nimport { loadUtilsData } from '../../store/utils/utils.actions';\nimport { IUtilData } from '../../entities/utils.entities';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { sendSingleRequest } from '../../apis';\nimport './styles.scss';\n\ninterface IColumn {\n title: string;\n dataIndex?: string;\n key: string;\n align?: 'left' | 'right' | 'center' | undefined;\n render: any;\n}\n\nconst columns: Array = [\n {\n title: 'Name',\n dataIndex: 'name',\n key: 'name',\n render: (name: string) =>
{name}
,\n },\n];\n\ninterface Props {\n data: IUtilData[];\n type: IUtilData['type'];\n label: string;\n btnLabel?: string;\n flagLabel?: string;\n flagPlaceholder?: string;\n numLabel?: string;\n numUnit?: string;\n extraColumns?: IColumn[];\n onUpdate?: () => void;\n}\n\nconst UtilsTable = ({\n data,\n type,\n label,\n btnLabel,\n flagLabel,\n flagPlaceholder,\n numLabel,\n numUnit,\n extraColumns,\n onUpdate,\n}: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [delUtil, setDelUtil] = useState();\n const [editUtil, setEditUtil] = useState();\n const [addUtil, setAddUtil] = useState();\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n type: 'error',\n message: translate(lang, message),\n isMessage: true,\n }),\n );\n\n const onModalConfirm = async (newData: {\n name: string;\n flag?: boolean;\n num_val?: number | null;\n }) => {\n if (!delUtil && !editUtil && !addUtil) return;\n setDisabled(true);\n if (delUtil) {\n const res = await sendSingleRequest(\n {},\n 'DELETE',\n `api/utils/${delUtil.id}`,\n true,\n );\n if (res.status) {\n await dispatch(loadUtilsData());\n if (onUpdate) {\n onUpdate();\n }\n setDisabled(false);\n setDelUtil(undefined);\n } else {\n showError(res.data?.message ?? translate(lang, 'Server error'));\n }\n } else if (editUtil) {\n const res = await sendSingleRequest(\n { ...editUtil, ...newData },\n 'PUT',\n `api/utils/${editUtil.id}`,\n true,\n );\n if (res.status) {\n await dispatch(loadUtilsData());\n if (onUpdate) {\n onUpdate();\n }\n setDisabled(false);\n setEditUtil(undefined);\n } else {\n showError(res.data?.message ?? translate(lang, 'Server error'));\n }\n } else if (addUtil) {\n const res = await sendSingleRequest(\n { type: addUtil.type, ...newData },\n 'POST',\n 'api/utils',\n true,\n );\n if (res.status) {\n await dispatch(loadUtilsData());\n if (onUpdate) {\n onUpdate();\n }\n setDisabled(false);\n setAddUtil(undefined);\n } else {\n showError(res.data?.message ?? translate(lang, 'Server error'));\n }\n }\n };\n const onCancel = () => {\n setAddUtil(undefined);\n setEditUtil(undefined);\n setDelUtil(undefined);\n };\n\n const cols = () => {\n let result = [...columns];\n if (flagLabel) {\n result.push({\n title: flagLabel,\n dataIndex: 'flag',\n key: 'flag',\n align: 'center',\n render: (flag: boolean) => (\n
{flag ? 'Yes' : 'No'}
\n ),\n });\n }\n if (numLabel) {\n result.push({\n title: numLabel,\n dataIndex: 'num_val',\n key: 'num_val',\n render: (x: number | null) => (\n
\n {x !== null && x !== undefined ? `${x} ${numUnit}` : '-'}\n
\n ),\n });\n }\n if (extraColumns && extraColumns.length > 0) {\n result.push(...extraColumns);\n }\n result.push({\n title: '',\n key: 'more',\n align: 'right',\n render: (d: any, allData: any, element: any, isRedirect: any) => (\n
\n {!d?.disabled && (\n
\n setEditUtil(d)}\n onDeleteRow={d => setDelUtil(d)}\n type='utils'\n isRedirect={isRedirect}\n />\n
\n )}\n
\n ),\n });\n return result;\n };\n const curUtil = addUtil ?? editUtil ?? delUtil;\n const modalType = addUtil ? 'create' : editUtil ? 'update' : 'delete';\n\n return (\n <>\n
\n \n {translate(lang, label)}\n \n
\n
\n
\n setAddUtil({ id: 0, type, name: '' })}\n >\n {!btnLabel\n ? `${translate(lang, 'Add')} ${translate(lang, label)}`\n : translate(lang, btnLabel)}\n \n
\n
\n \n {!!curUtil && (\n \n )}\n \n );\n};\n\nexport default UtilsTable;\n","import {\n IName,\n ITimeTrack,\n IWeatherConditionResource,\n} from './general.entities';\n\nexport interface IBasicInventory {\n id: number;\n type: string;\n name: string;\n level: number;\n}\n\nexport interface IInventoryResource extends IBasicInventory {\n quantity: number;\n price: number;\n volume: number | null;\n available_quantity: number;\n pending_quantity: number;\n inventory_seeds: IFloatSeed[];\n\n account_id?: number;\n}\n\nexport interface IInventoryPosition {\n seeding_id: number;\n inventory_id: number;\n points: number[];\n}\n\ninterface IFloatSeed {\n id: number;\n line_id: number;\n quantity: number;\n status: 'IN' | 'OUT';\n manage_date: number;\n}\n\nexport interface IInventorySum {\n inventory_id: number;\n inventory_type: string;\n inventory_name: string;\n seeding_id: number;\n quantity: number;\n}\n\nexport interface IInventoryManage {\n id: number;\n manage_date: number;\n quantity: number;\n status: 'IN' | 'OUT';\n line_id: number;\n seeding_id: number;\n harvest_id: number | null;\n inventory: IBasicInventory;\n user: IName | null;\n verifier: IName | null;\n weather_condition: IWeatherConditionResource | null;\n time_tracks?: ITimeTrack[];\n}\n\nexport interface IPendingInventory {\n id: number;\n name: string;\n pending_quantity: number;\n}\n\nexport const defaultBagMusselTypes = [\n 'Harvested Mussels',\n 'Brokens',\n 'Smalls',\n 'Biofouling (Blue mussels/Oysters)',\n 'Green Waste',\n];\n","import { useEffect } from 'react';\nimport UtilsTable from '../../components/farm-util/UtilsTable';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { loadUtilsData } from '../../store/utils/utils.actions';\nimport { defaultBagMusselTypes } from '../../entities/inventory.entities';\nimport { selectUtils } from '../../store/utils/utils.selector';\nimport './styles.scss';\n\nconst ProcessBagSettings = () => {\n const dispatch = useDispatch();\n const process_bags = useSelector(selectUtils).filter(\n x => x.type === 'process_bag',\n );\n\n const items = [\n ...defaultBagMusselTypes.map((x, i) => ({\n id: -i - 1,\n name: x,\n type: 'process_bag' as any,\n disabled: true,\n })),\n ...process_bags,\n ];\n\n useEffect(() => {\n dispatch(loadUtilsData());\n }, [dispatch]);\n\n return (\n
\n \n
\n );\n};\n\nexport default ProcessBagSettings;\n","import { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport UtilsTable from '../../components/farm-util/UtilsTable';\nimport { loadUtilsData } from '../../store/utils/utils.actions';\nimport { selectUtils } from '../../store/utils/utils.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\nconst StaticFieldsSetting = () => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const farmUtils = useSelector(selectUtils);\n const ports = farmUtils.filter(x => x.type === 'port_of_unload'),\n delivers = farmUtils.filter(x => x.type === 'delivered_to'),\n packhouses = farmUtils.filter(x => x.type === 'packhouse'),\n seasons = farmUtils.filter(x => x.type === 'season'),\n bioTypes = farmUtils.filter(x => x.type === 'biosecurity_type'),\n farmingMethods = farmUtils.filter(x => x.type === 'farming_method'),\n expenseItems = farmUtils.filter(x => x.type === 'expense_item'),\n customers = farmUtils.filter(x => x.type === 'customer'),\n maintenances = farmUtils.filter(x => x.type === 'maintenance'),\n seed_types = farmUtils.filter(x => x.type === 'seedtype');\n\n useEffect(() => {\n dispatch(loadUtilsData());\n }, [dispatch]);\n\n return (\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n );\n};\n\nexport default StaticFieldsSetting;\n","import { useEffect, useState } from 'react';\nimport { Route, Switch, useHistory } from 'react-router-dom';\nimport {\n CreditCardIcon,\n Dropdown,\n KeyIcon,\n Navbar,\n UserIcon,\n SettingIcon,\n} from '../../components/shared';\nimport ProfilePage from './ProfilePage';\nimport Security from './Security';\nimport SettingsPage from './SettingsPage';\nimport Xero from './Xero';\nimport Subscription from './Subscription';\nimport { useWidth } from '../../util/useWidth';\nimport EmailPreference from './EmailPreference';\nimport TaskSettings from './TaskSettings';\nimport ProcessBagSettings from './ProcessBagSettings';\nimport StaticFieldsSetting from './StaticFieldsSetting';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { IMainList, INavbar } from '../../entities/general.entities';\n\nconst ProfileRouter = () => {\n const history = useHistory();\n const width = useWidth();\n const lang = useSelector(selectLang);\n\n const [current, setCurrent] = useState(history.location.pathname);\n\n useEffect(() => {\n return history.listen(location => {\n setCurrent(location.pathname);\n });\n }, [history]);\n\n const items: IMainList[] = [\n {\n value: '/profile',\n label: (\n

\n \n {translate(lang, 'Profile')}\n

\n ),\n id: '/profile',\n },\n {\n value: '/profile/security',\n label: (\n

\n \n {translate(lang, 'Security')}\n

\n ),\n id: '/profile/security',\n },\n {\n value: '/profile/subscription',\n label: (\n

\n \n {translate(lang, 'Plan & billing')}\n

\n ),\n id: '/profile/subscription',\n },\n {\n value: '/profile/setting',\n label: (\n

\n \n {translate(lang, 'User Setting')}\n

\n ),\n id: '/profile/subscription',\n },\n {\n id: '/profile/email-preference',\n value: '/profile/email-preference',\n label: (\n

\n \n {translate(lang, 'Email Preference')}\n

\n ),\n },\n {\n value: '/profile/xero',\n label: (\n

\n \n {translate(lang, 'Xero Integration')} \n

\n ),\n id: '/profile/xero',\n },\n {\n value: '/profile/processing',\n label: (\n

\n \n {translate(lang, 'Manage Processing')}\n

\n ),\n id: '/profile/processing',\n },\n {\n value: '/profile/static-fields',\n label: (\n

\n \n {translate(lang, 'Static Fields')}\n

\n ),\n id: '/profile/static-fields',\n },\n ];\n\n const navbarItems: INavbar[] = [\n {\n title: translate(lang, 'Profile'),\n icon: ,\n link: '/profile',\n id: '/profile',\n },\n {\n title: translate(lang, 'Security'),\n icon: ,\n link: '/profile/security',\n id: '/profile/security',\n },\n {\n title: translate(lang, 'Plan & billing'),\n icon: ,\n link: '/profile/subscription',\n id: '/profile/subscription',\n },\n {\n title: translate(lang, 'Setting'),\n icon: ,\n link: '/profile/setting',\n id: '/profile/setting',\n },\n {\n title: translate(lang, 'Email Preference'),\n id: '/profile/email-preference',\n icon: ,\n link: '/profile/email-preference',\n },\n {\n title: translate(lang, 'Budget Setting'),\n icon: ,\n link: '/profile/xero',\n id: '/profile/xero',\n },\n {\n title: translate(lang, 'Task Setting'),\n icon: ,\n link: '/profile/task-setting',\n id: '/profile/task-setting',\n },\n {\n title: translate(lang, 'Manage Processing'),\n icon: ,\n link: '/profile/processing',\n id: '/profile/processing',\n },\n {\n title: translate(lang, 'Static Fields'),\n icon: ,\n link: '/profile/static-fields',\n id: '/profile/static-fields',\n },\n ];\n\n const handleOnSelectPage = (value: string) => {\n history.push(value);\n };\n\n return (\n
\n {width < 769 && (\n handleOnSelectPage(value)}\n options={items}\n />\n )}\n
\n
\n {width > 768 && (\n \n )}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default ProfileRouter;\n","import { ChangeEvent, useEffect, useMemo, useState } from 'react';\nimport { Link, useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Radio, Collapse } from 'antd';\nimport { RadioChangeEvent } from 'antd/lib/radio';\nimport classnames from 'classnames';\nimport { useWidth } from '../../util/useWidth';\nimport { createUser } from '../../store/users/users.actions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { checkRolePermission } from '../../entities/util-functions';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n Button,\n CaretDownIcon,\n CheckboxButton,\n Input,\n Paragrapgh,\n RadioButton,\n Spinner,\n Title,\n ToggleButton,\n} from '../../components/shared';\n\ninterface ILinesUser {\n name?: string;\n id?: string;\n value?: boolean;\n}\n\ninterface IFarmsUser {\n title: string;\n id: string;\n typeChecked: string;\n lines: ILinesUser[];\n}\n\nconst list = [\n { label: 'View', value: false, key: '1' },\n { label: 'Edit', value: false, key: '2' },\n { label: 'Show financials', value: false, key: '3' },\n { label: 'Manage farm and lists', value: false, key: 'manage' },\n];\n\nconst AddUsers = () => {\n const width = useWidth();\n const dispatch = useDispatch();\n const history = useHistory();\n\n const profile = useSelector(selectProfile);\n const farmsData = useSelector(selectFarmsData);\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [isValidateEmail, setIsValidateEmail] = useState(false);\n const { Panel } = useMemo(() => Collapse, []);\n const [email, setEmail] = useState('');\n const [userType, setUserType] = useState<\n 'admin' | 'user' | 'processing_plant'\n >('admin');\n const [isSpinner, setIsSpinner] = useState(true);\n const [switchList, setSwitchList] = useState([]);\n const [farms, setFarms] = useState([]);\n\n useEffect(() => {\n const defaultFarm: IFarmsUser[] = farmsData.map(farm => {\n const newLine = farm.lines.map(line => {\n return {\n name: line?.line_name as string,\n id: line?.id.toString(),\n value: false,\n };\n });\n return {\n title: farm.name as string,\n id: farm?.id?.toString() as string,\n typeChecked: 'empty',\n lines: newLine,\n };\n });\n\n setUserType('admin');\n setSwitchList(list);\n setFarms(defaultFarm);\n setIsSpinner(false);\n }, []);\n\n const handleOnEmail = (\n e: ChangeEvent,\n ) => {\n setEmail(e.target.value);\n };\n\n const onChangeUserType = (e: RadioChangeEvent) => {\n setUserType(e.target.value);\n };\n\n const handleOnPermissions = (e: boolean, key: string) => {\n setSwitchList(\n switchList.map((item: any) => {\n if (item.key === key) return { ...item, value: e };\n if (key === '2' && e && item.key === '1') return { ...item, value: e };\n return item;\n }),\n );\n };\n\n const handleOnFarmCheck = (checked: boolean, farmId: string) => {\n const newArr = farms.map(farm => {\n if (farm.id === farmId) {\n const newLine = farm.lines.map(line => {\n return { ...line, value: checked };\n });\n if (checked) {\n return { ...farm, typeChecked: 'full', lines: newLine };\n }\n return { ...farm, typeChecked: 'empty', lines: newLine };\n }\n return farm;\n });\n\n setFarms(newArr);\n };\n\n const genExtra = (type: string, farmId: string) => (\n handleOnFarmCheck(e.target.checked, farmId)}\n />\n );\n\n const CaretLeftOutlined = ({ rotate }: any) => (\n \n \n \n );\n\n const handleOnSelectFarm = (\n checked: boolean,\n farmId: string,\n lineId: string,\n ) => {\n let counter = 0;\n const newArr = farms.map(farm => {\n if (farm.id === farmId) {\n const newLine = farm.lines.map(line => {\n if (line.id === lineId) {\n /* eslint-disable*/\n if (checked) counter++;\n return { ...line, value: checked };\n }\n if (line.value) counter++;\n return line;\n });\n if (farm.lines.length === counter) {\n return { ...farm, typeChecked: 'full', lines: newLine };\n }\n if (counter) {\n return { ...farm, typeChecked: 'part', lines: newLine };\n }\n return { ...farm, typeChecked: 'empty', lines: newLine };\n }\n return farm;\n });\n\n setFarms(newArr);\n };\n\n const handleOnConfirm = async () => {\n setDisabled(true);\n const permissions = getPermissions();\n const farmsAndLines = getFarms();\n let data: any = {\n email,\n inviting_user_id: Number(profile?.id),\n account_id: Number(profile?.account_id),\n role: userType,\n ...permissions,\n farms_id: farmsAndLines.farm_id,\n lines_id: farmsAndLines.line_id,\n };\n let res = await dispatch(createUser(data, history));\n setDisabled(false);\n if (res === true) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Invitation has been sent'),\n }),\n );\n history.replace('/users');\n } else {\n dispatch(showFeedback({ isMessage: true, type: 'error', message: res }));\n }\n };\n\n const getPermissions = () => {\n if (userType === 'admin') {\n return {\n view_permission: true,\n edit_permission: true,\n finance_permission: true,\n };\n } else if (userType === 'processing_plant') {\n return {\n view_permission: true,\n edit_permission: false,\n finance_permission: false,\n };\n }\n let permissions = {\n view_permission: false,\n edit_permission: false,\n finance_permission: false,\n };\n switchList.map((item: any, index: number) => {\n if (item.value && switchList.length - 1 !== index) {\n if (item.key === '1') {\n permissions.view_permission = true;\n } else if (item.key === '2') {\n permissions.edit_permission = true;\n } else if (item.key === '3') {\n permissions.finance_permission = true;\n }\n }\n });\n return permissions;\n };\n\n const getFarms = () => {\n let counterFarm = 0;\n let counterLine = 0;\n let farm_id: any = null;\n let line_id: any = null;\n if (\n checkRolePermission(\n { deniedRoles: ['admin', 'processing_plant'] },\n userType,\n )\n ) {\n farm_id = line_id = {};\n farms.map((farm, index) => {\n farm.lines?.map(line => {\n if (line.value) {\n line_id = {\n ...line_id,\n [counterLine]: Number(line.id),\n };\n counterLine++;\n }\n });\n if (farm.typeChecked !== 'empty') {\n farm_id = {\n ...farm_id,\n [counterFarm]: Number(farm.id),\n };\n counterFarm++;\n }\n });\n }\n return { farm_id, line_id };\n };\n\n return (\n <>\n
\n
\n
\n \n {translate(lang, 'Add new user')}\n \n {isSpinner ? (\n
\n \n
\n ) : (\n <>\n setIsValidateEmail(!e)}\n />\n \n {translate(lang, 'User type')}\n \n \n \n \n \n \n {checkRolePermission(\n { deniedRoles: ['admin', 'owner', 'processing_plant'] },\n userType,\n ) && (\n <>\n \n {translate(lang, 'Permissions')}\n \n
\n {switchList &&\n switchList.map((item: any) => (\n handleOnPermissions(e, item.key)}\n />\n ))}\n
\n \n {translate(lang, 'Select farm and lines')}\n \n
\n (\n \n )}\n >\n {farms.map(farm => (\n \n {farm.lines.map(line => (\n \n handleOnSelectFarm(\n e.target.checked,\n farm.id,\n line?.id as string,\n )\n }\n />\n ))}\n \n ))}\n \n
\n \n )}\n
\n \n \n {translate(lang, 'Cancel')}\n \n \n \n {translate(lang, 'Confirm')}\n \n
\n \n )}\n
\n
\n
\n \n );\n};\n\nexport default AddUsers;\n","import { useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { IXeroInvoice } from '../../entities/subscription.entities';\nimport { formatNumber, numberToMoneyStr } from '../../entities/util-functions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { Button, Dropdown, Subtitle } from '../shared';\nimport { Link } from 'react-router-dom';\nimport { loadXeroContacts } from '../../store/subscription/subscription.actions';\nimport { updateUserMeta } from '../../store/auth/auth.actions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n SelectProfileByFarmID,\n SelectUserMeta,\n SelectXeroContactsByFarmID,\n} from '../../store/extra/extra.selector';\n\ninterface Props {\n farmID?: number;\n invoice: IXeroInvoice;\n onClose?: (d: any) => void;\n showButton: boolean;\n}\n\nconst GrowerInvoiceCreateView = ({\n farmID,\n invoice,\n onClose,\n showButton,\n}: Props) => {\n const dispatch = useDispatch();\n\n const profile = SelectProfileByFarmID(farmID);\n const contacts = SelectXeroContactsByFarmID(farmID);\n const ContactID = SelectUserMeta(farmID)?.xero_contact_id;\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [invoiceLink, setInvoiceLink] = useState();\n const [connID, setConnID] = useState(\n !profile || !profile.xero_connects || profile.xero_connects.length <= 0\n ? null\n : profile.xero_connects[0].id,\n );\n const [contID, setContID] = useState(ContactID);\n\n const contOptions = useMemo(\n () =>\n !connID || !contacts || contacts.length <= 0\n ? null\n : contacts\n .find(x => x.connect.id === connID)\n ?.contacts.map(x => ({\n id: x.ContactID,\n value: x.ContactID,\n label: x.Name,\n })),\n [connID, contacts],\n );\n const connections =\n profile?.xero_connects?.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.client_id,\n })) ?? [];\n const subTotal = invoice.line_items.reduce(\n (p, c) => p + c.unit_price * c.quantity,\n 0,\n );\n const taxFee =\n !profile?.account?.include_tax || !profile.account.tax\n ? 0\n : profile.account.tax.type === 'FIXED'\n ? profile.account.tax.value\n : (subTotal * profile.account.tax.value) / 100;\n const total = subTotal + taxFee;\n\n const updateContactID = (v: string) => {\n setContID(v);\n sendSingleRequest(\n { xero_contact_id: v },\n 'POST',\n `api/user-meta`,\n true,\n ).then(() => dispatch(updateUserMeta()));\n };\n\n const createInvoice = () => {\n if (!contID) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, 'Please select a contact'),\n }),\n );\n return;\n }\n let data = { ...invoice, contact_id: contID };\n if (connID && connections.length > 1) {\n (data as any).account_xero_id = connID;\n }\n if (profile?.account?.include_tax) {\n data.account_code = profile.account.xero_tax_code;\n }\n setDisabled(true);\n sendSingleRequest(data, 'POST', 'api/xero-data/invoice', true).then(res => {\n setDisabled(false);\n if (res.status) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'success',\n message: translate(lang, 'Invoice created successfully'),\n }),\n );\n setInvoiceLink(\n `https://go.xero.com/Accounts${\n invoice.type === 'ACCREC' ? 'Receivable' : 'Payable'\n }/Edit.aspx?InvoiceID=${res.data.InvoiceID}`,\n );\n } else {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(\n lang,\n res.data?.message ?? 'Failed to create invoice',\n ),\n }),\n );\n }\n });\n };\n\n useEffect(() => {\n if (profile?.xero_connects && profile.xero_connects.length > 0) {\n dispatch(loadXeroContacts());\n }\n }, [profile?.xero_connects]);\n\n return (\n <>\n
\n \n {translate(lang, 'Does this look correct?')}\n \n
\n
\n
\n
\n \n {translate(lang, 'Reference')}: {invoice.reference}\n \n
\n
\n {!!showButton && connections.length > 1 && (\n setConnID(Number(v))}\n />\n )}\n
\n
\n {!!profile && !!showButton && (\n updateContactID(v)}\n showSearch={true}\n />\n )}\n
\n
\n
\n
\n
\n
{translate(lang, 'Item')}
\n
{translate(lang, 'Description')}
\n
{translate(lang, 'Quantity')}
\n
{translate(lang, 'Unit Price')} ($)
\n
{translate(lang, 'Amount')} ($)
\n
\n {invoice.line_items.map((x, i) => (\n
\n
{x.item_name}
\n
{x.description}
\n
{formatNumber(x.quantity)}
\n
{numberToMoneyStr(x.unit_price)}
\n
\n {numberToMoneyStr(x.unit_price * x.quantity)}\n
\n
\n ))}\n
\n {!!profile?.account?.include_tax && (\n <>\n
\n
\n
{translate(lang, 'Subtotal')}
\n
$ {numberToMoneyStr(subTotal)}
\n
\n
\n
\n
{`${profile.account.tax?.label} (${profile.account.tax?.value}%)`}
\n
$ {numberToMoneyStr(taxFee)}
\n
\n \n )}\n
\n
\n
{translate(lang, 'Total')}
\n
$ {numberToMoneyStr(total)}
\n
\n {showButton && (\n
\n {!!profile && (\n <>\n {!profile?.xero_connects || profile.xero_connects.length <= 0 ? (\n \n {translate(lang, 'Connect Xero')}\n \n ) : !invoiceLink ? (\n \n {translate(\n lang,\n invoice.type === 'ACCPAY'\n ? 'Create an expense in Xero'\n : 'Create an expense invoice in Xero',\n )}\n \n ) : (\n \n {translate(\n lang,\n invoice.type === 'ACCPAY'\n ? 'View expense in Xero'\n : 'View expense invoice in Xero',\n )}\n \n )}\n \n )}\n \n {translate(lang, 'Close')}\n \n
\n )}\n \n );\n};\n\nexport default GrowerInvoiceCreateView;\n","import { useState } from 'react';\nimport { Modal, Upload } from 'antd';\nimport { PlusOutlined } from '@ant-design/icons';\nimport {\n RcFile,\n UploadChangeParam,\n UploadFile,\n} from 'antd/lib/upload/interface';\nimport Paragrapgh from '../paragrapgh/Paragrapgh';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport './styles.scss';\nimport { translate } from '../../../lib/lang.helper';\n\ninterface IFile {\n name: string;\n size: number;\n thumbUrl: string;\n uid: string;\n type: string;\n}\n\ninterface Props {\n fileList?: UploadFile[];\n label: string;\n onChange: (files: UploadFile[]) => void;\n disabled?: boolean;\n}\n\nconst PDFWall = ({ fileList, label, onChange, disabled }: Props) => {\n const lang = useSelector(selectLang);\n const [previewFile, setPreviewFile] = useState();\n\n const handleChange = (info: UploadChangeParam>) => {\n const { file } = info;\n if (file.status === 'removed') {\n onChange([...new Set(fileList?.filter(image => image.uid !== file.uid))]);\n }\n };\n const handleBeforeUpload = (file: RcFile, imgList: RcFile[]) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = e => {\n const { uid, name, type, size } = file;\n\n const image = {\n uid,\n name,\n type,\n size,\n thumbUrl: e.target?.result,\n };\n\n onChange([...new Set(fileList), image as UploadFile]);\n };\n return false;\n };\n\n return (\n <>\n \n {label}\n \n setPreviewFile(v as any)}\n onChange={handleChange}\n beforeUpload={handleBeforeUpload}\n disabled={disabled}\n >\n
\n \n
{translate(lang, 'Upload PDF')}
\n
\n \n {previewFile && (\n setPreviewFile(undefined)}\n width={700}\n >\n \n \n )}\n \n );\n};\n\nexport default PDFWall;\n","export const getBase64 = (file: any) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n });\n};\n\nexport const parseImageUrlToFileItem = (url: string) => {\n try {\n const s = url.split('/');\n const name = s[s.length - 1];\n const type = name.split('.')[1] ?? 'Unknown';\n const uid = 'parseImageUrlToFileItem-' + Date.now() + Math.random();\n return { uid, type, name, size: 1, thumbUrl: url };\n } catch (error) {\n console.log('url = ', url);\n return null;\n }\n};\n","import { useSelector } from 'react-redux';\nimport { IExpenseRequest } from '../../entities/budget.entities';\nimport { numberToMoneyStr } from '../../entities/util-functions';\nimport {\n Button,\n Dropdown,\n Input,\n PlusIcon,\n Subtitle,\n TrashIcon,\n} from '../shared';\nimport { selectUtils } from '../../store/utils/utils.selector';\nimport { useState } from 'react';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n className?: string;\n title: string;\n data: IExpenseRequest[];\n setData: (data: IExpenseRequest[]) => void;\n additionalQuantity?: number;\n additionalAmount?: number;\n hideTotal?: boolean;\n}\n\nconst ExpensesForm = ({\n className,\n title,\n data,\n setData,\n additionalQuantity,\n additionalAmount,\n hideTotal,\n}: Props) => {\n const lang = useSelector(selectLang);\n const options = useSelector(selectUtils)\n .filter(x => x.type === 'expense_item')\n .map(x => x.name);\n\n const [isOther, setIsOther] = useState(\n data.map(x => x.name && !options.includes(x.name)),\n );\n const selectItem = (i: number, v: string) => {\n if (v.length <= 0) {\n const tmp = [...isOther];\n tmp[i] = true;\n setIsOther(tmp);\n\n const tmp2 = [...data];\n tmp2[i].name = '';\n setData(tmp2);\n } else {\n const tmp = [...data];\n tmp[i].name = v;\n setData(tmp);\n }\n };\n const updateForm = (i: number, key: keyof IExpenseRequest, value: string) => {\n const tmp = [...data];\n if (key === 'name') {\n tmp[i].name = value;\n } else if (key === 'quantity') {\n const v = value.length <= 0 ? null : Number(value);\n tmp[i].quantity = v;\n if (\n tmp[i].unit_price !== null &&\n tmp[i].unit_price !== undefined &&\n v !== null\n ) {\n tmp[i].amount = Number(tmp[i].unit_price) * v;\n }\n } else if (key === 'unit_price') {\n const v = value.length <= 0 ? null : Number(value);\n tmp[i].unit_price = v;\n if (\n tmp[i].quantity !== null &&\n tmp[i].quantity !== undefined &&\n v !== null\n ) {\n tmp[i].amount = Number(tmp[i].quantity) * v;\n }\n } else if (key === 'amount') {\n const v = value.length <= 0 ? null : Number(value);\n tmp[i].amount = v;\n if (\n tmp[i].quantity !== null &&\n tmp[i].quantity !== undefined &&\n v !== null\n ) {\n tmp[i].unit_price =\n Math.round((v / Number(tmp[i].quantity)) * 100) / 100;\n }\n }\n setData(tmp);\n };\n const deleteItem = (i: number) => {\n const tmp = [...data];\n tmp.splice(i, 1);\n setData(tmp);\n\n const tmp2 = [...isOther];\n tmp2.splice(i, 1);\n setIsOther(tmp2);\n };\n const addItem = () => {\n setData([\n ...data,\n { name: '', quantity: null, unit_price: null, amount: null },\n ]);\n setIsOther([...isOther, false]);\n };\n const totalQuantity =\n (additionalQuantity ?? 0) +\n data.reduce((p, c) => p + (c.quantity ?? 0), 0),\n totalAmount =\n (additionalAmount ?? 0) + data.reduce((p, c) => p + (c.amount ?? 0), 0);\n\n return (\n
\n
\n \n {translate(lang, title)}\n \n
\n
\n
\n
{translate(lang, 'Description')}
\n
{translate(lang, 'Quantity')}
\n
{translate(lang, 'Unit price')}
\n
{translate(lang, 'Amount')}
\n
\n
\n {data.map((x, i) => (\n
\n
\n {options.length > 0 && !isOther[i] ? (\n ({ id: y, value: y, label: y })),\n {\n id: 'other',\n value: '',\n label: translate(lang, 'Other'),\n },\n ]}\n value={x.name.length <= 0 ? undefined : x.name}\n onChange={v => selectItem(i, v)}\n />\n ) : (\n updateForm(i, 'name', e.target.value)}\n value={x.name}\n placeholder=''\n />\n )}\n
\n
\n updateForm(i, 'quantity', e.target.value)}\n value={x.quantity?.toString() ?? ''}\n label=''\n />\n
\n
\n updateForm(i, 'unit_price', e.target.value)}\n label=''\n unit='$'\n />\n
\n
\n updateForm(i, 'amount', e.target.value)}\n value={x.amount?.toString() ?? ''}\n label=''\n unit='$'\n />\n
\n
\n deleteItem(i)}\n >\n \n \n
\n
\n ))}\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n {!hideTotal && (\n
\n
{translate(lang, 'Totals')}
\n
{totalQuantity}
\n
\n
{numberToMoneyStr(totalAmount)}
\n
\n
\n )}\n
\n
\n );\n};\n\nexport default ExpensesForm;\n","import { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Modal } from 'antd';\nimport moment from 'moment';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n Dropdown,\n Input,\n Subtitle,\n} from '../../shared';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { sendSingleRequest } from '../../../apis';\nimport {\n formatNumber,\n numberToMoneyStr,\n} from '../../../entities/util-functions';\nimport { IXeroInvoice } from '../../../entities/subscription.entities';\nimport GrowerInvoiceCreateView from '../../budget/GrowerInvoiceCreateView';\nimport {\n loadFarmsData,\n loadSpatStorages,\n} from '../../../store/farms/farms.actions';\nimport ModalFeedbackView from '../../shared/feedback/ModalFeedbackView';\nimport {\n defaultDateFormat,\n toMillisecond,\n toSecond,\n} from '../../../util/toggleSecondMillisecond';\nimport PDFWall from '../../shared/pictures-wall/PDFWall';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { IMusselHarvest } from '../../../entities/growing.entities';\nimport {\n IMusselLineDetail,\n IMusselLineResource,\n} from '../../../entities/farms.entities';\nimport ExpensesForm from '../../grower-views/ExpensesForm';\nimport { IExpenseRequest } from '../../../entities/budget.entities';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport { SelectMusselFarmsByFarmID } from '../../../store/extra/extra.selector';\n\ninterface ISRange {\n id: number;\n season_name: string;\n from_date: number;\n to_date: number;\n seed_count: number;\n harvest_count: number;\n}\n\ninterface IFormData {\n seeding_id?: number;\n rope_bags_quantity: number | null;\n harvest_number: string | null;\n complete_date: number;\n port_of_unload: string | null;\n shell_length: number | null;\n shell_length_max: number | null;\n vessel: string | null;\n company: string | null;\n comment: string | null;\n batch_seed_id?: number;\n}\n\nconst defaultForm: IFormData = {\n complete_date: moment().toDate().getTime(),\n shell_length: null,\n shell_length_max: null,\n company: null,\n vessel: null,\n harvest_number: null,\n port_of_unload: null,\n rope_bags_quantity: null,\n comment: null,\n};\n\nconst extractData = (data: any) => {\n if (!data) return { ...defaultForm };\n let res: any = { ...defaultForm };\n for (let k in defaultForm) {\n if (!data[k]) continue;\n res[k] = k === 'complete_date' ? 1000 * data[k] : data[k];\n }\n return res;\n};\n\ninterface IHarvestLine {\n line_id: number;\n bags_quantity: number | null;\n is_full: boolean;\n line_length: string | null;\n}\n\ninterface Props {\n visible: boolean;\n lineData?: IMusselLineResource;\n onClose: (d: any) => void;\n onConfirm: (d: any) => void;\n harvestData?: IMusselHarvest;\n updateId?: number;\n paramData?: any;\n overConfirm?: (d: any) => void;\n confirmID?: number;\n className?: string;\n warningMessage?: string;\n}\n\nconst MusselGrowerHarvestModal = ({\n visible,\n lineData,\n onConfirm,\n onClose,\n harvestData,\n updateId,\n overConfirm,\n paramData,\n confirmID,\n className,\n warningMessage,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const farms = SelectMusselFarmsByFarmID(lineData?.farm_id);\n const allLines =\n farms\n .reduce((p, c) => [...p, ...c.lines], [] as IMusselLineResource[])\n .map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.farm_name} - ${x.line_name}`,\n isGrowing: !!x.growing_cycle,\n last_harvest: x.last_harvest,\n })) ?? [];\n const linesOption = updateId ? allLines : allLines.filter(x => x.isGrowing);\n\n const [disabled, setDisabled] = useState(false);\n const [harvestedLines, setHarvestedLines] = useState(\n lineData\n ? [\n {\n line_id: lineData.id,\n bags_quantity: harvestData?.bags_quantity ?? null,\n is_full: harvestData?.is_full ?? true,\n line_length: harvestData?.line_length?.toString() ?? null,\n },\n ]\n : [],\n );\n const [showConfirm, setShowConfirm] = useState(false);\n const [submittedData, setSubmittedData] = useState();\n const [harvestCosts, setHarvestCosts] = useState(\n harvestData?.expense_items?.map(x => ({\n name: x.name,\n amount: x.amount,\n quantity: x.quantity,\n unit_price: x.quantity\n ? Math.round((x.amount / x.quantity) * 100) / 100\n : null,\n })) ?? [{ name: '', amount: null, quantity: null }],\n );\n const [formData, setFormData] = useState(extractData(harvestData));\n const [totAmount, setTotAmount] = useState(\n harvestData?.amount.toString() ?? '',\n );\n const [totIncome, setTotIncome] = useState(\n harvestData?.income?.toString() ?? '',\n );\n const [forInsert, setForInsert] = useState(false);\n const [ranges, setRanges] = useState();\n const [pdfFiles, setPdfFiles] = useState(\n harvestData?.pdf_files?.map(x => parseImageUrlToFileItem(x)) ?? [],\n );\n const [isMiddle, setIsMiddle] = useState(\n harvestData && !harvestData.is_final ? true : false,\n );\n\n const showError = (message: string) =>\n dispatch(showFeedback({ isMessageModal: true, type: 'error', message }));\n const updateHarvestLine = (\n id: number,\n key: 'bags_quantity' | 'is_full' | 'line_length' | 'amount' | 'income',\n val: any,\n ) => {\n let tmp = [...harvestedLines];\n const i = tmp.findIndex(x => x.line_id === id);\n if (key === 'bags_quantity') val = Number(val);\n if (i > -1) (tmp[i] as any)[key] = val;\n setHarvestedLines(tmp);\n };\n const updateForm = (key: keyof IFormData, value: any) => {\n if (key === 'shell_length' || key === 'shell_length_max') {\n value = value.length <= 0 ? null : Number(value);\n }\n setFormData(prv => ({ ...prv, [key]: value }));\n };\n const selectLine = (val: string[]) => {\n let tmp = val.map(x => ({\n line_id: Number(x),\n bags_quantity: null,\n is_full: true,\n line_length: null,\n }));\n for (let t of harvestedLines) {\n const i = tmp.findIndex(x => x.line_id === t.line_id);\n if (i > -1) {\n tmp[i].bags_quantity = t.bags_quantity as any;\n tmp[i].is_full = t.is_full;\n tmp[i].line_length = t.line_length as any;\n }\n }\n setHarvestedLines(tmp);\n };\n const validData = () => {\n if (harvestedLines.length <= 0) {\n showError(translate(lang, 'Please select harvested line'));\n return null;\n }\n if (\n harvestedLines.findIndex(\n x => !x.bags_quantity || Number(x.bags_quantity) <= 0,\n ) > -1\n ) {\n showError(translate(lang, 'Please input valid number of bags quantity'));\n return null;\n }\n if (Number(totAmount) <= 0) {\n showError(translate(lang, 'Please input valid harvest amount'));\n return null;\n }\n const totBags = harvestedLines.reduce(\n (p, c) => p + Number(c.bags_quantity),\n 0,\n );\n if (updateId) {\n if (harvestedLines.length !== 1) {\n showError(\n translate(\n lang,\n 'Unknown error! Please contact to the developer team',\n ),\n );\n return null;\n }\n const tmpL = allLines.find(x => Number(x.id) === lineData?.id);\n if (!tmpL) {\n showError(\n translate(\n lang,\n 'Data is still loading. Please try after few seconds!',\n ),\n );\n return null;\n }\n if (\n harvestData?.is_full !== undefined &&\n harvestData.is_full !== harvestedLines[0].is_full &&\n tmpL.last_harvest?.id !== updateId\n ) {\n showError(translate(lang, '_impossible_harvest_update'));\n return null;\n }\n\n if (!showConfirm) {\n if (harvestData?.next_seed_date) {\n if (harvestData.next_seed_date < toSecond(formData.complete_date)) {\n if (\n !window.confirm(\n translate(\n lang,\n \"You are harvesting on a later date than next season's seeding. This should only happen in rare circumstances where you harvest and seed the same line at the same time. Please double check the date, the line is already seeded on the %s\",\n defaultDateFormat(harvestData.next_seed_date),\n ),\n )\n ) {\n return null;\n }\n }\n }\n }\n\n return {\n ...formData,\n is_final: !isMiddle,\n line_length: harvestedLines[0].line_length,\n is_full: harvestedLines[0].is_full,\n bags_quantity: harvestedLines[0].bags_quantity,\n amount: Number(totAmount),\n income: Number(totIncome),\n expenses: harvestCosts.filter(x => x.quantity && x.amount),\n complete_date: toSecond(formData.complete_date),\n };\n } else {\n return {\n ...formData,\n pdf_files: pdfFiles,\n lines: harvestedLines.map(x => ({\n ...x,\n is_final: !isMiddle,\n amount: (Number(totAmount) / totBags) * Number(x.bags_quantity),\n income: (Number(totIncome) / totBags) * Number(x.bags_quantity),\n })),\n expenses: harvestCosts.filter(x => x.quantity && x.amount),\n complete_date: toSecond(formData.complete_date),\n };\n }\n };\n const invoiceDetail = (): IXeroInvoice => {\n const totBags = harvestedLines.reduce(\n (p, c) => p + Number(c.bags_quantity),\n 0,\n );\n let line_items: any = [];\n for (let hl of harvestedLines) {\n const line = allLines.find(t => Number(t.id) === hl.line_id);\n if (!line) continue;\n const rate = Number(hl.bags_quantity) / totBags;\n line_items.push({\n item_name: line.label,\n description: 'Income',\n quantity: 1,\n unit_price: Number(totIncome) * rate,\n });\n for (let item of harvestCosts) {\n const qty = (Number(item.quantity) ? Number(item.quantity) : 1) * rate;\n const amt = Number(item.amount) ? Number(item.amount) * rate : 0;\n line_items.push({\n item_name: line.label,\n description: item.name,\n quantity: qty,\n unit_price: -amt / qty,\n });\n }\n }\n return {\n reference: 'Harvest Invoice',\n contact_id: '',\n line_items,\n type: 'ACCREC',\n };\n };\n const toggleForInsert = async (c: boolean) => {\n if (c) {\n const response = await sendSingleRequest(\n {},\n 'GET',\n `api/farm/line/lines/${harvestedLines[0].line_id}`,\n true,\n );\n if (response.status) {\n const lineSource: IMusselLineDetail = response.data;\n let dt: ISRange[] = [];\n for (let row of lineSource.cycles) {\n const lstH = row.harvests.find(x => x.is_full);\n dt.push({\n id: row.main_seed.id,\n season_name: row.main_seed.season_name,\n from_date: row.main_seed.planned_date_seed,\n to_date: lstH?.complete_date ?? row.main_seed.planned_date_harvest,\n seed_count: row.seedings.length,\n harvest_count: row.harvests.length,\n });\n }\n setRanges(dt);\n }\n } else {\n updateForm('seeding_id', undefined);\n setRanges(undefined);\n }\n setForInsert(c);\n };\n const confirmClick = async () => {\n const data = validData();\n if (!data) return;\n\n if (!showConfirm) {\n setShowConfirm(true);\n return;\n }\n setDisabled(true);\n if (overConfirm) {\n overConfirm(data);\n return;\n }\n const res = updateId\n ? await sendSingleRequest(\n data,\n 'POST',\n `api/farm/line/harvest-update/${updateId}`,\n true,\n )\n : confirmID\n ? await sendSingleRequest(\n { ...data, id: confirmID },\n 'POST',\n 'api/queue/confirm-bulk-harvest/mussel',\n true,\n )\n : await sendSingleRequest(\n data,\n 'POST',\n 'api/farm/line/bulk-mussel-harvest',\n true,\n );\n if (res.status) {\n setDisabled(false);\n dispatch(\n showFeedback({\n isMessageModal: true,\n message: translate(\n lang,\n updateId\n ? 'Updated successfully'\n : res.data?.message ?? 'Harvested successfully',\n ),\n type: 'success',\n }),\n );\n setSubmittedData(res.data);\n dispatch(loadFarmsData());\n if (isMiddle) {\n dispatch(loadSpatStorages());\n }\n } else {\n setDisabled(false);\n showError(translate(lang, res.data?.message ?? 'Failed to harvest'));\n }\n };\n\n useEffect(() => {\n if (paramData) {\n const {\n lines,\n bags_quantity,\n is_full,\n is_final,\n line_length,\n pdf_files,\n expenses,\n complete_date,\n amount,\n income,\n ...params\n } = paramData;\n if (pdf_files) {\n setPdfFiles(pdf_files);\n }\n if (lines) {\n setIsMiddle(!lines[0].is_final);\n setHarvestedLines(\n lines.map((x: any) => ({\n line_id: x.line_id,\n bags_quantity: x.bags_quantity,\n is_full: x.is_full,\n line_length: x.line_length,\n })),\n );\n setTotAmount(lines.reduce((p: number, c: any) => p + c.amount, 0));\n setTotIncome(lines.reduce((p: number, c: any) => p + c.income, 0));\n } else if (lineData) {\n setIsMiddle(!is_final);\n setHarvestedLines([\n {\n line_id: lineData.id,\n bags_quantity: bags_quantity,\n is_full: is_full,\n line_length: line_length,\n },\n ]);\n if (amount) setTotAmount(amount);\n if (income) setTotIncome(income);\n }\n if (expenses) {\n setHarvestCosts(expenses);\n }\n setFormData({ ...params, complete_date: toMillisecond(complete_date) });\n }\n }, [paramData, lineData]);\n\n const costSum = harvestCosts.reduce((p, c) => p + Number(c.amount), 0);\n\n const seedOptions = lineData?.growing_cycle?.seedings.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${defaultDateFormat(x.planned_date_seed)} - ${translate(\n lang,\n 'Batch',\n )} ${x.id}`,\n }));\n\n return (\n }\n width={1000}\n footer={null}\n >\n {!showConfirm ? (\n
\n
\n \n {translate(lang, 'INVOICE DETAILS')}\n \n
\n {!!warningMessage && (\n
{warningMessage}
\n )}\n
\n
\n x.line_id.toString()) as any}\n onChange={(v: any) => selectLine(v)}\n showSearch={true}\n disabled={!!updateId}\n />\n
\n
\n {harvestedLines.map(line => (\n \n
\n Number(x.id) === line.line_id)\n ?.label ?? ''\n }\n placeholder={translate(lang, 'Bags quantity')}\n value={line.bags_quantity?.toString() ?? ''}\n onChange={e =>\n updateHarvestLine(\n line.line_id,\n 'bags_quantity',\n e.target.value,\n )\n }\n />\n
\n
\n \n updateHarvestLine(line.line_id, 'is_full', v === 'full')\n }\n />\n
\n {seedOptions && seedOptions.length > 0 && !line.is_full && (\n
\n {\n updateForm('batch_seed_id', Number(v));\n }}\n />\n
\n )}\n
\n \n updateHarvestLine(\n line.line_id,\n 'line_length',\n e.target.value,\n )\n }\n unit='m'\n />\n
\n
\n ))}\n
\n
\n {harvestedLines.length === 1 && !harvestedLines[0].is_full && (\n
\n
\n toggleForInsert(e.target.checked)}\n />\n
\n {!!ranges && (\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.season_name} (${defaultDateFormat(\n x.from_date,\n )} - ${defaultDateFormat(x.to_date)})`,\n }))}\n value={formData.seeding_id?.toString() ?? undefined}\n onChange={v => updateForm('seeding_id', Number(v))}\n />\n
\n )}\n
\n )}\n
\n
\n setIsMiddle(e.target.checked)}\n />\n
\n
\n
\n setTotAmount(e.target.value)}\n value={totAmount}\n unit='kg'\n />\n
\n
\n {!isMiddle && (\n setTotIncome(e.target.value)}\n value={totIncome}\n unit='$'\n />\n )}\n
\n
\n \n
\n
{translate(lang, 'Totals')}
\n
{`${formatNumber(\n Number(totAmount),\n )} kg`}
\n
\n
{numberToMoneyStr(Number(totIncome))} ($)
\n
-{numberToMoneyStr(costSum)} ($)
\n
{numberToMoneyStr(Number(totIncome) - costSum)} ($)
\n
\n
\n
\n
\n
\n
\n
\n updateForm('shell_length', e.target.value)}\n value={formData.shell_length?.toString() ?? ''}\n unit='mm'\n />\n
\n
\n updateForm('shell_length_max', e.target.value)}\n value={formData.shell_length_max?.toString() ?? ''}\n unit='mm'\n />\n
\n
\n
\n
\n \n updateForm('rope_bags_quantity', e.target.value)\n }\n value={formData.rope_bags_quantity?.toString() ?? ''}\n />\n
\n
\n updateForm('harvest_number', e.target.value)}\n value={formData.harvest_number ?? ''}\n />\n
\n
\n
\n
\n \n e && updateForm('complete_date', e.toDate().getTime())\n }\n />\n
\n
\n updateForm('port_of_unload', e.target.value)}\n value={formData.port_of_unload ?? ''}\n />\n
\n
\n
\n
\n updateForm('vessel', e.target.value)}\n value={formData.vessel ?? ''}\n />\n
\n
\n updateForm('company', e.target.value)}\n value={formData.company ?? ''}\n />\n
\n
\n
\n updateForm('comment', e.target.value)}\n value={formData.comment ?? ''}\n name='comment'\n />\n
\n
\n
\n
\n setPdfFiles(v)}\n />\n
\n
\n
\n \n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n \n ) : (\n
\n onConfirm(submittedData)}\n showButton={!!submittedData}\n />\n {!submittedData && (\n
\n setShowConfirm(false)}\n disabled={disabled}\n >\n {translate(lang, 'Go Back')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n )}\n
\n )}\n \n \n );\n};\n\nexport default MusselGrowerHarvestModal;\n","import { IOysterLineResource } from '../../../entities/farms.entities';\n\ninterface Props {\n visible: boolean;\n lineData: IOysterLineResource;\n}\n\nconst OysterGrowerHarvestModal = ({ visible, lineData }: Props) => (\n
OysterGrowerHarvestModal
\n);\n\nexport default OysterGrowerHarvestModal;\n","import {\n ILineResource,\n IMusselLineResource,\n IOysterLineResource,\n} from '../../../entities/farms.entities';\nimport { TBusinessType } from '../../../entities/general.entities';\nimport {\n IHarvestResource,\n IMusselHarvest,\n} from '../../../entities/growing.entities';\nimport MusselGrowerHarvestModal from './MusselGrowerHarvestModal';\nimport OysterGrowerHarvestModal from './OysterGrowerHarvestModal';\nimport '../styles.scss';\n\ninterface Props {\n type: TBusinessType;\n visible: boolean;\n lineData?: ILineResource;\n onClose: (d: any) => void; // only for MUSSEL\n onConfirm: (d: any) => void; // only for MUSSEL\n harvestData?: IHarvestResource; // only for MUSSEL\n updateId?: number; // only for MUSSEL\n paramData?: any; // only for OYSTER\n overConfirm?: (d: any) => void; // only for OYSTER\n confirmID?: number;\n className?: string; // only for MUSSEL\n warningMessage?: string;\n}\n\nconst GrowerHarvestModal = ({\n type,\n visible,\n lineData,\n onClose,\n onConfirm,\n harvestData,\n updateId,\n paramData,\n overConfirm,\n confirmID,\n className,\n warningMessage,\n}: Props) => (\n <>\n {type === 'MUSSEL' ? (\n \n ) : type === 'OYSTER' ? (\n \n ) : (\n <>\n )}\n \n);\n\nexport default GrowerHarvestModal;\n","import { useState } from 'react';\nimport { Modal, Radio } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport {\n Button,\n CloseIcon,\n Dropdown,\n Input,\n RadioButton,\n Subtitle,\n} from '../../components/shared';\nimport { loadInventories } from '../../store/inventories/inventories.actions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport ModalFeedbackView from '../../components/shared/feedback/ModalFeedbackView';\nimport { selectFarmingMethods } from '../../store/utils/utils.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { IInventoryResource } from '../../entities/inventory.entities';\n\ninterface IForm {\n type: string;\n name: string;\n quantity?: number;\n price?: number;\n level?: number;\n volume?: number | null;\n}\n\ninterface Props {\n visible: boolean;\n title: string;\n data?: IInventoryResource;\n onConfirm: (data: any) => void;\n onCancel: () => void;\n updateId?: number;\n}\n\nconst InventoryModal = ({\n visible,\n title,\n data,\n onConfirm,\n onCancel,\n updateId,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const farmingMethods = useSelector(selectFarmingMethods);\n\n const typeOptions = [\n { id: 'FLOAT', label: 'Float', value: 'FLOAT' },\n { id: 'LONGLINE', label: 'Longline', value: 'LONGLINE' },\n { id: 'TIES', label: 'Ties', value: 'TIES' },\n ...farmingMethods.map(x => ({\n id: x.name,\n label: x.name,\n value: x.name,\n })),\n ];\n const [disabled, setDisabled] = useState(false);\n const [form, setForm] = useState(\n data\n ? {\n type: data.type,\n name: data.name,\n quantity: data.quantity,\n price: data.price,\n level: data.level,\n volume: data.volume,\n }\n : { type: 'FLOAT', name: '' },\n );\n const [errors, setErrors] = useState<{\n type: string | null;\n quantity: string | null;\n name: string | null;\n }>({ type: null, quantity: null, name: null });\n\n const updateForm = (key: keyof IForm, val: any) => {\n if (['quantity', 'price', 'level', 'volume'].includes(key)) {\n val = val.length <= 0 ? undefined : Number(val);\n }\n setForm({ ...form, [key]: val });\n setErrors({ ...errors, [key]: null });\n };\n const validForm = () => {\n let tmpErr = { ...errors };\n let res = true;\n if (form.type.length <= 0) {\n tmpErr.type = 'Please put type';\n res = false;\n }\n if (\n form.name.length <= 0 &&\n ['FLOAT', 'LONGLINE', 'TIES'].includes(form.type)\n ) {\n tmpErr.name = 'Please put name';\n res = false;\n }\n if (!form.quantity) {\n tmpErr.quantity = 'Please put valid quantity';\n res = false;\n }\n setErrors(tmpErr);\n if (!res) return null;\n\n return {\n ...form,\n name: form.name ? form.name : form.type,\n };\n };\n const handleConfirmClick = async () => {\n const valid = validForm();\n if (!valid) return;\n\n setDisabled(true);\n const res = !updateId\n ? await sendSingleRequest(\n valid,\n 'POST',\n 'api/inventory/inventories',\n true,\n )\n : await sendSingleRequest(\n valid,\n 'PUT',\n `api/inventory/inventories/${updateId}`,\n true,\n );\n if (res.status) {\n dispatch(loadInventories());\n onConfirm(res.data);\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n } else {\n setDisabled(false);\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Unknown error'),\n }),\n );\n }\n };\n\n return (\n }\n width={600}\n >\n \n
\n
\n \n {translate(lang, title)}\n \n
\n
\n
\n updateForm('type', v)}\n />\n {errors.type && (\n
\n {translate(lang, errors.type)}\n
\n )}\n
\n
\n updateForm('name', e.target.value)}\n />\n
\n
\n updateForm('quantity', e.target.value)}\n />\n {errors.quantity && (\n
\n {translate(lang, errors.quantity)}\n
\n )}\n
\n
\n updateForm('price', e.target.value)}\n unit='$'\n />\n
\n
\n updateForm('level', Number(e.target.value))}\n value={form.level}\n >\n \n \n \n
\n
\n updateForm('volume', e.target.value)}\n unit='m3'\n />\n
\n
\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default InventoryModal;\n","import moment from 'moment';\nimport { sendSingleRequest } from '../apis';\nimport {\n ILineResource,\n IOysterLineResource,\n ISpatStorageResource,\n} from '../entities/farms.entities';\nimport { IAccountSetting } from '../entities/user.entities';\nimport { ISizedOyster } from '../entities/utils.entities';\nimport { defaultDateFormat } from '../util/toggleSecondMillisecond';\nimport { IBasicInventory } from '../entities/inventory.entities';\nimport { piecesToDozens } from './common.helpers';\nimport { IOysterHarvest } from '../entities/growing.entities';\nimport { formatNumber } from '../entities/util-functions';\n\nexport const updateLineColumn = async (line_id: number, col_no: number) => {\n const response = await sendSingleRequest(\n { line_id, col_no },\n 'POST',\n `api/farm/line/visual-line/column`,\n true,\n );\n if (response.status) {\n return response.data;\n } else {\n throw new Error(response.data?.message ?? 'Something went wrong');\n }\n};\n\nexport const updateLinePriority = async (line_id: number, priority: number) => {\n const response = await sendSingleRequest(\n { line_id, priority },\n 'POST',\n `api/farm/line/visual-line/priority`,\n true,\n );\n if (response.status) {\n return response.data;\n } else {\n throw new Error(response.data?.message ?? 'Something went wrong');\n }\n};\n\ntype LineStatus =\n | 'EMPTY'\n | 'READY_HARVEST'\n | 'REQUIRE_ASSESSMENT'\n | 'CATCH_SPAT'\n | 'NORMAL';\n\nexport const getLineStatus = (\n line: ILineResource,\n expire_days = 90,\n): LineStatus => {\n const ready_harvest = line.growing_cycle?.ready_harvest;\n const requireAssessment = () => {\n if (!line || !line.growing_cycle) return false;\n const lastDate =\n line.growing_cycle.last_assessment?.assessment_date ??\n line.growing_cycle.main_seed.planned_date_seed;\n const d1 = moment(Number(lastDate) * 1000)\n .toDate()\n .getTime();\n const d2 = moment().toDate().getTime();\n const d = Math.abs(Math.round((d2 - d1) / 86400000));\n\n return d > (expire_days ?? 90);\n };\n const catchSpat = !!line.growing_cycle?.main_seed.is_catch_spat;\n\n if (!line.growing_cycle) return 'EMPTY';\n else if (ready_harvest) return 'READY_HARVEST';\n else if (requireAssessment()) return 'REQUIRE_ASSESSMENT';\n else if (catchSpat) return 'CATCH_SPAT';\n else return 'NORMAL';\n};\n\nexport const setFarmVisualFloatsPosition = async (\n seeding_id: number,\n inventory_id: number,\n positions: number[],\n shouldQueue: boolean = false,\n) => {\n setLocalFloatsPosition(seeding_id, inventory_id, positions);\n\n if (shouldQueue) {\n if (!!(window as any).VisualFloatsPositionTimer) {\n clearTimeout((window as any).VisualFloatsPositionTimer);\n }\n if (!(window as any).VisualFloatsPositionQueue) {\n (window as any).VisualFloatsPositionQueue = [];\n }\n (window as any).VisualFloatsPositionQueue.push({\n seeding_id,\n inventory_id,\n positions,\n });\n (window as any).VisualFloatsPositionTimer = setTimeout(async () => {\n if (\n !!(window as any).VisualFloatsPositionQueue &&\n (window as any).VisualFloatsPositionQueue.length > 0\n ) {\n await sendSingleRequest(\n { bulk_data: (window as any).VisualFloatsPositionQueue },\n 'POST',\n `api/farm/line/visual-floats-position`,\n true,\n );\n (window as any).VisualFloatsPositionQueue = null;\n }\n }, 3000);\n } else {\n const response = await sendSingleRequest(\n { seeding_id, inventory_id, positions },\n 'POST',\n `api/farm/line/visual-floats-position`,\n true,\n );\n return response.status;\n }\n};\n\nexport const getLocalFloatsPosition = (\n seeding_id: number,\n inventory_id: number,\n) => {\n const res = localStorage.getItem(\n `farm_visual_floats_position_${seeding_id}_${inventory_id}`,\n );\n if (res) return JSON.parse(res);\n return null;\n};\n\nexport const setLocalFloatsPosition = (\n seeding_id: number,\n inventory_id: number,\n positions: number[],\n) => {\n localStorage.setItem(\n `farm_visual_floats_position_${seeding_id}_${inventory_id}`,\n JSON.stringify(positions),\n );\n};\n\nexport const amountDays = (time: number | undefined | null): string => {\n if (time === null) {\n return '0 days';\n }\n\n if (Number(time) === 1) {\n return '1 day';\n }\n\n return `${time} days`;\n};\n\nexport const calcOnGrowWastePercent = (\n onGrowWaste: IAccountSetting['oyster_crops'],\n type: 'grow' | 'waste',\n lineID: number | undefined = undefined,\n) => {\n if (!lineID) {\n return (\n (type === 'grow' ? onGrowWaste?.grow_ons : onGrowWaste?.waste) ??\n undefined\n );\n } else {\n return (\n (type === 'grow'\n ? onGrowWaste?.lines_grow_ons &&\n onGrowWaste.lines_grow_ons[lineID] !== undefined &&\n onGrowWaste.lines_grow_ons[lineID] !== null\n ? onGrowWaste.lines_grow_ons[lineID]\n : onGrowWaste?.grow_ons\n : onGrowWaste?.lines_waste &&\n onGrowWaste.lines_waste[lineID] !== undefined &&\n onGrowWaste.lines_waste[lineID] !== null\n ? onGrowWaste.lines_waste[lineID]\n : onGrowWaste?.waste) ?? undefined\n );\n }\n};\n\nexport const calcOysterPercent = (\n util: ISizedOyster,\n lineID: number | undefined,\n) => {\n if (!lineID) {\n return util.num_val ?? undefined;\n } else {\n return util.json &&\n util.json.lines &&\n util.json.lines[lineID] !== undefined &&\n util.json.lines[lineID] !== null\n ? (util.json.lines[lineID] as number)\n : util.num_val ?? undefined;\n }\n};\n\nexport const getEstHarvestDate = (line: ILineResource) =>\n line.growing_cycle?.last_assessment?.planned_date_harvest ??\n line.growing_cycle?.main_seed.planned_date_harvest;\n\nexport const calcLineLastSize = (line: ILineResource) => {\n if (!line.growing_cycle) return undefined;\n if (line.growing_cycle.last_assessment) {\n return line.growing_cycle.last_assessment.shell_size;\n }\n const min = line.growing_cycle.main_seed.spat_size;\n const max = line.growing_cycle.main_seed.spat_size_max ?? min;\n const avg = (min + max) / 2;\n return { min, max, avg };\n};\n\nexport const getLineOysters = (\n line: IOysterLineResource,\n unit: 'dozens' | 'pieces' = 'dozens',\n) => {\n if (!line.growing_cycle) return undefined;\n if (\n line.growing_cycle.last_assessment &&\n line.growing_cycle.last_assessment.estimated_amount\n ) {\n return unit === 'dozens'\n ? piecesToDozens(line.growing_cycle.last_assessment.estimated_amount)\n : line.growing_cycle.last_assessment.estimated_amount;\n }\n return unit === 'dozens'\n ? line.growing_cycle.current_amount_dz\n : line.growing_cycle.current_amount_pcs;\n};\n\nexport const calcSpecieLineDozens = (\n line: IOysterLineResource,\n onGrowWaste: IAccountSetting['oyster_crops'],\n oysterSpecies: ISizedOyster[],\n) => {\n if (!line.growing_cycle) return undefined;\n const totAmount = getLineOysters(line) ?? 0;\n const growPercent = calcOnGrowWastePercent(onGrowWaste, 'grow', line.id);\n const wastePercent = calcOnGrowWastePercent(onGrowWaste, 'waste', line.id);\n let result = [\n {\n name: 'Grown ons',\n amount:\n growPercent === undefined ? undefined : (totAmount * growPercent) / 100,\n },\n {\n name: 'Waste',\n amount:\n wastePercent === undefined\n ? undefined\n : (totAmount * wastePercent) / 100,\n },\n ];\n for (const field of oysterSpecies) {\n const percent = calcOysterPercent(field, line.id);\n result.push({\n name: field.name,\n amount: percent === undefined ? undefined : (totAmount * percent) / 100,\n });\n }\n return result;\n};\n\nexport const calcOysterLineSize = (\n line: IOysterLineResource,\n onGrowWaste: IAccountSetting['oyster_crops'],\n oysterSpecies: ISizedOyster[],\n) => {\n if (!line.growing_cycle) return undefined;\n if (line.growing_cycle.last_assessment) {\n return line.growing_cycle.last_assessment.shell_size;\n }\n let minArr: Array<{ size: number; amount: number }> = [];\n if (onGrowWaste?.grow_ons_json?.size_min) {\n const amount = calcOnGrowWastePercent(onGrowWaste, 'grow', line.id);\n if (amount !== undefined) {\n minArr.push({\n size: onGrowWaste.grow_ons_json.size_min,\n amount: amount,\n });\n }\n }\n if (onGrowWaste?.waste_json?.size_min) {\n const amount = calcOnGrowWastePercent(onGrowWaste, 'waste', line.id);\n if (amount !== undefined) {\n minArr.push({\n size: onGrowWaste.waste_json.size_min,\n amount: amount,\n });\n }\n }\n for (const field of oysterSpecies) {\n if (field.json?.size_min) {\n const amount = calcOysterPercent(field, line.id);\n if (amount !== undefined) {\n minArr.push({\n size: field.json.size_min,\n amount: amount,\n });\n }\n }\n }\n let maxArr: Array<{ size: number; amount: number }> = [];\n if (onGrowWaste?.grow_ons_json?.size_max) {\n const amount = calcOnGrowWastePercent(onGrowWaste, 'grow', line.id);\n if (amount !== undefined) {\n maxArr.push({\n size: onGrowWaste.grow_ons_json.size_max,\n amount: amount,\n });\n }\n }\n if (onGrowWaste?.waste_json?.size_max) {\n const amount = calcOnGrowWastePercent(onGrowWaste, 'waste', line.id);\n if (amount !== undefined) {\n maxArr.push({\n size: onGrowWaste.waste_json.size_max,\n amount: amount,\n });\n }\n }\n for (const field of oysterSpecies) {\n if (field.json?.size_max) {\n const amount = calcOysterPercent(field, line.id);\n if (amount !== undefined) {\n maxArr.push({\n size: field.json.size_max,\n amount: amount,\n });\n }\n }\n }\n const minSum = minArr.reduce((acc, x) => acc + x.amount, 0);\n if (minSum <= 0) {\n return undefined;\n }\n const min = minArr.reduce((acc, x) => acc + (x.size * x.amount) / minSum, 0);\n const maxSum = maxArr.reduce((acc, x) => acc + x.amount, 0);\n if (maxSum <= 0) {\n return { min, avg: min, max: min };\n }\n const max = maxArr.reduce((acc, x) => acc + (x.size * x.amount) / maxSum, 0);\n\n return { min, avg: (min + max) / 2, max };\n};\n\nconst makeSpatLabel = (spat: ISpatStorageResource) => {\n let res: string[] = [];\n if (spat.source_line) {\n res.push(`${spat.source_line.farm.name}/${spat.source_line.line_name}`);\n } else if (spat.src_line_name) {\n res.push(spat.src_line_name);\n }\n if (spat.seed_type) res.push(spat.seed_type);\n res.push(defaultDateFormat(spat.collection_date) ?? '-');\n if (spat.source !== spat.src_line_name) res.push(spat.source);\n return res.join(', ');\n};\n\nexport const getSpatSourceLabel = (\n spatID: number,\n spats: ISpatStorageResource[],\n) => {\n const spat = spats.find(x => x.id === spatID);\n return spat ? makeSpatLabel(spat) : undefined;\n};\n\nexport const inventoryLabel = (ivt: IBasicInventory | undefined) =>\n ivt\n ? ['FLOAT', 'TIES', 'LONGLINE'].includes(ivt.type)\n ? `${ivt.type} ${ivt.name}`\n : ivt.type === 'OYSTER'\n ? ivt.name\n : ivt.name\n : '';\n\nexport const getMortalityLabel = (harvest: IOysterHarvest, unit = 'dz') =>\n harvest.amount_pcs && harvest.mortality\n ? `${formatNumber(\n piecesToDozens(harvest.mortality),\n )} ${unit} (${formatNumber(\n (harvest.mortality / harvest.amount_pcs) * 100,\n )} %)`\n : '';\n","import { useState, useMemo, useEffect } from 'react';\nimport { Modal } from 'antd';\nimport {\n ILineResource,\n IMaintenanceResource,\n} from '../../entities/farms.entities';\nimport {\n Button,\n CloseIcon,\n Datepicker,\n Dropdown,\n Input,\n PlusIcon,\n Subtitle,\n TrashIcon,\n} from '../shared';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { sendSingleRequest } from '../../apis';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport GrowerInvoiceCreateView from '../budget/GrowerInvoiceCreateView';\nimport { IXeroInvoice } from '../../entities/subscription.entities';\nimport InventoryModal from '../../pages/Inventories/InventoryModal';\nimport moment from 'moment';\nimport { updateInventoryQuantity } from '../../store/inventories/inventories.actions';\nimport { toMillisecond, toSecond } from '../../util/toggleSecondMillisecond';\nimport ExpensesForm from '../grower-views/ExpensesForm';\nimport { IExpenseRequest } from '../../entities/budget.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n SelectInventoriesByFarmID,\n SelectIsEditable,\n SelectMusselFarmsByFarmID,\n} from '../../store/extra/extra.selector';\nimport { inventoryLabel } from '../../lib/farm.helpers';\nimport './styles.scss';\n\nconst typeOptions = [\n {\n id: 'VISUAL_ASSESSMENT',\n value: 'VISUAL_ASSESSMENT',\n label: 'Visual Assessment',\n },\n { id: 'LINE_CLEANING', value: 'LINE_CLEANING', label: 'Line Cleaning' },\n {\n id: 'GENERAL_MAINTENANCE',\n value: 'GENERAL_MAINTENANCE',\n label: 'General Maintenance',\n },\n];\n\nconst outInOptions = [\n { id: 'IN', value: 'IN', label: 'Remove from line to inventory' },\n { id: 'OUT', value: 'OUT', label: 'Add to the line' },\n];\n\ntype typeField = 'VISUAL_ASSESSMENT' | 'LINE_CLEANING' | 'GENERAL_MAINTENANCE';\n\ninterface IIvtItem {\n inventory_id: number | null;\n type: 'IN' | 'OUT';\n quantity: number | null;\n unit_price: number | null;\n}\n\ninterface IForm {\n maintain_date: number;\n type: typeField;\n comment: string | null;\n}\n\nconst defaultForm: IForm = {\n maintain_date: moment().toDate().getTime(),\n type: 'GENERAL_MAINTENANCE',\n comment: null,\n};\n\ninterface Props {\n visible: boolean;\n maintenanceData?: IMaintenanceResource;\n lineData?: ILineResource;\n onClose: (d: any) => void;\n onConfirm: (d: any) => void;\n onlyView?: boolean;\n updateId?: number;\n data?: any;\n overConfirm?: (d: any) => void;\n}\n\nconst GrowerMaintenanceModal = ({\n visible,\n onlyView,\n maintenanceData,\n updateId,\n lineData,\n onClose,\n onConfirm,\n data: paramData,\n overConfirm,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const farmsData = SelectMusselFarmsByFarmID(lineData?.farm_id);\n const inventories = SelectInventoriesByFarmID(lineData?.farm_id);\n const isEditable = SelectIsEditable(lineData?.farm_id);\n\n const growingLines = useMemo(() => {\n let res: ILineResource[] = [];\n for (let f of farmsData) {\n res = [...res, ...f.lines];\n }\n return res;\n }, [farmsData]);\n\n const [curLine, setCurLine] = useState(lineData);\n const [form, setForm] = useState(\n maintenanceData\n ? {\n ...defaultForm,\n ...maintenanceData,\n maintain_date: 1000 * maintenanceData.maintain_date,\n }\n : defaultForm,\n );\n const [disabled, setDisabled] = useState(false);\n const [expenses, setExpenses] = useState(\n maintenanceData?.expense_items?.map(x => ({\n name: x.name,\n quantity: x.quantity,\n unit_price: Math.round((x.amount / (x.quantity ?? 1)) * 100) / 100,\n amount: x.amount,\n })) ?? [],\n );\n const [submittedData, setSubmittedData] = useState();\n const [showConfirm, setShowConfirm] = useState(false);\n const [ivtItems, setIvtItems] = useState([]);\n const [showIvtModal, setShowIvtModal] = useState(false);\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n const selectLine = (v: string) => {\n const line = growingLines.find(x => x.id === Number(v));\n if (line) {\n setCurLine(line);\n if (!line.growing_cycle) setIvtItems([]);\n }\n };\n const updateForm = (key: keyof IForm, val: any) =>\n setForm({ ...form, [key]: val });\n const addFloatClick = () => {\n let tmp = [...ivtItems];\n tmp.push({\n inventory_id: null,\n type: 'OUT',\n quantity: null,\n unit_price: null,\n });\n setIvtItems(tmp);\n };\n const updateIvtItem = (i: number, key: keyof IIvtItem, val: any) => {\n let tmp: any = [...ivtItems];\n tmp[i][key] = val;\n if (key === 'inventory_id' && val === 0) {\n tmp.type = 'OUT';\n }\n setIvtItems(tmp);\n };\n const deleteIvtItem = (i: number) => {\n const tmp = ivtItems.filter((x, j) => i !== j);\n setIvtItems(tmp);\n };\n const invoiceDetail = (): IXeroInvoice => {\n const line_items = [\n ...expenses.map(x => ({\n item_name: `${curLine?.farm_name} - ${curLine?.line_name}`,\n description: x.name,\n quantity: Number(x.quantity),\n unit_price: Number(x.unit_price),\n })),\n ...ivtItems.map(x => {\n const v = inventories.find(t => t.id === x.inventory_id);\n return {\n item_name: `${curLine?.farm_name} - ${curLine?.line_name}`,\n description: v ? inventoryLabel(v) : '-',\n quantity: Number(x.quantity),\n unit_price: Number(x.unit_price),\n };\n }),\n ];\n return {\n reference: 'Maintenance Invoice',\n contact_id: '',\n line_items,\n type: 'ACCPAY',\n };\n };\n const validData = async () => {\n if (!curLine) {\n showError('Please select line');\n return null;\n }\n if (!form.comment) {\n showError('Please enter comment');\n return null;\n }\n if (expenses.some(x => !x.name)) {\n showError('Please enter expense item description');\n return null;\n }\n if (expenses.some(x => !x.quantity)) {\n showError('Please enter valid expense quantity');\n return null;\n }\n if (expenses.some(x => !x.unit_price)) {\n showError('Please enter valid expense unit price');\n return null;\n }\n if (!curLine.growing_cycle && ivtItems.length > 0) {\n showError('Impossible to enter expensed inventories on empty line');\n return null;\n }\n let flag = false;\n for (let i = 0; i < ivtItems.length; i++) {\n for (let j = i + 1; j < ivtItems.length; j++) {\n if (ivtItems[i].inventory_id === ivtItems[j].inventory_id) {\n flag = true;\n break;\n }\n }\n if (flag) break;\n }\n if (flag) {\n showError('You selected same inventory for one manage');\n return false;\n }\n for (let x of ivtItems) {\n if (!x.inventory_id) {\n showError('Please select inventory');\n return false;\n }\n if (!x.quantity) {\n showError('Please enter valid quantity');\n return false;\n }\n if (!x.unit_price) {\n showError('Please enter valid unit price');\n return false;\n }\n const v = inventories.find(y => y.id === x.inventory_id);\n if (!v) {\n showError('Inventory not found');\n return false;\n }\n const mx =\n x.type === 'OUT'\n ? v.available_quantity\n : curLine?.growing_cycle?.inventories_sum.find(\n t => t.inventory_id === x.inventory_id,\n )?.quantity ?? 0;\n if (x.quantity > mx) {\n if (x.type === 'IN') {\n showError(\n translate(\n lang,\n 'Maximum available value for %s is %s',\n v.name ?? '',\n mx,\n ),\n );\n return false;\n }\n\n const cf = window.confirm(\n `You didn't have enough ${x.quantity} (${\n v.name\n }) - the system has total ${v.quantity} and ${\n v.available_quantity\n } are available. Do you want ${x.quantity - mx} more?`,\n );\n if (!cf) return false;\n\n setDisabled(true);\n const r = await dispatch(\n updateInventoryQuantity(v.id, v.quantity + x.quantity - mx),\n );\n setDisabled(false);\n if (r !== true) {\n showError(r);\n return false;\n }\n }\n }\n let result: any = {\n line_id: curLine.id,\n ...form,\n maintain_date: toSecond(form.maintain_date),\n expenses: [\n ...expenses.map(x => ({\n ...x,\n amount: Number(x.quantity) * Number(x.unit_price),\n })),\n ...ivtItems.map(x => {\n const v = inventories.find(t => t.id === x.inventory_id);\n return {\n name: v ? inventoryLabel(v) : '-',\n quantity: x.quantity,\n unit_price: x.unit_price,\n amount: Number(x.quantity) * Number(x.unit_price),\n };\n }),\n ],\n };\n if (curLine.growing_cycle) {\n result.seeding_id = curLine.growing_cycle.main_seed.id;\n }\n return result;\n };\n const submitFloats = async () => {\n const seedID = curLine?.growing_cycle?.main_seed.id;\n if (!seedID) {\n alert(\n translate(\n lang,\n 'Impossible to enter expensed inventories on empty line',\n ),\n );\n return;\n }\n for (let x of ivtItems) {\n const res = await sendSingleRequest(\n {\n inventory_id: x.inventory_id,\n quantity: x.quantity,\n type: x.type,\n manage_date: toSecond(form.maintain_date),\n },\n 'POST',\n `api/farm/line/seed/inventory-seeds/${seedID}`,\n true,\n );\n if (!res.status) {\n alert(translate(lang, res.data?.message ?? 'Unknown error'));\n }\n }\n };\n const confirmClick = async () => {\n const data = await validData();\n if (!data || onlyView) return;\n\n if (!showConfirm) {\n setShowConfirm(true);\n return;\n }\n\n setDisabled(true);\n if (overConfirm) {\n overConfirm(data);\n return;\n }\n await submitFloats();\n const res = !updateId\n ? await sendSingleRequest(\n data,\n 'POST',\n 'api/farm/line/seed/maintenance',\n true,\n )\n : await sendSingleRequest(\n data,\n 'PUT',\n `api/farm/line/seed/maintenance/${updateId}`,\n true,\n );\n setDisabled(false);\n if (res.status) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n message: translate(lang, res.data?.message ?? 'Success'),\n type: 'success',\n }),\n );\n setSubmittedData(res.data);\n dispatch(loadFarmsData());\n onConfirm(res.data);\n } else {\n showError(res.data?.message ?? 'Failed to enter maintenance data');\n }\n };\n\n useEffect(() => {\n if (paramData) {\n const { expenses, maintain_date, ...params } = paramData;\n setForm({\n ...form,\n ...params,\n maintain_date: toMillisecond(maintain_date),\n });\n setExpenses(expenses ?? []);\n }\n }, [paramData]);\n\n return showIvtModal ? (\n setShowIvtModal(false)}\n onCancel={() => setShowIvtModal(false)}\n />\n ) : (\n }\n width={1200}\n footer={null}\n >\n {!showConfirm ? (\n
\n
\n \n {translate(lang, 'INVOICE DETAILS')}\n \n
\n
\n {!updateId && (\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.farm_name} - ${x.line_name}`,\n }))}\n value={curLine?.id.toString()}\n onChange={v => selectLine(v)}\n disabled={disabled}\n />\n
\n )}\n
\n \n e && updateForm('maintain_date', e.toDate().getTime())\n }\n />\n
\n
\n updateForm('type', val)}\n disabled={disabled}\n />\n
\n
\n updateForm('comment', e.target.value)}\n disabled={disabled}\n />\n
\n
\n
\n {(!curLine || !!curLine?.growing_cycle) && !updateId && (\n <>\n {isEditable && (\n
\n setShowIvtModal(true)}\n >\n {translate(lang, 'Add New Inventory')}\n \n
\n )}\n
\n \n {translate(lang, 'Expense inventory')}\n \n
\n
\n
\n
{translate(lang, 'Name')}
\n
\n {`${translate(lang, 'Put In')}/${translate(\n lang,\n 'Take Out',\n )}`}\n
\n
\n {translate(lang, 'Quantity')}\n
\n
\n {translate(lang, 'Unit price')}\n
\n
{translate(lang, 'Amount')}
\n
\n
\n {ivtItems.map((x, i) => (\n
\n
\n ({\n id: y.id.toString(),\n value: y.id.toString(),\n label: y ? inventoryLabel(y) : '-',\n }))}\n value={x.inventory_id?.toString()}\n onChange={v =>\n updateIvtItem(i, 'inventory_id', Number(v))\n }\n />\n
\n
\n updateIvtItem(i, 'type', v)}\n />\n
\n
\n \n updateIvtItem(\n i,\n 'quantity',\n e.target.value.length <= 0\n ? null\n : Number(e.target.value),\n )\n }\n />\n
\n
\n \n updateIvtItem(\n i,\n 'unit_price',\n e.target.value.length <= 0\n ? null\n : Number(e.target.value),\n )\n }\n />\n
\n
\n \n
\n
\n \n \n \n
\n
\n ))}\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n )}\n p + Number(c.quantity),\n 0,\n )}\n additionalAmount={ivtItems.reduce(\n (p, c) => p + Number(c.quantity) * Number(c.unit_price),\n 0,\n )}\n />\n
\n
\n \n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n
\n ) : (\n
\n onConfirm(submittedData)}\n showButton={!!submittedData}\n />\n {!submittedData && (\n
\n setShowConfirm(false)}\n disabled={disabled}\n >\n {translate(lang, 'Go Back')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n )}\n
\n )}\n \n \n );\n};\n\nexport default GrowerMaintenanceModal;\n","import { Modal, Radio } from 'antd';\nimport React, { useState } from 'react';\nimport {\n Button,\n CloseIcon,\n Datepicker,\n Dropdown,\n Input,\n PlusIcon,\n RadioButton,\n Subtitle,\n TrashIcon,\n} from '../shared';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { ILineResource } from '../../entities/farms.entities';\nimport moment from 'moment';\nimport { selectSeasons } from '../../store/utils/utils.selector';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { sendSingleRequest } from '../../apis';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport { formatNumber, numberToMoneyStr } from '../../entities/util-functions';\nimport PDFWall from '../shared/pictures-wall/PDFWall';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\n\ninterface IForm {\n season_name: string;\n seed_date: number;\n spat_source: string;\n spat_amount: number | null;\n line_length: number | null;\n spat_size: number | null;\n shell_length: number | null;\n harvest_date: number;\n harvest_amount: number | null;\n harvest_income: number | null;\n bags_quantity: number | null;\n rope_bags_quantity: number | null;\n harvest_number: string | null;\n port_of_unload: string | null;\n vessel: string | null;\n company: string | null;\n comment: string | null;\n}\n\ninterface IExpenseRequest {\n name: string;\n amount: number | null;\n quantity: number | null;\n}\n\ninterface ViewProps {\n items: IExpenseRequest[];\n setItems: (d: IExpenseRequest[]) => void;\n label: string;\n lang: any;\n}\n\nconst ExpensesView = ({ items, setItems, label, lang }: ViewProps) => {\n const updateCost = (\n i: number,\n key: 'name' | 'amount' | 'quantity',\n value: any,\n ) => {\n let tmp: any = [...items];\n if (tmp.length <= i) return;\n tmp[i][key] = value;\n setItems(tmp);\n };\n const addCost = () => {\n let tmp = [...items];\n tmp.push({ name: '', amount: null, quantity: null });\n setItems(tmp);\n };\n const deleteCost = (i: number) => {\n const tmp = items.filter((x, j) => i !== j);\n setItems(tmp);\n };\n\n return (\n <>\n
\n \n {translate(lang, label)}\n \n
\n
\n
\n
{translate(lang, 'Description')}
\n
{translate(lang, 'Quantity')}
\n
{translate(lang, 'Unit price')}
\n
{translate(lang, 'Amount')}
\n
\n
\n {items.map((x, i) => (\n
\n
\n updateCost(i, 'name', e.target.value)}\n value={x.name}\n label=''\n placeholder=''\n />\n
\n
\n updateCost(i, 'quantity', e.target.value)}\n value={x.quantity?.toString() ?? ''}\n label=''\n />\n
\n
\n \n
\n
\n updateCost(i, 'amount', e.target.value)}\n value={x.amount?.toString() ?? ''}\n label=''\n unit='$'\n />\n
\n
\n \n \n \n
\n
\n ))}\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n
\n \n );\n};\n\ninterface Props {\n visible: boolean;\n onClose: (d: any) => void;\n onConfirm: (d: any) => void;\n className?: string;\n}\n\nconst GrowerCycleModal = ({\n visible,\n onClose,\n onConfirm,\n className,\n}: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const farms = useSelector(selectFarmsData);\n const allLines = farms.reduce(\n (p, c) => [...p, ...c.lines],\n [] as ILineResource[],\n );\n const linesOption =\n allLines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.farm_name} - ${x.line_name}`,\n })) ?? [];\n const seasons = useSelector(selectSeasons).map(x => ({\n id: x.id.toString(),\n label: x.name,\n value: x.name,\n }));\n\n const [disabled, setDisabled] = useState(false);\n const [curLine, setCurLine] = useState();\n const [formData, setFormData] = useState({\n season_name: '',\n seed_date: moment().toDate().getTime(),\n spat_source: '',\n spat_amount: null,\n line_length: null,\n spat_size: null,\n shell_length: null,\n harvest_date: moment().toDate().getTime(),\n harvest_amount: null,\n harvest_income: null,\n bags_quantity: null,\n rope_bags_quantity: null,\n harvest_number: '',\n port_of_unload: '',\n vessel: '',\n company: '',\n comment: '',\n });\n const [seasonType, setSeasonType] = useState<'old' | 'new'>('old');\n const [seedExpenses, setSeedExpenses] = useState([]);\n const [harvestExpenses, setHarvestExpenses] = useState([]);\n const [pdfFiles, setPdfFiles] = useState();\n\n const updateForm = (key: keyof IForm, val: any) =>\n setFormData(prv => ({ ...prv, [key]: val }));\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n message: translate(lang, message),\n type: 'error',\n }),\n );\n\n const validForm = () => {\n if (!curLine) {\n showError('Please select line');\n return null;\n }\n if (!formData.season_name) {\n showError('Season name field is required');\n return null;\n }\n if (!formData.spat_source) {\n showError('Spat source field is required');\n return null;\n }\n if (!formData.spat_amount) {\n showError('Spat amount field is required');\n return null;\n }\n if (!formData.line_length) {\n showError('Longline length field is required');\n return null;\n }\n if (!formData.spat_size) {\n showError('Seeded spat size field is required');\n return null;\n }\n if (!formData.shell_length) {\n showError('Harvested shell size field is required');\n return null;\n }\n if (!formData.harvest_amount) {\n showError('Harvest amount field is required');\n return null;\n }\n if (formData.seed_date > formData.harvest_date) {\n showError('Harvested date should be later than seeded date');\n return null;\n }\n if (seedExpenses.some(x => !x.name || !x.amount || !x.quantity)) {\n showError('Please enter seed expenses data correctly');\n return null;\n }\n if (harvestExpenses.some(x => !x.name || !x.amount || !x.quantity)) {\n showError('Please enter harvest expenses data correctly');\n return null;\n }\n let result = {\n line_id: curLine.id,\n ...formData,\n seed_date: Math.floor(formData.seed_date / 1000),\n harvest_date: Math.floor(formData.harvest_date / 1000),\n seed_expenses: seedExpenses,\n harvest_expenses: harvestExpenses,\n pdf_files: pdfFiles,\n };\n if (!result.harvest_number) {\n result.harvest_number = null;\n }\n if (!result.port_of_unload) {\n result.port_of_unload = null;\n }\n if (!result.vessel) {\n result.vessel = null;\n }\n if (!result.company) {\n result.company = null;\n }\n if (!result.comment) {\n result.comment = null;\n }\n return result;\n };\n const confirmClick = async () => {\n const data = validForm();\n if (!data) return;\n\n setDisabled(true);\n const response = await sendSingleRequest(\n data,\n 'POST',\n 'api/import/grower-cycle',\n true,\n );\n if (response.status) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n message: translate(lang, 'Succeed'),\n type: 'success',\n }),\n );\n await dispatch(loadFarmsData());\n onConfirm(response.data);\n } else {\n showError(response.data?.message ?? 'Unknown error');\n setDisabled(false);\n }\n };\n\n const harvestCost = harvestExpenses.reduce((p, c) => p + Number(c.amount), 0);\n\n return (\n }\n width={900}\n footer={null}\n >\n
\n
\n \n {`${translate(lang, 'Enter Seeding')} - ${translate(\n lang,\n 'Harvest Information',\n )}`}\n \n
\n
\n
\n setCurLine(allLines.find(x => x.id === Number(v)))}\n showSearch={true}\n />\n
\n
\n
\n \n e && updateForm('seed_date', e.toDate().getTime())\n }\n />\n
\n
\n \n e && updateForm('harvest_date', e.toDate().getTime())\n }\n />\n
\n
\n
\n
\n setSeasonType(e.target.value)}\n value={seasonType}\n >\n \n \n \n
\n
\n {seasonType === 'old' ? (\n updateForm('season_name', v)}\n />\n ) : (\n updateForm('season_name', e.target.value)}\n />\n )}\n
\n
\n
\n
\n updateForm('spat_source', e.target.value)}\n />\n
\n
\n \n updateForm('spat_amount', Number(e.target.value))\n }\n />\n
\n
\n \n updateForm('line_length', Number(e.target.value))\n }\n unit='m'\n />\n
\n
\n
\n
\n updateForm('spat_size', Number(e.target.value))}\n unit='mm'\n />\n
\n
\n \n updateForm('shell_length', Number(e.target.value))\n }\n unit='mm'\n />\n
\n
\n
\n
\n \n updateForm('harvest_amount', Number(e.target.value))\n }\n unit='kg'\n />\n
\n
\n \n updateForm('harvest_income', Number(e.target.value))\n }\n unit='$'\n />\n
\n
\n
\n
\n
\n
\n \n updateForm('bags_quantity', Number(e.target.value))\n }\n />\n
\n
\n \n updateForm('rope_bags_quantity', Number(e.target.value))\n }\n />\n
\n
\n updateForm('harvest_number', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('vessel', e.target.value)}\n />\n
\n
\n updateForm('company', e.target.value)}\n />\n
\n
\n updateForm('port_of_unload', e.target.value)}\n />\n
\n
\n
\n updateForm('comment', e.target.value)}\n />\n
\n
\n setPdfFiles(v)}\n />\n
\n
\n
\n \n
\n
{translate(lang, 'Totals')}
\n
\n {seedExpenses.reduce((p, c) => p + Number(c.quantity), 0)}\n
\n
\n
\n {numberToMoneyStr(\n seedExpenses.reduce((p, c) => p + Number(c.amount), 0),\n )}\n
\n
\n
\n
\n
\n \n
\n
{translate(lang, 'Totals')}
\n
\n {`${formatNumber(formData.harvest_amount ?? 0)} kg`}\n
\n
\n
{numberToMoneyStr(Number(formData.harvest_income))} ($)
\n
-{numberToMoneyStr(harvestCost)} ($)
\n
\n {`${numberToMoneyStr(\n Number(formData.harvest_income) - harvestCost,\n )} ($)`}\n
\n
\n
\n
\n
\n
\n \n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n
\n \n \n );\n};\n\nexport default GrowerCycleModal;\n","import { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Modal, Radio } from 'antd';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n Dropdown,\n Input,\n RadioButton,\n Subtitle,\n} from '../../shared';\nimport moment from 'moment';\nimport { sendSingleRequest } from '../../../apis';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { IXeroInvoice } from '../../../entities/subscription.entities';\nimport GrowerInvoiceCreateView from '../../budget/GrowerInvoiceCreateView';\nimport ModalFeedbackView from '../../shared/feedback/ModalFeedbackView';\nimport {\n defaultDateFormat,\n toMillisecond,\n toSecond,\n} from '../../../util/toggleSecondMillisecond';\nimport { ICustomValue } from '../../../entities/automation.entities';\nimport { Link } from 'react-router-dom';\nimport { IMusselSeeding } from '../../../entities/growing.entities';\nimport {\n IMusselLineDetail,\n IMusselLineResource,\n} from '../../../entities/farms.entities';\nimport ExpensesForm from '../../grower-views/ExpensesForm';\nimport { IExpenseRequest } from '../../../entities/budget.entities';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport { addUtilData } from '../../../store/utils/utils.actions';\nimport {\n SelectMusselFarmsByFarmID,\n SelectMusselSpatsByFarmID,\n SelectSeasonsByFarmID,\n SelectSeedingFields,\n} from '../../../store/extra/extra.selector';\nimport { getSpatSourceLabel } from '../../../lib/farm.helpers';\n\ninterface ISRange {\n id: number;\n season_name: string;\n from_date: number;\n to_date: number;\n seed_count: number;\n harvest_count: number;\n}\n\ninterface IFormData {\n parent_id?: number;\n season_name: string;\n spat_size: number | null;\n spat_size_max: number | null;\n density: number | null;\n density_unit: 'spat per m' | 'kgs per m';\n planned_date_seed: number;\n planned_date_harvest: number;\n drop: number | null;\n submersion: number | null;\n spacing: number | null;\n floats: number | null;\n comment: string | null;\n budget_unit_amount: number | null;\n budget_unit_price: number | null;\n custom_values?: ICustomValue[];\n spat_amount?: number;\n line_length?: number;\n spat_storage_id?: number;\n}\n\nconst defaultForm: IFormData = {\n season_name: '',\n spat_size: null,\n spat_size_max: null,\n density: null,\n density_unit: 'spat per m',\n planned_date_seed: moment().toDate().getTime(),\n planned_date_harvest: moment().toDate().getTime(),\n comment: null,\n budget_unit_amount: null,\n budget_unit_price: null,\n drop: null,\n submersion: null,\n spacing: null,\n floats: null,\n};\n\ninterface ILineItem {\n line_id: number;\n new_spat: 'NEW' | 'EXISTING';\n spat_storage_id?: number;\n spat_source: string;\n spat_amount: number | null;\n line_length: number | null;\n}\n\nconst spatAmountPlaceholder = (id: number | undefined, spats: any) => {\n const spat = spats.find((y: any) => y.id === id);\n return spat ? `Available: ${spat.available_weight}` : '';\n};\n\ninterface Props {\n visible: boolean;\n lineData?: IMusselLineResource;\n seedData?: IMusselSeeding;\n onClose: (d: any) => void;\n onConfirm: (d: any) => void;\n overConfirm?: (d: any) => Promise;\n className?: string;\n onlyView?: boolean;\n data?: any;\n warningMessage?: string;\n}\n\nconst MusselGrowerSeedModal = ({\n visible,\n lineData,\n seedData,\n onClose,\n onConfirm,\n overConfirm,\n className,\n onlyView,\n data: paramData,\n warningMessage,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const farms = SelectMusselFarmsByFarmID(lineData?.farm_id);\n const customFields = SelectSeedingFields(lineData?.farm_id);\n const spatStorages = SelectMusselSpatsByFarmID(lineData?.farm_id);\n const seasonData = SelectSeasonsByFarmID(lineData?.farm_id).map(x => ({\n id: x.id.toString(),\n label: x.name,\n value: x.name,\n }));\n const linesOption =\n farms\n .reduce((p, c) => [...p, ...c.lines], [] as IMusselLineResource[])\n .map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.farm_name} - ${x.line_name}`,\n })) ?? [];\n const isEdit = !!seedData && !!seedData.id;\n const spatOptions = spatStorages.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: getSpatSourceLabel(x.id, spatStorages),\n }));\n\n const [disabled, setDisabled] = useState(false);\n const [seedLines, setSeedLines] = useState([]);\n const [formData, setFormData] = useState(defaultForm);\n const [seedItems, setSeedItems] = useState([\n { name: '', quantity: 1, amount: 0 },\n ]);\n const [showConfirm, setShowConfirm] = useState(false);\n const [seasonType, setSeasonType] = useState<'old' | 'new'>('old');\n const [submittedData, setSubmittedData] = useState();\n const [forInsert, setForInsert] = useState(false);\n const [ranges, setRanges] = useState();\n const [customValues, setCustomValues] = useState(\n customFields.map(x => {\n const d =\n seedData && seedData.custom_values\n ? seedData.custom_values.find(\n (y: ICustomValue) => y.field_id === x.id,\n )\n : null;\n return {\n input_type: x.input_type,\n field_label: x.name,\n options: x.options\n ?.split(',')\n .map(t => ({ id: t, label: t, value: t })),\n field_id: x.id,\n field_val: d?.field_val ?? '',\n data_type: x.data_type,\n unit: x.unit,\n };\n }),\n );\n const [addSpatSizeRange, setAddSpatSizeRange] = useState(\n (seedData?.spat_size_max !== null &&\n seedData?.spat_size_max !== undefined) ||\n (paramData?.spat_size_max !== null &&\n paramData?.spat_size_max !== undefined),\n );\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n const updateForm = (key: keyof IFormData, val: any) => {\n if (key === 'budget_unit_amount' || key === 'budget_unit_price') {\n val = val.length <= 0 ? null : Number(val);\n } else if (key === 'spat_amount' || key === 'line_length') {\n val = val.length <= 0 ? undefined : Number(val);\n } else if (key === 'spat_storage_id') {\n val = val.length <= 0 ? undefined : Number(val);\n } else if (\n [\n 'spat_size',\n 'spat_size_max',\n 'density',\n 'drop',\n 'submersion',\n 'spacing',\n 'floats',\n ].includes(key)\n ) {\n val = val.length <= 0 ? null : Number(val);\n }\n setFormData(prv => ({ ...prv, [key]: val }));\n };\n const changeIsNewSpat = (i: number, val: string) => {\n let tmp = [...seedLines];\n tmp[i].new_spat = val as any;\n if (val === 'NEW') {\n tmp[i].spat_storage_id = undefined;\n } else {\n tmp[i].spat_source = '';\n }\n setSeedLines(tmp);\n };\n const updateSeedLine = (\n i: number,\n key: 'spat_id' | 'spat_source' | 'spat_amount' | 'line_length',\n val: string,\n ) => {\n if (key === 'spat_id') {\n setSeedLines(\n seedLines.map((x, j) =>\n j === i ? { ...x, spat_storage_id: Number(val) } : x,\n ),\n );\n } else {\n const v =\n key === 'spat_source' ? val : val.length <= 0 ? null : Number(val);\n setSeedLines(seedLines.map((x, j) => (j === i ? { ...x, [key]: v } : x)));\n }\n };\n const handleChangeSeedLine = (v: string[]) => {\n let tmp = seedLines.filter(x => v.includes(x.line_id.toString()));\n for (let i of v) {\n if (tmp.some(x => x.line_id === Number(i))) continue;\n tmp.push({\n line_id: Number(i),\n spat_source: '',\n new_spat: 'EXISTING',\n spat_amount: null,\n line_length: null,\n });\n }\n setSeedLines(tmp);\n };\n const validData = () => {\n if (!isEdit && seedLines.length <= 0) {\n showError('Please select seed lines');\n return null;\n }\n if (!isEdit && seedLines.some(x => !x.spat_source && !x.spat_storage_id)) {\n showError('Empty spat source is not allowed');\n return null;\n }\n if (seedLines.some(x => !x.line_length)) {\n showError('Empty seeded longline length is not allowed');\n return null;\n }\n if (!isEdit && seedLines.some(x => !x.spat_amount)) {\n showError('Empty spat amount is not allowed');\n return null;\n }\n for (let sx of seedLines.filter(x => x.new_spat === 'EXISTING')) {\n const ln = linesOption.find(x => Number(x.id) === sx.line_id);\n if (!ln) continue;\n\n const sp = spatStorages.find(x => x.id === sx.spat_storage_id);\n if (!sp) {\n showError(\n translate(lang, 'Invalid spat storage for line %s', ln.label),\n );\n return null;\n }\n if (!sx.spat_amount) {\n showError(translate(lang, 'Invalid spat amount for line %s', ln.label));\n return null;\n }\n if (!isEdit && sx.spat_amount > (sp.available_weight ?? 0)) {\n showError(\n translate(\n lang,\n '_max_weight_line_spat',\n ln.label,\n sp.source,\n sp.available_weight ?? '',\n ),\n );\n return null;\n }\n }\n if (!formData.season_name) {\n showError('Empty season is not allowed');\n return null;\n }\n if (\n !isEdit &&\n seedItems.length <= 0 &&\n !window.confirm(\n translate(lang, 'Are you sure to enter empty expenses of spats?'),\n )\n ) {\n showError('Empty spat items are not allowed');\n return null;\n }\n if (seedItems.some(x => !x.name || !x.amount || !x.unit_price)) {\n showError('Please input correct spat items description and values');\n return null;\n }\n const expenses = seedItems.map(x => ({\n name: x.name,\n amount: Number(x.amount),\n unit_price: Number(x.unit_price),\n quantity: Number(x.quantity),\n }));\n let result: any = {\n ...formData,\n planned_date_seed: toSecond(formData.planned_date_seed),\n planned_date_harvest: toSecond(formData.planned_date_harvest),\n drop: Number(formData.drop),\n submersion: Number(formData.submersion),\n spacing: Number(formData.spacing),\n floats: Number(formData.floats),\n spat_size: Number(formData.spat_size),\n density: Number(formData.density),\n lines: seedLines.map(x => ({\n line_id: x.line_id,\n spat_storage_id: x.spat_storage_id,\n spat_source: x.spat_source,\n spat_amount: Number(x.spat_amount),\n line_length: Number(x.line_length),\n })),\n expenses,\n };\n if (isEdit) {\n delete result.spat_source;\n }\n const cvs = customValues\n .filter(x => !!x.field_val)\n .map(({ field_id, field_val }) => ({ field_id, field_val }));\n if (cvs.length > 0) {\n result.custom_values = cvs;\n }\n return result;\n };\n const invoiceDetail = (): IXeroInvoice => {\n let line_items: any = [];\n if (isEdit) {\n if (!lineData || !seedData) {\n window.alert('Unexpected error! Please contact with support team!');\n throw new Error('Unexpected error!');\n }\n for (let item of seedItems) {\n const quantity = Number(item.quantity) ?? 1;\n line_items.push({\n item_name: `${lineData.farm_name} - ${lineData.line_name}`,\n description: item.name,\n quantity,\n unit_price: Number(item.unit_price),\n });\n }\n } else {\n const totCnt = seedLines.length;\n for (let lID of seedLines) {\n const line = linesOption.find(t => Number(t.id) === lID.line_id);\n if (!line) continue;\n for (let item of seedItems) {\n const quantity =\n item.quantity && Number(item.quantity) ? Number(item.quantity) : 1;\n line_items.push({\n item_name: line.label,\n description: item.name,\n quantity: quantity / totCnt,\n unit_price: Number(item.amount) / quantity,\n });\n }\n }\n }\n return {\n reference: 'Seed Invoice',\n contact_id: '',\n line_items,\n type: 'ACCPAY',\n };\n };\n const toggleForInsert = async (c: boolean) => {\n if (c) {\n const response = await sendSingleRequest(\n {},\n 'GET',\n `api/farm/line/lines/${seedLines[0].line_id}`,\n true,\n );\n if (response.status) {\n let dt: ISRange[] = [];\n const lineSource: IMusselLineDetail = response.data;\n for (let row of lineSource.cycles) {\n const lstH = row.harvests.find(x => x.is_full);\n dt.push({\n id: row.main_seed.id,\n season_name: row.main_seed.season_name,\n from_date: row.main_seed.planned_date_seed,\n to_date: lstH?.complete_date ?? row.main_seed.planned_date_harvest,\n seed_count: row.seedings.length,\n harvest_count: row.harvests.length,\n });\n }\n setRanges(dt);\n }\n } else {\n updateForm('parent_id', undefined);\n setRanges(undefined);\n }\n setForInsert(c);\n };\n const closeInvoice = () => {\n const tmp = submittedData;\n setSubmittedData(undefined);\n setShowConfirm(false);\n onConfirm(tmp);\n };\n const confirmClick = async () => {\n const data = validData();\n if (!data) return;\n\n if (overConfirm) {\n setDisabled(true);\n if (!overConfirm(data)) {\n setDisabled(false);\n }\n return;\n }\n\n if (!showConfirm) {\n setShowConfirm(true);\n return;\n }\n\n setDisabled(true);\n if (!seasonData.some(x => x.value === data.season_name)) {\n dispatch(addUtilData('season', data.season_name));\n }\n const res = isEdit\n ? await sendSingleRequest(\n data,\n 'PUT',\n `api/farm/line/seeding/${seedData?.id}`,\n true,\n )\n : await sendSingleRequest(\n data,\n 'POST',\n 'api/farm/line/multiline-seeding',\n true,\n );\n setDisabled(false);\n if (res.status) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n message: translate(\n lang,\n res.data?.message\n ? res.data.message\n : isEdit\n ? 'Successfully updated'\n : 'Successfully seeded',\n ),\n type: 'success',\n }),\n );\n setSubmittedData(res.data);\n dispatch(loadFarmsData());\n } else {\n showError(translate(lang, res.data?.message ?? 'Failed to seed'));\n }\n };\n const updateCustomValue = (fieldID: number, val: string) => {\n let tmp = [...customValues];\n const i = tmp.findIndex(x => x.field_id === fieldID);\n if (i >= 0) {\n tmp[i].field_val = val;\n }\n setCustomValues(tmp);\n };\n\n useEffect(() => {\n let tmpSeedLines = [...seedLines];\n if (lineData) {\n if (!tmpSeedLines.some(x => x.line_id === lineData.id)) {\n tmpSeedLines.push({\n line_id: lineData.id,\n line_length: null,\n new_spat: 'EXISTING',\n spat_amount: null,\n spat_source: '',\n });\n }\n }\n if (seedData && seedData.id) {\n if (seedData.expense_items) {\n const items = seedData.expense_items.map(x => ({\n name: x.name,\n amount: x.amount,\n unit_price: Math.round((x.amount / (x.quantity ?? 1)) * 100) / 100,\n quantity: x.quantity ?? 0,\n }));\n setSeedItems(items);\n }\n let tmp = { ...formData };\n for (let k of Object.keys(formData)) {\n let val = (seedData as any)[k];\n if (k === 'planned_date_seed' || k === 'planned_date_harvest') {\n val = val * 1000;\n }\n if ((seedData as any)[k] !== undefined) (tmp as any)[k] = val;\n }\n const i = tmpSeedLines.findIndex(x => x.line_id === lineData?.id);\n if (i > -1) {\n tmpSeedLines[i].new_spat = seedData.spat_storage ? 'EXISTING' : 'NEW';\n tmpSeedLines[i].spat_storage_id = seedData.spat_storage?.id;\n tmpSeedLines[i].spat_source = seedData.spat_storage?.source ?? '';\n tmpSeedLines[i].line_length = seedData.line_length;\n tmpSeedLines[i].spat_amount = seedData.spat_amount;\n }\n if (seedData.spat_storage) {\n tmp.spat_storage_id = seedData.spat_storage.id;\n }\n if (seedData.spat_amount) {\n tmp.spat_amount = seedData.spat_amount;\n }\n if (seedData.line_length) {\n tmp.line_length = seedData.line_length;\n }\n setFormData(tmp);\n }\n setSeedLines(tmpSeedLines);\n }, [lineData, seedData]);\n\n useEffect(() => {\n if (paramData) {\n let tmpLines: ILineItem[] = [];\n const {\n lines,\n custom_values,\n expenses,\n planned_date_seed,\n planned_date_harvest,\n line_length,\n spat_amount,\n spat_storage_id,\n parent_id,\n ...params\n } = paramData;\n if (lines && lines.length > 0) {\n for (const ln of lines) {\n const spat = spatStorages.find(x => x.id === ln.spat_storage_id);\n tmpLines.push({\n line_id: ln.line_id,\n new_spat: spat ? 'EXISTING' : 'NEW',\n spat_storage_id: spat?.id,\n spat_source: ln.spat_source,\n spat_amount: ln.spat_amount,\n line_length: ln.line_length,\n });\n }\n setSeedLines(tmpLines);\n } else if (lineData) {\n setSeedLines([\n {\n line_id: lineData.id,\n line_length: line_length ?? null,\n spat_amount: spat_amount ?? null,\n new_spat: spat_storage_id ? 'EXISTING' : 'NEW',\n spat_storage_id: spat_storage_id ?? undefined,\n spat_source: '',\n },\n ]);\n }\n if (custom_values) {\n const tmpCustom = customFields.map(x => {\n const d = custom_values.find(\n (y: ICustomValue) => y.field_id === x.id,\n );\n return {\n input_type: x.input_type,\n field_label: x.name,\n options: x.options\n ?.split(',')\n .map(t => ({ id: t, label: t, value: t })),\n field_id: x.id,\n field_val: d?.field_val ?? '',\n data_type: x.data_type,\n unit: x.unit,\n };\n });\n setCustomValues(tmpCustom);\n }\n\n if (expenses) {\n setSeedItems(expenses);\n }\n setFormData({\n ...params,\n planned_date_seed: toMillisecond(planned_date_seed),\n planned_date_harvest: toMillisecond(planned_date_harvest),\n });\n }\n }, [paramData, lineData]);\n\n return (\n }\n width={900}\n footer={null}\n >\n {!showConfirm ? (\n
\n
\n \n {translate(lang, 'INVOICE DETAILS')}\n \n
\n {!!warningMessage && (\n
{warningMessage}
\n )}\n {!isEdit ? (\n <>\n
\n
\n x.line_id.toString()) as any}\n onChange={(v: any) => handleChangeSeedLine(v)}\n showSearch={true}\n />\n
\n {seedLines.map((x, i) => (\n
\n
\n \n {translate(\n lang,\n 'Spat and Longline data of %s',\n linesOption.find(y => Number(y.value) === x.line_id)\n ?.label ?? '',\n )}\n \n
\n
\n
\n changeIsNewSpat(i, v)}\n />\n
\n
\n {x.new_spat === 'NEW' ? (\n \n updateSeedLine(i, 'spat_source', e.target.value)\n }\n value={x.spat_source}\n label={translate(lang, 'Spat Source')}\n disabled={isEdit}\n />\n ) : (\n updateSeedLine(i, 'spat_id', v)}\n />\n )}\n
\n
\n
\n
\n \n updateSeedLine(i, 'spat_amount', e.target.value)\n }\n value={x.spat_amount?.toString() ?? ''}\n unit='kg'\n disabled={isEdit}\n />\n
\n
\n \n updateSeedLine(i, 'line_length', e.target.value)\n }\n unit='m'\n disabled={isEdit}\n />\n
\n
\n
\n ))}\n
\n {seedLines.length === 1 && (\n
\n
\n toggleForInsert(e.target.checked)}\n />\n
\n {!!ranges && (\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.season_name} (${defaultDateFormat(\n x.from_date,\n )} - ${defaultDateFormat(x.to_date)})`,\n }))}\n value={formData.parent_id?.toString() ?? undefined}\n onChange={v => updateForm('parent_id', Number(v))}\n />\n
\n )}\n
\n )}\n \n ) : (\n
\n
\n
\n updateForm('spat_storage_id', v)}\n />\n
\n
\n updateForm('spat_amount', e.target.value)}\n value={formData.spat_amount?.toString() ?? ''}\n unit='kg'\n />\n
\n
\n updateForm('line_length', e.target.value)}\n unit='m'\n />\n
\n
\n
\n )}\n
\n
\n
\n setSeasonType(e.target.value)}\n value={seasonType}\n >\n \n \n \n
\n {seasonType === 'old' ? (\n updateForm('season_name', value)}\n options={seasonData}\n value={formData.season_name}\n />\n ) : (\n updateForm('season_name', e.target.value)}\n value={formData.season_name}\n />\n )}\n
\n
\n
\n updateForm('floats', e.target.value)}\n value={formData.floats?.toString() ?? ''}\n />\n
\n
\n
\n {\n setAddSpatSizeRange(e.target.checked);\n if (!e.target.checked) {\n updateForm('spat_size_max', '');\n }\n }}\n disabled={onlyView}\n />\n
\n
\n {addSpatSizeRange ? (\n <>\n
\n updateForm('spat_size', e.target.value)}\n value={formData.spat_size?.toString() ?? ''}\n unit='mm'\n />\n
\n
\n \n updateForm('spat_size_max', e.target.value)\n }\n value={formData.spat_size_max?.toString() ?? ''}\n unit='mm'\n />\n
\n \n ) : (\n
\n updateForm('spat_size', e.target.value)}\n value={formData.spat_size?.toString() ?? ''}\n unit='mm'\n />\n
\n )}\n
\n updateForm('drop', e.target.value)}\n value={formData.drop?.toString() ?? ''}\n unit='m'\n />\n
\n
\n
\n
\n updateForm('submersion', e.target.value)}\n value={formData.submersion?.toString() ?? ''}\n unit='m'\n />\n
\n
\n updateForm('spacing', e.target.value)}\n value={formData.spacing?.toString() ?? ''}\n unit='mm'\n />\n
\n
\n updateForm('density', e.target.value)}\n value={formData.density?.toString() ?? ''}\n unit={formData.density_unit}\n />\n
\n
\n
\n
\n \n e && updateForm('planned_date_seed', e.toDate().getTime())\n }\n />\n
\n
\n \n e &&\n updateForm('planned_date_harvest', e.toDate().getTime())\n }\n />\n
\n
\n
\n
\n \n updateForm('budget_unit_amount', e.target.value)\n }\n value={formData.budget_unit_amount?.toString() ?? ''}\n />\n
\n
\n \n updateForm('budget_unit_price', e.target.value)\n }\n value={formData.budget_unit_price?.toString() ?? ''}\n />\n
\n
\n {customValues.map(x => (\n
\n {x.input_type === 'select' ? (\n <>\n updateCustomValue(x.field_id, v)}\n />\n {(!x.options || x.options.length <= 0) && (\n \n \n {translate(lang, 'Set up field')}\n \n \n )}\n \n ) : (\n \n updateCustomValue(x.field_id, e.target.value)\n }\n unit={x.unit}\n />\n )}\n
\n ))}\n
\n \n
\n
\n updateForm('comment', e.target.value)}\n value={formData.comment ?? ''}\n name='comment'\n />\n
\n
\n
\n \n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n
\n ) : (\n
\n \n {!submittedData && (\n
\n setShowConfirm(false)}\n disabled={disabled}\n >\n {translate(lang, 'Go Back')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n )}\n
\n )}\n \n \n );\n};\n\nexport default MusselGrowerSeedModal;\n","import { Modal } from 'antd';\nimport { IOysterSeeding } from '../../../entities/growing.entities';\nimport { IOysterLineResource } from '../../../entities/farms.entities';\n\ninterface Props {\n visible: boolean;\n lineData?: IOysterLineResource;\n seedData?: IOysterSeeding;\n onClose: (d: any) => void;\n onConfirm: (d: any) => void;\n className?: string;\n onlyView?: boolean;\n}\n\nconst OysterGrowerSeedModal = ({\n visible,\n lineData,\n seedData,\n onClose,\n onConfirm,\n className,\n onlyView,\n}: Props) => {\n return OysterGrowerSeedModal;\n};\n\nexport default OysterGrowerSeedModal;\n","import MusselGrowerSeedModal from './MusselGrowerSeedModal';\nimport OysterGrowerSeedModal from './OysterGrowerSeedModal';\nimport { TBusinessType } from '../../../entities/general.entities';\nimport {\n IMusselSeeding,\n IOysterSeeding,\n ISeedingResource,\n} from '../../../entities/growing.entities';\nimport {\n ILineResource,\n IMusselLineResource,\n IOysterLineResource,\n} from '../../../entities/farms.entities';\nimport '../styles.scss';\n\ninterface Props {\n type: TBusinessType;\n visible: boolean;\n lineData?: ILineResource;\n seedData?: ISeedingResource;\n onClose: (d: any) => void;\n onConfirm: (d: any) => void;\n overConfirm?: (d: any) => Promise;\n confirmID?: number;\n className?: string;\n onlyView?: boolean;\n data?: any;\n warningMessage?: string;\n}\n\nconst GrowerSeedModal = ({\n type,\n visible,\n lineData,\n seedData,\n onClose,\n onConfirm,\n className,\n onlyView,\n overConfirm,\n data,\n warningMessage,\n}: Props) => (\n <>\n {type === 'MUSSEL' ? (\n \n ) : type === 'OYSTER' ? (\n \n ) : (\n <>\n )}\n \n);\n\nexport default GrowerSeedModal;\n","import { useState } from 'react';\nimport { Modal } from 'antd';\nimport { Button, CloseIcon, Subtitle } from '../shared';\nimport { useHistory } from 'react-router-dom';\nimport GrowerHarvestModal from './GrowerHarvestModal';\nimport GrowerMaintenanceModal from './GrowerMaintenanceModal';\nimport GrowerCycleModal from './GrowerCycleModal';\nimport GrowerSeedModal from './GrowerSeedModal';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n visible: boolean;\n onClose: (d: any) => void;\n onConfirm: (d: any) => void;\n className?: string;\n}\n\nconst GrowerImportSelectModal = ({\n visible,\n onClose,\n onConfirm,\n className,\n}: Props) => {\n const history = useHistory();\n const lang = useSelector(selectLang);\n\n const [show, setShow] = useState(visible);\n const [showSeed, setShowSeed] = useState(false);\n const [showHarvest, setShowHarvest] = useState(false);\n const [showMnt, setShowMnt] = useState(false);\n const [showCycle, setShowCycle] = useState(false);\n\n const clickSeed = () => {\n setShow(false);\n setShowMnt(false);\n setShowCycle(false);\n setShowSeed(true);\n };\n const clickHarvest = () => {\n setShow(false);\n setShowSeed(false);\n setShowMnt(false);\n setShowCycle(false);\n setShowHarvest(true);\n };\n const clickAssessment = () => history.push('/import/assessments');\n const clickMntClick = () => {\n setShow(false);\n setShowSeed(false);\n setShowCycle(false);\n setShowHarvest(false);\n setShowMnt(true);\n };\n const cycleClick = () => {\n setShow(false);\n setShowSeed(false);\n setShowMnt(false);\n setShowHarvest(false);\n setShowCycle(true);\n };\n const handleClose = () => {\n setShow(true);\n setShowSeed(false);\n setShowHarvest(false);\n setShowMnt(false);\n setShowCycle(false);\n };\n\n return (\n <>\n }\n width={400}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'What would you like to import?')}\n \n
\n
\n
\n \n {translate(lang, 'Seed')}\n \n
\n
\n \n {translate(lang, 'Assessment')}\n \n
\n
\n \n {translate(lang, 'Harvest')}\n \n
\n
\n \n {translate(lang, 'Maintenance')}\n \n
\n
\n \n {translate(lang, 'Insert past cycle')}\n \n
\n
\n
\n \n {showSeed && (\n \n )}\n {showHarvest && (\n \n )}\n {showMnt && (\n \n )}\n {showCycle && (\n \n )}\n \n );\n};\n\nexport default GrowerImportSelectModal;\n","export default __webpack_public_path__ + \"static/media/farm.1c451967.png\";","export const LINE_COLORS = {\n EMPTY: '#d30202',\n READY_HARVEST: '#409900',\n REQUIRE_ASSESSMENT: '#aeef75',\n CATCH_SPAT: '#c5a800',\n NORMAL: '#16131b',\n};\n","import { useSelector } from 'react-redux';\nimport { ILocation } from '../../../entities/general.entities';\nimport { selectFarmsData } from '../../../store/farms/farms.selector';\nimport { selectUserMeta } from '../../../store/auth/auth.selector';\nimport { useMemo, useState } from 'react';\nimport { getLineStatus } from '../../../lib/farm.helpers';\nimport { LINE_COLORS } from '../../../lib/constant';\nimport { Modal } from 'antd';\nimport CloseIcon from '../CloseIcon';\nimport Subtitle from '../subtitle/Subtitle';\nimport { Map, Button } from '../';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport { ILineResource } from '../../../entities/farms.entities';\nimport ModalFeedbackView from '../feedback/ModalFeedbackView';\n\nconst defaultCenter = {\n lat: -41.0917585,\n lng: 173.828391,\n};\n\ninterface Props {\n visible: boolean;\n onConfirm: (d: ILocation[]) => void;\n onCancel: () => void;\n points?: ILocation[];\n farmID: number;\n lineData?: ILineResource;\n onConfirmNext?: (d: ILocation[]) => void;\n}\n\nconst LineLocationModal = ({\n visible,\n onConfirm,\n onCancel,\n points,\n farmID,\n lineData,\n onConfirmNext,\n}: Props) => {\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n const userMeta = useSelector(selectUserMeta);\n const { polygons, lines, center } = useMemo(() => {\n const polygons = farmsData\n .filter(x => x.bounds && x.bounds.length > 2)\n .map(x => x.bounds as ILocation[]);\n\n let lines = [];\n for (let farm of farmsData) {\n for (let line of farm.lines) {\n if (!line.points || line.points.length < 2) continue;\n const color = getLineStatus(line, userMeta?.line_assess_expire_days);\n lines.push({\n points: line.points,\n color: LINE_COLORS[color],\n });\n }\n }\n const farm = farmsData.find(x => x.id === farmID);\n const center =\n farm && farm.bounds && farm.bounds.length > 0\n ? farm.bounds[0]\n : defaultCenter;\n\n return { polygons, lines, center };\n }, [farmsData, farmID]);\n\n const [firstLoc, setFirstLoc] = useState(\n points && points.length > 0 ? points[0] : null,\n );\n const [secondLoc, setSecondLoc] = useState(\n points && points.length > 1 ? points[1] : null,\n );\n\n const updateLocation = (location: ILocation) => {\n if (!firstLoc) {\n setFirstLoc(location);\n } else if (!secondLoc) {\n setSecondLoc(location);\n } else {\n setFirstLoc(location);\n setSecondLoc(null);\n }\n };\n const confirmClick = () => {\n if (!firstLoc || !secondLoc) {\n window.alert(translate(lang, 'Please select two points'));\n return;\n }\n onConfirm([firstLoc, secondLoc]);\n };\n const confirmNextClick = () => {\n if (!firstLoc || !secondLoc) {\n window.alert(translate(lang, 'Please select two points'));\n return;\n }\n if (onConfirmNext) {\n onConfirmNext([firstLoc, secondLoc]);\n }\n };\n\n const allLines =\n firstLoc && secondLoc\n ? [...lines, { points: [firstLoc, secondLoc], color: 'red' }]\n : [...lines];\n\n return (\n }\n width={1500}\n footer={null}\n centered={true}\n >\n
\n
\n \n {translate(lang, 'Pickup location')}\n {lineData ? ` ${lineData.line_name}` : ''}\n \n
\n
\n
\n
\n 0 ? points[0] : center}\n onCallback={pt => updateLocation(pt)}\n polygons={polygons}\n lines={allLines}\n isStayLocation={true}\n hideMarker={true}\n />\n
\n
\n
\n \n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n {!!onConfirmNext && (\n \n {translate(lang, 'Confirm & Go to next line')}\n \n )}\n
\n
\n \n \n );\n};\n\nexport default LineLocationModal;\n","import { useEffect, useState } from 'react';\nimport { Modal } from 'antd';\nimport {\n IFarmResource,\n ILineGroup,\n ILineResource,\n} from '../../entities/farms.entities';\nimport { Button, CloseIcon, Dropdown, Input, Subtitle } from '../shared';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { sendSingleRequest } from '../../apis';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport { selectFarmingMethods } from '../../store/utils/utils.selector';\nimport LineLocationModal from '../shared/modal/LineLocationModal';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface IFormData {\n line_name: string;\n length: number | null;\n backbone?: number | null;\n points: ILineResource['points'];\n line_group_id: number | null;\n basket_count?: number | null;\n tank_area?: number | null;\n farming_method?: string;\n}\n\nconst defaultForm: IFormData = {\n line_name: '',\n length: null,\n points: null,\n line_group_id: null,\n};\n\ninterface Props {\n visible: boolean;\n lineData: ILineResource;\n onClose: (d?: any) => void;\n title?: string;\n farmData: IFarmResource;\n}\n\nconst LineFormModal = ({\n visible,\n lineData,\n onClose,\n title,\n farmData,\n}: Props) => {\n const dispatch = useDispatch();\n const farmingMethods = useSelector(selectFarmingMethods);\n const lang = useSelector(selectLang);\n\n const [groups, setGroups] = useState([]);\n const [disabled, setDisabled] = useState(false);\n const [form, setForm] = useState({\n ...defaultForm,\n line_name: lineData.line_name,\n backbone: (lineData as any)?.backbone ?? null,\n points: lineData.points ?? null,\n line_group_id:\n (lineData as any)?.line_group?.id ?? defaultForm.line_group_id,\n length: (lineData as any).length ?? null,\n basket_count: (lineData as any)?.basket_count ?? null,\n tank_area: (lineData as any)?.tank_area ?? null,\n farming_method: (lineData as any)?.farming_method ?? null,\n });\n const [visibleMap, setVisibleMap] = useState(false);\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n message: translate(lang, message),\n type: 'error',\n }),\n );\n\n const updateForm = (key: keyof IFormData, val: any) =>\n setForm({ ...form, [key]: val });\n\n const handleChangePoints = (i: number, x: 'lat' | 'lng', v: string) => {\n let points: any = form.points ? [...form.points] : [];\n while (points.length <= i) points.push({ lat: null, lng: null });\n points[i][x] = Number(v);\n setForm(prv => ({ ...prv, points }));\n };\n\n const confirmClick = async () => {\n if (form.line_name.length <= 0) {\n showError('Please enter valid line name');\n return;\n }\n if (farmData.type === 'MUSSEL') {\n if (!form.length) {\n showError('Please enter valid line length');\n return;\n }\n if (!form.backbone) {\n showError('Please enter valid backbone');\n return;\n }\n } else if (farmData.type === 'OYSTER') {\n if (!form.length) {\n showError('Please enter valid line length');\n return;\n }\n if (!form.farming_method) {\n showError('Please select farming method');\n return;\n }\n if (!form.basket_count) {\n showError('Please enter valid number of baskets');\n return;\n }\n } else {\n if (!form.tank_area) {\n showError('Please enter valid tank area');\n return;\n }\n }\n setDisabled(true);\n const response = await sendSingleRequest(\n { line_id: lineData.id, ...form },\n 'PUT',\n `api/farm/line/lines/${lineData.id}`,\n true,\n );\n if (response.status) {\n await dispatch(loadFarmsData());\n setDisabled(false);\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, 'Line updated successfully'),\n type: 'success',\n }),\n );\n onClose(true);\n } else {\n setDisabled(false);\n showError(response.data?.message ?? 'Failed to update the line');\n }\n };\n\n useEffect(() => {\n sendSingleRequest(\n { farm_id: lineData.farm_id },\n 'GET',\n 'api/line-group',\n true,\n ).then(res => {\n if (res.status) {\n setGroups(res.data);\n } else {\n showError(res.data?.message ?? 'Failed to load line groups');\n }\n });\n }, [lineData]);\n\n const groupsOption = [\n { id: '-1', value: '', label: '(None)' },\n ...groups.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n })),\n ];\n\n return (\n }\n footer={null}\n width={650}\n >\n
\n
\n \n {translate(lang, title ?? 'Edit line details')}\n \n
\n
\n updateForm('line_name', e.target.value)}\n />\n
\n {['MUSSEL', 'OYSTER'].includes(farmData.type) && (\n
\n \n updateForm(\n 'length',\n e.target.value.length <= 0 ? null : Number(e.target.value),\n )\n }\n />\n
\n )}\n {farmData.type === 'MUSSEL' ? (\n
\n \n updateForm(\n 'backbone',\n e.target.value.length <= 0 ? null : Number(e.target.value),\n )\n }\n />\n
\n ) : farmData.type === 'OYSTER' ? (\n <>\n
\n ({\n id: x.name,\n value: x.name,\n label: x.name,\n }))}\n value={form.farming_method}\n onChange={v => updateForm('farming_method', v)}\n />\n
\n
\n \n updateForm(\n 'basket_count',\n e.target.value.length <= 0 ? null : Number(e.target.value),\n )\n }\n />\n
\n \n ) : (\n
\n \n updateForm(\n 'tank_area',\n e.target.value.length <= 0 ? null : Number(e.target.value),\n )\n }\n />\n
\n )}\n
\n {[0, 1].map(x => (\n
\n
\n x\n ? form.points[x].lat?.toString() ?? ''\n : ''\n }\n onChange={e => handleChangePoints(x, 'lat', e.target.value)}\n />\n
\n
\n x\n ? form.points[x].lng?.toString() ?? ''\n : ''\n }\n onChange={e => handleChangePoints(x, 'lng', e.target.value)}\n />\n
\n
\n setVisibleMap(true)}\n >\n {translate(lang, 'Pickup')}\n \n
\n
\n ))}\n
\n
\n \n updateForm('line_group_id', v.length <= 0 ? null : Number(v))\n }\n />\n
\n
\n {visibleMap && (\n {\n updateForm('points', points);\n setVisibleMap(false);\n }}\n onCancel={() => setVisibleMap(false)}\n lineData={lineData}\n />\n )}\n
\n \n {translate(lang, 'Close')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n \n \n );\n};\n\nexport default LineFormModal;\n","import {\n IInventorySum,\n IPendingInventory,\n} from '../entities/inventory.entities';\n\nexport const LineInventoriesLabel = (inventories: IPendingInventory[]) =>\n inventories.map(x => (\n \n \n {x.name} - {x.pending_quantity}\n \n
\n
\n ));\n\nexport const SeedInventoriesLabel = (ivt_seeds: IInventorySum[]) =>\n ivt_seeds.map(x => (\n \n \n {x.inventory_name} - {x.quantity}\n \n
\n
\n ));\n","import { Button, Modal } from 'antd';\nimport { useState } from 'react';\nimport { sendSingleRequest } from '../../apis';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport ReactImageGallery from 'react-image-gallery';\n\ninterface IImage {\n original: string;\n thumbnail: string;\n originalTitle: string;\n description: string;\n date: number;\n}\n\ninterface Props {\n lineID: number;\n label: string;\n}\n\nconst PhotosViewButton = ({ lineID, label }: Props) => {\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [images, setImages] = useState();\n\n const onViewClick = async () => {\n setDisabled(true);\n const response = await sendSingleRequest(\n {},\n 'GET',\n `api/farm/line/lines/${lineID}`,\n true,\n );\n setDisabled(false);\n\n if (response.status) {\n const cycles: any[] = response.data?.cycles ?? [];\n let tmp: IImage[] = [];\n for (let cycle of cycles) {\n for (let x of cycle.assessments) {\n if (x.images && x.images.length > 0) {\n for (let img of x.images) {\n const str = `${translate(\n lang,\n 'Assessment',\n )} - ${defaultDateFormat(x.assessment_date)}`;\n tmp.push({\n original: img,\n thumbnail: img,\n originalTitle: str,\n description: str,\n date: x.assessment_date,\n });\n }\n }\n }\n for (let x of cycle.harvests) {\n if (x.images && x.images.length > 0) {\n for (let img of x.images) {\n const str = `${translate(lang, 'Harvest')} - ${defaultDateFormat(\n x.complete_date,\n )}`;\n tmp.push({\n original: img,\n thumbnail: img,\n originalTitle: str,\n description: str,\n date: x.complete_date,\n });\n }\n }\n }\n for (let x of cycle.maintenances) {\n if (x.images && x.images.length > 0) {\n for (let img of x.images) {\n const str = `${translate(\n lang,\n 'Maintenance',\n )} - ${defaultDateFormat(x.maintain_date)}`;\n tmp.push({\n original: img,\n thumbnail: img,\n originalTitle: str,\n description: str,\n date: x.maintain_date,\n });\n }\n }\n }\n for (let x of cycle.seedings) {\n if (x.images && x.images.length > 0) {\n for (let img of x.images) {\n const str = `${translate(lang, 'Seeding')} - ${defaultDateFormat(\n x.planned_date_seed,\n )}`;\n tmp.push({\n original: img,\n thumbnail: img,\n originalTitle: str,\n description: str,\n date: x.planned_date_seed,\n });\n }\n }\n }\n }\n tmp.sort((a, b) => b.date - a.date);\n\n if (tmp.length <= 0) {\n alert(translate(lang, 'No photos found'));\n } else {\n setImages(tmp);\n }\n } else {\n alert(translate(lang, response.data?.message ?? 'Unknown error'));\n }\n };\n\n return (\n <>\n \n {images !== undefined && (\n setImages(undefined)}\n onCancel={() => setImages(undefined)}\n width={1000}\n >\n \n \n )}\n \n );\n};\n\nexport default PhotosViewButton;\n","import { useDispatch, useSelector } from 'react-redux';\nimport {\n customSpecialValue,\n formatNumber,\n} from '../../../../entities/util-functions';\nimport {\n defaultDateFormat,\n toMillisecond,\n} from '../../../../util/toggleSecondMillisecond';\nimport PositiveNegativeTitle from '../../positive-negative-title/PositiveNegativeTitle';\nimport Subtitle from '../../subtitle/Subtitle';\nimport {\n selectAccount,\n selectUserMeta,\n} from '../../../../store/auth/auth.selector';\nimport { Table } from 'antd';\nimport { useEffect, useRef, useState } from 'react';\nimport { sendSingleRequest } from '../../../../apis';\nimport { loadFarmsData } from '../../../../store/farms/farms.actions';\nimport { showFeedback } from '../../../../store/ui/ui.actions';\nimport useMenuHandler from '../useMenuHandler';\nimport LineFormModal from '../../../farm-modals/LineFormModal';\nimport {\n IMusselFarm,\n IMusselLineResource,\n} from '../../../../entities/farms.entities';\nimport {\n amountDays,\n calcLineLastSize,\n getEstHarvestDate,\n getLineStatus,\n} from '../../../../lib/farm.helpers';\nimport { compareString, labelNumber } from '../../../../lib/common.helpers';\nimport { selectLang } from '../../../../store/ui/ui.selector';\nimport { translate } from '../../../../lib/lang.helper';\nimport {\n SelectAssessFields,\n SelectIsEditable,\n} from '../../../../store/extra/extra.selector';\nimport moment from 'moment';\nimport { SeedInventoriesLabel } from '../../../CommonViews';\nimport DotsMenu from '../../dropdown-menu/DotsMenu';\nimport PhotosViewButton from '../../../lines/PhotosViewButton';\n\ninterface Props {\n linesData: IMusselLineResource[];\n isChild?: boolean;\n farmData: IMusselFarm;\n onEditLineLocation: (line: IMusselLineResource) => void;\n}\n\nconst MusselLinesTable = ({\n farmData,\n linesData,\n isChild,\n onEditLineLocation,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const userMeta = useSelector(selectUserMeta);\n const customFields = SelectAssessFields(farmData.id);\n const isEditable = SelectIsEditable(farmData.id);\n const hiddenColumns = useSelector(selectAccount)?.mussel_line_hidden_columns;\n const columnsOrder = useSelector(selectAccount)?.mussel_line_columns_order;\n const { redirectToLine } = useMenuHandler();\n\n const [editLine, setEditLine] = useState();\n\n const deleteLine = async (line: IMusselLineResource) => {\n if (!window.confirm('Are you sure you want to delete this line?')) return;\n const response = await sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/line/lines/${line.id}`,\n true,\n );\n if (response.status) {\n await dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Line deleted successfully',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Unknown error',\n }),\n );\n }\n };\n const changeTable = async (pagination: any, filter: any, sorter: any) => {\n const columnKey: any = sorter?.columnKey;\n const orders: any = sorter?.order;\n const data = { columnKey, orders, farmId: farmData.id };\n await sendSingleRequest(data, 'POST', 'api/farm/line-sorting', true);\n };\n\n const tempColumns = [\n {\n title: 'Line',\n key: 'line_name',\n defaultSortOrder: null,\n sorter: (a: IMusselLineResource, b: IMusselLineResource) =>\n compareString(a.line_name, b.line_name),\n render: (x: IMusselLineResource) => (\n {x.line_name}\n ),\n },\n {\n title: 'Length',\n key: 'length',\n defaultSortOrder: null,\n sorter: (a: IMusselLineResource, b: IMusselLineResource) =>\n a.length - b.length,\n render: (line: IMusselLineResource) => (\n <>\n \n {line.growing_cycle\n ? line.growing_cycle.current_line_length\n : line.length}\n \n m\n \n ),\n },\n {\n title: 'Date seeded',\n key: 'seeded_date',\n defaultSortOrder: null,\n sorter: (a: IMusselLineResource, b: IMusselLineResource) => {\n if (a.growing_cycle) {\n return (\n Number(a.growing_cycle.main_seed.planned_date_seed) -\n Number(b.growing_cycle?.main_seed.planned_date_seed)\n );\n } else {\n return (a.line_idle ?? 0) - (b.line_idle ?? 0);\n }\n },\n render: (line: IMusselLineResource) => (\n <>\n {line.growing_cycle ? (\n defaultDateFormat(line.growing_cycle.main_seed.planned_date_seed)\n ) : (\n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(line.line_idle)}\n \n
\n )}\n \n ),\n },\n {\n title: 'Planned harvest date',\n key: 'planned_date',\n defaultSortOrder: null,\n sorter: (a: IMusselLineResource, b: IMusselLineResource) =>\n (getEstHarvestDate(a) ?? 0) - (getEstHarvestDate(b) ?? 0),\n render: (line: IMusselLineResource) => {\n return {defaultDateFormat(getEstHarvestDate(line))};\n },\n },\n {\n title: 'Seed type',\n defaultSortOrder: null,\n key: 'seed',\n render: (line: IMusselLineResource) => (\n \n {line.growing_cycle?.main_seed.spat_storage?.seed_type ?? '-'}\n \n ),\n },\n {\n title: 'Last assessment date',\n key: 'last_assessment',\n defaultSortOrder: null,\n render: (line: IMusselLineResource) => {\n const x = line.growing_cycle?.last_assessment?.assessment_date;\n const d =\n getLineStatus(line, userMeta?.line_assess_expire_days) ===\n 'REQUIRE_ASSESSMENT';\n return (\n \n {defaultDateFormat(x, '-')}\n \n );\n },\n },\n {\n title: 'Avg.Size',\n key: 'condition',\n defaultSortOrder: null,\n sorter: (a: IMusselLineResource, b: IMusselLineResource) =>\n (calcLineLastSize(a)?.avg ?? 0) - (calcLineLastSize(b)?.avg ?? 0),\n render: (line: IMusselLineResource) =>\n line.growing_cycle ? (\n \n {labelNumber(calcLineLastSize(line)?.avg, 'mm')}\n \n ) : (\n ''\n ),\n },\n {\n title: 'Line group',\n key: 'line_group',\n sorter: (a: IMusselLineResource, b: IMusselLineResource) =>\n compareString(a.line_group?.name ?? '', b.line_group?.name ?? ''),\n render: (d: IMusselLineResource) => (\n {d.line_group?.name ?? ''}\n ),\n },\n {\n title: 'Batch seeded',\n key: 'spat_storage',\n render: (d: IMusselLineResource) => (\n {d.growing_cycle?.main_seed.spat_storage?.source ?? '-'}\n ),\n },\n {\n title: 'Days growth',\n key: 'growth_days',\n render: (d: IMusselLineResource) => (\n \n {d.growing_cycle\n ? amountDays(\n moment().diff(\n toMillisecond(d.growing_cycle.main_seed.planned_date_seed),\n 'days',\n ),\n )\n : '-'}\n \n ),\n sorter: (a: IMusselLineResource, b: IMusselLineResource) => {\n if (a.growing_cycle) {\n return (\n Number(a.growing_cycle.main_seed.planned_date_seed) -\n Number(b.growing_cycle?.main_seed.planned_date_seed)\n );\n } else {\n return (a.line_idle ?? 0) - (b.line_idle ?? 0);\n }\n },\n },\n {\n title: 'Inventory',\n key: 'inventory',\n render: (d: IMusselLineResource) => (\n
\n {d.growing_cycle?.inventories_sum\n ? SeedInventoriesLabel(d.growing_cycle?.inventories_sum)\n : '-'}\n
\n ),\n sorter: (a: IMusselLineResource, b: IMusselLineResource) => {\n if (a.growing_cycle) {\n return b.growing_cycle\n ? a.growing_cycle.inventories_sum.reduce(\n (p, c) => p + c.quantity,\n 0,\n ) -\n b.growing_cycle.inventories_sum.reduce(\n (p, c) => p + c.quantity,\n 0,\n )\n : 1;\n } else {\n return b.growing_cycle ? 1 : 0;\n }\n },\n },\n {\n title: 'Line Fill Percentage',\n key: 'fill_percent',\n render: (d: IMusselLineResource) => (\n
{!d.fill_percent ? '-' : `${d.fill_percent} %`}
\n ),\n sorter: (a: IMusselLineResource, b: IMusselLineResource) =>\n (a.fill_percent ?? 0) - (b.fill_percent ?? 0),\n },\n {\n title: 'Est amount',\n key: 'est_amount',\n render: (d: IMusselLineResource) =>\n !d.growing_cycle?.estimated_amount ? (\n '-'\n ) : (\n {`${formatNumber(d.growing_cycle?.estimated_amount)} kg`}\n ),\n sorter: (a: IMusselLineResource, b: IMusselLineResource) =>\n (a.growing_cycle?.estimated_amount ?? 0) -\n (b.growing_cycle?.estimated_amount ?? 0),\n },\n {\n title: 'Photo',\n key: 'photo',\n render: (x: IMusselLineResource) => (\n e.stopPropagation()}>\n \n \n ),\n },\n {\n title: 'Comment',\n key: 'comment',\n render: (x: IMusselLineResource) => (\n
\n {x.growing_cycle?.last_assessment?.comment}\n
\n ),\n },\n {\n title: '',\n key: 'more',\n render: (d: IMusselLineResource) => (\n
\n {isEditable && (\n setEditLine(d),\n },\n {\n label: translate(lang, 'Location'),\n onClick: () => onEditLineLocation(d),\n },\n {\n label: translate(lang, 'Delete'),\n onClick: () => deleteLine(d),\n },\n ]}\n />\n )}\n
\n ),\n },\n ]\n .filter(x => !x.title || !hiddenColumns?.includes(x.title))\n .map(x => ({\n ...x,\n title: translate(lang, x.title),\n }));\n\n const columns =\n columnsOrder !== undefined && columnsOrder.length > 0\n ? [\n ...columnsOrder\n .map(orderKey => tempColumns.find(col => col.title === orderKey))\n .filter((col): col is (typeof tempColumns)[number] => Boolean(col)),\n ...tempColumns.filter(col => !columnsOrder.includes(col.title)),\n ]\n : tempColumns;\n\n const topScrollRef = useRef(null);\n const bottomScrollRef = useRef(null);\n\n const handleTopScroll = () => {\n if (bottomScrollRef.current && topScrollRef.current) {\n bottomScrollRef.current.scrollLeft = topScrollRef.current.scrollLeft;\n }\n };\n const handleBottomScroll = () => {\n if (topScrollRef.current && bottomScrollRef.current) {\n topScrollRef.current.scrollLeft = bottomScrollRef.current.scrollLeft;\n }\n };\n\n useEffect(() => {\n const scrollTop = window.document.getElementById('lines-table-scroll-top');\n const tables = window.document.getElementsByClassName('table--lines');\n if (scrollTop && tables.length > 0) {\n scrollTop.style.width = `${tables[0].clientWidth}px`;\n }\n }, [linesData]);\n\n return (\n
\n \n
\n
\n \n ({\n onClick: () => redirectToLine(dataRow.farm_id, dataRow.id),\n })}\n onChange={changeTable}\n scroll={{ x: 'max-content' }}\n />\n
\n {editLine && (\n setEditLine(undefined)}\n title='Edit line details'\n farmData={farmData}\n />\n )}\n \n );\n};\n\nexport default MusselLinesTable;\n","import { defaultDateFormat } from '../../../../util/toggleSecondMillisecond';\nimport Subtitle from '../../subtitle/Subtitle';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n selectAccount,\n selectUserMeta,\n} from '../../../../store/auth/auth.selector';\nimport { Table } from 'antd';\nimport { useEffect, useRef, useState } from 'react';\nimport { sendSingleRequest } from '../../../../apis';\nimport { loadFarmsData } from '../../../../store/farms/farms.actions';\nimport { showFeedback } from '../../../../store/ui/ui.actions';\nimport useMenuHandler from '../useMenuHandler';\nimport LineFormModal from '../../../farm-modals/LineFormModal';\nimport {\n IOysterFarm,\n IOysterLineResource,\n} from '../../../../entities/farms.entities';\nimport {\n calcDiffDays,\n compareString,\n labelNumber,\n} from '../../../../lib/common.helpers';\nimport {\n amountDays,\n calcLineLastSize,\n getLineOysters,\n getLineStatus,\n} from '../../../../lib/farm.helpers';\nimport { formatNumber } from '../../../../entities/util-functions';\nimport { selectLang } from '../../../../store/ui/ui.selector';\nimport { translate } from '../../../../lib/lang.helper';\nimport { SelectIsEditable } from '../../../../store/extra/extra.selector';\nimport DotsMenu from '../../dropdown-menu/DotsMenu';\nimport PhotosViewButton from '../../../lines/PhotosViewButton';\n\ninterface Props {\n farmData: IOysterFarm;\n linesData: IOysterLineResource[];\n isChild?: boolean;\n onEditLineLocation: (line: IOysterLineResource) => void;\n}\n\nconst OysterLinesTable = ({\n farmData,\n linesData,\n isChild,\n onEditLineLocation,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const userMeta = useSelector(selectUserMeta);\n const { redirectToLine } = useMenuHandler();\n const isEditable = SelectIsEditable(farmData.id);\n const hiddenColumns = useSelector(selectAccount)?.oyster_line_hidden_columns;\n const columnsOrder = useSelector(selectAccount)?.oyster_line_columns_order;\n\n const [editLine, setEditLine] = useState();\n\n const deleteLine = async (line: IOysterLineResource) => {\n if (!window.confirm('Are you sure you want to delete this line?')) return;\n const response = await sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/line/lines/${line.id}`,\n true,\n );\n if (response.status) {\n await dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Line deleted successfully',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, response.data?.message ?? 'Unknown error'),\n }),\n );\n }\n };\n const changeTable = async (pagination: any, filter: any, sorter: any) => {\n const columnKey: any = sorter?.columnKey;\n const orders: any = sorter?.order;\n const data = { columnKey, orders, farmId: farmData.id };\n await sendSingleRequest(data, 'POST', 'api/farm/line-sorting', true);\n };\n\n const tempColumns = [\n {\n title: 'Line',\n key: 'line_name',\n sorter: (a: IOysterLineResource, b: IOysterLineResource) =>\n compareString(a.line_name, b.line_name),\n render: (x: IOysterLineResource) => {x.line_name},\n },\n {\n title: 'Length',\n key: 'length',\n sorter: (a: IOysterLineResource, b: IOysterLineResource) =>\n a.length - b.length,\n render: (x: IOysterLineResource) => {`${x.length} m`},\n },\n {\n title: 'Date seeded',\n key: 'seed_date',\n sorter: (a: IOysterLineResource, b: IOysterLineResource) => {\n if (a.growing_cycle) {\n return (\n Number(a.growing_cycle.main_seed.planned_date_seed) -\n Number(b.growing_cycle?.main_seed.planned_date_seed)\n );\n } else {\n return (a.line_idle ?? 0) - (b.line_idle ?? 0);\n }\n },\n render: (x: IOysterLineResource) =>\n x.growing_cycle ? (\n defaultDateFormat(x.growing_cycle.main_seed.planned_date_seed)\n ) : (\n
\n Line empty\n \n {amountDays(x.line_idle)}\n \n
\n ),\n },\n {\n title: 'Last assessment date',\n key: 'last_assessment',\n render: (line: IOysterLineResource) => {\n const x = line.growing_cycle?.last_assessment?.assessment_date;\n const d =\n getLineStatus(line, userMeta?.line_assess_expire_days) ===\n 'REQUIRE_ASSESSMENT';\n return (\n \n {defaultDateFormat(x, '-')}\n \n );\n },\n },\n {\n title: 'Avg.Size',\n key: 'condition',\n defaultSortOrder: null,\n sorter: (a: IOysterLineResource, b: IOysterLineResource) =>\n (calcLineLastSize(a)?.avg ?? 0) - (calcLineLastSize(b)?.avg ?? 0),\n render: (line: IOysterLineResource) =>\n line.growing_cycle ? (\n {labelNumber(calcLineLastSize(line)?.avg, 'mm')}\n ) : (\n ''\n ),\n },\n {\n title: 'Inventory',\n key: 'farming_method',\n render: (line: IOysterLineResource) => {line.farming_method},\n },\n {\n title: 'Number of baskets',\n key: 'basket_count',\n sorter: (a: IOysterLineResource, b: IOysterLineResource) =>\n a.basket_count - b.basket_count,\n render: (x: IOysterLineResource) =>\n x.growing_cycle ? (\n \n {`${x.growing_cycle.current_basket_count}/${\n x.basket_count\n } (${formatNumber(\n (x.growing_cycle.current_basket_count * 100) / x.basket_count,\n )}%)`}\n \n ) : (\n {`-/${x.basket_count}`}\n ),\n },\n {\n title: 'Batch seeded',\n key: 'spat_storage',\n render: (x: IOysterLineResource) => (\n {x.growing_cycle?.main_seed.spat_storage?.source ?? '-'}\n ),\n },\n {\n title: 'Days growth',\n key: 'growth_days',\n render: (d: IOysterLineResource) => (\n \n {d.growing_cycle\n ? amountDays(\n calcDiffDays(d.growing_cycle.main_seed.planned_date_seed),\n )\n : '-'}\n \n ),\n \n sorter: (a: IOysterLineResource, b: IOysterLineResource) => {\n if (a.growing_cycle) {\n return (\n Number(a.growing_cycle.main_seed.planned_date_seed) -\n Number(b.growing_cycle?.main_seed.planned_date_seed)\n );\n } else {\n return (a.line_idle ?? 0) - (b.line_idle ?? 0);\n }\n },\n },\n {\n title: 'Photo',\n key: 'photo',\n render: (x: IOysterLineResource) => (\n e.stopPropagation()}>\n \n \n ),\n },\n {\n title: 'Comment',\n key: 'comment',\n render: (x: IOysterLineResource) =>
{x.growing_cycle?.last_assessment?.comment}
,\n },\n {\n title: 'Est amount',\n key: 'est_amount',\n render: (d: IOysterLineResource) => {\n const estAmt = getLineOysters(d);\n return {estAmt ? `${formatNumber(estAmt)} dz` : '-'};\n },\n sorter: (a: IOysterLineResource, b: IOysterLineResource) =>\n (getLineOysters(a) ?? 0) - (getLineOysters(b) ?? 0),\n },\n {\n title: '',\n key: 'more',\n render: (d: IOysterLineResource) => (\n
\n {isEditable && (\n setEditLine(d),\n },\n {\n label: translate(lang, 'Location'),\n onClick: () => onEditLineLocation(d),\n },\n {\n label: translate(lang, 'Delete'),\n onClick: () => deleteLine(d),\n },\n ]}\n />\n )}\n
\n ),\n },\n ]\n .filter(x => !x.title || !hiddenColumns?.includes(x.title))\n .map(x => ({\n ...x,\n title: translate(lang, x.title),\n }));\n\n \n const columns = (columnsOrder !== undefined && columnsOrder.length > 0)\n ? [\n ...columnsOrder\n .map(orderKey => tempColumns.find(col => col.title === orderKey))\n .filter((col): col is typeof tempColumns[number] => Boolean(col)),\n ...tempColumns.filter(col => !columnsOrder.includes(col.title))\n ]\n : tempColumns;\n \n\n const topScrollRef = useRef(null);\n const bottomScrollRef = useRef(null);\n\n const handleTopScroll = () => {\n if (bottomScrollRef.current && topScrollRef.current) {\n bottomScrollRef.current.scrollLeft = topScrollRef.current.scrollLeft;\n }\n };\n const handleBottomScroll = () => {\n if (topScrollRef.current && bottomScrollRef.current) {\n topScrollRef.current.scrollLeft = bottomScrollRef.current.scrollLeft;\n }\n };\n\n useEffect(() => {\n const scrollTop = window.document.getElementById('lines-table-scroll-top');\n const tables = window.document.getElementsByClassName('table--lines');\n if (scrollTop && tables.length > 0) {\n scrollTop.style.width = `${tables[0].clientWidth}px`;\n }\n }, [linesData]);\n\n return (\n
\n \n
\n
\n \n ({\n onClick: () => redirectToLine(dataRow.farm_id, dataRow.id),\n })}\n onChange={changeTable}\n />\n
\n {editLine && (\n setEditLine(undefined)}\n title='Edit line details'\n farmData={farmData}\n />\n )}\n \n );\n};\n\nexport default OysterLinesTable;\n","import { useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n ISeaweedFarm,\n ISeaweedLineResource,\n} from '../../../../entities/farms.entities';\nimport { selectUserMeta, selectAccount } from '../../../../store/auth/auth.selector';\nimport useMenuHandler from '../useMenuHandler';\nimport { Table } from 'antd';\nimport classNames from 'classnames';\nimport LineFormModal from '../../../farm-modals/LineFormModal';\nimport { defaultDateFormat } from '../../../../util/toggleSecondMillisecond';\nimport Subtitle from '../../subtitle/Subtitle';\nimport { sendSingleRequest } from '../../../../apis';\nimport { loadFarmsData } from '../../../../store/farms/farms.actions';\nimport { showFeedback } from '../../../../store/ui/ui.actions';\nimport { compareString, labelNumber } from '../../../../lib/common.helpers';\nimport {\n amountDays,\n calcLineLastSize,\n getLineStatus,\n} from '../../../../lib/farm.helpers';\nimport { selectLang } from '../../../../store/ui/ui.selector';\nimport { translate } from '../../../../lib/lang.helper';\nimport { SelectIsEditable } from '../../../../store/extra/extra.selector';\nimport DotsMenu from '../../dropdown-menu/DotsMenu';\n\ninterface Props {\n linesData: ISeaweedLineResource[];\n farmData: ISeaweedFarm;\n isChild?: boolean;\n onEditLineLocation: (line: ISeaweedLineResource) => void;\n}\n\nconst SeaweedLinesTable = ({\n linesData,\n farmData,\n isChild,\n onEditLineLocation,\n}: Props) => {\n const dispatch = useDispatch();\n\n const userMeta = useSelector(selectUserMeta);\n const { redirectToLine } = useMenuHandler();\n const lang = useSelector(selectLang);\n const isEditable = SelectIsEditable(farmData.id);\n const columnsOrder = useSelector(selectAccount)?.mussel_line_columns_order;\n const [editLine, setEditLine] = useState();\n\n const deleteLine = async (line: ISeaweedLineResource) => {\n if (!window.confirm('Are you sure you want to delete this line?')) return;\n const response = await sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/line/lines/${line.id}`,\n true,\n );\n if (response.status) {\n await dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Line deleted successfully',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Unknown error',\n }),\n );\n }\n };\n const changeTable = async (pagination: any, filter: any, sorter: any) => {\n const columnKey: any = sorter?.columnKey;\n const orders: any = sorter?.order;\n const data = { columnKey, orders, farmId: farmData.id };\n await sendSingleRequest(data, 'POST', 'api/farm/line-sorting', true);\n };\n const tempColumns = [\n {\n title: translate(lang, 'Line'),\n key: 'line_name',\n sorter: (a: ISeaweedLineResource, b: ISeaweedLineResource) =>\n compareString(a.line_name, b.line_name),\n render: (x: ISeaweedLineResource) => {x.line_name},\n },\n {\n title: translate(lang, 'Tank area'),\n key: 'tank_area',\n sorter: (a: ISeaweedLineResource, b: ISeaweedLineResource) =>\n a.tank_area - b.tank_area,\n render: (x: ISeaweedLineResource) => {`${x.tank_area} m²`},\n },\n {\n title: translate(lang, 'Date Seed'),\n key: 'seed_date',\n sorter: (a: ISeaweedLineResource, b: ISeaweedLineResource) => {\n if (a.growing_cycle) {\n return (\n Number(a.growing_cycle.main_seed.planned_date_seed) -\n Number(b.growing_cycle?.main_seed.planned_date_seed)\n );\n } else {\n return (a.line_idle ?? 0) - (b.line_idle ?? 0);\n }\n },\n render: (x: ISeaweedLineResource) =>\n x.growing_cycle ? (\n defaultDateFormat(x.growing_cycle.main_seed.planned_date_seed)\n ) : (\n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(x.line_idle)}\n \n
\n ),\n },\n {\n title: translate(lang, 'Last assessment date'),\n key: 'last_assessment',\n render: (line: ISeaweedLineResource) => {\n const x = line.growing_cycle?.last_assessment?.assessment_date;\n const d =\n getLineStatus(line, userMeta?.line_assess_expire_days) ===\n 'REQUIRE_ASSESSMENT';\n return (\n \n {defaultDateFormat(x, '-')}\n \n );\n },\n },\n {\n title: translate(lang, 'Avg. Size'),\n key: 'condition',\n defaultSortOrder: null,\n sorter: (a: ISeaweedLineResource, b: ISeaweedLineResource) =>\n (calcLineLastSize(a)?.avg ?? 0) - (calcLineLastSize(b)?.avg ?? 0),\n render: (line: ISeaweedLineResource) => (\n {labelNumber(calcLineLastSize(line)?.avg, 'mm')}\n ),\n },\n {\n title: '',\n key: 'more',\n render: (d: ISeaweedLineResource) => (\n
\n {isEditable && (\n setEditLine(d),\n },\n {\n label: translate(lang, 'Location'),\n onClick: () => onEditLineLocation(d),\n },\n {\n label: translate(lang, 'Delete'),\n onClick: () => deleteLine(d),\n },\n ]}\n />\n )}\n
\n ),\n },\n ];\n\n const columns = (columnsOrder !== undefined && columnsOrder.length > 0) ? columnsOrder\n .map(orderKey => tempColumns.find(col => col.title === orderKey))\n .filter((col): col is typeof tempColumns[number] => Boolean(col)) : tempColumns;\n \n const topScrollRef = useRef(null);\n const bottomScrollRef = useRef(null);\n\n const handleTopScroll = () => {\n if (bottomScrollRef.current && topScrollRef.current) {\n bottomScrollRef.current.scrollLeft = topScrollRef.current.scrollLeft;\n }\n };\n const handleBottomScroll = () => {\n if (topScrollRef.current && bottomScrollRef.current) {\n topScrollRef.current.scrollLeft = bottomScrollRef.current.scrollLeft;\n }\n };\n\n useEffect(() => {\n const scrollTop = window.document.getElementById('lines-table-scroll-top');\n const tables = window.document.getElementsByClassName('table--lines');\n if (scrollTop && tables.length > 0) {\n scrollTop.style.width = `${tables[0].clientWidth}px`;\n }\n }, [linesData]);\n\n return (\n
\n \n
\n
\n \n ({\n onClick: () => redirectToLine(dataRow.farm_id, dataRow.id),\n })}\n onChange={changeTable}\n />\n
\n {editLine && (\n setEditLine(undefined)}\n title='Edit line details'\n farmData={farmData}\n />\n )}\n \n );\n};\n\nexport default SeaweedLinesTable;\n","import { Modal } from 'antd';\nimport { TBusinessType } from '../../entities/general.entities';\nimport { translate } from '../../lib/lang.helper';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { selectAccount } from '../../store/auth/auth.selector';\nimport { CheckboxButton } from '../shared';\nimport { useState } from 'react';\nimport { updateAccountSetting } from '../../store/auth/auth.actions';\n\nconst musselColumns = [\n 'Line',\n 'Length',\n 'Date seeded',\n 'Planned harvest date',\n 'Seed type',\n 'Last assessment date',\n 'Avg.Size',\n 'Line group',\n 'Batch seeded',\n 'Days growth',\n 'Inventory',\n 'Line Fill Percentage',\n 'Est amount',\n 'Photo',\n 'Comment',\n ],\n oysterColumns = [\n 'Line',\n 'Length',\n 'Date seeded',\n 'Last assessment date',\n 'Avg.Size',\n 'Inventory',\n 'Number of baskets',\n 'Days growth',\n 'Est amount',\n 'Photo',\n 'Batch seeded',\n 'Comment',\n ],\n seaweedColumns = ['Line', 'Length', 'Date seeded'];\n\ninterface Props {\n type: TBusinessType;\n visible: boolean;\n onClose: () => void;\n}\n\nconst LineColumnModifyModal = ({ type, visible, onClose }: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const accSetting = useSelector(selectAccount);\n const musselHidden = accSetting?.mussel_line_hidden_columns ?? [],\n oysterHidden = accSetting?.oyster_line_hidden_columns ?? [],\n seaweedHidden = accSetting?.seaweed_line_hidden_columns ?? [];\n\n const musselOrder = accSetting?.mussel_line_columns_order ?? [],\n oysterOrder = accSetting?.oyster_line_columns_order ?? [],\n seaweedOrder = accSetting?.seaweed_line_columns_order ?? [];\n\n const initialColumns =\n type === 'MUSSEL'\n ? musselOrder.length > 0\n ? musselOrder\n : musselColumns\n : type === 'OYSTER'\n ? oysterOrder.length > 0\n ? oysterOrder\n : oysterColumns\n : seaweedOrder.length > 0\n ? seaweedOrder\n : seaweedColumns;\n\n if (type === 'MUSSEL') {\n musselColumns.forEach(column => {\n if (!initialColumns.includes(column)) {\n initialColumns.push(column);\n }\n });\n }\n\n if (type === 'OYSTER') {\n oysterColumns.forEach(column => {\n if (!initialColumns.includes(column)) {\n initialColumns.push(column);\n }\n });\n }\n\n if (type === 'SEAWEED') {\n seaweedColumns.forEach(column => {\n if (!initialColumns.includes(column)) {\n initialColumns.push(column);\n }\n });\n }\n const [checked, setChecked] = useState(\n type === 'MUSSEL'\n ? musselHidden\n : type === 'OYSTER'\n ? oysterHidden\n : seaweedHidden,\n );\n\n const [tableColumns, setTableColumns] = useState(initialColumns);\n\n const toggleCheck = (name: string, c: boolean) => {\n if (name === 'Line') return;\n if (c) {\n setChecked(checked.filter(x => x !== name));\n } else if (!checked.includes(name)) {\n setChecked([...checked, name]);\n }\n };\n const confirmClick = async () => {\n const columns = tableColumns.filter(x => checked.includes(x));\n let data: any = {};\n if (type === 'MUSSEL') {\n data = {\n mussel_line_hidden_columns: columns,\n mussel_line_columns_order: tableColumns,\n };\n } else if (type === 'OYSTER') {\n data = {\n oyster_line_hidden_columns: columns,\n oyster_line_columns_order: tableColumns,\n };\n } else {\n data = {\n seaweed_line_hidden_columns: columns,\n seaweed_line_columns_order: tableColumns,\n };\n }\n const r = await dispatch(updateAccountSetting(data));\n if (r !== true) {\n window.alert(r ?? 'Server error');\n } else {\n onClose();\n }\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n };\n\n const handleDrop = (index: number) => {\n return (e: React.DragEvent) => {\n const draggedIndex = parseInt(e.dataTransfer.getData('text/plain'), 10);\n if (draggedIndex === index) return;\n const newOrder = [...tableColumns];\n const [draggedItem] = newOrder.splice(draggedIndex, 1);\n newOrder.splice(index, 0, draggedItem);\n setTableColumns(newOrder);\n };\n };\n\n const handleDragStart = (index: number) => {\n return (e: React.DragEvent) => {\n e.dataTransfer.setData('text/plain', String(index));\n };\n };\n\n return (\n \n
\n {tableColumns.map((x, i) => (\n \n toggleCheck(x, e.target.checked)}\n />\n
\n ))}\n \n \n );\n};\n\nexport default LineColumnModifyModal;\n","import { useSelector } from 'react-redux';\nimport { selectAllTags } from '../../store/extra/extra.selector';\nimport {\n selectFarmsData,\n selectSpatStorages,\n} from '../../store/farms/farms.selector';\nimport { Dropdown } from '../shared';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { ILineResource } from '../../entities/farms.entities';\nimport { calcLineLastSize } from '../../lib/farm.helpers';\nimport { ITag } from '../../entities/automation.entities';\n\nconst sizeSteps = [2, 3, 5, 10, 15, 20, 30, 40, 50, 60, 70, 80];\nconst getSizeOption = (i: number) => {\n let label = '';\n if (i === 0) {\n label = `1 - ${sizeSteps[0]} mm`;\n } else if (i >= sizeSteps.length) {\n label = `80+ mm`;\n } else {\n label = `${sizeSteps[i - 1]} - ${sizeSteps[i]} mm`;\n }\n return { id: `${i}`, label, value: `${i}` };\n};\n\ninterface IFilter {\n spatSource?: string;\n tagName?: string;\n sizeIndexes: number[];\n}\n\nexport const checkLineFilter = (\n line: ILineResource,\n filter: IFilter,\n lineTags: ITag[],\n) => {\n if (\n filter.spatSource &&\n line.growing_cycle?.main_seed.spat_storage?.source !== filter.spatSource\n ) {\n return false;\n }\n if (\n filter.tagName &&\n !lineTags.some(\n x =>\n x.name === filter.tagName &&\n x.tag_lines.some(y => y.line_id === line.id),\n )\n ) {\n return false;\n }\n if (filter.sizeIndexes.length > 0) {\n const shellLen = calcLineLastSize(line)?.avg;\n if (shellLen === undefined) return false;\n for (let i of filter.sizeIndexes) {\n if (i === 0) {\n if (shellLen < sizeSteps[0]) return true;\n } else if (i >= sizeSteps.length) {\n if (shellLen >= sizeSteps[sizeSteps.length - 1]) return true;\n } else {\n if (shellLen >= sizeSteps[i - 1] && shellLen < sizeSteps[i])\n return true;\n }\n }\n return false;\n }\n return true;\n};\n\ninterface Props {\n filter: IFilter;\n onChange: (filter: IFilter) => void;\n}\n\nconst LinesFilterView = ({ filter, onChange }: Props) => {\n const allFarms = useSelector(selectFarmsData);\n const lineTags = useSelector(selectAllTags);\n const spatBatches = useSelector(selectSpatStorages).map(x => x.source);\n const uniqueBatches = Array.from(new Set(spatBatches)).filter(x =>\n allFarms.some(farm =>\n farm.lines.some(\n line => line.growing_cycle?.main_seed.spat_storage?.source === x,\n ),\n ),\n );\n const tagNames = lineTags\n .filter(x => x.tag_lines.length > 0)\n .map(x => x.name);\n const lang = useSelector(selectLang);\n\n const changeFilter = (key: keyof IFilter, value: any) => {\n let tmp = { ...filter };\n tmp[key] = value;\n if (key === 'spatSource' || key === 'tagName') {\n tmp[key] = value === undefined || value.length <= 0 ? undefined : value;\n }\n onChange(tmp);\n };\n\n const tagsOption =\n tagNames.length > 0\n ? [\n {\n id: '___',\n label: `-- (${translate(lang, 'All')}) --`,\n value: '',\n },\n ...tagNames.map(x => ({ id: x, label: x, value: x })),\n ]\n : [];\n const batchesOption =\n uniqueBatches.length > 0\n ? [\n {\n id: '___',\n label: `-- (${translate(lang, 'All')}) --`,\n value: '',\n },\n ...uniqueBatches.map(x => ({ id: x, label: x, value: x })),\n ]\n : [];\n\n return (\n
\n changeFilter('spatSource', v)}\n showSearch={true}\n allowClear={true}\n />\n
\n changeFilter('tagName', v)}\n allowClear={true}\n />\n
\n
\n \n getSizeOption(i),\n )}\n onChange={(v: any) => changeFilter('sizeIndexes', v.map(Number))}\n allowClear={true}\n />\n
\n
\n );\n};\n\nexport default LinesFilterView;\n","import {\n IFarmResource,\n ILineResource,\n IMusselFarm,\n IMusselLineResource,\n IOysterFarm,\n IOysterLineResource,\n ISeaweedFarm,\n ISeaweedLineResource,\n} from '../../../../entities/farms.entities';\nimport MusselLinesTable from './MusselLinesTable';\nimport OysterLinesTable from './OysterLinesTable';\nimport SeaweedLinesTable from './SeaweedLinesTable';\nimport { useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectLang } from '../../../../store/ui/ui.selector';\nimport { translate } from '../../../../lib/lang.helper';\nimport Dropdown from '../../dropdown/Dropdown';\nimport Input from '../../input/Input';\nimport { Button } from 'antd';\nimport {\n selectAllTags,\n SelectIsEditable,\n} from '../../../../store/extra/extra.selector';\nimport LineColumnModifyModal from '../../../user-settings/LineColumnModifyModal';\nimport { sendSingleRequest } from '../../../../apis';\nimport { loadFarmsData } from '../../../../store/farms/farms.actions';\nimport { showFeedback } from '../../../../store/ui/ui.actions';\nimport LineLocationModal from '../../modal/LineLocationModal';\nimport LinesFilterView, {\n checkLineFilter,\n} from '../../../lines/LinesFilterView';\nimport '../styles.scss';\n\nconst lineFilterOptions = (lang: any) => [\n { id: 'all', value: 'all', label: translate(lang, 'All') },\n {\n id: 'empty_lines',\n value: 'empty_lines',\n label: translate(lang, 'Empty Lines'),\n },\n {\n id: 'ready_harvest',\n value: 'ready_harvest',\n label: translate(lang, 'Ready To Harvest'),\n },\n {\n id: 'recently_seeded',\n value: 'recently_seeded',\n label: translate(lang, 'Recently Seeded'),\n },\n];\n\ninterface IFilter {\n spatSource?: string;\n tagName?: string;\n sizeIndexes: number[];\n lineName?: string;\n status: string;\n}\n\ninterface Props {\n farmData: IFarmResource;\n isChild?: boolean;\n}\n\nconst LinesTable = ({ farmData, isChild }: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const isEditable = SelectIsEditable(farmData.id);\n const lineTags = useSelector(selectAllTags);\n\n const [filter, setFilter] = useState({\n sizeIndexes: [],\n status: 'all',\n });\n const [visModify, setVisModify] = useState(false);\n const [editLineLocation, setEditLineLocation] = useState();\n const [disabled, setDisabled] = useState(false);\n\n const updateLineLocation = async (points: any, goNext: boolean) => {\n if (disabled || !editLineLocation) return;\n\n setDisabled(true);\n const response = await sendSingleRequest(\n { line_id: editLineLocation.id, points },\n 'PUT',\n `api/farm/line/lines/${editLineLocation.id}`,\n true,\n );\n if (response.status) {\n await dispatch(loadFarmsData());\n setDisabled(false);\n if (goNext) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n message: translate(lang, 'Line updated successfully'),\n type: 'success',\n }),\n );\n const i = farmData.lines.findIndex(x => x.id === editLineLocation.id);\n const nl = farmData.lines[(i + 1) % farmData.lines.length];\n setEditLineLocation(nl);\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, 'Line updated successfully'),\n type: 'success',\n }),\n );\n setEditLineLocation(undefined);\n }\n } else {\n setDisabled(false);\n window.alert(response.data?.message ?? 'Failed to update the line');\n }\n };\n\n const linesData = useMemo(() => {\n let result: ILineResource[] = [];\n if (filter.status === 'empty_lines') {\n result = farmData.lines.filter(x => !x.growing_cycle);\n } else if (filter.status === 'ready_harvest') {\n let res = farmData.lines.filter(\n x => x.growing_cycle && !!x.growing_cycle.ready_harvest,\n );\n if (res)\n res.sort((a, b) =>\n (a.growing_cycle?.ready_harvest ?? 0) >\n (b.growing_cycle?.ready_harvest ?? 0)\n ? -1\n : 1,\n );\n result = res;\n } else if (filter.status === 'recently_seeded') {\n let res = farmData.lines.filter(x => !!x.growing_cycle);\n if (res)\n res.sort((a, b) =>\n (a.growing_cycle?.main_seed.planned_date_seed ?? 0) >\n (b.growing_cycle?.main_seed.planned_date_seed ?? 0)\n ? -1\n : 1,\n );\n result = res;\n } else {\n result = farmData.lines;\n }\n if (filter.lineName) {\n result = result.filter(x =>\n x.line_name\n .toLowerCase()\n .includes(filter.lineName?.toLowerCase() ?? ''),\n );\n }\n result = result.filter(x => checkLineFilter(x, filter, lineTags));\n return result;\n }, [farmData.lines, filter, lineTags]);\n\n return (\n
\n {!isChild && (\n
\n
\n
\n setFilter({ ...filter, status: val })}\n allowClear={true}\n />\n
\n
\n \n setFilter({\n ...filter,\n lineName:\n e.target.value.length <= 0 ? undefined : e.target.value,\n })\n }\n />\n
\n setFilter({ ...filter, ...v })}\n />\n
\n {isEditable && (\n \n )}\n
\n )}\n {farmData.type === 'MUSSEL' ? (\n \n ) : farmData.type === 'OYSTER' ? (\n \n ) : (\n \n )}\n {visModify && (\n setVisModify(false)}\n />\n )}\n {!!editLineLocation && (\n updateLineLocation(points, false)}\n onConfirmNext={points => updateLineLocation(points, true)}\n onCancel={() => setEditLineLocation(undefined)}\n />\n )}\n
\n );\n};\n\nexport default LinesTable;\n","import { useState } from 'react';\nimport { Modal, Table } from 'antd';\nimport { IFarmResource } from '../../entities/farms.entities';\nimport { Button, CloseIcon, Datepicker, Subtitle } from '../shared';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport moment from 'moment';\nimport { formatNumber } from '../../entities/util-functions';\nimport { sendSingleRequest } from '../../apis';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\n\nconst columns = (lang: any) => [\n {\n key: 'created_at',\n dataIndex: 'created_at',\n title: translate(lang, 'Closed Date'),\n render: (x: any) => {defaultDateFormat(x)}\n },\n {\n key: 'due_date',\n dataIndex: 'due_date',\n title: translate(lang, 'Closed Until'),\n render: (x: any) => {defaultDateFormat(x)}\n },\n {\n key: 'more',\n },\n];\n\ninterface Props {\n farm: IFarmResource;\n className?: string;\n onClose: () => void;\n}\n\nconst FarmStatusModal = ({ farm, onClose, className }: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n\n const feeList = farm.farm_status?.all ?? [].map(\n (x: any, i: number) => ({ id: i.toString(), ...x }),\n );\n\n const [disabled, setDisabled] = useState(false);\n const [date, setDate] = useState(\n farm.farm_fee?.start_date\n ? farm.farm_fee?.start_date * 1000\n : moment().toDate().getTime(),\n );\n\n const updateDate = (date: number) => {\n const min = farm.farm_status?.due_date;\n if (min && date < min * 1000) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(\n lang,\n 'Minimum allowed date is %s',\n defaultDateFormat(min),\n ),\n }),\n );\n return;\n }\n if (date < moment().add(1, 'days').toDate().getTime()) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(\n lang,\n 'Minimum allowed date is %s',\n defaultDateFormat(moment().add(1, 'days').toDate().getTime()),\n ),\n }),\n );\n return;\n }\n setDate(date);\n };\n const closeModal = (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n onClose();\n };\n const afterClick = (res: any) => {\n setDisabled(false);\n if (res.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Success'),\n }),\n );\n dispatch(loadFarmsData());\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Failed'),\n }),\n );\n }\n onClose();\n };\n const closeClick = (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n setDisabled(true);\n sendSingleRequest(\n {\n status: farm.farm_status?.status ? 'close' : 'extend',\n farm_id: farm.id,\n due_date: new Date(date).toISOString().slice(0, 19).replace(\"T\", \" \"),\n },\n 'POST',\n 'api/farm/farm-status',\n true,\n ).then(res => {\n afterClick(res);\n });\n };\n\n const openClick = (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n setDisabled(true);\n sendSingleRequest(\n {\n status: 'open',\n farm_id: farm.id,\n due_date: new Date(date).toISOString().slice(0, 19).replace(\"T\", \" \"),\n },\n 'POST',\n 'api/farm/farm-status',\n true,\n ).then(res => {\n afterClick(res);\n });\n };\n\n return (\n }\n width={600}\n >\n {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n
\n \n {translate(lang, 'Farm %s status', farm.name)}\n \n
\n
\n \n {!!farm.farm_status?.status \n ? translate(lang, '%s is open', farm.name)\n : translate(\n lang,\n '%s is closed at %s, for %s days.',\n farm.name,\n defaultDateFormat(farm.farm_status.created_at),\n farm.farm_status.days_left,\n )}\n \n
\n {farm.farm_status?.all && (\n <>\n
\n \n
\n \n )}\n
\n e && updateDate(e.toDate().getTime())}\n />\n
\n \n
\n { farm.farm_status?.status == false &&\n \n {translate(\n lang,\n 'Open Farm',\n )}\n \n }\n \n {translate(lang, !farm.farm_status?.status ? 'Extend close period' : 'Close Farm')}\n \n \n {translate(lang, 'Cancel')}\n \n
\n \n \n );\n};\n\nexport default FarmStatusModal;\n","import { useState } from 'react';\nimport { IFarmResource } from '../../entities/farms.entities';\nimport FarmStatusModal from '../farm-modals/FarmStatusModal';\nimport { Button } from '../shared';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n farm: IFarmResource;\n}\n\nconst FarmStatusButton = ({ farm }: Props) => {\n const lang = useSelector(selectLang);\n const [visible, setVisible] = useState(false);\n\n const handleClick = (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n setVisible(true);\n };\n\n return (\n <>\n \n {translate(lang, farm.farm_status?.status !== false ? 'Open' : 'Closed')}\n \n {visible && (\n setVisible(false)} />\n )}\n \n );\n};\n\nexport default FarmStatusButton;\n","import { Link } from 'react-router-dom';\nimport { IFarmResource } from '../../../entities/farms.entities';\nimport NameWithPercent from '../name-with-percent/NameWithPercent';\nimport Tooltip from '../tooltip/Tooltip';\nimport { Image, Table } from 'antd';\nimport farm_image from '../../../images/farm.png';\nimport useMenuHandler from './useMenuHandler';\nimport { useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectProfile } from '../../../store/auth/auth.selector';\nimport FarmLeaseButton from '../../farm-util/FarmLeaseButton';\nimport { sendSingleRequest } from '../../../apis';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { isSpinner, showFeedback } from '../../../store/ui/ui.actions';\nimport LinesTable from './LinesTable';\nimport CaretDownIcon from '../CaretDownIcon';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { componentTranslate, translate } from '../../../lib/lang.helper';\nimport ModalComponent from '../modal/Modal';\nimport DotsMenu from '../dropdown-menu/DotsMenu';\nimport './styles.scss';\nimport FarmStatusButton from '../../farm-util/FarmStatusButton';\n\ninterface Props {\n farmsData: IFarmResource[];\n}\n\nconst FarmsTable = ({ farmsData }: Props) => {\n const dispatch = useDispatch();\n const { redirectToFarmVisualLine, redirectToEditFarm, redirectToFarm } =\n useMenuHandler();\n const profile = useSelector(selectProfile);\n const lang = useSelector(selectLang);\n const [visFarm, setVisFarm] = useState();\n\n const deleteFarm = async (farm: IFarmResource) => {\n if (!window.confirm('Are you sure you want to delete this farm?')) return;\n dispatch(isSpinner(true));\n const response = await sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/farms/${farm.id}`,\n true,\n );\n if (response.status) {\n await dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Farm deleted successfully',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, response.data?.message ?? 'Unknown error'),\n }),\n );\n }\n dispatch(isSpinner(false));\n };\n\n const columns = useMemo(() => {\n let res = [\n {\n title: translate(lang, 'Farm'),\n key: 'farm',\n className: 'drag-farm',\n render: (farm: IFarmResource) => (\n
\n

{farm.name}

\n \n
\n {farm.farm_number}\n
\n
\n ),\n },\n {\n title: translate(lang, 'Crop type'),\n key: 'type',\n render: (farm: IFarmResource) => {\n return {farm.type};\n },\n },\n {\n title: '',\n key: 'area',\n },\n {\n title: translate(lang, 'Area'),\n key: 'area',\n className: 'drag-area',\n render: (farm: IFarmResource) => {\n return {farm.area}ha;\n },\n },\n {\n title: translate(lang, 'Owner'),\n key: 'owners',\n render: (farm: IFarmResource) => {\n const tooltipItems = (farm.owners ?? []).map((owner, i) => ({\n title: `${owner?.title} - ${owner?.percent}%`,\n id: i,\n }));\n return (\n \n
\n {(farm.owners ?? []).map(\n ({ title, percent }: any, i: number) => (\n
\n \n
\n ),\n )}\n
\n
\n );\n },\n },\n {\n title: '',\n key: 'visual',\n width: '7%',\n render: (f: IFarmResource) => (\n {\n e.stopPropagation();\n e.preventDefault();\n redirectToFarmVisualLine(f.id);\n }}\n >\n \n \n ),\n },\n ];\n res.push({\n title: translate(lang, 'Area Closing'),\n key: 'lease',\n render: (x: IFarmResource) =>\n x.account_id ? <> : ,\n });\n res.push({\n title: '',\n key: 'more',\n render: (d: IFarmResource) => (\n
\n {!d.account_id && !!profile?.edit_permission && (\n redirectToEditFarm(d.id.toString()),\n },\n {\n label: translate(lang, 'Delete'),\n onClick: () => deleteFarm(d),\n },\n {\n label: translate(lang, 'Share'),\n onClick: () => setVisFarm(d),\n },\n ]}\n />\n )}\n
\n ),\n });\n return res;\n }, [redirectToFarmVisualLine, profile]);\n\n return (\n <>\n ({\n onClick: () => redirectToFarm(dataRow.id.toString()),\n })}\n expandable={{\n expandedRowRender: d => ,\n expandIcon: ({ onExpand, record }) => (\n undefined}\n onClick={event => {\n event.stopPropagation();\n onExpand(record, event);\n }}\n >\n \n \n ),\n }}\n />\n {visFarm && (\n setVisFarm(undefined)}\n type='success'\n title={translate(lang, 'Share this farm with another account')}\n text={componentTranslate(\n lang,\n 'Your farm ID is %s. Please make sure you share it with trusted person as they will gain access to your farm data.',\n {visFarm.id},\n )}\n hideCancelBtn={true}\n onConfirm={() => setVisFarm(undefined)}\n />\n )}\n \n );\n};\n\nexport default FarmsTable;\n","import { FC, useState, memo, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { Dropdown, Menu } from 'antd';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport Subtitle from '../subtitle/Subtitle';\nimport LineFormModal from '../../farm-modals/LineFormModal';\nimport {\n IFarmResource,\n ILineResource,\n IMusselLineResource,\n IOysterLineResource,\n ISeaweedLineResource,\n} from '../../../entities/farms.entities';\nimport DotsIcon from '../DotsIcon';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\nimport {\n amountDays,\n calcLineLastSize,\n getEstHarvestDate,\n} from '../../../lib/farm.helpers';\nimport { selectProfile } from '../../../store/auth/auth.selector';\nimport { sendSingleRequest } from '../../../apis';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport Select from '../dropdown/Dropdown';\nimport Input from '../input/Input';\nimport { SelectIsEditable } from '../../../store/extra/extra.selector';\nimport { labelNumber } from '../../../lib/common.helpers';\nimport './styles.scss';\n\nconst MusselLine: FC<{ line: IMusselLineResource }> = ({ line }) => (\n
\n \n Length\n \n \n \n {line.growing_cycle ? line.growing_cycle.current_line_length : 0}\n \n m\n \n
\n);\n\nconst OysterLine: FC<{ line: IOysterLineResource }> = ({ line }) => (\n
\n \n Number of baskets\n \n \n \n {line.growing_cycle ? line.growing_cycle.current_basket_count : 0}\n \n \n \n
\n);\n\nconst SeaweedLine: FC<{ line: ISeaweedLineResource }> = ({ line }) => (\n
\n \n Tank area\n \n \n \n {line.growing_cycle ? line.growing_cycle.total_seeded_tank_area : 0}\n \n \n \n
\n);\n\nconst lineFilterOptions = (lang: any) => [\n { id: 'all', value: 'all', label: translate(lang, 'All') },\n {\n id: 'empty_lines',\n value: 'empty_lines',\n label: translate(lang, 'Empty Lines'),\n },\n {\n id: 'ready_harvest',\n value: 'ready_harvest',\n label: translate(lang, 'Ready To Harvest'),\n },\n {\n id: 'recently_seeded',\n value: 'recently_seeded',\n label: translate(lang, 'Recently Seeded'),\n },\n];\n\ninterface Props {\n farmData: IFarmResource;\n}\n\nconst LinesMobile: FC = memo(({ farmData }) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const lang = useSelector(selectLang);\n const profile = useSelector(selectProfile);\n const isEditable = SelectIsEditable(farmData.id);\n\n const [editData, setEditData] = useState();\n const [filterOpt, setFilterOpt] = useState('all');\n const [filterName, setFilterName] = useState('');\n\n const linesData = useMemo(() => {\n let result: ILineResource[] = [];\n if (filterOpt === 'empty_lines') {\n result = farmData.lines.filter(x => !x.growing_cycle);\n } else if (filterOpt === 'ready_harvest') {\n let res = farmData.lines.filter(\n x => x.growing_cycle && !!x.growing_cycle.ready_harvest,\n );\n if (res)\n res.sort((a, b) =>\n (a.growing_cycle?.ready_harvest ?? 0) >\n (b.growing_cycle?.ready_harvest ?? 0)\n ? -1\n : 1,\n );\n result = res;\n } else if (filterOpt === 'recently_seeded') {\n let res = farmData.lines.filter(x => !!x.growing_cycle);\n if (res)\n res.sort((a, b) =>\n (a.growing_cycle?.main_seed.planned_date_seed ?? 0) >\n (b.growing_cycle?.main_seed.planned_date_seed ?? 0)\n ? -1\n : 1,\n );\n result = res;\n } else {\n result = farmData.lines;\n }\n if (filterName) {\n result = result.filter(x =>\n x.line_name.toLowerCase().includes(filterName.toLowerCase()),\n );\n }\n return result;\n }, [farmData.lines, filterOpt, filterName]);\n\n const menuClickHandler = async (e: any, line: ILineResource) => {\n if (e.key === 'edit') {\n setEditData(line);\n } else if (e.key === 'delete') {\n if (!window.confirm('Are you sure to delete this line')) return;\n const res = await sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/line/lines/${line.id}`,\n true,\n );\n if (res.status) {\n await dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Line deleted successfully',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: res.data?.message ?? 'Unknown error',\n }),\n );\n }\n } else {\n history.push(`/farms/${line.farm_id}/${line.id}`);\n }\n };\n\n return (\n
\n
\n
\n setFilterOpt(val)}\n />\n
\n
\n setFilterName(e.target.value)}\n />\n
\n
\n
\n {linesData.map(line => (\n undefined}\n onClick={() => history.push(`/farms/${line.farm_id}/${line.id}`)}\n >\n
\n {isEditable && (\n
\n
e.stopPropagation()}>\n menuClickHandler(e, line)}>\n \n {translate(lang, 'Info')}\n \n {!!profile?.edit_permission && (\n <>\n \n {translate(lang, 'Edit')}\n \n \n {translate(lang, 'Delete')}\n \n \n )}\n \n }\n placement='bottomRight'\n trigger={['click']}\n >\n
\n \n
\n \n
\n
\n )}\n
\n
\n \n {translate(lang, 'Line - %s', line.line_name)}\n \n
\n
\n
\n {farmData.type === 'MUSSEL' ? (\n \n ) : farmData.type === 'OYSTER' ? (\n \n ) : (\n \n )}\n
\n \n {translate(lang, 'Date seed')}\n \n <>\n {line.growing_cycle ? (\n \n {defaultDateFormat(\n line.growing_cycle.main_seed.planned_date_seed,\n )}\n \n ) : (\n
\n \n {translate(lang, 'Line empty')}\n \n \n {amountDays(line.line_idle)}\n \n
\n )}\n \n
\n
\n
\n
\n \n {translate(lang, 'Planned harvest date')}\n \n \n {defaultDateFormat(getEstHarvestDate(line), '-')}\n \n
\n
\n \n {translate(lang, 'Seed type')}\n \n \n {line.growing_cycle?.main_seed.spat_storage?.seed_type ??\n '-'}\n \n
\n
\n
\n
\n \n {translate(lang, 'Income per meter')}\n \n \n {(line as any)?.last_harvest?.profit_per_meter ?? '-'}\n \n
\n
\n \n {translate(lang, 'Avg. Size')}\n \n \n {labelNumber(calcLineLastSize(line)?.avg, 'mm')}\n \n
\n
\n
\n
\n ))}\n {linesData.length <= 0 && (\n
\n \n {translate(lang, 'No data available')}\n \n
\n )}\n
\n {!!editData && (\n setEditData(undefined)}\n farmData={farmData}\n />\n )}\n \n );\n});\n\nexport default LinesMobile;\n","import { useMemo, FC, memo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { Collapse, Dropdown, Menu } from 'antd';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport Caret from '../caret/Caret';\nimport Subtitle from '../subtitle/Subtitle';\nimport { IFarmResource } from '../../../entities/farms.entities';\nimport { selectProfile } from '../../../store/auth/auth.selector';\nimport DotsIcon from '../DotsIcon';\nimport LinesMobile from './LinesMobile';\nimport { sendSingleRequest } from '../../../apis';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport './styles.scss';\n\ninterface HeaderProp {\n farm: IFarmResource;\n onEditClick?: (d: IFarmResource) => void;\n onDeleteClick?: (d: IFarmResource) => Promise;\n}\n\nconst TableHeader = ({ farm, onEditClick, onDeleteClick }: HeaderProp) => {\n const history = useHistory();\n const location =\n farm.bounds && farm.bounds.length > 0 ? farm.bounds[0] : farm.location;\n const lang = useSelector(selectLang);\n\n const menuClickHandler = async (e: any) => {\n if (e.key === 'edit') {\n onEditClick && onEditClick(farm);\n } else if (e.key === 'delete') {\n onDeleteClick && (await onDeleteClick(farm));\n } else {\n history.push(`/farms/${farm.id}`);\n }\n };\n\n return (\n undefined}\n onClick={() => history.push(`/farms/${farm.id}`)}\n >\n
\n
\n \n {farm.name}\n \n \n {location?.lat ?? '-'}\n {location?.lng ?? '-'}\n \n
\n
\n {!farm.account_id && (\n
e.stopPropagation()}>\n \n {translate(lang, 'Info')}\n {!!onEditClick && (\n \n {translate(lang, 'Edit')}\n \n )}\n {!!onDeleteClick && (\n \n {translate(lang, 'Delete')}\n \n )}\n \n }\n placement='bottomRight'\n trigger={['click']}\n >\n
\n \n
\n \n
\n )}\n
\n
\n
\n
\n \n {translate(lang, 'Area')}\n \n \n {`${farm.area}ha`}\n \n
\n
\n \n {translate(lang, 'Owner')}\n \n
\n {(farm?.owners ?? []).map((x, i) => (\n \n {x.title}\n \n ))}\n
\n
\n
\n \n );\n};\n\ninterface Props {\n data: IFarmResource[];\n}\n\nconst FarmsMobile: FC = memo(({ data }) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const profile = useSelector(selectProfile);\n const lang = useSelector(selectLang);\n\n const { Panel } = useMemo(() => Collapse, []);\n\n const deleteFarm = async (farm: IFarmResource) => {\n if (!profile?.edit_permission || farm.account_id) return;\n if (!window.confirm('Are you sure to delete this farm?')) return;\n\n const response = await sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/farms/${farm.id}`,\n true,\n );\n if (response.status) {\n await dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Farm deleted successfully',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Failed to delete farm',\n }),\n );\n }\n };\n const editFarm = (farm: IFarmResource) => {\n if (!profile?.edit_permission || farm.account_id) return;\n history.push(`/farms/farm-edit/${farm.id}`);\n };\n\n return (\n
\n {data?.length ? (\n <>\n (\n
\n \n
\n )}\n >\n {data?.map(farm => (\n \n }\n >\n {farm.lines.length > 0 ? (\n \n ) : (\n
\n \n {translate(lang, 'No data available')}\n \n
\n )}\n \n ))}\n \n \n ) : (\n
\n \n {translate(lang, 'No data available')}\n \n
\n )}\n
\n );\n});\n\nexport default FarmsMobile;\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link, useHistory } from 'react-router-dom';\nimport { useWidth } from '../../util/useWidth';\nimport {\n Button,\n Title,\n TablesCard,\n Spinner,\n PlusIcon,\n FarmIcon,\n Input,\n} from '../../components/shared';\nimport GrowerImportSelectModal from '../../components/farm-modals/GrowerImportSelectModal';\nimport { checkRolePermission } from '../../entities/util-functions';\nimport { sendSingleRequest } from '../../apis';\nimport FarmsTable from '../../components/shared/tables/FarmsTable';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectLang, selectSpin } from '../../store/ui/ui.selector';\nimport { IFarmCard } from '../../entities/farms.entities';\nimport FarmsMobile from '../../components/shared/table-mobile/FarmsMobile';\nimport { translate } from '../../lib/lang.helper';\nimport { selectAllFarms } from '../../store/extra/extra.selector';\nimport { toMillisecond } from '../../util/toggleSecondMillisecond';\nimport moment from 'moment';\nimport './styles.scss';\n\nconst Farms = () => {\n const width = useWidth();\n const history = useHistory();\n\n const lang = useSelector(selectLang);\n const allFarms = useSelector(selectAllFarms);\n const profile = useSelector(selectProfile);\n const isEditable = profile?.edit_permission;\n const isSpinner = useSelector(selectSpin);\n\n const [total, setTotal] = useState([]);\n const [isCardsSpinner, setIsCardsSpinner] = useState(false);\n const [visibleImport, setVisibleImport] = useState(false);\n\n const getTotals = useCallback(async () => {\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/overview/farm-review',\n true,\n );\n if (response.status) {\n setTotal(response.data);\n }\n }, []);\n\n const { nextSeedData, nextHarvestData } = useMemo(() => {\n let nextSeedData: IFarmCard[] = [];\n let nextHarvestData: IFarmCard[] = [];\n for (const farm of allFarms) {\n for (const line of farm.lines) {\n if (\n line.growing_cycle &&\n toMillisecond(line.growing_cycle.main_seed.planned_date_seed) >=\n Date.now()\n ) {\n nextSeedData.push({\n name: `${farm.name} - ${line.line_name}`,\n date: line.growing_cycle.main_seed.planned_date_seed,\n });\n }\n if (line.growing_cycle && line.growing_cycle.ready_harvest) {\n const rd = toMillisecond(line.growing_cycle.ready_harvest);\n nextHarvestData.push({\n name: `${farm.name} - ${line.line_name}`,\n date: rd,\n unit: translate(\n lang,\n 'Ready for %s days',\n moment().diff(rd, 'days'),\n ),\n });\n }\n }\n }\n nextSeedData.sort((a, b) => (a.date ?? 0) - (b.date ?? 0));\n nextSeedData = nextSeedData.slice(0, 3);\n nextHarvestData.sort((a, b) => (a.date ?? 0) - (b.date ?? 0));\n nextHarvestData = nextHarvestData.slice(0, 3);\n\n return { nextSeedData, nextHarvestData };\n }, [allFarms]);\n\n const loadData = useCallback(async () => {\n setIsCardsSpinner(true);\n await getTotals();\n setIsCardsSpinner(false);\n }, []);\n\n const [searchKey, setSearchKey] = useState('');\n\n const filteredFarms = useMemo(\n () =>\n allFarms.filter(\n x =>\n x.farm_number.toLowerCase().includes(searchKey.toLowerCase()) ||\n x.name.toLowerCase().includes(searchKey.toLowerCase()),\n ),\n [allFarms, searchKey],\n );\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return (\n
\n
\n
\n
\n
\n \n {translate(lang, 'Farms')}\n \n {checkRolePermission(\n { deniedRoles: ['processing_plant'] },\n profile?.role,\n ) && (\n
\n 768 ? 3 : 5}\n type='fill'\n width='small'\n color='blue'\n onClick={() => history.push('/lines')}\n >\n {translate(lang, 'All lines')}\n \n 768 ? 3 : 5}\n type='fill'\n width='small'\n color='blue'\n className={width > 768 ? 'ml-7' : 'mt-7'}\n onClick={() => history.push('/farms/visual-mode')}\n >\n {translate(lang, 'Farms map')}\n \n\n 768 ? 3 : 5}\n type='fill'\n width='small'\n color='blue'\n className={width > 768 ? 'ml-7' : 'mt-7'}\n onClick={() => history.push('/spats')}\n >\n {translate(lang, 'Farm spats')}\n \n {profile?.account_type === 'grower' ? (\n 768 ? 3 : 5}\n type='bordered'\n width='small'\n color='green'\n className={width > 768 ? 'ml-7' : 'mt-7'}\n onClick={() => setVisibleImport(true)}\n >\n {translate(lang, 'Import')}\n \n ) : (\n 768 ? 3 : 5}\n type='fill'\n width='small'\n color='blue'\n className={width > 768 ? 'ml-7' : 'mt-7'}\n onClick={() => history.push('/line-spats')}\n >\n {translate(lang, 'Spat count')}\n \n )}\n
\n )}\n
\n {!!isEditable && (\n
\n \n {width > 768 ? (\n \n ) : (\n \n \n \n )}\n \n {profile.account_type === 'operator' && (\n \n {width > 768 ? (\n \n ) : (\n \n \n \n )}\n \n )}\n
\n )}\n
\n
\n
\n
\n setSearchKey(e.target.value)}\n />\n
\n {width > 768 ? (\n \n ) : (\n \n )}\n
\n
\n {!isCardsSpinner ? (\n <>\n \n \n {total?.length > 0 && }\n \n ) : (\n
\n \n
\n )}\n
\n
\n
\n {isSpinner && }\n
\n {visibleImport && (\n setVisibleImport(false)}\n onConfirm={() => {\n setVisibleImport(false);\n loadData();\n }}\n />\n )}\n
\n );\n};\n\nexport default Farms;\n","export interface IBreadcrumb {\n linkName: string;\n link: string;\n id?: string | number;\n}\n\ntype PAGE_NAME =\n | 'OVERVIEW'\n | 'FARMS'\n | 'FARM_LINE'\n | 'FARM_DETAIL'\n | 'FARM_VISUAL'\n | 'INVENTORIES'\n | 'LINE_GROUPS'\n | 'LINE_GROUP_DETAIL'\n | 'SPAT_STORAGES'\n | 'SUMMARY_PAGE'\n | 'HARVEST_DETAIL';\n\nconst getBreadcrumbKeys = () => ({\n OVERVIEW: {\n id: 1,\n link: '/',\n linkName: 'Overview',\n },\n FARMS: {\n id: 2,\n link: '/farms',\n linkName: 'Farms',\n },\n FARM_DETAIL: {\n id: 3,\n link: '/farms/{FARM_ID}',\n linkName: '{FARM_NAME}',\n },\n FARM_VISUAL: {\n id: 4,\n link: '/farms/visual-line/{FARM_ID}',\n linkName: 'Visual Line',\n },\n FARM_LINE: {\n id: 5,\n link: '/farms/{FARM_ID}/{LINE_ID}',\n linkName: 'Line {LINE_NAME}',\n },\n INVENTORIES: {\n id: 6,\n link: '/inventory',\n linkName: 'Inventory',\n },\n LINE_GROUPS: {\n id: 7,\n link: '/line-group',\n linkName: 'Line Group',\n },\n LINE_GROUP_DETAIL: {\n id: 8,\n link: '/line-group/{LINE_GROUP_ID}',\n linkName: '{LINE_GROUP_NAME}',\n },\n SPAT_STORAGES: {\n id: 9,\n link: '/spat-storage',\n linkName: 'Spat Storage',\n },\n SUMMARY_PAGE: {\n id: 10,\n link: '/summary/harvest',\n linkName: 'Summary',\n },\n HARVEST_DETAIL: {\n id: 11,\n link: '/harvest/{HARVEST_ID}',\n linkName: 'Harvest {HARVEST_ID} Detail',\n },\n});\n\ninterface Node {\n key: PAGE_NAME;\n children?: Node[] | null;\n}\n\nconst getRootNode = (): Node => ({\n key: 'OVERVIEW',\n children: [\n {\n key: 'FARMS',\n children: [\n {\n key: 'FARM_DETAIL',\n children: [\n {\n key: 'FARM_LINE',\n children: null,\n },\n {\n key: 'FARM_VISUAL',\n children: null,\n },\n ],\n },\n ],\n },\n {\n key: 'INVENTORIES',\n children: null,\n },\n {\n key: 'LINE_GROUPS',\n children: [{ key: 'LINE_GROUP_DETAIL', children: null }],\n },\n {\n key: 'SPAT_STORAGES',\n children: null,\n },\n {\n key: 'SUMMARY_PAGE',\n children: [{ key: 'HARVEST_DETAIL', children: null }],\n },\n ],\n});\n\nconst getNodes = (current: Node, key: PAGE_NAME): IBreadcrumb[] | null => {\n const keys = getBreadcrumbKeys();\n let result: IBreadcrumb[] = [keys[current.key]];\n if (current.key === key) {\n return result;\n }\n if (!current.children) return null;\n for (let x of current.children) {\n const c = getNodes(x, key);\n if (c && c.length > 0) {\n result.push(...c);\n return result;\n }\n }\n return null;\n};\n\nconst convertBreadcrumbs = (items: IBreadcrumb[], params: any) => {\n if (!params || !items) return items;\n for (let i in items) {\n for (let k in params) {\n items[i].link = items[i].link.replaceAll(`{${k}}`, params[k]);\n items[i].linkName = items[i].linkName.replaceAll(`{${k}}`, params[k]);\n }\n }\n return items;\n};\n\nconst getBreadcrumbMenu = (\n pageName: PAGE_NAME,\n params: any = null,\n): IBreadcrumb[] => {\n const root = getRootNode();\n let result = getNodes(root, pageName);\n result = convertBreadcrumbs(result ?? [], params);\n return result;\n};\n\nexport default getBreadcrumbMenu;\n","import { Modal } from 'antd';\nimport { CloseIcon, Subtitle } from '../../shared';\n\ninterface Props {\n visible: boolean;\n title?: string;\n data?: any;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n onlyView?: boolean;\n warningMessage?: string;\n}\n\nconst MusselBulkHarvestModal = ({\n visible,\n title,\n data,\n onCancel,\n onConfirm,\n onlyView,\n warningMessage,\n}: Props) => (\n }\n width={650}\n >\n
\n
\n \n {title ?? 'Bulk mussel harvest'}\n \n
\n
\n
\n \n);\n\nexport default MusselBulkHarvestModal;\n","import { FC, useState } from 'react';\nimport { Modal, Upload } from 'antd';\nimport { PlusOutlined } from '@ant-design/icons';\nimport {\n RcFile,\n UploadChangeParam,\n UploadFile,\n} from 'antd/lib/upload/interface';\nimport { getBase64 } from '../../../util/getBase64';\nimport Paragrapgh from '../paragrapgh/Paragrapgh';\nimport './styles.scss';\n\ninterface IOwnProps {\n fileList?: UploadFile[];\n label: string;\n handleChangeImages: (files: UploadFile[]) => void;\n disabled?: boolean;\n}\n\nconst PicturesWall: FC = ({\n fileList,\n label,\n handleChangeImages,\n disabled,\n}) => {\n const [previewVisible, setPreviewVisible] = useState(false);\n const [previewImage, setPreviewImage] = useState('');\n const [previewTitle, setPreviewTitle] = useState('');\n\n const handleCancel = () => setPreviewVisible(false);\n\n const handlePreview = async (file: any) => {\n /* eslint no-param-reassign: [\"error\", { \"props\": false }] */\n if (!file.url && !file.thumbUrl) {\n file.thumbUrl = await getBase64(file.originFileObj);\n }\n setPreviewImage(file.url || file.thumbUrl);\n setPreviewVisible(true);\n setPreviewTitle(\n file.name || file.url.substring(file.url.lastIndexof('/') + 1),\n );\n };\n\n const handleChange = (info: UploadChangeParam>) => {\n const { file } = info;\n if (file.status === 'removed') {\n handleChangeImages([\n ...new Set(fileList?.filter(image => image.uid !== file.uid)),\n ]);\n }\n };\n\n const handleBeforeUpload = (file: RcFile, imgList: RcFile[]) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = e => {\n const { uid, name, type, size } = file;\n\n const image = {\n uid,\n name,\n type,\n size,\n thumbUrl: e.target?.result,\n };\n\n handleChangeImages([...new Set(fileList), image as UploadFile]);\n };\n return false;\n };\n\n const uploadButton = (\n
\n \n
Upload Photo
\n
\n );\n\n return (\n <>\n \n {label}\n \n \n {uploadButton}\n \n \n Assessment\n \n \n );\n};\n\nexport default PicturesWall;\n","import { useState } from 'react';\nimport { DatePicker, TimePicker } from 'antd';\nimport classNames from 'classnames';\nimport moment from 'moment';\nimport Paragrapgh from '../paragrapgh/Paragrapgh';\nimport CalendarIcon from '../CalendarIcon';\nimport './styles.scss';\n\ninterface Props {\n onChange: (e: moment.Moment | null, value: string) => void;\n onRange?: (e: boolean) => void;\n disabled?: boolean;\n label: string;\n required?: boolean;\n className?: string;\n defaultValue?: number | undefined;\n}\n\nconst DateTimePicker = ({\n onChange,\n required,\n onRange,\n disabled,\n label,\n className,\n defaultValue,\n}: Props) => {\n const [isError, setIsError] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n\n const datepickerClasses = classNames(className, 'w-100', {\n 'ant-picker-input--success': isSuccess,\n 'ant-picker-input--error': isError,\n });\n\n const handleOnChange = (e: moment.Moment | null, value: string) => {\n if (e && onRange && required) {\n setIsSuccess(true);\n setIsError(false);\n onRange(true);\n } else if (onRange && required) {\n setIsSuccess(false);\n setIsError(true);\n onRange(false);\n }\n\n onChange(e, value);\n };\n\n return (\n
\n \n {label}\n \n }\n />\n
\n );\n};\n\nexport default DateTimePicker;\n","import { PlusIcon, TrashIcon } from '..';\nimport DateTimePicker from '../datepicker/DateTimePicker';\nimport Button from '../button/Button';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\n\ninterface Props {\n data: ITimeRange[];\n onChange: (d: any) => void;\n disabled?: boolean;\n}\n\nconst TimeTrackInput = ({ data, onChange, disabled }: Props) => {\n const lang = useSelector(selectLang);\n\n const updateForm = (\n i: number,\n key: 'start_time' | 'finish_time',\n val: number | undefined,\n ) => {\n if (!val) return;\n let tmp = [...data];\n tmp[i][key] = val;\n onChange(tmp);\n };\n const addClick = () => {\n let tmp = [...data];\n tmp.push({ start_time: Date.now(), finish_time: Date.now() });\n onChange(tmp);\n };\n const deleteClick = (i: number) => {\n let tmp = [...data];\n if (i >= tmp.length) return;\n tmp.splice(i, 1);\n onChange(tmp);\n };\n\n return (\n
\n
\n Time Tracking\n {!disabled && (\n \n \n
\n )}\n
\n {data.map((x, i) => (\n
\n updateForm(i, 'start_time', e?.toDate().getTime())}\n disabled={!!disabled}\n />\n updateForm(i, 'finish_time', e?.toDate().getTime())}\n disabled={!!disabled}\n />\n {!disabled && (\n
\n \n \n \n
\n )}\n
\n ))}\n \n );\n};\n\nexport const toSecTimeTracks = (data: ITimeRange[] | undefined | null) => {\n if (!data) return false;\n let prev = 0;\n for (let x of data) {\n if (!x.start_time || !x.finish_time) return false;\n if (x.start_time >= x.finish_time) return false;\n if (prev && prev >= x.start_time) return false;\n prev = x.finish_time;\n }\n return data.map(x => ({\n start_time: Math.floor(x.start_time / 1000),\n finish_time: Math.floor(x.finish_time / 1000),\n }));\n};\n\nexport default TimeTrackInput;\n","export default __webpack_public_path__ + \"static/media/north-dir-btn.6fad4a98.png\";","export default __webpack_public_path__ + \"static/media/east-dir-btn.674d31ff.png\";","export default __webpack_public_path__ + \"static/media/south-dir-btn.7200dc99.png\";","export default __webpack_public_path__ + \"static/media/west-dir-btn.8dec5620.png\";","import { useSelector } from 'react-redux';\nimport { Paragrapgh } from '../shared';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport northIcon from '../../images/north-dir-btn.png';\nimport eastIcon from '../../images/east-dir-btn.png';\nimport southIcon from '../../images/south-dir-btn.png';\nimport westIcon from '../../images/west-dir-btn.png';\n\ninterface Props {\n value?: string | null;\n onChange: (value: string | null) => void;\n}\n\nconst DirectionForm = ({ value, onChange }: Props) => {\n const lang = useSelector(selectLang);\n\n return (\n
\n \n {translate(lang, 'Direction')}\n \n
\n
\n onChange(value === 'N' ? null : 'N')}\n />\n
\n
\n onChange(value === 'E' ? null : 'E')}\n />\n
\n
\n onChange(value === 'S' ? null : 'S')}\n />\n
\n
\n onChange(value === 'W' ? null : 'W')}\n />\n
\n
\n
\n );\n};\n\nexport default DirectionForm;\n","import { Modal } from 'antd';\nimport {\n Button,\n CloseIcon,\n Datepicker,\n Dropdown,\n Feedback,\n Input,\n Paragrapgh,\n Subtitle,\n} from '../../shared';\nimport {\n IOysterFarm,\n IOysterLineResource,\n} from '../../../entities/farms.entities';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { toMillisecond, toSecond } from '../../../util/toggleSecondMillisecond';\nimport { dozensToPieces, toStrSlug } from '../../../lib/common.helpers';\nimport SignatureCanvas from 'react-signature-canvas';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { sendSingleRequest } from '../../../apis';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { loadInventories } from '../../../store/inventories/inventories.actions';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport { selectProfile } from '../../../store/auth/auth.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport {\n SelectOysterFarmsByFarmID,\n SelectSizedOystersByFarmID,\n SelectUtilsByFarmID,\n} from '../../../store/extra/extra.selector';\nimport { getLineOysters } from '../../../lib/farm.helpers';\nimport DirectionForm from '../../farm-util/DirectionForm';\n\ninterface IPickedItem {\n inventory_id: number;\n seeding_id: number;\n quantity: number | null;\n}\n\ninterface InventoryProps {\n lineData: IOysterLineResource;\n form: IPickedItem[];\n setForm: (form: IPickedItem[]) => void;\n}\n\nconst ReturningInventories = ({ lineData, form, setForm }: InventoryProps) => {\n const lang = useSelector(selectLang);\n const usedInventories = lineData.growing_cycle?.inventories_sum ?? [];\n\n const updateForm = (ivt_id: number, val: string) => {\n const ms = lineData.growing_cycle?.main_seed;\n if (!ms) return;\n\n const v = val.length <= 0 ? null : Number(val);\n let tmp = [...form];\n const i = tmp.findIndex(x => x.inventory_id === ivt_id);\n if (i < 0) {\n tmp.push({ inventory_id: ivt_id, seeding_id: ms.id, quantity: v });\n } else {\n tmp[i].quantity = v;\n }\n setForm(tmp);\n };\n\n return usedInventories.length > 0 ? (\n
\n \n {translate(\n lang,\n 'Please input quantity of inventories that you are returning',\n )}\n \n
\n {usedInventories.map(item => (\n
\n updateForm(item.inventory_id, e.target.value)}\n value={\n form\n .find(x => x.inventory_id === item.inventory_id)\n ?.quantity?.toString() ?? ''\n }\n label={`${item.inventory_name}`}\n placeholder={translate(\n lang,\n 'Maximum value is %s',\n item.quantity,\n )}\n max={item.quantity}\n />\n
\n ))}\n
\n
\n ) : (\n <>\n );\n};\n\ninterface ILineData {\n line_id: number;\n amount_dz: number | null;\n amount_pcs: number | null;\n income?: number | null;\n is_full: boolean;\n line_length: number | null;\n direction: string | null;\n return_amount_dz: number | null;\n return_amount_pcs: number | null;\n inventories?: IPickedItem[];\n [key: string]: any;\n}\n\ninterface IFormData {\n complete_date: number;\n shell_length: number | null;\n shell_length_max: number | null;\n comment?: string;\n images: any[];\n cost?: number;\n signature?: string;\n time_tracks?: ITimeRange[];\n port_of_unload?: string;\n delivered_to?: string;\n growing_area?: string;\n crop_owner?: string;\n packhouse?: string;\n shell_condition?: string;\n harvester_name?: string;\n oyster_type?: string;\n harvest_number?: string;\n}\n\nconst defaultForm: IFormData = {\n complete_date: Date.now(),\n shell_length: null,\n shell_length_max: null,\n images: [],\n};\n\nconst getNewLineData = (lines: IOysterLineResource[], lineId: number) => {\n const line = lines.find(y => y.id === lineId);\n return {\n line_id: lineId,\n is_full: true,\n amount_dz: line ? getLineOysters(line) ?? null : null,\n amount_pcs: line ? getLineOysters(line, 'pieces') ?? null : null,\n line_length: line?.growing_cycle\n ? line.growing_cycle.current_basket_count\n : null,\n direction: null,\n return_amount_dz: null,\n return_amount_pcs: null,\n };\n};\n\ninterface Props {\n visible: boolean;\n title?: string;\n data?: any;\n farm?: IOysterFarm;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n overConfirm?: (data: any) => void;\n onlyView?: boolean;\n confirmID?: number;\n warningMessage?: string;\n}\n\nconst OysterBulkHarvestModal = ({\n visible,\n title,\n farm: farmData,\n data: paramData,\n onCancel,\n onConfirm,\n overConfirm,\n onlyView,\n confirmID,\n warningMessage,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const farmsData = SelectOysterFarmsByFarmID(farmData?.id);\n const farmUtils = SelectUtilsByFarmID(farmData?.id);\n const profile = useSelector(selectProfile);\n const port_of_unloads = farmUtils.filter(x => x.type === 'port_of_unload'),\n delivered_tos = farmUtils.filter(x => x.type === 'delivered_to'),\n packhouses = farmUtils.filter(x => x.type === 'packhouse');\n const sizedOysters = SelectSizedOystersByFarmID(farmData?.id);\n\n const allLines = useMemo(() => {\n if (farmData) return farmData.lines;\n\n let result: IOysterLineResource[] = [];\n if (paramData && paramData.lines.length > 0) {\n let farm = farmsData.find(x =>\n x.lines.some(y => y.id === paramData.lines[0].line_id),\n );\n if (farm) {\n result = [...farm.lines];\n }\n }\n return result;\n }, [farmData, farmsData, paramData]);\n\n const linesOptions = allLines\n .filter(x => !!x.growing_cycle)\n .map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.farm_name} - ${x.line_name}`,\n farming_method: x.farming_method,\n }));\n const metaFields = sizedOysters.map(x => ({\n key: toStrSlug(x.name),\n label: x.name,\n }));\n const metaDefaults = metaFields.reduce((p, c) => {\n p[c.key] = 0;\n return p;\n }, {} as any);\n\n const signatureCanvas = useRef();\n const [formData, setFormData] = useState(\n paramData\n ? {\n ...defaultForm,\n ...paramData,\n complete_date: paramData.complete_date\n ? toMillisecond(paramData.complete_date)\n : Date.now(),\n time_tracks: paramData.time_tracks\n ? paramData.time_tracks.map((x: any) => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n }))\n : [],\n }\n : {\n ...defaultForm,\n port_of_unload:\n port_of_unloads && port_of_unloads.length > 0\n ? port_of_unloads[0].name\n : defaultForm.port_of_unload,\n delivered_to:\n delivered_tos && delivered_tos.length > 0\n ? delivered_tos[0].name\n : defaultForm.delivered_to,\n packhouse:\n packhouses && packhouses.length > 0\n ? packhouses[0].name\n : defaultForm.packhouse,\n crop_owner:\n farmData && farmData.owners && farmData.owners.length > 0\n ? farmData.owners[0].title\n : null,\n growing_area: farmData?.name,\n harvester_name: profile?.name ?? null,\n },\n );\n const [harvestedLines, setHarvestedLines] = useState(\n paramData && paramData.lines ? paramData.lines : [],\n );\n const [disabled, setDisabled] = useState(false);\n const [sigCanLoaded, setSigCanLoaded] = useState(false);\n const [errorMsg, setErrorMsg] = useState();\n const [showPort, setShowPort] = useState(\n !port_of_unloads || port_of_unloads?.length <= 0,\n );\n const [showDel, setShowDel] = useState(\n !delivered_tos || delivered_tos?.length <= 0,\n );\n const [showPac, setShowPac] = useState(\n !packhouses || packhouses?.length <= 0,\n );\n\n const updateHarvestedLine = (lineId: number, key: string, value: any) => {\n if (\n ![\n 'is_full',\n 'inventories',\n 'amount_dz',\n 'return_amount_dz',\n 'direction',\n ].includes(key)\n ) {\n value = value.length <= 0 ? null : Number(value);\n }\n let tmp = [...harvestedLines];\n const i = harvestedLines.findIndex(x => x.line_id === lineId);\n if (i > -1) {\n tmp[i] = { ...tmp[i], [key]: value };\n if (metaFields.some(x => x.key === key)) {\n const amountSum = metaFields.reduce(\n (p, c) => p + (tmp[i][c.key] ?? 0),\n 0,\n );\n tmp[i] = {\n ...tmp[i],\n amount_dz: amountSum,\n amount_pcs: dozensToPieces(amountSum),\n };\n } else if (key === 'amount_dz') {\n tmp[i] = {\n ...tmp[i],\n amount_pcs: value ? dozensToPieces(value) : null,\n };\n } else if (key === 'return_amount_dz') {\n tmp[i] = {\n ...tmp[i],\n return_amount_pcs: value ? dozensToPieces(value) : null,\n };\n } else if (key === 'is_full') {\n const dt = getNewLineData(allLines, lineId);\n tmp[i].amount_dz = value ? dt.amount_dz : null;\n tmp[i].amount_pcs = value ? dt.amount_pcs : null;\n tmp[i].line_length = value ? dt.line_length : null;\n } else if (key === 'direction') {\n tmp[i].direction = value;\n }\n }\n setHarvestedLines(tmp);\n };\n const selectLines = (val: string[]) => {\n let tmp: ILineData[] = val.map(x => ({\n ...metaDefaults,\n ...getNewLineData(allLines, Number(x)),\n }));\n for (let t of harvestedLines) {\n const i = tmp.findIndex(x => x.line_id === t.line_id);\n if (i > -1) {\n tmp[i] = { ...t };\n }\n }\n setHarvestedLines(tmp);\n };\n const updateForm = (key: keyof IFormData, value: any) => {\n if (\n key === 'shell_length' ||\n key === 'shell_length_max' ||\n key === 'cost'\n ) {\n value = value.length <= 0 ? null : Number(value);\n }\n setFormData({ ...formData, [key]: value });\n };\n const confirmClick = async () => {\n if (harvestedLines.length <= 0) {\n setErrorMsg(translate(lang, 'Please select at least one line'));\n return;\n }\n for (let line of harvestedLines) {\n const fd = allLines.find(x => x.id === line.line_id);\n if (!line.line_length) {\n setErrorMsg(\n translate(\n lang,\n 'Please input number of %s',\n `${fd?.farming_method} of ${fd?.farm_name} - ${fd?.line_name}`,\n ),\n );\n return;\n }\n if (confirmID) {\n const nu = metaFields.find(\n x => line[x.key] === null || line[x.key] === undefined,\n );\n if (nu) {\n setErrorMsg(\n translate(\n lang,\n 'Please input %s of %s',\n nu.label,\n `${fd?.farm_name} - ${fd?.line_name}`,\n ),\n );\n return;\n }\n if (!line.amount_dz) {\n setErrorMsg(\n translate(\n lang,\n 'Please input amount of %s',\n `${fd?.farm_name} - ${fd?.line_name}`,\n ),\n );\n return;\n }\n }\n if (line.inventories && line.inventories.length > 0) {\n if (!fd?.growing_cycle?.inventories_sum) {\n setErrorMsg(\n translate(\n lang,\n 'No inventories for %s',\n `${fd?.farm_name} - ${fd?.line_name}`,\n ),\n );\n return;\n }\n for (let ivt of line.inventories) {\n const ivtData = fd.growing_cycle.inventories_sum.find(\n x => x.inventory_id === ivt.inventory_id,\n );\n if (!ivtData) {\n setErrorMsg(\n translate(\n lang,\n 'Inventory %s not found in %s',\n ivt.inventory_id,\n `${fd?.farm_name} - ${fd?.line_name}`,\n ),\n );\n return;\n }\n if (ivtData.quantity < (ivt.quantity ?? 0)) {\n setErrorMsg(\n translate(\n lang,\n 'Inventory %s quantity is over in %s',\n `${ivtData.inventory_name}`,\n `${fd?.farm_name} - ${fd?.line_name}`,\n ),\n );\n return;\n }\n }\n }\n }\n if (\n formData.shell_length_max !== null &&\n (formData.shell_length === null ||\n formData.shell_length > formData.shell_length_max)\n ) {\n setErrorMsg(\n translate(\n lang,\n 'Shell length must be less than or equal to shell length max',\n ),\n );\n return;\n }\n const tt =\n formData.time_tracks && formData.time_tracks.length > 0\n ? toSecTimeTracks(formData.time_tracks)\n : undefined;\n const data = {\n ...formData,\n complete_date: toSecond(formData.complete_date),\n lines: harvestedLines,\n signature: signatureCanvas.current?.toDataURL() ?? null,\n time_tracks: tt ? tt : undefined,\n track_code: paramData?.track_code,\n };\n\n if (overConfirm) {\n overConfirm(data);\n return;\n }\n\n setDisabled(true);\n const res = confirmID\n ? await sendSingleRequest(\n { ...data, id: confirmID },\n 'POST',\n 'api/queue/confirm-bulk-harvest/oyster',\n true,\n )\n : await sendSingleRequest(\n data,\n 'POST',\n 'api/farm/line/bulk-oyster-harvest',\n true,\n );\n if (res.status) {\n dispatch(loadFarmsData());\n dispatch(loadInventories());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n onConfirm(res.data);\n } else {\n setErrorMsg(translate(lang, res.data?.message ?? 'Request failed'));\n setDisabled(false);\n }\n };\n\n useEffect(() => {\n if (sigCanLoaded && paramData && paramData.signature) {\n signatureCanvas.current?.fromDataURL(paramData.signature);\n }\n }, [paramData, sigCanLoaded, signatureCanvas.current]);\n\n return (\n }\n width={1100}\n >\n
\n {!!errorMsg && (\n setErrorMsg(undefined)}\n />\n )}\n
\n \n {translate(lang, title ?? 'Oyster bulk harvest')}\n \n
\n {!!warningMessage && (\n
{warningMessage}
\n )}\n
\n
\n x.line_id.toString()) as any}\n onChange={(v: any) => selectLines(v)}\n showSearch={true}\n disabled={disabled}\n />\n
\n
\n {harvestedLines.map(line => (\n
\n
\n \n {translate(\n lang,\n 'Detail of %s',\n linesOptions.find(x => Number(x.id) === line.line_id)\n ?.label ?? '',\n )}\n \n
\n
\n
\n \n updateHarvestedLine(line.line_id, 'is_full', v === 'full')\n }\n />\n
\n
\n Number(x.id) === line.line_id)\n ?.farming_method ?? '',\n )}\n value={line.line_length?.toString() ?? ''}\n onChange={e =>\n updateHarvestedLine(\n line.line_id,\n 'line_length',\n e.target.value,\n )\n }\n />\n
\n
\n \n updateHarvestedLine(\n line.line_id,\n 'amount_dz',\n e.target.value,\n )\n }\n unit='dozens'\n />\n
\n
\n
\n \n updateHarvestedLine(line.line_id, 'direction', v)\n }\n />\n
\n x.id === line.line_id) as IOysterLineResource\n }\n form={line.inventories ?? []}\n setForm={v => updateHarvestedLine(line.line_id, 'inventories', v)}\n />\n
\n {metaFields.map(meta => (\n
\n \n updateHarvestedLine(\n line.line_id,\n meta.key,\n e.target.value,\n )\n }\n />\n
\n ))}\n
\n
\n
\n \n updateHarvestedLine(\n line.line_id,\n 'return_amount_dz',\n e.target.value,\n )\n }\n unit='dozens'\n />\n
\n
\n
\n
\n ))}\n
\n
\n
\n \n e && updateForm('complete_date', e.toDate().getTime())\n }\n />\n
\n
\n updateForm('shell_length', e.target.value)}\n unit='mm'\n />\n
\n
\n updateForm('shell_length_max', e.target.value)}\n unit='mm'\n />\n
\n
\n
\n
\n ({\n id: x.id.toString(),\n value: x.name,\n label: x.name,\n })) ?? []),\n { id: '', value: '', label: translate(lang, 'Other') },\n ]}\n value={showPort ? '' : formData.port_of_unload ?? undefined}\n onChange={v => {\n updateForm('port_of_unload', v);\n setShowPort(v.length <= 0);\n }}\n />\n {showPort && (\n updateForm('port_of_unload', e.target.value)}\n value={formData.port_of_unload ?? ''}\n disabled={onlyView}\n />\n )}\n
\n
\n updateForm('growing_area', e.target.value)}\n value={formData.growing_area ?? ''}\n disabled={onlyView}\n />\n
\n
\n
\n
\n ({\n id: x.id.toString(),\n value: x.name,\n label: x.name,\n })) ?? []),\n { id: '', value: '', label: translate(lang, 'Other') },\n ]}\n value={showPac ? '' : formData.packhouse ?? undefined}\n onChange={v => {\n updateForm('packhouse', v);\n setShowPac(v.length <= 0);\n }}\n placeholder={translate(lang, 'Select packhouse')}\n />\n {showPac && (\n updateForm('packhouse', e.target.value)}\n value={formData.packhouse ?? ''}\n disabled={onlyView}\n />\n )}\n
\n
\n ({\n id: x.id.toString(),\n value: x.name,\n label: x.name,\n })) ?? []),\n { id: '', value: '', label: translate(lang, 'Other') },\n ]}\n value={showDel ? '' : formData.delivered_to ?? undefined}\n onChange={v => {\n updateForm('delivered_to', v);\n setShowDel(v.length <= 0);\n }}\n placeholder={translate(lang, 'Select delivered to')}\n />\n {showDel && (\n updateForm('delivered_to', e.target.value)}\n value={formData.delivered_to ?? ''}\n disabled={onlyView}\n />\n )}\n
\n
\n
\n
\n updateForm('oyster_type', e.target.value)}\n value={formData.oyster_type ?? ''}\n disabled={onlyView}\n />\n
\n
\n updateForm('shell_condition', e.target.value)}\n value={formData.shell_condition ?? ''}\n disabled={onlyView}\n />\n
\n
\n
\n
\n updateForm('crop_owner', e.target.value)}\n value={formData.crop_owner ?? ''}\n disabled={onlyView}\n />\n
\n
\n updateForm('harvester_name', e.target.value)}\n value={formData.harvester_name ?? ''}\n disabled={onlyView}\n />\n
\n
\n {!!formData.time_tracks && (\n
\n updateForm('time_tracks', t)}\n disabled={onlyView}\n />\n
\n )}\n
\n updateForm('harvest_number', e.target.value)}\n disabled={onlyView}\n />\n
\n
\n updateForm('comment', e.target.value)}\n value={formData.comment ?? ''}\n name='comment'\n />\n
\n
\n updateForm('images', v)}\n disabled={onlyView}\n />\n
\n
\n

\n {translate(lang, 'Signature')}\n

\n \n {\n signatureCanvas.current = r;\n setSigCanLoaded(true);\n }}\n penColor='green'\n canvasProps={{ width: 550, height: 200 }}\n />\n
\n
\n
\n
\n \n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n
\n \n );\n};\n\nexport default OysterBulkHarvestModal;\n","import { IFarmResource, IOysterFarm } from '../../../entities/farms.entities';\nimport { TBusinessType } from '../../../entities/general.entities';\nimport MusselBulkHarvestModal from './MusselBulkHarvestModal';\nimport OysterBulkHarvestModal from './OysterBulkHarvestModal';\n\ninterface Props {\n type: TBusinessType;\n visible: boolean;\n title?: string;\n farm?: IFarmResource;\n data?: any;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n overConfirm?: (data: any) => void;\n onlyView?: boolean;\n warningMessage?: string;\n confirmID?: number;\n}\n\nconst BulkHarvestModal = ({\n type,\n visible,\n title,\n farm,\n data,\n onCancel,\n onConfirm,\n overConfirm,\n onlyView,\n warningMessage,\n confirmID,\n}: Props) => (\n <>\n {type === 'MUSSEL' ? (\n \n ) : type === 'OYSTER' ? (\n \n ) : (\n <>\n )}\n \n);\n\nexport default BulkHarvestModal;\n","import { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, useParams, useHistory } from 'react-router-dom';\nimport { useWidth } from '../../util/useWidth';\nimport {\n Button,\n BreadcrumbComponent,\n Title,\n Subtitle,\n DropdownMenu,\n BgIcon,\n ExpandArrowIcon,\n OwnerIcon,\n ClockIcon,\n Spinner,\n} from '../../components/shared';\nimport NameWithPercent from '../../components/shared/name-with-percent/NameWithPercent';\nimport Tooltip from '../../components/shared/tooltip/Tooltip';\nimport { getInterest } from '../../util/farmUtil';\nimport { sendSingleRequest } from '../../apis';\nimport { Image } from 'antd';\nimport farm_image from '../../images/farm.png';\nimport getBreadcrumbMenu from '../../util/BreadcrumbMenu';\nimport { loadSpatStorages } from '../../store/farms/farms.actions';\nimport { selectLang, selectSpin } from '../../store/ui/ui.selector';\nimport LinesTable from '../../components/shared/tables/LinesTable';\nimport { randomKey } from '../../lib/common.helpers';\nimport BulkHarvestModal from '../../components/farm-modals/BulkHarvestModal';\nimport LinesMobile from '../../components/shared/table-mobile/LinesMobile';\nimport { translate } from '../../lib/lang.helper';\nimport {\n selectAllFarms,\n SelectIsEditable,\n} from '../../store/extra/extra.selector';\nimport InterestGrowth from '../../components/shared/tables-card/InterestGrowth';\n\ninterface IApiFarmCard {\n name: string;\n this_year: number;\n last_year: number;\n interest: any;\n}\n\nconst Farm = () => {\n const width = useWidth();\n const history = useHistory();\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const isSpinner = useSelector(selectSpin);\n const farmsData = useSelector(selectAllFarms);\n\n const params = useParams<{ idFarm: string }>();\n const currentFarm = farmsData.find(x => x.id === Number(params.idFarm));\n const isEditable = SelectIsEditable(Number(params.idFarm));\n\n const [stats, setStats] = useState([]);\n const [showBulkHarvest, setShowBulkHarvest] = useState(false);\n\n useEffect(() => {\n dispatch(loadSpatStorages());\n }, [dispatch]);\n\n const breadcrumbItems = getBreadcrumbMenu('FARM_DETAIL', {\n FARM_ID: params.idFarm,\n FARM_NAME: currentFarm?.name,\n });\n\n const loadStats = async () => {\n const response = await sendSingleRequest(\n { farm_id: params.idFarm },\n 'GET',\n 'api/overview/farm-budget-info',\n true,\n );\n if (response.status) {\n const newGeneralStats = response.data?.map((item: any) => {\n const interest = getInterest(\n item?.this_year,\n item?.last_year ? item?.last_year : null,\n );\n return { ...item, interest };\n });\n setStats(newGeneralStats);\n }\n };\n\n useEffect(() => {\n loadStats();\n }, []);\n\n const handleOnEdit = () => {\n history.push(`/farms/farm-edit/${params.idFarm}`);\n };\n\n const tooltipItems =\n currentFarm?.owners.map((x, i) => {\n return {\n title: `${x.title} - ${x.percent}%`,\n id: i + 1,\n };\n }) ?? [];\n\n return (\n
\n
\n {width > 768 && (\n
\n \n
\n {currentFarm?.type === 'OYSTER' && (\n
\n setShowBulkHarvest(true)}\n >\n {translate(lang, 'Bulk Harvest')}\n \n
\n )}\n {!currentFarm?.is_flupsy && (\n <>\n {isEditable && (\n \n \n \n )}\n \n )}\n
\n
\n )}\n\n
\n
\n
\n
\n \n {currentFarm?.name}\n \n \n {currentFarm?.farm_number}\n \n
\n {width <= 768 && isEditable && (\n
\n \n
\n )}\n
\n
\n } />\n
\n \n {translate(lang, 'Area')}\n \n \n {currentFarm?.area} ha\n \n
\n
\n
\n } />\n
\n \n {translate(lang, 'Owner')}\n \n \n
\n {currentFarm?.owners.map((x, i) => {\n const key = randomKey();\n return (\n
\n \n
\n );\n })}\n
\n
\n
\n
\n
\n } />\n
\n \n {translate(lang, 'Average line empty per year')}\n \n \n {currentFarm?.idle_avg === 1\n ? '1 day'\n : `${currentFarm?.idle_avg} days`}\n \n
\n
\n
\n \n \n \n
\n {width > 768 ? (\n
\n {isEditable && (\n \n )}\n
\n ) : (\n <>\n {!currentFarm?.is_flupsy && (\n isEditable && (\n \n \n {translate(lang, 'Add Line')}\n \n \n )\n )}\n \n )}\n
\n {stats.length > 0 && (\n \n {stats.map((stat, i) => (\n \n \n \n {`${stat.name} this year: ${stat.this_year}`}\n \n \n {`${stat.name} last year: ${stat.last_year}`}\n \n \n
\n \n
\n
\n ))}\n
\n )}\n {currentFarm && (\n <>\n {width > 768 ? (\n \n ) : (\n \n )}\n \n )}\n
\n {isSpinner && }\n \n {showBulkHarvest && currentFarm && (\n setShowBulkHarvest(false)}\n onCancel={() => setShowBulkHarvest(false)}\n />\n )}\n \n );\n};\n\nexport default Farm;\n","import { useState } from 'react';\nimport { DatePicker, Modal, Radio } from 'antd';\nimport { toMillisecond, toSecond } from '../../../util/toggleSecondMillisecond';\nimport { IMusselLineResource } from '../../../entities/farms.entities';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Dropdown,\n Input,\n RadioButton,\n Subtitle,\n} from '../../shared';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { sendSingleRequest } from '../../../apis';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { ICustomValue } from '../../../entities/automation.entities';\nimport { Link } from 'react-router-dom';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport {\n SelectInventoriesByFarmID,\n SelectIsBudgetVisible,\n SelectSeedingFields,\n} from '../../../store/extra/extra.selector';\nimport moment from 'moment';\nimport { inventoryLabel } from '../../../lib/farm.helpers';\nconst { RangePicker } = DatePicker;\n\ninterface IFormData {\n line_length: number | null;\n spat_size: number | null;\n spat_size_max: number | null;\n density?: number;\n density_max?: number | null;\n density_unit: 'spat per m' | 'kgs per m';\n drop?: number;\n submersion?: number;\n spacing?: number;\n comment: string | null;\n images: any[];\n time_tracks?: ITimeRange[];\n cost?: number | null;\n custom_values?: ICustomValue[];\n}\n\nconst defaultForm: IFormData = {\n line_length: null,\n drop: 0,\n submersion: 0,\n spacing: 0,\n spat_size: 0,\n spat_size_max: null,\n density: 0,\n density_max: null,\n density_unit: 'spat per m',\n comment: null,\n images: [],\n time_tracks: [],\n};\n\ninterface Props {\n visible: boolean;\n title: string;\n lineData: IMusselLineResource;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n data?: any;\n overConfirm?: (data: any) => Promise;\n}\n\nconst MusselCatchSpatModal = ({\n visible,\n title,\n lineData,\n onCancel,\n onConfirm,\n data: paramData,\n overConfirm,\n}: Props) => {\n const dispatch = useDispatch();\n\n const showBudget = SelectIsBudgetVisible(lineData.farm_id);\n const customFields = SelectSeedingFields(lineData.farm_id);\n const inventories = SelectInventoriesByFarmID(lineData.farm_id);\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [startDate, setStartDate] = useState(\n paramData && paramData.planned_date_seed\n ? toMillisecond(paramData.planned_date_seed)\n : 0,\n );\n const [endDate, setEndDate] = useState(\n paramData && paramData.planned_date_harvest\n ? toMillisecond(paramData.planned_date_harvest)\n : 0,\n );\n const [error, setError] = useState(null);\n const [fieldData, setFieldData] = useState(\n paramData\n ? {\n ...defaultForm,\n ...paramData,\n time_tracks: paramData.time_tracks\n ? paramData.time_tracks.map((x: any) => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n }))\n : [],\n }\n : {\n ...defaultForm,\n line_length: lineData.length,\n },\n );\n const [addDensityRange, setAddDensityRange] = useState(\n paramData?.density_max ? true : false,\n );\n const [addSpatSizeRange, setAddSpatSizeRange] = useState(\n paramData?.spat_size_max ? true : false,\n );\n const [customValues, setCustomValues] = useState(\n customFields.map(x => {\n const d =\n paramData && paramData.custom_values\n ? paramData.custom_values.find(\n (y: ICustomValue) => y.field_id === x.id,\n )\n : null;\n return {\n input_type: x.input_type,\n field_label: x.name,\n options: x.options\n ?.split(',')\n .map(t => ({ id: t, label: t, value: t })),\n field_id: x.id,\n field_val: d?.field_val ?? '',\n data_type: x.data_type,\n unit: x.unit,\n };\n }),\n );\n const [pickedInventories, setPickedInventories] = useState(\n paramData?.picked_inventories ?? [],\n );\n\n const fieldValid = () => {\n if (startDate === 0 || endDate === 0) {\n setError(translate(lang, 'Please select range'));\n return null;\n }\n if (\n fieldData.spat_size &&\n fieldData.spat_size_max !== null &&\n fieldData.spat_size > fieldData.spat_size_max\n ) {\n setError(translate(lang, 'Invalid spat size range'));\n return null;\n }\n if (\n fieldData.density_max &&\n fieldData.density &&\n fieldData.density > fieldData.density_max\n ) {\n setError(translate(lang, 'Invalid density range'));\n return null;\n }\n if (!fieldData.line_length) {\n setError(translate(lang, 'Catch spat length should not be empty'));\n return null;\n }\n for (let px of pickedInventories) {\n const ivt = inventories.find(x => x.id === px.id);\n if (!ivt) {\n setError(translate(lang, 'Inventory is not found'));\n return null;\n }\n if (isNaN(Number(px.quantity)) || Number(px.quantity) <= 0) {\n setError(translate(lang, '_invalid_ivt_qty', ivt.name ?? ''));\n return null;\n }\n if (Number(px.quantity) > ivt.available_quantity) {\n setError(\n translate(\n lang,\n '_seed_floats_over',\n px.quantity,\n ivt.name ?? '',\n ivt.available_quantity,\n ),\n );\n return null;\n }\n }\n let res = {\n planned_date_seed: toSecond(startDate),\n planned_date_harvest: toSecond(endDate),\n line_id: lineData.id,\n ...fieldData,\n picked_inventories:\n pickedInventories.length > 0 ? pickedInventories : undefined,\n is_catch_spat: true,\n };\n if (res.time_tracks && res.time_tracks.length > 0) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (!tt) {\n setError(translate(lang, 'Invalid time tracks information'));\n return null;\n }\n res.time_tracks = tt;\n }\n const cvs = customValues\n .filter(x => !!x.field_val)\n .map(({ field_id, field_val }) => ({ field_id, field_val }));\n if (cvs.length > 0) {\n res.custom_values = cvs;\n }\n return res;\n };\n const onRangeChange = (dates: any, dateStrings: any) => {\n setStartDate(dates[0].toDate().getTime());\n setEndDate(dates[1].toDate().getTime());\n setError(null);\n };\n const updateField = (key: keyof IFormData, val: any) => {\n if (['spacing', 'density'].includes(key)) {\n val = val.length <= 0 ? null : Number(val);\n }\n setFieldData({ ...fieldData, [key]: val });\n };\n const toggleAddRangeCheck = (type: 'DENSITY' | 'SPAT', val: boolean) => {\n if (type === 'DENSITY') {\n setAddDensityRange(val);\n if (val) updateField('density_max', fieldData.density);\n else updateField('density_max', null);\n } else {\n setAddSpatSizeRange(val);\n if (val) updateField('spat_size_max', fieldData.spat_size);\n else updateField('spat_size_max', null);\n }\n };\n const selectInventoryIds = (val: string[]) => {\n let pArr = val.map(x => ({ id: parseInt(x), quantity: '' }));\n for (let p of pickedInventories) {\n let i = pArr.findIndex(x => x.id === p.id);\n if (i > -1) pArr[i].quantity = p.quantity;\n }\n setPickedInventories(pArr);\n };\n const updateInventoryQuantity = (\n event: React.ChangeEvent,\n ) => {\n const {\n value,\n dataset: { type },\n } = event.target;\n let pickedArr = [...pickedInventories];\n pickedArr[parseInt(type ?? '0')].quantity = value;\n setPickedInventories(pickedArr);\n };\n const handleConfirmClick = async () => {\n const form = fieldValid();\n if (!form) return;\n\n setDisabled(true);\n if (!!overConfirm) {\n const ovc = await overConfirm(form);\n if (ovc !== true) {\n setDisabled(false);\n if (ovc.message) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, ovc.message),\n }),\n );\n }\n }\n return;\n }\n const res = await sendSingleRequest(\n form,\n 'POST',\n 'api/farm/line/catch-spat',\n true,\n );\n if (res.status) {\n dispatch(loadFarmsData());\n onConfirm(res.data);\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n } else {\n setError(translate(lang, res.data?.message ?? 'Request failed'));\n setDisabled(false);\n }\n };\n const updateCustomValue = (fieldID: number, val: string) => {\n let tmp = [...customValues];\n const i = tmp.findIndex(x => x.field_id === fieldID);\n if (i >= 0) {\n tmp[i].field_val = val;\n }\n setCustomValues(tmp);\n };\n\n return (\n }\n width={650}\n >\n
\n
\n \n {title}\n \n
\n
\n \n
\n \n
\n {error && (\n \n
{error}
\n
\n )}\n {fieldData.time_tracks && (\n updateField('time_tracks', t)}\n />\n )}\n
\n updateField('line_length', Number(e.target.value))}\n required\n unit='m'\n />\n
\n
\n updateField('drop', Number(e.target.value))}\n />\n
\n
\n toggleAddRangeCheck('SPAT', e.target.checked)}\n />\n
\n {fieldData.spat_size_max === null ? (\n
\n updateField('spat_size', Number(e.target.value))}\n unit='mm'\n required\n />\n
\n ) : (\n
\n
\n \n updateField('spat_size', Number(e.target.value))\n }\n />\n
\n
\n \n updateField('spat_size_max', Number(e.target.value))\n }\n />\n
\n
\n )}\n
\n
\n \n updateField('submersion', Number(e.target.value))\n }\n />\n
\n
\n updateField('spacing', Number(e.target.value))}\n />\n
\n
\n
\n
\n toggleAddRangeCheck('DENSITY', e.target.checked)}\n />\n
\n updateField('density_unit', e.target.value)}\n value={fieldData.density_unit}\n >\n \n \n \n
\n
\n
\n {fieldData.density_max === null ? (\n updateField('density', Number(e.target.value))}\n unit={fieldData.density_unit}\n />\n ) : (\n
\n
\n \n updateField('density', Number(e.target.value))\n }\n unit={fieldData.density_unit}\n />\n
\n
\n \n updateField('density_max', Number(e.target.value))\n }\n unit={fieldData.density_unit}\n />\n
\n
\n )}\n
\n
\n {customValues.map(x => (\n
\n {x.input_type === 'select' ? (\n <>\n updateCustomValue(x.field_id, v)}\n />\n {(!x.options || x.options.length <= 0) && (\n \n \n {translate(lang, 'Set up field')}\n \n \n )}\n \n ) : (\n updateCustomValue(x.field_id, e.target.value)}\n unit={x.unit}\n />\n )}\n
\n ))}\n {!!showBudget && (\n
\n \n updateField(\n 'cost',\n e.target.value.length <= 0\n ? undefined\n : Number(e.target.value),\n )\n }\n />\n
\n )}\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: inventoryLabel(x),\n }))}\n value={pickedInventories.map(x => x.id.toString()) as any}\n onChange={(val: any) => selectInventoryIds(val)}\n />\n
\n {pickedInventories.length > 0 && (\n
\n {pickedInventories.map((item, idx) => (\n t.id === item.id)?.name} - $${\n inventories.find(t => t.id === item.id)?.price\n }`}\n placeholder={translate(\n lang,\n 'Maximum value is %s',\n inventories.find(t => t.id === item.id)\n ?.available_quantity ?? '',\n )}\n value={item.quantity?.toString() ?? ''}\n dataType={idx.toString()}\n onChange={updateInventoryQuantity}\n max={\n inventories.find(t => t.id === item.id)?.available_quantity\n }\n />\n ))}\n
\n )}\n
\n updateField('comment', e.target.value)}\n />\n
\n
\n updateField('images', v)}\n />\n
\n
\n \n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default MusselCatchSpatModal;\n","import { useState } from 'react';\nimport { DatePicker, Modal } from 'antd';\nimport { toMillisecond, toSecond } from '../../../util/toggleSecondMillisecond';\nimport { IOysterLineResource } from '../../../entities/farms.entities';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Input,\n Subtitle,\n Dropdown,\n} from '../../shared';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { sendSingleRequest } from '../../../apis';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { selectAccount } from '../../../store/auth/auth.selector';\nimport { ICustomValue } from '../../../entities/automation.entities';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport {\n SelectInventoriesByFarmID,\n} from '../../../store/extra/extra.selector';\nimport { inventoryLabel } from '../../../lib/farm.helpers';\nimport moment from 'moment';\nconst { RangePicker } = DatePicker;\n\ninterface IFormData {\n basket_count: number | null;\n spat_size: number;\n spat_size_max: number | null;\n density?: number;\n spacing?: number;\n comment: string | null;\n images: any[];\n time_tracks?: ITimeRange[];\n cost?: number | null;\n custom_values?: ICustomValue[];\n}\n\nconst defaultForm: IFormData = {\n basket_count: null,\n spat_size: 0,\n spat_size_max: null,\n density: 0,\n spacing: 0,\n comment: null,\n images: [],\n time_tracks: [],\n};\n\ninterface Props {\n visible: boolean;\n title: string;\n lineData: IOysterLineResource;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n data?: any;\n overConfirm?: (data: any) => Promise;\n}\n\nconst OysterCatchSpatModal = ({\n visible,\n title,\n lineData,\n onCancel,\n onConfirm,\n data: paramData,\n overConfirm,\n}: Props) => {\n const dispatch = useDispatch();\n\n const showBudget = useSelector(selectAccount)?.show_budget_menu;\n const inventories = SelectInventoriesByFarmID(lineData.farm_id);\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [startDate, setStartDate] = useState(\n paramData && paramData.planned_date_seed\n ? toMillisecond(paramData.planned_date_seed)\n : 0,\n );\n const [endDate, setEndDate] = useState(\n paramData && paramData.planned_date_harvest\n ? toMillisecond(paramData.planned_date_harvest)\n : 0,\n );\n const [error, setError] = useState(null);\n const [fieldData, setFieldData] = useState(\n paramData\n ? {\n ...defaultForm,\n ...paramData,\n time_tracks: paramData.time_tracks\n ? paramData.time_tracks.map((x: any) => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n }))\n : [],\n }\n : {\n ...defaultForm,\n basket_count: lineData.basket_count,\n },\n );\n const [addSpatSizeRange, setAddSpatSizeRange] = useState(\n paramData?.spat_size_max ? true : false,\n );\n\n const [pickedInventories, setPickedInventories] = useState(\n paramData?.picked_inventories ?? [],\n );\n\n const fieldValid = () => {\n if (startDate === 0 || endDate === 0) {\n setError(translate(lang, 'Please select range'));\n return null;\n }\n if (\n fieldData.spat_size_max !== null &&\n fieldData.spat_size > fieldData.spat_size_max\n ) {\n setError(translate(lang, 'Invalid spat size range'));\n return null;\n }\n if (!fieldData.basket_count || fieldData.basket_count <= 0) {\n setError(translate(lang, 'Invalid basket count'));\n return null;\n }\n let res = {\n planned_date_seed: toSecond(startDate),\n planned_date_harvest: toSecond(endDate),\n line_id: lineData.id,\n ...fieldData,\n is_catch_spat: true,\n picked_inventories:\n pickedInventories.length > 0 ? pickedInventories : undefined,\n };\n if (res.time_tracks && res.time_tracks.length > 0) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (!tt) {\n setError(translate(lang, 'Invalid time tracks information'));\n return null;\n }\n res.time_tracks = tt;\n }\n return res;\n };\n const onRangeChange = (dates: any, dateStrings: any) => {\n setStartDate(dates[0].toDate().getTime());\n setEndDate(dates[1].toDate().getTime());\n setError(null);\n };\n const updateField = (key: keyof IFormData, val: any) => {\n if (['spacing', 'density'].includes(key)) {\n val = val.length <= 0 ? undefined : Number(val);\n }\n setFieldData({ ...fieldData, [key]: val });\n };\n const toggleAddRangeCheck = (val: boolean) => {\n setAddSpatSizeRange(val);\n if (val) updateField('spat_size_max', fieldData.spat_size);\n else updateField('spat_size_max', null);\n };\n const selectInventoryIds = (val: string[]) => {\n let pArr = val.map(x => ({ id: parseInt(x), quantity: '' }));\n for (let p of pickedInventories) {\n let i = pArr.findIndex(x => x.id === p.id);\n if (i > -1) pArr[i].quantity = p.quantity;\n }\n setPickedInventories(pArr);\n };\n const updateInventoryQuantity = (\n event: React.ChangeEvent,\n ) => {\n const {\n value,\n dataset: { type },\n } = event.target;\n let pickedArr = [...pickedInventories];\n pickedArr[parseInt(type ?? '0')].quantity = value;\n setPickedInventories(pickedArr);\n };\n const handleConfirmClick = async () => {\n const form = fieldValid();\n if (!form) return;\n\n setDisabled(true);\n if (!!overConfirm) {\n const ovc = await overConfirm(form);\n if (ovc !== true) {\n setDisabled(false);\n if (ovc.message) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, ovc.message),\n }),\n );\n }\n }\n return;\n }\n const res = await sendSingleRequest(\n form,\n 'POST',\n 'api/farm/line/catch-spat',\n true,\n );\n if (res.status) {\n dispatch(loadFarmsData());\n onConfirm(res.data);\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n } else {\n setError(translate(lang, res.data?.message ?? 'Request failed'));\n setDisabled(false);\n }\n };\n\n return (\n }\n width={650}\n >\n
\n
\n \n {title}\n \n
\n
\n \n
\n \n
\n {error && (\n \n
{error}
\n
\n )}\n {fieldData.time_tracks && (\n updateField('time_tracks', t)}\n />\n )}\n
\n toggleAddRangeCheck(e.target.checked)}\n />\n
\n {fieldData.spat_size_max === null ? (\n
\n updateField('spat_size', Number(e.target.value))}\n />\n
\n ) : (\n
\n
\n \n updateField('spat_size', Number(e.target.value))\n }\n />\n
\n
\n \n updateField('spat_size_max', Number(e.target.value))\n }\n />\n
\n
\n )}\n
\n
\n \n updateField('basket_count', Number(e.target.value))\n }\n />\n
\n
\n updateField('spacing', e.target.value)}\n />\n
\n
\n {!!showBudget && (\n
\n \n updateField(\n 'cost',\n e.target.value.length <= 0\n ? undefined\n : Number(e.target.value),\n )\n }\n />\n
\n )}\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: inventoryLabel(x),\n }))}\n value={pickedInventories.map(x => x.id.toString()) as any}\n onChange={(val: any) => selectInventoryIds(val)}\n />\n
\n {pickedInventories.length > 0 && (\n
\n {pickedInventories.map((item, idx) => (\n t.id === item.id)?.name} - $${\n inventories.find(t => t.id === item.id)?.price\n }`}\n placeholder={translate(\n lang,\n 'Maximum value is %s',\n inventories.find(t => t.id === item.id)\n ?.available_quantity ?? '',\n )}\n value={item.quantity?.toString() ?? ''}\n dataType={idx.toString()}\n onChange={updateInventoryQuantity}\n max={\n inventories.find(t => t.id === item.id)?.available_quantity\n }\n />\n ))}\n
\n )}\n
\n updateField('comment', e.target.value)}\n />\n
\n
\n updateField('images', v)}\n />\n
\n
\n \n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default OysterCatchSpatModal;\n","import { useState } from 'react';\nimport { DatePicker, Modal } from 'antd';\nimport toggleSecondMillisecond from '../../../util/toggleSecondMillisecond';\nimport { ISeaweedLineResource } from '../../../entities/farms.entities';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Input,\n Subtitle,\n} from '../../shared';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { sendSingleRequest } from '../../../apis';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { selectAccount } from '../../../store/auth/auth.selector';\nimport { ICustomValue } from '../../../entities/automation.entities';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nconst { RangePicker } = DatePicker;\n\ninterface IFormData {\n tank_area: number | null;\n spat_size: number;\n spat_size_max: number | null;\n comment: string | null;\n images: any[];\n time_tracks?: ITimeRange[];\n cost?: number | null;\n custom_values?: ICustomValue[];\n}\n\nconst defaultForm: IFormData = {\n tank_area: null,\n spat_size: 0,\n spat_size_max: null,\n comment: null,\n images: [],\n time_tracks: [],\n};\n\ninterface Props {\n visible: boolean;\n title: string;\n lineData: ISeaweedLineResource;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n}\n\nconst SeaweedCatchSpatModal = ({\n visible,\n title,\n lineData,\n onCancel,\n onConfirm,\n}: Props) => {\n const dispatch = useDispatch();\n\n const showBudget = useSelector(selectAccount)?.show_budget_menu;\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [startDate, setStartDate] = useState(0);\n const [endDate, setEndDate] = useState(0);\n const [error, setError] = useState(null);\n const [fieldData, setFieldData] = useState({\n ...defaultForm,\n tank_area: lineData.tank_area,\n });\n const [addSpatSizeRange, setAddSpatSizeRange] = useState(false);\n\n const fieldValid = () => {\n if (startDate === 0 || endDate === 0) {\n setError(translate(lang, 'Please select range'));\n return null;\n }\n if (\n fieldData.spat_size_max !== null &&\n fieldData.spat_size > fieldData.spat_size_max\n ) {\n setError(translate(lang, 'Invalid spat size range'));\n return null;\n }\n if (!fieldData.tank_area || fieldData.tank_area <= 0) {\n setError(translate(lang, 'Invalid tank area'));\n return null;\n }\n let res = {\n planned_date_seed: toggleSecondMillisecond(startDate),\n planned_date_harvest: toggleSecondMillisecond(endDate),\n line_id: lineData.id,\n ...fieldData,\n };\n if (res.time_tracks && res.time_tracks.length > 0) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (!tt) {\n setError(translate(lang, 'Invalid time tracks information'));\n return null;\n }\n res.time_tracks = tt;\n }\n return res;\n };\n const onRangeChange = (dates: any, dateStrings: any) => {\n setStartDate(dates[0].toDate().getTime());\n setEndDate(dates[1].toDate().getTime());\n setError(null);\n };\n const updateField = (key: keyof IFormData, val: any) => {\n setFieldData({ ...fieldData, [key]: val });\n };\n const toggleAddRangeCheck = (val: boolean) => {\n setAddSpatSizeRange(val);\n if (val) updateField('spat_size_max', fieldData.spat_size);\n else updateField('spat_size_max', null);\n };\n const handleConfirmClick = async () => {\n const form = fieldValid();\n if (!form) return;\n\n setDisabled(true);\n const res = await sendSingleRequest(\n form,\n 'POST',\n 'api/farm/line/catch-spat',\n true,\n );\n if (res.status) {\n dispatch(loadFarmsData());\n onConfirm(res.data);\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n } else {\n setError(translate(lang, res.data?.message ?? 'Request failed'));\n setDisabled(false);\n }\n };\n\n return (\n }\n width={650}\n >\n
\n
\n \n {title}\n \n
\n
\n \n
\n \n
\n {error && (\n \n
{error}
\n
\n )}\n {fieldData.time_tracks && (\n updateField('time_tracks', t)}\n />\n )}\n
\n toggleAddRangeCheck(e.target.checked)}\n />\n
\n {fieldData.spat_size_max === null ? (\n
\n updateField('spat_size', Number(e.target.value))}\n />\n
\n ) : (\n
\n
\n \n updateField('spat_size', Number(e.target.value))\n }\n />\n
\n
\n \n updateField('spat_size_max', Number(e.target.value))\n }\n />\n
\n
\n )}\n
\n updateField('tank_area', Number(e.target.value))}\n unit='m²'\n />\n
\n {!!showBudget && (\n
\n \n updateField(\n 'cost',\n e.target.value.length <= 0\n ? undefined\n : Number(e.target.value),\n )\n }\n />\n
\n )}\n
\n updateField('comment', e.target.value)}\n />\n
\n
\n updateField('images', v)}\n />\n
\n
\n \n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default SeaweedCatchSpatModal;\n","import {\n ILineResource,\n IMusselLineResource,\n IOysterLineResource,\n ISeaweedLineResource,\n} from '../../../entities/farms.entities';\nimport { TBusinessType } from '../../../entities/general.entities';\nimport MusselCatchSpatModal from './MusselCatchSpatModal';\nimport OysterCatchSpatModal from './OysterCatchSpatModal';\nimport SeaweedCatchSpatModal from './SeaweedCatchSpatModal';\n\ninterface Props {\n visible: boolean;\n title: string;\n lineData: ILineResource;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n type: TBusinessType;\n data?: any;\n overConfirm?: (data: any) => Promise;\n}\n\nconst CatchSpatModal = ({\n visible,\n title,\n lineData,\n onCancel,\n onConfirm,\n type,\n data,\n overConfirm,\n}: Props) => (\n <>\n {type === 'MUSSEL' ? (\n \n ) : type === 'OYSTER' ? (\n \n ) : type === 'SEAWEED' ? (\n \n ) : (\n <>\n )}\n \n);\n\nexport default CatchSpatModal;\n","export default \"data:image/png;base64,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\"","import { FC } from 'react';\nimport { Modal } from 'antd';\nimport { CloseIcon, Map, Subtitle } from '../shared';\nimport arrow_png from '../../images/right-arrow.png';\nimport { formatNumber } from '../../entities/util-functions';\nimport { IWeatherConditionResource } from '../../entities/general.entities';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\nconst oneKnot = 1.94384;\n\nconst WindyIcon: FC<{\n wu: string | null;\n wv: string | null;\n}> = ({ wu, wv }) => {\n const x = Number(wu),\n y = Number(wv);\n const s = Math.sqrt(x * x + y * y),\n a = (-Math.atan2(y, x) * 180) / Math.PI;\n\n return s < 1e-9 ? (\n
{`${(s * oneKnot).toFixed(2)} knots`}
\n ) : (\n
\n
{`${(s * oneKnot).toFixed(2)} knots`}
\n
\n \n
\n
\n );\n};\n\ninterface Props {\n data: IWeatherConditionResource;\n onClose: () => void;\n title?: string;\n visible: boolean;\n className?: string;\n}\n\nconst WeatherInfoModal = ({\n data,\n onClose,\n title,\n visible,\n className,\n}: Props) => {\n const lang = useSelector(selectLang);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, title ?? '')}\n \n
\n
\n
\n
\n \n {translate(lang, 'Location Latitude')}\n \n \n {data.latitude} °\n \n
\n
\n \n {translate(lang, 'Location Longitude')}\n \n \n {data.longitude} °\n \n
\n
\n
\n
\n \n {translate(lang, 'Sunset Time')}\n \n \n {data.sunset_time}\n \n
\n
\n \n {translate(lang, 'Temperature')}\n \n \n {Number(data.temperature).toFixed(1)} °C\n \n
\n
\n
\n
\n \n {translate(lang, 'Windy Speed')}\n \n \n \n \n
\n
\n \n {translate(lang, 'Precip')}\n \n \n {Number(data.precip).toFixed(1)} mm\n \n
\n
\n {!!data.pressure && (\n
\n
\n \n {translate(lang, 'Pressure')}\n \n \n {data.pressure\n ? `${formatNumber(data.pressure / 1000)} KPa`\n : ''}\n \n
\n
\n
\n )}\n {data.latitude && data.longitude && (\n
\n \n {translate(lang, 'The data entry location')}\n \n
\n \n
\n
\n )}\n
\n
\n \n );\n};\n\nexport default WeatherInfoModal;\n","export default __webpack_public_path__ + \"static/media/weather-icon.dfb71ddf.png\";","import { useDispatch, useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { selectAccount } from '../../store/auth/auth.selector';\nimport { selectSizedOysters } from '../../store/utils/utils.selector';\nimport { forwardRef, useImperativeHandle, useState, useEffect } from 'react';\nimport { translate } from '../../lib/lang.helper';\nimport { Input } from '../shared';\nimport { formatNumber } from '../../entities/util-functions';\nimport { Table } from 'antd';\nimport { sendSingleRequest } from '../../apis';\nimport { updateAccountSetting } from '../../store/auth/auth.actions';\nimport { loadUtilsData } from '../../store/utils/utils.actions';\nimport {\n calcOnGrowWastePercent,\n calcOysterPercent,\n} from '../../lib/farm.helpers';\n\ninterface IRow {\n id: string | number;\n name: string;\n value: number | undefined;\n}\n\ninterface Props {\n lineID: number;\n totalAmount: number;\n probabilities?: Record;\n amountType?: string;\n}\n\nexport interface OysterProbRef {\n checkIsValid(): string | true;\n runConfirm(): Promise;\n}\n\nconst OysterLineProbTable = forwardRef(\n ({ lineID, totalAmount, probabilities, amountType = 'dz' }, ref) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const onGrowWaste = useSelector(selectAccount)?.oyster_crops;\n const oysterFields = useSelector(selectSizedOysters);\n\n const defaultValues = [\n {\n id: 'Grown ons',\n name: translate(lang, 'Grown ons'),\n value: calcOnGrowWastePercent(onGrowWaste, 'grow', lineID),\n },\n {\n id: 'Waste',\n name: translate(lang, 'Waste'),\n value: calcOnGrowWastePercent(onGrowWaste, 'waste', lineID),\n },\n ...oysterFields.map(x => ({\n id: x.id,\n name: x.name,\n value: calcOysterPercent(x, lineID),\n })),\n ];\n\n const [data, setData] = useState(defaultValues);\n const percentSum = data.reduce((acc, x) => acc + (x.value || 0), 0);\n\n const updateField = (id: number | string, value: string) => {\n const tmp = [...data];\n const i = tmp.findIndex(x => x.id == id);\n tmp[i].value = value.length <= 0 ? undefined : Number(value);\n setData(tmp);\n };\n\n useEffect(() => {\n if (probabilities) {\n Object.keys(probabilities).map((value, key) => {\n updateField(value, probabilities[value]);\n })\n }\n }, [probabilities]);\n\n const columns: any = [\n {\n title: translate(lang, 'Name'),\n key: 'name',\n render: (x: IRow) => x.name,\n width: 180,\n },\n {\n title:\n translate(lang, 'Probability') +\n (percentSum === 100\n ? ''\n : ` (${Math.floor(percentSum).toFixed(1)} %)`),\n key: 'value',\n render: (x: IRow) => (\n updateField(x.id, e.target.value)}\n unit='%'\n />\n ),\n width: 220,\n },\n {\n title: translate(lang, 'Amount'),\n key: 'amount',\n render: (x: IRow) =>\n x.value === undefined || x.value === null ? (\n '-'\n ) : (\n {`${formatNumber((x.value * totalAmount) / 100)} ${amountType}`}\n ),\n align: 'left',\n },\n ];\n\n const canSkip = () => {\n if (data.every(x => !x.value)) return true;\n if (\n data.find(x => x.id === 'Grown ons')?.value !==\n defaultValues.find(x => x.id === 'Grown ons')?.value\n )\n return false;\n if (\n data.find(x => x.id === 'Waste')?.value !==\n defaultValues.find(x => x.id === 'Waste')?.value\n )\n return false;\n return oysterFields.every(x => {\n const nv = data.find(y => y.id === x.id);\n const ov = defaultValues.find(y => y.id === x.id);\n return nv?.value === ov?.value;\n });\n };\n const checkIsValid = () => {\n if (canSkip()) {\n return true;\n }\n if (data.some(x => x.value === undefined || x.value === null)) {\n return translate(lang, 'Please enter probability');\n }\n const sum = data.reduce((acc, x) => acc + (x.value || 0), 0);\n if (Math.abs(100 - sum) > 0.0001) {\n return translate(lang, 'All probability values should total to 100%');\n }\n return true;\n };\n\n const runConfirm = async () => {\n if (canSkip()) {\n return true;\n }\n const isValid = checkIsValid();\n if (isValid !== true) {\n return isValid;\n }\n const utils = oysterFields.map(x => {\n const d = data.find(y => y.id === x.id);\n let json: any = x.json;\n if (!json || !json.lines) {\n json = { lines: { [lineID]: d?.value } };\n } else {\n json.lines[lineID] = d?.value;\n }\n return { ...x, json };\n });\n const res = await sendSingleRequest(\n utils,\n 'POST',\n 'api/utils/bulk',\n true,\n );\n if (!res.status) {\n return res.data?.message ?? 'Server error';\n }\n let lines_grow_ons: any = onGrowWaste?.lines_grow_ons ?? {};\n lines_grow_ons[lineID] = data.find(x => x.id === 'Grown ons')?.value;\n let lines_waste: any = onGrowWaste?.lines_waste ?? {};\n lines_waste[lineID] = data.find(x => x.id === 'Waste')?.value;\n const oyster_crops = {\n ...onGrowWaste,\n lines_grow_ons,\n lines_waste,\n };\n const r = await dispatch(updateAccountSetting({ oyster_crops }));\n if (r !== true) {\n return r ?? 'Server error';\n }\n await dispatch(loadUtilsData());\n return true;\n };\n\n useImperativeHandle(ref, () => ({\n checkIsValid,\n runConfirm,\n }));\n\n return (\n \n );\n },\n);\n\nexport default OysterLineProbTable;\n","import React, { useState, useRef, useEffect } from 'react';\nimport { translate } from '../../../lib/lang.helper';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport {\n Dropdown,\n Input,\n CheckboxButton\n} from '../../shared';\nimport {\n SelectIsMyFarm,\n} from '../../../store/extra/extra.selector';\n\nimport OysterLineProbTable, {\n OysterProbRef,\n} from '../../farm-util/OysterLineProbTable';\nimport {\n SelectAssessFields,\n } from '../../../store/extra/extra.selector';\n\nimport { ICustomValue } from '../../../entities/automation.entities';\nimport { Link } from 'react-router-dom';\nimport { IOysterLineResource } from '../../../entities/farms.entities';\nimport moment from 'moment';\n\ninterface Props {\n lineData: IOysterLineResource;\n data?: any;\n onlyView?: boolean;\n updateForm: (key: keyof IFormData, value: any) => void;\n type: string;\n formDataPassed:any;\n errorsData: any;\n availableDozens: number | null;\n}\n\n\ninterface IFormData {\n season_name: string;\n spat_storage_id: number | null;\n spat_amount_dz: number | null;\n spat_amount_pcs: number | null;\n planned_date_seed: number;\n planned_date_harvest: number;\n spat_size: number;\n spat_size_max: number | null;\n basket_count: number | null;\n spacing: number | null;\n density: number | null;\n comment: string | null;\n direction: string | null;\n cost?: number | null;\n images: any[];\n parent_id?: number | null;\n estimated_amount?: number | null;\n estimated_dozens?: number | null;\n size_min: number | null;\n size_max: number | null;\n size_avg: number | null;\n ready_to_harvest?: boolean;\n measurement_units?: string;\n estimated_pcs?: number | null;\n}\n\nconst defaultFormData: IFormData = {\n season_name: '',\n spat_storage_id: null,\n spat_amount_dz: null,\n spat_amount_pcs: null,\n planned_date_seed: moment().toDate().getTime(),\n planned_date_harvest: moment().toDate().getTime(),\n spat_size: 0,\n spat_size_max: null,\n basket_count: null,\n spacing: null,\n density: null,\n comment: null,\n direction: null,\n images: [],\n parent_id: null,\n estimated_amount: null,\n estimated_dozens: null,\n size_min: null,\n size_max: null,\n size_avg: null,\n ready_to_harvest: false,\n measurement_units: 'dz',\n};\n\n\n\nconst InstantOysterAssesment = ({ updateForm, lineData, data, onlyView, type, formDataPassed, errorsData, availableDozens} : Props) => {\n const [formData, setFormData] = useState({\n ...defaultFormData,\n ...formDataPassed\n });\n const [errors, setErrors] = useState<{\n min: string | null;\n max: string | null;\n avg: string | null;\n }>({\n min: errorsData?.size_avg ?? null,\n max: errorsData?.size_max ?? null,\n avg: errorsData?.size_avg ?? null,\n });\n const lang = useSelector(selectLang);\n const isMyFarm = SelectIsMyFarm(lineData.farm_id);\n const tableRef = useRef(null);\n const customAssesFields = SelectAssessFields(lineData.farm_id);\n const [customAssessValues, setCustomAsseesValues] = useState(\n customAssesFields.map(x => {\n const d =\n data && data.custom_values\n ? data.custom_values.find((y: ICustomValue) => y.field_id === x.id)\n : null;\n return {\n input_type: x.input_type,\n field_label: x.name,\n options: x.options\n ?.split(',')\n .map(t => ({ id: t, label: t, value: t })),\n field_id: x.id,\n field_val: d?.field_val ?? '',\n data_type: x.data_type,\n unit: x.unit,\n };\n }),\n );\n\n const updateCustomAssessValue = (fieldID: number, val: string) => {\n let tmp = [...customAssessValues];\n const i = tmp.findIndex(x => x.field_id === fieldID);\n if (i >= 0) {\n tmp[i].field_val = val;\n }\n setCustomAsseesValues(tmp);\n };\n\n useEffect(() => {\n let tmp = { ...formDataPassed,\n estimated_dozens: formDataPassed.spat_amount_dz ?? 0,\n estimated_pcs: formDataPassed.spat_amount_pcs ?? 0\n };\n setFormData(tmp);\n }, [formDataPassed]);\n\n useEffect(() => {\n setErrors(errorsData);\n }, [errorsData]);\n \n return (\n
\n {(isMyFarm && type == 'OYSTER') && (\n
\n \n
\n )}\n {customAssessValues.map(x => (\n
\n {x.input_type === 'select' ? (\n <>\n updateCustomAssessValue(x.field_id, v)}\n disabled={onlyView}\n />\n {(!x.options || x.options.length <= 0) && (\n \n Set up field\n \n )}\n \n ) : (\n \n updateCustomAssessValue(x.field_id, e.target.value)\n }\n unit={x.unit}\n disabled={onlyView}\n />\n )}\n
\n ))}\n updateForm('ready_to_harvest', e.target.checked)}\n disabled={onlyView}\n />\n
\n
\n updateForm('size_min', e.target.value)}\n required={true}\n />\n {errors?.min && (\n
{errors.min}
\n )}\n
\n
\n updateForm('size_max', e.target.value)}\n required={true}\n />\n {errors?.max && (\n
{errors.max}
\n )}\n
\n
\n updateForm('size_avg', e.target.value)}\n required={true}\n />\n {errors?.avg && (\n
{errors.avg}
\n )}\n
\n
\n
\n );\n}\n\nexport default InstantOysterAssesment;","import { useDispatch, useSelector } from 'react-redux';\nimport { Modal, Radio } from 'antd';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n Dropdown,\n Feedback,\n Input,\n RadioButton,\n Subtitle,\n} from '../../shared';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { useEffect, useState } from 'react';\nimport moment from 'moment';\nimport { toMillisecond, toSecond } from '../../../util/toggleSecondMillisecond';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { addUtilData } from '../../../store/utils/utils.actions';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport {\n loadFarmsData,\n loadSpatStorages,\n} from '../../../store/farms/farms.actions';\nimport { sendSingleRequest } from '../../../apis';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { IOysterLineResource } from '../../../entities/farms.entities';\nimport { renderCustomError } from '.';\nimport { loadInventories } from '../../../store/inventories/inventories.actions';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport {\n SelectInventoriesByFarmID,\n SelectIsBudgetVisible,\n SelectOysterSpatsByFarmID,\n SelectSeasonsByFarmID,\n SelectOysterFlupsySpatsByFarmID\n} from '../../../store/extra/extra.selector';\nimport DirectionForm from '../../farm-util/DirectionForm';\nimport { getSpatSourceLabel, inventoryLabel } from '../../../lib/farm.helpers';\nimport { dozensToPieces, piecesToDozens } from '../../../lib/common.helpers';\nimport InstantOysterAssesment from './InstantOysterAssesment';\nimport { Value } from 'sass';\n\ninterface IPickIvt {\n id: number;\n quantity: string;\n}\n\ninterface IFormData {\n season_name: string;\n spat_storage_id: number | null;\n spat_amount_dz: number | null;\n spat_amount_pcs: number | null;\n planned_date_seed: number;\n planned_date_harvest: number;\n spat_size: number;\n spat_size_max: number | null;\n basket_count: number | null;\n spacing: number | null;\n density: number | null;\n comment: string | null;\n direction: string | null;\n time_tracks?: ITimeRange[];\n cost?: number | null;\n images: any[];\n parent_id?: number | null;\n picked_inventories?: IPickIvt[] | null;\n estimated_amount?: number | null;\n estimated_dozens?: number | null;\n estimated_pcs?: number | null;\n size_min?: number | null,\n size_max?: number | null,\n size_avg?: number | null,\n ready_to_harvest?: boolean;\n measurement_units?: string;\n custom_values?: any;\n}\n\nconst defaultForm: IFormData = {\n season_name: '',\n spat_storage_id: null,\n spat_amount_dz: null,\n spat_amount_pcs: null,\n planned_date_seed: moment().toDate().getTime(),\n planned_date_harvest: moment().toDate().getTime(),\n spat_size: 0,\n spat_size_max: null,\n basket_count: null,\n spacing: null,\n density: null,\n comment: null,\n direction: null,\n images: [],\n parent_id: null,\n time_tracks: [],\n measurement_units: 'dz',\n};\n\ninterface Props {\n visible: boolean;\n title?: string;\n lineData: IOysterLineResource;\n data?: any;\n updateID?: number;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n overConfirm?: (data: any) => Promise;\n parentID?: number;\n onlyView?: boolean;\n}\n\nconst OysterSeedModal = ({\n visible,\n title,\n lineData,\n data,\n updateID,\n onCancel,\n onConfirm,\n overConfirm,\n parentID,\n onlyView,\n}: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const spats = lineData.farm_is_flupsy ? SelectOysterFlupsySpatsByFarmID(lineData.farm_id) : SelectOysterSpatsByFarmID(lineData.farm_id) ;\n const seasonData = SelectSeasonsByFarmID(lineData.farm_id).map(x => ({\n id: x.id.toString(),\n label: x.name,\n value: x.name,\n }));\n const inventories = SelectInventoriesByFarmID(lineData.farm_id);\n const showBudget = SelectIsBudgetVisible(lineData.farm_id);\n\n const getDefaultInventory = () => {\n const s = inventories.filter(\n x => x.type.toLowerCase() === lineData.farming_method?.toLowerCase(),\n );\n if (s.length > 0) {\n return [{ id: s[0].id, quantity: '' }];\n } else {\n return [];\n }\n };\n\n const [isSeasonNew, setIsSeasonNew] = useState<'old' | 'new'>('old');\n const [errors, setErrors] = useState();\n const [formData, setFormData] = useState(defaultForm);\n const [addSpatSizeRange, setAddSpatSizeRange] = useState(false);\n const [pickedInventories, setPickedInventories] = useState(\n data?.picked_inventories ?? getDefaultInventory(),\n );\n const [errorMsg, setErrorMsg] = useState();\n const [disabled, setDisabled] = useState(false);\n const [createAssessment, setCreateAssessment] = useState(false);\n\n const availablePieces: number = formData.spat_storage_id\n ? (spats.find(x => x.id === Number(formData.spat_storage_id))\n ?.available_weight ?? 0) + (updateID ? data.spat_amount_pcs : 0)\n : -1;\n const availableDozens: number = formData.spat_storage_id\n ? piecesToDozens(\n spats.find(x => x.id === Number(formData.spat_storage_id))\n ?.available_weight ?? 0,\n ) + (updateID ? data.spat_amount_dz : 0)\n : -1;\n\n const toggleAddRangeCheck = (val: boolean) => {\n setAddSpatSizeRange(val);\n if (val) updateForm('spat_size_max', formData.spat_size);\n else updateForm('spat_size_max', null);\n };\n const selectInventoryIds = (val: string[]) => {\n let pArr = val.map(x => ({ id: parseInt(x), quantity: '' }));\n for (let p of pickedInventories) {\n let i = pArr.findIndex(x => x.id === p.id);\n if (i > -1) pArr[i].quantity = p.quantity;\n }\n setPickedInventories(pArr);\n };\n const updateInventoryQuantity = (i: number, val: string) => {\n let tmp = [...pickedInventories];\n tmp[i].quantity = val;\n setPickedInventories(tmp);\n };\n const updateForm = (key: keyof IFormData, val: any) => {\n if (\n [\n 'spat_amount_dz',\n 'spat_amount_pcs',\n 'basket_count',\n 'cost',\n 'spacing',\n 'density',\n ].includes(key)\n ) {\n val = val.length <= 0 ? null : Number(val);\n } else if (['comment'].includes(key)) {\n val = val.length <= 0 ? null : val;\n }\n\n if (['size_min', 'size_max', 'size_avg'].includes(key)) {\n setErrors((prv: any) => ({ ...(prv ?? {}), [key.replace('size_', '')]: null }));\n }\n\n if (\n ['spat_storage_id', 'spat_amount_dz', 'spat_amount_pcs'].includes(key)\n ) {\n setErrors((prv: any) => ({\n ...(prv ?? {}),\n spat_storage_id: null,\n spat_amount: null,\n }));\n } else {\n setErrors((prv: any) => ({ ...(prv ?? {}), [key]: null }));\n }\n if (key === 'spat_storage_id') {\n const spat = spats.find(x => x.id === Number(val));\n let tmp = { ...formData, spat_storage_id: Number(val) };\n if (spat?.harvest) {\n if (spat.harvest.shell_length) {\n tmp.spat_size = spat.harvest.shell_length;\n }\n if (spat.harvest.shell_length_max) {\n setAddSpatSizeRange(true);\n tmp.spat_size_max = spat.harvest.shell_length_max;\n }\n }\n spats.forEach((spat) => {\n if (spat.id === parseInt(val)) {\n if (spat?.assessment_template) {\n tmp.size_avg = spat?.assessment_template.size_avg ? spat?.assessment_template.size_avg : null;\n tmp.size_max = spat?.assessment_template.size_max ? spat?.assessment_template.size_max : null;\n tmp.size_min = spat?.assessment_template.size_min ? spat?.assessment_template.size_min : null;\n tmp.ready_to_harvest = spat?.assessment_template.ready_to_harvest ? spat?.assessment_template.ready_to_harvest : false;\n setFormData(tmp);\n }\n }\n });\n setFormData(tmp);\n } else if (!val) {\n setFormData({ ...formData, [key]: val });\n } else if (key === 'spat_amount_dz') {\n let tmp = {\n ...formData,\n spat_amount_dz: val,\n spat_amount_pcs: dozensToPieces(val),\n };\n if (tmp.basket_count) {\n tmp.density = Math.round((val / tmp.basket_count) * 10) / 10;\n }\n setFormData(tmp);\n } else if (key === 'spat_amount_pcs') {\n let tmp = {\n ...formData,\n spat_amount_pcs: val,\n spat_amount_dz: piecesToDozens(val),\n };\n if (tmp.basket_count) {\n tmp.density =\n Math.round((tmp.spat_amount_dz / tmp.basket_count) * 10) / 10;\n }\n setFormData(tmp);\n } else if (key === 'basket_count') {\n let tmp = { ...formData, basket_count: val };\n if (tmp.density && !tmp.spat_amount_dz) {\n if (tmp.measurement_units === 'pcs') {\n tmp.spat_amount_pcs = val * tmp.density;\n tmp.spat_amount_dz = piecesToDozens(val * tmp.density);\n } else {\n tmp.spat_amount_dz = val * tmp.density;\n tmp.spat_amount_pcs = dozensToPieces(val * tmp.density);\n }\n } else if (tmp.spat_amount_dz && !tmp.density) {\n tmp.density = Math.round((tmp.spat_amount_dz / val) * 10) / 10;\n } else if (tmp.spat_amount_dz && tmp.density) {\n tmp.density = Math.round((tmp.spat_amount_dz / val) * 10) / 10;\n }\n setFormData(tmp);\n\n if (pickedInventories.length === 1) {\n let tmp = [...pickedInventories];\n tmp[0].quantity = val.toString();\n setPickedInventories(tmp);\n }\n } else if (key === 'density') {\n let tmp = { ...formData, density: val };\n if (tmp.basket_count) {\n if(tmp.measurement_units === 'pcs'){\n tmp.spat_amount_pcs = val * tmp.basket_count;\n tmp.spat_amount_dz = piecesToDozens(val * tmp.basket_count);\n } else {\n tmp.spat_amount_dz = val * tmp.basket_count;\n tmp.spat_amount_pcs = dozensToPieces(val * tmp.basket_count);\n }\n } else if (tmp.spat_amount_dz) {\n tmp.basket_count = Math.ceil(tmp.spat_amount_dz / val);\n }\n setFormData(tmp);\n } else if (key === 'measurement_units') {\n let tmp = { ...formData, measurement_units: val };\n if (tmp.density && tmp.basket_count) {\n if(val === 'pcs'){\n tmp.spat_amount_pcs = tmp.density * tmp.basket_count;\n tmp.spat_amount_dz = piecesToDozens(tmp.density * tmp.basket_count);\n } else {\n tmp.spat_amount_dz = tmp.density * tmp.basket_count;\n tmp.spat_amount_pcs = dozensToPieces(tmp.density * tmp.basket_count);\n }\n }\n setFormData(tmp);\n } else {\n let tmpData = formData;\n if(key === 'spat_size' || key === 'spat_size_max'){\n if ( tmpData.spat_size != 0 && !tmpData.spat_size_max ) {\n tmpData.size_min = key == 'spat_size' ? val : tmpData.spat_size;\n tmpData.size_max = key == 'spat_size' ? val : tmpData.spat_size;\n tmpData.size_avg = key == 'spat_size' ? val : tmpData.spat_size;\n }\n if ( tmpData.spat_size != 0 && tmpData.spat_size_max ) {\n tmpData.size_min = key == 'spat_size' ? val : tmpData.spat_size;\n tmpData.size_max = key == 'spat_size_max' ? val : tmpData.spat_size_max;\n tmpData.size_avg = Math.round((( tmpData.size_min ?? 0) + (tmpData.size_max ?? 0)) / 2);;\n }\n }\n setFormData({ ...tmpData, [key]: val });\n }\n\n \n \n \n };\n const validFormData = () => {\n let tmpErr = { ...(errors ?? {}) };\n let res = true;\n if (!formData.season_name) {\n tmpErr.season_name = translate(lang, 'Add name');\n res = false;\n }\n if (Number(formData.basket_count) === 0) {\n tmpErr.basket_count = translate(\n lang,\n 'Number of %s cannot be 0',\n lineData.farming_method,\n );\n res = false;\n }\n if (formData.planned_date_seed > formData.planned_date_harvest) {\n tmpErr.planned_date_seed = translate(lang, '_invalid_seed_date');\n res = false;\n }\n if (\n data?.is_catch_spat !== true &&\n (!formData.spat_storage_id ||\n !formData.spat_amount_dz ||\n formData.spat_amount_dz < 0)\n ) {\n tmpErr.spat_amount = translate(lang, 'Select spat and amount');\n res = false;\n }\n if (\n data?.is_catch_spat !== true &&\n formData.spat_amount_dz &&\n formData.spat_amount_dz > availableDozens\n ) {\n tmpErr.spat_amount = translate(\n lang,\n '_max_spat_amount',\n `${availableDozens} dozens (${availablePieces} pieces)`,\n );\n res = false;\n }\n if (\n formData.spat_size_max !== null &&\n formData.spat_size_max < formData.spat_size\n ) {\n tmpErr.spat_size = translate(lang, 'Invalid spat size range');\n res = false;\n }\n if (\n formData.time_tracks &&\n toSecTimeTracks(formData.time_tracks) === false\n ) {\n setErrorMsg('_invalid_time_range');\n res = false;\n }\n let containersCnt = 0;\n for (let px of pickedInventories) {\n const ivt = inventories.find(x => x.id === px.id);\n if (!ivt) {\n setErrorMsg('Inventory is not found');\n res = false;\n break;\n }\n if (isNaN(Number(px.quantity)) || Number(px.quantity) <= 0) {\n setErrorMsg(translate(lang, '_invalid_ivt_qty', ivt.name));\n res = false;\n break;\n }\n if (Number(px.quantity) > ivt.available_quantity) {\n setErrorMsg(\n translate(\n lang,\n '_seed_floats_over',\n px.quantity,\n ivt.name,\n ivt.available_quantity,\n ),\n );\n res = false;\n break;\n }\n containersCnt += Number(px.quantity);\n }\n if (containersCnt !== Number(formData.basket_count)) {\n const cf = window.confirm(\n `You should put ${formData.basket_count} containers but you added ${containersCnt} containers. Are you sure?`,\n );\n if (!cf) return null;\n }\n setErrors(tmpErr);\n if (!res) return null;\n\n let validData = {\n ...formData,\n line_id: lineData.id,\n planned_date_seed: toSecond(formData.planned_date_seed),\n planned_date_harvest: toSecond(formData.planned_date_harvest),\n };\n if (!!parentID) {\n validData.parent_id = parentID;\n } else if (!updateID) {\n const ms = lineData.growing_cycle?.main_seed;\n if (ms) {\n if (!window.confirm(translate(lang, '_line_seed_make_sure')))\n return null;\n validData.parent_id = ms.id;\n }\n }\n if (pickedInventories.length > 0) {\n validData.picked_inventories = pickedInventories;\n }\n if (formData.time_tracks) {\n const tt = toSecTimeTracks(formData.time_tracks);\n if (tt) {\n validData.time_tracks = tt;\n } else {\n setErrorMsg('_invalid_time_range');\n return null;\n }\n }\n if (!updateID && !validData.parent_id && lineData.growing_cycle) {\n if (!window.confirm(translate(lang, '_line_seed_make_sure'))) return null;\n validData.parent_id = lineData.growing_cycle.main_seed.id;\n }\n return validData;\n };\n const validFormAssassment = () => {\n let res: any = true;\n let tmpErr = { ...errors };\n if (!formData.size_min) {\n tmpErr.min = translate(lang, 'Required field');\n res = false;\n }\n if (!formData.size_max) {\n tmpErr.max = translate(lang, 'Required field');\n res = false;\n }\n if (!formData.size_avg) {\n tmpErr.avg = translate(lang, 'Required field');\n res = false;\n }\n if (Number(formData.size_min) > Number(formData.size_max)) {\n tmpErr.avg = translate(\n lang,\n 'Maximum value should be equal or greater than minimum value',\n );\n res = false;\n }\n if (\n formData.time_tracks &&\n toSecTimeTracks(formData.time_tracks) === false\n ) {\n setErrorMsg('_invalid_time_range');\n res = false;\n }\n \n setErrors(tmpErr);\n if (!res) return null;\n \n res = {\n ...formData,\n assessment_date: toSecond(formData.planned_date_seed),\n planned_date_harvest: toSecond(formData.planned_date_harvest),\n seeding_id: lineData.growing_cycle?.main_seed.id,\n line_id: lineData.id,\n ready_to_harvest: formData.ready_to_harvest ?? false,\n origin_spat_id: formData.spat_storage_id ?? null,\n };\n res.btm_size_min = res.btm_size_max = res.btm_size_avg = undefined;\n \n if (res.time_tracks && res.time_tracks.length > 0) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (!tt) {\n setErrorMsg('Invalid time tracks information');\n return null;\n }\n res.time_tracks = tt;\n }\n return res;\n };\n const handleConfirmClick = async () => {\n if (onlyView) return;\n let validData = validFormData();\n if (!validData) return;\n \n\n if(createAssessment){\n var ValidaAssamet = validFormAssassment();\n if(!ValidaAssamet) return;\n }\n\n setErrorMsg(undefined);\n setDisabled(true);\n if (!seasonData.some(x => x.value === validData?.season_name)) {\n await dispatch(addUtilData('season', validData.season_name));\n }\n if (!!overConfirm) {\n const ovc = await overConfirm(validData);\n if (ovc !== true) {\n setDisabled(false);\n if (ovc.errors) setErrors(ovc.errors);\n if (ovc.message) setErrorMsg(ovc.message);\n }\n return;\n }\n\n \n const res = updateID\n ? await sendSingleRequest(\n validData,\n 'PUT',\n `api/farm/line/seeding/${updateID}`,\n true,\n )\n : await sendSingleRequest(\n validData,\n 'POST',\n `api/farm/line/oyster-seeding`,\n true,\n );\n if (res.status) {\n if (createAssessment) {\n ValidaAssamet.seeding_id = lineData.growing_cycle?.main_seed.id ?? res.data.data.id;\n const resAssasment = await sendSingleRequest(\n ValidaAssamet,\n 'POST',\n 'api/farm/line/assessment/assessments',\n true,\n )\n if (!resAssasment.status) {\n setDisabled(false);\n setErrorMsg(translate(lang, resAssasment.data?.message ?? 'Unknown error'));\n dispatch(loadFarmsData());\n return;\n }\n }\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(\n lang,\n res.data?.message ??\n (updateID\n ? 'Updated data successfully'\n : 'Seed data submitted successfully'),\n ),\n type: 'success',\n }),\n );\n dispatch(loadFarmsData());\n dispatch(loadSpatStorages());\n if (pickedInventories) {\n dispatch(loadInventories());\n }\n onConfirm(validData);\n } else {\n setDisabled(false);\n setErrorMsg(translate(lang, res.data?.message ?? 'Unknown error'));\n if (res.data?.errors) setErrors(res.data.errors);\n }\n \n };\n\n useEffect(() => {\n if (data) {\n let tmp: any = {};\n for (let k in formData) {\n tmp[k] = data[k] ?? (formData as any)[k];\n if (k === 'planned_date_seed' || k === 'planned_date_harvest') {\n tmp[k] = toMillisecond(tmp[k]);\n } else if (\n k === 'images' &&\n (tmp[k] === null || tmp[k] === undefined)\n ) {\n tmp[k] = [];\n }\n }\n if (data?.spat_storage && !tmp.spat_storage_id) {\n tmp.spat_storage_id = data.spat_storage.id;\n }\n if (tmp.time_tracks && tmp.time_tracks.length > 0) {\n tmp.time_tracks = tmp.time_tracks.map((x: any) => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n }));\n }\n if (showBudget && data.expense_items && data.expense_items.length > 0) {\n tmp.cost = data.expense_items.reduce(\n (p: any, c: any) => p + c.amount,\n 0,\n );\n } else if (showBudget && data.cost) {\n tmp.cost = data.cost;\n }\n if (tmp.images) {\n tmp.images = tmp.images.map((x: any) =>\n typeof x === 'object' && x !== null ? x : parseImageUrlToFileItem(x),\n );\n }\n setAddSpatSizeRange(!!data.spat_size_max);\n setFormData(tmp);\n }\n }, [data, showBudget]);\n\n return (\n }\n width={600}\n >\n
\n
\n \n {translate(lang, title ?? 'Oyster seed line')}\n \n
\n {\n
\n {!!errorMsg && (\n setErrorMsg(undefined)}\n />\n )}\n {!data?.is_catch_spat ? (\n <>\n setIsSeasonNew(e.target.value)}\n value={isSeasonNew}\n >\n \n \n \n \n {isSeasonNew === 'old' ? (\n updateForm('season_name', value)}\n options={seasonData}\n value={formData.season_name}\n />\n ) : (\n updateForm('season_name', e.target.value)}\n />\n )}\n {!!errors?.season_name && (\n
\n {errors?.season_name}\n
\n )}\n
\n\n
\n
\n {translate(lang, 'Measurement units')}\n
\n
\n updateForm('measurement_units', e.target.value)}\n value={formData.measurement_units}\n >\n \n \n \n
\n
\n\n \n Number(x.available_weight) > 0)\n .map(item => ({\n id: item.id.toString(),\n value: item.id.toString(),\n label: getSpatSourceLabel(item.id, spats),\n }))}\n onChange={(value, evt) =>\n updateForm('spat_storage_id', value)\n }\n showSearch={true}\n />\n {!!formData.spat_storage_id && (\n
\n 0 ? availableDozens : undefined}\n onChange={e =>\n {\n formData.measurement_units === 'pcs' ? updateForm('spat_amount_pcs', e.target.value) : updateForm('spat_amount_dz', e.target.value);\n }\n }\n unit={ formData.measurement_units === 'pcs' ? 'pcs' : 'dz'}\n />\n {formData.spat_amount_dz !== availableDozens && (\n \n updateForm(\n 'spat_amount_dz',\n availableDozens.toString(),\n )\n }\n >\n {translate(\n lang,\n '_full_spats_seeded',\n getSpatSourceLabel(formData.spat_storage_id, spats),\n )}\n
\n )}\n
\n )}\n {!!errors?.spat_storage_id && (\n
\n {errors?.spat_storage_id}\n
\n )}\n {!!errors?.spat_amount && (\n
\n {renderCustomError(errors?.spat_amount)}\n
\n )}\n \n \n ) : (\n
\n {translate(lang, 'This is line catch spat')}\n
\n )}\n \n }\n \n \n updateForm(\n 'planned_date_seed',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n )\n }\n required\n />\n {errors?.planned_date_seed && (\n
{errors?.planned_date_seed}
\n )}\n \n
\n {\n if (\n formData.planned_date_seed !== undefined &&\n e &&\n e!.toDate().getTime() < formData.planned_date_seed\n ) {\n updateForm('planned_date_harvest', moment().toDate().getTime());\n } else {\n updateForm(\n 'planned_date_harvest',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n );\n }\n }}\n required\n />\n
\n
\n \n updateForm('basket_count', Number(e.target.value))}\n />\n {errors?.basket_count && (\n
{errors?.basket_count}
\n )}\n
\n
\n updateForm('density', e.target.value)}\n unit={formData.measurement_units}\n required\n />\n
\n \n
\n updateForm('direction', v)}\n />\n
\n {!!formData.time_tracks && (\n updateForm('time_tracks', t)}\n disabled={onlyView}\n />\n )}\n
\n toggleAddRangeCheck(e.target.checked)}\n />\n
\n {formData.spat_size_max === null ? (\n
\n updateForm('spat_size', Number(e.target.value))}\n />\n
\n ) : (\n
\n \n updateForm('spat_size', Number(e.target.value))}\n />\n {errors?.spat_size && (\n
{errors?.spat_size}
\n )}\n
\n
\n \n updateForm('spat_size_max', Number(e.target.value))\n }\n />\n
\n \n )}\n
\n updateForm('spacing', e.target.value)}\n />\n
\n {!updateID && (\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: inventoryLabel(x),\n }))}\n value={pickedInventories.map(x => x.id.toString()) as any}\n onChange={(val: any) => selectInventoryIds(val)}\n disabled={onlyView}\n />\n
\n )}\n {pickedInventories.length > 0 && (\n
\n {pickedInventories.map((item, idx) => (\n t.id === item.id))}\n placeholder={translate(\n lang,\n 'Maximum value is %s',\n inventories.find(t => t.id === item.id)?.available_quantity,\n )}\n type='number'\n className='mb-15'\n key={item.id}\n value={item.quantity?.toString() ?? ''}\n onChange={e => updateInventoryQuantity(idx, e.target.value)}\n max={\n inventories.find(t => t.id === item.id)?.available_quantity\n }\n disabled={onlyView}\n />\n ))}\n
\n )}\n {!!showBudget && (\n
\n updateForm('cost', Number(e.target.value))}\n />\n
\n )}\n
\n updateForm('comment', e.target.value)}\n />\n
\n
\n updateForm('images', v)}\n />\n
\n
\n setCreateAssessment(e.target.checked)}\n />\n
\n {\n createAssessment && (\n
\n \n
\n )\n }\n \n
\n \n {translate(lang, 'Close')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default OysterSeedModal;\n","import React, { useState, useEffect } from 'react';\nimport { translate } from '../../../lib/lang.helper';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport {\n CheckboxButton,\n Input,\n Dropdown\n} from '../../shared';\nimport {\n SelectAssessFields,\n } from '../../../store/extra/extra.selector';\n\nimport { ICustomValue } from '../../../entities/automation.entities';\nimport { Link } from 'react-router-dom';\nimport { IMusselLineResource } from '../../../entities/farms.entities';\nimport moment from 'moment';\n\ninterface Props {\n lineData: IMusselLineResource;\n data?: any;\n onlyView?: boolean;\n updateForm: (key: keyof IFormData, value: any) => void;\n formDataPassed:any;\n errorsData: any;\n}\n\n\ninterface IFormData {\n season_name: string;\n spat_storage_id: number | null;\n spat_amount: number | null;\n planned_date_seed: number;\n planned_date_harvest: number;\n line_length: number | null;\n spat_size: number;\n spat_size_max: number | null;\n density: number;\n density_max: number | null;\n density_unit: 'spat per m' | 'kgs per m';\n drop: number;\n submersion: number;\n spacing: number;\n comment: string | null;\n budget_unit_amount: number | null;\n budget_unit_price: number | null;\n images: any[];\n cost?: number | null;\n direction: string | null;\n parent_id?: number | null;\n picked_inventories?: any[] | null;\n custom_values?: ICustomValue[];\n size_min: number | null;\n size_max: number | null;\n size_avg: number | null;\n btm_size_min?: number | null;\n btm_size_max?: number | null;\n btm_size_avg?: number | null;\n assess_bottom?: boolean | null;\n ready_to_harvest?: boolean;\n}\n\nconst defaultFormData: IFormData = {\n season_name: '',\n spat_storage_id: null,\n spat_amount: null,\n planned_date_seed: moment().toDate().getTime(),\n planned_date_harvest: moment().toDate().getTime(),\n line_length: 0,\n spat_size: 0,\n spat_size_max: null,\n density: 0,\n density_max: null,\n density_unit: 'spat per m',\n drop: 0,\n submersion: 0,\n spacing: 0,\n direction: null,\n comment: null,\n budget_unit_amount: null,\n budget_unit_price: null,\n images: [],\n size_min: null,\n size_max: null,\n size_avg: null,\n assess_bottom: false,\n ready_to_harvest: false,\n};\n\n\n\nconst InstantMusselAssesment = ({ updateForm, lineData, data, onlyView, formDataPassed, errorsData} : Props) => {\n const [formData, setFormData] = useState(defaultFormData);\n const lang = useSelector(selectLang);\n const [assessBottom, setAssessBottom] = useState(!!data?.btm_size_avg);\n const customAssesFields = SelectAssessFields(lineData.farm_id);\n const [customAssessValues, setCustomAsseesValues] = useState(\n customAssesFields.map(x => {\n const d =\n data && data.custom_values\n ? data.custom_values.find((y: ICustomValue) => y.field_id === x.id)\n : null;\n return {\n input_type: x.input_type,\n field_label: x.name,\n options: x.options\n ?.split(',')\n .map(t => ({ id: t, label: t, value: t })),\n field_id: x.id,\n field_val: d?.field_val ?? '',\n data_type: x.data_type,\n unit: x.unit,\n };\n }),\n );\n const [errors, setErrors] = useState<{\n min: string | null;\n max: string | null;\n avg: string | null;\n }>({\n min: errorsData?.size_avg ?? null,\n max: errorsData?.size_max ?? null,\n avg: errorsData?.size_avg ?? null,\n });\n const updateCustomAssessValue = (fieldID: number, val: string) => {\n let tmp = [...customAssessValues];\n const i = tmp.findIndex(x => x.field_id === fieldID);\n if (i >= 0) {\n tmp[i].field_val = val;\n }\n setCustomAsseesValues(tmp);\n };\n\n useEffect(() => {\n let tmp = { ...formDataPassed,\n estimated_dozens: formDataPassed.spat_amount_dz ?? 0\n };\n setFormData(tmp);\n }, [formDataPassed]);\n \n useEffect(() => {\n setErrors(errorsData);\n }, [errorsData]);\n\n return (\n
\n
\n
\n updateForm('size_min', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n {errors?.min && (\n
{errors.min}
\n )}\n
\n
\n updateForm('size_max', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n {errors?.max && (\n
{errors.max}
\n )}\n
\n
\n updateForm('size_avg', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n {errors?.avg && (\n
{errors.avg}
\n )}\n
\n
\n
\n { setAssessBottom(e.target.checked); updateForm('assess_bottom', e.target.checked) }}\n />\n
\n {assessBottom && (\n
\n
\n updateForm('btm_size_min', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n
\n
\n updateForm('btm_size_max', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n
\n
\n updateForm('btm_size_avg', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n
\n
\n )}\n updateForm('ready_to_harvest', e.target.checked)}\n disabled={onlyView}\n />\n {customAssessValues.map(x => (\n
\n {x.input_type === 'select' ? (\n <>\n updateCustomAssessValue(x.field_id, v)}\n disabled={onlyView}\n />\n {(!x.options || x.options.length <= 0) && (\n \n Set up field\n \n )}\n \n ) : (\n \n updateCustomAssessValue(x.field_id, e.target.value)\n }\n unit={x.unit}\n disabled={onlyView}\n />\n )}\n
\n ))}\n
\n );\n}\n\nexport default InstantMusselAssesment;","import { Modal, Radio } from 'antd';\nimport moment from 'moment';\nimport React, { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { IMusselLineResource } from '../../../entities/farms.entities';\nimport {\n loadFarmsData,\n loadSpatStorages,\n} from '../../../store/farms/farms.actions';\nimport { addUtilData } from '../../../store/utils/utils.actions';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { Link } from 'react-router-dom';\nimport { toMillisecond, toSecond } from '../../../util/toggleSecondMillisecond';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n Dropdown,\n Feedback,\n Input,\n RadioButton,\n Subtitle,\n} from '../../shared';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { ICustomValue } from '../../../entities/automation.entities';\nimport { selectUserMeta } from '../../../store/auth/auth.selector';\nimport { sendSingleRequest } from '../../../apis';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { renderCustomError } from '.';\nimport { loadInventories } from '../../../store/inventories/inventories.actions';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport {\n SelectInventoriesByFarmID,\n SelectIsBudgetVisible,\n SelectIsGrower,\n SelectMusselFarmsByFarmID,\n SelectMusselSpatsByFarmID,\n SelectSeasonsByFarmID,\n SelectSeedingFields,\n SelectMusselFlupsySpatsByFarmID\n} from '../../../store/extra/extra.selector';\nimport DirectionForm from '../../farm-util/DirectionForm';\nimport { getSpatSourceLabel, inventoryLabel } from '../../../lib/farm.helpers';\nimport InstantMusselAssesment from './InstantMusselAssesment';\nimport { roundNumber } from '../../../entities/util-functions';\n\ninterface IFormData {\n season_name: string;\n spat_storage_id: number | null;\n spat_amount: number | null;\n planned_date_seed: number;\n planned_date_harvest: number;\n line_length: number | null;\n fill_percent?: number;\n spat_size: number;\n spat_size_max: number | null;\n density: number;\n density_max: number | null;\n density_unit: 'spat per m' | 'kgs per m';\n drop: number;\n submersion: number;\n spacing: number;\n comment: string | null;\n budget_unit_amount: number | null;\n budget_unit_price: number | null;\n images: any[];\n time_tracks?: ITimeRange[];\n cost?: number | null;\n direction: string | null;\n parent_id?: number | null;\n picked_inventories?: any[] | null;\n custom_values?: ICustomValue[];\n size_min?: number | null;\n size_max?: number | null;\n size_avg?: number | null;\n btm_size_min?: number | null;\n btm_size_max?: number | null;\n btm_size_avg?: number | null;\n assessment_date?: number;\n assess_bottom?: boolean | null;\n ready_to_harvest?: boolean;\n}\n\nconst defaultFormData: IFormData = {\n season_name: '',\n spat_storage_id: null,\n spat_amount: null,\n planned_date_seed: moment().toDate().getTime(),\n planned_date_harvest: moment().toDate().getTime(),\n line_length: 0,\n spat_size: 0,\n spat_size_max: null,\n density: 0,\n density_max: null,\n density_unit: 'spat per m',\n drop: 0,\n submersion: 0,\n spacing: 0,\n direction: null,\n comment: null,\n budget_unit_amount: null,\n budget_unit_price: null,\n images: [],\n time_tracks: [],\n assessment_date: moment().toDate().getTime(),\n};\n\ninterface Props {\n visible: boolean;\n className?: string;\n title?: string;\n width?: number;\n lineData: IMusselLineResource;\n data?: any;\n updateID?: number;\n parentID?: number;\n onlyView?: boolean;\n onConfirm: (data: any) => void;\n onCancel: () => void;\n overConfirm?: (data: any) => Promise;\n confirmBtnLabel?: string;\n lineChangeable?: boolean;\n warningMessage?: string | React.ReactNode;\n}\n\nconst MusselSeedModal = ({\n visible,\n className,\n title,\n width,\n lineData,\n data,\n updateID,\n parentID,\n onlyView,\n onConfirm,\n onCancel,\n overConfirm,\n confirmBtnLabel,\n lineChangeable,\n warningMessage,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const isGrower = SelectIsGrower(lineData.farm_id);\n const spats = lineData.farm_is_flupsy ? SelectMusselFlupsySpatsByFarmID(lineData.farm_id) : SelectMusselSpatsByFarmID(lineData.farm_id) ;\n\n const seasonData = SelectSeasonsByFarmID(lineData.farm_id).map(x => ({\n id: x.id.toString(),\n label: x.name,\n value: x.name,\n }));\n const inventories = SelectInventoriesByFarmID(lineData.farm_id);\n const showBudget = SelectIsBudgetVisible(lineData.farm_id);\n const seedStages = useSelector(selectUserMeta)?.seed_stages_size;\n const farmsData = SelectMusselFarmsByFarmID(lineData.farm_id);\n const customFields = SelectSeedingFields(lineData.farm_id);\n\n const [disabled, setDisabled] = useState(false);\n const [isSeasonNew, setIsSeasonNew] = useState<'old' | 'new'>('old');\n const [errors, setErrors] = useState();\n const [formData, setFormData] = useState({\n ...defaultFormData,\n fill_percent: lineData.fill_percent ?? undefined,\n });\n const [stageMsg, setStageMsg] = useState();\n const [addDensityRange, setAddDensityRange] = useState(false);\n const [addSpatSizeRange, setAddSpatSizeRange] = useState(false);\n const [pickedInventories, setPickedInventories] = useState(\n data?.picked_inventories ?? [],\n );\n const [focFarmId, setFocFarmId] = useState(\n farmsData.find(x => x.id === lineData.farm_id)?.id,\n );\n const [focLineId, setFocLineId] = useState(lineData.id);\n const [customValues, setCustomValues] = useState(\n customFields.map(x => {\n const d =\n data && data.custom_values\n ? data.custom_values.find((y: ICustomValue) => y.field_id === x.id)\n : null;\n return {\n input_type: x.input_type,\n field_label: x.name,\n options: x.options\n ?.split(',')\n .map(t => ({ id: t, label: t, value: t })),\n field_id: x.id,\n field_val: d?.field_val ?? '',\n data_type: x.data_type,\n unit: x.unit,\n };\n }),\n );\n const [errorMsg, setErrorMsg] = useState();\n const [createAssessment, setCreateAssessment] = useState(false);\n const updateCustomValue = (fieldID: number, val: string) => {\n let tmp = [...customValues];\n const i = tmp.findIndex(x => x.field_id === fieldID);\n if (i >= 0) {\n tmp[i].field_val = val;\n }\n setCustomValues(tmp);\n };\n const updateForm = (key: keyof IFormData, val: any) => {\n if (['size_min', 'size_max', 'size_avg'].includes(key)) {\n setErrors((prv: any) => ({\n ...(prv ?? {}),\n [key.replace('size_', '')]: null,\n }));\n }\n if (\n [\n 'spat_amount',\n 'line_length',\n 'budget_unit_amount',\n 'budget_unit_price',\n 'fill_percent',\n ].includes(key)\n ) {\n val = val.length <= 0 ? null : Number(val);\n } else if (['comment'].includes(key)) {\n val = val.length <= 0 ? null : val;\n }\n if (key === 'spat_storage_id' || key === 'spat_amount') {\n setErrors((prv: any) => ({\n ...(prv ?? {}),\n spat_storage_id: null,\n spat_amount: null,\n }));\n } else {\n setErrors((prv: any) => ({ ...(prv ?? {}), [key]: null }));\n }\n if (key === 'spat_storage_id') {\n const spat = spats.find(x => x.id === Number(val));\n let tmp = { ...formData, spat_storage_id: Number(val) };\n if (spat?.harvest) {\n if (spat.harvest.shell_length) {\n tmp.spat_size = spat.harvest.shell_length;\n }\n if (spat.harvest.shell_length_max) {\n setAddSpatSizeRange(true);\n tmp.spat_size_max = spat.harvest.shell_length_max;\n }\n }\n spats.forEach(spat => {\n if (spat.id === parseInt(val)) {\n if (spat?.assessment_template) {\n tmp.size_avg = spat?.assessment_template.size_avg\n ? spat?.assessment_template.size_avg\n : null;\n tmp.size_max = spat?.assessment_template.size_max\n ? spat?.assessment_template.size_max\n : null;\n tmp.size_min = spat?.assessment_template.size_min\n ? spat?.assessment_template.size_min\n : null;\n tmp.ready_to_harvest = spat?.assessment_template.ready_to_harvest\n ? spat?.assessment_template.ready_to_harvest\n : false;\n setFormData(tmp);\n }\n }\n });\n setFormData(tmp);\n } else if (key === 'line_length') {\n setFormData(prv => ({ ...prv, line_length: val }));\n } else if (key === 'fill_percent') {\n setFormData(prv => ({ ...prv, fill_percent: val }));\n } else {\n let tmpData = { ...formData };\n if (key === 'spat_size' || key === 'spat_size_max') {\n if (tmpData.spat_size != 0 && !tmpData.spat_size_max) {\n tmpData.size_min = key == 'spat_size' ? val : tmpData.spat_size;\n tmpData.size_max = key == 'spat_size' ? val : tmpData.spat_size;\n tmpData.size_avg = key == 'spat_size' ? val : tmpData.spat_size;\n }\n if (tmpData.spat_size != 0 && tmpData.spat_size_max) {\n tmpData.size_min = key == 'spat_size' ? val : tmpData.spat_size;\n tmpData.size_max =\n key == 'spat_size_max' ? val : tmpData.spat_size_max;\n tmpData.size_avg = Math.round(\n ((tmpData.size_min ?? 0) + (tmpData.size_max ?? 0)) / 2,\n );\n }\n }\n setFormData({ ...tmpData, [key]: val });\n }\n };\n const toggleAddRangeCheck = (type: 'DENSITY' | 'SPAT', val: boolean) => {\n if (type === 'DENSITY') {\n setAddDensityRange(val);\n if (val) updateForm('density_max', formData.density);\n else updateForm('density_max', null);\n } else {\n setAddSpatSizeRange(val);\n if (val) updateForm('spat_size_max', formData.spat_size);\n else updateForm('spat_size_max', null);\n }\n };\n const selectInventoryIds = (val: string[]) => {\n let pArr = val.map(x => ({ id: parseInt(x), quantity: '' }));\n for (let p of pickedInventories) {\n let i = pArr.findIndex(x => x.id === p.id);\n if (i > -1) pArr[i].quantity = p.quantity;\n }\n setPickedInventories(pArr);\n };\n const updateInventoryQuantity = (i: number, val: string) => {\n let tmp = [...pickedInventories];\n tmp[i].quantity = val;\n setPickedInventories(tmp);\n };\n const validFormData = () => {\n let tmpErr = { ...(errors ?? {}) };\n let res = true;\n if (!formData.season_name) {\n tmpErr.season_name = translate(lang, 'Add name');\n res = false;\n }\n if (Number(formData.line_length) === 0) {\n tmpErr.line_length = translate(\n lang,\n 'Line length must be greater than 0',\n );\n res = false;\n }\n if (\n Number(formData.planned_date_seed) > Number(formData.planned_date_harvest)\n ) {\n tmpErr.planned_date_seed = translate(lang, '_invalid_seed_date');\n res = false;\n }\n if (\n data?.is_catch_spat !== true &&\n (!formData.spat_storage_id ||\n !formData.spat_amount ||\n formData.spat_amount < 0)\n ) {\n tmpErr.spat_amount = translate(lang, 'Select spat and weight');\n res = false;\n }\n if (\n data?.is_catch_spat !== true &&\n formData.spat_amount &&\n formData.spat_amount > availableWeight\n ) {\n tmpErr.spat_amount = translate(lang, '_max_spat_amount', availableWeight);\n res = false;\n }\n for (let px of pickedInventories) {\n const ivt = inventories.find(x => x.id === px.id);\n if (!ivt) {\n setErrorMsg('Inventory is not found');\n res = false;\n break;\n }\n if (isNaN(Number(px.quantity)) || Number(px.quantity) <= 0) {\n setErrorMsg(translate(lang, '_invalid_ivt_qty', ivt.name ?? ''));\n res = false;\n break;\n }\n if (Number(px.quantity) > ivt.available_quantity) {\n setErrorMsg(\n translate(\n lang,\n '_seed_floats_over',\n px.quantity,\n ivt.name,\n ivt.available_quantity,\n ),\n );\n res = false;\n break;\n }\n }\n if (\n formData.density_max !== null &&\n formData.density_max < formData.density\n ) {\n tmpErr.density = translate(lang, 'Invalid density range');\n res = false;\n }\n if (\n formData.spat_size_max !== null &&\n formData.spat_size_max < formData.spat_size\n ) {\n tmpErr.spat_size = translate(lang, 'Invalid spat size range');\n res = false;\n }\n if (\n formData.time_tracks &&\n toSecTimeTracks(formData.time_tracks) === false\n ) {\n setErrorMsg('_invalid_time_range');\n res = false;\n }\n setErrors(tmpErr);\n if (!res) return null;\n\n let validData = {\n ...formData,\n line_id: focLineId,\n planned_date_seed: toSecond(formData.planned_date_seed),\n planned_date_harvest: toSecond(formData.planned_date_harvest),\n };\n if (!!parentID) {\n validData.parent_id = parentID;\n } else if (!updateID) {\n const ms = farmsData\n .find(x => x.id === focFarmId)\n ?.lines.find(x => x.id === focLineId)?.growing_cycle?.main_seed;\n if (ms) {\n if (!window.confirm(translate(lang, '_line_seed_make_sure')))\n return null;\n validData.parent_id = ms.id;\n }\n }\n if (pickedInventories.length > 0) {\n validData.picked_inventories = pickedInventories;\n }\n if (formData.time_tracks) {\n const tt = toSecTimeTracks(formData.time_tracks);\n if (tt) {\n validData.time_tracks = tt;\n } else {\n setErrorMsg('_invalid_time_range');\n return null;\n }\n }\n if (\n lineData.seedings?.some(\n x => x.id !== updateID && x.season_name === formData.season_name,\n ) &&\n !window.confirm(translate(lang, '_seeding_season_confirm'))\n )\n return null;\n const cvs = customValues\n .filter(x => !!x.field_val)\n .map(({ field_id, field_val }) => ({ field_id, field_val }));\n if (cvs.length > 0) {\n validData.custom_values = cvs;\n }\n if (!updateID && !validData.parent_id && lineData.growing_cycle) {\n if (!window.confirm(translate(lang, '_line_seed_make_sure'))) return null;\n validData.parent_id = lineData.growing_cycle.main_seed.id;\n }\n\n return validData;\n };\n\n const validFormAssassment = () => {\n let res: any = true;\n let tmpErr = { ...errors };\n if (!formData.size_min) {\n tmpErr.min = translate(lang, 'Required field');\n res = false;\n }\n if (!formData.size_max) {\n tmpErr.max = translate(lang, 'Required field');\n res = false;\n }\n if (!formData.size_avg) {\n tmpErr.avg = translate(lang, 'Required field');\n res = false;\n }\n if (Number(formData.size_min) > Number(formData.size_max)) {\n tmpErr.avg = translate(\n lang,\n 'Maximum value should be equal or greater than minimum value',\n );\n res = false;\n }\n if (\n formData.time_tracks &&\n toSecTimeTracks(formData.time_tracks) === false\n ) {\n setErrorMsg('_invalid_time_range');\n res = false;\n }\n setErrors(tmpErr);\n if (!res) return null;\n\n res = {\n ...formData,\n assessment_date: toSecond(formData.assessment_date),\n planned_date_harvest: toSecond(formData.planned_date_harvest),\n seeding_id: lineData.growing_cycle?.main_seed.id,\n line_id: lineData.id,\n ready_to_harvest: formData.ready_to_harvest ?? false,\n origin_spat_id: formData.spat_storage_id ?? null,\n };\n if (formData.assess_bottom) {\n if (\n !formData.btm_size_avg ||\n !formData.btm_size_max ||\n !formData.btm_size_min\n ) {\n setErrorMsg('Bottom size measuring can not be empty');\n return null;\n }\n if (formData.btm_size_max < formData.btm_size_min) {\n setErrorMsg('Bottom size measuring range is incorrect');\n return null;\n }\n } else {\n res.btm_size_min = res.btm_size_max = res.btm_size_avg = undefined;\n }\n\n if (res.time_tracks && res.time_tracks.length > 0) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (!tt) {\n setErrorMsg('Invalid time tracks information');\n return null;\n }\n res.time_tracks = tt;\n }\n const cvs = customValues\n .filter(x => !!x.field_val)\n .map(({ field_id, field_val }) => ({ field_id, field_val }));\n if (cvs.length > 0) {\n res.custom_values = cvs;\n } else {\n res.custom_values = undefined;\n }\n return res;\n };\n const handleConfirmClick = async () => {\n if (onlyView) return;\n let validData = validFormData();\n if (!validData) return;\n\n if (createAssessment) {\n var ValidaAssamet = validFormAssassment();\n if (!ValidaAssamet) return;\n }\n\n setErrorMsg(undefined);\n setDisabled(true);\n if (!seasonData.some(x => x.value === validData?.season_name)) {\n await dispatch(addUtilData('season', validData.season_name));\n }\n if (!!overConfirm) {\n const ovc = await overConfirm(validData);\n if (ovc !== true) {\n setDisabled(false);\n if (ovc.errors) setErrors(ovc.errors);\n if (ovc.message) setErrorMsg(ovc.message);\n }\n return;\n }\n const res = updateID\n ? await sendSingleRequest(\n validData,\n 'PUT',\n `api/farm/line/seeding/${updateID}`,\n true,\n )\n : await sendSingleRequest(\n validData,\n 'POST',\n 'api/farm/line/seeding',\n true,\n );\n if (res.status) {\n if (createAssessment) {\n ValidaAssamet.seeding_id =\n lineData.growing_cycle?.main_seed.id ?? res.data.data.id;\n const resAssasment = await sendSingleRequest(\n ValidaAssamet,\n 'POST',\n 'api/farm/line/assessment/assessments',\n true,\n );\n if (!resAssasment.status) {\n setDisabled(false);\n setErrorMsg(\n translate(lang, resAssasment.data?.message ?? 'Unknown error'),\n );\n dispatch(loadFarmsData());\n return;\n }\n }\n dispatch(\n showFeedback({\n isMessage: true,\n message:\n res.data?.message ??\n (updateID\n ? 'Updated data successfully'\n : 'Seed data submitted successfully'),\n type: 'success',\n }),\n );\n dispatch(loadFarmsData());\n dispatch(loadSpatStorages());\n if (pickedInventories) {\n dispatch(loadInventories());\n }\n onConfirm(validData);\n } else {\n setDisabled(false);\n setErrorMsg(res.data?.message ?? 'Unknown error');\n if (res.data?.errors) setErrors(res.data.errors);\n }\n };\n\n const availableWeight = formData.spat_storage_id\n ? (spats.find(x => x.id === Number(formData.spat_storage_id))\n ?.available_weight ?? 0) + (updateID ? data.spat_amount : 0)\n : -1;\n\n const farmOptions = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }));\n const lineOptions = farmsData\n .find(x => x.id === focFarmId)\n ?.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n }));\n\n useEffect(() => {\n const spat = spats.find(x => x.id === Number(formData.spat_storage_id));\n if (!seedStages || seedStages.length <= 0 || !spat || !spat.harvest) {\n setStageMsg(undefined);\n return;\n }\n let i = 0;\n for (\n i = 0;\n i < seedStages.length &&\n seedStages[i].size <= Number(spat.harvest.shell_length);\n i++\n );\n if (i > 0) {\n const { time } = seedStages[i - 1];\n setStageMsg(\n translate(\n lang,\n 'Calculated based on detected stage %s months',\n `${i} + ${time}`,\n ),\n );\n updateForm(\n 'planned_date_harvest',\n moment(formData.planned_date_seed)\n .add(time, 'months')\n .toDate()\n .getTime(),\n );\n } else {\n setStageMsg(undefined);\n }\n }, [seedStages, formData.planned_date_seed, formData.spat_storage_id]);\n\n useEffect(() => {\n if (data) {\n let tmp: any = {};\n for (let k in formData) {\n tmp[k] = data[k] ?? (formData as any)[k];\n if (k === 'planned_date_seed' || k === 'planned_date_harvest') {\n tmp[k] = toMillisecond(tmp[k]);\n } else if (\n k === 'images' &&\n (tmp[k] === null || tmp[k] === undefined)\n ) {\n tmp[k] = [];\n }\n }\n if (data?.spat_storage && !tmp.spat_storage_id) {\n tmp.spat_storage_id = data.spat_storage.id;\n }\n if (tmp.time_tracks && tmp.time_tracks.length > 0) {\n tmp.time_tracks = tmp.time_tracks.map((x: any) => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n }));\n }\n if (showBudget && data.expense_items && data.expense_items.length > 0) {\n tmp.cost = data.expense_items.reduce(\n (p: any, c: any) => p + c.amount,\n 0,\n );\n } else if (showBudget && data.cost) {\n tmp.cost = data.cost;\n }\n if (tmp.images) {\n tmp.images = tmp.images.map((x: any) =>\n typeof x === 'object' && x !== null ? x : parseImageUrlToFileItem(x),\n );\n }\n setAddDensityRange(!!data.density_max);\n setAddSpatSizeRange(!!data.spat_size_max);\n setFormData(tmp);\n }\n }, [data, showBudget]);\n\n return (\n }\n width={width !== undefined ? width : 600}\n >\n
\n
\n \n {translate(lang, title ?? 'Mussel seed line')}\n \n
\n {isGrower ? (\n
\n {translate(lang, 'Permission denied')}\n
\n ) : (\n
\n {!!warningMessage && (\n
{warningMessage}
\n )}\n {!!errorMsg && (\n setErrorMsg(undefined)}\n />\n )}\n {!parentID && !!lineChangeable && (\n
\n
\n setFocFarmId(Number(v))}\n />\n
\n
\n Number(x.id) === focLineId)\n ? focLineId.toString()\n : undefined\n }\n onChange={v => setFocLineId(Number(v))}\n />\n
\n
\n )}\n {!data?.is_catch_spat ? (\n <>\n setIsSeasonNew(e.target.value)}\n value={isSeasonNew}\n disabled={onlyView}\n >\n \n \n \n \n {isSeasonNew === 'old' ? (\n updateForm('season_name', value)}\n options={seasonData}\n value={formData.season_name}\n disabled={onlyView}\n />\n ) : (\n updateForm('season_name', e.target.value)}\n disabled={onlyView}\n />\n )}\n {!!errors?.season_name && (\n
\n {errors?.season_name}\n
\n )}\n
\n \n Number(x.available_weight) > 0)\n .map(item => ({\n id: item.id.toString(),\n value: item.id.toString(),\n label: getSpatSourceLabel(item.id, spats),\n }))}\n onChange={(value, evt) =>\n updateForm('spat_storage_id', value)\n }\n disabled={onlyView}\n showSearch={true}\n />\n {!!formData.spat_storage_id && (\n
\n 0 ? availableWeight : undefined}\n unit='kg'\n onChange={e =>\n updateForm('spat_amount', e.target.value)\n }\n disabled={onlyView}\n />\n {formData.spat_amount !== availableWeight && (\n \n updateForm(\n 'spat_amount',\n availableWeight.toString(),\n )\n }\n >\n {translate(\n lang,\n '_full_spats_seeded',\n getSpatSourceLabel(formData.spat_storage_id, spats),\n )}\n
\n )}\n
\n )}\n {!!errors?.spat_storage_id && (\n
\n {errors?.spat_storage_id}\n
\n )}\n {!!errors?.spat_amount && (\n
\n {renderCustomError(errors?.spat_amount)}\n
\n )}\n \n \n ) : (\n
\n {translate(lang, 'This is line catch spat')}\n
\n )}\n \n )}\n \n \n updateForm(\n 'planned_date_seed',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n )\n }\n required\n disabled={onlyView}\n />\n {errors?.planned_date_seed && (\n
{errors?.planned_date_seed}
\n )}\n \n
\n {\n if (\n formData.planned_date_seed !== undefined &&\n e &&\n e!.toDate().getTime() < formData.planned_date_seed\n ) {\n updateForm('planned_date_harvest', moment().toDate().getTime());\n } else {\n updateForm(\n 'planned_date_harvest',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n );\n }\n }}\n required\n disabled={onlyView}\n />\n {stageMsg && (\n
{translate(lang, stageMsg)}
\n )}\n
\n
\n updateForm('line_length', e.target.value)}\n disabled={onlyView}\n />\n {errors?.line_length && (\n
{errors?.line_length}
\n )}\n
\n
\n updateForm('fill_percent', e.target.value)}\n disabled={onlyView}\n />\n
\n
\n updateForm('direction', v)}\n />\n
\n {!!formData.time_tracks && (\n updateForm('time_tracks', t)}\n disabled={onlyView}\n />\n )}\n
\n updateForm('drop', Number(e.target.value))}\n disabled={onlyView}\n />\n
\n
\n toggleAddRangeCheck('SPAT', e.target.checked)}\n disabled={onlyView}\n />\n
\n {formData.spat_size_max === null ? (\n
\n updateForm('spat_size', Number(e.target.value))}\n disabled={onlyView}\n />\n
\n ) : (\n
\n \n updateForm('spat_size', Number(e.target.value))}\n disabled={onlyView}\n />\n {errors?.spat_size && (\n
{errors?.spat_size}
\n )}\n
\n
\n \n updateForm('spat_size_max', Number(e.target.value))\n }\n disabled={onlyView}\n />\n
\n \n )}\n
\n
\n updateForm('submersion', Number(e.target.value))}\n disabled={onlyView}\n />\n
\n
\n updateForm('spacing', Number(e.target.value))}\n disabled={onlyView}\n />\n
\n
\n
\n
\n toggleAddRangeCheck('DENSITY', e.target.checked)}\n disabled={onlyView}\n />\n
\n updateForm('density_unit', e.target.value)}\n value={formData.density_unit}\n >\n \n \n \n
\n
\n
\n {formData.density_max === null ? (\n updateForm('density', Number(e.target.value))}\n disabled={onlyView}\n unit={formData.density_unit}\n />\n ) : (\n
\n \n \n updateForm('density', Number(e.target.value))\n }\n disabled={onlyView}\n unit={formData.density_unit}\n />\n {errors?.density && (\n
{errors?.density}
\n )}\n
\n
\n \n updateForm('density_max', Number(e.target.value))\n }\n unit={formData.density_unit}\n disabled={onlyView}\n />\n
\n
\n )}\n
\n \n {customValues.map(x => (\n
\n {x.input_type === 'select' ? (\n <>\n updateCustomValue(x.field_id, v)}\n />\n {(!x.options || x.options.length <= 0) && (\n \n Set up field\n \n )}\n \n ) : (\n updateCustomValue(x.field_id, e.target.value)}\n unit={x.unit}\n />\n )}\n
\n ))}\n {!updateID && (\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: inventoryLabel(x),\n }))}\n value={pickedInventories.map(x => x.id.toString()) as any}\n onChange={(val: any) => selectInventoryIds(val)}\n disabled={onlyView}\n />\n
\n )}\n {pickedInventories.length > 0 && (\n
\n {pickedInventories.map((item, idx) => (\n t.id === item.id))}\n placeholder={translate(\n lang,\n 'Maximum value is %s',\n inventories.find(t => t.id === item.id)?.available_quantity ??\n '',\n )}\n value={item.quantity?.toString() ?? ''}\n onChange={e => updateInventoryQuantity(idx, e.target.value)}\n max={\n inventories.find(t => t.id === item.id)?.available_quantity\n }\n disabled={onlyView}\n />\n ))}\n
\n )}\n {!!showBudget && (\n <>\n
\n updateForm('cost', Number(e.target.value))}\n disabled={onlyView}\n />\n
\n
\n updateForm('budget_unit_amount', e.target.value)}\n disabled={onlyView}\n />\n
\n
\n updateForm('budget_unit_price', e.target.value)}\n disabled={onlyView}\n />\n
\n \n )}\n
\n updateForm('comment', e.target.value)}\n disabled={onlyView}\n />\n
\n
\n updateForm('images', v)}\n />\n
\n
\n setCreateAssessment(e.target.checked)}\n />\n
\n {createAssessment && (\n
\n \n
\n )}\n \n
\n \n {translate(lang, 'Close')}\n \n \n {translate(lang, confirmBtnLabel ?? 'Confirm')}\n \n
\n \n );\n};\n\nexport default MusselSeedModal;\n","import moment from 'moment';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { ISeaweedLineResource } from '../../../entities/farms.entities';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useEffect, useState } from 'react';\nimport { Modal, Radio } from 'antd';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n Dropdown,\n Feedback,\n Input,\n RadioButton,\n Subtitle,\n} from '../../shared';\nimport { renderCustomError } from '.';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { toSecTimeTracks } from '../../shared/input/TimeTrackInput';\nimport { toMillisecond, toSecond } from '../../../util/toggleSecondMillisecond';\nimport { addUtilData } from '../../../store/utils/utils.actions';\nimport { sendSingleRequest } from '../../../apis';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport {\n loadFarmsData,\n loadSpatStorages,\n} from '../../../store/farms/farms.actions';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport {\n SelectIsBudgetVisible,\n SelectSeasonsByFarmID,\n SelectSeaweedSpatsByFarmID,\n} from '../../../store/extra/extra.selector';\nimport { getSpatSourceLabel } from '../../../lib/farm.helpers';\n\ninterface IFormData {\n season_name: string;\n spat_storage_id: number | null;\n spat_amount: number | null;\n planned_date_seed: number;\n planned_date_harvest: number;\n spat_size: number;\n spat_size_max: number | null;\n tank_area: number | null;\n comment: string;\n time_tracks?: ITimeRange[];\n cost?: number | null;\n images: any[];\n parent_id?: number | null;\n}\n\nconst defaultForm: IFormData = {\n season_name: '',\n spat_storage_id: null,\n spat_amount: null,\n planned_date_seed: moment().toDate().getTime(),\n planned_date_harvest: moment().toDate().getTime(),\n spat_size: 0,\n spat_size_max: null,\n tank_area: null,\n comment: '',\n images: [],\n parent_id: null,\n};\n\ninterface Props {\n visible: boolean;\n title?: string;\n lineData: ISeaweedLineResource;\n data?: any;\n updateID?: number;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n parentID?: number;\n onlyView?: boolean;\n}\n\nconst SeaweedSeedModal = ({\n visible,\n title,\n lineData,\n data,\n updateID,\n onCancel,\n onConfirm,\n parentID,\n onlyView,\n}: Props) => {\n const dispatch = useDispatch();\n const showBudget = SelectIsBudgetVisible(lineData.farm_id);\n const lang = useSelector(selectLang);\n const spats = SelectSeaweedSpatsByFarmID(lineData.farm_id);\n const seasonData = SelectSeasonsByFarmID(lineData.farm_id).map(x => ({\n id: x.id.toString(),\n label: x.name,\n value: x.name,\n }));\n\n const [errorMsg, setErrorMsg] = useState();\n const [isSeasonNew, setIsSeasonNew] = useState<'old' | 'new'>('old');\n const [errors, setErrors] = useState();\n const [formData, setFormData] = useState(defaultForm);\n const [addSpatSizeRange, setAddSpatSizeRange] = useState(false);\n const [disabled, setDisabled] = useState(false);\n\n const availableWeight = formData.spat_storage_id\n ? spats.find(x => x.id === Number(formData.spat_storage_id))\n ?.available_weight + (updateID ? data.spat_amount : 0)\n : -1;\n\n const toggleAddRangeCheck = (val: boolean) => {\n setAddSpatSizeRange(val);\n if (val) updateForm('spat_size_max', formData.spat_size);\n else updateForm('spat_size_max', null);\n };\n const updateForm = (key: keyof IFormData, val: any) => {\n if (['spat_amount', 'tank_area', 'cost'].includes(key)) {\n val = val.length <= 0 ? null : Number(val);\n }\n if (key === 'spat_storage_id' || key === 'spat_amount') {\n setErrors((prv: any) => ({\n ...(prv ?? {}),\n spat_storage_id: null,\n spat_amount: null,\n }));\n } else {\n setErrors((prv: any) => ({ ...(prv ?? {}), [key]: null }));\n }\n if (key === 'spat_storage_id') {\n const spat = spats.find(x => x.id === Number(val));\n let tmp = { ...formData, spat_storage_id: val };\n if (spat?.harvest) {\n if (spat.harvest.shell_length) {\n tmp.spat_size = spat.harvest.shell_length;\n }\n if (spat.harvest.shell_length_max) {\n setAddSpatSizeRange(true);\n tmp.spat_size_max = spat.harvest.shell_length_max;\n }\n }\n setFormData(tmp);\n } else {\n setFormData({ ...formData, [key]: val });\n }\n };\n const validFormData = () => {\n let tmpErr = { ...(errors ?? {}) };\n let res = true;\n if (!formData.season_name) {\n tmpErr.season_name = translate(lang, 'Add name');\n res = false;\n }\n if (Number(formData.tank_area) === 0) {\n tmpErr.tank_area = translate(lang, 'Tank area cannot be 0');\n res = false;\n }\n if (formData.planned_date_seed > formData.planned_date_harvest) {\n tmpErr.planned_date_seed = translate(lang, '_invalid_seed_date');\n res = false;\n }\n if (\n data?.is_catch_spat !== true &&\n (!formData.spat_storage_id ||\n !formData.spat_amount ||\n formData.spat_amount < 0)\n ) {\n tmpErr.spat_amount = translate(lang, 'Select spat and weight');\n res = false;\n }\n if (\n data?.is_catch_spat === false &&\n formData.spat_amount &&\n formData.spat_amount > availableWeight\n ) {\n tmpErr.spat_amount = translate(lang, '_max_spat_amount', availableWeight);\n res = false;\n }\n if (\n formData.spat_size_max !== null &&\n formData.spat_size_max < formData.spat_size\n ) {\n tmpErr.spat_size = translate(lang, 'Invalid spat size range');\n res = false;\n }\n if (\n formData.time_tracks &&\n toSecTimeTracks(formData.time_tracks) === false\n ) {\n setErrorMsg('_invalid_time_range');\n res = false;\n }\n setErrors(tmpErr);\n if (!res) return null;\n\n let validData = {\n ...formData,\n line_id: lineData.id,\n planned_date_seed: toSecond(formData.planned_date_seed),\n planned_date_harvest: toSecond(formData.planned_date_harvest),\n };\n if (!!parentID) {\n validData.parent_id = parentID;\n } else if (!updateID) {\n const ms = lineData.growing_cycle?.main_seed;\n if (ms) {\n if (!window.confirm(translate(lang, '_line_seed_make_sure')))\n return null;\n validData.parent_id = ms.id;\n }\n }\n if (formData.time_tracks) {\n const tt = toSecTimeTracks(formData.time_tracks);\n if (tt) {\n validData.time_tracks = tt;\n } else {\n setErrorMsg('_invalid_time_range');\n return null;\n }\n }\n if (!updateID && !validData.parent_id && lineData.growing_cycle) {\n if (!window.confirm(translate(lang, '_line_seed_make_sure'))) return null;\n validData.parent_id = lineData.growing_cycle.main_seed.id;\n }\n return validData;\n };\n const handleConfirmClick = async () => {\n if (onlyView) return;\n let validData = validFormData();\n if (!validData) return;\n\n setErrorMsg(undefined);\n setDisabled(true);\n if (!seasonData.some(x => x.value === validData?.season_name)) {\n await dispatch(addUtilData('season', validData.season_name));\n }\n const res = updateID\n ? await sendSingleRequest(\n validData,\n 'PUT',\n `api/farm/line/seeding/${updateID}`,\n true,\n )\n : await sendSingleRequest(\n validData,\n 'POST',\n `api/farm/line/seaweed-seeding`,\n true,\n );\n if (res.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(\n lang,\n res.data?.message ??\n (updateID\n ? 'Updated data successfully'\n : 'Seed data submitted successfully'),\n ),\n type: 'success',\n }),\n );\n dispatch(loadFarmsData());\n dispatch(loadSpatStorages());\n onConfirm(validData);\n } else {\n setDisabled(false);\n setErrorMsg(res.data?.message ?? 'Unknown error');\n if (res.data?.errors) setErrors(res.data.errors);\n }\n };\n\n useEffect(() => {\n if (data) {\n let tmp: any = {};\n for (let k in formData) {\n tmp[k] = data[k] ?? (formData as any)[k];\n if (k === 'planned_date_seed' || k === 'planned_date_harvest') {\n tmp[k] = toMillisecond(tmp[k]);\n } else if (\n k === 'images' &&\n (tmp[k] === null || tmp[k] === undefined)\n ) {\n tmp[k] = [];\n }\n }\n if (data?.spat_storage && !tmp.spat_storage_id) {\n tmp.spat_storage_id = data.spat_storage.id;\n }\n if (tmp.time_tracks && tmp.time_tracks.length > 0) {\n tmp.time_tracks = tmp.time_tracks.map((x: any) => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n }));\n }\n if (showBudget && data.expense_items && data.expense_items.length > 0) {\n tmp.cost = data.expense_items.reduce(\n (p: any, c: any) => p + c.amount,\n 0,\n );\n } else if (showBudget && data.cost) {\n tmp.cost = data.cost;\n }\n if (tmp.images) {\n tmp.images = tmp.images.map((x: any) =>\n typeof x === 'object' && x !== null ? x : parseImageUrlToFileItem(x),\n );\n }\n setAddSpatSizeRange(!!data.spat_size_max);\n setFormData(tmp);\n }\n }, [data, showBudget]);\n\n return (\n }\n width={600}\n >\n
\n
\n \n {translate(lang, title ?? 'Seaweed seed line')}\n \n
\n {\n
\n {!!errorMsg && (\n setErrorMsg(undefined)}\n />\n )}\n {!data?.is_catch_spat ? (\n <>\n setIsSeasonNew(e.target.value)}\n value={isSeasonNew}\n >\n \n \n \n \n {isSeasonNew === 'old' ? (\n updateForm('season_name', value)}\n options={seasonData}\n value={formData.season_name}\n />\n ) : (\n updateForm('season_name', e.target.value)}\n />\n )}\n {!!errors?.season_name && (\n
\n {errors?.season_name}\n
\n )}\n
\n \n Number(x.available_weight) > 0)\n .map(item => ({\n id: item.id.toString(),\n value: item.id.toString(),\n label: getSpatSourceLabel(item.id, spats),\n }))}\n onChange={(value, evt) =>\n updateForm('spat_storage_id', value)\n }\n showSearch={true}\n />\n {!!formData.spat_storage_id && (\n 0 ? availableWeight : undefined}\n unit='kg'\n onChange={e => updateForm('spat_amount', e.target.value)}\n />\n )}\n {!!errors?.spat_storage_id && (\n
\n {errors?.spat_storage_id}\n
\n )}\n {!!errors?.spat_amount && (\n
\n {renderCustomError(errors?.spat_amount)}\n
\n )}\n
\n \n ) : (\n
\n {translate(lang, 'This is line catch spat')}\n
\n )}\n \n }\n \n \n updateForm(\n 'planned_date_seed',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n )\n }\n required\n />\n {errors?.planned_date_seed && (\n
{errors?.planned_date_seed}
\n )}\n \n
\n {\n if (\n formData.planned_date_seed !== undefined &&\n e &&\n e!.toDate().getTime() < formData.planned_date_seed\n ) {\n updateForm('planned_date_harvest', moment().toDate().getTime());\n } else {\n updateForm(\n 'planned_date_harvest',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n );\n }\n }}\n required\n />\n
\n
\n updateForm('tank_area', Number(e.target.value))}\n />\n {errors?.tank_area && (\n
{errors?.tank_area}
\n )}\n
\n
\n toggleAddRangeCheck(e.target.checked)}\n />\n
\n {formData.spat_size_max === null ? (\n
\n updateForm('spat_size', Number(e.target.value))}\n />\n
\n ) : (\n
\n \n updateForm('spat_size', Number(e.target.value))}\n />\n {errors?.spat_size && (\n
{errors?.spat_size}
\n )}\n
\n
\n \n updateForm('spat_size_max', Number(e.target.value))\n }\n />\n
\n \n )}\n {!!showBudget && (\n
\n updateForm('cost', Number(e.target.value))}\n />\n
\n )}\n
\n updateForm('comment', e.target.value)}\n />\n
\n
\n updateForm('images', v)}\n />\n
\n \n
\n \n {translate(lang, 'Close')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default SeaweedSeedModal;\n","import OysterSeedModal from './OysterSeedModal';\nimport MusselSeedModal from './MusselSeedModal';\nimport { TBusinessType } from '../../../entities/general.entities';\nimport {\n ILineResource,\n IMusselLineResource,\n IOysterLineResource,\n ISeaweedLineResource,\n} from '../../../entities/farms.entities';\nimport { Link } from 'react-router-dom';\nimport SeaweedSeedModal from './SeaweedSeedModal';\nimport '../styles.scss';\n\nexport const renderCustomError = (msg: string) => {\n if (msg.startsWith('CUSTOM')) {\n const d = JSON.parse(msg.substring('CUSTOM'.length));\n return (\n
\n
{`Selected spat has 0kg available left which means it's been fully seeded somewhere else. If you'd like to correct it, here is the list of lines where it has been seeded, you can fix it directly there:`}
\n
    \n {d.map((x: any, i: number) => (\n
  • \n {x.label}\n
  • \n ))}\n
\n
\n );\n } else {\n return msg;\n }\n};\n\ninterface Props {\n type: TBusinessType;\n visible: boolean;\n className?: string; // only MUSSEL\n title?: string;\n width?: number; // only MUSSEL\n lineData: ILineResource;\n data?: any;\n updateID?: number;\n parentID?: number;\n onlyView?: boolean;\n onConfirm: (data: any) => void;\n onCancel: () => void;\n overConfirm?: (data: any) => Promise; // only MUSSEL\n confirmBtnLabel?: string; // only MUSSEL\n lineChangeable?: boolean; // only MUSSEL\n warningMessage?: string | React.ReactNode; // only MUSSEL\n}\n\nconst SeedingModal = ({\n type,\n visible,\n className,\n title,\n width,\n lineData,\n data,\n updateID,\n parentID,\n onlyView,\n onConfirm,\n onCancel,\n overConfirm,\n confirmBtnLabel,\n lineChangeable,\n warningMessage,\n}: Props) => (\n <>\n {type === 'MUSSEL' ? (\n \n ) : type === 'OYSTER' ? (\n \n ) : (\n \n )}\n \n);\n\nexport default SeedingModal;\n","import React, { useMemo, useState } from 'react';\nimport { Modal, Tooltip } from 'antd';\nimport moment from 'moment';\nimport { useSelector } from 'react-redux';\nimport { ISpatStorageResource } from '../../entities/farms.entities';\nimport { Button, CloseIcon, MinusIcon, PlusIcon, Subtitle } from '../shared';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { TActionType, TBusinessType } from '../../entities/general.entities';\nimport {\n IHarvestResource,\n IOysterHarvest,\n ISeedingResource,\n} from '../../entities/growing.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport './styles.scss';\n\nconst seedPropLabel = (d: any) => {\n return d.line_length\n ? `Seeding ${d.line_length} m`\n : `Seeding ${d.basket_count} ${d.line.farming_method}`;\n};\n\nconst spatWeightLabel = (d: ISpatStorageResource, available = 0) =>\n `${\n available === 0\n ? d.weight\n : available === 1\n ? d.available_weight\n : d.weight - (d.available_weight ?? 0)\n } ${d.type === 'MUSSEL' ? 'kg' : d.type === 'OYSTER' ? 'pcs' : 'kg'}`;\n\nconst calcDiff = (from: number, to: number) => {\n let m = moment(to * 1000).diff(from * 1000, 'months');\n if (m !== 0) {\n return `${m > 0 ? '+' : ''}${m} month${Math.abs(m) === 1 ? '' : 's'}`;\n }\n m = moment(to * 1000).diff(from * 1000, 'days');\n return `${m > 0 ? '+' : ''}${m} day${Math.abs(m) === 1 ? '' : 's'}`;\n};\n\ninterface INode {\n content: string | React.ReactElement;\n onClick?: (d: any) => void;\n children?: INode[];\n date: number;\n}\n\nconst NodeDiv: React.FC<{ node: INode; parentDate?: number }> = ({\n node,\n parentDate,\n}) => (\n
\n
\n
\n
\n
\n {!!parentDate && (\n
\n {calcDiff(parentDate, node.date)}\n
\n )}\n
\n {!!node.children && node.children.length > 0 ? (\n <>\n
\n
{node.content}
\n
\n
\n
\n {node.children.map((x, i) => (\n \n ))}\n
\n \n ) : (\n
{node.content}
\n )}\n
\n);\n\ninterface IJourneyData {\n type: TActionType;\n data: any;\n children?: IJourneyData[];\n}\n\nconst makeNode = (\n j: IJourneyData,\n farms: any[],\n leafCallback: () => void,\n type: TBusinessType,\n lang: TLang | undefined,\n lineID?: number,\n): INode => {\n if (\n !j.children ||\n j.children.filter(x => ['SEEDING', 'HARVEST'].includes(x.type)).length <= 0\n ) {\n leafCallback();\n }\n if (j.type === 'SEEDING') {\n const ac = j.children?.filter(x => x.type === 'ASSESSMENT').length;\n const mc = j.children?.filter(x => x.type === 'MAINTENANCE').length;\n const fc = j.children?.filter(x => x.type === 'INVENTORY_SEED').length;\n const farm = farms.find(x => x.id === j.data.line.farm_id);\n\n return {\n content: (\n \n
{`${farm?.name} - ${j.data.line.line_name}`}
\n {!!j.data.is_catch_spat &&
{translate(lang, 'Catch Spat')}
}\n
\n {!j.data.spat_size_max\n ? `${translate(lang, 'Size')} ${j.data.spat_size}mm`\n : `${translate(lang, 'Size')} ${j.data.spat_size}mm - ${\n j.data.spat_size_max\n }mm`}\n
\n
{seedPropLabel(j.data)}
\n {!!ac && (\n
{`${ac} ${translate(\n lang,\n 'assessments',\n )}`}
\n )}\n {!!mc && (\n
{`${mc} ${translate(\n lang,\n 'maintenances',\n )}`}
\n )}\n {!!fc && (\n
{`${fc} ${translate(\n lang,\n 'floats managements',\n )}`}
\n )}\n
{defaultDateFormat(j.data.planned_date_seed)}
\n
\n ),\n children: j.children\n ?.filter(x => x.type === 'HARVEST')\n .map(x => makeNode(x, farms, leafCallback, type, lang, lineID)),\n date: j.data.planned_date_seed,\n };\n } else if (j.type === 'HARVEST') {\n const farm = farms.find(x => x.id === j.data.line.farm_id);\n return {\n content: (\n \n
{`${farm?.name} - ${j.data.line.line_name}`}
\n
\n {!j.data.shell_length_max\n ? `${translate(lang, 'Size')} ${j.data.shell_length ?? 0} mm`\n : `${translate(lang, 'Size')} ${j.data.shell_length}mm - ${\n j.data.shell_length_max\n }mm`}\n
\n {type === 'MUSSEL' ? (\n
{`${translate(lang, 'Harvest')} ${j.data.amount} kg / ${\n j.data.line_length\n } m`}
\n ) : type === 'OYSTER' ? (\n
{`${translate(lang, 'Harvest')} ${j.data.amount_dz} dz`}
\n ) : (\n <>\n )}\n
{defaultDateFormat(j.data.complete_date)}
\n
\n ),\n children: j.children?.map(x =>\n makeNode(x, farms, leafCallback, type, lang, lineID),\n ),\n date: j.data.complete_date,\n };\n } else {\n return { content: 'Other Item', date: 0 };\n }\n};\n\ninterface Props {\n data: {\n parent_seeding?: ISeedingResource | null;\n parent_harvest?: IHarvestResource;\n data: IJourneyData[];\n spat_storage: ISpatStorageResource;\n };\n visible: boolean;\n onClose: () => void;\n focusLineID?: number;\n}\n\nconst SpatJourneyModal = ({\n data,\n visible,\n onClose,\n focusLineID: lineID,\n}: Props) => {\n const farmsData = useSelector(selectFarmsData);\n const lang = useSelector(selectLang);\n\n const [zoom, setZoom] = useState(1);\n\n const onNodeViewWheel = (e: React.WheelEvent) => {\n if (!e.shiftKey) return;\n const z = e.deltaY < 0 ? zoom + 0.1 : zoom - 0.1;\n setZoom(Math.max(0.1, z));\n };\n\n const { root, leafs } = useMemo(() => {\n const spat = data.spat_storage;\n let leafs = 0;\n let r: INode = {\n content: (\n
\n
{translate(lang, 'Manually added')}
\n
{`${spat.source} - ${spatWeightLabel(spat)}`}
\n
\n {`${translate(lang, 'Seeded')} ${spatWeightLabel(spat, 2)}`}\n
\n
\n {`${translate(lang, 'Available')} ${spatWeightLabel(spat, 1)}`}\n
\n {!!spat.seed_type && (\n
{`${translate(lang, 'Spat type')}: ${spat.seed_type}`}
\n )}\n
\n ),\n children: [],\n date: spat.collection_date,\n };\n if (data.parent_harvest) {\n const d = data.parent_harvest;\n const farm = farmsData.find(x => x.id === d.line.farm_id);\n r.content = (\n \n
{`${farm?.name} - ${d.line.line_name}`}
\n
\n {!d.shell_length_max\n ? `${translate(lang, 'Size')} ${d.shell_length ?? 0} mm`\n : `${translate(lang, 'Size')} ${d.shell_length}mm - ${\n d.shell_length_max\n }mm`}\n
\n {spat.type === 'MUSSEL' ? (\n
\n {`${translate(lang, 'Harvest')} ${d.amount} kg / ${\n d.line_length\n } m`}\n
\n ) : spat.type === 'OYSTER' ? (\n
\n {`${translate(lang, 'Harvest')} ${\n (d as IOysterHarvest).amount_dz\n } dz`}\n
\n ) : (\n <>\n )}\n
\n );\n r.date = d.complete_date;\n if (data.parent_seeding) {\n const d = data.parent_seeding;\n const farm = farmsData.find(x => x.id === d.line.farm_id);\n r = {\n content: (\n \n
{`${farm?.name} - ${d.line.line_name}`}
\n {!!d.is_catch_spat &&
{translate(lang, 'Catch Spat')}
}\n
\n {!d.spat_size_max\n ? `${translate(lang, 'Size')} ${d.spat_size}mm`\n : `${translate(lang, 'Size')} ${d.spat_size}mm - ${\n d.spat_size_max\n }mm`}\n
\n
{seedPropLabel(d)}
\n \n ),\n children: [r],\n date: d.planned_date_seed,\n };\n }\n }\n if (r.children && r.children.length > 0) {\n r.children[0].children = data.data.map(x =>\n makeNode(\n x,\n farmsData,\n () => (leafs = leafs + 1),\n spat.type,\n lang,\n lineID,\n ),\n );\n } else {\n r.children = data.data.map(x =>\n makeNode(\n x,\n farmsData,\n () => (leafs = leafs + 1),\n spat.type,\n lang,\n lineID,\n ),\n );\n }\n leafs = Math.max(1, leafs);\n return { root: r, leafs };\n }, [data, farmsData, lineID]);\n\n return (\n }\n width='full'\n style={{ maxWidth: 1440 }}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Spat Storage Journey')}\n \n
\n
\n \n setZoom(Math.max(0.1, zoom - 0.1))}\n >\n \n
\n
\n \n {zoom.toFixed(1)}\n \n
\n
setZoom(zoom + 0.1)}>\n \n
\n \n
\n
\n
\n \n
\n
\n
\n \n {translate(lang, 'Close')}\n \n
\n \n \n );\n};\n\nexport default SpatJourneyModal;\n","import moment from 'moment';\nimport { ICustomField } from '../entities/automation.entities';\nimport {\n IFarmResource,\n ISpatStorageResource,\n} from '../entities/farms.entities';\nimport { findMostSimilar, areSimilarStrings } from './common.helpers';\nimport { IInventoryResource } from '../entities/inventory.entities';\nimport { toSecond } from '../util/toggleSecondMillisecond';\n\nexport const convertSeedImportForm = (\n form: any,\n farms: IFarmResource[],\n spats: ISpatStorageResource[],\n inventories: IInventoryResource[],\n paperImage: string,\n) => {\n const {\n farm,\n line,\n planned_date_seed,\n planned_date_harvest,\n start_time,\n finish_time,\n spat_source_farm,\n spat_source_line,\n spat_source_other,\n float_type,\n ...rest\n } = form;\n let result: any = { ...rest, image: paperImage };\n\n if (farm) {\n const farmNames = farms.map(x => x.farm_number.toLowerCase());\n const similarFarm = findMostSimilar(farm.toLowerCase(), farmNames);\n const foundFarm = farms.find(x =>\n areSimilarStrings(x.farm_number, similarFarm),\n );\n if (foundFarm) {\n const lineNames = foundFarm.lines.map(x => x.line_name.toLowerCase());\n const similarLine = findMostSimilar(line.toLowerCase(), lineNames);\n const foundLine = foundFarm.lines.find(x =>\n areSimilarStrings(x.line_name, similarLine),\n );\n result.farm_id = foundFarm.id;\n if (foundLine) {\n result.line_id = foundLine.id;\n }\n }\n }\n let spat: ISpatStorageResource | null = null;\n if (spat_source_farm && spat_source_line) {\n spat =\n spats.find(\n x =>\n areSimilarStrings(x.source_line?.farm.name, spat_source_farm) &&\n areSimilarStrings(x.source_line?.line_name, spat_source_line),\n ) ?? null;\n }\n if (!spat && spat_source_other) {\n spat =\n spats.find(x => areSimilarStrings(x.source, spat_source_other)) ?? null;\n }\n if (spat) {\n result.spat_storage_id = spat.id;\n }\n if (planned_date_seed) {\n const tmp = moment(planned_date_seed, 'DD.MM.YYYY').toDate().getTime();\n if (!isNaN(tmp)) {\n result.planned_date_seed = Math.round(tmp / 1000);\n }\n }\n if (planned_date_harvest) {\n const tmp = moment(planned_date_harvest, 'DD.MM.YYYY').toDate().getTime();\n if (!isNaN(tmp)) {\n result.planned_date_harvest = Math.round(tmp / 1000);\n }\n }\n if (start_time) {\n let stm = moment(start_time, 'hh:mm a').toDate().getTime();\n if (!isNaN(stm)) {\n result.start_time = toSecond(stm);\n }\n }\n if (finish_time) {\n let ftm = moment(finish_time, 'hh:mm a').toDate().getTime();\n if (!isNaN(ftm)) {\n result.finish_time = toSecond(ftm);\n }\n }\n if (float_type) {\n const float = inventories.find(x => areSimilarStrings(x.name, float_type));\n if (float) {\n result.float_id = float.id;\n }\n }\n return result;\n};\n\nexport const convertAssessImportForm = (\n form: any,\n customFields: ICustomField[],\n farms: IFarmResource[],\n paperImage: string,\n) => {\n const {\n assessment_date,\n start_time,\n finish_time,\n farm,\n line,\n condition_score,\n blues,\n harvest_quality,\n ...params\n } = form;\n let result: any = { ...params, custom_values: [], image: paperImage };\n if (assessment_date) {\n const tmp = moment(assessment_date, 'DD.MM.YYYY').toDate().getTime();\n if (!isNaN(tmp)) {\n result.assessment_date = Math.round(tmp / 1000);\n }\n }\n if (start_time) {\n let stm = Math.round(\n moment(start_time, 'hh:mm a').toDate().getTime() / 1000,\n );\n if (!isNaN(stm)) {\n result.start_time = stm;\n }\n }\n if (finish_time) {\n let ftm = Math.round(\n moment(finish_time, 'hh:mm a').toDate().getTime() / 1000,\n );\n if (!isNaN(ftm)) {\n result.finish_time = ftm;\n }\n }\n if (condition_score) {\n const cF = customFields.find(x => x.name === 'Condition score');\n if (cF) {\n result.custom_values.push({\n field_id: cF.id,\n field_val: condition_score,\n });\n }\n }\n if (blues) {\n const bF = customFields.find(x => x.name === 'Blues');\n if (bF) {\n result.custom_values.push({\n field_id: bF.id,\n field_val: blues,\n });\n }\n }\n if (harvest_quality) {\n const hF = customFields.find(x => x.name === 'Harvest quality');\n if (hF) {\n result.custom_values.push({\n field_id: hF.id,\n field_val: harvest_quality,\n });\n }\n }\n if (farm) {\n const farmNames = farms.map(x => x.farm_number.toLowerCase());\n const similarFarm = findMostSimilar(farm.toLowerCase(), farmNames);\n const foundFarm = farms.find(x =>\n areSimilarStrings(x.farm_number, similarFarm),\n );\n if (foundFarm) {\n result.farm_id = foundFarm.id;\n\n if (line) {\n const lineNames = foundFarm.lines.map(x => x.line_name.toLowerCase());\n const similarLine = findMostSimilar(line.toLowerCase(), lineNames);\n const foundLine = foundFarm.lines.find(x =>\n areSimilarStrings(x.line_name, similarLine),\n );\n if (foundLine) {\n result.line_id = foundLine.id;\n result.seeding_id = foundLine.growing_cycle?.main_seed.id;\n }\n }\n }\n }\n return result;\n};\n\nexport const convertFloatingImportForm = (\n form: any,\n farms: IFarmResource[],\n inventories: IInventoryResource[],\n paperImage: string,\n) => {\n const {\n farm,\n line,\n name,\n quantity,\n type,\n manage_date,\n start_time,\n finish_time,\n } = form;\n let result: any = {\n quantity,\n type,\n image: paperImage,\n };\n if (farm) {\n const farmNames = farms.map(x => x.farm_number.toLowerCase());\n const similarFarm = findMostSimilar(farm.toLowerCase(), farmNames);\n const foundFarm = farms.find(x =>\n areSimilarStrings(x.farm_number, similarFarm),\n );\n if (foundFarm) {\n result.farm_id = foundFarm.id;\n\n const lineNames = foundFarm.lines.map(x => x.line_name.toLowerCase());\n const similarLine = findMostSimilar(line.toLowerCase(), lineNames);\n const foundLine = foundFarm.lines.find(x =>\n areSimilarStrings(x.line_name, similarLine),\n );\n if (foundLine) {\n result.line_id = foundLine.id;\n result.seeding_id = foundLine.growing_cycle?.main_seed.id;\n }\n }\n }\n if (manage_date) {\n const tmp = moment(manage_date, 'DD.MM.YYYY').toDate().getTime();\n if (!isNaN(tmp)) {\n result.manage_date = Math.round(tmp / 1000);\n }\n }\n if (start_time) {\n let stm = moment(start_time, 'hh:mm a').toDate().getTime();\n if (!isNaN(stm)) {\n result.start_time = toSecond(stm);\n }\n }\n if (finish_time) {\n let ftm = moment(finish_time, 'hh:mm a').toDate().getTime();\n if (!isNaN(ftm)) {\n result.finish_time = toSecond(ftm);\n }\n }\n if (name) {\n const inventory = inventories.find(x => areSimilarStrings(x.name, name));\n if (inventory) {\n result.inventory_id = inventory.id;\n }\n }\n return result;\n};\n\nexport const convertHarvestImportForm = (\n form: any,\n farms: IFarmResource[],\n inventories: IInventoryResource[],\n paperImage: string,\n) => {\n const {\n farm,\n line,\n complete_date,\n start_time,\n finish_time,\n inventories: floats,\n ...rest\n } = form;\n let result: any = {\n ...rest,\n image: paperImage,\n };\n if (farm) {\n const farmNames = farms.map(x => x.farm_number.toLowerCase());\n const similarFarm = findMostSimilar(farm.toLowerCase(), farmNames);\n const foundFarm = farms.find(x =>\n areSimilarStrings(x.farm_number, similarFarm),\n );\n if (foundFarm) {\n result.farm_id = foundFarm.id;\n\n const lineNames = foundFarm.lines.map(x => x.line_name.toLowerCase());\n const similarLine = findMostSimilar(line.toLowerCase(), lineNames);\n const foundLine = foundFarm.lines.find(x =>\n areSimilarStrings(x.line_name, similarLine),\n );\n if (foundLine) {\n result.line_id = foundLine.id;\n result.seeding_id = foundLine.growing_cycle?.main_seed.id;\n }\n }\n }\n if (floats) {\n result.inventories = floats\n .filter(\n (x: any) =>\n x.name && inventories.some(i => areSimilarStrings(i.name, x.name)),\n )\n .map((x: any) => ({\n inventory_id: inventories.find(i => areSimilarStrings(i.name, x.name))\n ?.id,\n quantity: Number(x.quantity),\n }));\n }\n if (complete_date) {\n const tmp = moment(complete_date, 'DD.MM.YYYY').toDate().getTime();\n if (!isNaN(tmp)) {\n result.complete_date = Math.round(tmp / 1000);\n }\n }\n if (start_time) {\n let stm = moment(start_time, 'hh:mm a').toDate().getTime();\n if (!isNaN(stm)) {\n result.start_time = toSecond(stm);\n }\n }\n if (finish_time) {\n let ftm = moment(finish_time, 'hh:mm a').toDate().getTime();\n if (!isNaN(ftm)) {\n result.finish_time = toSecond(ftm);\n }\n }\n return result;\n};\n\nexport const generateWeeklyRanges = () => {\n const weeks = [];\n const startDate = moment();\n for (let i = 0; i < 52; i++) {\n const startOfWeek = startDate.clone().startOf('isoWeek');\n const endOfWeek = startDate.clone().endOf('isoWeek');\n\n weeks.push({\n start_date: startOfWeek.toDate().getTime(),\n finish_date: endOfWeek.toDate().getTime(),\n day_label: `${startOfWeek.format('DD.MM.YYYY')} - ${endOfWeek.format(\n 'DD.MM.YYYY',\n )}`,\n week_label: `Week ${i + 1}`,\n });\n startDate.add(1, 'weeks');\n }\n return weeks;\n};\n\nexport const generateMonthlyRanges = () => {\n const months = [];\n const startDate = moment();\n for (let i = 0; i < 12; i++) {\n const startOfMonth = startDate.clone().startOf('month');\n const endOfMonth = startDate.clone().endOf('month');\n\n months.push({\n start_date: startOfMonth.toDate().getTime(),\n finish_date: endOfMonth.toDate().getTime(),\n month_label: startOfMonth.format('MMMM'),\n });\n startDate.add(1, 'month');\n }\n return months;\n};\n\nexport const directionChar = (s: string | null | undefined, ec: string = '') =>\n s === 'N' ? '↑' : s === 'S' ? '↓' : s === 'E' ? '→' : s === 'W' ? '←' : ec;\n","import { useMemo, useState } from 'react';\nimport { Modal, Table } from 'antd';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { DropdownMenu, ModalComponent, Spinner, Title } from '../shared';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n ILineResource,\n IOysterLineResource,\n} from '../../entities/farms.entities';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport ImageGallery from 'react-image-gallery';\nimport { EditFilled } from '@ant-design/icons';\nimport WeatherInfoModal from '../farm-modals/WeatherInfoModal';\nimport weather_icon from '../../images/weather-icon.png';\nimport GrowerSeedModal from '../farm-modals/GrowerSeedModal';\nimport SeedingModal from '../farm-modals/SeedingModal';\nimport { sendSingleRequest } from '../../apis';\nimport {\n IWeatherConditionResource,\n TBusinessType,\n} from '../../entities/general.entities';\nimport {\n IMusselCycle,\n IMusselSeeding,\n IOysterCycle,\n IOysterSeeding,\n ISeedingResource,\n} from '../../entities/growing.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { SelectIsGrower } from '../../store/extra/extra.selector';\nimport { labelRange } from '../../lib/common.helpers';\nimport SpatJourneyModal from '../view-modals/SpatJourneyModal';\nimport { directionChar } from '../../lib/form.helpers';\n\ninterface IColumn {\n key: string;\n title: string;\n render: (x: any) => JSX.Element;\n}\n\ninterface IGalleryImage {\n original: string;\n thumbnail: string;\n}\n\nconst SpatColumn = (x: any, businessType: TBusinessType) =>\n x.is_catch_spat\n ? 'Catch Spat'\n : x.spat_storage\n ? businessType === 'MUSSEL'\n ? `${x.spat_storage.source} - ${x.spat_amount} kg`\n : `${x.spat_storage.source} - ` +\n (x.measurement_units !== 'pcs'\n ? `${x.spat_amount_dz} dz`\n : `${x.spat_amount_pcs} pcs`)\n : '-';\n\ninterface IMusselRow extends IMusselSeeding {\n harvested?: number;\n}\n\ninterface IOysterRow extends IOysterSeeding {\n harvested?: number;\n}\n\ninterface Props {\n lineData: ILineResource;\n loadLine: () => void;\n cyclePart: IMusselCycle | IOysterCycle;\n type: TBusinessType;\n}\n\nconst ExtraSeedingsTable = ({\n lineData,\n loadLine,\n cyclePart,\n type: businessType,\n}: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const isGrower = SelectIsGrower(lineData.farm_id);\n\n const musselCycle = cyclePart as IMusselCycle,\n oysterCycle = cyclePart as IOysterCycle;\n\n const [visibleEdit, setVisibleEdit] = useState(false);\n const [visibleDelete, setVisibleDelete] = useState(false);\n const [selectedItem, setSelectedItem] = useState();\n const [disabled, setDisabled] = useState(false);\n const [infoShow, setInfoShow] = useState(false);\n const [infoText, setInfoText] = useState('');\n const [visibleGallery, setVisibleGallery] = useState(false);\n const [gImages, setGImages] = useState([]);\n const [selectedWeather, setSelectedWeather] =\n useState();\n const [journeyData, setJourneyData] = useState();\n\n const totalLength =\n businessType === 'MUSSEL'\n ? musselCycle.seedings.reduce((p, c) => p + c.line_length, 0)\n : 0,\n totalBasketCount =\n businessType === 'OYSTER'\n ? oysterCycle.seedings.reduce((p, c) => p + c.basket_count, 0)\n : 0;\n\n const showEditModal = (item: any) => {\n setSelectedItem(item);\n setVisibleEdit(true);\n };\n const showDeleteModal = (item: any) => {\n setSelectedItem(item);\n setVisibleDelete(true);\n };\n const handleConfirmDelete = async () => {\n if (!selectedItem) return;\n setDisabled(true);\n const res = await sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/line/seeding/${selectedItem.id}`,\n true,\n );\n if (res.status) {\n loadLine();\n dispatch(loadFarmsData());\n setVisibleDelete(false);\n setDisabled(false);\n } else {\n window.alert(translate(lang, res.data?.message ?? 'Unknown error'));\n }\n };\n const openInfo = (comment: any) => {\n setInfoShow(true);\n setInfoText(comment && comment.length > 0 ? comment : 'No comments yet');\n };\n const openImages = (images: string[]) => {\n setVisibleGallery(true);\n setGImages(\n images.map(image => ({\n original: image,\n thumbnail: image,\n })),\n );\n };\n const openJourney = async (spatID: number) => {\n setDisabled(true);\n const res = await sendSingleRequest(\n { from_root: true },\n 'GET',\n `api/farm/spats-journey/${spatID}`,\n true,\n );\n setDisabled(false);\n if (res.status) {\n setJourneyData(res.data);\n } else {\n alert(res.data?.message ?? 'Unknown error');\n }\n };\n const getLastAssessment = (spatID: number | undefined) => {\n if (!spatID) return null;\n const assessments = cyclePart.assessments.filter(\n y => y.origin_spat_id === spatID,\n );\n assessments.sort((a, b) => b.assessment_date - a.assessment_date);\n return assessments.length > 0 ? assessments[0] : null;\n };\n\n const tableColumns = () => {\n let columns: IColumn[] = [\n {\n key: 'id',\n title: 'ID',\n render: (x: IMusselRow | IOysterRow) => {x.id},\n },\n {\n key: 'date_seed',\n title: translate(lang, 'Date seeded'),\n render: (x: ISeedingResource) => {\n const lastAss = getLastAssessment(x.spat_storage?.id);\n return (\n <>\n {defaultDateFormat(x.planned_date_seed)}\n {x.verifier && (\n <>\n
\n \n {translate(lang, 'Verified by %s', x.verifier.name)}\n \n \n )}\n {lastAss && (\n <>\n
\n {' ↓ '}\n
\n {defaultDateFormat(lastAss.assessment_date)}\n \n )}\n \n );\n },\n },\n ];\n if (businessType === 'MUSSEL') {\n columns.push({\n key: 'line_length',\n title: translate(lang, 'Longline length'),\n render: (x: IMusselSeeding) => (\n \n {`${x.line_length}m - ${(\n (x.line_length / totalLength) *\n 100\n ).toFixed(2)}%`}\n \n ),\n });\n } else if (businessType === 'OYSTER') {\n columns.push({\n key: 'basket_count',\n title: translate(\n lang,\n 'Number of %s',\n (lineData as IOysterLineResource).farming_method,\n ),\n render: (x: IOysterRow) => (\n <>\n \n {`${x.basket_count} - ${(\n (x.basket_count / totalBasketCount) *\n 100\n ).toFixed(2)}%`}\n \n \n {x.harvested && (\n \n
\n {translate(\n lang,\n 'Harvested: %s; Waiting: %s',\n x.harvested,\n x.basket_count - x.harvested,\n )}\n
\n )}\n
\n \n ),\n });\n }\n columns.push(\n {\n key: 'season_name',\n title: translate(lang, 'Season'),\n render: (x: ISeedingResource) => {x.season_name},\n },\n {\n key: 'spat_storage',\n title: translate(lang, 'Spat storage'),\n render: (x: ISeedingResource) => (\n x.spat_storage && openJourney(x.spat_storage.id)}\n >\n {SpatColumn(x, businessType)}\n \n ),\n },\n );\n if (businessType === 'MUSSEL') {\n columns.push(\n {\n key: 'spacing',\n title: translate(lang, 'Spacing'),\n render: (x: IMusselSeeding) => {x.spacing},\n },\n {\n key: 'density',\n title: translate(lang, 'Density'),\n render: (x: IMusselSeeding) => (\n {labelRange(x.density, x.density_max ?? undefined)}\n ),\n },\n );\n }\n columns.push(\n {\n key: 'spat_size',\n title: translate(lang, 'Spat size'),\n render: (x: ISeedingResource) => {\n const lastAss = getLastAssessment(x.spat_storage?.id);\n return (\n <>\n \n {labelRange(x.spat_size, x.spat_size_max ?? undefined)}\n \n {lastAss && (\n <>\n
\n {' ↓ '}\n
\n {lastAss.shell_size.avg}\n \n )}\n \n );\n },\n },\n {\n key: 'comment',\n title: translate(lang, 'Note'),\n render: (x: ISeedingResource) => (\n undefined}\n onClick={openInfo.bind(this, x.comment)}\n >\n {translate(lang, 'View')}\n \n ),\n },\n );\n if (!isGrower) {\n columns.push(\n {\n key: 'images',\n title: translate(lang, 'Photo'),\n render: (x: ISeedingResource) =>\n x.images && x.images.length > 0 ? (\n undefined}\n onClick={openImages.bind(this, x.images)}\n >\n {translate(lang, 'View')}\n \n ) : (\n <>\n ),\n },\n {\n key: 'weather',\n title: translate(lang, 'Weather'),\n render: (x: ISeedingResource) =>\n !x.weather_condition ? (\n \n ) : (\n \n setSelectedWeather(x.weather_condition ?? undefined)\n }\n >\n \n \n {translate(lang, 'View')}\n \n \n ),\n },\n {\n key: 'direction',\n title: translate(lang, 'Direction'),\n render: (x: ISeedingResource) => (\n
{directionChar(x.direction)}
\n ),\n },\n );\n }\n columns.push(\n {\n key: 'stage',\n title: translate(lang, 'Stage'),\n render: (x: ISeedingResource) => (\n
{x.spat_storage?.stage}
\n ),\n },\n {\n key: 'more',\n title: translate(lang, 'More'),\n render: (x: ISeedingResource) =>\n x.id !== cyclePart.main_seed.id ? (\n showEditModal(x)}\n onDeleteRow={() => showDeleteModal(x)}\n type='isModal'\n />\n ) : (\n
showEditModal(x)}>\n \n
\n ),\n },\n );\n return columns;\n };\n\n const tableRows = useMemo(() => {\n if (businessType === 'MUSSEL') {\n let result: IMusselRow[] = [\n ...(cyclePart.seedings as IMusselSeeding[]),\n ].map(x => {\n const y = lineData.growing_cycle?.seedings.find(z => z.id === x.id);\n return { ...x, harvested: y?.harvested };\n });\n return result.filter(x => !x.harvested || x.line_length > x.harvested);\n } else if (businessType === 'OYSTER') {\n let result: IOysterRow[] = [\n ...(cyclePart.seedings as IOysterSeeding[]),\n ].map(x => {\n const y = lineData.growing_cycle?.seedings.find(z => z.id === x.id);\n return { ...x, harvested: y?.harvested };\n });\n return result.filter(x => !x.harvested || x.basket_count > x.harvested);\n } else {\n return [];\n }\n }, [cyclePart, businessType]);\n\n return (\n
\n \n {disabled && (\n
\n \n
\n )}\n \n {translate(lang, 'Seedings')}\n \n a.planned_date_seed - b.planned_date_seed,\n ) as any\n }\n />\n {visibleEdit && (\n <>\n {isGrower ? (\n setVisibleEdit(false)}\n onConfirm={() => {\n setVisibleEdit(false);\n loadLine();\n }}\n lineData={lineData}\n seedData={selectedItem}\n />\n ) : (\n setVisibleEdit(false)}\n data={selectedItem}\n updateID={selectedItem.id}\n onConfirm={() => {\n setVisibleEdit(false);\n loadLine();\n }}\n parentID={!selectedItem.id ? undefined : selectedItem.id}\n />\n )}\n \n )}\n setInfoShow(false)}\n type=''\n title={translate(lang, 'Comment')}\n text={infoText}\n />\n {visibleGallery && (\n setVisibleGallery(false)}\n onCancel={() => setVisibleGallery(false)}\n width={1000}\n >\n \n \n )}\n setVisibleDelete(false)}\n onConfirm={handleConfirmDelete}\n />\n {!!selectedWeather && (\n setSelectedWeather(undefined)}\n />\n )}\n {!!journeyData && (\n setJourneyData(undefined)}\n focusLineID={lineData.id}\n />\n )}\n
\n \n );\n};\n\nexport default ExtraSeedingsTable;\n","import { Modal } from 'antd';\nimport { formatNumber, numberToMoneyStr } from '../../entities/util-functions';\nimport { CloseIcon, Subtitle } from '../shared';\nimport { IExpenseItem } from '../../entities/budget.entities';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\ninterface Props {\n items: IExpenseItem[];\n visible: boolean;\n onClose: () => void;\n className?: string;\n}\n\nconst GrowerDetailModal = ({ items, visible, onClose, className }: Props) => {\n const lang = useSelector(selectLang);\n const amountSum = items.reduce((p, c) => p + c.amount, 0);\n const qtySum = items.reduce((p, c) => p + (c.quantity ?? 0), 0);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Harvest Items')}\n \n
\n
\n
\n
{translate(lang, 'Item')}
\n
{translate(lang, 'Quantity')}
\n
{translate(lang, 'Unit Price')}
\n
{translate(lang, 'Amount')}
\n
\n
\n {items.map((x, i) => (\n
\n
{x.name}
\n
\n {x.quantity ? formatNumber(x.quantity) : '-'}\n
\n
\n {x.quantity ? formatNumber(x.amount / x.quantity) : '-'}\n
\n
{numberToMoneyStr(x.amount)}
\n
\n ))}\n
\n
\n
{translate(lang, 'Total')}
\n
{formatNumber(qtySum)}
\n
\n
{numberToMoneyStr(amountSum)}
\n
\n
\n
\n \n );\n};\n\nexport default GrowerDetailModal;\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { Modal, Radio } from 'antd';\nimport moment from 'moment';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n IMusselFarm,\n IMusselLineDetail,\n IMusselLineResource,\n} from '../../../entities/farms.entities';\nimport toggleSecondMillisecond, {\n defaultDateFormat,\n} from '../../../util/toggleSecondMillisecond';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n DollarIcon,\n Dropdown,\n Feedback,\n Input,\n Paragrapgh,\n RadioButton,\n Spinner,\n Subtitle,\n Title,\n} from '../../shared';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport SignatureCanvas from 'react-signature-canvas';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { sendSingleRequest } from '../../../apis';\nimport { isEmailFormat } from '../../../util/validation';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { loadInventories } from '../../../store/inventories/inventories.actions';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { componentTranslate, translate } from '../../../lib/lang.helper';\nimport { ICustomValue } from '../../../entities/automation.entities';\nimport { Link } from 'react-router-dom';\nimport {\n SelectHarvestFields,\n SelectInventoriesByFarmID,\n SelectIsBudgetVisible,\n SelectMusselFarmsByFarmID,\n SelectProfileByFarmID,\n SelectSettingsByFarmID,\n SelectUserMeta,\n SelectUtilsByFarmID,\n} from '../../../store/extra/extra.selector';\nimport DirectionForm from '../../farm-util/DirectionForm';\nimport { IInventorySum } from '../../../entities/inventory.entities';\nimport { inventoryLabel } from '../../../lib/farm.helpers';\nimport { roundNumber } from '../../../entities/util-functions';\n\ninterface IHarvestSpat {\n spat_storage_id: number;\n amount: number | null;\n line_length: number | null;\n}\n\ninterface IReseed {\n lines: Array<{\n line_id: number;\n line_length?: number;\n }>;\n density?: number;\n spacing?: number;\n submersion?: number;\n drop?: number;\n}\n\ninterface ReseedProps {\n farmsData: IMusselFarm[];\n farm?: IMusselFarm;\n setFarm: (f: IMusselFarm | undefined) => void;\n form: IReseed;\n setForm: (f: IReseed) => void;\n}\n\nconst ReseedForm = ({\n farmsData,\n farm,\n setFarm,\n form,\n setForm,\n}: ReseedProps) => {\n const lang = useSelector(selectLang);\n const selectLines = (v: string[]) => {\n setForm({ ...form, lines: v.map(x => ({ line_id: Number(x) })) });\n };\n const updateLine = (line_id: number, val: string) => {\n let tmp = [...form.lines];\n const i = tmp.findIndex(x => x.line_id === line_id);\n if (i >= 0) {\n tmp[i].line_length = val.length > 0 ? Number(val) : undefined;\n }\n setForm({ ...form, lines: tmp });\n };\n const updateForm = (key: keyof IReseed, value: any) => {\n value = value.length <= 0 ? undefined : Number(value);\n setForm({ ...form, [key]: value });\n };\n\n return (\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }))}\n value={farm?.id.toString() ?? ''}\n onChange={(v: string) =>\n setFarm(farmsData.find(x => x.id === Number(v)))\n }\n />\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n })) ?? []\n }\n value={form.lines.map(x => x.line_id.toString()) as any}\n onChange={(v: any) => selectLines(v)}\n />\n
\n
\n {form.lines.map(x => (\n
\n y.id === x.line_id)?.line_name\n }`}\n value={x.line_length?.toString() ?? ''}\n onChange={e => updateLine(x.line_id, e.target.value)}\n type='number'\n unit='m'\n />\n
\n ))}\n
\n
\n
\n updateForm('density', e.target.value)}\n type='number'\n unit='spat per m'\n />\n
\n
\n updateForm('spacing', e.target.value)}\n type='number'\n unit='mm'\n />\n
\n
\n
\n
\n updateForm('submersion', e.target.value)}\n type='number'\n unit='m'\n />\n
\n
\n updateForm('drop', e.target.value)}\n type='number'\n unit='m'\n />\n
\n
\n
\n );\n};\n\ninterface IFormData {\n is_final: boolean;\n amount: number | null;\n income: number | null;\n complete_date: number;\n company: string | null;\n vessel: string | null;\n harvest_number: string | null;\n bags_quantity: number;\n tag_color: string | null;\n port_of_unload: string | null;\n crop_owner: string | null;\n growing_area: string | null;\n delivered_to: string | null;\n packhouse: string | null;\n shell_length: number | null;\n shell_length_max: number | null;\n shell_condition: string | null;\n line_length: number | null;\n fill_percent?: number;\n direction: string | null;\n mussel_type: string | null;\n mussels: number | null;\n meat_yield: number | null;\n blues: number | null;\n marine_waste: string | null;\n backbone_ok: boolean;\n backbone_replace: boolean;\n lights_ids_in_place: boolean;\n flotation_on_farm: boolean;\n rope_bags_quantity: number | null;\n product_left_on_line: string | null;\n harvester_name: string | null;\n signature?: string | null;\n comment: string | null;\n images: any[];\n is_waste: boolean;\n stripped_reason: string | null;\n time_tracks?: ITimeRange[];\n cost?: number | null;\n inventories?: IInventorySum[];\n harvest_spats?: IHarvestSpat[];\n custom_values?: ICustomValue[];\n is_full: boolean;\n seed_id?: number[];\n}\n\nconst defaultForm: IFormData = {\n is_final: true,\n amount: null,\n income: null,\n complete_date: moment().toDate().getTime(),\n company: null,\n vessel: null,\n harvest_number: null,\n bags_quantity: 0,\n tag_color: null,\n port_of_unload: null,\n crop_owner: null,\n growing_area: null,\n delivered_to: null,\n packhouse: null,\n shell_length: null,\n shell_length_max: null,\n shell_condition: null,\n line_length: null,\n direction: null,\n mussel_type: null,\n mussels: null,\n meat_yield: null,\n blues: null,\n marine_waste: null,\n backbone_ok: false,\n backbone_replace: false,\n lights_ids_in_place: false,\n flotation_on_farm: false,\n rope_bags_quantity: null,\n product_left_on_line: null,\n harvester_name: null,\n signature: null,\n comment: null,\n images: [],\n is_waste: false,\n stripped_reason: null,\n time_tracks: [],\n is_full: false,\n};\n\nconst HarvestSpatsView: React.FC<{\n spats: IMusselLineResource['growing_spats'];\n data: IHarvestSpat[];\n setData: (d: IHarvestSpat[]) => void;\n}> = ({ spats, data, setData }) => {\n const lang = useSelector(selectLang);\n\n const selectHarvestSpats = (v: string[]) =>\n setData(\n v.map(\n i =>\n data.find(x => x.spat_storage_id === Number(i)) ?? {\n spat_storage_id: Number(i),\n amount: null,\n line_length: null,\n },\n ),\n );\n const updateRow = (\n id: number,\n key: 'amount' | 'line_length',\n val: string,\n ) => {\n let tmp = [...data];\n const i = tmp.findIndex(x => x.spat_storage_id === id);\n tmp[i][key] = val.length > 0 ? Number(val) : null;\n setData(tmp);\n };\n\n return (\n
\n x.spat_storage_id.toString()) as any}\n options={\n spats?.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.source,\n })) ?? []\n }\n onChange={(v: any) => selectHarvestSpats(v)}\n mode='multiple'\n className='mb-17'\n />\n {data.map((x, k) => (\n \n
\n {spats?.find(y => y.id === x.spat_storage_id)?.source ?? ''}\n
\n
\n \n updateRow(x.spat_storage_id, 'amount', e.target.value)\n }\n unit='kg'\n />\n
\n
\n \n updateRow(x.spat_storage_id, 'line_length', e.target.value)\n }\n type='number'\n unit='m'\n />\n
\n
\n ))}\n \n );\n};\n\ninterface PartialDialogProps {\n onConfirm: (d: any) => void;\n}\n\nconst ConfirmPartialDialog = ({ onConfirm }: PartialDialogProps) => {\n const lang = useSelector(selectLang);\n\n return (\n
\n
\n \n {translate(lang, 'Have you harvested the entire line?')}\n \n
\n
\n onConfirm(false)}\n >\n {translate(lang, 'Yes, the line is now empty')}\n \n onConfirm(true)}\n >\n {translate(lang, 'No, the crop is still there')}\n \n
\n
\n );\n};\n\ninterface SCDProps {\n amount: number;\n onConfirm: () => void;\n onCancel: () => void;\n}\n\nconst SubmitConfirmDialog = ({ amount, onConfirm, onCancel }: SCDProps) => {\n const lang = useSelector(selectLang);\n\n return (\n
\n
\n \n {translate(lang, '_harvest_confirm_dialog_1')}\n
\n {translate(lang, '_harvest_confirm_dialog_2')}\n
\n {translate(\n lang,\n 'Please confirm that your value %s is correct',\n amount,\n )}\n
\n
\n
\n \n {translate(lang, 'Go back and correct')}\n \n \n {translate(lang, 'Confirm the value')}\n \n
\n
\n );\n};\n\nconst reasonOptions = [\n {\n id: '0',\n value: '0',\n label: 'Select a reason',\n },\n {\n id: '1',\n value: 'High mortality',\n label: 'High mortality',\n },\n {\n id: '2',\n value: 'Low quality',\n label: 'Low quality',\n },\n {\n id: '3',\n value: 'Other',\n label: 'Other - please use comments',\n },\n];\n\ninterface WasteProps {\n formData: IFormData;\n setFormData: (d: IFormData) => void;\n disabled?: boolean;\n}\n\nconst WasteHarvest = ({ formData, setFormData, disabled }: WasteProps) => {\n const lang = useSelector(selectLang);\n\n return (\n <>\n
\n \n e &&\n !disabled &&\n setFormData({ ...formData, complete_date: e.toDate().getTime() })\n }\n disabled={disabled}\n />\n
\n
\n \n !disabled &&\n setFormData({ ...formData, stripped_reason: v === '0' ? null : v })\n }\n disabled={disabled}\n />\n
\n
\n \n !disabled && setFormData({ ...formData, comment: e.target.value })\n }\n value={formData.comment ?? ''}\n name='comment'\n disabled={disabled}\n />\n
\n
\n setFormData({ ...formData, images: v })}\n />\n
\n \n );\n};\n\ninterface IAvlInventory {\n inventory_id: number;\n available: number;\n}\n\ninterface IPickedItem {\n inventory_id: number;\n seeding_id: number;\n quantity: number | null;\n}\n\ninterface InventoriesProps {\n farmID: number;\n seedingId: number;\n availableInventories: IAvlInventory[];\n pickedItems: IPickedItem[];\n setPickedItems: (x: any) => void;\n}\n\nconst ReturnInventories = ({\n farmID,\n seedingId,\n availableInventories,\n pickedItems,\n setPickedItems,\n}: InventoriesProps) => {\n const lang = useSelector(selectLang);\n const allIVTs = SelectInventoriesByFarmID(farmID);\n\n const updateForm = (ivt_id: number, val: string) => {\n const v = val.length <= 0 ? null : Number(val);\n let f = [...pickedItems];\n const i = f.findIndex(x => x.inventory_id === ivt_id);\n if (i < 0) {\n f.push({ inventory_id: ivt_id, seeding_id: seedingId, quantity: v });\n } else {\n f[i].quantity = v;\n }\n setPickedItems(f);\n };\n\n return availableInventories.length > 0 ? (\n
\n \n {translate(\n lang,\n 'Please input quantity of inventories that you are returning',\n )}\n \n {availableInventories.map(item => (\n
\n x.id === item.inventory_id),\n )}\n placeholder={translate(lang, 'Maximum value is %s', item.available)}\n type='number'\n onChange={e => updateForm(item.inventory_id, e.target.value)}\n value={\n pickedItems\n .find(x => x.inventory_id === item.inventory_id)\n ?.quantity?.toString() ?? ''\n }\n max={item.available}\n />\n
\n ))}\n
\n ) : (\n <>\n );\n};\n\ninterface Props {\n visible: boolean;\n title?: string;\n lineData: IMusselLineResource;\n data?: any;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n overConfirm?: (data: any) => Promise;\n onlyView?: boolean;\n warningMessage?: string;\n lineChangeable?: boolean;\n updateID?: number;\n}\n\nconst MusselHarvestModal = ({\n visible,\n title,\n lineData,\n data,\n onCancel,\n onConfirm,\n overConfirm,\n onlyView,\n warningMessage,\n lineChangeable,\n updateID,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const profile = SelectProfileByFarmID(lineData.farm_id);\n const friendEmails = SelectSettingsByFarmID(lineData.farm_id)?.friendEmails;\n const farmsData = SelectMusselFarmsByFarmID(lineData.farm_id);\n const showBudget = SelectIsBudgetVisible(lineData.farm_id);\n const seedStages = SelectUserMeta(lineData.farm_id)?.seed_stages_size;\n const farmUtils = SelectUtilsByFarmID(lineData.farm_id);\n const customFields = SelectHarvestFields(lineData.farm_id);\n\n const port_of_unloads = farmUtils.filter(x => x.type === 'port_of_unload'),\n delivered_tos = farmUtils.filter(x => x.type === 'delivered_to'),\n packhouses = farmUtils.filter(x => x.type === 'packhouse'),\n musselTypes = farmUtils.filter(x => x.type === 'harvest_type');\n\n const [showPort, setShowPort] = useState(\n !port_of_unloads || port_of_unloads?.length <= 0,\n );\n const [showDel, setShowDel] = useState(\n !delivered_tos || delivered_tos?.length <= 0,\n );\n const [showPac, setShowPac] = useState(\n !packhouses || packhouses?.length <= 0,\n );\n const [currentFarm, setCurrentFarm] = useState(\n farmsData.find(x => x.id === lineData.farm_id),\n );\n const [currentLine, setCurrentLine] = useState(lineData);\n const [errorMsg, setErrorMsg] = useState();\n const [errors, setErrors] = useState();\n\n const { currentSeed, ivtFloats, growingLength, lastAssessment, lastHarvest } =\n useMemo(\n () => ({\n currentSeed: currentLine.growing_cycle?.main_seed,\n ivtFloats: currentLine.growing_cycle?.inventories_sum,\n growingLength: currentLine.growing_cycle?.current_line_length ?? 0,\n lastAssessment: currentLine.growing_cycle?.last_assessment,\n lastHarvest: currentLine.growing_cycle?.last_harvest,\n }),\n [currentLine],\n );\n\n const handleLineChange = (v: string) => {\n if (!currentFarm) return;\n const line = currentFarm.lines.find(x => x.id === Number(v));\n if (!line?.growing_cycle) return;\n setCurrentLine(line);\n setFormData(prv => ({\n ...prv,\n inventories: line.growing_cycle?.inventories_sum,\n is_final: line.growing_cycle?.last_harvest\n ? line.growing_cycle.last_harvest.is_final\n : prv.is_final,\n }));\n };\n\n const [disabled, setDisabled] = useState(false);\n const [isPartial, setIsPartial] = useState(null);\n const [visibleConfirm, setVisibleConfirm] = useState(false);\n const [formData, setFormData] = useState({\n ...defaultForm,\n harvester_name: profile?.name ?? null,\n growing_area: `${currentLine.farm_name} - ${currentLine.line_name}`,\n vessel: profile?.current_boat\n ? `${profile.current_boat.name} (${profile.current_boat.reg_number})`\n : null,\n inventories: lineData.growing_cycle?.inventories_sum,\n crop_owner:\n currentFarm && currentFarm.owners && currentFarm.owners.length > 0\n ? currentFarm.owners[0].title\n : null,\n company: profile?.company_name ?? null,\n port_of_unload:\n port_of_unloads && port_of_unloads.length > 0\n ? port_of_unloads[0].name\n : defaultForm.port_of_unload,\n delivered_to:\n delivered_tos && delivered_tos.length > 0\n ? delivered_tos[0].name\n : defaultForm.delivered_to,\n packhouse:\n packhouses && packhouses.length > 0\n ? packhouses[0].name\n : defaultForm.packhouse,\n is_final: lineData.growing_cycle?.last_harvest\n ? !!lineData.growing_cycle.last_harvest.is_final\n : defaultForm.is_final,\n seed_id: data?.seed_id ?? null,\n fill_percent: lineData.fill_percent ?? undefined,\n });\n const [reqPdf, setReqPdf] = useState(false);\n const signatureCanvas = useRef();\n const [sigCanLoaded, setSigCanLoaded] = useState(false);\n const [emails, setEmails] = useState(friendEmails?.join(',') ?? '');\n const [advancedLine, setAdvancedLine] = useState();\n const [harvestSpats, setHarvestSpats] = useState([]);\n const [trackMode, setTrackMode] = useState(false);\n const [customValues, setCustomValues] = useState(\n customFields.map(x => {\n const d =\n data && data.custom_values\n ? data.custom_values.find((y: ICustomValue) => y.field_id === x.id)\n : null;\n return {\n input_type: x.input_type,\n field_label: x.name,\n options: x.options\n ?.split(',')\n .map(t => ({ id: t, label: t, value: t })),\n field_id: x.id,\n field_val: d?.field_val ?? '',\n data_type: x.data_type,\n unit: x.unit,\n };\n }),\n );\n const [reseedFarm, setReseedFarm] = useState(currentFarm);\n const [reseedForm, setReseedForm] = useState();\n const [loading, setLoading] = useState(false);\n\n const updateHarvestSpats = (d: IHarvestSpat[]) => {\n setHarvestSpats(d);\n const as = d.reduce((p, c) => p + (c.amount ?? 0), 0);\n updateForm('amount', as);\n const ls = d.reduce((p, c) => p + (c.line_length ?? 0), 0);\n updateForm('line_length', ls);\n };\n const toggleTrackMode = async (c: boolean) => {\n if (c && (!advancedLine || advancedLine.id !== currentLine.id)) {\n setLoading(true);\n const response = await sendSingleRequest(\n { with_harvest_spats: true, track_harvest_id: updateID },\n 'GET',\n `api/farm/line/lines/${currentLine.id}`,\n true,\n );\n setLoading(false);\n if (response.status) {\n setAdvancedLine(response.data);\n }\n }\n setTrackMode(c);\n };\n const updateForm = (key: keyof IFormData, value: any) => {\n if (\n [\n 'amount',\n 'income',\n 'bags_quantity',\n 'shell_length',\n 'shell_length_max',\n 'mussels',\n 'meat_yield',\n 'blues',\n 'rope_bags_quantity',\n ].includes(key)\n ) {\n value = value.length <= 0 ? null : Number(value);\n if (key === 'amount') {\n const bags = Math.floor((999 + value) / 1000);\n setFormData(prv => ({ ...prv, amount: value, bags_quantity: bags }));\n } else {\n setFormData(prv => ({ ...prv, [key]: value }));\n }\n } else if (key === 'is_final' && !value) {\n setFormData(prv => ({\n ...prv,\n is_final: false,\n is_waste: false,\n stripped_reason: null,\n }));\n } else if (key === 'is_waste') {\n setFormData(prv => ({\n ...prv,\n is_waste: !!value,\n stripped_reason: null,\n }));\n } else if (key === 'line_length') {\n value = value.length <= 0 ? null : Number(value);\n setFormData(prv => ({ ...prv, line_length: value }));\n } else if (key === 'fill_percent') {\n value = value.length <= 0 ? null : Number(value);\n setFormData(prv => ({ ...prv, fill_percent: value }));\n } else {\n if (typeof value === 'string' && value.length <= 0) {\n value = null;\n }\n setFormData(prv => ({ ...prv, [key]: value }));\n }\n setErrors((prv: any) => ({ ...(prv ?? {}), [key]: null }));\n };\n const validForm = () => {\n if (!updateID && !currentLine.growing_cycle) {\n setErrorMsg('_line_empty');\n return null;\n }\n if (!!formData.is_waste && formData.stripped_reason === null) {\n setErrorMsg('Please select a stripped reason');\n setErrors((prv: any) => ({\n ...(prv ?? {}),\n stripped_reason: translate(lang, 'Please select a stripped reason'),\n }));\n return null;\n }\n if (!updateID && !currentSeed) {\n setErrorMsg('_line_empty');\n return null;\n }\n const line = farmsData\n .find(x => x.id === currentFarm?.id)\n ?.lines.find(y => y.id === currentLine.id);\n if (\n updateID &&\n !data.is_full !== isPartial &&\n line?.last_harvest?.id !== updateID\n ) {\n setErrorMsg('_impossible_harvest_update');\n return null;\n }\n if (\n !updateID &&\n isPartial === true &&\n formData.line_length &&\n growingLength < formData.line_length\n ) {\n const es = !formData.line_length\n ? translate(lang, 'Please input Harvested length')\n : translate(\n lang,\n 'Maximum available harvest length is %s',\n growingLength,\n );\n setErrorMsg(es);\n setErrors((prv: any) => ({ ...(prv ?? {}), line_length: es }));\n return null;\n }\n if (\n !updateID &&\n isPartial === false &&\n formData.line_length &&\n formData.line_length !== growingLength &&\n !window.confirm(\n `${growingLength}m are left but you are going to harvest ${formData.line_length}m as a full harvest. Are you sure?`,\n )\n ) {\n return null;\n }\n if (\n !formData.is_waste &&\n (formData.amount === null || formData.amount <= 0)\n ) {\n const es =\n formData.amount === null\n ? translate(lang, 'Please enter harvested amount')\n : translate(lang, '_invalid_harvest_amount_length');\n setErrorMsg(es);\n setErrors((prv: any) => ({ ...(prv ?? {}), amount: es }));\n return null;\n }\n if (\n formData.shell_length_max !== null &&\n (formData.shell_length === null ||\n formData.shell_length > formData.shell_length_max)\n ) {\n const es = translate(lang, 'Invalid shell length range');\n setErrorMsg(es);\n setErrors((prv: any) => ({ ...(prv ?? {}), shell_length: es }));\n return null;\n }\n if (emails && emails.split(',').some(x => !isEmailFormat(x))) {\n setErrorMsg('_invalid_emails');\n return null;\n }\n if (reseedForm) {\n if (!formData.shell_length) {\n setErrorMsg('Please input shell length');\n return null;\n }\n if (!reseedFarm) {\n setErrorMsg('Please select immediate seed farm');\n return null;\n }\n if (reseedForm.lines.some(x => !x.line_length)) {\n setErrorMsg('Please input line length for all immediate seed lines');\n return null;\n }\n }\n let res = {\n ...formData,\n seeding_id: data?.seeding_id ?? currentSeed?.id,\n season_name: data?.season_name ?? currentSeed?.season_name,\n line_id: currentLine.id,\n complete_date: toggleSecondMillisecond(formData.complete_date),\n is_full: !isPartial,\n reseed: reseedForm,\n require_pdf: reqPdf,\n request_emails: emails.split(','),\n };\n if (trackMode && harvestSpats.length > 0) {\n if (harvestSpats.some(x => !x.amount || !x.line_length)) {\n setErrorMsg('Harvested Original spats are not valid');\n setErrors((prv: any) => ({\n ...(prv ?? {}),\n amount: translate(lang, '_invalid_harvest_amount_length'),\n }));\n return null;\n }\n res.harvest_spats = harvestSpats;\n }\n if (!res.income) res.income = 0;\n if (!updateID && signatureCanvas.current?.toDataURL()) {\n res.signature = signatureCanvas.current?.toDataURL() ?? null;\n } else {\n delete res.signature;\n }\n if (res.inventories) {\n let tmp: any = [];\n for (let x of res.inventories) {\n if (!x.quantity || x.quantity < 0) continue;\n const t = availableInventories.find(\n y => x.inventory_id === y.inventory_id,\n );\n if (!t) {\n setErrorMsg('_unknown_error');\n return null;\n }\n if (x.quantity > t.available) {\n setErrorMsg('_float_no_enough');\n return null;\n }\n tmp.push(x);\n }\n res.inventories = tmp;\n }\n if (res.time_tracks && res.time_tracks.length > 0) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (!tt) {\n setErrorMsg('_invalid_time_range');\n return null;\n }\n res.time_tracks = tt;\n }\n if (res.is_waste) {\n res.amount = res.income = 0;\n }\n const cvs = customValues\n .filter(x => !!x.field_val)\n .map(({ field_id, field_val }) => ({ field_id, field_val }));\n if (cvs.length > 0) {\n res.custom_values = cvs;\n } else {\n res.custom_values = undefined;\n }\n setErrors(undefined);\n return res;\n };\n const handleConfirmClick = async () => {\n const form = validForm();\n if (!form) return;\n\n setDisabled(true);\n if (overConfirm) {\n const res = await overConfirm(form);\n if (!res.status) {\n setErrorMsg(res.data?.message ?? 'Request failed');\n if (res.data.errors) setErrors(res.data.errors);\n setDisabled(false);\n }\n return;\n }\n const res = !updateID\n ? await sendSingleRequest(\n form,\n 'POST',\n 'api/farm/line/harvest-complete',\n true,\n )\n : await sendSingleRequest(\n form,\n 'POST',\n `api/farm/line/harvest-update/${updateID}`,\n true,\n );\n if (res.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n dispatch(loadFarmsData());\n if (form.inventories) {\n dispatch(loadInventories());\n }\n onConfirm(res.data);\n } else {\n setErrorMsg(res.data?.message ?? 'Request failed');\n if (res.data.errors) setErrors(res.data.errors);\n setDisabled(false);\n }\n };\n const updateCustomValue = (fieldID: number, val: string) => {\n let tmp = [...customValues];\n const i = tmp.findIndex(x => x.field_id === fieldID);\n if (i >= 0) {\n tmp[i].field_val = val;\n }\n setCustomValues(tmp);\n };\n\n const farmOptions = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }));\n const lineOptions = currentFarm?.lines\n .filter(x => !!x.growing_cycle)\n .map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n }));\n\n const { plannedDaysDiff, currentDaysDiff } = useMemo(() => {\n if (!currentSeed) {\n return { plannedDaysDiff: 0, currentDaysDiff: 0 };\n }\n const t = moment().format('YYYY-MM-DD');\n const s = moment(currentSeed.planned_date_seed * 1000).format('YYYY-MM-DD');\n\n let h: any = null;\n if (!seedStages || formData.shell_length === null) {\n h = moment(\n (lastAssessment?.planned_date_harvest ??\n currentSeed.planned_date_harvest) * 1000,\n ).format('YYYY-MM-DD');\n } else {\n let i = 0;\n for (\n i = 0;\n i < seedStages.length &&\n seedStages[i].size <= Number(formData.shell_length);\n i++\n );\n if (i > 0) {\n h = moment(s).add(seedStages[i - 1].time, 'months');\n } else {\n h = moment(\n (lastAssessment?.planned_date_harvest ??\n currentSeed.planned_date_harvest) * 1000,\n ).format('YYYY-MM-DD');\n }\n }\n return {\n plannedDaysDiff: moment(t).diff(moment(h), 'd'),\n currentDaysDiff: moment(t).diff(moment(s), 'd'),\n };\n }, [currentSeed, seedStages, formData.shell_length]);\n\n useEffect(() => {\n if (data) {\n let tmp = { ...data };\n if (showBudget && data.expense_items && data.expense_items.length > 0) {\n tmp.cost = data.expense_items.reduce(\n (p: number, c: any) => p + c.amount,\n 0,\n );\n }\n if (tmp.complete_date)\n tmp.complete_date = toggleSecondMillisecond(tmp.complete_date);\n if (tmp.images) {\n tmp.images = tmp.images.map((x: any) =>\n typeof x === 'object' && x !== null ? x : parseImageUrlToFileItem(x),\n );\n }\n if (tmp.is_full !== undefined && tmp.is_full !== null) {\n setIsPartial(!tmp.is_full);\n }\n if (data.time_tracks) {\n tmp.time_tracks = data.time_tracks.map((x: any) => ({\n start_time: toggleSecondMillisecond(x.start_time),\n finish_time: toggleSecondMillisecond(x.finish_time),\n }));\n }\n setFormData(prv => ({ ...prv, ...tmp }));\n\n if (data.harvest_spats && data.harvest_spats.length > 0) {\n setHarvestSpats(\n data.harvest_spats.map((x: any) => ({\n ...x,\n spat_storage_id: x.spat_storage_id ?? x.spat_storage.id,\n })),\n );\n toggleTrackMode(true);\n }\n if (data.reseed && data.reseed.lines) {\n const tmpFarm = farmsData.find(x =>\n x.lines.some(y => y.id === data.reseed.lines[0].line_id),\n );\n setReseedFarm(tmpFarm);\n setReseedForm(data.reseed);\n }\n }\n }, [data, showBudget]);\n\n useEffect(() => {\n if (sigCanLoaded && data && data.signature) {\n signatureCanvas.current?.fromDataURL(data.signature);\n }\n }, [data, sigCanLoaded, signatureCanvas.current]);\n\n useEffect(() => {\n setFormData(prv => ({\n ...prv,\n line_length: prv.line_length ? prv.line_length : growingLength,\n }));\n }, [growingLength]);\n\n const availableInventories = useMemo(() => {\n let res: IAvlInventory[] = [];\n if (ivtFloats) {\n for (let x of ivtFloats) {\n res.push({\n inventory_id: x.inventory_id,\n available: x.quantity,\n });\n }\n }\n if (data?.inventories) {\n for (let x of data.inventories) {\n if (res.some(t => t.inventory_id === x.inventory_id)) continue;\n res.push({\n inventory_id: x.inventory_id,\n available: 0,\n });\n }\n }\n return res;\n }, [data?.inventories, ivtFloats]);\n\n const seedOptions = useMemo(\n () =>\n !updateID\n ? currentLine.growing_cycle?.seedings.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${defaultDateFormat(x.planned_date_seed)} - ${translate(\n lang,\n 'Batch',\n )} ${x.spat_source}`,\n }))\n : undefined,\n [updateID, currentLine],\n );\n\n return (\n }\n width={650}\n >\n
\n {loading && (\n
\n \n
\n )}\n
\n \n {translate(lang, title ?? 'Mussel Harvest Form')}\n \n
\n
\n {lineChangeable && (\n
\n
\n \n setCurrentFarm(farmsData.find(x => x.id === Number(v)))\n }\n />\n
\n
\n Number(x.id) === currentLine.id)\n ? currentLine.id.toString()\n : currentLine.line_name\n }\n onChange={handleLineChange}\n />\n
\n
\n )}\n {!!warningMessage && (\n
{warningMessage}
\n )}\n {!!errorMsg && (\n setErrorMsg(undefined)}\n />\n )}\n {isPartial === null ? (\n setIsPartial(x)} />\n ) : visibleConfirm ? (\n setVisibleConfirm(false)}\n />\n ) : (\n
\n {!!currentSeed && (\n <>\n \n {componentTranslate(\n lang,\n '_harvest_intro',\n \n {defaultDateFormat(currentSeed.planned_date_seed)}\n ,\n \n {defaultDateFormat(\n lastAssessment?.planned_date_harvest ??\n currentSeed.planned_date_harvest,\n )}\n ,\n )}\n
\n \n {translate(\n lang,\n 'Your harvest is %s days %s schedule.',\n Math.abs(plannedDaysDiff),\n plannedDaysDiff <= 0 ? ' ahead' : ' behind',\n )}\n {plannedDaysDiff <= 0 && ' Well done!'}\n
\n {translate(\n lang,\n 'Your crop grew for %s days.',\n currentDaysDiff,\n )}\n
\n \n \n setFormData(prv => ({ ...prv, inventories: d }))\n }\n />\n \n )}\n
\n \n {translate(lang, 'Have you harvested the entire line?')}\n \n setIsPartial(e.target.value === 'P')}\n value={isPartial ? 'P' : 'F'}\n disabled={onlyView}\n >\n \n \n \n
\n
\n {!!lastHarvest && lastHarvest.is_final == formData.is_final && (\n
\n \n {translate(\n lang,\n lastHarvest.is_final\n ? `This is final harvest continuation`\n : `This is intermediate harvest continuation`,\n )}\n \n
\n )}\n
\n \n updateForm('is_final', e.target.value === 'FINAL')\n }\n value={!formData.is_final ? 'MIDDLE' : 'FINAL'}\n disabled={onlyView}\n >\n \n \n \n
\n {!updateID && !formData.is_final && (\n
\n
\n \n setReseedForm(\n e.target.checked ? { lines: [] } : undefined,\n )\n }\n checked={!!reseedForm}\n disabled={onlyView || disabled}\n />\n
\n {reseedForm && (\n \n )}\n
\n )}\n
\n {isPartial === false && !!formData.is_final && (\n
\n updateForm('is_waste', e.target.checked)}\n checked={formData.is_waste}\n disabled={onlyView || !!updateID}\n />\n
\n )}\n {formData.is_waste ? (\n \n ) : (\n <>\n
\n
\n {!!profile?.account?.track_original_spat && (\n toggleTrackMode(e.target.checked)}\n checked={trackMode}\n />\n )}\n {!!trackMode && (\n \n )}\n updateForm('amount', e.target.value)}\n value={formData.amount?.toString() ?? ''}\n label={translate(lang, 'Harvest amount')}\n unit='kg'\n disabled={onlyView}\n />\n {!!errors?.amount && (\n
{errors?.amount}
\n )}\n
\n
\n {!!showBudget && (\n
\n updateForm('income', e.target.value)}\n value={formData.income?.toString() ?? ''}\n unit={}\n label={translate(lang, 'Harvest income')}\n disabled={onlyView}\n />\n
\n )}\n \n \n e && updateForm('complete_date', e.toDate().getTime())\n }\n disabled={onlyView}\n />\n {!!errors?.complete_date && (\n
\n {errors?.complete_date}\n
\n )}\n
\n {formData.is_final ? (\n <>\n
\n updateForm('company', e.target.value)}\n value={formData.company ?? ''}\n label={translate(lang, 'Company')}\n disabled={onlyView}\n />\n
\n
\n updateForm('vessel', e.target.value)}\n value={formData.vessel ?? ''}\n label={translate(lang, 'Vessel')}\n disabled={onlyView}\n />\n
\n
\n \n updateForm('harvest_number', e.target.value)\n }\n value={formData.harvest_number ?? ''}\n label={`${translate(lang, 'Harvest number')}${\n currentLine.last_harvest?.harvest_number\n ? ` (${translate(\n lang,\n 'last value is %s',\n currentLine.last_harvest.harvest_number,\n )})`\n : ''\n }`}\n disabled={onlyView}\n />\n
\n \n ) : (\n <>\n
\n
\n \n updateForm('shell_length', e.target.value)\n }\n value={formData.shell_length?.toString() ?? ''}\n disabled={onlyView}\n />\n
\n
\n \n updateForm('shell_length_max', e.target.value)\n }\n value={formData.shell_length_max?.toString() ?? ''}\n disabled={onlyView}\n />\n
\n
\n
\n \n updateForm('shell_condition', e.target.value)\n }\n value={formData.shell_condition ?? ''}\n disabled={onlyView}\n />\n
\n \n )}\n \n updateForm('line_length', e.target.value)}\n value={formData.line_length?.toString() ?? ''}\n disabled={onlyView}\n />\n {!!errors?.line_length && (\n
\n {errors?.line_length}\n
\n )}\n
\n
\n updateForm('fill_percent', e.target.value)}\n disabled={onlyView}\n />\n
\n {!!seedOptions && seedOptions.length > 0 && !!isPartial && (\n
\n \n updateForm('seed_id', v ? v.map(Number) : [])\n }\n />\n
\n )}\n
\n updateForm('direction', v)}\n />\n
\n
\n \n updateForm('bags_quantity', e.target.value)\n }\n value={formData.bags_quantity?.toString() ?? ''}\n disabled={onlyView}\n />\n
\n
\n updateForm('tag_color', e.target.value)}\n value={formData.tag_color ?? ''}\n disabled={onlyView}\n />\n
\n
\n ({\n id: x.id.toString(),\n value: x.name,\n label: x.name,\n })) ?? []),\n { id: '', value: '', label: translate(lang, 'Other') },\n ]}\n value={\n showPort ? '' : formData.port_of_unload ?? undefined\n }\n onChange={v => {\n updateForm('port_of_unload', v);\n setShowPort(v.length <= 0);\n }}\n />\n {showPort && (\n \n updateForm('port_of_unload', e.target.value)\n }\n value={formData.port_of_unload ?? ''}\n disabled={onlyView}\n />\n )}\n
\n
\n updateForm('crop_owner', e.target.value)}\n value={formData.crop_owner ?? ''}\n disabled={onlyView}\n />\n
\n
\n updateForm('growing_area', e.target.value)}\n value={formData.growing_area ?? ''}\n disabled={onlyView}\n />\n
\n
\n ({\n id: x.id.toString(),\n value: x.name,\n label: x.name,\n })) ?? []),\n { id: '', value: '', label: translate(lang, 'Other') },\n ]}\n value={showDel ? '' : formData.delivered_to ?? undefined}\n onChange={v => {\n updateForm('delivered_to', v);\n setShowDel(v.length <= 0);\n }}\n />\n {showDel && (\n \n updateForm('delivered_to', e.target.value)\n }\n value={formData.delivered_to ?? ''}\n disabled={onlyView}\n />\n )}\n
\n
\n ({\n id: x.id.toString(),\n value: x.name,\n label: x.name,\n })) ?? []),\n { id: '', value: '', label: translate(lang, 'Other') },\n ]}\n value={showPac ? '' : formData.packhouse ?? undefined}\n onChange={v => {\n updateForm('packhouse', v);\n setShowPac(v.length <= 0);\n }}\n />\n {showPac && (\n updateForm('packhouse', e.target.value)}\n value={formData.packhouse ?? ''}\n disabled={onlyView}\n />\n )}\n
\n {!!formData.time_tracks && (\n
\n updateForm('time_tracks', t)}\n disabled={onlyView}\n />\n
\n )}\n {!!formData.is_final && (\n <>\n
\n
\n \n updateForm('shell_length', e.target.value)\n }\n value={formData.shell_length?.toString() ?? ''}\n disabled={onlyView}\n />\n
\n
\n \n updateForm('shell_length_max', e.target.value)\n }\n value={formData.shell_length_max?.toString() ?? ''}\n disabled={onlyView}\n />\n
\n
\n
\n \n updateForm('shell_condition', e.target.value)\n }\n value={formData.shell_condition ?? ''}\n disabled={onlyView}\n />\n
\n \n )}\n
\n ({\n id: x.name,\n label: x.name,\n value: x.name,\n })) ?? []\n }\n value={formData.mussel_type ?? undefined}\n onChange={v => updateForm('mussel_type', v)}\n disabled={onlyView}\n />\n
\n
\n updateForm('mussels', e.target.value)}\n value={formData.mussels?.toString() ?? ''}\n unit='mussels per kg'\n disabled={onlyView}\n />\n
\n
\n updateForm('meat_yield', e.target.value)}\n value={formData.meat_yield?.toString() ?? ''}\n disabled={onlyView}\n unit='%'\n />\n
\n
\n updateForm('blues', e.target.value)}\n value={formData.blues?.toString() ?? ''}\n unit='%'\n disabled={onlyView}\n />\n
\n
\n updateForm('marine_waste', e.target.value)}\n value={formData.marine_waste ?? ''}\n disabled={onlyView}\n unit='kg'\n />\n
\n
\n \n updateForm('backbone_ok', e.target.checked)\n }\n checked={formData.backbone_ok}\n disabled={onlyView}\n />\n
\n
\n \n updateForm('backbone_replace', e.target.checked)\n }\n checked={formData.backbone_replace}\n disabled={onlyView}\n />\n
\n
\n \n updateForm('lights_ids_in_place', e.target.checked)\n }\n checked={formData.lights_ids_in_place}\n disabled={onlyView}\n />\n
\n
\n \n updateForm('flotation_on_farm', e.target.checked)\n }\n checked={formData.flotation_on_farm}\n disabled={onlyView}\n />\n
\n
\n \n updateForm('rope_bags_quantity', e.target.value)\n }\n value={formData.rope_bags_quantity?.toString() ?? ''}\n disabled={onlyView}\n />\n
\n {!!isPartial && (\n
\n \n updateForm('product_left_on_line', e.target.value)\n }\n value={formData.product_left_on_line ?? ''}\n disabled={onlyView}\n />\n
\n )}\n
\n \n updateForm('harvester_name', e.target.value)\n }\n value={formData.harvester_name ?? ''}\n disabled={onlyView}\n />\n
\n {!!showBudget && (\n
\n updateForm('cost', e.target.value)}\n value={formData.cost?.toString() ?? ''}\n unit='$'\n disabled={onlyView}\n />\n
\n )}\n {customValues.map(x => (\n
\n {x.input_type === 'select' ? (\n <>\n updateCustomValue(x.field_id, v)}\n disabled={onlyView}\n />\n {(!x.options || x.options.length <= 0) && (\n \n \n Set up field\n \n \n )}\n \n ) : (\n \n updateCustomValue(x.field_id, e.target.value)\n }\n unit={x.unit}\n disabled={onlyView}\n />\n )}\n
\n ))}\n
\n updateForm('comment', e.target.value)}\n value={formData.comment ?? ''}\n disabled={onlyView}\n />\n
\n
\n updateForm('images', v)}\n disabled={onlyView}\n />\n
\n
\n

\n {translate(lang, 'Signature')}\n

\n \n {\n signatureCanvas.current = r;\n setSigCanLoaded(true);\n }}\n penColor='green'\n canvasProps={{ width: 550, height: 200 }}\n />\n
\n
\n {!updateID && (\n
\n setReqPdf(e.target.checked)}\n disabled={onlyView}\n />\n {reqPdf && (\n
\n setEmails(e.target.value)}\n disabled={onlyView}\n />\n
\n )}\n
\n )}\n \n )}\n \n )}\n \n \n {isPartial !== null && !visibleConfirm && (\n
\n \n {translate(lang, 'Confirm')}\n \n
\n )}\n \n );\n};\n\nexport default MusselHarvestModal;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { Modal, Radio } from 'antd';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n DollarIcon,\n Dropdown,\n Feedback,\n Input,\n Paragrapgh,\n RadioButton,\n Subtitle,\n Title,\n} from '../../shared';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n defaultDateFormat,\n toMillisecond,\n toSecond,\n} from '../../../util/toggleSecondMillisecond';\nimport moment from 'moment';\nimport SignatureCanvas from 'react-signature-canvas';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { isEmailFormat } from '../../../util/validation';\nimport { sendSingleRequest } from '../../../apis';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport {\n IOysterFarm,\n IOysterLineResource,\n} from '../../../entities/farms.entities';\nimport { loadInventories } from '../../../store/inventories/inventories.actions';\nimport {\n dozensToPieces,\n piecesToDozens,\n toStrSlug,\n} from '../../../lib/common.helpers';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { componentTranslate, translate } from '../../../lib/lang.helper';\nimport { ICustomValue } from '../../../entities/automation.entities';\nimport { Link } from 'react-router-dom';\nimport {\n SelectAccountSetting,\n SelectHarvestFields,\n SelectInventoriesByFarmID,\n SelectIsBudgetVisible,\n SelectOysterFarmsByFarmID,\n SelectProfileByFarmID,\n SelectSettingsByFarmID,\n SelectSizedOystersByFarmID,\n SelectUtilsByFarmID,\n} from '../../../store/extra/extra.selector';\nimport {\n calcOysterLineSize,\n calcOysterPercent,\n getLineOysters,\n inventoryLabel,\n} from '../../../lib/farm.helpers';\nimport DirectionForm from '../../farm-util/DirectionForm';\n\ninterface IReseed {\n lines: Array<{\n line_id: number;\n basket_count?: number;\n density?: number;\n }>;\n spacing?: number;\n}\n\ninterface ReseedProps {\n farmsData: IOysterFarm[];\n farm?: IOysterFarm;\n setFarm: (f: IOysterFarm | undefined) => void;\n form: IReseed;\n setForm: (f: IReseed) => void;\n}\n\nconst ReseedForm = ({\n farmsData,\n farm,\n setFarm,\n form,\n setForm,\n}: ReseedProps) => {\n const lang = useSelector(selectLang);\n const selectLines = (v: string[]) => {\n setForm({ ...form, lines: v.map(x => ({ line_id: Number(x) })) });\n };\n const updateLine = (\n line_id: number,\n key: 'basket_count' | 'density',\n val: string,\n ) => {\n let tmp = [...form.lines];\n const i = tmp.findIndex(x => x.line_id === line_id);\n if (i >= 0) {\n tmp[i][key] = val.length > 0 ? Number(val) : undefined;\n }\n setForm({ ...form, lines: tmp });\n };\n\n return (\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }))}\n value={farm?.id.toString() ?? ''}\n onChange={(v: string) =>\n setFarm(farmsData.find(x => x.id === Number(v)))\n }\n />\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n })) ?? []\n }\n value={form.lines.map(x => x.line_id.toString()) as any}\n onChange={(v: any) => selectLines(v)}\n />\n
\n {form.lines.map(x => {\n const ln = farm?.lines.find(y => y.id === x.line_id);\n return ln ? (\n
\n
\n \n updateLine(x.line_id, 'basket_count', e.target.value)\n }\n type='number'\n />\n
\n
\n updateLine(x.line_id, 'density', e.target.value)}\n type='number'\n />\n
\n
\n ) : (\n <>\n );\n })}\n
\n );\n};\n\ninterface IFormData {\n is_final: boolean;\n is_full: boolean;\n season_name: string;\n amount_pcs: number | null;\n amount_dz: number | null;\n income: number | null;\n complete_date: number;\n harvest_number?: string | null;\n line_length: number | null;\n direction: string | null;\n shell_length: number | null;\n shell_length_max: number | null;\n comment?: string;\n images: any[];\n cost?: number;\n signature?: string;\n time_tracks?: ITimeRange[];\n inventories?: IPickedInventory[];\n return_amount_dz: number | null;\n return_amount_pcs: number | null;\n seed_id?: number[];\n mortality?: number;\n [key: string]: any;\n}\n\nconst defaultForm: IFormData = {\n is_final: true,\n is_full: true,\n complete_date: moment().toDate().getTime(),\n line_length: null,\n direction: null,\n season_name: '',\n amount_dz: null,\n amount_pcs: null,\n income: null,\n shell_length: null,\n shell_length_max: null,\n images: [],\n time_tracks: [],\n return_amount_dz: null,\n return_amount_pcs: null,\n is_combined: false,\n measurement_units: 'dz',\n};\n\ninterface IAvlInventory {\n inventory_id: number;\n available: number;\n}\n\ninterface IPickedInventory {\n inventory_id: number;\n seeding_id: number;\n quantity: number | null;\n}\n\ninterface InventoriesProps {\n farmID: number;\n seedingId: number;\n availableInventories: IAvlInventory[];\n pickedItems: IPickedInventory[];\n setPickedItems: (x: any) => void;\n}\n\nconst ReturnInventories = ({\n farmID,\n seedingId,\n availableInventories,\n pickedItems,\n setPickedItems,\n}: InventoriesProps) => {\n const lang = useSelector(selectLang);\n const allIVTs = SelectInventoriesByFarmID(farmID);\n\n const updateForm = (ivt_id: number, val: string) => {\n const v = val.length <= 0 ? null : Number(val);\n let f = [...pickedItems];\n const i = f.findIndex(x => x.inventory_id === ivt_id);\n if (i < 0) {\n f.push({ inventory_id: ivt_id, seeding_id: seedingId, quantity: v });\n } else {\n f[i].quantity = v;\n }\n setPickedItems(f);\n };\n const label = (i: number) => {\n const t = allIVTs.find(x => x.id === i);\n return translate(\n lang,\n 'How many %s are you returning?',\n t ? inventoryLabel(t) : '-',\n );\n };\n\n return availableInventories.length > 0 ? (\n
\n {availableInventories.map(item => (\n
\n updateForm(item.inventory_id, e.target.value)}\n value={\n pickedItems\n .find(x => x.inventory_id === item.inventory_id)\n ?.quantity?.toString() ?? ''\n }\n max={item.available}\n />\n
\n ))}\n
\n ) : (\n <>\n );\n};\n\ninterface Props {\n visible: boolean;\n title?: string;\n lineData: IOysterLineResource;\n data?: any;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n overConfirm?: (data: any) => Promise;\n updateID?: number;\n onlyView?: boolean;\n}\n\nconst OysterHarvestModal = ({\n visible,\n title,\n lineData,\n data,\n onCancel,\n onConfirm,\n overConfirm,\n updateID,\n onlyView,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const profile = SelectProfileByFarmID(lineData.farm_id);\n const onGrowWaste = SelectAccountSetting(lineData.farm_id)?.oyster_crops;\n const farmsData = SelectOysterFarmsByFarmID(lineData.farm_id);\n const showBudget = SelectIsBudgetVisible(lineData.farm_id);\n const friendEmails = SelectSettingsByFarmID(lineData.farm_id)?.friendEmails;\n const farmUtils = SelectUtilsByFarmID(lineData.farm_id);\n const customFields = SelectHarvestFields(lineData.farm_id);\n const sizedOysters = SelectSizedOystersByFarmID(lineData.farm_id);\n\n const [spats, setSpats] = useState([]);\n const [loadingSpats, setLoadingSpats] = useState(false);\n\n const metaFields = sizedOysters.map(x => ({\n key: toStrSlug(x.name),\n label: x.name,\n json: x.json,\n num_val: x.num_val,\n }));\n const port_of_unloads = farmUtils.filter(x => x.type === 'port_of_unload'),\n delivered_tos = farmUtils.filter(x => x.type === 'delivered_to'),\n packhouses = farmUtils.filter(x => x.type === 'packhouse');\n const currentFarm = SelectOysterFarmsByFarmID(lineData.farm_id).find(\n x => x.id === lineData.farm_id,\n );\n const metaDefaults = metaFields.reduce((p, c) => {\n p[c.key] = 0;\n return p;\n }, {} as any);\n\n const signatureCanvas = useRef();\n\n const [errorMsg, setErrorMsg] = useState();\n const [errors, setErrors] = useState();\n const [formData, setFormData] = useState({\n ...defaultForm,\n ...metaDefaults,\n is_final: lineData.growing_cycle?.last_harvest\n ? !!lineData.growing_cycle.last_harvest.is_final\n : defaultForm.is_final,\n inventories: lineData.growing_cycle?.inventories_sum,\n port_of_unload:\n port_of_unloads && port_of_unloads.length > 0\n ? port_of_unloads[0].name\n : defaultForm.port_of_unload,\n delivered_to:\n delivered_tos && delivered_tos.length > 0\n ? delivered_tos[0].name\n : defaultForm.delivered_to,\n packhouse:\n packhouses && packhouses.length > 0\n ? packhouses[0].name\n : defaultForm.packhouse,\n crop_owner:\n currentFarm && currentFarm.owners && currentFarm.owners.length > 0\n ? currentFarm.owners[0].title\n : null,\n growing_area: `${currentFarm?.name} - ${lineData.line_name}`,\n harvester_name: profile?.name ?? null,\n line_length: lineData.growing_cycle\n ? lineData.growing_cycle.current_basket_count\n : defaultForm.line_length,\n amount_dz: getLineOysters(lineData) ?? defaultForm.amount_dz,\n amount_pcs: getLineOysters(lineData, 'pieces') ?? defaultForm.amount_pcs,\n shell_length: calcOysterLineSize(lineData, onGrowWaste, sizedOysters)?.min,\n shell_length_max: calcOysterLineSize(lineData, onGrowWaste, sizedOysters)\n ?.max,\n seed_id: data?.seed_id ?? null,\n });\n\n const [sigCanLoaded, setSigCanLoaded] = useState(false);\n const [reqPdf, setReqPdf] = useState(false);\n const [emails, setEmails] = useState(friendEmails?.join(',') ?? '');\n const [disabled, setDisabled] = useState(false);\n const [showPort, setShowPort] = useState(\n !port_of_unloads || port_of_unloads?.length <= 0,\n );\n const [showDel, setShowDel] = useState(\n !delivered_tos || delivered_tos?.length <= 0,\n );\n const [showPac, setShowPac] = useState(\n !packhouses || packhouses?.length <= 0,\n );\n const [customValues, setCustomValues] = useState(\n customFields.map(x => {\n const d =\n data && data.custom_values\n ? data.custom_values.find((y: ICustomValue) => y.field_id === x.id)\n : null;\n return {\n input_type: x.input_type,\n field_label: x.name,\n options: x.options\n ?.split(',')\n .map(t => ({ id: t, label: t, value: t })),\n field_id: x.id,\n field_val: d?.field_val ?? '',\n data_type: x.data_type,\n unit: x.unit,\n };\n }),\n );\n const [reseedFarm, setReseedFarm] = useState(currentFarm);\n const [reseedForm, setReseedForm] = useState();\n\n const { currentSeed, ivtFloats, lastAssessment, lastHarvest } = useMemo(\n () => ({\n currentSeed: lineData.growing_cycle?.main_seed,\n ivtFloats: lineData.growing_cycle?.inventories_sum,\n lastAssessment: lineData.growing_cycle?.last_assessment,\n lastHarvest: lineData.growing_cycle?.last_harvest,\n }),\n [lineData],\n );\n\n const availableInventories = useMemo(() => {\n let res: any[] = [];\n if (ivtFloats) {\n for (let x of ivtFloats) {\n res.push({\n inventory_id: x.inventory_id,\n available: x.quantity,\n });\n }\n }\n if (data?.inventories) {\n for (let x of data.inventories) {\n if (res.some(t => t.inventory_id === x.inventory_id)) continue;\n res.push({\n inventory_id: x.inventory_id,\n available: 0,\n });\n }\n }\n return res;\n }, [data?.inventories, ivtFloats]);\n\n const updateForm = (key: keyof IFormData, value: any) => {\n if (\n [\n 'income',\n 'shell_length',\n 'shell_length_max',\n 'cost',\n 'mortality',\n ].includes(String(key))\n ) {\n value = value.length <= 0 ? undefined : Number(value);\n setFormData(prv => ({ ...prv, [key]: value }));\n } else if (key === 'amount_dz') {\n value = value.length <= 0 ? undefined : Number(value);\n if (!value) {\n setFormData(prv => ({ ...prv, amount_dz: value, amount_pcs: value }));\n } else {\n setFormData(prv => ({\n ...prv,\n amount_pcs:\n formData.measurement_units == 'pcs' ? value : dozensToPieces(value),\n amount_dz:\n formData.measurement_units == 'pcs' ? piecesToDozens(value) : value,\n }));\n }\n } else if (key === 'amount_pcs') {\n value = value.length <= 0 ? undefined : Number(value);\n if (!value) {\n setFormData(prv => ({ ...prv, amount_pcs: value, amount_dz: value }));\n } else {\n setFormData(prv => ({\n ...prv,\n amount_pcs:\n formData.measurement_units == 'pcs' ? value : dozensToPieces(value),\n amount_dz:\n formData.measurement_units == 'pcs' ? piecesToDozens(value) : value,\n }));\n }\n } else if (key === 'return_amount_dz') {\n value = value.length <= 0 ? undefined : Number(value);\n if (!value) {\n setFormData(prv => ({\n ...prv,\n return_amount_dz:\n formData.measurement_units == 'pcs' ? piecesToDozens(value) : value,\n return_amount_pcs:\n formData.measurement_units == 'pcs' ? value : dozensToPieces(value),\n }));\n } else {\n setFormData(prv => ({\n ...prv,\n return_amount_dz:\n formData.measurement_units == 'pcs' ? piecesToDozens(value) : value,\n return_amount_pcs:\n formData.measurement_units == 'pcs' ? value : dozensToPieces(value),\n }));\n }\n } else if (key === 'return_amount_pcs') {\n value = value.length <= 0 ? undefined : Number(value);\n if (!value) {\n setFormData(prv => ({\n ...prv,\n return_amount_dz: piecesToDozens(value),\n return_amount_pcs: value,\n }));\n } else {\n setFormData(prv => ({\n ...prv,\n return_amount_dz: piecesToDozens(value),\n return_amount_pcs: value,\n }));\n }\n } else if (metaFields.some(x => x.key === String(key))) {\n value = value.length <= 0 ? undefined : Number(value);\n const amountSum =\n metaFields.reduce((p, c) => p + (formData[c.key] ?? 0), 0) -\n (formData[key] ?? 0) +\n (value ?? 0);\n setFormData(prv => ({\n ...prv,\n [key]: value,\n amount_pcs:\n formData.measurement_units == 'pcs' ? value : dozensToPieces(value),\n amount_dz:\n formData.measurement_units == 'pcs' ? piecesToDozens(value) : value,\n }));\n } else if (key === 'is_full') {\n setFormData(prv => ({\n ...prv,\n is_full: value,\n line_length:\n formData.inventories && formData.inventories.length > 0\n ? prv.line_length\n : value\n ? lineData.growing_cycle\n ? lineData.growing_cycle.current_basket_count\n : null\n : null,\n amount_dz: value ? getLineOysters(lineData) ?? null : null,\n amount_pcs: value ? getLineOysters(lineData, 'pieces') ?? null : null,\n }));\n } else if (key === 'line_length') {\n if (value === null || value <= 0) {\n value = undefined;\n }\n if (value) {\n const density = lineData.growing_cycle?.main_seed.density ?? 0;\n let tmp = { ...formData };\n tmp.line_length = value;\n if (density && (tmp.amount_dz == null || tmp.amount_dz <= 0)) {\n tmp.amount_dz = Math.round(value * density);\n tmp.amount_pcs = dozensToPieces(tmp.amount_dz);\n for (const mf of metaFields) {\n const percent = calcOysterPercent(mf as any, lineData.id);\n if (percent !== undefined) {\n tmp[mf.key] = Math.round((percent * tmp.amount_dz) / 100);\n }\n }\n }\n setFormData(tmp);\n } else {\n setFormData(prv => ({ ...prv, [key]: value }));\n }\n } else if (key === 'measurement_units') {\n let tmp = { ...formData };\n if (tmp.measurement_units !== value) {\n metaFields.forEach((x: any) => {\n if (tmp[x.key] && tmp[x.key] !== '') {\n if (value === 'dz') {\n tmp[x.key] = piecesToDozens(tmp[x.key]);\n } else {\n tmp[x.key] = dozensToPieces(tmp[x.key]);\n }\n }\n });\n if (tmp.mortality) {\n tmp.mortality =\n value === 'dz'\n ? piecesToDozens(tmp.mortality)\n : dozensToPieces(tmp.mortality);\n }\n }\n tmp.measurement_units = value;\n setFormData(tmp);\n } else if (key === 'inventories') {\n const lengthSum = (value as IPickedInventory[]).reduce(\n (p, c) => p + (c.quantity ?? 0),\n 0,\n );\n setFormData(prv => ({\n ...prv,\n inventories: value,\n line_length: lengthSum,\n }));\n } else {\n if (key === 'is_combined' && value) {\n loadSpats();\n }\n if (typeof value === 'string' && value.length <= 0) {\n value = undefined;\n }\n setFormData(prv => ({ ...prv, [key]: value }));\n }\n setErrors((prv: any) => ({ ...(prv ?? {}), [key]: null }));\n };\n const validForm = () => {\n if (!updateID && !lineData.growing_cycle) {\n setErrorMsg('_line_empty');\n return null;\n }\n if (!updateID && !currentSeed) {\n setErrorMsg('_line_empty');\n return null;\n }\n if (\n updateID &&\n !data.is_full !== !formData.is_full &&\n lineData?.growing_cycle?.last_harvest?.id !== updateID\n ) {\n setErrorMsg('_impossible_harvest_update');\n return null;\n }\n if (formData.amount_dz === null || formData.amount_dz <= 0) {\n const es = translate(\n lang,\n formData.amount_dz === null\n ? 'Please enter harvested amount'\n : '_invalid_harvest_amount_length',\n );\n setErrorMsg(es);\n setErrors((prv: any) => ({ ...(prv ?? {}), amount: es }));\n return null;\n }\n if (\n formData.shell_length_max !== null &&\n (formData.shell_length === null ||\n formData.shell_length > formData.shell_length_max)\n ) {\n const es = translate(lang, 'Invalid shell length range');\n setErrorMsg(es);\n setErrors((prv: any) => ({ ...(prv ?? {}), shell_length: es }));\n return null;\n }\n if (formData.is_full) {\n const basketCnt = lineData.growing_cycle?.current_basket_count ?? 0;\n if (\n formData.line_length !== basketCnt &&\n !window.confirm(\n `${basketCnt} ${lineData.farming_method} are left but you are going to harvest ${formData.line_length} ${lineData.farming_method} as a full harvest. Are you sure?`,\n )\n )\n return null;\n const amountDz = getLineOysters(lineData) ?? 0;\n if (\n formData.amount_dz !== amountDz &&\n !window.confirm(\n `${amountDz} dozens are left but you are going to harvest ${formData.amount_dz} dozens as a full harvest. Are you sure?`,\n )\n )\n return null;\n }\n if (emails && emails.split(',').some(x => !isEmailFormat(x))) {\n setErrorMsg('_invalid_emails');\n return null;\n }\n if (formData.inventories) {\n for (let ivt of formData.inventories) {\n const fd = ivtFloats?.find(x => x.inventory_id === ivt.inventory_id);\n if (!fd) {\n setErrorMsg('Invalid inventory information');\n return null;\n }\n if (fd.quantity < (ivt.quantity ?? 0)) {\n setErrorMsg(\n translate(\n lang,\n 'You are trying to return more than available for inventory %s',\n fd.inventory_name,\n ),\n );\n return null;\n }\n }\n }\n if (reseedForm) {\n if (!formData.shell_length) {\n setErrorMsg('Please input shell length');\n return null;\n }\n if (!reseedFarm) {\n setErrorMsg('Please select immediate seed farm');\n return null;\n }\n if (reseedForm.lines.some(x => !x.basket_count)) {\n setErrorMsg('Please input number of containers for all lines');\n return null;\n }\n }\n let res: any = {\n ...formData,\n seeding_id: data?.seeding_id ?? currentSeed?.id,\n season_name: data?.season_name ?? currentSeed?.season_name,\n line_id: lineData.id,\n complete_date: toSecond(formData.complete_date),\n require_pdf: reqPdf,\n request_emails: emails.split(','),\n return_amount_dz: formData.is_final\n ? formData.return_amount_dz\n : undefined,\n return_amount_pcs: formData.is_final\n ? formData.return_amount_pcs\n : undefined,\n mortality: formData.mortality\n ? formData.measurement_units === 'dz'\n ? dozensToPieces(formData.mortality)\n : formData.mortality\n : undefined,\n reseed: reseedForm,\n };\n if (!res.income) res.income = 0;\n if (!updateID && signatureCanvas.current?.toDataURL()) {\n res.signature = signatureCanvas.current?.toDataURL() ?? undefined;\n } else {\n delete res.signature;\n }\n if (res.time_tracks && res.time_tracks.length > 0) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (!tt) {\n setErrorMsg('_invalid_time_range');\n return null;\n }\n res.time_tracks = tt;\n }\n if (\n metaFields.some(\n x => formData[x.key] === null || formData[x.key] === undefined,\n )\n ) {\n setErrorMsg(\n translate(\n lang,\n 'Please fill %s field',\n metaFields.find(\n x => formData[x.key] === null || formData[x.key] === undefined,\n )?.label ?? '',\n ),\n );\n return null;\n }\n const cvs = customValues\n .filter(x => !!x.field_val)\n .map(({ field_id, field_val }) => ({ field_id, field_val }));\n if (cvs.length > 0) {\n res.custom_values = cvs;\n } else {\n res.custom_values = undefined;\n }\n setErrors(undefined);\n return res;\n };\n const handleConfirmClick = async () => {\n if (onlyView) return;\n const form = validForm();\n if (!form) return;\n\n setDisabled(true);\n if (overConfirm) {\n const res = await overConfirm(form);\n if (!res.status) {\n setErrorMsg(res.data?.message ?? 'Request failed');\n if (res.data.errors) setErrors(res.data.errors);\n setDisabled(false);\n }\n return;\n }\n const res = !updateID\n ? await sendSingleRequest(\n form,\n 'POST',\n 'api/farm/line/oyster-harvest',\n true,\n )\n : await sendSingleRequest(\n form,\n 'PUT',\n `api/farm/line/oyster-harvest/${updateID}`,\n true,\n );\n if (res.status) {\n dispatch(loadFarmsData());\n if (form.inventories) {\n dispatch(loadInventories());\n }\n onConfirm(res.data);\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n } else {\n setErrorMsg(res.data?.message ?? 'Request failed');\n if (res.data.errors) setErrors(res.data.errors);\n setDisabled(false);\n }\n };\n const updateCustomValue = (fieldID: number, val: string) => {\n let tmp = [...customValues];\n const i = tmp.findIndex(x => x.field_id === fieldID);\n if (i >= 0) {\n tmp[i].field_val = val;\n }\n setCustomValues(tmp);\n };\n\n useEffect(() => {\n if (data) {\n let tmp = { ...data };\n if (showBudget && data.expense_items && data.expense_items.length > 0) {\n tmp.cost = data.expense_items.reduce(\n (p: number, c: any) => p + c.amount,\n 0,\n );\n }\n if (tmp.complete_date) {\n tmp.complete_date = toMillisecond(tmp.complete_date);\n }\n if (tmp.mortality && tmp.measurement_units === 'dz') {\n tmp.mortality = piecesToDozens(tmp.mortality);\n }\n if (tmp.images) {\n tmp.images = tmp.images.map((x: any) =>\n typeof x === 'object' && x !== null ? x : parseImageUrlToFileItem(x),\n );\n }\n if (data.time_tracks) {\n tmp.time_tracks = data.time_tracks.map((x: any) => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n }));\n }\n setFormData(prv => ({ ...prv, ...tmp }));\n\n if (data.reseed && data.reseed.lines) {\n const tmpFarm = farmsData.find(x =>\n x.lines.some(y => y.id === data.reseed.lines[0].line_id),\n );\n setReseedFarm(tmpFarm);\n setReseedForm(data.reseed);\n }\n }\n }, [data, showBudget]);\n\n useEffect(() => {\n if (sigCanLoaded && data && data.signature) {\n signatureCanvas.current?.fromDataURL(data.signature);\n }\n }, [data, sigCanLoaded, signatureCanvas.current]);\n\n const loadSpats = async () => {\n setLoadingSpats(true);\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/farm/harvest-spat-storage?type=OYSTER',\n true,\n );\n if (response.status) {\n setSpats(response.data);\n setLoadingSpats(false);\n }\n };\n const getSpatName = (x: any) => {\n let line = x.source;\n line +=\n x.harvest && x.harvest.complete_date !== null\n ? ' [' + defaultDateFormat(x.harvest.complete_date) + ']'\n : '';\n line +=\n x.src_line_name != null\n ? ' - ' + translate(lang, 'source line ') + x.src_line_name\n : '';\n return line;\n };\n const seedOptions = updateID\n ? undefined\n : lineData.growing_cycle?.seedings.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${defaultDateFormat(x.planned_date_seed)} - ${translate(\n lang,\n 'Batch',\n )} ${x.spat_source} - ${x.basket_count} ${lineData.farming_method}`,\n }));\n\n return (\n }\n width={650}\n >\n
\n
\n \n {title ?? 'Oyster harvest complete'}\n \n
\n
\n {!!errorMsg && (\n setErrorMsg(undefined)}\n />\n )}\n
\n {!!currentSeed && (\n <>\n \n {componentTranslate(\n lang,\n '_harvest_intro',\n \n {defaultDateFormat(currentSeed.planned_date_seed)}\n ,\n \n {defaultDateFormat(\n lastAssessment?.planned_date_harvest ??\n currentSeed.planned_date_harvest,\n )}\n ,\n )}\n
\n \n updateForm('inventories', d)}\n />\n \n )}\n
\n
\n {translate(lang, 'Measurement units')}\n
\n
\n \n updateForm('measurement_units', e.target.value)\n }\n value={formData.measurement_units}\n >\n \n \n \n
\n
\n
\n \n {translate(lang, 'Have you harvested the entire line?')}\n \n updateForm('is_full', e.target.value === 'F')}\n value={formData.is_full ? 'F' : 'P'}\n >\n \n \n \n
\n
\n {!!lastHarvest && lastHarvest.is_final == formData.is_final && (\n
\n \n {translate(\n lang,\n lastHarvest.is_final\n ? `This is final harvest continuation`\n : `This is intermediate harvest continuation`,\n )}\n \n
\n )}\n
\n \n updateForm('is_final', e.target.value === 'FINAL')\n }\n value={!formData.is_final ? 'MIDDLE' : 'FINAL'}\n >\n \n \n \n
\n {!updateID && !formData.is_final && (\n
\n
\n \n setReseedForm(\n e.target.checked ? { lines: [] } : undefined,\n )\n }\n checked={!!reseedForm}\n disabled={onlyView || disabled}\n />\n
\n {reseedForm && (\n \n )}\n
\n )}\n
\n {!!seedOptions && seedOptions.length > 0 && !formData.is_full && (\n
\n \n updateForm('seed_id', v ? v.map(Number) : [])\n }\n />\n
\n )}\n <>\n {metaFields.map(x => (\n
\n updateForm(x.key, e.target.value)}\n unit={formData.measurement_units ?? 'dz'}\n disabled={onlyView}\n />\n
\n ))}\n
\n
\n {\n if (formData.measurement_units == 'pcs') {\n updateForm('amount_pcs', e.target.value);\n } else {\n updateForm('amount_dz', e.target.value);\n }\n }}\n value={\n formData.measurement_units == 'pcs'\n ? formData.amount_pcs?.toString() ?? ''\n : formData.amount_dz?.toString() ?? ''\n }\n unit={formData.measurement_units ?? 'dz'}\n />\n {!!errors?.amount && (\n
{errors?.amount}
\n )}\n
\n
\n {!!profile?.account?.track_mortality && (\n
\n updateForm('mortality', e.target.value)}\n value={formData.mortality?.toString() ?? ''}\n unit={formData.measurement_units}\n />\n
\n )}\n
\n updateForm('is_combined', e.target.checked)}\n label={translate(\n lang,\n 'Combine graded oysters into daily spat',\n )}\n />\n
\n {!!formData.is_combined && (\n <>\n {loadingSpats ? (\n
\n

{translate(lang, 'Loading spats...')}

\n
\n ) : (\n
\n {\n return {\n id: x.id.toString(),\n value: x.id,\n label: getSpatName(x),\n };\n }) ?? []),\n ]}\n value={formData.combine_id}\n onChange={v => updateForm('combine_id', v)}\n />\n
\n )}\n \n )}\n {!!formData.is_final && (\n <>\n
\n {\n if (formData.measurement_units == 'pcs') {\n updateForm('return_amount_pcs', e.target.value);\n } else {\n updateForm('return_amount_dz', e.target.value);\n }\n }}\n value={\n formData.measurement_units == 'pcs'\n ? formData.return_amount_pcs?.toString() ?? ''\n : formData.return_amount_dz?.toString() ?? ''\n }\n unit={formData.measurement_units ?? 'dz'}\n />\n
\n \n )}\n {!!showBudget && (\n
\n updateForm('income', e.target.value)}\n value={formData.income?.toString() ?? ''}\n unit={}\n />\n
\n )}\n {availableInventories.length <= 0 && (\n
\n updateForm('line_length', e.target.value)}\n value={formData.line_length?.toString() ?? ''}\n />\n
\n )}\n
\n updateForm('direction', v)}\n />\n
\n \n \n e && updateForm('complete_date', e.toDate().getTime())\n }\n />\n {!!errors?.complete_date && (\n
\n {errors?.complete_date}\n
\n )}\n
\n
\n updateForm('harvest_number', e.target.value)}\n value={formData.harvest_number ?? ''}\n label={`${translate(lang, 'Harvest number')}${\n lineData.last_harvest?.harvest_number\n ? ` ${translate(\n lang,\n 'last value is %s',\n lineData.last_harvest.harvest_number,\n )}`\n : ''\n }`}\n disabled={onlyView}\n />\n
\n
\n
\n updateForm('shell_length', e.target.value)}\n value={formData.shell_length?.toString() ?? ''}\n />\n
\n
\n \n updateForm('shell_length_max', e.target.value)\n }\n value={formData.shell_length_max?.toString() ?? ''}\n />\n
\n
\n
\n ({\n id: x.id.toString(),\n value: x.name,\n label: x.name,\n })) ?? []),\n { id: '', value: '', label: translate(lang, 'Other') },\n ]}\n value={showPort ? '' : formData.port_of_unload ?? undefined}\n onChange={v => {\n updateForm('port_of_unload', v);\n setShowPort(v.length <= 0);\n }}\n />\n {showPort && (\n updateForm('port_of_unload', e.target.value)}\n value={formData.port_of_unload ?? ''}\n disabled={onlyView}\n />\n )}\n
\n
\n updateForm('crop_owner', e.target.value)}\n value={formData.crop_owner ?? ''}\n disabled={onlyView}\n />\n
\n
\n updateForm('growing_area', e.target.value)}\n value={formData.growing_area ?? ''}\n label={translate(lang, 'Growing area')}\n disabled={onlyView}\n />\n
\n
\n ({\n id: x.id.toString(),\n value: x.name,\n label: x.name,\n })) ?? []),\n { id: '', value: '', label: translate(lang, 'Other') },\n ]}\n value={showDel ? '' : formData.delivered_to ?? undefined}\n onChange={v => {\n updateForm('delivered_to', v);\n setShowDel(v.length <= 0);\n }}\n />\n {showDel && (\n updateForm('delivered_to', e.target.value)}\n value={formData.delivered_to ?? ''}\n disabled={onlyView}\n />\n )}\n
\n
\n ({\n id: x.id.toString(),\n value: x.name,\n label: x.name,\n })) ?? []),\n { id: '', value: '', label: translate(lang, 'Other') },\n ]}\n value={showPac ? '' : formData.packhouse ?? undefined}\n onChange={v => {\n updateForm('packhouse', v);\n setShowPac(v.length <= 0);\n }}\n />\n {showPac && (\n updateForm('packhouse', e.target.value)}\n value={formData.packhouse ?? ''}\n disabled={onlyView}\n />\n )}\n
\n
\n updateForm('shell_condition', e.target.value)}\n value={formData.shell_condition ?? ''}\n disabled={onlyView}\n />\n
\n
\n updateForm('oyster_type', e.target.value)}\n value={formData.oyster_type ?? ''}\n disabled={onlyView}\n />\n
\n
\n updateForm('harvester_name', e.target.value)}\n value={formData.harvester_name ?? ''}\n disabled={onlyView}\n />\n
\n {!!formData.time_tracks && (\n
\n updateForm('time_tracks', t)}\n />\n
\n )}\n {!!showBudget && (\n
\n updateForm('cost', e.target.value)}\n value={formData.cost?.toString() ?? ''}\n unit='$'\n />\n
\n )}\n {customValues.map(x => (\n
\n {x.input_type === 'select' ? (\n <>\n updateCustomValue(x.field_id, v)}\n disabled={onlyView}\n />\n {(!x.options || x.options.length <= 0) && (\n \n Set up field\n \n )}\n \n ) : (\n \n updateCustomValue(x.field_id, e.target.value)\n }\n unit={x.unit}\n disabled={onlyView}\n />\n )}\n
\n ))}\n
\n updateForm('comment', e.target.value)}\n value={formData.comment ?? ''}\n />\n
\n
\n updateForm('images', v)}\n />\n
\n
\n

\n {translate(lang, 'Signature')}\n

\n \n {\n signatureCanvas.current = r;\n setSigCanLoaded(true);\n }}\n penColor='green'\n canvasProps={{ width: 550, height: 200 }}\n />\n
\n
\n {!updateID && (\n
\n setReqPdf(e.target.checked)}\n label={translate(\n lang,\n 'Send me PDF of Harvest Declaration Form',\n )}\n />\n {reqPdf && (\n
\n setEmails(e.target.value)}\n />\n
\n )}\n
\n )}\n \n
\n \n \n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default OysterHarvestModal;\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport moment from 'moment';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { ISeaweedLineResource } from '../../../entities/farms.entities';\nimport { useDispatch, useSelector } from 'react-redux';\nimport SignatureCanvas from 'react-signature-canvas';\nimport { Modal, Radio } from 'antd';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n DollarIcon,\n Feedback,\n Input,\n Paragrapgh,\n RadioButton,\n Subtitle,\n Title,\n} from '../../shared';\nimport {\n defaultDateFormat,\n toMillisecond,\n toSecond,\n} from '../../../util/toggleSecondMillisecond';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { isEmailFormat } from '../../../util/validation';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport { sendSingleRequest } from '../../../apis';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { componentTranslate, translate } from '../../../lib/lang.helper';\nimport {\n SelectIsBudgetVisible,\n SelectProfileByFarmID,\n SelectSettingsByFarmID,\n} from '../../../store/extra/extra.selector';\n\ninterface IFormData {\n is_final: boolean;\n is_full: boolean;\n season_name: string;\n amount: number | null;\n income: number | null;\n complete_date: number;\n company?: string;\n vessel?: string;\n harvest_number?: string;\n tank_area?: number;\n shell_length: number | null;\n shell_length_max: number | null;\n shell_condition?: string | null;\n comment?: string;\n images: any[];\n cost?: number;\n signature?: string;\n time_tracks?: ITimeRange[];\n}\n\nconst defaultForm: IFormData = {\n is_final: true,\n is_full: true,\n complete_date: moment().toDate().getTime(),\n season_name: '',\n amount: null,\n income: null,\n shell_length: null,\n shell_length_max: null,\n images: [],\n time_tracks: [],\n};\n\ninterface Props {\n visible: boolean;\n title?: string;\n lineData: ISeaweedLineResource;\n data: any;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n updateID?: number;\n onlyView?: boolean;\n}\n\nconst SeaweedHarvestModal = ({\n visible,\n title,\n lineData,\n data,\n onCancel,\n onConfirm,\n updateID,\n onlyView,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const profile = SelectProfileByFarmID(lineData.farm_id);\n const friendEmails = SelectSettingsByFarmID(lineData.farm_id)?.friendEmails;\n const showBudget = SelectIsBudgetVisible(lineData.farm_id);\n\n const signatureCanvas = useRef();\n\n const [errorMsg, setErrorMsg] = useState();\n const [errors, setErrors] = useState();\n const [formData, setFormData] = useState({\n ...defaultForm,\n vessel: profile?.current_boat\n ? `${profile.current_boat.name} (${profile.current_boat.reg_number})`\n : undefined,\n company: profile?.company_name ?? undefined,\n is_final: lineData.growing_cycle?.last_harvest\n ? !!lineData.growing_cycle.last_harvest.is_final\n : defaultForm.is_final,\n tank_area:\n (lineData.growing_cycle?.total_seeded_tank_area ?? 0) -\n (lineData.growing_cycle?.total_harvested_tank_area ?? 0),\n });\n const [sigCanLoaded, setSigCanLoaded] = useState(false);\n const [reqPdf, setReqPdf] = useState(false);\n const [emails, setEmails] = useState(friendEmails?.join(',') ?? '');\n const [disabled, setDisabled] = useState(false);\n\n const {\n currentSeed,\n seededTankArea,\n harvestedTankArea,\n lastAssessment,\n lastHarvest,\n } = useMemo(\n () => ({\n currentSeed: lineData.growing_cycle?.main_seed,\n seededTankArea: lineData.growing_cycle?.total_seeded_tank_area ?? 0,\n harvestedTankArea: lineData.growing_cycle?.total_harvested_tank_area ?? 0,\n lastAssessment: lineData.growing_cycle?.last_assessment,\n lastHarvest: lineData.growing_cycle?.last_harvest,\n }),\n [lineData],\n );\n\n const updateForm = (key: keyof IFormData, value: any) => {\n if (\n [\n 'amount',\n 'income',\n 'tank_area',\n 'shell_length',\n 'shell_length_max',\n 'cost',\n ].includes(key)\n ) {\n value = value.length <= 0 ? undefined : Number(value);\n setFormData(prv => ({ ...prv, [key]: value }));\n } else {\n if (typeof value === 'string' && value.length <= 0) {\n value = undefined;\n }\n setFormData(prv => ({ ...prv, [key]: value }));\n }\n setErrors((prv: any) => ({ ...(prv ?? {}), [key]: null }));\n };\n const validForm = () => {\n if (!updateID && !lineData.growing_cycle) {\n setErrorMsg('_line_empty');\n return null;\n }\n if (!updateID && !currentSeed) {\n setErrorMsg('_line_empty');\n return null;\n }\n if (\n updateID &&\n !data.is_full !== !formData.is_full &&\n lineData?.growing_cycle?.last_harvest?.id !== updateID\n ) {\n setErrorMsg('_impossible_harvest_update');\n return null;\n }\n if (\n !updateID &&\n formData.is_full === false &&\n formData.tank_area &&\n seededTankArea - harvestedTankArea < formData.tank_area\n ) {\n const es = !formData.tank_area\n ? 'Please input area of harvested tank'\n : `Maximum available area of harvested tank is ${\n seededTankArea - harvestedTankArea\n }`;\n setErrorMsg(es);\n setErrors((prv: any) => ({ ...(prv ?? {}), tank_area: es }));\n return null;\n }\n if (\n !updateID &&\n formData.is_full &&\n formData.tank_area &&\n formData.tank_area !== seededTankArea - harvestedTankArea &&\n !window.confirm(\n `${\n seededTankArea - harvestedTankArea\n } m² are left but you are going to harvest ${\n formData.tank_area\n } m² as a full harvest. Are you sure?`,\n )\n ) {\n return null;\n }\n if (formData.amount === null || formData.amount <= 0) {\n const es = translate(\n lang,\n formData.amount === null\n ? 'Please enter harvested amount'\n : '_invalid_harvest_amount_length',\n );\n setErrorMsg(es);\n setErrors((prv: any) => ({ ...(prv ?? {}), amount: es }));\n return null;\n }\n if (\n formData.shell_length_max !== null &&\n (formData.shell_length === null ||\n formData.shell_length > formData.shell_length_max)\n ) {\n const es = translate(lang, 'Invalid shell length range');\n setErrorMsg(es);\n setErrors((prv: any) => ({ ...(prv ?? {}), shell_length: es }));\n return null;\n }\n if (emails && emails.split(',').some(x => !isEmailFormat(x))) {\n setErrorMsg('_invalid_emails');\n return null;\n }\n let res = {\n ...formData,\n seeding_id: data?.seeding_id ?? currentSeed?.id,\n season_name: data?.season_name ?? currentSeed?.season_name,\n line_id: lineData.id,\n complete_date: toSecond(formData.complete_date),\n require_pdf: reqPdf,\n request_emails: emails.split(','),\n };\n if (!res.income) res.income = 0;\n if (!updateID && signatureCanvas.current?.toDataURL()) {\n res.signature = signatureCanvas.current?.toDataURL() ?? undefined;\n } else {\n delete res.signature;\n }\n if (res.time_tracks && res.time_tracks.length > 0) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (!tt) {\n setErrorMsg('_invalid_time_range');\n return null;\n }\n res.time_tracks = tt;\n }\n setErrors(undefined);\n return res;\n };\n const handleConfirmClick = async () => {\n if (onlyView) return;\n const form = validForm();\n if (!form) return;\n\n setDisabled(true);\n const res = !updateID\n ? await sendSingleRequest(\n form,\n 'POST',\n 'api/farm/line/seaweed-harvest',\n true,\n )\n : await sendSingleRequest(\n form,\n 'PUT',\n `api/farm/line/seaweed-harvest/${updateID}`,\n true,\n );\n if (res.status) {\n dispatch(loadFarmsData());\n onConfirm(res.data);\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n } else {\n setErrorMsg(res.data?.message ?? 'Request failed');\n if (res.data.errors) setErrors(res.data.errors);\n setDisabled(false);\n }\n };\n\n useEffect(() => {\n if (data) {\n let tmp = { ...data };\n if (showBudget && data.expense_items && data.expense_items.length > 0) {\n tmp.cost = data.expense_items.reduce(\n (p: number, c: any) => p + c.amount,\n 0,\n );\n }\n if (tmp.complete_date)\n tmp.complete_date = toMillisecond(tmp.complete_date);\n if (tmp.images) {\n tmp.images = tmp.images.map((x: any) =>\n typeof x === 'object' && x !== null ? x : parseImageUrlToFileItem(x),\n );\n }\n if (data.time_tracks) {\n tmp.time_tracks = data.time_tracks.map((x: any) => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n }));\n }\n setFormData(prv => ({ ...prv, ...tmp }));\n }\n }, [data, showBudget]);\n\n useEffect(() => {\n if (sigCanLoaded && data && data.signature) {\n signatureCanvas.current?.fromDataURL(data.signature);\n }\n }, [data, sigCanLoaded, signatureCanvas.current]);\n\n return (\n }\n width={650}\n >\n
\n
\n \n {translate(lang, title ?? 'Seaweed harvest complete')}\n \n
\n
\n {!!errorMsg && (\n setErrorMsg(undefined)}\n />\n )}\n
\n {!!currentSeed && (\n <>\n \n {componentTranslate(\n lang,\n '_harvest_intro',\n \n {defaultDateFormat(currentSeed.planned_date_seed)}\n ,\n \n {defaultDateFormat(\n lastAssessment?.planned_date_harvest ??\n currentSeed.planned_date_harvest,\n )}\n ,\n )}\n
\n \n \n )}\n
\n \n {translate(lang, 'Have you harvested the entire line?')}\n \n updateForm('is_full', e.target.value === 'F')}\n value={formData.is_full ? 'F' : 'P'}\n >\n \n \n \n
\n
\n {!!lastHarvest && lastHarvest.is_final == formData.is_final && (\n
\n \n {translate(\n lang,\n lastHarvest.is_final\n ? `This is final harvest continuation`\n : `This is intermediate harvest continuation`,\n )}\n \n
\n )}\n
\n \n updateForm('is_final', e.target.value === 'FINAL')\n }\n value={!formData.is_final ? 'MIDDLE' : 'FINAL'}\n >\n \n \n \n
\n
\n <>\n
\n
\n updateForm('amount', e.target.value)}\n value={formData.amount?.toString() ?? ''}\n unit='kg'\n />\n {!!errors?.amount && (\n
{errors?.amount}
\n )}\n
\n
\n {!!showBudget && (\n
\n updateForm('income', e.target.value)}\n value={formData.income?.toString() ?? ''}\n unit={}\n />\n
\n )}\n \n \n e && updateForm('complete_date', e.toDate().getTime())\n }\n />\n {!!errors?.complete_date && (\n
\n {errors?.complete_date}\n
\n )}\n
\n {formData.is_final ? (\n <>\n
\n updateForm('company', e.target.value)}\n value={formData.company ?? ''}\n />\n
\n
\n updateForm('vessel', e.target.value)}\n value={formData.vessel ?? ''}\n />\n
\n
\n \n updateForm('harvest_number', e.target.value)\n }\n value={formData.harvest_number ?? ''}\n label={`Harvest number${\n lastHarvest?.harvest_number\n ? ` (last value is ${lastHarvest.harvest_number})`\n : ''\n }`}\n />\n
\n \n ) : (\n <>\n
\n
\n \n updateForm('shell_length', e.target.value)\n }\n value={formData.shell_length?.toString() ?? ''}\n />\n
\n
\n \n updateForm('shell_length_max', e.target.value)\n }\n value={formData.shell_length_max?.toString() ?? ''}\n />\n
\n
\n
\n \n updateForm('shell_condition', e.target.value)\n }\n value={formData.shell_condition ?? ''}\n />\n
\n \n )}\n \n updateForm('tank_area', e.target.value)}\n value={formData.tank_area?.toString() ?? ''}\n placeholder={\n !updateID\n ? `${seededTankArea} m² seeded, ${harvestedTankArea} m² harvested`\n : ''\n }\n />\n {!!errors?.tank_area && (\n
{errors?.tank_area}
\n )}\n
\n {!!formData.time_tracks && (\n
\n updateForm('time_tracks', t)}\n />\n
\n )}\n {!!formData.is_final && (\n <>\n
\n
\n \n updateForm('shell_length', e.target.value)\n }\n value={formData.shell_length?.toString() ?? ''}\n />\n
\n
\n \n updateForm('shell_length_max', e.target.value)\n }\n value={formData.shell_length_max?.toString() ?? ''}\n />\n
\n
\n
\n \n updateForm('shell_condition', e.target.value)\n }\n value={formData.shell_condition ?? ''}\n />\n
\n \n )}\n {!!showBudget && (\n
\n updateForm('cost', e.target.value)}\n value={formData.cost?.toString() ?? ''}\n unit='$'\n />\n
\n )}\n
\n updateForm('comment', e.target.value)}\n value={formData.comment ?? ''}\n />\n
\n
\n updateForm('images', v)}\n />\n
\n
\n

\n {translate(lang, 'Signature')}\n

\n \n {\n signatureCanvas.current = r;\n setSigCanLoaded(true);\n }}\n penColor='green'\n canvasProps={{ width: 550, height: 200 }}\n />\n
\n
\n {!updateID && (\n
\n setReqPdf(e.target.checked)}\n />\n {reqPdf && (\n
\n setEmails(e.target.value)}\n />\n
\n )}\n
\n )}\n \n \n \n \n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default SeaweedHarvestModal;\n","import MusselHarvestModal from './MusselHarvestModal';\nimport OysterHarvestModal from './OysterHarvestModal';\nimport { TBusinessType } from '../../../entities/general.entities';\nimport {\n ILineResource,\n IMusselLineResource,\n IOysterLineResource,\n ISeaweedLineResource,\n} from '../../../entities/farms.entities';\nimport SeaweedHarvestModal from './SeaweedHarvestModal';\nimport '../styles.scss';\n\ninterface Props {\n type: TBusinessType;\n visible: boolean;\n title?: string;\n lineData: ILineResource;\n data?: any;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n overConfirm?: (data: any) => Promise; // only for MUSSEL\n onlyView?: boolean; // only for MUSSEL\n warningMessage?: string; // only for MUSSEL\n lineChangeable?: boolean; // only for MUSSEL\n updateID?: number;\n}\n\nconst HarvestCompleteModal = ({\n type,\n visible,\n title,\n lineData,\n data,\n onCancel,\n onConfirm,\n overConfirm,\n onlyView,\n warningMessage,\n lineChangeable,\n updateID,\n}: Props) => (\n <>\n {type === 'MUSSEL' ? (\n \n ) : type === 'OYSTER' ? (\n \n ) : (\n \n )}\n \n);\n\nexport default HarvestCompleteModal;\n","import { Modal } from 'antd';\nimport { formatNumber } from '../../entities/util-functions';\nimport { CloseIcon, Subtitle } from '../shared';\nimport { IHarvestSpat } from '../../entities/growing.entities';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n visible: boolean;\n onClose: () => void;\n className?: string;\n data?: IHarvestSpat[];\n}\n\nconst HarvestSpatsModal = ({ visible, onClose, className, data }: Props) => {\n const lang = useSelector(selectLang);\n\n return (\n }\n width={700}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Original harvested spats')}\n \n
\n
\n
\n
\n {translate(lang, 'Source name')}\n
\n
\n {translate(lang, 'Harvest amount')} (kg)\n
\n
\n {translate(lang, 'Harvested length')} (m)\n
\n
\n
\n {data?.map((x, i) => (\n
\n
{x.spat_storage.source}
\n
{formatNumber(x.amount)}
\n
{formatNumber(x.line_length)}
\n
\n ))}\n
\n
\n
{translate(lang, 'Total')}
\n
\n {formatNumber(data?.reduce((p, c) => p + c.amount, 0) ?? 0)}\n
\n
\n {formatNumber(data?.reduce((p, c) => p + c.line_length, 0) ?? 0)}\n
\n
\n
\n
\n \n );\n};\n\nexport default HarvestSpatsModal;\n","import { useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport moment from 'moment';\nimport { Modal, Table } from 'antd';\nimport {\n checkRolePermission,\n formatNumber,\n numberToMoneyStr,\n} from '../../entities/util-functions';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { ModalComponent, Title } from '../shared';\nimport ReactImageGallery from 'react-image-gallery';\nimport GrowerDetailModal from '../farm-modals/GrowerDetailModal';\nimport { EditFilled } from '@ant-design/icons';\nimport HarvestCompleteModal from '../farm-modals/HarvestCompleteModal';\nimport HarvestSpatsModal from '../farm-modals/HarvestSpatsModal';\nimport GrowerHarvestModal from '../farm-modals/GrowerHarvestModal';\nimport { TBusinessType } from '../../entities/general.entities';\nimport {\n IHarvestResource,\n IHarvestSpat,\n IMusselHarvest,\n IOysterHarvest,\n ISeaweedHarvest,\n} from '../../entities/growing.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n SelectAccountSetting,\n SelectIsGrower,\n SelectProfileRole,\n} from '../../store/extra/extra.selector';\nimport { directionChar } from '../../lib/form.helpers';\nimport { ILineResource } from '../../entities/farms.entities';\n\nconst displayHarvestTime = (st: number, en: number) => {\n st = st * 1000;\n en = en * 1000;\n return moment(st).format('YYYY-MM-DD') === moment(en).format('YYYY-MM-DD')\n ? `${moment(st).format('LT')} - ${moment(en).format('LT')}`\n : `${moment(st).format('MMM Do')} ${moment(st).format('LT')} - ${moment(\n en,\n ).format('MMM Do')} ${moment(en).format('LT')}`;\n};\n\ninterface IColumn {\n key: string;\n title: string;\n dataIndex?: string;\n render: any;\n}\n\nconst oysterColumns = [\n {\n key: 'id',\n title: 'ID',\n render: (x: any) => {x.id},\n },\n {\n key: 'season_name',\n title: 'Season',\n render: (x: IOysterHarvest) => {x.season_name},\n },\n {\n key: 'complete_date',\n title: 'Harvested date',\n render: (x: IOysterHarvest) => (\n {defaultDateFormat(x.complete_date)}\n ),\n },\n {\n key: 'amount',\n title: 'Amount',\n render: (x: IOysterHarvest) =>\n x.line_length === null || x.line_length === undefined ? (\n <>\n {x.measurement_units === 'pcs' ? (\n {`${formatNumber(x.amount_pcs)} pcs`}\n ) : (\n {`${formatNumber(x.amount_dz)} dz`}\n )}\n \n ) : (\n \n {x.measurement_units === 'pcs'\n ? `${formatNumber(x.amount_pcs)} pcs / ${x.line_length} ${\n x.line.farming_method\n }`\n : `${formatNumber(x.amount_dz)} dz / ${x.line_length} ${\n x.line.farming_method\n }`}\n \n ),\n },\n {\n key: 'income',\n title: 'Income',\n render: (x: IOysterHarvest) => (\n {`$${numberToMoneyStr(x.income ?? 0)}`}\n ),\n },\n {\n key: 'is_full',\n title: 'F/P',\n render: (x: IOysterHarvest) => (\n {x.is_full ? 'Full' : 'Partial'}\n ),\n },\n {\n key: 'is_final',\n title: 'Final',\n render: (x: IOysterHarvest) => (\n {x.is_final ? 'Final' : 'Middle'}\n ),\n },\n];\n\nconst seaweedColumns = [\n {\n key: 'id',\n title: 'ID',\n render: (x: ISeaweedHarvest) => {x.id},\n },\n {\n key: 'season_name',\n title: 'Season',\n render: (x: ISeaweedHarvest) => {x.season_name},\n },\n {\n key: 'complete_date',\n title: 'Harvested date',\n render: (x: ISeaweedHarvest) => (\n {defaultDateFormat(x.complete_date)}\n ),\n },\n {\n key: 'tank_area',\n title: 'Tank area',\n render: (x: ISeaweedHarvest) => {`${x.tank_area} m²`},\n },\n {\n key: 'amount',\n title: 'Amount',\n render: (x: ISeaweedHarvest) => (\n {`${formatNumber(x.amount)} kg`}\n ),\n },\n {\n key: 'income',\n title: 'Income',\n render: (x: ISeaweedHarvest) => (\n {`$${numberToMoneyStr(x.income ?? 0)}`}\n ),\n },\n {\n key: 'is_full',\n title: 'F/P',\n render: (x: ISeaweedHarvest) => (\n {x.is_full ? 'Full' : 'Partial'}\n ),\n },\n {\n key: 'is_final',\n title: 'Final',\n render: (x: ISeaweedHarvest) => (\n {x.is_final ? 'Final' : 'Middle'}\n ),\n },\n];\n\nconst columns = [\n {\n key: 'id',\n title: 'ID',\n render: (x: IMusselHarvest) => {x.id},\n },\n {\n key: 'season_name',\n title: 'Season',\n render: (x: IMusselHarvest) => {x.season_name},\n },\n {\n key: 'complete_date',\n title: 'Harvested date',\n render: (x: IMusselHarvest) => (\n {defaultDateFormat(x.complete_date)}\n ),\n },\n {\n key: 'line_length',\n title: 'Harvested length',\n render: (x: IMusselHarvest) => (\n \n {x.line_length !== null ? `${formatNumber(x.line_length)} m` : '-'}\n \n ),\n },\n {\n key: 'company',\n title: 'Company',\n render: (x: IMusselHarvest) => {x.company},\n },\n {\n key: 'harvest_number',\n title: 'Harvest number',\n render: (x: IMusselHarvest) => {x.harvest_number},\n },\n {\n key: 'vessel',\n title: 'Vessel',\n render: (x: IMusselHarvest) => {x.vessel},\n },\n {\n key: 'time_tracks',\n title: 'Time Track',\n render: (x: IMusselHarvest) =>\n x.time_tracks &&\n x.time_tracks.map((t: any, i: number) => (\n
{displayHarvestTime(t.start_time, t.finish_time)}
\n )),\n },\n {\n key: 'harvester_name',\n title: 'Harvester name',\n render: (x: IMusselHarvest) => {x.harvester_name},\n },\n {\n key: 'amount',\n title: 'Amount',\n render: (x: IMusselHarvest) => (\n \n {x.is_waste ? 'Stripped to waste' : `${formatNumber(x.amount)} kg`}\n \n ),\n },\n {\n key: 'income',\n title: 'Income',\n render: (x: IMusselHarvest) => (\n {x.is_waste ? '' : `$${numberToMoneyStr(x.income ?? 0)}`}\n ),\n },\n {\n key: 'is_full',\n title: 'F/P',\n render: (x: IMusselHarvest) => (\n {x.is_full ? 'Full' : 'Partial'}\n ),\n },\n {\n key: 'is_final',\n title: 'Final',\n render: (x: IMusselHarvest) => (\n {x.is_final ? 'Final' : 'Middle'}\n ),\n },\n];\n\nconst growerColumns = [\n {\n key: 'id',\n title: 'ID',\n render: (x: IMusselHarvest) => {x.id},\n },\n {\n key: 'complete_date',\n dataIndex: 'complete_date',\n title: 'Harvested date',\n render: (x: number) => {defaultDateFormat(x)},\n },\n {\n key: 'bags_quantity',\n dataIndex: 'bags_quantity',\n title: 'Bags',\n render: (x: number) => {x},\n },\n {\n key: 'port_of_unload',\n dataIndex: 'port_of_unload',\n title: 'Port of unload',\n render: (x: number) => {x},\n },\n {\n key: 'rope_bags_quantity',\n dataIndex: 'rope_bags_quantity',\n title: 'Rope Bags',\n render: (x: number) => {x},\n },\n {\n key: 'company',\n dataIndex: 'company',\n title: 'Company',\n render: (x: string) => {x},\n },\n {\n key: 'harvest_number',\n dataIndex: 'harvest_number',\n title: 'Harvest number',\n render: (x: string) => {x},\n },\n {\n key: 'vessel',\n dataIndex: 'vessel',\n title: 'Vessel',\n render: (x: string) => {x},\n },\n {\n key: 'amount',\n title: 'Amount',\n render: (x: IMusselHarvest) => (\n \n {x.is_waste ? 'Stripped to waste' : `${formatNumber(x.amount)} kg`}\n \n ),\n },\n {\n key: 'income',\n title: 'Income',\n render: (x: IMusselHarvest) => (\n {x.is_waste ? '' : `$${numberToMoneyStr(x.income ?? 0)}`}\n ),\n },\n {\n key: 'is_full',\n dataIndex: 'is_full',\n title: 'F/P',\n render: (x: boolean) => {x ? 'Full' : 'Partial'},\n },\n];\n\ninterface IGalleryImages {\n original: string;\n thumbnail: string;\n}\n\ninterface Props {\n lineData?: ILineResource;\n harvests: IHarvestResource[];\n simple?: boolean;\n onUpdateRow?: (d: any) => void;\n type: TBusinessType;\n farmID: number;\n}\n\nconst HarvestsTable = ({\n lineData,\n harvests,\n simple,\n onUpdateRow,\n type: businessType,\n farmID,\n}: Props) => {\n const history = useHistory();\n const lang = useSelector(selectLang);\n const isGrower = SelectIsGrower(farmID);\n const accSetting = SelectAccountSetting(farmID);\n const myRole = SelectProfileRole(farmID);\n\n const [images, setImages] = useState();\n const [infoText, setInfoText] = useState();\n const [openHarvest, setOpenHarvest] = useState();\n const [editHarvest, setEditHarvest] = useState();\n const [orgSpats, setOrgSpats] = useState();\n\n const openImages = (images: string[]) => {\n setImages(\n images.map(image => {\n return {\n original: image,\n thumbnail: image,\n };\n }),\n );\n };\n const openInfo = (comment: any) => {\n setInfoText(comment && comment.length > 0 ? comment : 'No comments yet');\n };\n\n const SpatColumn = (x: any) =>\n !x.spat_source\n ? 'Catch Spat'\n : x.spat_source\n ? businessType === 'MUSSEL'\n ? `${x.spat_source.source} - ${x.amount} kg`\n : `${x.spat_source.source} - ${x.amount_dz} dz`\n : '-';\n\n const tableColumns = () => {\n let result: IColumn[] =\n businessType === 'MUSSEL'\n ? isGrower\n ? [...growerColumns]\n : [...columns]\n : businessType === 'OYSTER'\n ? [...oysterColumns]\n : [...seaweedColumns];\n\n result.push({\n key: 'spat_storage',\n title: 'Spat Storage',\n render: (x: any) => {SpatColumn(x)},\n });\n\n if (isGrower) {\n if (!simple)\n result.push(\n {\n key: 'expense_items',\n title: translate(lang, 'Items'),\n render: (x: IHarvestResource) =>\n !!x.expense_items && x.expense_items.length > 0 ? (\n {\n e.stopPropagation();\n setOpenHarvest(x);\n }}\n >\n {translate(lang, 'View')}\n \n ) : (\n \n ),\n },\n {\n key: 'pdf_file',\n title: 'PDF File',\n render: (x: IMusselHarvest) =>\n !!x.pdf_files ? (\n x.pdf_files.map((f, i) => (\n e.stopPropagation()}\n >\n {`${translate(lang, 'View')} (${i + 1})`}\n \n ))\n ) : (\n \n ),\n },\n );\n } else {\n if (simple) {\n result.push({\n key: 'direction',\n title: translate(lang, 'Direction'),\n render: (x: IHarvestResource) => (\n
{directionChar(x.direction)}
\n ),\n });\n }\n }\n if (!simple) {\n result.push(\n {\n key: 'comment',\n dataIndex: 'comment',\n title: 'Comment',\n render: (x: any) => (\n undefined}\n onClick={e => {\n e.stopPropagation();\n openInfo(x);\n }}\n >\n {translate(lang, 'View')}\n \n ),\n },\n {\n key: 'images',\n dataIndex: 'images',\n title: translate(lang, 'Photo'),\n render: (x: any) =>\n !!x && x.length > 0 ? (\n {\n e.stopPropagation();\n openImages(x);\n }}\n >\n {translate(lang, 'View')}\n \n ) : (\n \n ),\n },\n );\n }\n if (businessType === 'MUSSEL' && !!accSetting?.track_original_spat) {\n result.push({\n key: 'harvest_spats',\n title: 'View original spats',\n render: (x: IMusselHarvest) =>\n !!x.harvest_spats && x.harvest_spats.length > 0 ? (\n {\n e.stopPropagation();\n setOrgSpats(x.harvest_spats);\n }}\n >\n {translate(lang, 'View')}\n \n ) : (\n \n ),\n });\n }\n result.push({\n key: 'action',\n title: '',\n render: (x: IHarvestResource) =>\n !!onUpdateRow &&\n checkRolePermission({ allowedRoles: ['owner', 'admin'] }, myRole) ? (\n {\n e.stopPropagation();\n setEditHarvest(x);\n }}\n >\n \n \n ) : (\n <>\n ),\n });\n if (!accSetting?.show_budget_menu) {\n result = result.filter(x => x.key !== 'income');\n }\n return result.map(x => ({ ...x, title: translate(lang, x.title) }));\n };\n\n return (\n
\n \n {translate(lang, 'Harvests')}\n \n a.complete_date - b.complete_date,\n )}\n onRow={dataRow => ({\n onClick: () => history.push(`/harvest/${dataRow.id}`),\n })}\n />\n {infoText !== undefined && (\n setInfoText(undefined)}\n type=''\n title='Comment'\n text={translate(lang, infoText)}\n />\n )}\n {!!images && images.length > 0 && (\n setImages(undefined)}\n onCancel={() => setImages(undefined)}\n width={1000}\n >\n \n \n )}\n {!!openHarvest && (\n setOpenHarvest(undefined)}\n />\n )}\n {!!editHarvest && !!onUpdateRow && (\n <>\n {isGrower ? (\n {\n setEditHarvest(undefined);\n onUpdateRow(d);\n }}\n onClose={() => setEditHarvest(undefined)}\n harvestData={editHarvest as IMusselHarvest}\n updateId={editHarvest.id}\n />\n ) : (\n setEditHarvest(undefined)}\n onConfirm={d => {\n setEditHarvest(undefined);\n onUpdateRow(d);\n }}\n updateID={editHarvest.id}\n />\n )}\n \n )}\n {!!orgSpats && (\n setOrgSpats(undefined)}\n data={orgSpats}\n />\n )}\n
\n );\n};\n\nexport default HarvestsTable;\n","import { Modal } from 'antd';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { useEffect, useState, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { ILineResource } from '../../entities/farms.entities';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { parseImageUrlToFileItem } from '../../util/getBase64';\nimport toggleSecondMillisecond from '../../util/toggleSecondMillisecond';\nimport {\n Button,\n CloseIcon,\n Datepicker,\n Dropdown,\n Input,\n Subtitle,\n} from '../shared';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../shared/input/TimeTrackInput';\nimport PicturesWall from '../shared/pictures-wall/PicturesWall';\nimport moment from 'moment';\nimport { ITimeRange } from '../../entities/general.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n SelectFarmsByFarmID,\n SelectIsBudgetVisible,\n} from '../../store/extra/extra.selector';\nimport './styles.scss';\n\nconst typeOptions = [\n {\n id: 'VISUAL_ASSESSMENT',\n value: 'VISUAL_ASSESSMENT',\n label: 'Visual Assessment',\n },\n { id: 'LINE_CLEANING', value: 'LINE_CLEANING', label: 'Line Cleaning' },\n {\n id: 'GENERAL_MAINTENANCE',\n value: 'GENERAL_MAINTENANCE',\n label: 'General Maintenance',\n },\n];\n\ntype typeField = 'VISUAL_ASSESSMENT' | 'LINE_CLEANING' | 'GENERAL_MAINTENANCE';\n\ninterface IForm {\n maintain_date: number;\n type: typeField;\n comment: string | null;\n images: UploadFile[] | null;\n cost?: number;\n time_tracks?: ITimeRange[];\n}\n\nconst defaultForm: IForm = {\n maintain_date: moment().toDate().getTime(),\n type: 'VISUAL_ASSESSMENT' as typeField,\n comment: '',\n images: [],\n time_tracks: [],\n};\n\ninterface Props {\n visible: boolean;\n title: string;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n data?: any;\n lineData: ILineResource;\n onlyView?: boolean;\n updateId?: number;\n confirmBtnLabel?: string;\n overConfirm?: (data: any) => void;\n lineChangeable?: boolean;\n}\n\nconst MaintenanceModal = ({\n visible,\n title,\n onCancel,\n onConfirm,\n data,\n lineData,\n onlyView,\n updateId,\n confirmBtnLabel,\n overConfirm,\n lineChangeable,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const farmsData = SelectFarmsByFarmID(lineData.farm_id);\n const visibleCost = SelectIsBudgetVisible(lineData.farm_id);\n\n const [disabled, setDisabled] = useState(false);\n const [form, setForm] = useState(defaultForm);\n const [focFarmId, setFocFarmId] = useState(lineData.farm_id);\n const [curLine, setCurLine] = useState(lineData);\n\n const updateForm = (key: string, val: any) => {\n setForm({ ...form, [key]: val });\n };\n const handleLineChange = (v: string) => {\n const farm = farmsData.find(x => x.id === focFarmId);\n if (!farm) return;\n const line = farm.lines.find(x => x.id === Number(v));\n if (!line?.growing_cycle) return;\n setCurLine(line);\n };\n const validData = () => {\n if (\n form.images &&\n form.images.length <= 0 &&\n (form.comment?.length ?? 0) <= 0\n ) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(\n lang,\n 'No empty comment and images are allowed at the same time.',\n ),\n }),\n );\n return null;\n }\n let res: any = { ...form };\n if (res.time_tracks) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (tt === false) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, '_invalid_time_range'),\n }),\n );\n return null;\n }\n res.time_tracks = tt;\n }\n res.maintain_date = Math.floor(form.maintain_date / 1000);\n res.line_id = lineData.id;\n res.seeding_id = curLine.growing_cycle?.main_seed.id;\n return res;\n };\n const handleConfirmClick = async () => {\n const form = validData();\n if (!form) return;\n\n setDisabled(true);\n if (!!overConfirm) {\n overConfirm(form);\n return;\n }\n const res = !updateId\n ? await sendSingleRequest(\n form,\n 'POST',\n 'api/farm/line/seed/maintenance',\n true,\n )\n : await sendSingleRequest(\n form,\n 'PUT',\n `api/farm/line/seed/maintenance/${updateId}`,\n true,\n );\n if (res.status) {\n onConfirm(res.data);\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Invalid request'),\n }),\n );\n setDisabled(false);\n }\n };\n\n useEffect(() => {\n if (data) {\n let tmp: any = {\n maintain_date: 1000 * data.maintain_date,\n type: data.type,\n comment: data.comment,\n images: [],\n };\n if (data.time_tracks) {\n tmp.time_tracks = data.time_tracks.map((x: any) => ({\n start_time: toggleSecondMillisecond(x.start_time),\n finish_time: toggleSecondMillisecond(x.finish_time),\n }));\n }\n if (visibleCost && data.expense_items && data.expense_items.length > 0) {\n tmp.cost = data.expense_items.reduce(\n (p: any, c: any) => p + c.amount,\n 0,\n );\n } else if (visibleCost && data.cost) {\n tmp.cost = data.cost;\n }\n if (data.images && data.images.length > 0) {\n tmp.images = [];\n for (let x of data.images) {\n if (typeof x === 'object' && x !== null) {\n tmp.images.push(x);\n } else {\n tmp.images.push(parseImageUrlToFileItem(x));\n }\n }\n }\n setForm(tmp);\n }\n }, [data]);\n\n const farmOptions = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }));\n const lineOptions = farmsData\n .find(x => x.id === focFarmId)\n ?.lines.filter(x => !!x.growing_cycle)\n .map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n }));\n\n return (\n }\n width={600}\n >\n
\n
\n \n {translate(lang, title)}\n \n
\n
\n {lineChangeable && (\n
\n
\n setFocFarmId(Number(v))}\n />\n
\n
\n Number(x.id) === curLine.id)\n ? curLine.id.toString()\n : undefined\n }\n onChange={handleLineChange}\n />\n
\n
\n )}\n
\n \n e && updateForm('maintain_date', e.toDate().getTime())\n }\n />\n
\n
\n updateForm('type', val)}\n disabled={onlyView}\n />\n
\n
\n updateForm('comment', e.target.value)}\n disabled={onlyView}\n />\n
\n {form.time_tracks && (\n updateForm('time_tracks', t)}\n disabled={onlyView}\n />\n )}\n {form.images && (\n
\n updateForm('images', img)}\n />\n
\n )}\n {!!visibleCost && (\n
\n updateForm('cost', e.target.value)}\n disabled={onlyView}\n />\n
\n )}\n
\n
\n
\n \n {translate(lang, confirmBtnLabel ?? 'Confirm')}\n \n
\n \n \n );\n};\n\nexport default MaintenanceModal;\n","import { useEffect, useMemo, useState } from 'react';\nimport { Modal } from 'antd';\nimport { ILineResource } from '../../entities/farms.entities';\nimport {\n Button,\n CloseIcon,\n Datepicker,\n Dropdown,\n Input,\n Subtitle,\n} from '../shared';\nimport { useDispatch, useSelector } from 'react-redux';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { IInventoryResource } from '../../entities/inventory.entities';\nimport { sendSingleRequest } from '../../apis';\nimport moment from 'moment';\nimport { toMillisecond, toSecond } from '../../util/toggleSecondMillisecond';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../shared/input/TimeTrackInput';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport { ITimeRange } from '../../entities/general.entities';\nimport { IMusselCycle } from '../../entities/growing.entities';\nimport { loadInventories } from '../../store/inventories/inventories.actions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n SelectFarmsByFarmID,\n SelectInventoriesByFarmID,\n} from '../../store/extra/extra.selector';\n\nconst typeOptions = [\n { id: 'IN', value: 'IN', label: 'Remove from line to inventory' },\n { id: 'OUT', value: 'OUT', label: 'Added to the line' },\n];\n\ninterface IForm {\n type: 'IN' | 'OUT';\n quantity?: number;\n manage_date: number;\n time_tracks?: ITimeRange[];\n}\n\ninterface Props {\n visible: boolean;\n className?: string;\n title: string;\n data?: {\n seeding_id?: number;\n inventory_id: number;\n quantity: number;\n status: 'IN' | 'OUT';\n manage_date?: number;\n time_tracks?: ITimeRange[];\n };\n onCancel: () => void;\n onConfirm: (data: any) => void;\n lineData: ILineResource;\n onlyView?: boolean;\n updateId?: number;\n overConfirm?: (data: any) => void;\n lineChangeable?: boolean;\n manageCycle?: IMusselCycle;\n}\n\nconst FloatManageModal = ({\n visible,\n className,\n title,\n data,\n onCancel,\n onConfirm,\n lineData,\n onlyView,\n updateId,\n overConfirm,\n lineChangeable,\n manageCycle,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const inventories = SelectInventoriesByFarmID(lineData.farm_id);\n const farmsData = SelectFarmsByFarmID(lineData.farm_id);\n\n const lastSubmersion = useMemo(() => {\n if (!manageCycle) {\n return null;\n }\n if (manageCycle.seed_manages.length <= 0) {\n return manageCycle.main_seed.submersion;\n }\n const arr = [...manageCycle.seed_manages];\n arr.sort((a, b) => b.manage_date - a.manage_date);\n\n return arr[0].submersion;\n }, [manageCycle]);\n\n const [disabled, setDisabled] = useState(false);\n const [curIvt, setCurIvt] = useState();\n const [formData, setFormData] = useState({\n type: data?.status ?? 'IN',\n quantity: data?.quantity,\n manage_date: toMillisecond(data?.manage_date),\n time_tracks:\n data?.time_tracks?.map(x => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n })) ?? [],\n });\n const [focFarmId, setFocFarmId] = useState(lineData.farm_id);\n const [curLine, setCurLine] = useState(lineData);\n const [depth, setDepth] = useState(lastSubmersion);\n\n const { ivtFloats, mainSeed } = useMemo(\n () => ({\n ivtFloats: curLine.growing_cycle?.inventories_sum,\n mainSeed: curLine.growing_cycle?.main_seed,\n }),\n [curLine],\n );\n const availableQty = useMemo(() => {\n if (!curIvt) return 0;\n if (formData.type === 'OUT') {\n return curIvt.available_quantity;\n } else {\n return ivtFloats?.find(x => x.inventory_id === curIvt.id)?.quantity ?? 0;\n }\n }, [curIvt, ivtFloats, formData.type]);\n\n const currentFarm = farmsData.find(x => x.id === focFarmId);\n\n const handleLineChange = (v: string) => {\n const farm = farmsData.find(x => x.id === focFarmId);\n if (!farm) return;\n const line = farm.lines.find(x => x.id === Number(v));\n if (!line?.growing_cycle) return;\n setCurLine(line);\n };\n const selectInventory = (id: string) => {\n const ivt = inventories.find(x => x.id === Number(id));\n setCurIvt(ivt);\n };\n const updateForm = (key: keyof IForm, value: any) => {\n if (key === 'quantity') {\n value = value.length <= 0 ? undefined : Number(value);\n }\n setFormData({ ...formData, [key]: value });\n };\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n\n const submitLineDepth = async () => {\n if (!manageCycle || !depth || Number(depth) === Number(lastSubmersion)) {\n return false;\n }\n const form = {\n seeding_id: manageCycle.main_seed.id,\n manage_date: toSecond(moment().toDate().getTime()),\n submersion: depth,\n };\n const res = await sendSingleRequest(\n form,\n 'POST',\n 'api/farm/line/seed/manage',\n true,\n );\n if (res.status) {\n alert(translate(lang, 'Line depth has been saved successfully!'));\n } else {\n alert(translate(lang, res.data?.message ?? 'Failed to save line depth'));\n }\n return true;\n };\n\n const validForm = () => {\n if (!curIvt) {\n return 'Please select inventory';\n }\n if (\n formData.quantity === undefined ||\n formData.quantity === null ||\n formData.quantity < 0 ||\n formData.quantity > availableQty\n ) {\n return formData.quantity === undefined || formData.quantity === null\n ? 'Please input quantity'\n : formData.quantity < 0\n ? 'Quantity must be greater than 0'\n : translate(lang, '_float_no_enough');\n }\n const time_tracks = formData.time_tracks\n ? toSecTimeTracks(formData.time_tracks)\n : [];\n if (time_tracks === false) {\n return translate(lang, '_invalid_time_range');\n }\n const seeding_id =\n lineData.id === curLine.id\n ? data?.seeding_id ?? mainSeed?.id\n : mainSeed?.id;\n if (!seeding_id) {\n return 'The line is not growing';\n }\n return {\n inventory_id: curIvt.id,\n quantity: formData.quantity,\n type: formData.type,\n manage_date: toSecond(formData.manage_date),\n time_tracks,\n seeding_id,\n };\n };\n const handleConfirmClick = async () => {\n const form = validForm();\n if (typeof form === 'string') {\n setDisabled(true);\n const dr = await submitLineDepth();\n setDisabled(false);\n if (!dr) {\n showError(form);\n } else {\n onConfirm(dr);\n }\n return;\n }\n if (!form.quantity) {\n setDisabled(true);\n const dr = await submitLineDepth();\n setDisabled(false);\n if (dr) {\n onConfirm(dr);\n } else {\n onCancel();\n }\n return;\n }\n setDisabled(true);\n if (overConfirm) {\n overConfirm(form);\n return;\n }\n const res = !updateId\n ? await sendSingleRequest(\n form,\n 'POST',\n `api/farm/line/seed/inventory-seeds/${mainSeed?.id}`,\n true,\n )\n : await sendSingleRequest(\n {\n floating_id: updateId,\n quantity: form.quantity,\n manage_date: form.manage_date,\n time_tracks: form.time_tracks,\n },\n 'PUT',\n 'api/farm/line/seed/inventory-seeds',\n true,\n );\n if (res.status) {\n await submitLineDepth();\n dispatch(loadFarmsData());\n dispatch(loadInventories());\n onConfirm(res.data);\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(\n lang,\n res.data?.message ?? 'Floats added successfully',\n ),\n }),\n );\n } else {\n showError(res.data?.message ?? 'Failed');\n setDisabled(false);\n }\n };\n\n useEffect(() => {\n const tmp = data ? inventories.find(x => x.id === data.inventory_id) : null;\n if (data && tmp) {\n setCurIvt(tmp);\n }\n }, [data, inventories]);\n\n const farmOptions = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }));\n const lineOptions = farmsData\n .find(x => x.id === focFarmId)\n ?.lines.filter(x => !!x.growing_cycle)\n .map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n }));\n const inventoriesOption = inventories.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n }));\n\n return (\n }\n width={650}\n >\n
\n
\n \n {title}\n \n
\n
\n {lineChangeable && (\n
\n
\n setFocFarmId(Number(v))}\n />\n
\n
\n Number(x.id) === curLine.id)\n ? curLine.id.toString()\n : curLine.line_name\n }\n onChange={handleLineChange}\n />\n
\n
\n )}\n
\n
\n \n updateForm(\n 'manage_date',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n )\n }\n required\n disabled={onlyView}\n />\n
\n
\n selectInventory(x)}\n disabled={onlyView || !!updateId}\n />\n
\n
\n {!!curIvt && (\n
\n
\n updateForm('type', v)}\n disabled={onlyView || !!updateId}\n />\n
\n
\n updateForm('quantity', e.target.value)}\n disabled={onlyView}\n />\n
\n
\n )}\n {!!formData.time_tracks && (\n updateForm('time_tracks', t)}\n disabled={onlyView}\n />\n )}\n
\n {!!manageCycle && (\n
\n
\n \n {translate(lang, 'Line depth manage')}\n \n
\n \n setDepth(\n e.target.value.length <= 0 ? null : Number(e.target.value),\n )\n }\n />\n
\n )}\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n \n );\n};\n\nexport default FloatManageModal;\n","import { useSelector } from 'react-redux';\nimport { ILineResource } from '../../../entities/farms.entities';\nimport { translate } from '../../../lib/lang.helper';\nimport { CheckboxButton, Dropdown } from '../../shared';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\n\ninterface Props {\n status: boolean;\n onChange: (status: boolean) => void;\n lineData: ILineResource;\n batchID?: number;\n onBatchSelect: (id: number | undefined) => void;\n}\n\nconst BatchAssessView = ({\n status,\n onChange,\n lineData,\n batchID,\n onBatchSelect,\n}: Props) => {\n const lang = useSelector(selectLang);\n\n const toggleCheck = (c: boolean) => {\n onChange(c);\n if (!c) onBatchSelect(undefined);\n };\n\n const spatsOptions = lineData?.growing_cycle?.seedings\n .filter(x => !!x.spat_source_id)\n .map(x => ({\n id: x.spat_source_id?.toString() as string,\n value: x.spat_source_id?.toString() as string,\n label: `${defaultDateFormat(x.planned_date_seed)}, ${translate(\n lang,\n 'Batch',\n )} ${x.spat_source}`,\n }));\n\n return (\n
\n toggleCheck(e.target.checked)}\n />\n {status && !!spatsOptions && (\n onBatchSelect(Number(v))}\n />\n )}\n
\n );\n};\n\nexport default BatchAssessView;\n","import { Modal } from 'antd';\nimport moment from 'moment';\nimport { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../../apis';\nimport { IMusselLineResource } from '../../../entities/farms.entities';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { toMillisecond, toSecond } from '../../../util/toggleSecondMillisecond';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n Dropdown,\n Input,\n Paragrapgh,\n Subtitle,\n} from '../../shared';\nimport ModalFeedbackView from '../../shared/feedback/ModalFeedbackView';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { ICustomValue } from '../../../entities/automation.entities';\nimport { Link } from 'react-router-dom';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport {\n SelectAssessFields,\n SelectMusselFarmsByFarmID,\n} from '../../../store/extra/extra.selector';\nimport { getEstHarvestDate } from '../../../lib/farm.helpers';\nimport BatchAssessView from './BatchAssessView';\nimport DirectionForm from '../../farm-util/DirectionForm';\nimport { roundNumber } from '../../../entities/util-functions';\n\ninterface IFormData {\n size_min: number | null;\n size_max: number | null;\n size_avg: number | null;\n btm_size_min?: number | null;\n btm_size_max?: number | null;\n btm_size_avg?: number | null;\n assessment_date: number;\n planned_date_harvest: number;\n ready_to_harvest: boolean;\n estimated_amount?: number | null;\n comment: string | null;\n origin_spat_id?: number | null;\n direction: string | null;\n time_tracks?: ITimeRange[];\n images: any[];\n custom_values?: ICustomValue[];\n hide_specie?: boolean;\n seeding_id?: number;\n}\n\nconst defaultForm: IFormData = {\n size_min: null,\n size_max: null,\n size_avg: null,\n btm_size_min: null,\n btm_size_max: null,\n btm_size_avg: null,\n planned_date_harvest: moment().toDate().getTime(),\n assessment_date: moment().toDate().getTime(),\n comment: null,\n ready_to_harvest: false,\n direction: null,\n time_tracks: [],\n images: [],\n};\n\nconst getPrevPlannedDateHarvest = (line: IMusselLineResource) => {\n const lastDate = getEstHarvestDate(line);\n return lastDate ? toMillisecond(lastDate) : defaultForm.planned_date_harvest;\n};\n\ninterface Props {\n visible: boolean;\n title?: string;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n data?: any;\n lineData: IMusselLineResource;\n updateID?: number;\n onlyView?: boolean;\n overConfirm?: (data: any) => void;\n lineChangeable?: boolean;\n}\n\nconst MusselAssessModal = ({\n visible,\n title,\n onCancel,\n onConfirm,\n data,\n lineData,\n updateID,\n onlyView,\n overConfirm,\n lineChangeable,\n}: Props) => {\n const dispatch = useDispatch();\n\n const farmsData = SelectMusselFarmsByFarmID(lineData.farm_id);\n const customFields = SelectAssessFields(lineData.farm_id);\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [formData, setFormData] = useState({\n ...defaultForm,\n planned_date_harvest: getPrevPlannedDateHarvest(lineData),\n });\n const [warning, setWaring] = useState(false);\n const [errors, setErrors] = useState<{\n min: string | null;\n max: string | null;\n avg: string | null;\n }>({\n min: null,\n max: null,\n avg: null,\n });\n const [focFarmId, setFocFarmId] = useState(lineData.farm_id);\n const [curLine, setCurLine] = useState(lineData);\n const [trackOrigin, setTrackOrigin] = useState(!!data?.origin_spat_id);\n const [assessBottom, setAssessBottom] = useState(!!data?.btm_size_avg);\n const [customValues, setCustomValues] = useState(\n customFields.map(x => {\n const d =\n data && data.custom_values\n ? data.custom_values.find((y: ICustomValue) => y.field_id === x.id)\n : null;\n return {\n input_type: x.input_type,\n field_label: x.name,\n options: x.options\n ?.split(',')\n .map(t => ({ id: t, label: t, value: t })),\n field_id: x.id,\n field_val: d?.field_val ?? '',\n data_type: x.data_type,\n unit: x.unit,\n };\n }),\n );\n\n const handleLineChange = (v: string) => {\n const farm = farmsData.find(x => x.id === focFarmId);\n if (!farm) return;\n const line = farm.lines.find(x => x.id === Number(v));\n if (!line?.growing_cycle) return;\n setCurLine(line);\n setFormData(prv => ({\n ...prv,\n planned_date_harvest: toMillisecond(\n line.growing_cycle?.main_seed.planned_date_harvest ?? 0,\n ),\n }));\n };\n const updateForm = (key: keyof IFormData, val: any) => {\n if (\n [\n 'size_min',\n 'size_max',\n 'size_avg',\n 'btm_size_min',\n 'btm_size_max',\n 'btm_size_avg',\n 'estimated_amount',\n ].includes(key)\n ) {\n val = val.length <= 0 ? null : Number(val);\n }\n let tmp = { ...formData, [key]: val };\n if (key === 'size_min') {\n setErrors(p => ({ ...p, min: null, avg: null }));\n tmp.size_avg = Math.round(\n (Number(tmp.size_max) + Number(tmp.size_min)) / 2,\n );\n } else if (key === 'size_max') {\n setErrors(p => ({ ...p, max: null, avg: null }));\n tmp.size_avg = Math.round(\n (Number(tmp.size_max) + Number(tmp.size_min)) / 2,\n );\n } else if (key === 'btm_size_min' || key === 'btm_size_max') {\n tmp.btm_size_avg = Math.round(\n (Number(tmp.btm_size_max) + Number(tmp.btm_size_min)) / 2,\n );\n }\n setFormData(tmp);\n };\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n\n const validForm = () => {\n let res: any = true;\n let tmpErr = { ...errors };\n if (!formData.size_min) {\n tmpErr.min = translate(lang, 'Required field');\n res = false;\n }\n if (!formData.size_max) {\n tmpErr.max = translate(lang, 'Required field');\n res = false;\n }\n if (!formData.size_avg) {\n tmpErr.avg = translate(lang, 'Required field');\n res = false;\n }\n if (Number(formData.size_min) > Number(formData.size_max)) {\n tmpErr.avg = translate(\n lang,\n 'Maximum value should be equal or greater than minimum value',\n );\n res = false;\n }\n if (\n formData.time_tracks &&\n toSecTimeTracks(formData.time_tracks) === false\n ) {\n showError('_invalid_time_range');\n res = false;\n }\n setErrors(tmpErr);\n if (!res) return null;\n\n res = {\n ...formData,\n assessment_date: toSecond(formData.assessment_date),\n planned_date_harvest: toSecond(formData.planned_date_harvest),\n seeding_id: formData?.seeding_id ?? curLine.growing_cycle?.main_seed.id,\n estimated_amount: formData.estimated_amount\n ? 1000 * formData.estimated_amount\n : formData.estimated_amount,\n line_id: curLine.id,\n };\n if (assessBottom) {\n if (\n !formData.btm_size_avg ||\n !formData.btm_size_max ||\n !formData.btm_size_min\n ) {\n showError('Bottom size measuring can not be empty');\n return null;\n }\n if (formData.btm_size_max < formData.btm_size_min) {\n showError('Bottom size measuring range is incorrect');\n return null;\n }\n } else {\n res.btm_size_min = res.btm_size_max = res.btm_size_avg = undefined;\n }\n\n if (res.time_tracks && res.time_tracks.length > 0) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (!tt) {\n showError('Invalid time tracks information');\n return null;\n }\n res.time_tracks = tt;\n }\n const cvs = customValues\n .filter(x => !!x.field_val)\n .map(({ field_id, field_val }) => ({ field_id, field_val }));\n if (cvs.length > 0) {\n res.custom_values = cvs;\n } else {\n res.custom_values = undefined;\n }\n return res;\n };\n const handleConfirmClick = async () => {\n if (onlyView) return;\n const form = validForm();\n if (!form) return;\n\n if (\n !warning &&\n curLine.growing_cycle?.last_assessment &&\n (curLine.growing_cycle.last_assessment.shell_size.min >= form.size_min ||\n curLine.growing_cycle.last_assessment.shell_size.max >= form.size_max)\n ) {\n setWaring(true);\n return;\n }\n setDisabled(true);\n if (overConfirm) {\n overConfirm(form);\n } else {\n const res = !updateID\n ? await sendSingleRequest(\n form,\n 'POST',\n 'api/farm/line/assessment/assessments',\n true,\n )\n : await sendSingleRequest(\n form,\n 'PUT',\n `api/farm/line/assessment/assessments/${updateID}`,\n true,\n );\n if (res.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n dispatch(loadFarmsData());\n onConfirm(res.data);\n } else {\n showError(res.data?.message ?? 'Request failed');\n setDisabled(false);\n }\n }\n };\n const updateCustomValue = (fieldID: number, val: string) => {\n let tmp = [...customValues];\n const i = tmp.findIndex(x => x.field_id === fieldID);\n if (i >= 0) {\n tmp[i].field_val = val;\n }\n setCustomValues(tmp);\n };\n\n useEffect(() => {\n if (data) {\n let form = { ...data };\n if (form.assessment_date)\n form.assessment_date = toMillisecond(form.assessment_date);\n if (form.planned_date_harvest)\n form.planned_date_harvest = toMillisecond(form.planned_date_harvest);\n form.ready_to_harvest = !!data.ready_harvest || !!data.ready_to_harvest;\n if (form.time_tracks && form.time_tracks.length > 0) {\n form.time_tracks = data.time_tracks.map((x: any) => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n }));\n }\n if (data.images && data.images.length > 0) {\n let tmp: any = [];\n for (let x of data.images) {\n if (typeof x === 'object' && x !== null) {\n tmp.push(x);\n } else {\n tmp.push(parseImageUrlToFileItem(x));\n }\n }\n if (tmp && tmp.length > 0) {\n form.images = tmp;\n }\n }\n if (form.estimated_amount) {\n form.estimated_amount = roundNumber(form.estimated_amount / 1000, 3);\n }\n setFormData(prv => ({ ...prv, ...form }));\n }\n }, [data]);\n\n const farmOptions = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }));\n const lineOptions = farmsData\n .find(x => x.id === focFarmId)\n ?.lines.filter(x => !!x.growing_cycle)\n .map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n }));\n\n return (\n }\n width={650}\n >\n
\n
\n \n {translate(lang, title ?? 'Mussel Assessment')}\n \n
\n
\n {lineChangeable && (\n
\n
\n setFocFarmId(Number(v))}\n disabled={onlyView}\n />\n
\n
\n Number(x.id) === curLine.id)\n ? curLine.id.toString()\n : curLine.line_name\n }\n onChange={handleLineChange}\n disabled={onlyView}\n />\n
\n
\n )}\n {warning ? (\n
\n \n {translate(lang, '_assessment_warning')}\n \n
\n ) : (\n
\n
\n
\n updateForm('size_min', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n {errors.min && (\n
{errors.min}
\n )}\n
\n
\n updateForm('size_max', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n {errors.max && (\n
{errors.max}
\n )}\n
\n
\n updateForm('size_avg', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n {errors.avg && (\n
{errors.avg}
\n )}\n
\n
\n
\n setAssessBottom(e.target.checked)}\n />\n
\n {assessBottom && (\n
\n
\n updateForm('btm_size_min', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n
\n
\n updateForm('btm_size_max', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n
\n
\n updateForm('btm_size_avg', e.target.value)}\n required={true}\n disabled={onlyView}\n />\n
\n
\n )}\n \n updateForm(\n 'assessment_date',\n e!.toDate().getTime() <\n Number(curLine.growing_cycle?.main_seed.planned_date_seed)\n ? moment().toDate().getTime()\n : e!.toDate().getTime(),\n )\n }\n required={true}\n disabled={onlyView}\n />\n \n updateForm(\n 'planned_date_harvest',\n e!.toDate().getTime() <\n Number(curLine.growing_cycle?.main_seed.planned_date_seed)\n ? moment().toDate().getTime()\n : e!.toDate().getTime(),\n )\n }\n required={true}\n disabled={onlyView}\n />\n {curLine.growing_cycle && (\n updateForm('origin_spat_id', v)}\n />\n )}\n updateForm('ready_to_harvest', e.target.checked)}\n disabled={onlyView}\n />\n
\n updateForm('estimated_amount', e.target.value)}\n disabled={onlyView}\n />\n
\n {customValues.map(x => (\n
\n {x.input_type === 'select' ? (\n <>\n updateCustomValue(x.field_id, v)}\n disabled={onlyView}\n />\n {(!x.options || x.options.length <= 0) && (\n \n Set up field\n \n )}\n \n ) : (\n \n updateCustomValue(x.field_id, e.target.value)\n }\n unit={x.unit}\n disabled={onlyView}\n />\n )}\n
\n ))}\n updateForm('direction', v)}\n />\n {formData.time_tracks && (\n updateForm('time_tracks', t)}\n disabled={onlyView}\n />\n )}\n updateForm('comment', e.target.value)}\n isOptional={true}\n disabled={onlyView}\n />\n {!!formData.images && (\n updateForm('images', f)}\n />\n )}\n
\n )}\n
\n
\n
\n {!warning ? (\n \n {translate(lang, 'Confirm')}\n \n ) : (\n <>\n setWaring(false)}\n disabled={disabled}\n >\n {translate(lang, 'Let me correct')}\n \n \n {translate(lang, \"Yes, it's valid\")}\n \n \n )}\n
\n \n \n );\n};\n\nexport default MusselAssessModal;\n","import { forwardRef, useImperativeHandle, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Modal, Table, Button, Alert } from 'antd';\nimport { translate } from '../../lib/lang.helper';\nimport { Input } from '../shared';\nimport { formatNumber } from '../../entities/util-functions';\nimport { selectLang } from '../../store/ui/ui.selector';\n\ninterface IRow {\n id: string | number;\n name: string;\n amount: number | undefined;\n}\n\ninterface Props {\n lineID: number;\n onInsert?: (probabilities: Record) => void;\n oysterFields: any[];\n onGrowWaste: any;\n}\n\nexport interface OysterProbRef {\n checkIsValid(): string | true;\n runConfirm(): Promise;\n}\n\ninterface IFormData {\n estimated_dozens?: number;\n}\n\nconst calcOnGrowWastePercent = (data: any, type: string, lineID: number) => {\n return data?.[lineID]?.[type] ?? 0;\n};\n\nconst calcOysterPercent = (oyster: any, lineID: number) => {\n return oyster.percent ?? 0;\n};\n\nconst OysterSampleCalculator = forwardRef(\n ({ lineID, onInsert, oysterFields, onGrowWaste }, ref) => {\n const lang = useSelector(selectLang);\n\n const defaultValues: IRow[] = [\n {\n id: 'Grown ons',\n name: translate(lang, 'Grown ons'),\n amount: calcOnGrowWastePercent(onGrowWaste, 'grow', lineID),\n },\n {\n id: 'Waste',\n name: translate(lang, 'Waste'),\n amount: calcOnGrowWastePercent(onGrowWaste, 'waste', lineID),\n },\n ...oysterFields.map(x => ({\n id: x.id,\n name: x.name,\n amount: calcOysterPercent(x, lineID),\n })),\n ];\n\n const [modalData, setModalData] = useState(defaultValues);\n const [formData, setFormData] = useState({\n estimated_dozens: undefined,\n });\n\n const [isModalVisible, setIsModalVisible] = useState(false);\n const [exceedsLimit, setExceedsLimit] = useState(false);\n\n const updateForm = (field: keyof IFormData, value: string) => {\n setFormData(prev => ({\n ...prev,\n [field]: value ? parseFloat(value) : undefined,\n }));\n };\n\n const updateAmount = (id: string | number, value: string) => {\n const newData = [...modalData];\n const index = newData.findIndex(row => row.id === id);\n newData[index].amount = value ? parseFloat(value) : undefined;\n setModalData(newData);\n\n const totalOysters = formData.estimated_dozens || 0;\n const sumOfAllAmounts = newData.reduce(\n (acc, x) => acc + (x.amount || 0),\n 0,\n );\n setExceedsLimit(totalOysters > 0 && sumOfAllAmounts > totalOysters);\n };\n\n const checkIsValid = () => {\n const totalOysters = formData.estimated_dozens || 0;\n const sumOfAllAmounts = modalData.reduce(\n (acc, x) => acc + (x.amount || 0),\n 0,\n );\n\n if (sumOfAllAmounts > totalOysters) {\n return translate(\n lang,\n 'Sum of amounts exceeds the estimated total (over 100%)',\n );\n }\n return true;\n };\n\n const runConfirm = async () => {\n const isValid = checkIsValid();\n if (isValid !== true) return isValid;\n return true;\n };\n\n useImperativeHandle(ref, () => ({\n checkIsValid,\n runConfirm,\n }));\n\n const showModal = () => setIsModalVisible(true);\n const handleCancel = () => setIsModalVisible(false);\n\n const handleInsert = () => {\n const probabilities = modalData.reduce((acc, row) => {\n const probability =\n totalOysters > 0 && row.amount\n ? ((row.amount / totalOysters) * 100).toFixed(1)\n : '0';\n acc[row.id.toString()] = probability;\n return acc;\n }, {} as Record);\n\n if (onInsert) {\n onInsert(probabilities);\n }\n setIsModalVisible(false);\n };\n\n const totalOysters = formData.estimated_dozens || 0;\n const sumOfAllAmounts = modalData.reduce(\n (acc, x) => acc + (x.amount || 0),\n 0,\n );\n\n const columns: any = [\n {\n title: translate(lang, 'Name'),\n key: 'name',\n render: (x: IRow) => x.name,\n width: 180,\n },\n {\n title: translate(lang, 'Amount'),\n key: 'amount',\n render: (x: IRow) => (\n updateAmount(x.id, e.target.value)}\n />\n ),\n width: 120,\n },\n {\n title: () => {\n const sumProb =\n totalOysters > 0\n ? ((sumOfAllAmounts / totalOysters) * 100).toFixed(1) + '%'\n : '0%';\n return translate(lang, 'Probability') + ` (${sumProb})`;\n },\n key: 'probability',\n render: (x: IRow) => {\n if (!x.amount || totalOysters === 0) return '0%';\n const percent = ((x.amount / totalOysters) * 100).toFixed(1);\n return percent + '%';\n },\n width: 140,\n },\n ];\n\n return (\n <>\n \n Sample Calculator\n \n\n \n Cancel\n ,\n ,\n ]}\n className='calcuate-modal'\n >\n {exceedsLimit && (\n \n )}\n\n
\n updateForm('estimated_dozens', e.target.value)}\n unit='amount'\n />\n
\n\n \n \n \n );\n },\n);\n\nexport default OysterSampleCalculator;\n","import { Modal, Radio } from 'antd';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n Dropdown,\n Input,\n Paragrapgh,\n Subtitle,\n RadioButton,\n} from '../../shared';\nimport moment from 'moment';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useEffect, useRef, useState } from 'react';\nimport { toMillisecond, toSecond } from '../../../util/toggleSecondMillisecond';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport ModalFeedbackView from '../../shared/feedback/ModalFeedbackView';\nimport { sendSingleRequest } from '../../../apis';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { IOysterLineResource } from '../../../entities/farms.entities';\nimport { translate } from '../../../lib/lang.helper';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport {\n SelectIsMyFarm,\n SelectOysterFarmsByFarmID,\n} from '../../../store/extra/extra.selector';\nimport OysterLineProbTable, {\n OysterProbRef,\n} from '../../farm-util/OysterLineProbTable';\nimport BatchAssessView from './BatchAssessView';\nimport DirectionForm from '../../farm-util/DirectionForm';\nimport { dozensToPieces, piecesToDozens } from '../../../lib/common.helpers';\nimport OysterSampleCalculator from '../../farm-util/OysterSampleCalculator';\nimport { selectSizedOysters } from '../../../store/utils/utils.selector';\n\ninterface IFormData {\n estimated_amount?: number | null;\n estimated_dozens?: number | null;\n size_min: number | null;\n size_max: number | null;\n size_avg: number | null;\n assessment_date: number;\n planned_date_harvest: number;\n ready_to_harvest: boolean;\n origin_spat_id?: number | null;\n comment: string | null;\n direction: string | null;\n time_tracks?: ITimeRange[];\n images: any[];\n measurement_units?: string;\n hide_specie?: boolean;\n seeding_id?: number;\n}\n\nconst defaultForm: IFormData = {\n size_min: null,\n size_max: null,\n size_avg: null,\n images: [],\n planned_date_harvest: moment().toDate().getTime(),\n assessment_date: moment().toDate().getTime(),\n comment: null,\n ready_to_harvest: false,\n direction: null,\n time_tracks: [],\n measurement_units: 'dz',\n};\n\nconst getEstimated = (line: IOysterLineResource) => {\n if (line.growing_cycle?.last_assessment?.estimated_amount) {\n return {\n estimated_amount: line.growing_cycle.last_assessment.estimated_amount,\n estimated_dozens: piecesToDozens(\n line.growing_cycle.last_assessment.estimated_amount,\n ),\n planned_date_harvest: toMillisecond(\n line.growing_cycle.last_assessment.planned_date_harvest,\n ),\n };\n } else if (line.growing_cycle) {\n return {\n estimated_amount: line.growing_cycle.current_amount_pcs,\n estimated_dozens: line.growing_cycle.current_amount_dz,\n planned_date_harvest: toMillisecond(\n line.growing_cycle.main_seed.planned_date_harvest,\n ),\n };\n } else {\n return {\n estimated_amount: undefined,\n estimated_dozens: undefined,\n planned_date_harvest: defaultForm.planned_date_harvest,\n };\n }\n};\n\ninterface Props {\n visible: boolean;\n title?: string;\n lineData: IOysterLineResource;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n data?: any;\n updateID?: number;\n onlyView?: boolean;\n overConfirm?: (data: any) => void;\n lineChangeable?: boolean;\n}\n\nconst OysterAssessModal = ({\n lineData,\n visible,\n title,\n onCancel,\n onConfirm,\n data,\n updateID,\n onlyView,\n overConfirm,\n lineChangeable,\n}: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const farmsData = SelectOysterFarmsByFarmID(lineData.farm_id);\n const isMyFarm = SelectIsMyFarm(lineData.farm_id);\n\n const [formData, setFormData] = useState({\n ...defaultForm,\n planned_date_harvest: getEstimated(lineData).planned_date_harvest,\n estimated_amount: getEstimated(lineData).estimated_amount,\n estimated_dozens: getEstimated(lineData).estimated_dozens,\n });\n\n const [warning, setWaring] = useState(false);\n const [errors, setErrors] = useState<{\n min: string | null;\n max: string | null;\n avg: string | null;\n }>({\n min: null,\n max: null,\n avg: null,\n });\n const [focFarmId, setFocFarmId] = useState(lineData.farm_id);\n const [curLine, setCurLine] = useState(lineData);\n const [trackOrigin, setTrackOrigin] = useState(!!data?.origin_spat_id);\n const [disabled, setDisabled] = useState(false);\n const [probabilities, setProbabilities] = useState>(\n {},\n );\n const oysterFields = useSelector(selectSizedOysters);\n\n const tableRef = useRef(null);\n\n const handleLineChange = (v: string) => {\n const farm = farmsData.find(x => x.id === focFarmId);\n if (!farm) return;\n const line = farm.lines.find(x => x.id === Number(v));\n if (!line?.growing_cycle) return;\n setCurLine(line);\n setFormData(prv => ({\n ...prv,\n planned_date_harvest: toMillisecond(\n line.growing_cycle?.main_seed.planned_date_harvest ?? 0,\n ),\n }));\n };\n const updateForm = (key: keyof IFormData, val: any) => {\n if (\n [\n 'size_min',\n 'size_max',\n 'size_avg',\n 'estimated_amount',\n 'estimated_dozens',\n ].includes(key)\n ) {\n val = val.length <= 0 ? null : Number(val);\n }\n let tmp = { ...formData, [key]: val };\n if (key === 'size_min') {\n setErrors(p => ({ ...p, min: null, avg: null }));\n tmp.size_avg = Math.round(\n (Number(tmp.size_max) + Number(tmp.size_min)) / 2,\n );\n } else if (key === 'size_max') {\n setErrors(p => ({ ...p, max: null, avg: null }));\n tmp.size_avg = Math.round(\n (Number(tmp.size_max) + Number(tmp.size_min)) / 2,\n );\n } else if (key === 'estimated_dozens') {\n tmp.estimated_amount = dozensToPieces(val);\n } else if (key === 'estimated_amount') {\n tmp.estimated_dozens = piecesToDozens(val);\n }\n setFormData(tmp);\n };\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n\n const validForm = () => {\n let res: any = true;\n let tmpErr = { ...errors };\n if (!formData.size_min) {\n tmpErr.min = translate(lang, 'Required field');\n res = false;\n }\n if (!formData.size_max) {\n tmpErr.max = translate(lang, 'Required field');\n res = false;\n }\n if (!formData.size_avg) {\n tmpErr.avg = translate(lang, 'Required field');\n res = false;\n }\n if (Number(formData.size_min) > Number(formData.size_max)) {\n tmpErr.avg = translate(\n lang,\n 'Maximum value should be equal or greater than minimum value',\n );\n res = false;\n }\n if (\n formData.time_tracks &&\n toSecTimeTracks(formData.time_tracks) === false\n ) {\n showError('_invalid_time_range');\n res = false;\n }\n setErrors(tmpErr);\n if (!res) return null;\n\n res = {\n ...formData,\n assessment_date: toSecond(formData.assessment_date),\n planned_date_harvest: toSecond(formData.planned_date_harvest),\n seeding_id: formData?.seeding_id ?? lineData.growing_cycle?.main_seed.id,\n line_id: lineData.id,\n };\n res.btm_size_min = res.btm_size_max = res.btm_size_avg = undefined;\n\n if (res.time_tracks && res.time_tracks.length > 0) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (!tt) {\n showError('Invalid time tracks information');\n return null;\n }\n res.time_tracks = tt;\n }\n return res;\n };\n const handleConfirmClick = async () => {\n if (onlyView) return;\n const form = validForm();\n if (!form) return;\n\n if (tableRef.current) {\n const res = tableRef.current.checkIsValid();\n if (res !== true) {\n showError(res);\n return;\n }\n }\n\n if (\n !warning &&\n lineData.growing_cycle?.last_assessment &&\n (lineData.growing_cycle.last_assessment.shell_size.min >= form.size_min ||\n lineData.growing_cycle.last_assessment.shell_size.max >= form.size_max)\n ) {\n setWaring(true);\n return;\n }\n setDisabled(true);\n if (overConfirm) {\n overConfirm(form);\n return;\n }\n const res = !updateID\n ? await sendSingleRequest(\n form,\n 'POST',\n 'api/farm/line/assessment/assessments',\n true,\n )\n : await sendSingleRequest(\n form,\n 'PUT',\n `api/farm/line/assessment/assessments/${updateID}`,\n true,\n );\n if (res.status) {\n dispatch(loadFarmsData());\n if (tableRef.current) {\n await tableRef.current.runConfirm();\n }\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n onConfirm(res.data);\n } else {\n showError(res.data?.message ?? 'Request failed');\n setDisabled(false);\n }\n };\n\n useEffect(() => {\n if (data) {\n let form = { ...data };\n if (form.assessment_date)\n form.assessment_date = toMillisecond(form.assessment_date);\n if (form.planned_date_harvest)\n form.planned_date_harvest = toMillisecond(form.planned_date_harvest);\n form.ready_to_harvest = !!data.ready_harvest || !!data.ready_to_harvest;\n if (form.time_tracks && form.time_tracks.length > 0) {\n form.time_tracks = data.time_tracks.map((x: any) => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n }));\n }\n if (data.images && data.images.length > 0) {\n let tmp: any = [];\n for (let x of data.images) {\n if (typeof x === 'object' && x !== null) {\n tmp.push(x);\n } else {\n tmp.push(parseImageUrlToFileItem(x));\n }\n }\n if (tmp && tmp.length > 0) {\n form.images = tmp;\n }\n }\n if (data.estimated_amount) {\n form.estimated_amount = data.estimated_amount;\n form.estimated_dozens = piecesToDozens(data.estimated_amount);\n }\n form.measurement_units = data.measurement_units ?? 'dz';\n setFormData(prv => ({ ...prv, ...form }));\n }\n }, [data]);\n\n const farmOptions = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }));\n const lineOptions = farmsData\n .find(x => x.id === focFarmId)\n ?.lines.filter(x => !!x.growing_cycle)\n .map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n }));\n\n return (\n }\n width={650}\n >\n
\n
\n \n {translate(lang, title ?? 'Oyster assessment')}\n \n
\n
\n {lineChangeable && (\n
\n
\n setFocFarmId(Number(v))}\n disabled={onlyView}\n />\n
\n
\n Number(x.id) === curLine.id)\n ? curLine.id.toString()\n : curLine.line_name\n }\n onChange={handleLineChange}\n disabled={onlyView}\n />\n
\n
\n )}\n {warning ? (\n
\n \n {translate(lang, '_assessment_warning')}\n \n
\n ) : (\n
\n
\n
\n {translate(lang, 'Measurement units')}\n
\n
\n \n updateForm('measurement_units', e.target.value)\n }\n value={formData.measurement_units}\n >\n \n \n \n
\n
\n
\n \n formData.measurement_units === 'pcs'\n ? updateForm('estimated_amount', e.target.value)\n : updateForm('estimated_dozens', e.target.value)\n }\n unit={formData.measurement_units === 'pcs' ? 'pcs' : 'dz'}\n />\n
\n {/* {isMyFarm && (\n
\n \n \n
\n )} */}\n\n {isMyFarm && (\n
\n \n \n
\n )}\n
\n
\n updateForm('size_min', e.target.value)}\n required={true}\n />\n {errors.min && (\n
{errors.min}
\n )}\n
\n
\n updateForm('size_max', e.target.value)}\n required={true}\n />\n {errors.max && (\n
{errors.max}
\n )}\n
\n
\n updateForm('size_avg', e.target.value)}\n required={true}\n />\n {errors.avg && (\n
{errors.avg}
\n )}\n
\n
\n \n updateForm(\n 'assessment_date',\n e!.toDate().getTime() <\n Number(\n lineData.growing_cycle?.main_seed.planned_date_seed,\n )\n ? moment().toDate().getTime()\n : e!.toDate().getTime(),\n )\n }\n required={true}\n />\n \n updateForm(\n 'planned_date_harvest',\n e!.toDate().getTime() <\n Number(\n lineData.growing_cycle?.main_seed.planned_date_seed,\n )\n ? moment().toDate().getTime()\n : e!.toDate().getTime(),\n )\n }\n required={true}\n />\n {curLine.growing_cycle && (\n updateForm('origin_spat_id', v)}\n />\n )}\n updateForm('ready_to_harvest', e.target.checked)}\n />\n updateForm('direction', v)}\n />\n {formData.time_tracks && (\n updateForm('time_tracks', t)}\n />\n )}\n updateForm('comment', e.target.value)}\n isOptional={true}\n />\n {!!formData.images && (\n updateForm('images', f)}\n />\n )}\n
\n )}\n
\n
\n
\n {!warning ? (\n \n {translate(lang, 'Confirm')}\n \n ) : (\n <>\n setWaring(false)}\n disabled={disabled}\n >\n {translate(lang, 'Let me correct')}\n \n \n {translate(lang, \"Yes, it's valid\")}\n \n \n )}\n
\n \n \n );\n};\n\nexport default OysterAssessModal;\n","import moment from 'moment';\nimport { ITimeRange } from '../../../entities/general.entities';\nimport { ISeaweedLineResource } from '../../../entities/farms.entities';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useEffect, useState } from 'react';\nimport { toMillisecond, toSecond } from '../../../util/toggleSecondMillisecond';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { Modal } from 'antd';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n Input,\n Paragrapgh,\n Subtitle,\n} from '../../shared';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../../shared/input/TimeTrackInput';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport ModalFeedbackView from '../../shared/feedback/ModalFeedbackView';\nimport { showFeedback } from '../../../store/ui/ui.actions';\nimport { sendSingleRequest } from '../../../apis';\nimport { loadFarmsData } from '../../../store/farms/farms.actions';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport { getEstHarvestDate } from '../../../lib/farm.helpers';\nimport DirectionForm from '../../farm-util/DirectionForm';\n\ninterface IFormData {\n size_min: number | null;\n size_max: number | null;\n size_avg: number | null;\n assessment_date: number;\n planned_date_harvest: number;\n ready_to_harvest: boolean;\n comment: string | null;\n direction: string | null;\n time_tracks?: ITimeRange[];\n images: any[];\n}\n\nconst defaultForm: IFormData = {\n size_min: null,\n size_max: null,\n size_avg: null,\n assessment_date: moment().toDate().getTime(),\n planned_date_harvest: moment().toDate().getTime(),\n ready_to_harvest: false,\n comment: null,\n direction: null,\n time_tracks: [],\n images: [],\n};\n\ninterface Props {\n visible: boolean;\n title?: string;\n lineData: ISeaweedLineResource;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n data?: any;\n updateID?: number;\n onlyView?: boolean;\n}\n\nconst SeaweedAssessModal = ({\n visible,\n title,\n lineData,\n onCancel,\n onConfirm,\n data,\n updateID,\n onlyView,\n}: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n\n const [formData, setFormData] = useState({\n ...defaultForm,\n planned_date_harvest:\n getEstHarvestDate(lineData) ?? defaultForm.planned_date_harvest,\n });\n const [warning, setWaring] = useState(false);\n const [errors, setErrors] = useState<{\n min: string | null;\n max: string | null;\n avg: string | null;\n }>({\n min: null,\n max: null,\n avg: null,\n });\n const [disabled, setDisabled] = useState(false);\n\n const updateForm = (key: keyof IFormData, val: any) => {\n if (['size_min', 'size_max', 'size_avg'].includes(key)) {\n val = val.length <= 0 ? null : Number(val);\n }\n let tmp = { ...formData, [key]: val };\n if (key === 'size_min') {\n setErrors(p => ({ ...p, min: null, avg: null }));\n tmp.size_avg = Math.round(\n (Number(tmp.size_max) + Number(tmp.size_min)) / 2,\n );\n } else if (key === 'size_max') {\n setErrors(p => ({ ...p, max: null, avg: null }));\n tmp.size_avg = Math.round(\n (Number(tmp.size_max) + Number(tmp.size_min)) / 2,\n );\n }\n setFormData(tmp);\n };\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n\n const validForm = () => {\n let res: any = true;\n let tmpErr = { ...errors };\n if (!formData.size_min) {\n tmpErr.min = translate(lang, 'Required field');\n res = false;\n }\n if (!formData.size_max) {\n tmpErr.max = translate(lang, 'Required field');\n res = false;\n }\n if (!formData.size_avg) {\n tmpErr.avg = translate(lang, 'Required field');\n res = false;\n }\n if (Number(formData.size_min) > Number(formData.size_max)) {\n tmpErr.avg = translate(\n lang,\n 'Maximum value should be equal or greater than minimum value',\n );\n res = false;\n }\n if (\n formData.time_tracks &&\n toSecTimeTracks(formData.time_tracks) === false\n ) {\n showError('_invalid_time_range');\n res = false;\n }\n setErrors(tmpErr);\n if (!res) return null;\n\n res = {\n ...formData,\n assessment_date: toSecond(formData.assessment_date),\n planned_date_harvest: toSecond(formData.planned_date_harvest),\n seeding_id: lineData.growing_cycle?.main_seed.id,\n line_id: lineData.id,\n };\n res.btm_size_min = res.btm_size_max = res.btm_size_avg = undefined;\n\n if (res.time_tracks && res.time_tracks.length > 0) {\n const tt = toSecTimeTracks(res.time_tracks);\n if (!tt) {\n showError('Invalid time tracks information');\n return null;\n }\n res.time_tracks = tt;\n }\n return res;\n };\n const handleConfirmClick = async () => {\n if (onlyView) return;\n const form = validForm();\n if (!form) return;\n\n if (\n !warning &&\n lineData.growing_cycle?.last_assessment &&\n (lineData.growing_cycle.last_assessment.shell_size.min >= form.size_min ||\n lineData.growing_cycle.last_assessment.shell_size.max >= form.size_max)\n ) {\n setWaring(true);\n return;\n }\n setDisabled(true);\n const res = !updateID\n ? await sendSingleRequest(\n form,\n 'POST',\n 'api/farm/line/assessment/assessments',\n true,\n )\n : await sendSingleRequest(\n form,\n 'PUT',\n `api/farm/line/assessment/assessments/${updateID}`,\n true,\n );\n if (res.status) {\n dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, res.data?.message ?? 'Success'),\n }),\n );\n onConfirm(res.data);\n } else {\n showError(res.data?.message ?? 'Request failed');\n setDisabled(false);\n }\n };\n\n useEffect(() => {\n if (data) {\n let form = { ...data };\n if (form.assessment_date)\n form.assessment_date = toMillisecond(form.assessment_date);\n if (form.planned_date_harvest)\n form.planned_date_harvest = toMillisecond(form.planned_date_harvest);\n form.ready_to_harvest = !!data.ready_harvest || !!data.ready_to_harvest;\n if (form.time_tracks && form.time_tracks.length > 0) {\n form.time_tracks = data.time_tracks.map((x: any) => ({\n start_time: toMillisecond(x.start_time),\n finish_time: toMillisecond(x.finish_time),\n }));\n }\n if (data.images && data.images.length > 0) {\n let tmp: any = [];\n for (let x of data.images) {\n if (typeof x === 'object' && x !== null) {\n tmp.push(x);\n } else {\n tmp.push(parseImageUrlToFileItem(x));\n }\n }\n if (tmp && tmp.length > 0) {\n form.images = tmp;\n }\n }\n setFormData(prv => ({ ...prv, ...form }));\n }\n }, [data]);\n\n return (\n }\n width={650}\n >\n
\n
\n \n {translate(lang, title ?? 'Seaweed assessment')}\n \n
\n
\n {warning ? (\n
\n \n {translate(lang, '_assessment_warning')}\n \n
\n ) : (\n
\n
\n
\n updateForm('size_min', e.target.value)}\n required={true}\n />\n {errors.min && (\n
{errors.min}
\n )}\n
\n
\n updateForm('size_max', e.target.value)}\n required={true}\n />\n {errors.max && (\n
{errors.max}
\n )}\n
\n
\n updateForm('size_avg', e.target.value)}\n required={true}\n />\n {errors.avg && (\n
{errors.avg}
\n )}\n
\n
\n \n updateForm(\n 'assessment_date',\n e!.toDate().getTime() <\n Number(\n lineData.growing_cycle?.main_seed.planned_date_seed,\n )\n ? moment().toDate().getTime()\n : e!.toDate().getTime(),\n )\n }\n required={true}\n />\n \n updateForm(\n 'planned_date_harvest',\n e!.toDate().getTime() <\n Number(\n lineData.growing_cycle?.main_seed.planned_date_seed,\n )\n ? moment().toDate().getTime()\n : e!.toDate().getTime(),\n )\n }\n required={true}\n />\n updateForm('ready_to_harvest', e.target.checked)}\n />\n updateForm('direction', v)}\n />\n {formData.time_tracks && (\n updateForm('time_tracks', t)}\n />\n )}\n updateForm('comment', e.target.value)}\n isOptional={true}\n />\n {!!formData.images && (\n updateForm('images', f)}\n />\n )}\n
\n )}\n
\n
\n
\n {!warning ? (\n \n {translate(lang, 'Confirm')}\n \n ) : (\n <>\n setWaring(false)}\n disabled={disabled}\n >\n {translate(lang, 'Let me correct')}\n \n \n {translate(lang, \"Yes, it's valid\")}\n \n \n )}\n
\n \n \n );\n};\n\nexport default SeaweedAssessModal;\n","import {\n ILineResource,\n IMusselLineResource,\n IOysterLineResource,\n ISeaweedLineResource,\n} from '../../../entities/farms.entities';\nimport MusselAssessModal from './MusselAssessModal';\nimport OysterAssessModal from './OysterAssessModal';\nimport { TBusinessType } from '../../../entities/general.entities';\nimport SeaweedAssessModal from './SeaweedAssessModal';\nimport '../styles.scss';\n\ninterface Props {\n type: TBusinessType;\n visible: boolean;\n title?: string;\n onCancel: () => void;\n onConfirm: (data: any) => void;\n data?: any;\n lineData: ILineResource;\n updateID?: number;\n onlyView?: boolean;\n overConfirm?: (data: any) => void; // only for MUSSEL\n lineChangeable?: boolean; // only for MUSSEL\n}\n\nconst AssessmentModal = ({\n type,\n visible,\n title,\n onCancel,\n onConfirm,\n data,\n lineData,\n updateID,\n onlyView,\n overConfirm,\n lineChangeable,\n}: Props) => (\n <>\n {type === 'MUSSEL' ? (\n \n ) : type === 'OYSTER' ? (\n \n ) : (\n \n )}\n \n);\n\nexport default AssessmentModal;\n","import { Table } from 'antd';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { IMusselLineResource } from '../../entities/farms.entities';\nimport { loadQueueData } from '../../store/farms/farms.actions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { Button, ModalComponent, Subtitle } from '../shared';\nimport { useHistory } from 'react-router-dom';\nimport SeedingModal from '../farm-modals/SeedingModal';\nimport MaintenanceModal from '../farm-modals/MaintenanceModal';\nimport FloatManageModal from '../farm-modals/FloatManageModal';\nimport AssessmentModal from '../farm-modals/AssessmentModal';\nimport HarvestCompleteModal from '../farm-modals/HarvestCompleteModal';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectQueueData } from '../../store/farms/farms.selector';\nimport { IQueueItem } from '../../entities/automation.entities';\n\nconst QLabels = {\n assessment: 'Assessment',\n maintenance: 'Maintenance',\n inventory_seed: 'Inventory management',\n seeding: 'Seeding',\n harvest: 'Harvest',\n};\n\nconst columns = [\n {\n key: 'type',\n title: 'Type',\n render: (x: IQueueItem) => {(QLabels as any)[x.type]},\n },\n {\n key: 'title',\n title: 'Title',\n render: (x: IQueueItem) => (\n {`${(QLabels as any)[x.type]} data`}\n ),\n },\n {\n key: 'date',\n title: 'Date',\n render: (x: IQueueItem) => {defaultDateFormat(x.date)},\n },\n {\n key: 'createdAt',\n title: 'Reported At',\n render: (x: IQueueItem) => {defaultDateFormat(x.created_at)},\n },\n {\n key: 'userName',\n title: 'Reported by',\n render: (x: IQueueItem) => {x.user.name},\n },\n];\n\ninterface Props {\n lineData: IMusselLineResource;\n loadLine: () => void;\n}\n\nconst PendingDataTable = ({ lineData, loadLine }: Props) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const profile = useSelector(selectProfile);\n const queueData = useSelector(selectQueueData);\n const seedingId = lineData.growing_cycle?.main_seed.id;\n\n const [visibleAssessment, setVisibleAssessment] = useState(false);\n const [visibleMaintenance, setVisibleMaintenance] = useState(false);\n const [visibleFloats, setVisibleFloats] = useState(false);\n const [visibleSeeding, setVisibleSeeding] = useState(false);\n const [visibleHarvest, setVisibleHarvest] = useState(false);\n const [selectedData, setSelectedData] = useState();\n const [disable, setDisable] = useState(false);\n const [deletingItem, setDeletingItem] = useState<{\n type: string;\n item_id: number;\n }>();\n\n const queueItems = useMemo(() => {\n if (!queueData) return [];\n try {\n const queue = queueData.filter(\n x =>\n !x.type.startsWith('paper') &&\n x.line.id === lineData.id &&\n (!x.seeding_id || x.seeding_id === seedingId),\n );\n return queue;\n } catch (error) {\n return [];\n }\n }, [queueData, seedingId, lineData]);\n\n const afterConfirm = (r: any, visibleUpdate: () => void) => {\n if (r.status) {\n visibleUpdate();\n loadLine();\n dispatch(loadQueueData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: r.data?.message ?? 'Success',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: r.data?.message ?? 'Something went wrong',\n }),\n );\n }\n };\n const confirmMaintenance = (data: any) => {\n if (!selectedData) return;\n setDisable(true);\n sendSingleRequest(\n {\n id: selectedData.id,\n ...data,\n weather_condition: selectedData.weather_condition,\n },\n 'POST',\n 'api/queue/confirm-maintenance',\n true,\n ).then(r => {\n setDisable(false);\n afterConfirm(r, () => setVisibleMaintenance(false));\n });\n };\n const confirmAssessment = (data: any) => {\n if (!selectedData) return;\n setDisable(true);\n sendSingleRequest(\n {\n id: selectedData.id,\n ...data,\n weather_condition: selectedData.weather_condition,\n },\n 'POST',\n 'api/queue/confirm-assessment',\n true,\n ).then(r => {\n setDisable(false);\n afterConfirm(r, () => setVisibleAssessment(false));\n });\n };\n const confirmInventorySeed = (data: any) => {\n if (!selectedData) return;\n setDisable(true);\n sendSingleRequest(\n {\n id: selectedData.id,\n ...data,\n weather_condition: selectedData.weather_condition,\n },\n 'POST',\n 'api/queue/confirm-inventory_seed',\n true,\n ).then(r => {\n setDisable(false);\n afterConfirm(r, () => setVisibleFloats(false));\n });\n };\n const confirmSeeding = async (data: any) => {\n if (!selectedData) return;\n setDisable(true);\n const r = await sendSingleRequest(\n {\n id: selectedData.id,\n ...data,\n weather_condition: selectedData.weather_condition,\n },\n 'POST',\n `api/queue/confirm-seeding/${selectedData.crop_type}`,\n true,\n );\n setDisable(false);\n if (!r.status) {\n return r.data;\n } else {\n afterConfirm(r, () => setVisibleSeeding(false));\n return true;\n }\n };\n const confirmHarvest = async (data: any) => {\n if (!selectedData) return;\n setDisable(true);\n const res = await sendSingleRequest(\n {\n id: selectedData.id,\n ...data,\n weather_condition: selectedData.weather_condition,\n },\n 'POST',\n `api/queue/confirm-harvest/${selectedData.crop_type}`,\n true,\n );\n if (res.status) {\n setVisibleHarvest(false);\n await loadLine();\n await dispatch(loadQueueData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: res.data?.message ?? 'Success',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: res.data?.message ?? 'Something went wrong',\n }),\n );\n }\n return res;\n };\n const deleteQueueItem = () => {\n if (!deletingItem) return;\n setDisable(true);\n sendSingleRequest(deletingItem, 'DELETE', 'api/queue/entity', true).then(\n res => {\n setDisable(false);\n setDeletingItem(undefined);\n if (res.status) {\n dispatch(\n showFeedback({\n type: 'success',\n isMessage: true,\n message: 'Deleted successfully',\n }),\n );\n dispatch(loadQueueData());\n } else {\n dispatch(\n showFeedback({\n type: 'error',\n isMessage: true,\n message: res.data?.message ?? 'Failed to delete',\n }),\n );\n }\n },\n );\n };\n const clickQueueItem = async (item: IQueueItem) => {\n setDisable(true);\n const res = await sendSingleRequest(\n {},\n 'GET',\n `api/queue/detail/${item.id}`,\n true,\n );\n if (res.status) {\n setDisable(false);\n setSelectedData(res.data);\n if (item.type === 'assessment') {\n setVisibleAssessment(true);\n } else if (item.type === 'maintenance') {\n setVisibleMaintenance(true);\n } else if (item.type === 'inventory_seed') {\n setVisibleFloats(true);\n } else if (item.type === 'seeding') {\n setVisibleSeeding(true);\n } else {\n setVisibleHarvest(true);\n }\n } else {\n dispatch(\n showFeedback({\n message: res.data?.message ?? 'Unknown error',\n type: 'error',\n isMessage: true,\n }),\n );\n setDisable(false);\n }\n };\n\n useEffect(() => dispatch(loadQueueData()), [dispatch]);\n\n const tableColumns = [\n ...columns,\n {\n key: 'action',\n title: '',\n render: (x: IQueueItem) =>\n profile?.role !== 'owner' && !profile?.is_verified ? (\n \n ) : (\n \n clickQueueItem(x)}\n >\n Confirm\n \n {\n setDeletingItem({\n type: x.type,\n item_id: x.id,\n });\n }}\n >\n Delete\n \n \n ),\n },\n ];\n\n return queueItems.length <= 0 ? (\n <>\n ) : (\n
\n \n \n history.push('/queue')}\n >\n There's a pending action to be validated for this line\n \n \n \n
\n {selectedData && (\n <>\n {visibleSeeding && (\n setVisibleSeeding(false)}\n title='Seed the line'\n onConfirm={() => {}}\n lineData={selectedData.lineData}\n data={selectedData}\n overConfirm={confirmSeeding}\n parentID={\n !selectedData.parent_id ? undefined : selectedData.parent_id\n }\n lineChangeable={true}\n />\n )}\n {visibleHarvest && (\n setVisibleHarvest(false)}\n onConfirm={() => {}}\n overConfirm={confirmHarvest}\n data={selectedData}\n lineData={selectedData.lineData}\n lineChangeable={true}\n />\n )}\n {visibleAssessment && (\n setVisibleAssessment(false)}\n onConfirm={() => {}}\n overConfirm={confirmAssessment}\n lineData={lineData}\n lineChangeable={true}\n />\n )}\n {visibleFloats && (\n setVisibleFloats(false)}\n title='Inventory management'\n onConfirm={() => {}}\n data={selectedData}\n lineData={lineData}\n overConfirm={confirmInventorySeed}\n lineChangeable\n />\n )}\n {visibleMaintenance && (\n setVisibleMaintenance(false)}\n onConfirm={() => {}}\n overConfirm={confirmMaintenance}\n data={selectedData}\n lineData={selectedData.lineData}\n lineChangeable={true}\n />\n )}\n \n )}\n {deletingItem && (\n setDeletingItem(undefined)}\n type='delete'\n title='Error / Delete'\n text='Do you really want to delete this data?'\n onConfirm={deleteQueueItem}\n />\n )}\n \n );\n};\n\nexport default PendingDataTable;\n","import { Modal } from 'antd';\nimport { useSelector } from 'react-redux';\nimport {\n formatNumber,\n numberToMoneyStr,\n} from '../../../entities/util-functions';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\nimport { Button, CloseIcon, Input, Subtitle } from '../../shared';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { IMusselHarvest } from '../../../entities/growing.entities';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport {\n SelectIsBudgetVisible,\n SelectMusselFarmsByFarmID,\n} from '../../../store/extra/extra.selector';\nimport { labelNumber, labelRange } from '../../../lib/common.helpers';\n\ninterface Props {\n visible: boolean;\n harvest: IMusselHarvest;\n onClose: () => void;\n}\n\nconst MusselHarvestViewModal = ({ visible, harvest, onClose }: Props) => {\n const lang = useSelector(selectLang);\n const showBudget = SelectIsBudgetVisible(harvest.line.farm_id);\n const farmsData = SelectMusselFarmsByFarmID(harvest.line.farm_id);\n const farm = farmsData.find(x => x.id === harvest.line.farm_id);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Harvest Details')}:\n \n \n {`${farm?.name} - ${harvest.line.line_name}`}\n \n
\n
\n
\n
\n
{translate(lang, 'Season')}
\n
{harvest.season_name}
\n
\n
\n
\n {translate(lang, 'Complete date')}\n
\n
\n {defaultDateFormat(harvest.complete_date)}\n
\n
\n
\n
\n
\n
Final
\n
\n {translate(lang, !harvest.is_final ? 'Middle' : 'Final')}\n
\n
\n
\n
{translate(lang, 'Amount')}
\n
\n {`${formatNumber(harvest.amount)} kg`}\n
\n
\n
\n
\n
\n
F/P
\n
\n {!!harvest.is_full ? 'Full' : 'Partial'}\n
\n
\n
\n
\n {translate(lang, 'Harvested length')}\n
\n
\n {labelNumber(harvest.line_length ?? undefined, 'm')}\n
\n
\n
\n {!!showBudget && (\n
\n
\n
{translate(lang, 'Income')}
\n
\n {`$ ${numberToMoneyStr(harvest.income ?? 0)}`}\n
\n
\n
\n
{translate(lang, 'Expense')}
\n
\n {`$ ${numberToMoneyStr(\n harvest.expense_items?.reduce((p, c) => p + c.amount, 0) ??\n 0,\n )}`}\n
\n
\n
\n )}\n {!!harvest.is_final && (\n
\n
\n
{translate(lang, 'Company')}
\n
{harvest.company}
\n
\n
\n
{translate(lang, 'Vessel')}
\n
{harvest.vessel}
\n
\n
\n )}\n
\n
\n
\n {translate(lang, 'Shell length')}\n
\n
\n {labelRange(\n harvest.shell_length,\n harvest.shell_length_max ?? undefined,\n )}\n
\n
\n
\n
\n {translate(lang, 'Shell condition')}\n
\n
{harvest.shell_condition}
\n
\n
\n
\n
\n
\n {translate(lang, 'Harvest Number')}\n
\n
{harvest.harvest_number}
\n
\n
\n
\n {translate(lang, 'Number of bags')}\n
\n
{harvest.bags_quantity}
\n
\n
\n
\n
\n
{translate(lang, 'Tag color')}
\n
{harvest.tag_color}
\n
\n
\n
\n {translate(lang, 'Port of unload')}\n
\n
{harvest.port_of_unload}
\n
\n
\n
\n
\n
{translate(lang, 'Crop owner')}
\n
{harvest.crop_owner}
\n
\n
\n
\n {translate(lang, 'Growing area')}\n
\n
{harvest.growing_area}
\n
\n
\n
\n
\n
\n {translate(lang, 'Delivered to')}\n
\n
{harvest.delivered_to}
\n
\n
\n
{translate(lang, 'Packhouse')}
\n
{harvest.packhouse}
\n
\n
\n
\n
\n
{translate(lang, 'Mussel type')}
\n
{harvest.mussel_type}
\n
\n
\n
{translate(lang, 'Performance')}
\n
{harvest.mussels}
\n
\n
\n
\n
\n
{translate(lang, 'Meat yield')}
\n
\n {labelNumber(harvest.meat_yield ?? undefined, '%')}\n
\n
\n
\n
{translate(lang, \"User's name\")}
\n
{harvest.harvester_name}
\n
\n
\n
\n
\n
\n {translate(lang, '_blues_oysters')}\n
\n
\n {labelNumber(harvest.blues ?? undefined, '%')}\n
\n
\n
\n
\n {translate(lang, '_marine_waste')}\n
\n
\n {`${harvest.marine_waste ?? 0} kg`}\n
\n
\n
\n
\n
\n
Backbone OK
\n
\n {!harvest.backbone_ok ? 'No' : 'Yes'}\n
\n
\n
\n
Backbone Replace
\n
\n {!harvest.backbone_replace ? 'No' : 'Yes'}\n
\n
\n
\n
\n
\n
Lights and IDs in place
\n
\n {!harvest.lights_ids_in_place ? 'No' : 'Yes'}\n
\n
\n
\n
Flotation on farm
\n
\n {!harvest.flotation_on_farm ? 'No' : 'Yes'}\n
\n
\n
\n
\n
\n
\n {translate(lang, 'Number of rope bags')}\n
\n
{harvest.rope_bags_quantity}
\n
\n
\n
\n {translate(lang, 'Product left on line')}\n
\n
{harvest.product_left_on_line}
\n
\n
\n\n
\n \n
\n {!!harvest.images && harvest.images.length > 0 && (\n
\n parseImageUrlToFileItem(x)) as any\n }\n handleChangeImages={() => {}}\n disabled={true}\n />\n
\n )}\n
\n {!!harvest.signature && (\n
\n

\n {translate(lang, 'Signature')}\n

\n \n \n
\n
\n )}\n
\n \n {translate(lang, 'Close')}\n \n
\n \n \n );\n};\n\nexport default MusselHarvestViewModal;\n","import { Modal } from 'antd';\nimport { useSelector } from 'react-redux';\nimport {\n formatNumber,\n numberToMoneyStr,\n} from '../../../entities/util-functions';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\nimport { Button, CloseIcon, Input, Subtitle } from '../../shared';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { IOysterHarvest } from '../../../entities/growing.entities';\nimport { selectSizedOysters } from '../../../store/utils/utils.selector';\nimport { labelRange, toStrSlug } from '../../../lib/common.helpers';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport {\n SelectAccountSetting,\n SelectIsBudgetVisible,\n SelectOysterFarmsByFarmID,\n} from '../../../store/extra/extra.selector';\nimport { getMortalityLabel } from '../../../lib/farm.helpers';\n\ninterface Props {\n visible: boolean;\n harvest: IOysterHarvest;\n onClose: () => void;\n}\n\nconst OysterHarvestViewModal = ({ visible, harvest, onClose }: Props) => {\n const lang = useSelector(selectLang);\n const accSetting = SelectAccountSetting(harvest.line.farm_id);\n const farmsData = SelectOysterFarmsByFarmID(harvest.line.farm_id);\n const farm = farmsData.find(x => x.id === harvest.line.farm_id);\n const showBudget = SelectIsBudgetVisible(harvest.line.farm_id);\n\n const line = farm?.lines.find(x => x.id === harvest.line_id);\n const metaFields = useSelector(selectSizedOysters).map(x => ({\n key: toStrSlug(x.name),\n label: x.name,\n }));\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Harvest Details')}:\n \n \n {`${farm?.name} - ${harvest.line.line_name}`}\n \n
\n
\n
\n
\n
{translate(lang, 'Season')}
\n
{harvest.season_name}
\n
\n
\n
\n {translate(lang, 'Complete date')}\n
\n
\n {defaultDateFormat(harvest.complete_date)}\n
\n
\n
\n
\n
\n
{translate(lang, 'Final')}
\n
\n {translate(lang, !harvest.is_final ? 'Middle' : 'Final')}\n
\n
\n
\n
F/P
\n
\n {translate(lang, !!harvest.is_full ? 'Full' : 'Partial')}\n
\n
\n
\n {metaFields\n .filter(\n x => harvest[x.key] !== null && harvest[x.key] !== undefined,\n )\n .map(x => (\n
\n
{x.label}
\n
{`${harvest[x.key]} dozens`}
\n
\n ))}\n
\n
{translate(lang, 'Amount')}
\n
\n {`${formatNumber(harvest.amount_dz)} dozens`}\n
\n
\n {!!accSetting?.track_mortality && (\n
\n
{translate(lang, 'Mortality')}
\n
{getMortalityLabel(harvest)}
\n
\n )}\n {!!harvest.return_amount_dz && (\n
\n
\n {translate(lang, '_graded_oysters')}\n
\n
\n {`${formatNumber(harvest.return_amount_dz)} dozens`}\n
\n
\n )}\n
\n
\n {translate(lang, 'Harvested %s', line?.farming_method)}\n
\n
{harvest.line_length}
\n
\n {!!showBudget && (\n
\n
\n
{translate(lang, 'Income')}
\n
\n {`$ ${numberToMoneyStr(harvest.income ?? 0)}`}\n
\n
\n
\n
{translate(lang, 'Expense')}
\n
\n {`$ ${numberToMoneyStr(\n harvest.expense_items?.reduce((p, c) => p + c.amount, 0) ??\n 0,\n )}`}\n
\n
\n
\n )}\n
\n
\n
\n {translate(lang, 'Shell length')}\n
\n
\n {labelRange(\n harvest.shell_length,\n harvest.shell_length_max ?? undefined,\n )}\n
\n
\n
\n
\n {translate(lang, 'Shell condition')}\n
\n
{harvest.shell_condition}
\n
\n
\n
\n
\n
\n {translate(lang, 'Harvest Number')}\n
\n
{harvest.harvest_number}
\n
\n
\n
\n \n
\n {!!harvest.images && harvest.images.length > 0 && (\n
\n parseImageUrlToFileItem(x)) as any\n }\n handleChangeImages={() => {}}\n disabled={true}\n />\n
\n )}\n
\n {!!harvest.signature && (\n
\n

\n {translate(lang, 'Signature')}\n

\n \n \n
\n
\n )}\n
\n \n {translate(lang, 'Close')}\n \n
\n \n \n );\n};\n\nexport default OysterHarvestViewModal;\n","import { Modal } from 'antd';\nimport { useSelector } from 'react-redux';\nimport {\n formatNumber,\n numberToMoneyStr,\n} from '../../../entities/util-functions';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\nimport { Button, CloseIcon, Input, Subtitle } from '../../shared';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { ISeaweedHarvest } from '../../../entities/growing.entities';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport {\n SelectIsBudgetVisible,\n SelectSeaweedFarmsByFarmID,\n} from '../../../store/extra/extra.selector';\nimport { labelRange } from '../../../lib/common.helpers';\n\ninterface Props {\n visible: boolean;\n harvest: ISeaweedHarvest;\n onClose: () => void;\n}\n\nconst SeaweedHarvestViewModal = ({ visible, harvest, onClose }: Props) => {\n const farmsData = SelectSeaweedFarmsByFarmID(harvest.line.farm_id);\n const showBudget = SelectIsBudgetVisible(harvest.line.farm_id);\n const lang = useSelector(selectLang);\n\n const farm = farmsData.find(x => x.id === harvest.line.farm_id);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Harvest Details')}:\n \n \n {`${farm?.name} - ${harvest.line.line_name}`}\n \n
\n
\n
\n
\n
{translate(lang, 'Season')}
\n
{harvest.season_name}
\n
\n
\n
\n {translate(lang, 'Complete date')}\n
\n
\n {defaultDateFormat(harvest.complete_date)}\n
\n
\n
\n
\n
\n
{translate(lang, 'Final')}
\n
\n {translate(lang, !harvest.is_final ? 'Middle' : 'Final')}\n
\n
\n
\n
{translate(lang, 'Amount')}
\n
\n {`${formatNumber(harvest.amount)} kg`}\n
\n
\n
\n
\n
\n
F/P
\n
\n {translate(lang, !!harvest.is_full ? 'Full' : 'Partial')}\n
\n
\n
\n
\n {translate(lang, 'Harvested tank area')}\n
\n
{harvest.tank_area}
\n
\n
\n {!!showBudget && (\n
\n
\n
{translate(lang, 'Income')}
\n
\n {`$ ${numberToMoneyStr(harvest.income ?? 0)}`}\n
\n
\n
\n
{translate(lang, 'Expense')}
\n
\n {`$ ${numberToMoneyStr(\n harvest.expense_items?.reduce((p, c) => p + c.amount, 0) ??\n 0,\n )}`}\n
\n
\n
\n )}\n
\n
{translate(lang, 'Shell length')}
\n
\n {labelRange(\n harvest.shell_length,\n harvest.shell_length_max ?? undefined,\n )}\n
\n
\n
\n \n
\n {!!harvest.images && harvest.images.length > 0 && (\n
\n parseImageUrlToFileItem(x)) as any\n }\n handleChangeImages={() => {}}\n disabled={true}\n />\n
\n )}\n
\n {!!harvest.signature && (\n
\n

\n {translate(lang, 'Signature')}\n

\n \n \n
\n
\n )}\n
\n \n {translate(lang, 'Close')}\n \n
\n \n \n );\n};\n\nexport default SeaweedHarvestViewModal;\n","import { TBusinessType } from '../../../entities/general.entities';\nimport {\n IHarvestResource,\n IMusselHarvest,\n IOysterHarvest,\n ISeaweedHarvest,\n} from '../../../entities/growing.entities';\nimport MusselHarvestViewModal from './MusselHarvestViewModal';\nimport OysterHarvestViewModal from './OysterHarvestViewModal';\nimport SeaweedHarvestViewModal from './SeaweedHarvestViewModal';\nimport '../styles.scss';\n\ninterface Props {\n type: TBusinessType;\n visible: boolean;\n harvest: IHarvestResource;\n onClose: () => void;\n}\n\nconst HarvestViewModal = ({ type, visible, harvest, onClose }: Props) => (\n <>\n {type === 'MUSSEL' ? (\n \n ) : type === 'OYSTER' ? (\n \n ) : type === 'SEAWEED' ? (\n \n ) : (\n <>\n )}\n \n);\n\nexport default HarvestViewModal;\n","import { Modal } from 'antd';\nimport { useSelector } from 'react-redux';\nimport { IAssessmentResource } from '../../entities/farms.entities';\nimport { parseImageUrlToFileItem } from '../../util/getBase64';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { Button, CloseIcon, Input, Subtitle } from '../shared';\nimport PicturesWall from '../shared/pictures-wall/PicturesWall';\nimport { customFieldsValues } from '../../entities/util-functions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n selectAllFarms,\n SelectAssessFields,\n} from '../../store/extra/extra.selector';\nimport './styles.scss';\n\ninterface Props {\n visible: boolean;\n assessment: IAssessmentResource;\n lineId: number;\n onClose: () => void;\n}\n\nconst AssessmentViewModal = ({\n visible,\n assessment,\n lineId,\n onClose,\n}: Props) => {\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectAllFarms);\n const farm = farmsData.find(x => x.lines.some(y => y.id === lineId));\n const line = farm?.lines.find(x => x.id === lineId);\n\n const customFields = SelectAssessFields(farm?.id);\n const customValues = customFieldsValues(\n customFields,\n assessment.custom_values,\n );\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Assessment Details')}:\n \n \n {`${farm?.name} - ${line?.line_name}`}\n \n
\n
\n
\n
\n
{translate(lang, 'Size')}
\n
{`${assessment.shell_size.min} ~ ${assessment.shell_size.max}, ${assessment.shell_size.avg} mm`}
\n
\n
\n
\n {translate(lang, 'Assessment date')}\n
\n
\n {defaultDateFormat(assessment.assessment_date)}\n
\n
\n
\n
\n
\n
\n {translate(lang, 'Planned harvest date')}\n
\n
\n {defaultDateFormat(assessment.planned_date_harvest)}\n
\n
\n
\n
\n {translate(lang, 'Ready to harvest')}\n
\n
\n {!assessment.ready_harvest\n ? 'No'\n : defaultDateFormat(assessment.ready_harvest)}\n
\n
\n
\n \n {customValues?.map(x => (\n \n
{x.label}
\n
\n {`${x.value ?? ''} ${x.unit ?? ''}`}\n
\n
\n ))}\n
\n
\n \n
\n {!!assessment.images && assessment.images.length > 0 && (\n
\n parseImageUrlToFileItem(x)) as any\n }\n handleChangeImages={() => {}}\n disabled={true}\n />\n
\n )}\n \n
\n \n {translate(lang, 'Close')}\n \n
\n \n \n );\n};\n\nexport default AssessmentViewModal;\n","import { Modal } from 'antd';\nimport { useSelector } from 'react-redux';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\nimport { Button, CloseIcon, Input, Subtitle } from '../../shared';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { customFieldsValues } from '../../../entities/util-functions';\nimport { IMusselSeeding } from '../../../entities/growing.entities';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\nimport {\n SelectMusselFarmsByFarmID,\n SelectSeedingFields,\n} from '../../../store/extra/extra.selector';\n\ninterface Props {\n visible: boolean;\n seeding: IMusselSeeding;\n onClose: () => void;\n}\n\nconst MusselSeedViewModal = ({ visible, seeding, onClose }: Props) => {\n const lang = useSelector(selectLang);\n const farmsData = SelectMusselFarmsByFarmID(seeding.line.farm_id);\n const farm = farmsData.find(x => x.id === seeding.line.farm_id);\n\n const customFields = SelectSeedingFields(seeding.line.farm_id);\n const customValues = customFieldsValues(customFields, seeding.custom_values);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Seeding Details')}:\n \n \n {`${farm?.name} - ${seeding.line.line_name}`}\n \n
\n
\n
\n
\n
{translate(lang, 'Season')}
\n
{seeding.season_name}
\n
\n
\n
\n {translate(lang, 'Seed line length')}\n
\n
{`${seeding.line_length} m`}
\n
\n
\n
\n
\n
\n {translate(lang, 'Line seeding date')}\n
\n
\n {defaultDateFormat(seeding.planned_date_seed)}\n
\n
\n
\n
\n {translate(lang, 'Planned harvest date')}\n
\n
\n {defaultDateFormat(seeding.planned_date_harvest)}\n
\n
\n
\n
\n
\n
{translate(lang, 'Spat source')}
\n
\n {!!seeding.is_catch_spat\n ? 'Catch Spat'\n : seeding.spat_storage\n ? `${seeding.spat_storage.source} - ${seeding.spat_amount} kg`\n : '-'}\n
\n
\n
\n
{translate(lang, 'Density')}
\n
\n {!seeding.density_max\n ? seeding.density\n : `${seeding.density} - ${seeding.density_max}`}\n
\n
\n
\n
\n
\n
{translate(lang, 'Spat size')}
\n
\n {!seeding.spat_size_max\n ? `${seeding.spat_size} mm`\n : `${seeding.spat_size} - ${seeding.spat_size_max} mm`}\n
\n
\n
\n
{translate(lang, 'Drop')}
\n
{`${seeding.drop} m`}
\n
\n
\n
\n
\n
{translate(lang, 'Submersion')}
\n
{`${seeding.submersion} m`}
\n
\n
\n
{translate(lang, 'Spacing')}
\n
{`${seeding.spacing} mm`}
\n
\n
\n
\n {customValues?.map(x => (\n
\n
{x.label}
\n
\n {x.value === undefined || x.value === null\n ? ''\n : `${x.value} ${x.unit ?? ''}`}\n
\n
\n ))}\n
\n \n
\n {!!seeding.images && seeding.images.length > 0 && (\n
\n parseImageUrlToFileItem(x)) as any\n }\n handleChangeImages={() => {}}\n disabled={true}\n />\n
\n )}\n
\n
\n \n {translate(lang, 'Close')}\n \n
\n
\n \n );\n};\n\nexport default MusselSeedViewModal;\n","import { Modal } from 'antd';\nimport { useSelector } from 'react-redux';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\nimport { Button, CloseIcon, Input, Subtitle } from '../../shared';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { selectOysterFarms } from '../../../store/farms/farms.selector';\nimport { IOysterSeeding } from '../../../entities/growing.entities';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { translate } from '../../../lib/lang.helper';\n\ninterface Props {\n visible: boolean;\n seeding: IOysterSeeding;\n onClose: () => void;\n}\n\nconst OysterSeedViewModal = ({ visible, seeding, onClose }: Props) => {\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectOysterFarms);\n const farm = farmsData.find(x => x.id === seeding.line.farm_id);\n const line = farm?.lines.find(x => x.id === seeding.line_id);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Seeding Details')}:\n \n \n {`${farm?.name} - ${seeding.line.line_name}`}\n \n
\n
\n
\n
\n
{translate(lang, 'Season')}
\n
{seeding.season_name}
\n
\n
\n
\n {translate(lang, 'Number of %s seeded', line?.farming_method)}\n
\n
{seeding.basket_count}
\n
\n
\n
\n
\n
\n {translate(lang, 'Line seeding date')}\n
\n
\n {defaultDateFormat(seeding.planned_date_seed)}\n
\n
\n
\n
\n {translate(lang, 'Planned harvest date')}\n
\n
\n {defaultDateFormat(seeding.planned_date_harvest)}\n
\n
\n
\n
\n
\n
{translate(lang, 'Spat source')}
\n
\n {!!seeding.is_catch_spat\n ? 'Catch Spat'\n : seeding.spat_storage\n ? `${seeding.spat_storage.source} - ${seeding.spat_amount_pcs} pieces`\n : '-'}\n
\n
\n
\n
{translate(lang, 'Density')}
\n
{seeding.density}
\n
\n
\n
\n
\n
{translate(lang, 'Spat size')}
\n
\n {!seeding.spat_size_max\n ? `${seeding.spat_size} mm`\n : `${seeding.spat_size} - ${seeding.spat_size_max} mm`}\n
\n
\n
\n
{translate(lang, 'Spacing')}
\n
{`${seeding.spacing} mm`}
\n
\n
\n
\n \n
\n {!!seeding.images && seeding.images.length > 0 && (\n
\n parseImageUrlToFileItem(x)) as any\n }\n handleChangeImages={() => {}}\n disabled={true}\n />\n
\n )}\n
\n
\n \n {translate(lang, 'Close')}\n \n
\n
\n \n );\n};\n\nexport default OysterSeedViewModal;\n","import { Modal } from 'antd';\nimport { useSelector } from 'react-redux';\nimport { parseImageUrlToFileItem } from '../../../util/getBase64';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\nimport { Button, CloseIcon, Input, Subtitle } from '../../shared';\nimport PicturesWall from '../../shared/pictures-wall/PicturesWall';\nimport { selectOysterFarms } from '../../../store/farms/farms.selector';\nimport { ISeaweedSeeding } from '../../../entities/growing.entities';\nimport { translate } from '../../../lib/lang.helper';\nimport { selectLang } from '../../../store/ui/ui.selector';\n\ninterface Props {\n visible: boolean;\n seeding: ISeaweedSeeding;\n onClose: () => void;\n}\n\nconst SeaweedSeedViewModal = ({ visible, seeding, onClose }: Props) => {\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectOysterFarms);\n const farm = farmsData.find(x => x.id === seeding.line.farm_id);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Seeding Details')}:\n \n \n {`${farm?.name} - ${seeding.line.line_name}`}\n \n
\n
\n
\n
\n
{translate(lang, 'Season')}
\n
{seeding.season_name}
\n
\n
\n
\n {translate(lang, 'Seeded tank area')}\n
\n
{`${seeding.tank_area} m²`}
\n
\n
\n
\n
\n
\n {translate(lang, 'Line seeding date')}\n
\n
\n {defaultDateFormat(seeding.planned_date_seed)}\n
\n
\n
\n
\n {translate(lang, 'Planned harvest date')}\n
\n
\n {defaultDateFormat(seeding.planned_date_harvest)}\n
\n
\n
\n
\n
\n
{translate(lang, 'Spat source')}
\n
\n {!!seeding.is_catch_spat\n ? 'Catch Spat'\n : seeding.spat_storage\n ? `${seeding.spat_storage.source} - ${seeding.spat_amount} kg`\n : '-'}\n
\n
\n
\n
{translate(lang, 'Spat size')}
\n
\n {!seeding.spat_size_max\n ? `${seeding.spat_size} mm`\n : `${seeding.spat_size} - ${seeding.spat_size_max} mm`}\n
\n
\n
\n
\n \n
\n {!!seeding.images && seeding.images.length > 0 && (\n
\n parseImageUrlToFileItem(x)) as any\n }\n handleChangeImages={() => {}}\n disabled={true}\n />\n
\n )}\n
\n
\n \n {translate(lang, 'Close')}\n \n
\n
\n \n );\n};\n\nexport default SeaweedSeedViewModal;\n","import { TBusinessType } from '../../../entities/general.entities';\nimport {\n IMusselSeeding,\n IOysterSeeding,\n ISeaweedSeeding,\n ISeedingResource,\n} from '../../../entities/growing.entities';\nimport MusselSeedViewModal from './MusselSeedViewModal';\nimport OysterSeedViewModal from './OysterSeedViewModal';\nimport SeaweedSeedViewModal from './SeaweedSeedViewModal';\n\ninterface Props {\n type: TBusinessType;\n visible: boolean;\n seeding: ISeedingResource;\n onClose: () => void;\n}\n\nconst SeedViewModal = ({ type, visible, seeding, onClose }: Props) => (\n <>\n {type === 'MUSSEL' ? (\n \n ) : type === 'OYSTER' ? (\n \n ) : type === 'SEAWEED' ? (\n \n ) : (\n <>\n )}\n \n);\n\nexport default SeedViewModal;\n","import { Modal } from 'antd';\nimport { useSelector } from 'react-redux';\nimport { IMaintenanceResource } from '../../entities/farms.entities';\nimport { numberToMoneyStr } from '../../entities/util-functions';\nimport { parseImageUrlToFileItem } from '../../util/getBase64';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { Button, CloseIcon, Input, Subtitle } from '../shared';\nimport PicturesWall from '../shared/pictures-wall/PicturesWall';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectAllFarms } from '../../store/extra/extra.selector';\nimport './styles.scss';\n\ninterface Props {\n visible: boolean;\n maintenance: IMaintenanceResource;\n lineId: number;\n onClose: () => void;\n}\n\nconst MaintenanceViewModal = ({\n visible,\n maintenance,\n lineId,\n onClose,\n}: Props) => {\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectAllFarms);\n const farm = farmsData.find(x => x.lines.some(y => y.id === lineId));\n const line = farm?.lines.find(x => x.id === lineId);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Maintenance Details')}:\n \n \n {`${farm?.name} - ${line?.line_name}`}\n \n
\n
\n
\n
\n {translate(lang, 'Maintenance date')}\n
\n
\n {defaultDateFormat(maintenance.maintain_date)}\n
\n
\n
\n
{translate(lang, 'Type')}
\n
\n {maintenance.type.split('_').join(' ').toLowerCase()}\n
\n
\n
\n
{translate(lang, 'Expenses')}
\n
\n {`$ ${numberToMoneyStr(\n maintenance.expense_items?.reduce((p, c) => p + c.amount, 0) ??\n 0,\n )}`}\n
\n
\n
\n \n
\n {!!maintenance.images && maintenance.images.length > 0 && (\n
\n parseImageUrlToFileItem(x)) as any\n }\n handleChangeImages={() => {}}\n disabled={true}\n />\n
\n )}\n
\n
\n \n {translate(lang, 'Close')}\n \n
\n
\n \n );\n};\n\nexport default MaintenanceViewModal;\n","import { Modal } from 'antd';\nimport { useSelector } from 'react-redux';\nimport { Button, CloseIcon, Subtitle } from '../shared';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { selectAllFarms } from '../../store/extra/extra.selector';\nimport { IInventoryManage } from '../../entities/inventory.entities';\nimport { inventoryLabel } from '../../lib/farm.helpers';\n\ninterface Props {\n visible: boolean;\n inventorySeed: IInventoryManage;\n onClose: () => void;\n}\n\nconst FloatsViewModal = ({ visible, inventorySeed, onClose }: Props) => {\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectAllFarms);\n const farm = farmsData.find(x =>\n x.lines.some(y => y.id === inventorySeed.line_id),\n );\n const line = farm?.lines.find(x => x.id === inventorySeed.line_id);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Floats Management Details')}:\n \n \n {`${farm?.name} - ${line?.line_name}`}\n \n
\n
\n
\n
{translate(lang, 'Inventory')}
\n
\n {inventoryLabel(inventorySeed.inventory)}\n
\n
\n
\n
{translate(lang, 'Type')}
\n
\n {translate(\n lang,\n inventorySeed.status === 'IN'\n ? 'Removed from line to inventory'\n : 'Added to the line',\n )}\n
\n
\n
\n
{translate(lang, 'Quantity')}
\n
{inventorySeed.quantity}
\n
\n
\n
\n \n {translate(lang, 'Close')}\n \n
\n
\n \n );\n};\n\nexport default FloatsViewModal;\n","import React, { useMemo, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport moment from 'moment';\nimport {\n IAssessmentResource,\n IFarmWeatherResource,\n ILineResource,\n IMaintenanceResource,\n ISeedManage,\n} from '../../entities/farms.entities';\nimport { useWidth } from '../../util/useWidth';\nimport HarvestViewModal from '../view-modals/HarvestViewModal';\nimport AssessmentViewModal from '../view-modals/AssessmentViewModal';\nimport SeedViewModal from '../view-modals/SeedViewModal';\nimport MaintenanceViewModal from '../view-modals/MaintenanceViewModal';\nimport FloatsViewModal from '../view-modals/FloatsViewModal';\nimport {\n Chart as ChartJS,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n} from 'chart.js';\nimport { Line } from 'react-chartjs-2';\nimport { Dropdown, MinusIcon, PlusIcon, Spinner, Subtitle } from '../shared';\nimport { sendSingleRequest } from '../../apis';\nimport { formatNumber } from '../../entities/util-functions';\nimport {\n IHarvestResource,\n IMusselHarvest,\n IOysterHarvest,\n ISeedingResource,\n} from '../../entities/growing.entities';\nimport { IName, TBusinessType } from '../../entities/general.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { selectAllFarms } from '../../store/extra/extra.selector';\nimport { IInventoryManage } from '../../entities/inventory.entities';\nimport { getMortalityLabel, inventoryLabel } from '../../lib/farm.helpers';\nimport './styles.scss';\n\nconst seedPropLabel = (d: any) => {\n return d.line_length\n ? `Seeding ${d.line_length} m`\n : d.basket_count\n ? `Seeding ${d.basket_count} baskets`\n : `Seeding ${d.tank_area} m²`;\n};\n\nChartJS.register(LinearScale, Title, PointElement, LineElement);\n\nconst borderColor = 'rgb(53, 162, 235)',\n backgroundColor = 'rgba(53, 162, 235, 0.5)',\n oneKnot = 1.94384;\n\ninterface ITagLog {\n id: number;\n tag: IName;\n is_on: boolean;\n logged_date: number;\n user?: IName;\n}\n\ninterface IDataItem {\n type:\n | 'SEEDING'\n | 'ASSESSMENT'\n | 'MAINTENANCE'\n | 'INVENTORY_SEED'\n | 'HARVEST'\n | 'SEED_MANAGE'\n | 'TAG_LOG'\n | 'HARVEST_PLANNED';\n data:\n | ISeedingResource\n | IAssessmentResource\n | IMaintenanceResource\n | IInventoryManage\n | IHarvestResource\n | ISeedManage\n | ITagLog;\n}\n\ninterface ITimeItem {\n key: string;\n label: string | React.ReactElement;\n date: number;\n type: string;\n onClick: (d: any) => void;\n}\n\ninterface IChartPoint {\n date: number;\n size: number;\n}\n\nconst MtLabels = {\n VISUAL_ASSESSMENT: 'Visual Assessment',\n LINE_CLEANING: 'Line Cleaning',\n GENERAL_MAINTENANCE: 'General Maintenance',\n};\n\nconst llFormat = (d: number) => moment(1000 * d).format('ll');\nconst toFloor = (d: number, a: number) =>\n Math.floor(\n moment(d * 1000)\n .add(a, 'd')\n .toDate()\n .getTime() / 1000,\n );\n\ninterface IDataset {\n label: string;\n data: Array;\n borderColor: string;\n backgroundColor: string;\n tension?: number;\n yAxisID?: string;\n hidden?: boolean;\n}\n\ninterface ICalChart {\n days: string[];\n labels: string[];\n data: Array;\n avgSize: number;\n}\n\nconst calcChart = (points: IChartPoint[], isGrowing: boolean): ICalChart => {\n if (\n isGrowing &&\n new Date().getTime() - points[points.length - 1].date > 86400000\n ) {\n points.push({\n date: Math.floor(Date.now() / 1000),\n size: points[points.length - 1].size,\n });\n }\n let days: string[] = [],\n values: any = {};\n for (let pt of points) {\n const c = moment(1000 * pt.date).format('YYYY-MM-DD');\n if (days.length <= 0) {\n days.push(c);\n } else {\n while (days[days.length - 1] < c) {\n days.push(\n moment(days[days.length - 1])\n .add(1, 'day')\n .format('YYYY-MM-DD'),\n );\n }\n }\n if (!values[c]) {\n values[c] = [pt.size];\n } else {\n values[c].push(pt.size);\n }\n }\n let result: Array = [];\n for (let i = 0, j = 0; i < days.length; i = j) {\n for (j = i + 1; j < days.length && !values[days[j]]; j++);\n const s = (values[days[i]][0] + values[days[i]].slice(-1)[0]) / 2;\n result.push(s);\n for (let k = i + 1; k < j; k++) result.push(undefined);\n }\n let labels: string[] = [];\n const needY = days[0].slice(0, 4) !== new Date().getFullYear().toString();\n for (let i = 0, Y = '', M = ''; i < days.length; i++) {\n const ty = days[i].slice(0, 4),\n tm = days[i].slice(5, 7);\n if (ty !== Y && needY) {\n Y = ty;\n M = tm;\n labels.push(moment(days[i]).format('MMM Do, YY'));\n } else if (tm !== M) {\n labels.push(moment(days[i]).format('MMM Do'));\n M = tm;\n } else {\n labels.push(moment(days[i]).format('Do'));\n }\n }\n return {\n days,\n labels,\n data: result,\n avgSize:\n (points[points.length - 1].size - points[0].size) /\n Math.max(\n 1,\n moment(1000 * points[points.length - 1].date).diff(\n moment(1000 * points[0].date),\n 'days',\n ),\n ),\n };\n};\n\ninterface Props {\n type: TBusinessType;\n dataItems: IDataItem[];\n isGrowing?: boolean;\n weathers?: IFarmWeatherResource[];\n}\n\nconst TimelineView = ({\n type: businessType,\n dataItems,\n isGrowing,\n weathers,\n}: Props) => {\n const width = useWidth();\n const farmsData = useSelector(selectAllFarms);\n const lang = useSelector(selectLang);\n\n const [loading, setLoading] = useState(false);\n const [visSeed, setVisSeed] = useState();\n const [visAssess, setVisAssess] = useState();\n const [visMain, setVisMain] = useState();\n const [visFloat, setVisFloat] = useState();\n const [assistSeed, setAssistSeed] = useState();\n const [viewHar, setViewHar] = useState();\n const [compLine, setCompLine] = useState();\n const [compPoints, setCompPoints] = useState();\n const [height, setHeight] = useState(70);\n const [showLine, setShowLine] = useState(true);\n\n const { days, items, points, dateFrom, dateTo } = useMemo(() => {\n let items: ITimeItem[] = [],\n points: IChartPoint[] = [];\n for (let t of dataItems) {\n const { type, data } = t;\n if (type === 'SEEDING') {\n const d: ISeedingResource = data as any;\n const farm = farmsData.find(x => x.id === d.line.farm_id);\n items.push({\n key: `s-${d.id}`,\n type,\n label: (\n <>\n \n {`${farm?.name} - ${d.line.line_name}`}\n
\n
\n \n {`Season ${d.season_name}`}\n
\n
\n {seedPropLabel(d)}\n \n ),\n date: d.planned_date_seed,\n onClick: () => setVisSeed(d),\n });\n if (d.spat_size) {\n const size = d.spat_size_max\n ? (d.spat_size + d.spat_size_max) / 2\n : d.spat_size;\n points.push({ size, date: d.planned_date_seed });\n }\n } else if (type === 'ASSESSMENT') {\n const d: IAssessmentResource = data as any;\n const seed = dataItems.find(\n x => x.type === 'SEEDING' && x.data.id === d.seeding_id,\n )?.data as ISeedingResource;\n const farm = farmsData.find(x => x.id === seed.line.farm_id);\n items.push({\n key: `a-${d.id}`,\n type,\n label: (\n <>\n \n {`${farm?.name} - ${seed.line.line_name}`}\n
\n
\n {`Assessment ${d.shell_size.min} ~ ${d.shell_size.max}, ${d.shell_size.avg} mm`}\n \n ),\n date: d.assessment_date,\n onClick: () => {\n setVisAssess(d);\n setAssistSeed(seed);\n },\n });\n points.push({ date: d.assessment_date, size: d.shell_size.avg });\n } else if (type === 'MAINTENANCE') {\n const d: IMaintenanceResource = data as any;\n const seed = dataItems.find(\n x => x.type === 'SEEDING' && x.data.id === d.seeding_id,\n )?.data as ISeedingResource;\n const farm = farmsData.find(x => x.id === seed.line.farm_id);\n items.push({\n key: `m-${d.id}`,\n type,\n label: (\n <>\n \n {`${farm?.name} - ${seed.line.line_name}`}\n
\n
\n \n {translate(lang, 'Maintenance')}\n
\n
\n {MtLabels[d.type] ?? d.type}\n \n ),\n date: d.maintain_date,\n onClick: () => {\n setVisMain(d);\n setAssistSeed(seed);\n },\n });\n } else if (type === 'INVENTORY_SEED') {\n const d: IInventoryManage = data as any;\n const seed = dataItems.find(\n x => x.type === 'SEEDING' && x.data.id === d.seeding_id,\n )?.data as ISeedingResource;\n const farm = farmsData.find(x => x.id === seed.line.farm_id);\n items.push({\n key: `i-${d.id}`,\n type,\n label: (\n <>\n \n {`${farm?.name} - ${seed.line.line_name}`}\n
\n
\n \n {`Inventory ${d.status === 'IN' ? 'removed' : 'added'}`}\n
\n
\n {`${d.quantity} ${inventoryLabel(d.inventory)}`}\n \n ),\n date: d.manage_date,\n onClick: () => {\n setVisFloat(d);\n setAssistSeed(seed);\n },\n });\n } else if (type === 'HARVEST') {\n const d: IHarvestResource = data as any;\n const farm = farmsData.find(x => x.id === d.line.farm_id);\n const oh = data as IOysterHarvest;\n items.push({\n key: `h-${d.id}`,\n type,\n label: (\n <>\n \n {`${farm?.name} - ${d.line.line_name}`}\n
\n
\n \n {`Season ${d.season_name}`}\n
\n
\n \n {farm?.type === 'MUSSEL'\n ? `Harvest ${(d as IMusselHarvest).amount} kg`\n : farm?.type === 'OYSTER'\n ? `Harvest ${(d as IOysterHarvest).amount_dz} dz`\n : `Harvest ${d.amount} kg`}\n \n {farm?.type === 'OYSTER' && !!oh.amount_pcs && !!oh.mortality && (\n
\n {`${translate(lang, 'Mortality')}: ${getMortalityLabel(oh)}`}\n
\n )}\n \n ),\n date: d.complete_date,\n onClick: () => setViewHar(d),\n });\n if (d.shell_length) {\n const size = d.shell_length_max\n ? (d.shell_length + d.shell_length_max) / 2\n : d.shell_length;\n points.push({ date: d.complete_date, size });\n }\n } else if (type === 'SEED_MANAGE') {\n const farm = farmsData.find(x =>\n x.lines.some(y => y.id === (data as any).line_id),\n );\n const line = farm?.lines.find(x => x.id === (data as any).line_id);\n items.push({\n key: `sm-${data.id}`,\n type,\n label: (\n <>\n \n {`${farm?.name} - ${line?.line_name}`}\n
\n
\n {`Line depth ${(data as any).submersion} m`}\n \n ),\n date: (data as any).manage_date,\n onClick: () => {},\n });\n } else if (type === 'HARVEST_PLANNED') {\n const d: any = data;\n items.push({\n key: `hp-${d.id}`,\n type,\n label: (\n <>\n \n {translate(lang, 'Harvest date updated')}\n
\n
\n \n {`Old: ${defaultDateFormat(d.old_date)}`}\n
\n
\n {`New: ${defaultDateFormat(d.new_date)}`}\n \n ),\n date: d.new_date,\n onClick: () => {},\n });\n } else if (type === 'TAG_LOG') {\n const d: ITagLog = data as any;\n items.push({\n key: `tl-${d.id}-${d.is_on}`,\n type,\n label: (\n <>\n {`${d.tag.name} - ${d.is_on ? 'On' : 'Off'}`}\n
\n {d.user ? `by ${d.user.name}` : 'by Automation'}\n \n ),\n date: d.logged_date,\n onClick: () => {},\n });\n }\n }\n items.sort((a, b) => a.date - b.date);\n const days = items.reduce(\n (p: string[], c) =>\n p.includes(llFormat(c.date)) ? p : [...p, llFormat(c.date)],\n [],\n );\n points.sort((a, b) => a.date - b.date);\n const dateFrom = points.length > 0 ? points[0].date : undefined,\n dateTo = points.length > 0 ? points.slice(-1)[0].date : undefined;\n return { days, items, points, dateFrom, dateTo };\n }, [dataItems]);\n\n const chartData = useMemo(() => {\n if (!isGrowing || points.length <= 0) return null;\n\n const getWs = (d: string) => {\n if (!weathers) return { temp: 0, wind: 0 };\n const tmp = weathers.filter(\n y => moment(y.rts).format('YYYY-MM-DD') === d,\n );\n const temp =\n tmp.length <= 0\n ? undefined\n : tmp.reduce((p, c) => p + Number(c.temperature), 0) / tmp.length;\n const wind =\n tmp.length <= 0\n ? undefined\n : (tmp.reduce(\n (p, c) =>\n p +\n Math.sqrt(\n Number(c.wind_u) * Number(c.wind_u) +\n Number(c.wind_v) * Number(c.wind_v),\n ),\n 0,\n ) /\n tmp.length) *\n oneKnot;\n const waves = tmp.filter(x => !!x.waves_height);\n const wh =\n waves.length <= 0\n ? undefined\n : waves.reduce((p, c) => p + Number(c.waves_height), 0) /\n waves.length;\n return { temp, wind, waves: wh };\n };\n\n if (!compPoints || compPoints.length <= 0) {\n const { labels, days, data, avgSize } = calcChart(points, isGrowing);\n let datasets: IDataset[] = [\n {\n label: 'Size',\n data,\n borderColor,\n backgroundColor,\n tension: 0.35,\n yAxisID: 'yl',\n },\n ];\n if (weathers) {\n const ws = days.map(d => getWs(d));\n datasets.push(\n {\n label: 'Temperature',\n data: ws.map(x => x.temp),\n borderColor: '#ffcc09',\n backgroundColor: 'rgba(94,100,53,0.5)',\n tension: 0.35,\n yAxisID: 'yl',\n },\n {\n label: 'Wind (knots)',\n data: ws.map(x => x.wind),\n borderColor: '#043c9a',\n backgroundColor: 'rgba(56,88,249,0.5)',\n tension: 0.35,\n yAxisID: 'yr',\n hidden: true,\n },\n {\n label: 'Waves (m)',\n data: ws.map(x => x.waves),\n borderColor: '#003b61',\n backgroundColor: 'rgba(0,59,97,0.5)',\n tension: 0.35,\n yAxisID: 'yr',\n hidden: true,\n },\n );\n }\n return {\n labels,\n datasets,\n title: `Average spat growth: ${formatNumber(\n avgSize,\n )} mm, Average daily temperature`,\n };\n } else {\n const data1 = calcChart(points, isGrowing),\n data2 = calcChart(compPoints, !!compLine?.growing_cycle?.main_seed);\n let second: Array = [];\n for (\n let i = 0;\n i < data1.days.length && data1.days[i] < data2.days[0];\n i++\n ) {\n second.push(undefined);\n }\n for (let i = 0; i < data2.days.length; i++) {\n second.push(data2.data[i]);\n }\n for (let i = data2.days.length; i < data1.days.length; i++) {\n second.push(undefined);\n }\n let datasets: IDataset[] = [\n {\n label: 'Size',\n data: data1.data,\n backgroundColor,\n borderColor,\n tension: 0.35,\n yAxisID: 'yl',\n },\n {\n label: 'Size',\n data: second,\n backgroundColor: 'rgba(29,181,47,0.5)',\n borderColor: '#1db52f',\n tension: 0.35,\n yAxisID: 'yl',\n },\n ];\n if (weathers) {\n const ws = data1.days.map(d => getWs(d));\n datasets.push(\n {\n label: 'Temperature',\n data: ws.map(x => x.temp),\n borderColor: '#ffcc09',\n backgroundColor: 'rgba(94,100,53,0.5)',\n tension: 0.35,\n yAxisID: 'yl',\n },\n {\n label: 'Wind (knots)',\n data: ws.map(x => x.wind),\n borderColor: '#043c9a',\n backgroundColor: 'rgba(56,88,249,0.5)',\n tension: 0.35,\n yAxisID: 'yr',\n hidden: true,\n },\n {\n label: 'Waves (m)',\n data: ws.map(x => x.waves),\n borderColor: '#003b61',\n backgroundColor: 'rgba(0,59,97,0.5)',\n tension: 0.35,\n yAxisID: 'yr',\n hidden: true,\n },\n );\n }\n return {\n labels: data1.labels,\n datasets,\n title: `Average spat growth ${formatNumber(\n data1.avgSize,\n )} mm, and ${formatNumber(\n data2.avgSize,\n )} mm, Average daily temperature`,\n };\n }\n }, [points, compPoints, isGrowing, weathers]);\n\n const selectCompLine = async (v: string) => {\n const l = Number(v);\n\n const line = farmsData\n .find(x => x.lines.some(y => y.id === l))\n ?.lines.find(y => y.id === l);\n if (!line || !dateFrom || !dateTo) return;\n\n setCompLine(line);\n setLoading(true);\n const response = await sendSingleRequest(\n {\n line_id: line.id,\n min_date: toFloor(dateFrom, -1),\n max_date: toFloor(dateTo, 1),\n },\n 'GET',\n `api/farm/line/seeding`,\n true,\n );\n if (response.status) {\n let points: IChartPoint[] = [];\n for (let d of response.data.seedings) {\n if (d.spat_size) {\n const size = d.spat_size_max\n ? (d.spat_size + d.spat_size_max) / 2\n : d.spat_size;\n points.push({ size, date: d.planned_date_seed });\n }\n }\n for (let d of response.data.assessments) {\n points.push({\n date: d.assessment_date,\n size: d.shell_size.avg,\n });\n }\n for (let d of response.data.harvests) {\n if (d.shell_length) {\n const size = d.shell_length_max\n ? (d.shell_length + d.shell_length_max) / 2\n : d.shell_length;\n points.push({ date: d.complete_date, size });\n }\n }\n points.sort((a, b) => a.date - b.date);\n setCompPoints(points);\n } else {\n setCompPoints(undefined);\n }\n setLoading(false);\n };\n const changeHeight = (v: number) => {\n setHeight(height + v);\n setShowLine(false);\n setTimeout(() => setShowLine(true), 50);\n };\n\n const linesOption = farmsData.reduce(\n (p: any[], c) => [\n ...p,\n ...c.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${c.name} - ${x.line_name}`,\n })),\n ],\n [],\n );\n\n return (\n
\n {loading && (\n
\n \n
\n )}\n {chartData && (\n
\n
\n
\n \n
\n
\n
changeHeight(-10)}>\n \n
\n
\n \n {height}\n \n
\n
changeHeight(10)}>\n \n
\n
\n
\n {showLine && (\n \n )}\n
\n )}\n {width < 768 || days.length > 0 ? (\n
\n {days.map(x => (\n
\n
{x}
\n
\n
\n {items\n .filter(t => llFormat(t.date) === x)\n .map(t => (\n \n {t.label}\n
\n ))}\n
\n
\n ))}\n
\n ) : (\n
\n
\n {days.map(x => (\n
\n {x}\n
\n ))}\n
\n
\n {days.map(x => (\n
\n ))}\n
\n
\n {days.map(d => (\n
\n {items\n .filter(t => llFormat(t.date) === d)\n .map(t => (\n \n {t.label}\n
\n ))}\n
\n ))}\n
\n
\n )}\n {!!visSeed && (\n setVisSeed(undefined)}\n />\n )}\n {!!visAssess && !!assistSeed && (\n setVisAssess(undefined)}\n assessment={visAssess}\n lineId={assistSeed.line_id}\n />\n )}\n {!!visMain && assistSeed && (\n setVisMain(undefined)}\n maintenance={visMain}\n lineId={assistSeed.line_id}\n />\n )}\n {!!visFloat && assistSeed && (\n setVisFloat(undefined)}\n />\n )}\n {!!viewHar && (\n setViewHar(undefined)}\n />\n )}\n \n );\n};\n\nexport default TimelineView;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJ0AAADhCAYAAADSxrdsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA2IDc5LjE2NDc1MywgMjAyMS8wMi8xNS0xMTo1MjoxMyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjMgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhGQkM5QTM1QzBFQjExRUNBQkVDQzI0Mzg4RDNFN0MwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhGQkM5QTM2QzBFQjExRUNBQkVDQzI0Mzg4RDNFN0MwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OEZCQzlBMzNDMEVCMTFFQ0FCRUNDMjQzODhEM0U3QzAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OEZCQzlBMzRDMEVCMTFFQ0FCRUNDMjQzODhEM0U3QzAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7xuf8VAAALiklEQVR42uydW0xV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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJ0AAADhCAYAAADSxrdsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA2IDc5LjE2NDc1MywgMjAyMS8wMi8xNS0xMTo1MjoxMyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjMgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGQzYwREUzQzBFQjExRUNCMTQ2RkNDMjU1MEE0NjAyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGQzYwREU0QzBFQjExRUNCMTQ2RkNDMjU1MEE0NjAyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OUZDNjBERTFDMEVCMTFFQ0IxNDZGQ0MyNTUwQTQ2MDIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OUZDNjBERTJDMEVCMTFFQ0IxNDZGQ0MyNTUwQTQ2MDIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7arb0RAAAMyUlEQVR42uydfWiV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\"","import { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { useWidth } from '../../util/useWidth';\nimport { Modal } from 'antd';\nimport { Button, CloseIcon, Input, Subtitle } from '../shared';\nimport PicturesWall from '../shared/pictures-wall/PicturesWall';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\ninterface Props {\n visible: boolean;\n title: string;\n lineId: number;\n onLoadLine: () => void;\n onClose: () => void;\n}\n\nconst LineSpatModal = ({\n visible,\n title,\n lineId,\n onLoadLine,\n onClose,\n}: Props) => {\n const width = useWidth();\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [spatCnt, setSpatCnt] = useState('');\n const [comment, setComment] = useState('');\n const [images, setImages] = useState([]);\n\n const addConfirm = () => {\n if (spatCnt.length <= 0) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, 'Please fill the value'),\n }),\n );\n return;\n }\n const form = {\n line_id: lineId,\n spat_count: spatCnt,\n comment,\n images,\n };\n setDisabled(true);\n sendSingleRequest(form, 'POST', `api/farm/line/line-spat`, true).then(r => {\n if (r.status) {\n onLoadLine();\n onClose();\n } else {\n setDisabled(false);\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, r.data?.message ?? 'Something went wrong'),\n }),\n );\n }\n });\n };\n\n return (\n }\n width={700}\n footer={null}\n >\n
\n
\n \n {translate(lang, title)}\n \n
\n
\n
\n setSpatCnt(e.target.value)}\n />\n
\n
\n setComment(e.target.value)}\n />\n
\n
\n setImages(img as any)}\n />\n
\n
\n
\n
\n \n {translate(lang, 'Close')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default LineSpatModal;\n","import { Button, Modal, message } from 'antd';\nimport { ILineResource } from '../../entities/farms.entities';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useState } from 'react';\nimport {\n CheckboxButton,\n CloseIcon,\n Subtitle,\n Button as BigBtn,\n Dropdown,\n Datepicker,\n} from '../shared';\nimport { CheckCircleFilled, MinusCircleOutlined } from '@ant-design/icons';\nimport { ITag } from '../../entities/automation.entities';\nimport { sendSingleRequest } from '../../apis';\nimport { loadTags } from '../../store/automation/automation.actions';\nimport { periodToStr } from '../../lib/common.helpers';\nimport moment from 'moment';\nimport { toMillisecond } from '../../util/toggleSecondMillisecond';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { SelectTagsByFarmID } from '../../store/extra/extra.selector';\nimport { loadExtraData } from '../../store/extra/extra.actions';\n\ninterface IPastForm {\n tag_id: number | null;\n start_time: number;\n end_time?: number | null;\n}\n\ninterface Props {\n lineData: ILineResource;\n loadLine: (i: boolean) => void;\n}\n\nconst LineTagButton = ({ lineData, loadLine }: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const lineTags = SelectTagsByFarmID(lineData.farm_id);\n const selectedTags = lineTags?.filter(x =>\n x.tag_lines.some(y => y.line_id === lineData.id),\n );\n\n const [disabled, setDisabled] = useState(false);\n const [visible, setVisible] = useState(false);\n const [isPast, setIsPast] = useState(false);\n\n const [pastForm, setPastForm] = useState({\n tag_id: null,\n start_time: Date.now(),\n });\n\n const toggleClick = async (tag: ITag) => {\n let lines = tag.tag_lines.map(x => x.line_id);\n if (lines.includes(lineData.id)) {\n lines = lines.filter(x => x !== lineData.id);\n } else {\n lines.push(lineData.id);\n }\n setDisabled(true);\n const res = await sendSingleRequest(\n { name: tag.name, lines },\n 'PUT',\n `api/tag/${tag.id}`,\n true,\n );\n if (res.status) {\n await dispatch(loadTags());\n await loadLine(true);\n if (tag.account_id) {\n await dispatch(loadExtraData());\n }\n dispatch(loadFarmsData());\n } else {\n message.error(translate(lang, res.data?.message ?? 'Unknown error'));\n }\n setDisabled(false);\n };\n const toggleUrgent = async (is_urgent: boolean) => {\n if (lineData.is_urgent === is_urgent) return;\n setDisabled(true);\n const response = await sendSingleRequest(\n { line_id: lineData.id, is_urgent },\n 'PUT',\n `api/farm/line/lines/${lineData.id}`,\n true,\n );\n if (response.status) {\n await dispatch(loadFarmsData());\n await loadLine(true);\n dispatch(loadExtraData());\n setDisabled(false);\n } else {\n setDisabled(false);\n message.error(translate(lang, response.data?.message ?? 'Unknown error'));\n }\n };\n const pastConfirm = async () => {\n if (!pastForm.tag_id) {\n message.error(translate(lang, 'Please select a tag'));\n return;\n }\n const data = {\n line_id: lineData.id,\n tag_id: pastForm.tag_id,\n start_time: moment(pastForm.start_time).format('YYYY-MM-DD'),\n end_time: pastForm.end_time\n ? moment(pastForm.end_time).format('YYYY-MM-DD')\n : null,\n };\n setDisabled(true);\n const res = await sendSingleRequest(data, 'POST', 'api/tag_line', true);\n setDisabled(false);\n if (res.status) {\n await dispatch(loadTags());\n await loadLine(true);\n dispatch(loadExtraData());\n dispatch(loadFarmsData());\n setIsPast(false);\n } else {\n message.error(translate(lang, res.data?.message ?? 'Unknown error'));\n }\n };\n\n return !!lineTags && lineTags.length > 0 ? (\n <>\n {!selectedTags || selectedTags.length <= 0 ? (\n \n ) : (\n selectedTags.map(x => (\n setVisible(true)}\n >\n
\n
\n {x.name}\n
\n
\n {translate(\n lang,\n 'tagged %s days ago',\n moment().diff(\n toMillisecond(\n x.tag_lines.find(y => y.line_id === lineData.id)\n ?.created_at,\n ),\n 'days',\n ),\n )}\n
\n
\n \n ))\n )}\n {visible && (\n setVisible(false)}\n footer={null}\n closable\n closeIcon={}\n width={550}\n >\n
\n
\n toggleUrgent(e.target.checked)}\n />\n
\n \n
\n {lineTags.map(x => (\n
\n y.line_id === lineData.id) ? (\n \n ) : (\n \n )\n }\n type={\n x.tag_lines.some(y => y.line_id === lineData.id)\n ? 'primary'\n : 'default'\n }\n onClick={() => toggleClick(x)}\n danger={x.is_urgent}\n disabled={disabled}\n >\n {x.name}\n {x.is_urgent\n ? ` (${translate(\n lang,\n 'Required urgent attention after %s',\n periodToStr(x.period ?? 0),\n )})`\n : ''}\n \n
\n ))}\n
\n
\n {\n setVisible(false);\n setIsPast(true);\n }}\n >\n {translate(lang, 'Add tag in the past')}\n \n
\n
\n \n )}\n {!!isPast && (\n setIsPast(false)}\n footer={null}\n closable\n closeIcon={}\n width={650}\n >\n
\n
\n \n {translate(lang, 'Add tag in the past')}\n \n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n }))}\n value={pastForm.tag_id?.toString() ?? undefined}\n onChange={v => setPastForm({ ...pastForm, tag_id: Number(v) })}\n />\n
\n
\n \n e &&\n setPastForm({ ...pastForm, start_time: e.toDate().getTime() })\n }\n />\n
\n
\n {\n e.target.checked\n ? setPastForm({\n ...pastForm,\n end_time: null,\n })\n : setPastForm({\n ...pastForm,\n end_time: Date.now(),\n });\n }}\n />\n
\n {!!pastForm.end_time && (\n
\n \n e &&\n setPastForm({ ...pastForm, end_time: e.toDate().getTime() })\n }\n />\n
\n )}\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n )}\n \n ) : (\n <>\n );\n};\n\nexport default LineTagButton;\n","import { useState } from 'react';\nimport { ILineResource } from '../../entities/farms.entities';\nimport { Modal } from 'antd';\nimport { CloseIcon } from '../shared';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n lineData: ILineResource;\n}\n\nconst HarvestPredictButton = ({ lineData }: Props) => {\n const lang = useSelector(selectLang);\n const [visible, setVisible] = useState(false);\n\n return (\n <>\n \n {visible && (\n setVisible(false)}\n footer={null}\n closable\n closeIcon={}\n width={400}\n >\n
\n
\n {translate(\n lang,\n 'Harvest prediction for %s line is on %s',\n lineData.line_name,\n defaultDateFormat(\n lineData.growing_cycle?.predicted_date_harvest,\n ),\n )}\n
\n
\n \n )}\n \n );\n};\n\nexport default HarvestPredictButton;\n","import { useEffect, useState } from 'react';\nimport { ITrackCode } from '../../entities/task.entities';\nimport { sendSingleRequest } from '../../apis';\nimport { hashColor } from '../../entities/util-functions';\nimport moment from 'moment';\nimport { toMillisecond } from '../../util/toggleSecondMillisecond';\nimport { Modal, Table } from 'antd';\nimport { Button, CloseIcon, Spinner, Subtitle } from '../shared';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\n\ninterface ITrackRow {\n id: number | string;\n trackTime: string;\n seedings: string;\n harvests: string;\n trackID: string;\n status: string;\n userName: string;\n color: string;\n children: Array<{\n id: number;\n trackTime: string;\n status: string;\n userName: string;\n color: string;\n }>;\n}\n\nconst columns = (lang: TLang | undefined) => [\n {\n title: translate(lang, 'Date & Time'),\n key: 'time',\n render: (x: ITrackRow) => {x.trackTime},\n },\n {\n title: translate(lang, 'Track ID'),\n key: 'trackID',\n render: (x: ITrackRow) => {x.trackID},\n },\n {\n title: translate(lang, 'Status'),\n key: 'status',\n render: (x: ITrackRow) => {x.status},\n },\n {\n title: translate(lang, 'Seedings'),\n key: 'seedings',\n render: (x: ITrackRow) => {x.seedings},\n },\n {\n title: translate(lang, 'Harvests'),\n key: 'harvests',\n render: (x: ITrackRow) => {x.harvests},\n },\n {\n title: translate(lang, 'User'),\n key: 'user',\n render: (x: ITrackRow) => {x.userName},\n },\n {\n title: '',\n key: 'right',\n render: (x: any) => null,\n },\n];\n\ninterface Props {\n visible: boolean;\n seedingIDs: number[];\n onClose: () => void;\n}\n\nconst SeedingTrackModal = ({ visible, seedingIDs, onClose }: Props) => {\n const lang = useSelector(selectLang);\n\n const [loading, setLoading] = useState(false);\n const [tracks, setTracks] = useState();\n\n useEffect(() => {\n (async () => {\n let res: ITrackRow[] = [];\n let tmp: ITrackCode[] = [];\n setLoading(true);\n for (let id of seedingIDs) {\n const response = await sendSingleRequest(\n { seeding_id: id },\n 'GET',\n 'api/task/track-codes',\n true,\n );\n if (response.status) {\n for (let x of response.data) {\n if (!tmp.some(y => y.track_id === x.track_id)) {\n tmp.push(x);\n }\n }\n }\n }\n tmp = tmp.filter(x => x.statuses.length > 0);\n tmp.sort(\n (a, b) => a.statuses[0].tracked_time - b.statuses[0].tracked_time,\n );\n for (let t of tmp) {\n const last = t.statuses[t.statuses.length - 1];\n const color = hashColor(\n `${Math.random() * 1000}-${last.tracked_time}-${t.track_id}`,\n );\n const harvestNumber = t.track_lines\n .filter(x => x.harvest)\n .map(x => x.harvest?.harvest_number)\n .join(', ');\n const row: ITrackRow = {\n id: t.id,\n trackTime: moment(toMillisecond(last.tracked_time)).format('lll'),\n trackID: t.track_id,\n seedings: t.track_lines\n .filter(x => x.seeding_id)\n .map(x => x.seeding_id)\n .join(', '),\n harvests: t.track_lines\n .filter(x => x.harvest?.harvest_number)\n .map(x => x.harvest?.harvest_number)\n .join(', '),\n status: last.status,\n userName: last.user?.name ?? '',\n color,\n children: t.statuses.map((x, j) => ({\n id: j,\n trackTime: moment(toMillisecond(x.tracked_time)).format('lll'),\n status: x.status,\n userName: x.user?.name ?? '',\n color: color,\n })),\n };\n res.push(row);\n }\n setTracks(res);\n setLoading(false);\n })();\n }, [seedingIDs]);\n\n return (\n }\n width={1100}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Track Information')}\n \n
\n {loading ? (\n
\n \n
\n ) : (\n
\n \n
\n )}\n
\n \n {translate(lang, 'Close')}\n \n
\n
\n \n );\n};\n\nexport default SeedingTrackModal;\n","import React from 'react';\nimport { TModuleName } from './util-functions';\n\nexport type TActionType =\n | 'SEEDING'\n | 'MAINTENANCE'\n | 'ASSESSMENT'\n | 'INVENTORY_SEED'\n | 'HARVEST';\n\nexport type TTimeTrackType =\n | 'SEEDING'\n | 'ASSESSMENT'\n | 'MAINTENANCE'\n | 'HARVEST'\n | 'TASK';\n\nexport const TrackStatus = {\n HARVESTED: 'harvested',\n MIDDLE_HARVESTED: 'middle_harvested',\n OFFLOADED_FROM_BOAT: 'offloaded from boat',\n LOADED_TO_COLD_STORAGE: 'loaded to cold storage',\n STARTED_PROCESSING: 'started processing',\n FINISHED_PROCESSING: 'finished processing',\n SEEDED: 'seeded',\n};\n\nexport const BagStatus = {\n HARVESTED_MUSSELS: 'Harvested Mussels',\n};\n\nexport type TBusinessType = 'MUSSEL' | 'OYSTER' | 'SEAWEED';\n\nexport interface ITimeTrack {\n id: number;\n rel_type: TTimeTrackType;\n rel_id: number;\n start_time: number;\n finish_time: number;\n status: 'TRACKED' | 'EDITED';\n is_final: boolean;\n}\n\nexport interface IWeatherConditionResource {\n id: number;\n type: TActionType;\n form_id: number;\n latitude: string | null;\n longitude: string | null;\n sunset_time: string | null;\n temperature: string | null;\n wind_u: string | null;\n wind_v: string | null;\n precip: string | null;\n pressure: number | null;\n created_at: number;\n}\n\nexport interface ITimeRange {\n start_time: number;\n finish_time: number;\n}\n\nexport interface ILocation {\n lat: number;\n lng: number;\n}\n\nexport interface IWeatherLocation {\n latitude: number;\n longitude: number;\n}\n\nexport interface IGalleryImage {\n uid: string;\n name: string;\n size: number;\n thumbUrl: string;\n type: 'image/jpeg' | 'image/jpg' | 'image/png';\n}\n\nexport interface IName {\n id: number;\n name: string;\n}\n\nexport interface ISize {\n min: number;\n max: number;\n avg: number;\n}\n\nexport interface IDescription {\n id: number;\n name: string;\n description?: string | null;\n}\n\nexport interface INavbar {\n link: string;\n title: string;\n id: string;\n icon: React.ReactNode;\n}\n\nexport interface IMainList {\n label: React.ReactNode;\n value: string;\n id: string;\n apiValue?: string;\n}\n\nexport interface ILink {\n module?: TModuleName;\n link: string;\n name: string;\n isExact?: boolean;\n children?: ILink[];\n}\n","import { useDispatch, useSelector } from 'react-redux';\nimport { IHarvestResource } from '../../entities/growing.entities';\nimport { useState } from 'react';\nimport { TrackStatus } from '../../entities/general.entities';\nimport { formatNumber } from '../../entities/util-functions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { sendSingleRequest } from '../../apis';\nimport { Modal } from 'antd';\nimport { Button, CloseIcon, Dropdown, Input, Subtitle } from '../shared';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { toSecond } from '../../util/toggleSecondMillisecond';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n visible: boolean;\n lineID: number;\n seedingID: number;\n harvests: IHarvestResource[];\n onClose: () => void;\n}\n\nconst AddTrackStatusModal = ({\n visible,\n lineID,\n seedingID,\n harvests,\n onClose,\n}: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n\n const [harvestID, setHarvestID] = useState();\n const [code, setCode] = useState('');\n const [status, setStatus] = useState(TrackStatus.HARVESTED);\n const [loading, setLoading] = useState(false);\n\n const harvestOptions = [\n { id: 'undefined', value: '', label: translate(lang, 'Unconfirmed') },\n ...harvests.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.id} - ${formatNumber(x.amount)} kg`,\n })),\n ];\n const statusOptions = [\n TrackStatus.HARVESTED,\n TrackStatus.OFFLOADED_FROM_BOAT,\n TrackStatus.LOADED_TO_COLD_STORAGE,\n ].map(x => ({ id: x, value: x, label: x }));\n\n const setError = (message: string) =>\n dispatch(showFeedback({ isMessageModal: true, message, type: 'error' }));\n\n const confirmClick = async () => {\n if (harvests?.some(x => x.is_full) && !harvestID) {\n setError('Please select Harvest ID');\n return;\n }\n if (!/^[a-f0-9]{32}$/.test(code)) {\n setError('Invalid QR code value');\n return;\n }\n setLoading(true);\n let response = await sendSingleRequest(\n {\n track_id: code,\n data: [\n { line_id: lineID, seeding_id: seedingID, harvest_id: harvestID },\n ],\n },\n 'POST',\n 'api/task/track-lines',\n true,\n );\n if (!response.status) {\n setLoading(false);\n setError(response.data?.message ?? 'Error adding track line');\n return;\n }\n response = await sendSingleRequest(\n { track_id: code, status, tracked_time: toSecond(Date.now()) },\n 'POST',\n 'api/task/track-status',\n true,\n );\n setLoading(false);\n if (!response.status) {\n setError(response.data?.message ?? 'Error adding track status');\n return;\n }\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, 'QR code added successfully'),\n type: 'success',\n }),\n );\n onClose();\n };\n\n return (\n }\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Add Scanned QR Track')}\n \n
\n
\n
\n \n setHarvestID(v.length <= 0 ? undefined : Number(v))\n }\n />\n
\n
\n setCode(e.target.value)}\n />\n
\n
\n setStatus(v)}\n />\n
\n
\n
\n \n {translate(lang, 'Close')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n
\n \n \n );\n};\n\nexport default AddTrackStatusModal;\n","import { useState, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport {\n BreadcrumbComponent,\n Button,\n Caret,\n DropdownMenu,\n Pen,\n PositiveNegativeTitle,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { IMusselLineDetail } from '../../entities/farms.entities';\nimport prevIcon from '../../images/prev-image.png';\nimport nextIcon from '../../images/next-image.png';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport LineSpatModal from '../../components/lines/LineSpatModal';\nimport { Spin } from 'antd';\nimport {\n customSpecialValue,\n formatNumber,\n} from '../../entities/util-functions';\nimport LineTagButton from '../../components/lines/LineTagButton';\nimport getBreadcrumbMenu from '../../util/BreadcrumbMenu';\nimport { IMusselCycle, IMusselHarvest } from '../../entities/growing.entities';\nimport { amountDays } from '../../lib/farm.helpers';\nimport {\n LineInventoriesLabel,\n SeedInventoriesLabel,\n} from '../../components/CommonViews';\nimport HarvestPredictButton from '../../components/lines/HarvestPredictButton';\nimport SeedingTrackModal from '../../components/track-modals/SeedingTrackModal';\nimport AddTrackStatusModal from '../../components/track-modals/AddTrackStatusModal';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n selectAllFarms,\n SelectAssessFields,\n SelectIsEditable,\n SelectIsFarmable,\n SelectIsGrower,\n} from '../../store/extra/extra.selector';\nimport { labelNumber, labelRange } from '../../lib/common.helpers';\n\ninterface Props {\n lineData: IMusselLineDetail;\n loadLine: () => void;\n cyclePart: IMusselCycle | null;\n isPrevEnabled: boolean;\n isNextEnabled: boolean;\n onClickPrevGroup: () => void;\n onClickNextGroup: () => void;\n showEditLineModal: () => void;\n showEditSeedModal: () => void;\n onSeedingClick: () => void;\n onAssessmentClick: () => void;\n onCatchSpatClick: () => void;\n onHarvestClick: () => void;\n onMaintenanceClick: () => void;\n onFloatingManageClick: () => void;\n onExtraSeedClick: () => void;\n checkedHistoryView: number;\n onHistoryViewClick: () => void;\n}\n\nconst FlupsyMusselLineDesktop = ({\n lineData,\n loadLine,\n cyclePart,\n onClickPrevGroup,\n onClickNextGroup,\n isPrevEnabled,\n isNextEnabled,\n showEditLineModal,\n showEditSeedModal,\n onSeedingClick,\n onAssessmentClick,\n onCatchSpatClick,\n onHarvestClick,\n onMaintenanceClick,\n onFloatingManageClick,\n onExtraSeedClick,\n checkedHistoryView,\n onHistoryViewClick,\n}: Props) => {\n const lang = useSelector(selectLang);\n const isEditable = SelectIsEditable(lineData.farm_id);\n const isGrower = SelectIsGrower(lineData.farm_id);\n const isFarmable = SelectIsFarmable(lineData.farm_id);\n const { redirectToLine } = useMenuHandler();\n const curFarm = useSelector(selectAllFarms).find(\n x => x.id === lineData.farm_id,\n );\n const lines = curFarm?.lines ?? [];\n const mainSeed = cyclePart?.main_seed;\n const lastAssessment =\n cyclePart && cyclePart.assessments.length > 0\n ? cyclePart?.assessments.reduce((p, c) =>\n !p || p.assessment_date < c.assessment_date ? c : p,\n )\n : null;\n const lastHarvest =\n cyclePart && cyclePart.harvests.length > 0\n ? cyclePart?.harvests.reduce((p, c) =>\n p.complete_date > c.complete_date ? p : c,\n )\n : null;\n const longlineLength =\n cyclePart?.seedings.reduce((p, c) => p + c.line_length, 0) ?? 0;\n const cur = lines.findIndex(t => t.id === lineData.id) ?? -1;\n const prev = (cur - 1 + (lines.length ?? 0)) % (lines.length ?? 0);\n const next = (cur + 1) % (lines.length ?? 0);\n\n const breadcrumbItems = getBreadcrumbMenu('FARM_LINE', {\n FARM_ID: lineData.farm_id,\n LINE_ID: lineData.id,\n FARM_NAME: lineData?.farm_name,\n LINE_NAME: lineData?.line_name,\n }).slice(0, -1);\n\n const customFields = SelectAssessFields(lineData.farm_id);\n const assessmentColor = customSpecialValue(\n customFields,\n lastAssessment?.custom_values,\n 'Color',\n );\n\n const [showLineSpat, setShowLineSpat] = useState(false);\n const [trackSeedings, setTrackSeedings] = useState();\n const [qrSeed, setQrSeed] = useState<{\n farmID: number;\n lineID: number;\n seedingID: number;\n harvests: IMusselHarvest[];\n }>();\n\n const { totalHarvested, totalSeeded, totalStorage } = useMemo(\n () => ({\n totalHarvested: lineData.growing_cycle?.total_harvested_amount ?? 0,\n totalSeeded: lineData.growing_cycle?.total_seeded_amount ?? 0,\n totalStorage: lineData.growing_cycle?.total_storage ?? 0,\n }),\n [lineData],\n );\n\n function getNewestDate() {\n const timestamps = [\n lastHarvest?.complete_date,\n lastAssessment?.assessment_date,\n mainSeed?.planned_date_seed,\n ].filter(date => date !== undefined && date !== null) as number[];\n console.log(timestamps);\n if (timestamps.length === 0) {\n return undefined;\n }\n\n return Math.max(...timestamps);\n }\n\n const lastActivityDate = getNewestDate();\n\n return (\n
\n
\n
\n \n {lines && (\n
\n redirectToLine(lineData.farm_id, lines[prev].id)}\n >\n prev\n \n \n {translate(lang, 'Line %s', lineData.line_name)}\n \n redirectToLine(lineData.farm_id, lines[next].id)}\n >\n next\n \n
\n )}\n
\n
\n
\n \n \n \n \n {mainSeed?.season_name ?? translate(lang, 'Empty')}\n \n \n \n \n
\n \n \n \n \n {translate(lang, 'Harvest Complete')}\n \n
\n
\n
\n
\n
\n \n {translate(lang, 'Line %s', lineData.line_name)}\n \n
\n setShowLineSpat(true)}\n >\n {translate(\n lang,\n 'Last Spat Count: %s',\n lineData.last_spat_count ?? 0,\n )}\n
\n
\n {!!lineData.growing_cycle?.last_harvest ? (\n
\n \n \n {translate(lang, 'Line is partially harvested')}\n \n \n \n {translate(\n lang,\n 'Harvested %s dz so far',\n totalHarvested,\n )}\n \n
\n ) : (\n !!lineData.last_harvest && (\n
\n \n \n {translate(lang, 'View last harvest')}\n \n \n
\n )\n )}\n
\n \n
\n
\n
\n \n {translate(lang, 'Date seeded')}\n \n \n {defaultDateFormat(mainSeed?.planned_date_seed, '-')}\n \n \n {translate(lang, 'Spat Size')}\n \n \n {lastAssessment\n ? labelNumber(lastAssessment.shell_size.avg, 'mm', '-')\n : labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n '-',\n )}\n \n
\n
\n \n {translate(\n lang,\n mainSeed?.is_growing\n ? 'Planned harvest date'\n : 'Harvested date',\n )}\n \n \n {defaultDateFormat(\n lastAssessment?.planned_date_harvest ??\n mainSeed?.planned_date_harvest,\n '-',\n )}\n \n \n {translate(lang, 'Batch size')}\n \n \n {totalStorage !== 0 ?\n <>\n [{lineData.growing_cycle?.main_seed?.spat_storage?.id}] {lineData.growing_cycle?.main_seed?.spat_storage?.source}\n - {`${formatNumber(\n (totalSeeded / totalStorage) * 100,\n )}%`}\n : '-'}\n \n
\n
\n \n {translate(lang, 'Stage')}\n \n \n {longlineLength > 0 &&\n cyclePart?.seedings.map((x, i) => (\n
\n {`${formatNumber(\n (x.line_length / longlineLength) * 100,\n )}% ${translate(lang, 'stage')} ${\n x.spat_storage?.stage ?? 1\n }`}\n
\n ))}\n
\n \n {translate(lang, 'Batch left in Flupsy')}\n \n \n {totalSeeded !== 0 ?\n <>\n {`${formatNumber(\n (totalHarvested / totalSeeded) * 100,\n )}%`} [{totalSeeded} - {totalHarvested} {translate(lang, 'moved to farm')}]\n : '-'}\n \n
\n
\n \n {translate(\n lang,\n 'Last checked',\n )}\n \n \n {lastActivityDate !== undefined ? defaultDateFormat(lastActivityDate, '-') : '-'}\n \n
\n {isEditable && (\n
\n setTrackSeedings([mainSeed.id]),\n },\n {\n label: translate(lang, 'Add Scanned QR'),\n onClick: () =>\n setQrSeed({\n farmID: lineData.farm_id,\n lineID: lineData.id,\n seedingID: mainSeed.id,\n harvests: cyclePart.harvests,\n }),\n },\n ]\n : undefined\n }\n />\n
\n )}\n
\n {!!lineData.growing_cycle?.predicted_date_harvest && (\n
\n \n
\n )}\n
\n
\n {!!mainSeed ? (\n \n {checkedHistoryView === -1 ? (\n
\n \n
\n ) : (\n translate(\n lang,\n checkedHistoryView === 1 ? 'Hide history' : 'Show history',\n )\n )}\n \n ) : (\n \n )}\n {isFarmable && (\n
\n {mainSeed ? (\n <>\n {mainSeed.is_growing ? (\n <>\n \n {translate(lang, 'Inventory Management')}\n \n \n {translate(lang, 'Add maintenance')}\n \n {!mainSeed.is_catch_spat && (\n \n {translate(lang, 'Add extra seed')}\n \n )}\n \n {translate(lang, 'Add assessment')}\n \n \n ) : (\n \n )}\n \n ) : (\n
\n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(lineData?.line_idle)}\n \n
\n {!isGrower && (\n \n {translate(lang, 'Catch Spat')}\n \n )}\n \n {translate(lang, 'Seed the line')}\n \n \n {translate(lang, 'Add maintenance')}\n \n
\n )}\n {showLineSpat && (\n setShowLineSpat(false)}\n />\n )}\n
\n )}\n
\n {!!trackSeedings && (\n setTrackSeedings(undefined)}\n />\n )}\n {!!qrSeed && (\n setQrSeed(undefined)}\n />\n )}\n \n );\n};\n\nexport default FlupsyMusselLineDesktop;\n","import { useState, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport {\n BreadcrumbComponent,\n Button,\n Caret,\n DropdownMenu,\n Pen,\n PositiveNegativeTitle,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { IMusselLineDetail } from '../../entities/farms.entities';\nimport prevIcon from '../../images/prev-image.png';\nimport nextIcon from '../../images/next-image.png';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport LineSpatModal from '../../components/lines/LineSpatModal';\nimport { Spin } from 'antd';\nimport {\n customSpecialValue,\n formatNumber,\n} from '../../entities/util-functions';\nimport LineTagButton from '../../components/lines/LineTagButton';\nimport getBreadcrumbMenu from '../../util/BreadcrumbMenu';\nimport { IMusselCycle, IMusselHarvest } from '../../entities/growing.entities';\nimport { amountDays } from '../../lib/farm.helpers';\nimport {\n LineInventoriesLabel,\n SeedInventoriesLabel,\n} from '../../components/CommonViews';\nimport HarvestPredictButton from '../../components/lines/HarvestPredictButton';\nimport SeedingTrackModal from '../../components/track-modals/SeedingTrackModal';\nimport AddTrackStatusModal from '../../components/track-modals/AddTrackStatusModal';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n selectAllFarms,\n SelectAssessFields,\n SelectIsEditable,\n SelectIsFarmable,\n SelectIsGrower,\n} from '../../store/extra/extra.selector';\nimport { labelNumber, labelRange } from '../../lib/common.helpers';\n\ninterface Props {\n lineData: IMusselLineDetail;\n loadLine: () => void;\n cyclePart: IMusselCycle | null;\n isPrevEnabled: boolean;\n isNextEnabled: boolean;\n onClickPrevGroup: () => void;\n onClickNextGroup: () => void;\n showEditLineModal: () => void;\n showEditSeedModal: () => void;\n onSeedingClick: () => void;\n onAssessmentClick: () => void;\n onCatchSpatClick: () => void;\n onHarvestClick: () => void;\n onMaintenanceClick: () => void;\n onFloatingManageClick: () => void;\n onExtraSeedClick: () => void;\n checkedHistoryView: number;\n onHistoryViewClick: () => void;\n}\n\nconst MusselLineDesktop = ({\n lineData,\n loadLine,\n cyclePart,\n onClickPrevGroup,\n onClickNextGroup,\n isPrevEnabled,\n isNextEnabled,\n showEditLineModal,\n showEditSeedModal,\n onSeedingClick,\n onAssessmentClick,\n onCatchSpatClick,\n onHarvestClick,\n onMaintenanceClick,\n onFloatingManageClick,\n onExtraSeedClick,\n checkedHistoryView,\n onHistoryViewClick,\n}: Props) => {\n const lang = useSelector(selectLang);\n const isEditable = SelectIsEditable(lineData.farm_id);\n const isGrower = SelectIsGrower(lineData.farm_id);\n const isFarmable = SelectIsFarmable(lineData.farm_id);\n const { redirectToLine } = useMenuHandler();\n const curFarm = useSelector(selectAllFarms).find(\n x => x.id === lineData.farm_id,\n );\n const lines = curFarm?.lines ?? [];\n const mainSeed = cyclePart?.main_seed;\n const lastAssessment =\n cyclePart && cyclePart.assessments.length > 0\n ? cyclePart?.assessments.reduce((p, c) =>\n !p || p.assessment_date < c.assessment_date ? c : p,\n )\n : null;\n const lastHarvest =\n cyclePart && cyclePart.harvests.length > 0\n ? cyclePart?.harvests.reduce((p, c) =>\n p.complete_date > c.complete_date ? p : c,\n )\n : null;\n const longlineLength = cyclePart?.main_seed.is_growing\n ? lineData.growing_cycle?.current_line_length ?? 0\n : cyclePart?.seedings.reduce((p, c) => p + c.line_length, 0) ?? 0;\n const cur = lines.findIndex(t => t.id === lineData.id) ?? -1;\n const prev = (cur - 1 + (lines.length ?? 0)) % (lines.length ?? 0);\n const next = (cur + 1) % (lines.length ?? 0);\n\n const breadcrumbItems = getBreadcrumbMenu('FARM_LINE', {\n FARM_ID: lineData.farm_id,\n LINE_ID: lineData.id,\n FARM_NAME: lineData?.farm_name,\n LINE_NAME: lineData?.line_name,\n }).slice(0, -1);\n\n const customFields = SelectAssessFields(lineData.farm_id);\n const assessmentColor = customSpecialValue(\n customFields,\n lastAssessment?.custom_values,\n 'Color',\n );\n\n const [showLineSpat, setShowLineSpat] = useState(false);\n const [trackSeedings, setTrackSeedings] = useState();\n const [qrSeed, setQrSeed] = useState<{\n farmID: number;\n lineID: number;\n seedingID: number;\n harvests: IMusselHarvest[];\n }>();\n\n const { bagsQuantity, harvestedLength } = useMemo(\n () => ({\n bagsQuantity: lineData.growing_cycle?.total_harvested_bags ?? 0,\n harvestedLength: lineData.growing_cycle?.total_harvested_length ?? 0,\n }),\n [lineData],\n );\n\n return (\n
\n
\n
\n \n {lines && (\n
\n redirectToLine(lineData.farm_id, lines[prev].id)}\n >\n prev\n \n \n {translate(lang, 'Line %s', lineData.line_name)}\n \n redirectToLine(lineData.farm_id, lines[next].id)}\n >\n next\n \n
\n )}\n
\n
\n
\n \n \n \n \n {mainSeed?.season_name ?? translate(lang, 'Empty')}\n \n \n \n \n
\n \n \n \n \n {translate(lang, 'Harvest Complete')}\n \n
\n
\n
\n
\n
\n \n {translate(lang, 'Line %s', lineData.line_name)}\n \n
\n setShowLineSpat(true)}\n >\n {translate(\n lang,\n 'Last Spat Count: %s',\n lineData.last_spat_count ?? 0,\n )}\n
\n
\n {!!lineData.growing_cycle?.last_harvest ? (\n
\n \n \n {translate(lang, 'Line is partially harvested')}\n \n \n \n {translate(\n lang,\n 'Harvested %s m and %s bags so far',\n harvestedLength,\n bagsQuantity,\n )}\n \n
\n ) : (\n !!lineData.last_harvest && (\n
\n \n \n {translate(lang, 'View last harvest')}\n \n \n
\n )\n )}\n
\n \n
\n
\n
\n \n {translate(lang, 'Longline Length')}\n \n \n {`${longlineLength} `}m\n \n \n {translate(lang, 'Backbone')}\n \n \n {lineData?.backbone ? `${lineData?.backbone} m` : '-'}\n \n
\n
\n \n {translate(lang, 'Date seeded')}\n \n \n {defaultDateFormat(mainSeed?.planned_date_seed, '-')}\n \n \n {translate(lang, 'Spat Size')}\n \n \n {lastAssessment\n ? labelNumber(lastAssessment.shell_size.avg, 'mm', '-')\n : labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n '-',\n )}\n \n
\n
\n \n {translate(\n lang,\n mainSeed?.is_growing\n ? 'Planned harvest date'\n : 'Harvested date',\n )}\n \n \n {defaultDateFormat(\n lastAssessment?.planned_date_harvest ??\n mainSeed?.planned_date_harvest,\n '-',\n )}\n \n \n {translate(lang, 'Seed type')}\n \n \n {mainSeed?.spat_storage?.seed_type ?? '-'}\n \n
\n
\n \n {translate(lang, 'Stage')}\n \n \n {longlineLength > 0 &&\n cyclePart?.seedings.map((x, i) => (\n
\n {`${formatNumber(\n (x.line_length / longlineLength) * 100,\n )}% ${translate(lang, 'stage')} ${\n x.spat_storage?.stage ?? 1\n }`}\n
\n ))}\n
\n \n {translate(lang, 'Submersion')}\n \n \n {mainSeed?.submersion ?? '-'}\n \n
\n
\n \n {translate(lang, 'Income per meter')}\n \n \n {lastHarvest?.profit_per_meter ?? '-'}\n \n \n {translate(lang, 'Density')}\n \n \n {labelRange(\n mainSeed?.density,\n mainSeed?.density_max ?? undefined,\n )}\n \n
\n
\n \n {translate(lang, 'Avg. Size')}\n \n \n {labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n )}\n \n \n {translate(lang, 'Inventories')}\n \n \n {cyclePart\n ? SeedInventoriesLabel(cyclePart.inventories_sum)\n : LineInventoriesLabel(lineData.pending_inventories ?? [])}\n \n
\n {isEditable && (\n
\n setTrackSeedings([mainSeed.id]),\n },\n {\n label: translate(lang, 'Add Scanned QR'),\n onClick: () =>\n setQrSeed({\n farmID: lineData.farm_id,\n lineID: lineData.id,\n seedingID: mainSeed.id,\n harvests: cyclePart.harvests,\n }),\n },\n ]\n : undefined\n }\n />\n
\n )}\n
\n {!!lineData.growing_cycle?.predicted_date_harvest && (\n
\n \n
\n )}\n
\n
\n {!!mainSeed ? (\n \n {checkedHistoryView === -1 ? (\n
\n \n
\n ) : (\n translate(\n lang,\n checkedHistoryView === 1 ? 'Hide history' : 'Show history',\n )\n )}\n \n ) : (\n \n )}\n {isFarmable && (\n
\n {mainSeed ? (\n <>\n {mainSeed.is_growing ? (\n <>\n \n {translate(lang, 'Inventory Management')}\n \n \n {translate(lang, 'Add maintenance')}\n \n {!mainSeed.is_catch_spat && (\n \n {translate(lang, 'Add extra seed')}\n \n )}\n \n {translate(lang, 'Add assessment')}\n \n \n ) : (\n \n )}\n \n ) : (\n
\n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(lineData?.line_idle)}\n \n
\n {!isGrower && (\n \n {translate(lang, 'Catch Spat')}\n \n )}\n \n {translate(lang, 'Seed the line')}\n \n \n {translate(lang, 'Add maintenance')}\n \n
\n )}\n {showLineSpat && (\n setShowLineSpat(false)}\n />\n )}\n
\n )}\n
\n {!!trackSeedings && (\n setTrackSeedings(undefined)}\n />\n )}\n {!!qrSeed && (\n setQrSeed(undefined)}\n />\n )}\n \n );\n};\n\nexport default MusselLineDesktop;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { selectAccount } from '../../store/auth/auth.selector';\nimport { Modal } from 'antd';\nimport { Button, Input, Subtitle } from '../shared';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { selectSizedOysters } from '../../store/utils/utils.selector';\nimport { useState } from 'react';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { loadUtilsData } from '../../store/utils/utils.actions';\nimport { sendSingleRequest } from '../../apis';\nimport { updateAccountSetting } from '../../store/auth/auth.actions';\nimport {\n calcOnGrowWastePercent,\n calcOysterPercent,\n} from '../../lib/farm.helpers';\nimport './styles.scss';\n\ninterface IRow {\n id: string | number;\n name: string;\n value: number | undefined;\n}\n\ninterface Props {\n visible: boolean;\n lineID: number;\n onClose: () => void;\n}\n\nconst OysterLineProbModal = ({ visible, lineID, onClose }: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const onGrowWaste = useSelector(selectAccount)?.oyster_crops;\n const oysterFields = useSelector(selectSizedOysters);\n\n const defaultValues = [\n {\n id: 'Grown ons',\n name: translate(lang, 'Grown ons'),\n value: calcOnGrowWastePercent(onGrowWaste, 'grow', lineID),\n },\n {\n id: 'Waste',\n name: translate(lang, 'Waste'),\n value: calcOnGrowWastePercent(onGrowWaste, 'waste', lineID),\n },\n ...oysterFields.map(x => ({\n id: x.id,\n name: x.name,\n value: calcOysterPercent(x, lineID),\n })),\n ];\n\n const [data, setData] = useState(defaultValues);\n const [disabled, setDisabled] = useState(false);\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n type: 'error',\n message,\n isMessageModal: true,\n }),\n );\n const updateField = (id: number | string, value: string) => {\n const tmp = [...data];\n const i = tmp.findIndex(x => x.id === id);\n tmp[i].value = value.length <= 0 ? undefined : Number(value);\n setData(tmp);\n };\n const confirmClick = async () => {\n if (data.some(x => x.value === undefined || x.value === null)) {\n showError(translate(lang, 'Please enter probability'));\n return;\n }\n const sum = data.reduce((acc, x) => acc + (x.value || 0), 0);\n if (Math.abs(100 - sum) > 0.0001) {\n showError(translate(lang, 'All probability values should total to 100%'));\n return;\n }\n setDisabled(true);\n const utils = oysterFields.map(x => {\n const d = data.find(y => y.id === x.id);\n let json: any = x.json;\n if (!json || !json.lines) {\n json = { lines: { [lineID]: d?.value } };\n } else {\n json.lines[lineID] = d?.value;\n }\n return { ...x, json };\n });\n const res = await sendSingleRequest(utils, 'POST', 'api/utils/bulk', true);\n if (!res.status) {\n showError(res.data?.message ?? 'Server error');\n }\n let lines_grow_ons: any = onGrowWaste?.lines_grow_ons ?? {};\n lines_grow_ons[lineID] = data.find(x => x.id === 'Grown ons')?.value;\n let lines_waste: any = onGrowWaste?.lines_waste ?? {};\n lines_waste[lineID] = data.find(x => x.id === 'Waste')?.value;\n const oyster_crops = {\n ...onGrowWaste,\n lines_grow_ons,\n lines_waste,\n };\n const r = await dispatch(updateAccountSetting({ oyster_crops }));\n if (r !== true) {\n setDisabled(false);\n showError(r ?? 'Server error');\n } else {\n onClose();\n await dispatch(loadUtilsData());\n }\n };\n\n return (\n \n
\n
\n \n {translate(lang, 'Update line probabilities')}\n \n
\n
\n
\n
\n
{translate(lang, 'Name')}
\n
{translate(lang, 'Probability')}
\n
\n {data.map((row, i) => (\n
\n
\n \n
\n
\n updateField(row.id, e.target.value)}\n unit='%'\n />\n
\n
\n ))}\n
\n
\n
\n {`${data.reduce((p, c) => p + (c.value ?? 0), 0)} %`}\n
\n
\n
\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n
\n \n
\n );\n};\n\nexport default OysterLineProbModal;\n","import {\n BreadcrumbComponent,\n Button,\n Caret,\n Pen,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport getBreadcrumbMenu from '../../util/BreadcrumbMenu';\nimport prevIcon from '../../images/prev-image.png';\nimport nextIcon from '../../images/next-image.png';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport LineTagButton from '../../components/lines/LineTagButton';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { IOysterLineDetail } from '../../entities/farms.entities';\nimport { IOysterCycle } from '../../entities/growing.entities';\nimport { amountDays } from '../../lib/farm.helpers';\nimport {\n LineInventoriesLabel,\n SeedInventoriesLabel,\n} from '../../components/CommonViews';\nimport HarvestPredictButton from '../../components/lines/HarvestPredictButton';\nimport { formatNumber } from '../../entities/util-functions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { Spin } from 'antd';\nimport {\n SelectIsEditable,\n SelectIsFarmable,\n SelectIsGrower,\n SelectOysterFarmsByFarmID,\n} from '../../store/extra/extra.selector';\nimport { useState } from 'react';\nimport OysterLineProbModal from '../../components/farm-util/OysterLineProbModal';\nimport { labelNumber, labelRange } from '../../lib/common.helpers';\nimport DotsMenu from '../../components/shared/dropdown-menu/DotsMenu';\n\ninterface Props {\n lineData: IOysterLineDetail;\n cyclePart: IOysterCycle | null;\n isPrevEnabled: boolean;\n isNextEnabled: boolean;\n onClickPrevGroup: () => void;\n onClickNextGroup: () => void;\n showEditLineModal: () => void;\n showEditSeedModal: () => void;\n onSeedingClick: () => void;\n onCatchSpatClick: () => void;\n onAssessmentClick: () => void;\n onMaintenanceClick: () => void;\n onHarvestClick: () => void;\n onExtraSeedClick: () => void;\n onFloatingManageClick: () => void;\n checkedHistoryView: number;\n onHistoryViewClick: () => void;\n loadLine: () => void;\n}\n\nconst OysterLineDesktop = ({\n lineData,\n cyclePart: curCycle,\n isPrevEnabled,\n isNextEnabled,\n onClickPrevGroup,\n onClickNextGroup,\n showEditLineModal,\n showEditSeedModal,\n onSeedingClick,\n onCatchSpatClick,\n onAssessmentClick,\n onMaintenanceClick,\n onHarvestClick,\n onExtraSeedClick,\n onFloatingManageClick,\n loadLine,\n checkedHistoryView,\n onHistoryViewClick,\n}: Props) => {\n const lang = useSelector(selectLang);\n const isEditable = SelectIsEditable(lineData.farm_id);\n const isGrower = SelectIsGrower(lineData.farm_id);\n const isFarmable = SelectIsFarmable(lineData.farm_id);\n const { redirectToLine } = useMenuHandler();\n const curFarm = SelectOysterFarmsByFarmID(lineData.farm_id).find(\n x => x.id === lineData.farm_id,\n );\n const lines = curFarm?.lines ?? [];\n const breadcrumbItems = getBreadcrumbMenu('FARM_LINE', {\n FARM_ID: lineData.farm_id,\n LINE_ID: lineData.id,\n FARM_NAME: lineData?.farm_name,\n LINE_NAME: lineData?.line_name,\n }).slice(0, -1);\n\n const curL = lines.findIndex(x => x.id === lineData.id);\n const prevL = (curL - 1 + lines.length) % lines.length;\n const nextL = (curL + 1) % lines.length;\n\n const mainSeed = curCycle?.main_seed,\n lastAssessment =\n curCycle && curCycle.assessments.length > 0\n ? curCycle.assessments.reduce((p, c) =>\n !p || p.assessment_date < c.assessment_date ? c : p,\n )\n : null;\n const growingBaskets = lineData.growing_cycle\n ? lineData.growing_cycle.current_basket_count\n : 0;\n const basketSum =\n curCycle?.seedings.reduce((p, c) => p + c.basket_count, 0) ?? 0;\n\n const [visibleProb, setVisibleProb] = useState(false);\n\n return (\n
\n
\n
\n \n {lines && (\n
\n \n redirectToLine(lineData.farm_id, lines[prevL].id)\n }\n >\n prev\n \n \n {translate(lang, 'Line %s', lineData.line_name)}\n \n \n redirectToLine(lineData.farm_id, lines[nextL].id)\n }\n >\n next\n \n
\n )}\n
\n
\n
\n \n \n \n \n {mainSeed?.season_name ?? translate(lang, 'Empty')}\n \n \n \n \n
\n \n \n \n \n {translate(lang, 'Harvest Complete')}\n \n
\n
\n
\n
\n
\n \n {translate(lang, 'Line %s', lineData.line_name)}\n \n {!!lineData.growing_cycle?.last_harvest ? (\n
\n \n \n {translate(lang, 'Line is partially harvested')}\n \n \n \n {translate(\n lang,\n 'Harvested %s so far',\n `${lineData.growing_cycle.total_harvested_basket_count} ${lineData.farming_method}`,\n )}\n \n
\n ) : (\n !!lineData.growing_cycle?.last_harvest && (\n
\n \n \n {translate(lang, 'View last harvest')}\n \n \n
\n )\n )}\n
\n \n
\n
\n
\n \n {translate(lang, 'Number of %s', lineData.farming_method)}\n \n \n {lineData.growing_cycle\n ? `${growingBaskets}/${lineData.basket_count} (${formatNumber(\n (growingBaskets * 100) / lineData.basket_count,\n )}%)`\n : `-/${lineData.basket_count}`}\n \n \n {translate(lang, 'Line Length')}\n \n \n {`${lineData.length} m`}\n \n
\n
\n \n {translate(lang, 'Date seeded')}\n \n \n {defaultDateFormat(mainSeed?.planned_date_seed, '-')}\n \n \n {translate(lang, 'Seeded spat size')}\n \n \n {labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n )}\n \n
\n
\n \n {translate(\n lang,\n mainSeed?.is_growing ? 'Planned harvest date' : 'Harvest Date',\n )}\n \n \n {defaultDateFormat(\n lastAssessment?.planned_date_harvest ??\n mainSeed?.planned_date_harvest,\n '-',\n )}\n \n \n {translate(lang, 'Avg. Size')}\n \n \n {lastAssessment\n ? labelNumber(lastAssessment.shell_size.avg, 'mm', '-')\n : labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n '-',\n )}\n \n
\n
\n \n {translate(lang, 'Stage')}\n \n \n {basketSum > 0 &&\n curCycle?.seedings.map((x, i) => (\n
\n {`${formatNumber(\n (x.basket_count / basketSum) * 100,\n )}% ${translate(lang, 'seed stage') } ${i + 1}`}\n
\n ))}\n {\n curCycle?.harvests.map((x, i) => \n {\n if (x.line_length) {\n return (\n
\n {`${formatNumber(\n (x.line_length / basketSum) * 100)\n }% ${translate(lang, 'harvest stage') } ${i + 1}`}\n
\n )\n }\n }\n )\n }\n
\n \n {translate(lang, 'Inventories')}\n \n \n {curCycle\n ? SeedInventoriesLabel(curCycle.inventories_sum)\n : LineInventoriesLabel(lineData.pending_inventories ?? [])}\n \n
\n {isEditable && (\n setVisibleProb(true),\n },\n ]}\n />\n )}\n
\n {!!lineData.growing_cycle?.predicted_date_harvest && (\n
\n \n
\n )}\n
\n
\n {!!mainSeed ? (\n \n {checkedHistoryView === -1 ? (\n
\n \n
\n ) : (\n translate(\n lang,\n checkedHistoryView === 1 ? 'Hide history' : 'Show history',\n )\n )}\n \n ) : (\n \n )}\n {isFarmable && (\n
\n {mainSeed ? (\n <>\n {mainSeed.is_growing ? (\n <>\n \n {translate(lang, 'Inventory Management')}\n \n \n {translate(lang, 'Add maintenance')}\n \n {!mainSeed.is_catch_spat && (\n \n {translate(lang, 'Add extra seed')}\n \n )}\n \n {translate(lang, 'Add assessment')}\n \n \n ) : (\n \n )}\n \n ) : (\n
\n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(lineData?.line_idle)}\n \n
\n {!isGrower && (\n \n {translate(lang, 'Catch Spat')}\n \n )}\n \n {translate(lang, 'Seed the line')}\n \n \n {translate(lang, 'Add maintenance')}\n \n
\n )}\n
\n )}\n
\n {visibleProb && (\n setVisibleProb(false)}\n />\n )}\n
\n );\n};\n\nexport default OysterLineDesktop;\n","import { useSelector } from 'react-redux';\nimport { ISeaweedLineDetail } from '../../entities/farms.entities';\nimport { ISeaweedCycle } from '../../entities/growing.entities';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport getBreadcrumbMenu from '../../util/BreadcrumbMenu';\nimport {\n BreadcrumbComponent,\n Button,\n Caret,\n DropdownMenu,\n Pen,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport prevIcon from '../../images/prev-image.png';\nimport nextIcon from '../../images/next-image.png';\nimport { Link } from 'react-router-dom';\nimport LineTagButton from '../../components/lines/LineTagButton';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { amountDays } from '../../lib/farm.helpers';\nimport HarvestPredictButton from '../../components/lines/HarvestPredictButton';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n selectAllFarms,\n SelectIsEditable,\n SelectIsFarmable,\n SelectIsGrower,\n} from '../../store/extra/extra.selector';\nimport { labelNumber, labelRange } from '../../lib/common.helpers';\n\ninterface Props {\n lineData: ISeaweedLineDetail;\n cyclePart: ISeaweedCycle | null;\n isPrevEnabled: boolean;\n isNextEnabled: boolean;\n onClickPrevGroup: () => void;\n onClickNextGroup: () => void;\n showEditLineModal: () => void;\n showEditSeedModal: () => void;\n onSeedingClick: () => void;\n onCatchSpatClick: () => void;\n onAssessmentClick: () => void;\n onMaintenanceClick: () => void;\n onHarvestClick: () => void;\n onExtraSeedClick: () => void;\n loadLine: () => void;\n}\n\nconst SeaweedLineDesktop = ({\n lineData,\n cyclePart: curCycle,\n isPrevEnabled,\n isNextEnabled,\n onClickPrevGroup,\n onClickNextGroup,\n showEditLineModal,\n showEditSeedModal,\n onSeedingClick,\n onCatchSpatClick,\n onAssessmentClick,\n onMaintenanceClick,\n onHarvestClick,\n onExtraSeedClick,\n loadLine,\n}: Props) => {\n const lang = useSelector(selectLang);\n const isEditable = SelectIsEditable(lineData.farm_id);\n const isGrower = SelectIsGrower(lineData.farm_id);\n const isFarmable = SelectIsFarmable(lineData.farm_id);\n const { redirectToLine } = useMenuHandler();\n const curFarm = useSelector(selectAllFarms).find(\n x => x.id === lineData.farm_id,\n );\n const lines = curFarm?.lines ?? [];\n const breadcrumbItems = getBreadcrumbMenu('FARM_LINE', {\n FARM_ID: lineData.farm_id,\n LINE_ID: lineData.id,\n FARM_NAME: lineData?.farm_name,\n LINE_NAME: lineData?.line_name,\n }).slice(0, -1);\n\n const curL = lines.findIndex(x => x.id === lineData.id);\n const prevL = (curL - 1 + lines.length) % lines.length;\n const nextL = (curL + 1) % lines.length;\n\n const mainSeed = curCycle?.main_seed,\n lastAssessment =\n curCycle && curCycle.assessments.length > 0\n ? curCycle.assessments.reduce((p, c) =>\n !p || p.assessment_date < c.assessment_date ? c : p,\n )\n : null;\n\n return (\n
\n
\n
\n \n {lines && (\n
\n \n redirectToLine(lineData.farm_id, lines[prevL].id)\n }\n >\n prev\n \n \n {translate(lang, 'Line %s', lineData.line_name)}\n \n \n redirectToLine(lineData.farm_id, lines[nextL].id)\n }\n >\n next\n \n
\n )}\n
\n
\n
\n \n \n \n \n {mainSeed?.season_name ?? translate(lang, 'Empty')}\n \n \n \n \n
\n \n \n \n \n {translate(lang, 'Harvest Complete')}\n \n
\n
\n
\n
\n
\n \n {translate(lang, 'Line %s', lineData.line_name)}\n \n {!!lineData.growing_cycle?.last_harvest ? (\n
\n \n \n {translate(lang, 'Line is partially harvested')}\n \n \n \n {translate(\n lang,\n 'Seeded %s m² and harvested %s m² so far',\n lineData.growing_cycle.total_seeded_tank_area,\n lineData.growing_cycle.total_harvested_tank_area,\n )}\n \n
\n ) : (\n !!lineData.growing_cycle?.last_harvest && (\n
\n \n \n {translate(lang, 'View last harvest')}\n \n \n
\n )\n )}\n
\n \n
\n
\n
\n \n {translate(lang, 'Tank area')}\n \n \n {`${lineData.growing_cycle?.total_seeded_tank_area ?? '-'}/${\n lineData.tank_area\n } m²`}\n \n \n {translate(lang, 'Line name')}\n \n \n {lineData.line_name}\n \n
\n
\n \n {translate(lang, 'Date seeded')}\n \n \n {defaultDateFormat(mainSeed?.planned_date_seed, '-')}\n \n \n {translate(lang, 'Seeded Spat Size')}\n \n \n {labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n )}\n \n
\n
\n \n {translate(\n lang,\n mainSeed?.is_growing ? 'Planned harvest date' : 'Harvest Date',\n )}\n \n \n {defaultDateFormat(\n lastAssessment?.planned_date_harvest ??\n mainSeed?.planned_date_harvest,\n '-',\n )}\n \n \n {translate(lang, 'Avg. Size')}\n \n \n {lastAssessment\n ? labelNumber(lastAssessment.shell_size.avg, 'mm', '-')\n : labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n '-',\n )}\n \n
\n {isEditable && (\n
\n \n
\n )}\n
\n {!!lineData.growing_cycle?.predicted_date_harvest && (\n
\n \n
\n )}\n
\n
\n {isFarmable && (\n
\n {mainSeed ? (\n <>\n {mainSeed.is_growing ? (\n <>\n \n {translate(lang, 'Add maintenance')}\n \n {!mainSeed.is_catch_spat && (\n \n {translate(lang, 'Add extra seed')}\n \n )}\n \n {translate(lang, 'Add assessment')}\n \n \n ) : (\n \n )}\n \n ) : (\n
\n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(lineData?.line_idle)}\n \n
\n {!isGrower && (\n \n {translate(lang, 'Catch Spat')}\n \n )}\n \n {translate(lang, 'Seed the line')}\n \n \n {translate(lang, 'Add maintenance')}\n \n
\n )}\n
\n )}\n
\n
\n );\n};\n\nexport default SeaweedLineDesktop;\n","import {\n IMusselLineDetail,\n IOysterLineDetail,\n ISeaweedLineDetail,\n} from '../../entities/farms.entities';\nimport { TBusinessType } from '../../entities/general.entities';\nimport {\n IMusselCycle,\n IOysterCycle,\n ISeaweedCycle,\n} from '../../entities/growing.entities';\nimport FlupsyMusselLineDesktop from './FlupsyMusselLineDesktop';\nimport MusselLineDesktop from './MusselLineDesktop';\nimport OysterLineDesktop from './OysterLineDesktop';\nimport SeaweedLineDesktop from './SeaweedLineDesktop';\n\ninterface Props {\n type: TBusinessType;\n lineData: IMusselLineDetail | IOysterLineDetail | ISeaweedLineDetail;\n loadLine: () => void; // only for MUSSEL\n cyclePart: IMusselCycle | IOysterCycle | ISeaweedCycle | null;\n isPrevEnabled: boolean;\n isNextEnabled: boolean;\n onClickPrevGroup: () => void;\n onClickNextGroup: () => void;\n showEditLineModal: () => void;\n showEditSeedModal: () => void;\n onSeedingClick: () => void;\n onAssessmentClick: () => void;\n onCatchSpatClick: () => void;\n onHarvestClick: () => void;\n onMaintenanceClick: () => void;\n onFloatingManageClick: () => void; // only for MUSSEL\n onExtraSeedClick: () => void;\n checkedHistoryView: number; // only for MUSSEL\n onHistoryViewClick: () => void; // only for MUSSEL\n}\n\nconst LineTemplateDesktop = ({\n type,\n lineData,\n loadLine,\n cyclePart,\n isPrevEnabled,\n isNextEnabled,\n onClickPrevGroup,\n onClickNextGroup,\n showEditLineModal,\n showEditSeedModal,\n onSeedingClick,\n onAssessmentClick,\n onCatchSpatClick,\n onHarvestClick,\n onMaintenanceClick,\n onFloatingManageClick,\n onExtraSeedClick,\n checkedHistoryView,\n onHistoryViewClick,\n}: Props) => (\n <>\n {lineData.farm_is_flupsy ? (\n <>\n {type === 'MUSSEL' && (\n )}\n {type === 'OYSTER' && (\n \n )}\n \n )\n :\n <>\n {type === 'MUSSEL' ? (\n \n ) : type === 'OYSTER' ? (\n \n ) : (\n \n )}\n \n }\n \n);\n\nexport default LineTemplateDesktop;\n","import { useDispatch, useSelector } from 'react-redux';\nimport {\n Button,\n Caret,\n DotsIcon,\n Pen,\n PositiveNegativeTitle,\n Subtitle,\n} from '../../components/shared';\nimport { Dropdown, Menu, Spin } from 'antd';\nimport { IMusselLineDetail } from '../../entities/farms.entities';\nimport { IMusselCycle } from '../../entities/growing.entities';\nimport {\n amountDays,\n calcLineLastSize,\n getEstHarvestDate,\n} from '../../lib/farm.helpers';\nimport {\n LineInventoriesLabel,\n SeedInventoriesLabel,\n} from '../../components/CommonViews';\nimport { sendSingleRequest } from '../../apis';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { useHistory } from 'react-router-dom';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n SelectIsEditable,\n SelectIsFarmable,\n SelectIsGrower,\n} from '../../store/extra/extra.selector';\nimport { labelNumber, labelRange } from '../../lib/common.helpers';\nimport './styles.scss';\n\ninterface Props {\n lineData: IMusselLineDetail;\n cyclePart?: IMusselCycle | null;\n isPrevEnabled: boolean;\n isNextEnabled: boolean;\n onClickPrevGroup?: () => void;\n onClickNextGroup?: () => void;\n showEditLineModal: () => void;\n showEditSeedModal: () => void;\n onSeedingClick: () => void;\n onAssessmentClick: () => void;\n onCatchSpatClick: () => void;\n onHarvestClick: () => void;\n onMaintenanceClick: () => void;\n onFloatingManageClick: () => void;\n onExtraSeedClick: () => void;\n checkedHistoryView: number;\n onHistoryViewClick: () => void;\n}\n\nconst MusselLineMobile = ({\n cyclePart,\n lineData,\n isPrevEnabled,\n isNextEnabled,\n onClickPrevGroup,\n onClickNextGroup,\n showEditLineModal,\n showEditSeedModal,\n onSeedingClick,\n onAssessmentClick,\n onCatchSpatClick,\n onHarvestClick,\n onMaintenanceClick,\n onFloatingManageClick,\n onExtraSeedClick,\n checkedHistoryView,\n onHistoryViewClick,\n}: Props) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const lang = useSelector(selectLang);\n const isGrower = SelectIsGrower(lineData.farm_id);\n const isEditable = SelectIsEditable(lineData.farm_id);\n const isFarmable = SelectIsFarmable(lineData.farm_id);\n const mainSeed = cyclePart?.main_seed;\n const lastAssessment =\n cyclePart && cyclePart.assessments.length > 0\n ? cyclePart?.assessments.reduce((p, c) =>\n !p || p.assessment_date < c.assessment_date ? c : p,\n )\n : null;\n\n const menuClick = async (e: any) => {\n if (e.key === 'edit') {\n showEditLineModal();\n } else if (e.key === 'delete') {\n if (!window.confirm(translate(lang, 'Are you sure to delete this data?')))\n return;\n const res = await sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/line/lines/${lineData.id}`,\n true,\n );\n if (res.status) {\n await dispatch(loadFarmsData());\n history.replace(`/farms/${lineData.farm_id}`);\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Deleted successfully'),\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Unknown error'),\n }),\n );\n }\n }\n };\n\n return (\n <>\n
\n
undefined}>\n
\n {isEditable && (\n
\n \n \n {translate(lang, 'Edit')}\n \n \n {translate(lang, 'Delete')}\n \n \n }\n placement='bottomRight'\n trigger={['click']}\n >\n
\n \n
\n \n
\n )}\n
\n
\n \n {translate(lang, 'Line - %s', lineData.line_name)}\n \n
\n
\n
\n
\n \n {translate(lang, 'Length')}\n \n \n <>\n \n {lineData.growing_cycle\n ? lineData.growing_cycle.current_line_length\n : 0}\n \n m\n \n \n
\n
\n \n {translate(lang, 'Date seeded')}\n \n <>\n {defaultDateFormat(\n lineData.growing_cycle?.main_seed.planned_date_seed,\n '-',\n )}\n \n
\n
\n\n
\n
\n \n {translate(lang, 'Planned harvest date')}\n \n \n <>{defaultDateFormat(getEstHarvestDate(lineData), '-')}\n \n
\n
\n \n {translate(lang, 'Seed type')}\n \n \n {lineData.growing_cycle?.main_seed.spat_storage?.seed_type ??\n '-'}\n \n
\n
\n\n
\n
\n \n {translate(lang, 'Income per meter')}\n \n \n {lineData.last_harvest?.profit_per_meter ?? '-'}\n \n
\n
\n \n {translate(lang, 'Avg. Size')}\n \n \n \n {labelNumber(calcLineLastSize(lineData)?.avg, 'mm', '-')}\n \n \n
\n
\n
\n
\n \n {translate(lang, 'Density')}\n \n \n {lineData.growing_cycle\n ? labelRange(\n lineData.growing_cycle.main_seed.density,\n lineData.growing_cycle.main_seed.density_max ??\n undefined,\n )\n : ''}\n \n
\n
\n \n {translate(lang, 'Spat Size')}\n \n \n {lastAssessment\n ? labelNumber(lastAssessment.shell_size.avg, 'mm', '-')\n : labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n '-',\n )}\n {labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n )}\n \n
\n
\n
\n
\n \n {translate(lang, 'Submersion')}\n \n \n {lineData.growing_cycle\n ? `${lineData.growing_cycle.main_seed.submersion} m`\n : '-'}\n \n
\n
\n \n {translate(lang, 'Spacing')}\n \n \n {lineData.growing_cycle\n ? `${lineData.growing_cycle.main_seed.spacing} mm`\n : '-'}\n \n
\n
\n
\n
\n \n {translate(lang, 'Density')}\n \n \n {lineData.growing_cycle\n ? labelRange(\n lineData.growing_cycle.main_seed.density,\n lineData.growing_cycle.main_seed.density_max ??\n undefined,\n )\n : ''}\n \n
\n
\n \n {translate(lang, 'Floats')}\n \n \n {lineData.growing_cycle?.main_seed.floats ?? '-'}\n \n
\n
\n
\n
\n \n {translate(lang, 'Backbone')}\n \n \n {lineData.backbone ? `${lineData.backbone}` : '-'}\n \n
\n
\n \n {translate(lang, 'Inventories')}\n \n \n {lineData.growing_cycle\n ? SeedInventoriesLabel(\n lineData.growing_cycle.inventories_sum,\n )\n : LineInventoriesLabel(lineData.pending_inventories ?? [])}\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n {mainSeed?.season_name ?? translate(lang, 'Empty')}\n \n \n \n \n
\n \n \n \n
\n
\n <>\n {mainSeed ? (\n
\n \n {checkedHistoryView === -1 ? (\n
\n \n
\n ) : (\n translate(\n lang,\n checkedHistoryView === 1\n ? 'Hide history'\n : 'Show history',\n )\n )}\n \n {mainSeed.is_growing ? (\n <>\n \n {translate(lang, 'Inventory Management')}\n \n \n {translate(lang, 'Add assessment')}\n \n {!mainSeed.is_catch_spat && (\n \n {translate(lang, 'Add extra seed')}\n \n )}\n \n {translate(lang, 'Add maintenance')}\n \n \n {translate(lang, 'Harvest Complete')}\n \n \n ) : (\n \n )}\n
\n ) : (\n <>\n {!isGrower && (\n \n {translate(lang, 'Catch Spat')}\n \n )}\n \n {translate(lang, 'Seed the line')}\n \n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(lineData?.line_idle)}\n \n
\n \n )}\n \n
\n
\n \n );\n};\n\nexport default MusselLineMobile;\n","import { useSelector } from 'react-redux';\nimport {\n Button,\n Caret,\n DropdownMenu,\n Pen,\n Subtitle,\n} from '../../components/shared';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { IOysterLineDetail } from '../../entities/farms.entities';\nimport { IOysterCycle } from '../../entities/growing.entities';\nimport { amountDays } from '../../lib/farm.helpers';\nimport { formatNumber } from '../../entities/util-functions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { Spin } from 'antd';\nimport {\n SelectIsEditable,\n SelectIsFarmable,\n SelectIsGrower,\n} from '../../store/extra/extra.selector';\nimport { labelNumber, labelRange } from '../../lib/common.helpers';\n\ninterface Props {\n lineData: IOysterLineDetail;\n cyclePart: IOysterCycle | null;\n isPrevEnabled: boolean;\n isNextEnabled: boolean;\n onClickPrevGroup: () => void;\n onClickNextGroup: () => void;\n showEditLineModal: () => void;\n showEditSeedModal: () => void;\n onSeedingClick: () => void;\n onAssessmentClick: () => void;\n onCatchSpatClick: () => void;\n onHarvestClick: () => void;\n onMaintenanceClick: () => void;\n onExtraSeedClick: () => void;\n onFloatingManageClick(): void;\n checkedHistoryView: number;\n onHistoryViewClick: () => void;\n}\n\nconst OysterLineMobile = ({\n cyclePart,\n lineData,\n isPrevEnabled,\n isNextEnabled,\n onClickPrevGroup,\n onClickNextGroup,\n showEditLineModal,\n showEditSeedModal,\n onSeedingClick,\n onAssessmentClick,\n onCatchSpatClick,\n onHarvestClick,\n onMaintenanceClick,\n onExtraSeedClick,\n onFloatingManageClick,\n checkedHistoryView,\n onHistoryViewClick,\n}: Props) => {\n const lang = useSelector(selectLang);\n const isEditable = SelectIsEditable(lineData.farm_id);\n const isFarmable = SelectIsFarmable(lineData.farm_id);\n const isGrower = SelectIsGrower(lineData.farm_id);\n const mainSeed = cyclePart?.main_seed,\n lastAssessment =\n cyclePart && cyclePart.assessments.length > 0\n ? cyclePart.assessments.reduce(\n (p, c) => (p.assessment_date < c.assessment_date ? c : p),\n cyclePart.assessments[0],\n )\n : null;\n const growingBaskets = lineData.growing_cycle\n ? lineData.growing_cycle.current_basket_count\n : 0;\n\n return (\n <>\n
\n
undefined}>\n {isEditable && (\n
\n \n
\n )}\n
\n \n {translate(lang, 'Line - %s', lineData.line_name)}\n \n
\n
\n
\n
\n \n {translate(lang, 'Number of %s', lineData.farming_method)}\n \n \n {lineData.growing_cycle\n ? `${growingBaskets}/${\n lineData.basket_count\n } (${formatNumber(\n (growingBaskets * 100) / lineData.basket_count,\n )}%)`\n : `-/${lineData.basket_count}`}\n \n
\n
\n \n {translate(lang, 'Date seeded')}\n \n {mainSeed ? (\n \n {defaultDateFormat(mainSeed.planned_date_seed)}\n \n ) : (\n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(lineData.line_idle)}\n \n
\n )}\n
\n
\n\n
\n
\n \n {translate(lang, 'Planned harvest date')}\n \n \n {defaultDateFormat(\n lastAssessment?.planned_date_harvest ??\n mainSeed?.planned_date_harvest,\n '-',\n )}\n \n
\n
\n \n {translate(lang, 'Line Length')}\n \n \n {`${lineData.length} m`}\n \n
\n
\n\n
\n
\n \n {translate(lang, 'Seeded Spat Size')}\n \n \n {labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n )}\n \n
\n
\n \n {translate(lang, 'Avg. Size')}\n \n \n {lastAssessment\n ? labelNumber(lastAssessment.shell_size.avg, 'mm', '-')\n : labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n '-',\n )}\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n {mainSeed?.season_name ?? 'Empty'}\n \n \n \n \n
\n \n \n \n
\n
\n <>\n {mainSeed ? (\n
\n \n {checkedHistoryView === -1 ? (\n
\n \n
\n ) : (\n translate(\n lang,\n checkedHistoryView === 1\n ? 'Hide history'\n : 'Show history',\n )\n )}\n \n {mainSeed.is_growing ? (\n <>\n \n {translate(lang, 'Inventory Management')}\n \n \n {translate(lang, 'Add assessment')}\n \n {!mainSeed.is_catch_spat && (\n \n {translate(lang, 'Add extra seed')}\n \n )}\n \n {translate(lang, 'Add maintenance')}\n \n \n {translate(lang, 'Harvest Complete')}\n \n \n ) : (\n \n )}\n
\n ) : (\n <>\n {!isGrower && (\n \n {translate(lang, 'Catch Spat')}\n \n )}\n \n {translate(lang, 'Seed the line')}\n \n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(lineData?.line_idle)}\n \n
\n \n )}\n \n
\n
\n \n );\n};\n\nexport default OysterLineMobile;\n","import { useSelector } from 'react-redux';\nimport { ISeaweedLineDetail } from '../../entities/farms.entities';\nimport { ISeaweedCycle } from '../../entities/growing.entities';\nimport {\n Button,\n Caret,\n DropdownMenu,\n Pen,\n Subtitle,\n} from '../../components/shared';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { amountDays } from '../../lib/farm.helpers';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n SelectIsEditable,\n SelectIsFarmable,\n SelectIsGrower,\n} from '../../store/extra/extra.selector';\nimport { labelNumber, labelRange } from '../../lib/common.helpers';\n\ninterface Props {\n lineData: ISeaweedLineDetail;\n cyclePart: ISeaweedCycle | null;\n isPrevEnabled: boolean;\n isNextEnabled: boolean;\n onClickPrevGroup: () => void;\n onClickNextGroup: () => void;\n showEditLineModal: () => void;\n showEditSeedModal: () => void;\n onSeedingClick: () => void;\n onAssessmentClick: () => void;\n onCatchSpatClick: () => void;\n onHarvestClick: () => void;\n onMaintenanceClick: () => void;\n onExtraSeedClick: () => void;\n}\n\nconst SeaweedLineMobile = ({\n lineData,\n cyclePart,\n isPrevEnabled,\n isNextEnabled,\n onClickPrevGroup,\n onClickNextGroup,\n showEditLineModal,\n showEditSeedModal,\n onSeedingClick,\n onAssessmentClick,\n onCatchSpatClick,\n onHarvestClick,\n onMaintenanceClick,\n onExtraSeedClick,\n}: Props) => {\n const lang = useSelector(selectLang);\n const isGrower = SelectIsGrower(lineData.farm_id);\n const isEditable = SelectIsEditable(lineData.farm_id);\n const isFarmable = SelectIsFarmable(lineData.farm_id);\n const mainSeed = cyclePart?.main_seed,\n lastAssessment =\n cyclePart && cyclePart.assessments.length > 0\n ? cyclePart.assessments.reduce(\n (p, c) => (p.assessment_date < c.assessment_date ? c : p),\n cyclePart.assessments[0],\n )\n : null;\n\n return (\n <>\n
\n
undefined}>\n {isEditable && (\n
\n \n
\n )}\n
\n \n {translate(lang, 'Line - %s', lineData.line_name)}\n \n
\n
\n
\n
\n \n {translate(lang, 'Tank area')}\n \n \n <>\n \n {`${\n lineData.growing_cycle?.total_seeded_tank_area ?? '-'\n }/${lineData.tank_area}`}\n \n {'m²'}\n \n \n
\n
\n \n {translate(lang, 'Date seeded')}\n \n {mainSeed ? (\n \n {defaultDateFormat(mainSeed.planned_date_seed)}\n \n ) : (\n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(lineData.line_idle)}\n \n
\n )}\n
\n
\n\n
\n
\n \n {translate(lang, 'Planned harvest date')}\n \n \n {defaultDateFormat(\n lastAssessment?.planned_date_harvest ??\n mainSeed?.planned_date_harvest,\n '-',\n )}\n \n
\n
\n
\n
\n
\n \n {translate(lang, 'Seeded Spat Size')}\n \n \n {labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n )}\n \n
\n
\n \n {translate(lang, 'Avg. Size')}\n \n \n {lastAssessment\n ? labelNumber(lastAssessment.shell_size.avg, 'mm', '-')\n : labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n '-',\n )}\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n {mainSeed?.season_name ?? translate(lang, 'Empty')}\n \n \n \n \n
\n \n \n \n
\n
\n <>\n {mainSeed ? (\n
\n {mainSeed.is_growing ? (\n <>\n \n {translate(lang, 'Add assessment')}\n \n {!mainSeed.is_catch_spat && (\n \n {translate(lang, 'Add extra seed')}\n \n )}\n \n {translate(lang, 'Add maintenance')}\n \n \n {translate(lang, 'Harvest Complete')}\n \n \n ) : (\n \n )}\n
\n ) : (\n <>\n {!isGrower && (\n \n {translate(lang, 'Catch Spat')}\n \n )}\n \n {translate(lang, 'Seed the line')}\n \n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(lineData?.line_idle)}\n \n
\n \n )}\n \n
\n
\n \n );\n};\n\nexport default SeaweedLineMobile;\n","import { useDispatch, useSelector } from 'react-redux';\nimport {\n Button,\n Caret,\n DotsIcon,\n Pen,\n PositiveNegativeTitle,\n Subtitle,\n} from '../../components/shared';\nimport { Dropdown, Menu, Spin } from 'antd';\nimport { IMusselLineDetail } from '../../entities/farms.entities';\nimport { IMusselCycle } from '../../entities/growing.entities';\nimport {\n amountDays,\n calcLineLastSize,\n getEstHarvestDate,\n} from '../../lib/farm.helpers';\nimport {\n LineInventoriesLabel,\n SeedInventoriesLabel,\n} from '../../components/CommonViews';\nimport { sendSingleRequest } from '../../apis';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { useHistory } from 'react-router-dom';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { formatNumber } from '../../entities/util-functions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n SelectIsEditable,\n SelectIsFarmable,\n SelectIsGrower,\n} from '../../store/extra/extra.selector';\nimport { labelNumber, labelRange } from '../../lib/common.helpers';\nimport { useMemo } from 'react';\nimport './styles.scss';\n\ninterface Props {\n lineData: IMusselLineDetail;\n cyclePart?: IMusselCycle | null;\n isPrevEnabled: boolean;\n isNextEnabled: boolean;\n onClickPrevGroup?: () => void;\n onClickNextGroup?: () => void;\n showEditLineModal: () => void;\n showEditSeedModal: () => void;\n onSeedingClick: () => void;\n onAssessmentClick: () => void;\n onCatchSpatClick: () => void;\n onHarvestClick: () => void;\n onMaintenanceClick: () => void;\n onFloatingManageClick: () => void;\n onExtraSeedClick: () => void;\n checkedHistoryView: number;\n onHistoryViewClick: () => void;\n}\n\nconst FlupsyMusselLineMobile = ({\n cyclePart,\n lineData,\n isPrevEnabled,\n isNextEnabled,\n onClickPrevGroup,\n onClickNextGroup,\n showEditLineModal,\n showEditSeedModal,\n onSeedingClick,\n onAssessmentClick,\n onCatchSpatClick,\n onHarvestClick,\n onMaintenanceClick,\n onFloatingManageClick,\n onExtraSeedClick,\n checkedHistoryView,\n onHistoryViewClick,\n}: Props) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const lang = useSelector(selectLang);\n const isGrower = SelectIsGrower(lineData.farm_id);\n const isEditable = SelectIsEditable(lineData.farm_id);\n const isFarmable = SelectIsFarmable(lineData.farm_id);\n const mainSeed = cyclePart?.main_seed;\n const lastAssessment =\n cyclePart && cyclePart.assessments.length > 0\n ? cyclePart?.assessments.reduce((p, c) =>\n !p || p.assessment_date < c.assessment_date ? c : p,\n )\n : null;\n\n const longlineLength =\n cyclePart?.seedings.reduce((p, c) => p + c.line_length, 0) ?? 0;\n \n const { totalHarvested, totalSeeded, totalStorage } = useMemo(\n () => ({\n totalHarvested: lineData.growing_cycle?.total_harvested_amount ?? 0,\n totalSeeded: lineData.growing_cycle?.total_seeded_amount ?? 0,\n totalStorage: lineData.growing_cycle?.total_storage ?? 0,\n }),\n [lineData],\n );\n \n const menuClick = async (e: any) => {\n if (e.key === 'edit') {\n showEditLineModal();\n } else if (e.key === 'delete') {\n if (!window.confirm(translate(lang, 'Are you sure to delete this data?')))\n return;\n const res = await sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/line/lines/${lineData.id}`,\n true,\n );\n if (res.status) {\n await dispatch(loadFarmsData());\n history.replace(`/farms/${lineData.farm_id}`);\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Deleted successfully'),\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Unknown error'),\n }),\n );\n }\n }\n };\n\n const lastHarvest =\n cyclePart && cyclePart.harvests.length > 0\n ? cyclePart?.harvests.reduce((p, c) =>\n p.complete_date > c.complete_date ? p : c,\n )\n : null;\n\n function getNewestDate() {\n const timestamps = [\n lastHarvest?.complete_date,\n lastAssessment?.assessment_date,\n mainSeed?.planned_date_seed,\n ].filter(date => date !== undefined && date !== null) as number[];\n console.log(timestamps);\n if (timestamps.length === 0) {\n return undefined;\n }\n\n return Math.max(...timestamps);\n }\n\n const lastActivityDate = getNewestDate();\n\n return (\n <>\n
\n
undefined}>\n
\n {isEditable && (\n
\n \n \n {translate(lang, 'Edit')}\n \n \n {translate(lang, 'Delete')}\n \n \n }\n placement='bottomRight'\n trigger={['click']}\n >\n
\n \n
\n \n
\n )}\n
\n
\n \n {translate(lang, 'Line - %s', lineData.line_name)}\n \n
\n
\n
\n
\n \n {translate(lang, 'Date seeded')}\n \n <>\n {defaultDateFormat(\n lineData.growing_cycle?.main_seed.planned_date_seed,\n '-',\n )}\n \n
\n
\n \n {translate(\n lang,\n mainSeed?.is_growing\n ? 'Planned harvest date'\n : 'Harvested date',\n )}\n \n \n {defaultDateFormat(\n lastAssessment?.planned_date_harvest ??\n mainSeed?.planned_date_harvest,\n '-',\n )}\n \n
\n
\n
\n
\n \n {translate(lang, 'Batch size')}\n \n \n {totalStorage !== 0 ?\n <>\n [{lineData.growing_cycle?.main_seed?.spat_storage?.id}] {lineData.growing_cycle?.main_seed?.spat_storage?.source}\n - {`${formatNumber(\n (totalSeeded / totalStorage) * 100,\n )}%`}\n : '-'}\n \n
\n
\n
\n
\n \n {translate(lang, 'Batch left in Flupsy')}\n \n \n {totalSeeded !== 0 ?\n <>\n {`${formatNumber(\n (totalHarvested / totalSeeded) * 100,\n )}%`} [{totalSeeded} - {totalHarvested} {translate(lang, 'moved to farm')}]\n : '-'}\n \n
\n
\n
\n
\n \n {translate(lang, 'Stage')}\n \n \n {longlineLength > 0 &&\n cyclePart?.seedings.map((x, i) => (\n
\n {`${formatNumber(\n (x.line_length / longlineLength) * 100,\n )}% ${translate(lang, 'stage')} ${\n x.spat_storage?.stage ?? 1\n }`}\n
\n ))}\n
\n
\n
\n \n {translate(\n lang,\n 'Last checked',\n )}\n \n \n {lastActivityDate !== undefined ? defaultDateFormat(lastActivityDate, '-') : '-'}\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n {mainSeed?.season_name ?? translate(lang, 'Empty')}\n \n \n \n \n
\n \n \n \n
\n
\n <>\n {mainSeed ? (\n
\n \n {checkedHistoryView === -1 ? (\n
\n \n
\n ) : (\n translate(\n lang,\n checkedHistoryView === 1\n ? 'Hide history'\n : 'Show history',\n )\n )}\n \n {mainSeed.is_growing ? (\n <>\n \n {translate(lang, 'Inventory Management')}\n \n \n {translate(lang, 'Add assessment')}\n \n {!mainSeed.is_catch_spat && (\n \n {translate(lang, 'Add extra seed')}\n \n )}\n \n {translate(lang, 'Add maintenance')}\n \n \n {translate(lang, 'Harvest Complete')}\n \n \n ) : (\n \n )}\n
\n ) : (\n <>\n {!isGrower && (\n \n {translate(lang, 'Catch Spat')}\n \n )}\n \n {translate(lang, 'Seed the line')}\n \n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(lineData?.line_idle)}\n \n
\n \n )}\n \n
\n
\n \n );\n};\n\nexport default FlupsyMusselLineMobile;\n","import { useSelector } from 'react-redux';\nimport {\n Button,\n Caret,\n DropdownMenu,\n Pen,\n Subtitle,\n} from '../../components/shared';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { IOysterLineDetail } from '../../entities/farms.entities';\nimport { IOysterCycle } from '../../entities/growing.entities';\nimport { amountDays } from '../../lib/farm.helpers';\nimport { formatNumber } from '../../entities/util-functions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { Spin } from 'antd';\nimport {\n SelectIsEditable,\n SelectIsFarmable,\n SelectIsGrower,\n} from '../../store/extra/extra.selector';\nimport { labelNumber, labelRange } from '../../lib/common.helpers';\nimport { useMemo } from 'react';\n\ninterface Props {\n lineData: IOysterLineDetail;\n cyclePart: IOysterCycle | null;\n isPrevEnabled: boolean;\n isNextEnabled: boolean;\n onClickPrevGroup: () => void;\n onClickNextGroup: () => void;\n showEditLineModal: () => void;\n showEditSeedModal: () => void;\n onSeedingClick: () => void;\n onAssessmentClick: () => void;\n onCatchSpatClick: () => void;\n onHarvestClick: () => void;\n onMaintenanceClick: () => void;\n onExtraSeedClick: () => void;\n onFloatingManageClick(): void;\n checkedHistoryView: number;\n onHistoryViewClick: () => void;\n}\n\nconst FlupsyOysterLineMobile = ({\n cyclePart,\n lineData,\n isPrevEnabled,\n isNextEnabled,\n onClickPrevGroup,\n onClickNextGroup,\n showEditLineModal,\n showEditSeedModal,\n onSeedingClick,\n onAssessmentClick,\n onCatchSpatClick,\n onHarvestClick,\n onMaintenanceClick,\n onExtraSeedClick,\n onFloatingManageClick,\n checkedHistoryView,\n onHistoryViewClick,\n}: Props) => {\n const lang = useSelector(selectLang);\n const isEditable = SelectIsEditable(lineData.farm_id);\n const isFarmable = SelectIsFarmable(lineData.farm_id);\n const isGrower = SelectIsGrower(lineData.farm_id);\n const mainSeed = cyclePart?.main_seed,\n lastAssessment =\n cyclePart && cyclePart.assessments.length > 0\n ? cyclePart.assessments.reduce(\n (p, c) => (p.assessment_date < c.assessment_date ? c : p),\n cyclePart.assessments[0],\n )\n : null;\n const growingBaskets = lineData.growing_cycle\n ? lineData.growing_cycle.current_basket_count\n : 0;\n\n const { totalHarvested, totalSeeded, totalStorage } = useMemo(\n () => ({\n totalHarvested: lineData.growing_cycle?.total_harvested_amount ?? 0,\n totalSeeded: lineData.growing_cycle?.total_seeded_amount ?? 0,\n totalStorage: lineData.growing_cycle?.total_storage ?? 0,\n }),\n [lineData],\n );\n\n const basketSum =\n cyclePart?.seedings.reduce((p, c) => p + c.basket_count, 0) ?? 0;\n\n const lastHarvest =\n cyclePart && cyclePart.harvests.length > 0\n ? cyclePart?.harvests.reduce((p, c) =>\n p.complete_date > c.complete_date ? p : c,\n )\n : null;\n\n function getNewestDate() {\n const timestamps = [\n lastHarvest?.complete_date,\n lastAssessment?.assessment_date,\n mainSeed?.planned_date_seed,\n ].filter(date => date !== undefined && date !== null) as number[];\n console.log(timestamps);\n if (timestamps.length === 0) {\n return undefined;\n }\n\n return Math.max(...timestamps);\n }\n\n const lastActivityDate = getNewestDate();\n\n return (\n <>\n
\n
undefined}>\n {isEditable && (\n
\n \n
\n )}\n
\n \n {translate(lang, 'Line - %s', lineData.line_name)}\n \n
\n
\n
\n
\n \n {translate(lang, 'Date seeded')}\n \n <>\n {defaultDateFormat(\n lineData.growing_cycle?.main_seed.planned_date_seed,\n '-',\n )}\n \n
\n
\n \n {translate(\n lang,\n mainSeed?.is_growing\n ? 'Planned harvest date'\n : 'Harvested date',\n )}\n \n \n {defaultDateFormat(\n lastAssessment?.planned_date_harvest ??\n mainSeed?.planned_date_harvest,\n '-',\n )}\n \n
\n
\n
\n
\n \n {translate(lang, 'Batch size')}\n \n \n {totalStorage !== 0 ?\n <>\n [{lineData.growing_cycle?.main_seed?.spat_storage?.id}] {lineData.growing_cycle?.main_seed?.spat_storage?.source}\n - {`${formatNumber(\n (totalSeeded / totalStorage) * 100,\n )}%`}\n : '-'}\n \n
\n
\n
\n
\n \n {translate(lang, 'Batch left in Flupsy')}\n \n \n {totalSeeded !== 0 ?\n <>\n {`${formatNumber(\n (totalHarvested / totalSeeded) * 100,\n )}%`} [{totalSeeded} - {totalHarvested} {translate(lang, 'moved to farm')}]\n : '-'}\n \n
\n
\n
\n
\n \n {translate(lang, 'Stage')}\n \n \n {basketSum > 0 &&\n cyclePart?.seedings.map((x, i) => (\n
\n {`${formatNumber(\n (x.basket_count / basketSum) * 100,\n )}% ${translate(lang, 'seed stage') } ${i + 1}`}\n
\n ))}\n {\n cyclePart?.harvests.map((x, i) => \n {\n if (x.line_length) {\n return (\n
\n {`${formatNumber(\n (x.line_length / basketSum) * 100)\n }% ${translate(lang, 'harvest stage') } ${i + 1}`}\n
\n )\n }\n }\n )\n }\n
\n
\n
\n \n {translate(\n lang,\n 'Last checked',\n )}\n \n \n {lastActivityDate !== undefined ? defaultDateFormat(lastActivityDate, '-') : '-'}\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n {mainSeed?.season_name ?? 'Empty'}\n \n \n \n \n
\n \n \n \n
\n
\n <>\n {mainSeed ? (\n
\n \n {checkedHistoryView === -1 ? (\n
\n \n
\n ) : (\n translate(\n lang,\n checkedHistoryView === 1\n ? 'Hide history'\n : 'Show history',\n )\n )}\n \n {mainSeed.is_growing ? (\n <>\n \n {translate(lang, 'Inventory Management')}\n \n \n {translate(lang, 'Add assessment')}\n \n {!mainSeed.is_catch_spat && (\n \n {translate(lang, 'Add extra seed')}\n \n )}\n \n {translate(lang, 'Add maintenance')}\n \n \n {translate(lang, 'Harvest Complete')}\n \n \n ) : (\n \n )}\n
\n ) : (\n <>\n {!isGrower && (\n \n {translate(lang, 'Catch Spat')}\n \n )}\n \n {translate(lang, 'Seed the line')}\n \n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(lineData?.line_idle)}\n \n
\n \n )}\n \n
\n
\n \n );\n};\n\nexport default FlupsyOysterLineMobile;\n","import { line } from 'd3';\nimport {\n IMusselLineDetail,\n IOysterLineDetail,\n ISeaweedLineDetail,\n} from '../../entities/farms.entities';\nimport { TBusinessType } from '../../entities/general.entities';\nimport {\n IMusselCycle,\n IOysterCycle,\n ISeaweedCycle,\n} from '../../entities/growing.entities';\nimport MusselLineMobile from './MusselLineMobile';\nimport OysterLineMobile from './OysterLineMobile';\nimport SeaweedLineMobile from './SeaweedLineMobile';\nimport FlupsyMusselLineMobile from './FlupsyMusselLineMobile';\nimport FlupsyOysterLineMobile from './FlupsyOysterLineMobile';\n\ninterface Props {\n type: TBusinessType;\n lineData: IMusselLineDetail | IOysterLineDetail | ISeaweedLineDetail;\n cyclePart?: IMusselCycle | IOysterCycle | ISeaweedCycle | null;\n isPrevEnabled: boolean;\n isNextEnabled: boolean;\n onClickPrevGroup: () => void;\n onClickNextGroup: () => void;\n showEditLineModal: () => void;\n showEditSeedModal: () => void;\n onSeedingClick: () => void;\n onAssessmentClick: () => void;\n onCatchSpatClick: () => void;\n onHarvestClick: () => void;\n onMaintenanceClick: () => void;\n onFloatingManageClick: () => void; // only for MUSSEL\n onExtraSeedClick: () => void;\n checkedHistoryView: number; // only for MUSSEL\n onHistoryViewClick: () => void; // only for MUSSEL\n}\n\nconst LineTemplateMobile = ({\n type,\n lineData,\n cyclePart,\n isPrevEnabled,\n isNextEnabled,\n onClickPrevGroup,\n onClickNextGroup,\n showEditLineModal,\n showEditSeedModal,\n onSeedingClick,\n onAssessmentClick,\n onCatchSpatClick,\n onHarvestClick,\n onMaintenanceClick,\n onFloatingManageClick,\n onExtraSeedClick,\n checkedHistoryView,\n onHistoryViewClick,\n}: Props) => (\n lineData.farm_is_flupsy ? (<>\n {type === 'MUSSEL' && (\n \n )}\n\n {type === 'OYSTER' && (\n \n )}\n \n ) : \n <>\n {type === 'MUSSEL' ? (\n \n ) : type === 'OYSTER' ? (\n \n ) : (\n \n )}\n \n);\n\nexport default LineTemplateMobile;\n","import React, { useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n IAssessmentResource,\n ILineResource,\n IMaintenanceResource,\n ISeedManage,\n} from '../../entities/farms.entities';\nimport {\n IWeatherConditionResource,\n TBusinessType,\n} from '../../entities/general.entities';\nimport { DropdownMenu, ModalComponent, Title } from '../shared';\nimport { Modal } from 'antd';\nimport ImageGallery from 'react-image-gallery';\nimport MaintenanceModal from '../farm-modals/MaintenanceModal';\nimport AssessmentModal from '../farm-modals/AssessmentModal';\nimport WeatherInfoModal from '../farm-modals/WeatherInfoModal';\nimport FloatManageModal from '../farm-modals/FloatManageModal';\nimport { ICustomField } from '../../entities/automation.entities';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport weather_icon from '../../images/weather-icon.png';\nimport { sendSingleRequest } from '../../apis';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport 'react-image-gallery/styles/css/image-gallery.css';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\nimport {\n SelectAssessFields,\n SelectIsGrower,\n} from '../../store/extra/extra.selector';\nimport GrowerMaintenanceModal from '../farm-modals/GrowerMaintenanceModal';\nimport { directionChar } from '../../lib/form.helpers';\nimport { IInventoryManage } from '../../entities/inventory.entities';\nimport { inventoryLabel } from '../../lib/farm.helpers';\nimport { formatNumber } from '../../entities/util-functions';\n\ninterface IImage {\n original: string;\n thumbnail: string;\n}\n\nconst SeedManageRow: React.FC<{ item: ISeedManage; lang?: TLang }> = ({\n item,\n lang,\n}) => (\n <>\n \n {defaultDateFormat(item.manage_date)}\n \n \n {translate(lang, 'Line depth history')}\n \n {`${item.submersion} m`}\n \n \n);\n\nconst FloatsRow: React.FC<{\n item: IInventoryManage;\n colSpan: number;\n onEdit?: (d: IInventoryManage) => void;\n onDelete?: (d: IInventoryManage) => void;\n onWeatherOpen: (w: IWeatherConditionResource) => void;\n lang?: TLang;\n}> = ({ item, colSpan, onEdit, onDelete, onWeatherOpen, lang }) => (\n <>\n \n {defaultDateFormat(item.manage_date)}\n
{item.user?.name ?? translate(lang, 'Unknown')}\n {item.verifier && (\n <>\n
\n \n {translate(lang, 'Verified by %s', item.verifier.name)}\n \n \n )}\n \n \n {translate(lang, 'Inventory management')}\n \n \n {}\n {item.status === 'IN'\n ? translate(\n lang,\n '%s deducted and returned to storage',\n `${item.quantity} ${inventoryLabel(item.inventory)}`,\n )\n : translate(\n lang,\n '%s added',\n `${item.quantity} ${inventoryLabel(item.inventory)}`,\n )}\n \n \n \n \n \n {!item.weather_condition ? (\n \n ) : (\n \n \n {translate(lang, 'View')}\n \n )}\n \n {onEdit && onDelete && (\n \n \n \n )}\n \n);\n\nconst AssessmentRow: React.FC<{\n item: IAssessmentResource;\n customFields?: ICustomField[];\n onCommentOpen: (c: string) => void;\n onImageOpen: (i: string[]) => void;\n onEdit?: (d: IAssessmentResource) => void;\n onDelete?: (d: IAssessmentResource) => void;\n onWeatherOpen: (w: IWeatherConditionResource) => void;\n lang?: TLang;\n}> = ({\n item,\n customFields,\n onCommentOpen,\n onImageOpen,\n onEdit,\n onDelete,\n onWeatherOpen,\n lang,\n}) => (\n <>\n \n {defaultDateFormat(item.assessment_date)}\n
{item.user?.name ?? translate(lang, 'Unknown')}\n {item.verifier && (\n <>\n
\n \n {translate(lang, 'Verified by %s', item.verifier.name)}\n \n \n )}\n \n {item.shell_size.min}\n {item.shell_size.max}\n {item.shell_size.avg}\n {customFields?.map(x => (\n \n {item.custom_values?.find(y => y.field_id === x.id)?.field_val}\n \n ))}\n \n {defaultDateFormat(item.planned_date_harvest)}\n \n \n {item.estimated_amount ? formatNumber(item.estimated_amount / 1000) : ''}\n \n \n {defaultDateFormat(item.ready_harvest, '-')}\n \n \n
{directionChar(item.direction)}
\n \n \n {!!item.comment && (\n undefined}\n onClick={onCommentOpen.bind(this, item.comment)}\n >\n {translate(lang, 'View')}\n \n )}\n \n \n {!item.images || item.images.length <= 0 ? (\n \n ) : (\n undefined}\n onClick={onImageOpen.bind(this, item.images)}\n >\n {translate(lang, 'View')}\n \n )}\n \n \n {!item.weather_condition ? (\n \n ) : (\n \n \n {translate(lang, 'View')}\n \n )}\n \n {!!onEdit && !!onDelete && (\n \n \n \n )}\n \n);\n\nconst typeLabel: any = {\n VISUAL_ASSESSMENT: 'Visual Assessment',\n LINE_CLEANING: 'Line Cleaning',\n GENERAL_MAINTENANCE: 'General Maintenance',\n};\n\nconst MaintenanceRow: React.FC<{\n item: IMaintenanceResource;\n colSpan: number;\n onImageOpen: (i: string[]) => void;\n onEdit?: (d: IMaintenanceResource) => void;\n onDelete?: (d: IMaintenanceResource) => void;\n onWeatherOpen: (w: IWeatherConditionResource) => void;\n lang?: TLang;\n}> = ({\n item,\n colSpan,\n onImageOpen,\n onEdit,\n onDelete,\n onWeatherOpen,\n lang,\n}) => (\n <>\n \n {defaultDateFormat(item.maintain_date)}\n
{item.user?.name ?? translate(lang, 'Unknown')}\n {item.verifier && (\n <>\n
\n \n {translate(lang, 'Verified by %s', item.verifier.name)}\n \n \n )}\n \n \n {typeLabel[item.type]}\n \n \n {item.comment ?? translate(lang, 'No commented yet')}\n \n \n {!item.images || item.images.length <= 0 ? (\n \n ) : (\n undefined}\n onClick={onImageOpen.bind(this, item.images)}\n >\n {translate(lang, 'View')}\n \n )}\n \n \n {!item.weather_condition ? (\n \n ) : (\n \n \n {translate(lang, 'View')}\n \n )}\n \n {onEdit && onDelete && (\n \n \n \n )}\n \n);\n\ninterface IRowData {\n type: 'assessment' | 'maintenance' | 'float' | 'seed_manage';\n value:\n | IAssessmentResource\n | IMaintenanceResource\n | IInventoryManage\n | ISeedManage;\n date: number;\n}\n\ninterface Props {\n type: TBusinessType;\n assessments?: IAssessmentResource[];\n maintenances?: IMaintenanceResource[];\n floats?: IInventoryManage[];\n seed_manages?: ISeedManage[];\n loadLine?: () => void;\n lineData?: ILineResource;\n withTitle?: boolean;\n}\n\nconst MaintenanceTable = ({\n type: businessType,\n assessments,\n maintenances,\n floats,\n seed_manages,\n loadLine,\n lineData,\n withTitle,\n}: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const customFields = SelectAssessFields(lineData?.farm_id);\n const isGrower = SelectIsGrower(lineData?.id);\n\n const [comment, setComment] = useState();\n const [images, setImages] = useState();\n const [mntData, setMntData] = useState();\n const [assData, setAssData] = useState();\n const [fltData, setFltData] = useState();\n const [weather, setWeather] = useState();\n\n const openImages = (is: string[]) =>\n setImages(is.map(x => ({ original: x, thumbnail: x })));\n\n const deleteAssessment = async (d: IAssessmentResource) => {\n if (!window.confirm(translate(lang, '_delete_confirm', 'assessment')))\n return;\n const response = await sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/line/assessment/assessments/${d.id}`,\n true,\n );\n if (response.status) {\n if (loadLine) {\n await loadLine();\n }\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, '%s deleted successfully', 'Assessment'),\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(\n lang,\n response.data?.message ?? 'Failed to delete %s',\n 'assessment',\n ),\n }),\n );\n }\n };\n const deleteMaintenance = async (d: IMaintenanceResource) => {\n if (!window.confirm(translate(lang, '_delete_confirm', 'maintenance')))\n return;\n const response = await sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/line/seed/maintenance/${d.id}`,\n true,\n );\n if (response.status) {\n if (loadLine) {\n await loadLine();\n }\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, '%s deleted successfully', 'Maintenance'),\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(\n lang,\n response.data?.message ?? 'Failed to delete %s',\n 'maintenance',\n ),\n }),\n );\n }\n };\n const deleteFloating = async (d: IInventoryManage) => {\n if (!window.confirm(translate(lang, '_delete_confirm', 'floating'))) return;\n const response = await sendSingleRequest(\n {},\n 'DELETE',\n `api/inventory/inventory-seed/${d.id}`,\n true,\n );\n if (response.status) {\n if (loadLine) {\n await loadLine();\n }\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, '%s deleted successfully', 'Floating'),\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(\n lang,\n response.data?.message ?? 'Failed to delete %s',\n 'floating',\n ),\n }),\n );\n }\n };\n\n const tableData = useMemo(() => {\n let data: IRowData[] = [];\n if (assessments) {\n data = data.concat(\n assessments.map(x => ({\n type: 'assessment',\n value: x,\n date: x.assessment_date,\n })),\n );\n }\n if (maintenances) {\n data = data.concat(\n maintenances.map(x => ({\n type: 'maintenance',\n value: x,\n date: x.maintain_date,\n })),\n );\n }\n if (floats) {\n data = data.concat(\n floats.map(x => ({\n type: 'float',\n value: x,\n date: x.manage_date,\n })),\n );\n }\n if (seed_manages) {\n data = data.concat(\n seed_manages.map(x => ({\n type: 'seed_manage',\n value: x,\n date: x.manage_date,\n })),\n );\n }\n data.sort((a, b) => (a.date > b.date ? -1 : 1));\n return data;\n }, [assessments, maintenances, floats, seed_manages]);\n\n const colSpan =\n businessType === 'MUSSEL' || businessType === 'OYSTER'\n ? customFields.length + 5\n : 5;\n\n return (\n
\n \n {withTitle && (\n \n {translate(lang, 'Maintenances')}\n \n )}\n
\n \n \n \n \n {translate(lang, 'Date of assessment')}\n \n \n {`${translate(lang, 'Size min')} (mm)`}\n \n \n {`${translate(lang, 'Size max')} (mm)`}\n \n \n {`${translate(lang, 'Size average')} (mm)`}\n \n {(businessType === 'MUSSEL' || businessType === 'OYSTER') &&\n customFields.map(x => (\n \n {x.name} {x.unit ? ` (${x.unit})` : ''}\n \n ))}\n \n {translate(lang, 'Planned harvest date')}\n \n \n {translate(\n lang,\n businessType === 'MUSSEL'\n ? 'ETA Tones'\n : businessType === 'OYSTER'\n ? 'Dozens'\n : '',\n )}\n \n \n {translate(lang, 'Ready to harvest')}\n \n \n {translate(lang, 'Direction')}\n \n {translate(lang, 'Comment')}\n {translate(lang, 'Photo')}\n {translate(lang, 'Weather')}\n {!!lineData && (\n \n )}\n \n \n \n {tableData.map((item, idx) => (\n \n {item.type === 'assessment' ? (\n \n ) : item.type === 'maintenance' ? (\n \n ) : item.type === 'float' ? (\n \n ) : item.type === 'seed_manage' ? (\n \n ) : (\n <>\n )}\n \n ))}\n \n \n
\n
\n\n setComment(undefined)}\n type=''\n />\n {images !== undefined && (\n setImages(undefined)}\n onCancel={() => setImages(undefined)}\n width={1000}\n >\n \n \n )}\n {!!mntData &&\n lineData &&\n (isGrower ? (\n setMntData(undefined)}\n onConfirm={() => {\n setMntData(undefined);\n loadLine && loadLine();\n }}\n lineData={lineData}\n updateId={mntData.id}\n />\n ) : (\n setMntData(undefined)}\n onConfirm={() => {\n setMntData(undefined);\n loadLine && loadLine();\n }}\n data={mntData}\n updateId={mntData.id}\n lineData={lineData}\n />\n ))}\n {!!assData && lineData && (\n setAssData(undefined)}\n onConfirm={() => {\n setAssData(undefined);\n loadLine && loadLine();\n }}\n lineData={lineData}\n updateID={assData.id}\n />\n )}\n {!!fltData && lineData && (\n setFltData(undefined)}\n lineData={lineData}\n onConfirm={() => {\n setFltData(undefined);\n loadLine && loadLine();\n }}\n updateId={fltData.id}\n />\n )}\n {!!weather && (\n setWeather(undefined)}\n />\n )}\n \n );\n};\n\nexport default MaintenanceTable;\n","import { useEffect, useState, useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams, useHistory } from 'react-router-dom';\nimport { useWidth } from '../../util/useWidth';\nimport { Spinner } from '../../components/shared';\nimport CatchSpatModal from '../../components/farm-modals/CatchSpatModal';\nimport ExtraSeedingsTable from '../../components/lines/ExtraSeedingsTable';\nimport HarvestsTable from '../../components/lines/HarvestsTable';\nimport PendingDataTable from '../../components/lines/PendingDataTable';\nimport GrowerHarvestModal from '../../components/farm-modals/GrowerHarvestModal';\nimport GrowerSeedModal from '../../components/farm-modals/GrowerSeedModal';\nimport SeedingModal from '../../components/farm-modals/SeedingModal';\nimport MaintenanceModal from '../../components/farm-modals/MaintenanceModal';\nimport FloatManageModal from '../../components/farm-modals/FloatManageModal';\nimport AssessmentModal from '../../components/farm-modals/AssessmentModal';\nimport HarvestCompleteModal from '../../components/farm-modals/HarvestCompleteModal';\nimport TimelineView from '../../components/lines/TimelineView';\nimport { sendSingleRequest } from '../../apis';\nimport {\n IFarmWeatherResource,\n ILineResource,\n IMusselLineDetail,\n IOysterLineDetail,\n} from '../../entities/farms.entities';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport LineFormModal from '../../components/farm-modals/LineFormModal';\nimport GrowerMaintenanceModal from '../../components/farm-modals/GrowerMaintenanceModal';\nimport LineTemplateDesktop from './LineTemplateDesktop';\nimport LineTemplateMobile from './LineTemplateMobile';\nimport MaintenanceTable from '../../components/lines/MaintenanceTable';\nimport { IMusselCycle } from '../../entities/growing.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n SelectFarmsByFarmID,\n SelectIsGrower,\n} from '../../store/extra/extra.selector';\nimport './styles.scss';\n\nconst FarmLine = () => {\n const dispatch = useDispatch();\n const history = useHistory();\n const width = useWidth();\n const params = useParams<{ idFarm: string; idLine: string }>();\n const lang = useSelector(selectLang);\n const currentFarm = SelectFarmsByFarmID(+params.idFarm).find(\n x => x.id === +params.idFarm,\n );\n const isGrower = SelectIsGrower(+params.idFarm);\n\n const [lineData, setLineData] = useState<\n IMusselLineDetail | IOysterLineDetail\n >();\n const [loading, setLoading] = useState(false);\n const musselLine = lineData as IMusselLineDetail;\n\n const maxIdx =\n (lineData?.cycles.length ?? 0) - (lineData?.growing_cycle ? 1 : 0);\n\n const [csIndex, setCsIndex] = useState(maxIdx);\n const isNextEnable = csIndex < maxIdx;\n const isPrevEnable = csIndex > 0;\n const curCycle =\n lineData?.cycles && lineData.cycles.length > csIndex\n ? lineData.cycles[csIndex]\n : null;\n const mainSeedResource = (curCycle?.seedings as any)?.find(\n (x: any) => !x.parent_id,\n );\n const musselCycle = musselLine?.cycles[csIndex];\n\n const handleClickPrevGroup = () => {\n if (csIndex <= 0) return;\n setCsIndex(csIndex - 1);\n };\n const handleClickNextGroup = () => {\n if (csIndex >= maxIdx) return;\n setCsIndex(csIndex + 1);\n };\n\n const [editLineData, setEditLineData] = useState();\n const [seedModal, setSeedModal] = useState(false);\n const [visibleAssess, setVisibleAssess] = useState(false);\n const [editSeedModal, setEditSeedModal] = useState(false);\n const [maintenanceModal, setMaintenanceModal] = useState(false);\n const [visibleInventories, setVisibleInventories] = useState(false);\n const [visibleExtraSeed, setVisibleExtraSeed] = useState(false);\n const [visibleCatchSpat, setVisibleCatchSpat] = useState(false);\n const [visibleHarvestModal, setVisibleHarvestModal] = useState(false);\n const [visibleTimeline, setVisibleTimeline] = useState(0);\n const [timelines, setTimelines] = useState();\n const [weathers, setWeathers] = useState();\n\n const toggleVisibleTimeline = async () => {\n if (!curCycle) return;\n if (visibleTimeline) {\n setTimelines(undefined);\n setVisibleTimeline(0);\n } else {\n setVisibleTimeline(-1);\n const resp = await sendSingleRequest(\n { id: curCycle.main_seed.id, with_history: true },\n 'GET',\n 'api/farm/line/seeding',\n true,\n );\n if (resp.status) {\n const {\n seedings,\n assessments,\n maintenances,\n inventory_seeds,\n harvests,\n seed_manages,\n } = resp.data;\n let min_date = -1;\n for (let x of seedings) {\n if (min_date === -1 || min_date > x.planned_date_seed)\n min_date = x.planned_date_seed;\n }\n for (let x of assessments) {\n if (min_date === -1 || min_date > x.assessment_date)\n min_date = x.assessment_date;\n }\n for (let x of maintenances) {\n if (min_date === -1 || min_date > x.maintain_date)\n min_date = x.maintain_date;\n }\n for (let x of inventory_seeds) {\n if (min_date === -1 || min_date > x.manage_date)\n min_date = x.manage_date;\n }\n for (let x of harvests) {\n if (min_date === -1 || min_date > x.complete_date)\n min_date = x.complete_date;\n }\n for (let x of seed_manages) {\n if (min_date === -1 || min_date > x.manage_date)\n min_date = x.manage_date;\n }\n min_date = min_date * 1000;\n const wsp = await sendSingleRequest(\n { min_date, farm_id: params.idFarm },\n 'GET',\n 'api/farm/weather',\n true,\n );\n const lsp = await sendSingleRequest(\n {},\n 'GET',\n `api/farm/line/tag-logs/${params.idLine}`,\n true,\n );\n let logs: any[] = [];\n if (lsp.status) {\n for (let x of lsp.data) {\n if (!x.is_on) {\n logs.push(\n {\n id: x.id,\n tag: x.tag,\n is_on: true,\n logged_date: x.created_at,\n user: x.user,\n },\n {\n id: x.id,\n tag: x.tag,\n is_on: false,\n logged_date: x.updated_at,\n user: x.user,\n },\n );\n } else {\n logs.push({\n id: x.id,\n tag: x.tag,\n is_on: true,\n logged_date: x.created_at,\n user: x.user,\n });\n }\n }\n }\n let planned: any[] = [];\n for (let seed of seedings) {\n const dates = seed.planned_date_history ?? [];\n for (let i = 0; i < dates.length - 1; i++) {\n if (dates[i] !== dates[i + 1]) {\n planned.push({\n id: `${seed.id} - ${i}`,\n old_date: dates[i],\n new_date: dates[i + 1],\n });\n }\n }\n }\n setTimelines([\n ...seedings.map((x: any) => ({ type: 'SEEDING', data: x })),\n ...assessments.map((x: any) => ({\n type: 'ASSESSMENT',\n data: x,\n })),\n ...maintenances.map((x: any) => ({\n type: 'MAINTENANCE',\n data: x,\n })),\n ...inventory_seeds.map((x: any) => ({\n type: 'INVENTORY_SEED',\n data: x,\n })),\n ...harvests.map((x: any) => ({ type: 'HARVEST', data: x })),\n ...seed_manages.map((x: any) => ({ type: 'SEED_MANAGE', data: x })),\n ...logs.map((x: any) => ({ type: 'TAG_LOG', data: x })),\n ...planned.map((x: any) => ({ type: 'HARVEST_PLANNED', data: x })),\n ]);\n if (wsp.status) {\n setWeathers(wsp.data);\n }\n setVisibleTimeline(1);\n } else {\n setVisibleTimeline(0);\n alert(resp.data?.message);\n return;\n }\n }\n };\n\n const loadData = useCallback(\n async (isInternal = false) => {\n if (!isInternal) {\n setLoading(true);\n }\n const response = await sendSingleRequest(\n { with_harvest_spats: true },\n 'GET',\n `api/farm/line/lines/${params.idLine}`,\n true,\n );\n if (response.status) {\n setLineData(response.data);\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, 'Failed to load information'),\n }),\n );\n history.replace(`/farms/${params.idFarm}`);\n }\n if (!isInternal) {\n setLoading(false);\n }\n },\n [params.idLine, params.idFarm],\n );\n\n useEffect(() => setCsIndex(maxIdx), [maxIdx]);\n\n useEffect(() => {\n setTimelines(undefined);\n setVisibleTimeline(0);\n }, [curCycle]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n if (!lineData || !currentFarm) {\n return (\n
\n
\n \n
\n
\n );\n }\n return (\n
\n
\n
\n {width <= 768 ? (\n setEditLineData(lineData)}\n showEditSeedModal={() => setEditSeedModal(true)}\n onSeedingClick={() => setSeedModal(true)}\n onAssessmentClick={() => setVisibleAssess(true)}\n onCatchSpatClick={() => setVisibleCatchSpat(true)}\n onHarvestClick={() => setVisibleHarvestModal(true)}\n onMaintenanceClick={() => setMaintenanceModal(true)}\n onFloatingManageClick={() => setVisibleInventories(true)}\n onExtraSeedClick={() => setVisibleExtraSeed(true)}\n checkedHistoryView={visibleTimeline}\n onHistoryViewClick={toggleVisibleTimeline}\n />\n ) : (\n setEditLineData(lineData)}\n showEditSeedModal={() => setEditSeedModal(true)}\n onSeedingClick={() => setSeedModal(true)}\n onAssessmentClick={() => setVisibleAssess(true)}\n onCatchSpatClick={() => setVisibleCatchSpat(true)}\n onHarvestClick={() => setVisibleHarvestModal(true)}\n onMaintenanceClick={() => setMaintenanceModal(true)}\n onFloatingManageClick={() => setVisibleInventories(true)}\n onExtraSeedClick={() => setVisibleExtraSeed(true)}\n checkedHistoryView={visibleTimeline}\n onHistoryViewClick={toggleVisibleTimeline}\n />\n )}\n {visibleTimeline === 1 &&\n (timelines ? (\n \n ) : (\n
\n \n
\n ))}\n {(currentFarm.type === 'MUSSEL' || currentFarm.type === 'OYSTER') &&\n !isGrower && (\n \n )}\n
\n {curCycle ? (\n \n ) : (\n lineData.maintenances && (\n \n )\n )}\n
\n
\n {curCycle && (\n \n )}\n
\n {!!curCycle?.harvests && curCycle.harvests.length > 0 && (\n
\n \n
\n )}\n
\n {loading && }\n
\n {seedModal && (\n <>\n {isGrower ? (\n setSeedModal(false)}\n lineData={lineData}\n onConfirm={() => {\n setSeedModal(false);\n loadData();\n }}\n />\n ) : (\n setSeedModal(false)}\n onConfirm={() => {\n setSeedModal(false);\n loadData();\n }}\n />\n )}\n \n )}\n {visibleAssess && curCycle && (\n setVisibleAssess(false)}\n lineData={lineData}\n onConfirm={() => {\n setVisibleAssess(false);\n loadData();\n }}\n />\n )}\n {!!editLineData && (\n {\n setEditLineData(undefined);\n if (u === true) loadData();\n }}\n title='Edit line details'\n farmData={currentFarm}\n />\n )}\n {editSeedModal && curCycle && (\n <>\n {isGrower ? (\n setEditSeedModal(false)}\n onConfirm={() => {\n setEditSeedModal(false);\n loadData();\n }}\n />\n ) : (\n setEditSeedModal(false)}\n data={mainSeedResource}\n updateID={curCycle.main_seed.id}\n onConfirm={() => {\n setEditSeedModal(false);\n loadData();\n }}\n />\n )}\n \n )}\n {visibleHarvestModal && (\n <>\n {isGrower ? (\n setVisibleHarvestModal(false)}\n onConfirm={() => {\n setVisibleHarvestModal(false);\n loadData();\n }}\n />\n ) : (\n setVisibleHarvestModal(false)}\n onConfirm={d => {\n setVisibleHarvestModal(false);\n if (d?.data?.is_final === false || d?.data?.is_final === 0) {\n history.push(`/spat-storage?type=${currentFarm.type}`);\n } else {\n loadData();\n }\n }}\n lineData={lineData}\n />\n )}\n \n )}\n {visibleCatchSpat && (\n setVisibleCatchSpat(false)}\n lineData={lineData}\n onConfirm={() => {\n setVisibleCatchSpat(false);\n loadData();\n }}\n type={currentFarm.type}\n />\n )}\n {maintenanceModal && (\n <>\n {isGrower ? (\n setMaintenanceModal(false)}\n onConfirm={() => {\n setMaintenanceModal(false);\n loadData();\n }}\n lineData={musselLine}\n />\n ) : (\n setMaintenanceModal(false)}\n onConfirm={() => {\n setMaintenanceModal(false);\n loadData();\n }}\n lineData={lineData}\n />\n )}\n \n )}\n {visibleInventories && (\n setVisibleInventories(false)}\n title={`Inventory Management`}\n onConfirm={() => {\n setVisibleInventories(false);\n loadData();\n }}\n lineData={lineData}\n manageCycle={currentFarm.type === 'MUSSEL' ? musselCycle : undefined}\n />\n )}\n {visibleExtraSeed && lineData.growing_cycle && (\n <>\n {isGrower ? (\n setVisibleExtraSeed(false)}\n onConfirm={() => {\n setVisibleExtraSeed(false);\n loadData();\n }}\n />\n ) : (\n setVisibleExtraSeed(false)}\n onConfirm={() => {\n setVisibleExtraSeed(false);\n loadData();\n }}\n lineData={lineData}\n parentID={lineData.growing_cycle.main_seed.id}\n />\n )}\n \n )}\n
\n );\n};\n\nexport default FarmLine;\n","import { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, useParams } from 'react-router-dom';\nimport { ILineGroup } from '../../entities/farms.entities';\nimport { sendSingleRequest } from '../../apis';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { useHistory } from 'react-router-dom';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport { Button, Dropdown, Input, Title } from '../../components/shared';\nimport { useWidth } from '../../util/useWidth';\nimport { selectFarmingMethods } from '../../store/utils/utils.selector';\nimport LineLocationModal from '../../components/shared/modal/LineLocationModal';\nimport { ILocation } from '../../entities/general.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface IFormData {\n line_name: string;\n length: number | null;\n backbone?: number | null;\n points: Array<{ lat: number | null; lng: number | null }> | null;\n line_group_id: number | null;\n basket_count?: number | null;\n tank_area?: number | null;\n farming_method?: string;\n}\n\nconst AddLines = () => {\n const dispatch = useDispatch();\n const history = useHistory();\n const params = useParams<{ idFarm: string }>();\n const width = useWidth();\n\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n const currentFarm = farmsData.find(x => x.id === Number(params.idFarm));\n const farmingMethods = useSelector(selectFarmingMethods);\n\n const [formData, setFormData] = useState({\n line_name: `${(currentFarm?.lines.length ?? 0) + 1}`,\n length: null,\n points: null,\n line_group_id: null,\n });\n const [disabled, setDisabled] = useState(false);\n const [lineGroups, setLineGroups] = useState([]);\n const [visibleMap, setVisibleMap] = useState(false);\n\n const handleChangePoints = (i: number, x: 'lat' | 'lng', v: string) => {\n let points = formData.points ? [...formData.points] : [];\n while (points.length <= i) points.push({ lat: null, lng: null });\n points[i][x] = v.length <= 0 ? null : Number(v);\n setFormData(prv => ({ ...prv, points }));\n };\n const updateForm = (key: keyof IFormData, val: any) => {\n if (\n key === 'backbone' ||\n key === 'length' ||\n key === 'basket_count' ||\n key === 'tank_area'\n ) {\n val = val.length <= 0 ? null : Number(val);\n }\n setFormData(prv => ({ ...prv, [key]: val }));\n };\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n\n const handleConfirmData = async () => {\n let data = { farm_id: currentFarm?.id, ...formData };\n if (!data.line_name) {\n showError('Fill in the field name');\n return;\n }\n if (!data.length) {\n data.length = 0;\n }\n if (currentFarm?.type === 'MUSSEL') {\n if (!data.backbone) {\n showError('Please input valid backbone');\n return;\n }\n } else if (currentFarm?.type === 'OYSTER') {\n if (!data.farming_method) {\n showError('Please select farming method');\n return;\n }\n if (!data.basket_count) {\n showError('Please input valid basket count');\n return;\n }\n } else {\n if (!data.tank_area) {\n showError('Please input valid tank area');\n return;\n }\n }\n if (\n data.points &&\n (data.points.length !== 2 ||\n data.points.some(x => x.lat === null || x.lng === null))\n ) {\n showError('Please input valid location points');\n return;\n }\n\n setDisabled(true);\n const res = await sendSingleRequest(\n data,\n 'POST',\n 'api/farm/line/lines',\n true,\n );\n if (!res.status) {\n showError(res.data?.message ?? 'Unknown error');\n setDisabled(false);\n } else {\n await dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(\n lang,\n res.data?.message ?? 'Line added successfully',\n ),\n }),\n );\n history.replace(`/farms/${currentFarm?.id}`);\n }\n };\n\n useEffect(() => {\n if (currentFarm) {\n sendSingleRequest(\n { farm_id: currentFarm.id },\n 'GET',\n 'api/line-group',\n true,\n ).then(res => {\n if (res.status) {\n setLineGroups(res.data);\n }\n });\n }\n }, [currentFarm]);\n\n const groupOptions = [\n { id: '0', value: '0', label: `( ${translate(lang, 'None')} )` },\n ...lineGroups.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n })),\n ];\n\n return (\n
\n
\n
\n
\n \n {translate(lang, 'Line details')}\n \n updateForm('line_name', e.target.value)}\n />\n {currentFarm?.type !== 'SEAWEED' && (\n
\n updateForm('length', e.target.value)}\n />\n
\n )}\n {currentFarm?.type === 'MUSSEL' ? (\n
\n updateForm('backbone', e.target.value)}\n />\n
\n ) : currentFarm?.type === 'OYSTER' ? (\n <>\n
\n ({\n id: x.name,\n value: x.name,\n label: x.name,\n }))}\n value={formData.farming_method}\n onChange={v => updateForm('farming_method', v)}\n />\n
\n
\n updateForm('basket_count', e.target.value)}\n />\n
\n \n ) : (\n
\n updateForm('tank_area', e.target.value)}\n />\n
\n )}\n
\n \n updateForm('line_group_id', v === '0' ? null : Number(v))\n }\n />\n
\n
\n {[0, 1].map(x => (\n \n
\n x\n ? formData.points[x].lat?.toString() ?? ''\n : ''\n }\n onChange={e =>\n handleChangePoints(x, 'lat', e.target.value)\n }\n />\n
\n
\n x\n ? formData.points[x].lng?.toString() ?? ''\n : ''\n }\n onChange={e =>\n handleChangePoints(x, 'lng', e.target.value)\n }\n />\n
\n
\n setVisibleMap(true)}\n >\n {translate(lang, 'Pickup')}\n \n
\n
\n ))}\n
\n
\n \n \n {translate(lang, 'Cancel')}\n \n \n \n {translate(lang, 'Confirm')}\n \n
\n {visibleMap && currentFarm && (\n !!x.lat && !!x.lat,\n ) as ILocation[])\n : undefined\n }\n onConfirm={points => {\n updateForm('points', points);\n setVisibleMap(false);\n }}\n onCancel={() => setVisibleMap(false)}\n />\n )}\n
\n
\n
\n \n );\n};\n\nexport default AddLines;\n","import React, { useState, useEffect, FC, ReactElement } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, useHistory } from 'react-router-dom';\nimport { addFarm, editFarm } from '../../store/farms/farms.actions';\nimport {\n Button,\n CloseIcon,\n Input,\n PlusIcon,\n PercentIcon,\n Title,\n TabsComponent,\n TrashIcon,\n Dropdown,\n} from '../shared';\nimport { useWidth } from '../../util/useWidth';\nimport { validationForZeroMinus } from '../../util/validation';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { IFarmResource } from '../../entities/farms.entities';\nimport { ILocation, TBusinessType } from '../../entities/general.entities';\nimport { randomKey } from '../../lib/common.helpers';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport './styles.scss';\n\nconst typeOptions = [\n { id: 'MUSSEL', label: 'Mussel Farm', value: 'MUSSEL' },\n { id: 'OYSTER', label: 'Oyster Farm', value: 'OYSTER' },\n { id: 'SEAWEED', label: 'Seaweed Farm', value: 'SEAWEED' },\n];\n\ninterface Props {\n typeOf: string;\n idFarm?: string | undefined;\n dataFarm?: IFarmResource | undefined | any;\n onPosition: (d: any) => void;\n positionInMap: any;\n bounds?: ILocation[];\n setBounds?: (x: any) => void;\n locMethod: 'location' | 'bounds';\n setLocMethod: (x: any) => void;\n}\n\ninterface IFields {\n [key: string]:\n | number\n | string\n | boolean\n | undefined\n | Array\n | ILocation;\n name: string;\n lat: number | string;\n lng: number | string;\n area: string;\n farm_number: string;\n owners: Array;\n type: TBusinessType;\n}\n\ninterface IOwners {\n [key: string]: number | string | boolean | undefined;\n title: string;\n percent: number | string;\n id: number | string;\n}\n\nconst FarmForm: FC = ({\n typeOf,\n idFarm,\n onPosition,\n dataFarm,\n positionInMap,\n bounds,\n setBounds,\n locMethod,\n setLocMethod,\n}): ReactElement => {\n const history = useHistory();\n const dispatch = useDispatch();\n const width = useWidth();\n const maxLatitude = 84.85;\n const maxLongitude = 180;\n const lang = useSelector(selectLang);\n const [fields, setFields] = useState({\n name: '',\n lat: '',\n lng: '',\n area: '',\n owners: [{ title: '', percent: '', id: randomKey() }],\n farm_number: '',\n type: 'MUSSEL',\n });\n const [isDisableOwner, setIsDisableOwner] = useState(false);\n\n const handleOnAddLine = () => {\n setFields(prev => ({\n ...prev,\n owners: [...prev.owners, { title: '', percent: '', id: randomKey() }],\n }));\n };\n\n const handleOnDeleteLine = (id: number | string) => {\n setFields(prev => ({\n ...prev,\n owners: [...prev.owners.filter(line => line.id !== id)],\n }));\n setIsDisableOwner(false);\n };\n\n const handleChangeLineData = (\n event: React.ChangeEvent,\n id: number | string,\n ) => {\n const {\n value,\n dataset: { type },\n } = event.target as HTMLInputElement;\n\n const newLines = (fields.owners ?? []).map((line: IOwners) => {\n if (line.id === id) {\n const obj: IOwners = { ...line };\n const objIng: string | undefined = type;\n\n if (objIng === 'percent') {\n const isValue = validationForZeroMinus(value);\n\n if (fields.owners.length === 1) {\n let validValue = isValue;\n if (Number(isValue) >= 100) {\n validValue = '100';\n setIsDisableOwner(true);\n } else {\n setIsDisableOwner(false);\n }\n\n if (objIng) {\n obj[objIng] = validValue;\n }\n\n return obj;\n }\n\n if (fields.owners.length > 1) {\n const sum = fields.owners.reduce((acum: any, owner: any) => {\n if (owner.id === id) {\n return acum + Number(isValue);\n }\n return acum + Number(owner.percent);\n }, 0);\n\n let validValue = isValue;\n if (sum >= 100) {\n validValue = (Number(isValue) - (sum - 100)).toString();\n setIsDisableOwner(true);\n } else {\n setIsDisableOwner(false);\n }\n\n if (objIng) {\n obj[objIng] = validValue;\n }\n\n return obj;\n }\n }\n\n if (objIng) {\n obj[objIng] = value;\n }\n return obj;\n }\n return line;\n });\n\n setFields(prev => ({ ...prev, owners: [...newLines] }));\n };\n\n const validLocation = (value: string, type: string): string => {\n if (type === 'lat') {\n const valueArray = value.split('');\n\n if (valueArray[0] !== '-') {\n if (valueArray.length >= 2) {\n const sum = Number(valueArray[0] + valueArray[1]);\n const sumValid = sum >= maxLatitude;\n\n if (sumValid) {\n valueArray.splice(\n 0,\n 2,\n maxLatitude.toString()[0],\n maxLatitude.toString()[1],\n );\n }\n }\n\n if (valueArray.length >= 3 && Number.isNaN(Number(valueArray[1]))) {\n return value;\n }\n\n if (valueArray.length >= 3) {\n const newV = valueArray.filter(\n (word: string) => !Number.isNaN(Number(word)),\n );\n newV.splice(2, 0, '.');\n\n const b = newV.join('');\n\n if (b) {\n return b;\n }\n }\n\n return valueArray.join('');\n }\n\n if (valueArray[0] === '-') {\n if (valueArray.length >= 3) {\n const sum = Number(valueArray[1] + valueArray[2]);\n const sumValid = sum > maxLatitude;\n\n if (sumValid) {\n valueArray.splice(\n 1,\n 3,\n maxLatitude.toString()[0],\n maxLatitude.toString()[1],\n );\n }\n }\n\n if (valueArray.length >= 4 && Number.isNaN(Number(valueArray[2]))) {\n return value;\n }\n\n if (valueArray.length >= 4) {\n const newV = valueArray.filter(\n (word: string) => word === '-' || !Number.isNaN(Number(word)),\n );\n\n newV.splice(3, 0, '.');\n\n const b = newV.join('');\n\n if (b) {\n return b;\n }\n }\n\n return valueArray.join('');\n }\n }\n if (type === 'lng') {\n const valueArray = value.split('');\n\n if (valueArray[0] !== '-') {\n if (valueArray.length >= 3) {\n const sum = Number(valueArray[0] + valueArray[1] + valueArray[2]);\n const sumValid = sum >= maxLongitude;\n\n if (sumValid) {\n valueArray.splice(\n 0,\n 3,\n maxLongitude.toString()[0],\n maxLongitude.toString()[1],\n maxLongitude.toString()[2],\n );\n }\n }\n\n if (valueArray.length >= 3 && Number.isNaN(Number(valueArray[1]))) {\n return value;\n }\n if (valueArray.length >= 4 && Number.isNaN(Number(valueArray[2]))) {\n return value;\n }\n\n if (valueArray.length >= 4) {\n const newV = valueArray.filter(\n (word: string) => !Number.isNaN(Number(word)),\n );\n newV.splice(3, 0, '.');\n\n const b = newV.join('');\n\n if (b) {\n return b;\n }\n }\n\n return valueArray.join('');\n }\n\n if (valueArray[0] === '-') {\n if (valueArray.length >= 4) {\n const sum = Number(valueArray[1] + valueArray[2] + valueArray[3]);\n const sumValid = sum > maxLongitude;\n\n if (sumValid) {\n valueArray.splice(\n 1,\n 4,\n maxLongitude.toString()[0],\n maxLongitude.toString()[1],\n maxLongitude.toString()[2],\n );\n }\n }\n\n if (valueArray.length >= 4 && Number.isNaN(Number(valueArray[2]))) {\n return value;\n }\n\n if (valueArray.length >= 5 && Number.isNaN(Number(valueArray[3]))) {\n return value;\n }\n\n if (valueArray.length >= 6 && Number.isNaN(Number(valueArray[4]))) {\n return value;\n }\n\n if (valueArray.length >= 5) {\n const newV = valueArray.filter(\n (word: string) => word === '-' || !Number.isNaN(Number(word)),\n );\n\n newV.splice(4, 0, '.');\n\n const b = newV.join('');\n\n if (b) {\n return b;\n }\n }\n\n return valueArray.join('');\n }\n }\n return value;\n };\n\n const handleChangeFields = (\n event: React.ChangeEvent,\n ) => {\n const {\n value,\n dataset: { type },\n } = event.target as HTMLInputElement;\n\n setFields(prev => {\n const objIng: string | undefined = type;\n\n if (objIng) {\n if (type === 'lat') {\n const validValue = validLocation(value, 'lat');\n const location = { lng: fields.lng, lat: validValue };\n\n if (location.lat && location.lng) {\n onPosition(location);\n }\n\n return {\n ...prev,\n [objIng]: validValue.toString(),\n };\n }\n\n if (type === 'lng') {\n const validValue = validLocation(value, 'lng');\n const location = { lat: fields.lat, lng: validValue };\n\n if (location.lat && location.lng) {\n onPosition(location);\n }\n return {\n ...prev,\n [objIng]: validValue,\n };\n }\n\n if (type === 'area') {\n const validValue = validationForZeroMinus(value);\n return { ...prev, [objIng]: validValue };\n }\n\n if (type === 'farm_number') {\n return { ...prev, [objIng]: value.slice(0, 16) };\n }\n return { ...prev, [objIng]: value };\n }\n return { ...prev };\n });\n };\n\n const validLat = (): boolean | string => {\n if (!fields.lat) {\n setFields(prev => ({ ...prev, lat: prev.lat }));\n return false;\n }\n const lat = fields.lat.toString().split('');\n\n if (lat[0] !== '-' && lat.length >= 3) {\n const sum = lat[0] + lat[1];\n if (Number(sum) === maxLatitude) {\n const l = lat.slice(0, 2);\n l.splice(2, 0, '.', '0');\n return l.join('');\n }\n }\n\n if (lat[0] !== '-' && lat.length <= 2) {\n const sum = lat[0] + lat[1];\n if (Number(sum) === maxLatitude) {\n lat.splice(2, 0, '.', '0');\n return lat.join('');\n }\n lat.splice(2, 0, '.', '0');\n return lat.join('');\n }\n\n if (lat[0] === '-' && lat.length >= 4) {\n const sum = lat[1] + lat[2];\n if (Number(sum) === maxLatitude) {\n const l = lat.slice(0, 3);\n l.splice(3, 0, '.', '0');\n return l.join('');\n }\n }\n\n if (lat[0] === '-' && lat.length <= 3) {\n lat.splice(3, 0, '.', '0');\n return lat.join('');\n }\n\n return fields.lat.toString();\n };\n\n const validLng = (): boolean | string => {\n if (!fields.lng) {\n setFields(prev => ({ ...prev, lng: fields.lng }));\n return false;\n }\n const lng = fields.lng.toString().split('');\n\n if (lng[0] !== '-' && lng.length >= 3) {\n const sum = lng[0] + lng[1] + lng[2];\n if (Number(sum) === maxLongitude) {\n const l = lng.slice(0, 3);\n l.splice(3, 0, '.', '0');\n return l.join('');\n }\n }\n\n if (lng[0] !== '-' && lng.length <= 3) {\n lng.splice(3, 0, '.', '0');\n return lng.join('');\n }\n\n if (lng[0] === '-' && lng.length >= 4) {\n const sum = lng[1] + lng[2] + lng[3];\n if (Number(sum) === maxLongitude) {\n const l = lng.slice(0, 4);\n l.splice(4, 0, '.', '0');\n return l.join('');\n }\n }\n\n if (lng[0] === '-' && lng.length <= 4) {\n lng.splice(4, 0, '.', '0');\n return lng.join('');\n }\n\n return fields.lng.toString();\n };\n\n const handleComplete = (): null => {\n if (!fields.name) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(\n lang,\n 'Field %s filled in incorrectly',\n 'farm name',\n ),\n }),\n );\n return null;\n }\n if (!bounds || bounds.length < 3) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, 'Please input 3 boundaries at least'),\n }),\n );\n return null;\n }\n\n const lat = validLat();\n const lng = validLng();\n\n if (!lat && bounds.length <= 0) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(\n lang,\n 'Field %s filled in incorrectly',\n 'latitude',\n ),\n }),\n );\n return null;\n }\n\n if (!lng && bounds.length <= 0) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(\n lang,\n 'Field %s filled in incorrectly',\n 'longitude',\n ),\n }),\n );\n return null;\n }\n\n if (!fields.area) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, 'Field %s filled in incorrectly', 'area'),\n }),\n );\n return null;\n }\n\n const valid = fields.owners.filter(\n line =>\n line.title === '' ||\n line.title === undefined ||\n line.percent === '' ||\n line.percent === undefined ||\n Number(line.percent) <= 0,\n );\n\n if (!fields.owners.length || valid.length) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, 'Field %s filled in incorrectly', 'owners'),\n }),\n );\n return null;\n }\n\n const filterOwners = fields.owners.map((owner: IOwners) => {\n const { id, ...own } = owner;\n return own;\n });\n\n const data = {\n name: fields.name.trim(),\n long: lng ? lng.toString() : bounds[0].lng ?? 0,\n lat: lat ? lat.toString() : bounds[0].lat ?? 0,\n area: Number(fields.area),\n owner: filterOwners,\n farm_number: fields.farm_number,\n bounds,\n type: fields.type,\n };\n\n if (typeOf === 'add') {\n dispatch(addFarm(data, history));\n }\n\n if (typeOf === 'edit') {\n dispatch(editFarm(data, idFarm, history));\n }\n return null;\n };\n const handleMapClick = (location: ILocation) => {\n if (!setBounds) return;\n if (!bounds || bounds.length <= 0) {\n setBounds([location]);\n } else {\n let tmp = [...bounds];\n const i = tmp.length - 1;\n tmp[i] = location;\n setBounds(tmp);\n }\n };\n const updateBound = (idx: number, key: 'lat' | 'lng', event: any) => {\n if (setBounds === undefined) return;\n const val = Number(event.target.value);\n if (!bounds || bounds.length <= idx) return;\n const tmp = bounds.map((x, i) =>\n i === idx\n ? {\n lat: key === 'lat' ? val : x.lat,\n lng: key === 'lng' ? val : x.lng,\n }\n : x,\n );\n setBounds(tmp);\n };\n const deleteBound = (idx: number) => {\n if (!bounds || bounds.length <= idx) return;\n const tmp = [...bounds];\n tmp.splice(idx, 1);\n if (setBounds !== undefined) {\n setBounds(tmp);\n }\n };\n const addNewLocation = () => {\n if (!setBounds) return;\n if (!bounds || bounds.length <= 0) {\n window.alert(translate(lang, 'Please click map to add a location'));\n } else {\n let tmp = [...bounds];\n tmp.push(tmp[tmp.length - 1]);\n setBounds(tmp);\n }\n };\n\n const locationItems = [\n {\n id: 'location',\n title: translate(lang, 'Location'),\n content: (\n
\n
\n \n
\n
\n \n
\n
\n ),\n },\n {\n id: 'bounds',\n title: translate(lang, 'Boundaries'),\n content: (\n
\n
\n \n {translate(lang, 'Add corner')}\n \n
\n {bounds &&\n bounds.map((item, i) => (\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n ))}\n
\n ),\n },\n ];\n\n useEffect(() => {\n if (dataFarm && Object.values(dataFarm).length) {\n const { location, owners, ...farmData } = dataFarm;\n\n const ownersWithId = owners?.map((owner: any) => {\n const newOwner = { ...owner };\n newOwner.id = randomKey();\n return newOwner;\n });\n\n const farm = {\n ...farmData,\n owners: ownersWithId,\n lat: dataFarm.location.lat,\n lng: dataFarm.location.lng,\n };\n\n const sumPercent = dataFarm?.owners?.reduce(\n (acum: number, owner: any) => {\n const sum = acum + Number(owner.percent);\n return sum;\n },\n 0,\n );\n\n if (sumPercent >= 100) {\n setIsDisableOwner(true);\n }\n\n setFields(farm);\n onPosition({ lat: dataFarm.location.lat, lng: dataFarm.location.lng });\n }\n }, [dataFarm]);\n\n useEffect(() => {\n if (positionInMap) {\n if (locMethod === 'location') {\n setFields(prev => ({ ...prev, ...positionInMap }));\n } else {\n handleMapClick(positionInMap);\n }\n }\n }, [positionInMap]);\n\n return (\n
\n \n

{typeOf}

Farm\n \n
\n setFields(p => ({ ...p, type: v as TBusinessType }))}\n />\n
\n
\n \n
\n
\n \n
\n
\n {typeOf === 'add' || (bounds && bounds.length > 2) ? (\n <>{locationItems[1].content}\n ) : (\n setLocMethod(x as any)}\n />\n )}\n
\n
\n \n
\n
\n {(fields.owners ?? []).map(line => (\n \n
\n handleChangeLineData(event, line.id)}\n />\n
\n
\n }\n onChange={event => handleChangeLineData(event, line.id)}\n />\n
\n undefined}\n onClick={e => handleOnDeleteLine(line.id)}\n role='button'\n tabIndex={0}\n >\n \n \n
\n ))}\n {width < 768 ? (\n \n \n \n \n {translate(lang, 'Add')}\n \n ) : (\n \n \n \n \n {translate(lang, 'Add')}\n \n )}\n
\n
\n \n \n {translate(lang, 'Cancel')}\n \n \n \n \n {translate(lang, typeOf === 'add' ? 'Create Farm' : 'Save')}\n \n \n
\n \n );\n};\n\nexport default FarmForm;\n","import { useEffect, useMemo, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport { Map, Spinner } from '../../components/shared';\nimport FarmForm from '../../components/farmform/FarmForm';\nimport { useWidth } from '../../util/useWidth';\nimport { IFarmResource } from '../../entities/farms.entities';\nimport { selectSpin } from '../../store/ui/ui.selector';\nimport { ILocation } from '../../entities/general.entities';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { LINE_COLORS } from '../../lib/constant';\nimport { getLineStatus } from '../../lib/farm.helpers';\nimport { selectUserMeta } from '../../store/auth/auth.selector';\n\nconst defaultLocation = {\n lat: -41.0917585,\n lng: 173.828391,\n};\n\nconst FarmsForm = () => {\n const width = useWidth();\n const isSpinner = useSelector(selectSpin);\n const farmsData = useSelector(selectFarmsData);\n const params = useParams<{ id: string; idFarm: string }>();\n const userMeta = useSelector(selectUserMeta);\n\n const farmData = farmsData.find(x => x.id === Number(params.idFarm));\n\n const { polygons, lines } = useMemo(() => {\n const polygons = farmsData\n .filter(x => x.bounds && x.bounds.length > 2)\n .map(x => x.bounds as ILocation[]);\n\n let lines = [];\n for (let farm of farmsData) {\n for (let line of farm.lines) {\n if (!line.points || line.points.length < 2) continue;\n const color = getLineStatus(line, userMeta?.line_assess_expire_days);\n lines.push({\n points: line.points,\n color: LINE_COLORS[color],\n });\n }\n }\n return { polygons, lines };\n }, [farmsData]);\n\n const [position, setPosition] = useState();\n const [positionInMap, setPositionInMap] = useState();\n const [bounds, setBounds] = useState();\n const [locMethod, setLocMethod] = useState<'location' | 'bounds'>('bounds');\n\n const handleOnPosition = (mapPosition: any) => {\n if (mapPosition.lat && mapPosition.lng) {\n setPosition({\n lat: Number(mapPosition.lat),\n lng: Number(mapPosition.lng),\n });\n }\n };\n const handleOnCallback = (newPosition: ILocation) => {\n setPositionInMap(newPosition);\n };\n\n useEffect(() => {\n if (farmData && farmData.bounds) {\n setBounds(farmData.bounds);\n }\n }, [farmData]);\n\n return (\n
\n
\n
\n
\n \n
\n \n 0 ? bounds[0] : position}\n defaultPosition={\n (!!bounds && bounds.length > 0 ? bounds[0] : position) ??\n defaultLocation\n }\n polygons={\n bounds && bounds.length > 1 ? [...polygons, bounds] : polygons\n }\n lines={lines}\n onCallback={handleOnCallback}\n isStayLocation={true}\n />\n
\n
\n {isSpinner && }\n
\n \n );\n};\n\nexport default FarmsForm;\n","import { useSelector } from 'react-redux';\nimport { IMusselLineResource } from '../../entities/farms.entities';\nimport {\n defaultDateFormat,\n diffDays,\n} from '../../util/toggleSecondMillisecond';\nimport { Subtitle, Title } from '../shared';\nimport { customFieldsValues } from '../../entities/util-functions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport {\n SelectAssessFields,\n SelectSeedingFields,\n} from '../../store/extra/extra.selector';\nimport { labelRange } from '../../lib/common.helpers';\nimport { IInventorySum } from '../../entities/inventory.entities';\nimport './styles.scss';\n\nconst SeedInventoriesLabel = (ivt_seeds: IInventorySum[]) =>\n ivt_seeds.map(x => (\n \n \n {x.inventory_name} - {x.quantity}\n \n
\n
\n ));\n\ninterface Props {\n lineData: IMusselLineResource;\n}\n\nconst FarmLineInfoModal = ({ lineData }: Props) => {\n const lang = useSelector(selectLang);\n const mainSeed = lineData.growing_cycle?.main_seed;\n const toDateFormat = (v: any) => {\n if (!v) return '-';\n return defaultDateFormat(v);\n };\n const SpatLabel = () => {\n if (!lineData.growing_cycle?.main_seed.spat_storage) {\n return ;\n }\n const { seed_type } = lineData.growing_cycle.main_seed.spat_storage;\n return
{seed_type ?? '-'}
;\n };\n const assessment = lineData.growing_cycle?.last_assessment;\n const assessFields = SelectAssessFields(lineData.farm_id);\n const seedFields = SelectSeedingFields(lineData.farm_id);\n const assessValues = customFieldsValues(\n assessFields,\n assessment?.custom_values,\n );\n const seedValues = customFieldsValues(seedFields, mainSeed?.custom_values);\n\n return (\n
\n
\n
\n \n {translate(lang, 'Length')}\n \n \n {lineData.length}\n \n
\n
\n \n {translate(lang, 'Backbone')}\n \n \n {lineData.backbone}\n \n
\n {mainSeed ? (\n <>\n
\n \n {translate(lang, 'Date seeded')}\n \n \n {defaultDateFormat(mainSeed?.planned_date_seed)}\n \n
\n
\n \n {translate(lang, 'Spat Size')}\n \n \n {labelRange(\n mainSeed?.spat_size,\n mainSeed?.spat_size_max ?? undefined,\n 'mm',\n )}\n \n
\n
\n \n {translate(\n lang,\n !lineData.growing_cycle\n ? 'Harvest Date'\n : 'Planned harvest date',\n )}\n \n \n {toDateFormat(mainSeed?.planned_date_harvest)}\n \n
\n
\n \n {translate(lang, 'Submersion')}\n \n \n {mainSeed?.submersion ? `${mainSeed.submersion} m` : '-'}\n \n
\n
\n \n {translate(lang, 'Seed type')}\n \n \n \n \n
\n
\n \n {translate(lang, 'Spacing')}\n \n \n {mainSeed?.spacing ? `${mainSeed.spacing} mm` : '-'}\n \n
\n
\n \n {translate(lang, 'Density')}\n \n \n {labelRange(\n mainSeed?.density,\n mainSeed?.density_max ?? undefined,\n )}\n \n
\n
\n \n {translate(lang, 'Condition')}\n \n \n {mainSeed.spat_storage?.condition ?? '-'}\n \n
\n
\n \n {translate(lang, 'Drop')}\n \n \n {mainSeed?.drop ? `${mainSeed.drop} m` : '-'}\n \n
\n
\n \n {translate(lang, 'Inventories')}\n \n \n {lineData.growing_cycle\n ? SeedInventoriesLabel(lineData.growing_cycle.inventories_sum)\n : ''}\n \n
\n {seedValues?.map(x => (\n
\n \n {x.label}\n \n \n {x.value !== undefined && x.value !== null\n ? `${x.value} ${x.unit ?? ''}`\n : '-'}\n \n
\n ))}\n \n ) : (\n
\n \n {translate(\n lang,\n 'Line is empty for %s days',\n lineData.line_idle ?? 0,\n )}\n \n
\n )}\n
\n {assessment && (\n <>\n \n {translate(lang, 'Last Assessment')}\n \n
\n
\n \n {translate(lang, 'Date of assessment')}\n \n \n {toDateFormat(assessment.assessment_date)}\n \n
\n
\n \n {translate(lang, 'Author')}\n \n \n {assessment.user?.name ?? '-'}\n \n
\n
\n \n {translate(lang, 'Planned harvest date')}\n \n \n {toDateFormat(assessment.planned_date_harvest)}\n \n
\n
\n \n {`${translate(lang, 'Size min')} (mm)`}\n \n \n {assessment.shell_size.min}\n \n
\n
\n \n {`${translate(lang, 'Size max')} (mm)`}\n \n \n {assessment.shell_size.max}\n \n
\n
\n \n {`${translate(lang, 'Size average')} (mm)`}\n \n \n {assessment.shell_size.avg}\n \n
\n {assessValues?.map(x => (\n
\n \n {x.label}\n \n \n {x.value}\n \n
\n ))}\n
\n \n {translate(lang, 'Ready to harvest')}\n \n \n {diffDays(assessment.ready_harvest)}\n \n
\n
\n \n {translate(lang, 'Comment')}\n \n \n {assessment.comment}\n \n
\n
\n \n )}\n
\n );\n};\n\nexport default FarmLineInfoModal;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory, useParams } from 'react-router-dom';\nimport FarmLineInfoModal from '../../components/farm-modals/FarmLineInfoModal';\nimport {\n BreadcrumbComponent,\n Button,\n InputModal,\n Spinner,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport { IMusselLineResource } from '../../entities/farms.entities';\nimport getBreadcrumbMenu from '../../util/BreadcrumbMenu';\nimport NotFound from '../static/NotFound';\nimport { selectMusselFarms } from '../../store/farms/farms.selector';\nimport { selectUserMeta } from '../../store/auth/auth.selector';\nimport {\n getLineStatus,\n updateLineColumn,\n updateLinePriority,\n} from '../../lib/farm.helpers';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { TLang } from '../../entities/ui.entities';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\ninterface LTProps {\n line: IMusselLineResource;\n groupId: number;\n moveGroup: (i: number, g: number) => void;\n moveOrder: (i: number, g: number) => void;\n showModal: (x: any) => void;\n width?: number;\n}\n\nconst LineTr = ({\n line,\n moveGroup,\n moveOrder,\n groupId,\n showModal,\n width = 100,\n}: LTProps) => {\n const userMeta = useSelector(selectUserMeta);\n const [over, setOver] = useState(false);\n\n const lineStatus = getLineStatus(line, userMeta?.line_assess_expire_days);\n const color = `--${lineStatus.toLowerCase()}`;\n\n const handleClick = (evt: React.MouseEvent) => {\n evt.preventDefault();\n evt.stopPropagation();\n showModal(line);\n };\n const onDragStartEvent = (event: React.DragEvent) => {\n event.dataTransfer.setData('line_id', line.id.toString());\n event.dataTransfer.setData('group_id', groupId.toString());\n };\n const onDropEvent = (event: React.DragEvent) => {\n const line_id = parseInt(event.dataTransfer.getData('line_id'));\n const group_id = parseInt(event.dataTransfer.getData('group_id'));\n if (line_id !== line.id) {\n moveOrder(line_id, parseInt(line.id.toString()));\n }\n if (group_id !== groupId) {\n moveGroup(line_id, groupId);\n }\n setOver(false);\n };\n const onDragOverEvent = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n const line_id = parseInt(event.dataTransfer.getData('line_id'));\n if (line_id !== line.id) {\n setOver(true);\n }\n };\n const onDragLeaveEvent = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n setOver(false);\n };\n\n return (\n \n
{line.line_name}
\n
\n \n
\n
\n \n \n );\n};\n\ninterface VLProps {\n groupId: number;\n lines: IMusselLineResource[];\n width?: number;\n moveGroup: (i: number, g: number) => void;\n moveOrder: (i: number, p: number) => void;\n showModal: (x: any) => void;\n maxW?: number;\n}\n\nconst VisualLinesGroup = ({\n groupId,\n lines,\n width = 500,\n moveGroup,\n moveOrder,\n showModal,\n maxW = 100,\n}: VLProps) => {\n const onDragOverEvent = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const onDropEvent = (event: React.DragEvent) => {\n const line_id = parseInt(event.dataTransfer.getData('line_id'));\n const group_id = parseInt(event.dataTransfer.getData('group_id'));\n if (group_id !== groupId) {\n moveGroup(line_id, groupId);\n }\n };\n\n return (\n \n \n {String.fromCharCode(65 + groupId)}\n \n {lines.map(line => (\n \n ))}\n \n );\n};\n\nconst NewGroup = ({\n moveGroup,\n lang,\n}: {\n moveGroup: (i: number, g: number) => void;\n lang: TLang | undefined;\n}) => {\n const onDragOverEvent = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const onDropEvent = (event: React.DragEvent) => {\n const line_id = parseInt(event.dataTransfer.getData('line_id'));\n moveGroup(line_id, -1);\n };\n\n return (\n \n {translate(lang, 'Drop Here')}\n \n );\n};\n\nconst FarmVisualLinesPage = () => {\n const dispatch = useDispatch();\n const history = useHistory();\n const params = useParams<{ idFarm: string }>();\n const farmsData = useSelector(selectMusselFarms);\n const lang = useSelector(selectLang);\n const farmData = farmsData.find(\n t => parseInt(t.id.toString()) === parseInt(params.idFarm),\n );\n const breadcrumbItems = getBreadcrumbMenu('FARM_VISUAL', {\n FARM_ID: params.idFarm,\n FARM_NAME: farmData?.name,\n });\n const [groups, setGroups] = useState([]);\n const [loading, setLoading] = useState(false);\n const [visible, setVisible] = useState(false);\n const [selectedLine, setSelectedLine] = useState();\n const { redirectToLine } = useMenuHandler();\n\n const buildGroups = useCallback(() => {\n if (!farmData?.lines) return;\n let temp: any = [];\n for (let l of farmData.lines) {\n if (!temp[l.col_no]) temp[l.col_no] = [];\n temp[l.col_no].push(l);\n }\n let result: any = [];\n for (let g of temp) {\n if (g && g.length > 0) {\n g.sort((a: any, b: any) =>\n a.priority === b.priority\n ? a.id < b.id\n ? -1\n : 1\n : a.priority > b.priority\n ? -1\n : 1,\n );\n result.push(g);\n }\n }\n setGroups(result);\n }, [farmData?.lines]);\n\n const moveOrder = (lineId: number, pos: number) => {\n setLoading(true);\n const finish = () => {\n setLoading(false);\n dispatch(loadFarmsData());\n };\n updateLinePriority(lineId, pos).then(finish).catch(finish);\n };\n const moveGroup = (lineId: number, groupId: number) => {\n setLoading(true);\n const finish = () => {\n setLoading(false);\n dispatch(loadFarmsData());\n };\n updateLineColumn(lineId, groupId).then(finish).catch(finish);\n };\n const showModal = (data: any) => {\n setVisible(true);\n setSelectedLine(data);\n };\n const goToDetail = () => {\n if (!selectedLine) return;\n redirectToLine(selectedLine.farm_id.toString(), selectedLine.id.toString());\n };\n const getMaxBackbone = () => {\n let v: number = 0;\n for (let g of groups)\n for (let t of g) v = Math.max(v, Number(t.backbone ?? 0));\n return v;\n };\n\n useEffect(() => buildGroups(), [buildGroups]);\n\n if (!farmData || farmData === undefined) {\n return ;\n }\n return (\n
\n
\n {loading && (\n
\n \n
\n )}\n
\n
\n \n
\n
\n
\n
\n \n {farmData.name}\n \n \n {farmData.farm_number}\n \n
\n history.push('/farms/visual-mode')}\n >\n {translate(lang, 'View float placement')}\n \n
\n
\n
\n
\n {groups.map((group: any, groupId: number) => (\n \n ))}\n \n
\n
\n
\n
\n
\n \n {translate(lang, 'Legend')}\n \n
\n
\n
{translate(lang, 'Empty')}
\n
\n
\n
\n
\n {translate(lang, 'Ready to harvest')}\n
\n
\n
\n
\n
\n {translate(lang, 'Requires assessment')}\n
\n
\n
\n
\n
\n {translate(lang, 'Catch spat')}\n
\n
\n
\n
\n
\n {translate(lang, 'Growing mussel')}\n
\n
\n
\n
\n
\n
\n
\n {visible && selectedLine && (\n setVisible(false)}\n onConfirm={goToDetail}\n confirmNameBtn={translate(lang, 'View Detail')}\n >\n \n \n )}\n
\n );\n};\n\nexport default FarmVisualLinesPage;\n","import { ReactNode } from 'react';\nimport { Modal } from 'antd';\nimport Button from '../button/Button';\nimport CloseIcon from '../CloseIcon';\nimport Subtitle from '../subtitle/Subtitle';\nimport { useWidth } from '../../../util/useWidth';\nimport ModalFeedbackView from '../feedback/ModalFeedbackView';\nimport { translate } from '../../../lib/lang.helper';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport './styles.scss';\n\ninterface Props {\n onCancel: () => void;\n onConfirm: () => void;\n onConfirmTwo: () => void;\n className?: string;\n children: ReactNode;\n title: string;\n visible: boolean;\n disabled?: boolean;\n confirmNameBtn?: string | undefined;\n confirmNameBtnTwo?: string | undefined;\n modalWidth?: number | undefined;\n hideCancel?: boolean;\n}\n\nconst InputModalTwo = ({\n visible,\n onCancel,\n onConfirm,\n onConfirmTwo,\n title,\n children,\n disabled,\n className,\n confirmNameBtn,\n confirmNameBtnTwo,\n modalWidth,\n hideCancel = false,\n}: Props) => {\n const width = useWidth();\n const lang = useSelector(selectLang);\n\n return (\n }\n width={modalWidth !== undefined ? modalWidth : 600}\n >\n \n
\n
\n \n {translate(lang, title)}\n \n
\n {children}\n
\n
\n {!hideCancel && (\n \n {translate(lang, 'Cancel')}\n \n )}\n \n {confirmNameBtn || <>{translate(lang, 'Confirm')}}\n \n \n {confirmNameBtnTwo || <>{translate(lang, 'Confirm')}}\n \n
\n \n );\n};\n\nexport default InputModalTwo;\n","import { createSelector } from 'reselect';\nimport { RootState } from '../rootReducer';\n\nexport const selectInventories = createSelector(\n (state: RootState) => state.inventories.inventories,\n inventories => inventories,\n);\n\nexport const selectFloatInventories = createSelector(\n (state: RootState) =>\n state.inventories.inventories.filter(x => x.type === 'FLOAT'),\n inventories => inventories,\n);\n\nexport const selectIvtPositions = createSelector(\n (state: RootState) => state.farms.inventoryPositions,\n pos => pos,\n);\n","import React, { useEffect, useState, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button, Spinner, Title } from '../../components/shared';\nimport {\n loadFarmsData,\n loadInventoryPositions,\n} from '../../store/farms/farms.actions';\nimport { IMusselLineResource } from '../../entities/farms.entities';\nimport { InputModal } from '../../components/shared';\nimport FarmLineInfoModal from '../../components/farm-modals/FarmLineInfoModal';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport { Pagination } from 'antd';\nimport InputModalTwo from '../../components/shared/modal/InputModalTwo';\nimport { sendSingleRequest } from '../../apis';\nimport { hashColor } from '../../entities/util-functions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { IInventoryPosition } from '../../entities/inventory.entities';\nimport FloatManageModal from '../../components/farm-modals/FloatManageModal';\nimport { selectMusselFarms } from '../../store/farms/farms.selector';\nimport { selectUserMeta } from '../../store/auth/auth.selector';\nimport { selectIvtPositions } from '../../store/inventories/inventories.selector';\nimport {\n getLineStatus,\n getLocalFloatsPosition,\n setFarmVisualFloatsPosition,\n setLocalFloatsPosition,\n updateLineColumn,\n updateLinePriority,\n} from '../../lib/farm.helpers';\nimport { TLang } from '../../entities/ui.entities';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport './styles.scss';\n\nconst getMarkedLength = (seed_id: number, inventory_id: number) => {\n const x = localStorage.getItem(\n `visual_farm_marked_length_${seed_id}_${inventory_id}`,\n );\n if (!x) return null;\n return JSON.parse(x);\n};\n\nconst removeMarkedLength = (\n seed_id: number,\n inventory_id: number,\n idx: number,\n) => {\n let tmp = getMarkedLength(seed_id, inventory_id);\n if (!tmp) return;\n tmp = tmp.filter((x: number) => x !== idx);\n if (tmp.length <= 0) {\n localStorage.removeItem(\n `visual_farm_marked_length_${seed_id}_${inventory_id}`,\n );\n } else {\n localStorage.setItem(\n `visual_farm_marked_length_${seed_id}_${inventory_id}`,\n JSON.stringify(tmp),\n );\n }\n};\n\nconst setMarkedLength = (\n seed_id: number,\n inventory_id: number,\n ids: number[],\n) => {\n if (ids.length <= 0) {\n localStorage.removeItem(\n `visual_farm_marked_length_${seed_id}_${inventory_id}`,\n );\n } else {\n localStorage.setItem(\n `visual_farm_marked_length_${seed_id}_${inventory_id}`,\n JSON.stringify(ids),\n );\n }\n};\n\ninterface Props {\n line: IMusselLineResource;\n showModal: (x: any) => void;\n moveColumn: (i: number, c: number) => void;\n moveOrder: (i: number, p: number) => void;\n}\n\nconst LineRowItem = ({ line, showModal, moveColumn, moveOrder }: Props) => {\n const userMeta = useSelector(selectUserMeta);\n const floatsPositions: IInventoryPosition[] | undefined =\n useSelector(selectIvtPositions);\n const [floatsX, setFloatsX] = useState(0);\n const [allowDrag, setAllowDrag] = useState(false);\n\n const handleClick = (evt: React.MouseEvent) => {\n evt.preventDefault();\n evt.stopPropagation();\n showModal(line);\n };\n const handleDragStart = (event: React.DragEvent) => {\n if (!allowDrag) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n setAllowDrag(false);\n event.dataTransfer.setData('farm_id', line.farm_id.toString());\n event.dataTransfer.setData('line_id', line.id.toString());\n event.dataTransfer.setData('col_no', line.col_no.toString());\n };\n const handleDrop = (event: React.DragEvent) => {\n const line_id = parseInt(event.dataTransfer.getData('line_id'));\n const farm_id = parseInt(event.dataTransfer.getData('farm_id'));\n const col_no = parseInt(event.dataTransfer.getData('col_no'));\n\n if (farm_id === line.farm_id && line_id !== line.id) {\n if (col_no !== parseInt(line.col_no.toString())) {\n moveColumn(line_id, parseInt(line.col_no.toString()));\n }\n moveOrder(line_id, line.id);\n } else {\n const zeroX = (event.target as any)?.getBoundingClientRect()?.left ?? 0;\n const floatTypeId = parseInt(event.dataTransfer.getData('float_type_id'));\n const floatId = parseInt(event.dataTransfer.getData('float_id'));\n const clientX = parseFloat(event.dataTransfer.getData('float_init_x'));\n if (isNaN(floatTypeId) || isNaN(floatId) || isNaN(clientX)) return;\n if (!line.growing_cycle) return;\n\n const seedingId = line.growing_cycle.main_seed.id;\n let positions = getLocalFloatsPosition(seedingId, floatTypeId);\n if (!positions || positions.length <= floatId) return;\n\n positions[floatId] =\n (Math.max(2, positions[floatId]) / (clientX - zeroX)) *\n (event.clientX - zeroX);\n positions[floatId] = Math.min(100, positions[floatId]);\n positions[floatId] = Math.max(2, positions[floatId]);\n\n setLocalFloatsPosition(seedingId, floatTypeId, positions);\n setFarmVisualFloatsPosition(seedingId, floatTypeId, positions).then();\n setFloatsX(floatsX + 1);\n }\n event.dataTransfer.clearData();\n };\n const lineStatus = getLineStatus(line, userMeta?.line_assess_expire_days);\n const color = `--${lineStatus.toLowerCase()}`;\n\n const floats = useMemo(() => {\n if (!line.growing_cycle?.inventories_sum) return [];\n let floats = [];\n const seedID = line.growing_cycle.main_seed.id;\n for (let x of line.growing_cycle.inventories_sum) {\n const colCode = hashColor(x.inventory_name);\n let positions: any = getLocalFloatsPosition(seedID, x.inventory_id);\n let flag = false;\n\n if (!positions) {\n positions = [...Array(x.quantity).keys()].map(\n i => (i / (x.quantity - 1)) * 98 + 2,\n );\n flag = true;\n } else if (positions.length > x.quantity) {\n positions = positions.slice(0, x.quantity);\n flag = true;\n } else if (positions.length < x.quantity) {\n const tps = [...Array(x.quantity - positions.length).keys()].map(\n i => ((i + positions.length) / (x.quantity - 1)) * 98 + 2,\n );\n const ids = [...Array(x.quantity - positions.length).keys()].map(\n i => i + positions.length,\n );\n setMarkedLength(seedID, x.inventory_id, ids);\n positions.push(...tps);\n flag = true;\n }\n if (flag) {\n setLocalFloatsPosition(seedID, x.inventory_id, positions);\n setFarmVisualFloatsPosition(\n seedID,\n x.inventory_id,\n positions,\n true,\n ).then();\n setFloatsX(floatsX + 1);\n }\n const old_len = getMarkedLength(seedID, x.inventory_id) ?? [];\n\n floats.push({\n id: x.inventory_id,\n quantity: x.quantity,\n color: colCode,\n positions,\n old_len,\n });\n }\n return floats;\n }, [line.growing_cycle]);\n\n const handleDragStartPoint = (\n c: any,\n j: number,\n event: React.DragEvent,\n ) => {\n removeMarkedLength(line.growing_cycle?.main_seed.id ?? 0, c.id, j);\n event.stopPropagation();\n event.dataTransfer.setData('float_type_id', c.id);\n event.dataTransfer.setData('float_id', j.toString());\n event.dataTransfer.setData('float_init_x', event.clientX.toString());\n };\n const handleDragOverPoint = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const handleClickFloatsPoint = (\n c: any,\n j: number,\n event: React.MouseEvent,\n ) => {\n removeMarkedLength(line.growing_cycle?.main_seed.id ?? 0, c.id, j);\n setFloatsX(floatsX + 1);\n };\n\n useEffect(() => {\n if (line.growing_cycle) {\n for (let x of line.growing_cycle.inventories_sum) {\n const r = floatsPositions?.find(\n y =>\n y.seeding_id === line.growing_cycle?.main_seed.id &&\n y.inventory_id === x.inventory_id,\n );\n if (r && line.growing_cycle.main_seed) {\n setLocalFloatsPosition(\n line.growing_cycle.main_seed.id,\n x.inventory_id,\n r?.points ?? [],\n );\n setFloatsX(floatsX + 1);\n }\n }\n }\n\n return () => {};\n }, [line.growing_cycle]);\n\n return (\n \n setAllowDrag(true)}\n >\n {line.line_name}\n \n {floats.map((c, i) => (\n
\n {[...Array(c.quantity).keys()].map(j => (\n \n
\n \n \n ))}\n \n ))}\n
\n
\n
\n \n );\n};\n\nconst NewColumn: React.FC<{ moveColumn: (i: number, g: number) => void }> = ({\n moveColumn,\n}) => {\n const onDragOverEvent = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const onDropEvent = (event: React.DragEvent) => {\n const line_id = parseInt(event.dataTransfer.getData('line_id'));\n moveColumn(line_id, -1);\n };\n\n return (\n \n Drop Here\n \n );\n};\n\nconst FarmVisualItem: React.FC<{\n farm: any;\n showLineModal: (x: any) => void;\n goToFarm: (x: any) => void;\n moveColumn: (i: number, c: number) => void;\n moveOrder: (i: number, p: number) => void;\n lang: TLang | undefined;\n}> = ({ farm, showLineModal, goToFarm, moveColumn, moveOrder, lang }) => {\n const [onCol, setOnCol] = useState(null);\n\n const viewClickHandle = (\n evt: React.MouseEvent,\n ) => {\n evt.preventDefault();\n evt.stopPropagation();\n goToFarm(farm);\n };\n const filterLineColumns = () => {\n const lines = farm.lines;\n let result: any = [];\n lines.sort((a: any, b: any) => a.col_no - b.col_no);\n let g = -1,\n p = -1;\n for (let i in lines) {\n if (lines[i].col_no > p) {\n g++;\n p = lines[i].col_no;\n }\n if (!result[g]) result[g] = [];\n result[g].push(lines[i]);\n }\n for (let i in result) {\n result[i].sort((a: any, b: any) => b.priority - a.priority);\n }\n return result;\n };\n const handleDragOver = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if ((event.target as any).classList.contains('floats-dot')) return;\n\n let element: any = null;\n for (\n element = event.target;\n !element.classList.contains('line-column');\n element = element.parentNode\n );\n const colNo = element.getAttribute('col-id');\n setOnCol(colNo);\n };\n const handleDragLeave = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n setOnCol(null);\n };\n const handleDrop = (event: React.DragEvent) => {\n setOnCol(null);\n\n let element: any = null;\n for (\n element = event.target;\n !element.classList.contains('line-column');\n element = element.parentNode\n );\n const targetColNo = parseInt(element.getAttribute('col-no'));\n\n const farmId = parseInt(event.dataTransfer.getData('farm_id'));\n const lineId = parseInt(event.dataTransfer.getData('line_id'));\n const colNo = parseInt(event.dataTransfer.getData('col_no'));\n if (farmId !== farm.id) return;\n if (!isNaN(targetColNo) && colNo !== targetColNo) {\n moveColumn(lineId, targetColNo);\n }\n };\n\n return (\n
\n
{farm.name}
\n
\n {filterLineColumns().map((lineColumn: any, idx: number) => (\n \n
{String.fromCharCode(65 + idx)}
\n {lineColumn.map((line: any) => (\n \n ))}\n
\n ))}\n \n
\n
\n \n {translate(lang, 'View Detail')}\n \n
\n \n );\n};\n\nconst VisualFarmsPage = () => {\n const dispatch = useDispatch();\n const { redirectToLine, redirectToFarm } = useMenuHandler();\n const farmsData = useSelector(selectMusselFarms);\n const lang = useSelector(selectLang);\n\n const [selectedLine, setSelectedLine] = useState();\n const [lineVisible, setLineVisible] = useState(false);\n const pageSize = 20;\n const [curPage, setCurPage] = useState(farmsData.length > 0 ? 1 : 0);\n const [loading, setLoading] = useState(false);\n const [visibleIvtModal, setVisibleIvtModal] = useState(false);\n\n const goToLineDetail = () => {\n if (!selectedLine) return;\n redirectToLine(selectedLine.farm_id.toString(), selectedLine.id.toString());\n };\n const showLineModal = (data: any) => {\n setLineVisible(true);\n setSelectedLine(data);\n };\n const goToFarmDetail = (farm: any) => {\n redirectToFarm(farm.id);\n };\n const handlePageChange = (page: number, pageSize: number | undefined) => {\n setCurPage(page);\n };\n const moveColumn = (lineId: number, colNo: number) => {\n setLoading(true);\n const finish = () => {\n setLoading(false);\n dispatch(loadFarmsData());\n };\n updateLineColumn(lineId, colNo).then(finish).catch(finish);\n };\n const moveOrder = (lineId: number, position: number) => {\n setLoading(true);\n const finish = () => {\n setLoading(false);\n dispatch(loadFarmsData());\n };\n updateLinePriority(lineId, position).then(finish).catch(finish);\n };\n const confirmInventorySeed = (form: any) => {\n if (!selectedLine || !selectedLine.growing_cycle) return;\n sendSingleRequest(\n form,\n 'POST',\n `api/farm/line/seed/inventory-seeds/${selectedLine.growing_cycle.main_seed.id}`,\n true,\n ).then(r => {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(\n lang,\n r.data?.message ?? 'Floats added successfully',\n ),\n }),\n );\n dispatch(loadFarmsData()).then(() => {\n setVisibleIvtModal(false);\n });\n });\n };\n\n useEffect(() => dispatch(loadInventoryPositions()), [dispatch]);\n\n return (\n
\n
\n {loading && (\n
\n \n
\n )}\n
\n
\n \n {translate(lang, 'Farms (Visual)')}\n \n
\n
\n {farmsData\n .filter(\n (x, i) =>\n i >= pageSize * (curPage - 1) && i < pageSize * curPage,\n )\n .map(item => (\n \n ))}\n
\n \n
\n
\n
\n
\n
\n \n {translate(lang, 'Legend')}\n \n
\n
\n
{translate(lang, 'Empty')}
\n
\n
\n
\n
\n {translate(lang, 'Ready to harvest')}\n
\n
\n
\n
\n
\n {translate(lang, 'Requires assessment')}\n
\n
\n
\n
\n
\n {translate(lang, 'Catch spat')}\n
\n
\n
\n
\n
\n {translate(lang, 'Growing mussel')}\n
\n
\n
\n
\n
\n
\n
\n {lineVisible &&\n selectedLine &&\n (selectedLine.growing_cycle ? (\n setLineVisible(false)}\n onConfirm={goToLineDetail}\n confirmNameBtn={translate(lang, 'View Detail')}\n onConfirmTwo={() => {\n setVisibleIvtModal(true);\n setLineVisible(false);\n }}\n confirmNameBtnTwo={translate(lang, 'Manage Floats')}\n hideCancel={true}\n >\n \n \n ) : (\n setLineVisible(false)}\n onConfirm={goToLineDetail}\n confirmNameBtn={translate(lang, 'View Detail')}\n >\n \n \n ))}\n {visibleIvtModal && selectedLine?.growing_cycle && (\n setVisibleIvtModal(false)}\n onConfirm={() => {}}\n lineData={selectedLine}\n overConfirm={confirmInventorySeed}\n />\n )}\n
\n );\n};\n\nexport default VisualFarmsPage;\n","import { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Switch, Route } from 'react-router-dom';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport Farms from './Farms';\nimport Farm from './Farm';\nimport FarmLine from '../FarmLine/FarmLine';\nimport AddLines from '../Lines/AddLines';\nimport FarmsForm from './FarmsForm';\nimport FarmVisualLinesPage from './FarmVisualLinesPage';\nimport VisualFarmsPage from './VisualFarmsPage';\n\nconst FarmsRouter = () => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(loadFarmsData());\n }, [dispatch]);\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n};\n\nexport default FarmsRouter;\n","import { Button, Paragrapgh, Title } from '../../components/shared';\n\nconst notifications = [\n {\n title: 'System Notification',\n text: 'Amet minim mollit non deserunt ullamco est sit aliqua dolor do amet sint. Velit officia consequat duis enim velit mollit. Exercitation veniam consequat sunt nostrud amet.',\n date: '02.11.2020',\n },\n {\n title: 'System Notification',\n text: 'Amet minim mollit non deserunt ullamco est sit aliqua dolor do amet sint. Velit officia consequat duis enim velit mollit. Exercitation veniam consequat sunt nostrud amet.',\n date: '02.11.2020',\n },\n {\n title: 'System Notification',\n text: 'Amet minim mollit non deserunt ullamco est sit aliqua dolor do amet sint. Velit officia consequat duis enim velit mollit. Exercitation veniam consequat sunt nostrud amet.',\n date: '02.11.2020',\n },\n {\n title: 'System Notification',\n text: 'Amet minim mollit non deserunt ullamco est sit aliqua dolor do amet sint. Velit officia consequat duis enim velit mollit. Exercitation veniam consequat sunt nostrud amet.',\n date: '02.11.2020',\n },\n];\n\nconst Notifications = () => (\n <>\n
\n
\n
\n
\n \n Notification\n \n \n Clear history\n \n
\n {notifications &&\n notifications.map(notification => (\n
\n \n {notification.title}\n \n \n {notification.text}\n \n \n {notification.date}\n \n
\n ))}\n
\n
\n
\n \n);\n\nexport default Notifications;\n","import { createSelector } from 'reselect';\nimport { RootState } from '../rootReducer';\n\nexport const selectCustomFields = createSelector(\n (state: RootState) => state.automation.customFields,\n fields => fields,\n);\n\nexport const selectTags = createSelector(\n (state: RootState) => state.automation.tags,\n tags => tags,\n);\n\nexport const selectAssessmentFields = createSelector(\n (state: RootState) => state.automation.customFields,\n fields => fields.filter(x => x.type === 'ASSESSMENT'),\n);\n\nexport const selectAutomations = createSelector(\n (state: RootState) => state.automation.automationsData,\n automations => automations.filter(x => x.type !== 'REPORT'),\n);\n\nexport const selectAutoReports = createSelector(\n (state: RootState) => state.automation.automationsData,\n reports => reports.filter(x => x.type === 'REPORT'),\n);\n","import { useSelector } from 'react-redux';\nimport { Paragrapgh } from '../shared';\nimport DropdownMenu from '../shared/dropdown-menu/DropdownMenu';\nimport { IAutomation, ITagSchedule } from '../../entities/automation.entities';\nimport { checkRolePermission } from '../../entities/util-functions';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectTags } from '../../store/automation/automation.selector';\n\nconst timeLabel = (t: number, unit: string) =>\n t === 0\n ? `At the time`\n : t < 0\n ? `${-t} ${unit}(s) Before`\n : `${t} ${unit}(s) After`;\n\ninterface Props {\n data: IAutomation | ITagSchedule;\n handleOnEdit: (data: any, col?: string | undefined) => void;\n onDeleteRow: (data: any) => void;\n}\n\nconst MobileAutomation = ({ data, handleOnEdit, onDeleteRow }: Props) => {\n const profile = useSelector(selectProfile);\n const lang = useSelector(selectLang);\n const tags = useSelector(selectTags);\n const tagSchedule = data as ITagSchedule;\n const automation = data as IAutomation;\n\n const checkPermission = () => {\n if (\n checkRolePermission({ allowedRoles: ['owner', 'admin'] }, profile?.role)\n ) {\n return 1;\n }\n if (profile?.id === data.creator_id || profile?.id === data.assigned_to) {\n return 1;\n }\n return 0;\n };\n\n return (\n
\n {checkPermission() && (\n
\n \n
\n )}\n {data.type === 'TAG_SCHEDULE' ? (\n
\n \n {`Tag ${tags?.find(x => x.id === tagSchedule.tag_id)?.name} to ${\n tagSchedule.lines && tagSchedule.lines.length > 0\n ? `${tagSchedule.lines.length} line(s)`\n : `${tagSchedule.farms.length} farm(s)`\n } after ${tagSchedule.time} ${tagSchedule.unit}`}\n \n
\n ) : (\n <>\n
\n
\n \n {translate(lang, 'Action')}\n \n
\n
\n {automation.type === 'Assessment' ? (\n <>\n \n {translate(lang, 'If Assessment Is Created Then')}\n \n {timeLabel(automation.time, automation.unit)}\n \n ) : automation.type === 'Seeding' ? (\n <>\n \n {translate(lang, 'If Seed is planted on a line Then')}\n \n {timeLabel(automation.time, automation.unit)}\n \n ) : automation.type === 'Harvesting' ? (\n <>\n \n {translate(lang, 'If Harvest is completed Then')}\n \n {timeLabel(automation.time, automation.unit)}\n \n ) : (\n {`Every ${automation.time} ${automation.unit}(s)`}\n )}\n
\n
\n
\n
\n
\n
\n \n {translate(lang, 'Outcome')}\n \n
\n
\n {translate(lang, 'Create task')}\n
\n \n
\n {translate(lang, 'Title')}:\n {automation.title}\n
\n
\n {translate(lang, 'Description')}:\n \n {automation.description.length >= 70\n ? `${automation.description.slice(0, 70)}...`\n : automation.description}\n \n
\n
\n
\n
\n
\n \n )}\n \n );\n};\n\nexport default MobileAutomation;\n","import { Collapse } from 'antd';\nimport MobileAutomation from './MobileAutomation';\nimport { Caret, Paragrapgh } from '../shared';\nimport { IAutomation, ITagSchedule } from '../../entities/automation.entities';\nimport { randomKey } from '../../lib/common.helpers';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n data: Array;\n handleOnEdit: (data: IAutomation, col?: string | undefined) => void;\n onDeleteRow: (data: IAutomation) => void;\n}\n\nconst MobileAutomationTable = ({ data, handleOnEdit, onDeleteRow }: Props) => {\n const lang = useSelector(selectLang);\n\n return (\n
\n {data.length > 0 ? (\n <>\n (\n
\n \n
\n )}\n >\n {data.map(automation => (\n
\n {automation ? (\n \n ) : (\n
\n \n {translate(lang, 'No data available')}\n \n
\n )}\n
\n ))}\n \n \n ) : (\n
\n \n {translate(lang, 'No data available')}\n \n
\n )}\n
\n );\n};\n\nexport default MobileAutomationTable;\n","import { Table } from 'antd';\nimport classNames from 'classnames';\nimport { useSelector } from 'react-redux';\nimport MobileAutomationTable from './MobileAutomationTable';\nimport DropdownMenu from '../shared/dropdown-menu/DropdownMenu';\nimport { useWidth } from '../../util/useWidth';\nimport {\n IAutomation,\n ITag,\n ITagSchedule,\n} from '../../entities/automation.entities';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectTags } from '../../store/automation/automation.selector';\nimport './styles.scss';\n\nconst timeLabel = (t: number, unit: string) =>\n t === 0\n ? `At the time`\n : t < 0\n ? `${-t} ${unit}(s) Before`\n : `${t} ${unit}(s) After`;\n\nconst columns = (lang: any, tags: ITag[]): any[] => [\n {\n title: '',\n dataIndex: 'id',\n key: 'id',\n render: (id: number) => {id},\n },\n {\n title: 'Where',\n key: 'line',\n render: (x: IAutomation | ITagSchedule) => {\n if (x.type === 'TAG_SCHEDULE') {\n const t = x as ITagSchedule;\n return (\n \n {t.lines && t.lines.length > 0\n ? `On ${t.lines.length} lines`\n : `On ${t.farms.length} farms`}\n \n );\n }\n const d = x as IAutomation;\n if (!d.farm && !d.line) {\n return {'On every line'};\n }\n return (\n \n {!!d.farm && {d.farm.name}}\n {!!d.line && {d.line.line_name}}\n \n );\n },\n },\n {\n title: 'Action',\n key: 'action',\n render: (d: IAutomation | ITagSchedule) =>\n d.type === 'Assessment' ? (\n <>\n \n {translate(lang, 'If Assessment Is Created Then')}\n \n {timeLabel(d.time, d.unit)}\n \n ) : d.type === 'Seeding' ? (\n <>\n \n {translate(lang, 'If Seed is planted Then')}\n \n {timeLabel(d.time, d.unit)}\n \n ) : d.type === 'Harvesting' ? (\n <>\n \n {translate(lang, 'If Harvest is completed Then')}\n \n {timeLabel(d.time, d.unit)}\n \n ) : d.type === 'TAG_SCHEDULE' ? (\n {timeLabel(d.time, d.unit)}\n ) : (\n {`${translate(lang, 'Every')} ${d.time} ${d.unit}(s)`}\n ),\n },\n {\n title: 'Outcome',\n key: 'outcome',\n render: (data: IAutomation | ITagSchedule) => {\n const d = data as IAutomation;\n const t = data as ITagSchedule;\n\n return data.type === 'TAG_SCHEDULE' ? (\n
\n {`Tag ${tags?.find(x => x.id === t.tag_id)?.name} to ${\n t.lines && t.lines.length > 0\n ? `${t.lines.length} line(s)`\n : `${t.farms.length} farm(s)`\n }`}\n
\n ) : (\n
\n
\n {translate(lang, 'Create task')}\n
\n \n
\n {translate(lang, 'Title')}:\n {d.title}\n
\n
\n {translate(lang, 'Description')}:\n \n {d.description.length >= 70\n ? `${d.description.slice(0, 70)}...`\n : d.description}\n \n
\n
\n \n );\n },\n },\n];\n\ninterface Props {\n data: IAutomation[];\n isTableChild?: boolean;\n onEdit: (d: any) => void;\n onDelete: (d: any) => void;\n}\n\nconst AutomationTable = ({ data, isTableChild, onEdit, onDelete }: Props) => {\n const width = useWidth();\n const profile = useSelector(selectProfile);\n const lang = useSelector(selectLang);\n const tags = useSelector(selectTags);\n\n const checkPermission = (d: IAutomation) => {\n if (profile?.role === 'admin' || profile?.role === 'owner') {\n return 1;\n }\n if (profile?.id === d.creator_id || profile?.id === d.assigned_to) {\n return 1;\n }\n return 0;\n };\n const editField = {\n title: '',\n key: 'more',\n align: 'right',\n render: (d: any) =>\n checkPermission(d) ? (\n <>\n \n \n ) : (\n <>\n ),\n };\n\n return (\n <>\n {width > 820 ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport default AutomationTable;\n","import { useEffect, useState } from 'react';\nimport { Modal } from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { IAutomation } from '../../entities/automation.entities';\nimport { Button, CloseIcon, Dropdown, Input, Subtitle } from '../shared';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { sendSingleRequest } from '../../apis';\nimport { loadAutomationData } from '../../store/automation/automation.actions';\nimport { selectBoats } from '../../store/users/users.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\n\ninterface IFormData {\n type: 'Seeding' | 'Harvesting' | 'Assessment' | 'Regular';\n time: number;\n unit: 'hour' | 'day' | 'week' | 'month';\n assigned_boat_id: number | null;\n title: string;\n description: string;\n condition?: 'FULL' | 'PARTIAL' | null;\n farm_id?: number;\n line_id?: number;\n}\n\nconst defaultForm: IFormData = {\n type: 'Seeding',\n time: 0,\n unit: 'day',\n assigned_boat_id: null,\n title: '',\n description: '',\n condition: undefined,\n};\n\nconst typeList = ['Seeding', 'Harvesting', 'Assessment', 'Regular'];\nconst units = ['hour', 'day', 'week', 'month'];\n\ninterface Props {\n visible: boolean;\n data?: IAutomation;\n editId?: number;\n onCancel: () => void;\n onConfirm: (d: any) => void;\n onSelectTag: () => void;\n}\n\nconst AutomationModal = ({\n visible,\n editId,\n data,\n onCancel,\n onConfirm,\n onSelectTag,\n}: Props) => {\n const dispatch = useDispatch();\n const boats = useSelector(selectBoats);\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n\n const [disabled, setDisabled] = useState(false);\n const [formData, setFormData] = useState(defaultForm);\n\n const updateForm = (key: keyof IFormData, val: any) => {\n if (key === 'type' && val === 'Tag Schedule') {\n onSelectTag();\n } else {\n if (key === 'assigned_boat_id' && val === 0) {\n val = null;\n }\n setFormData(prv => ({ ...prv, [key]: val }));\n }\n };\n const updateCondition = (val: 'FULL' | 'PARTIAL' | 'A') => {\n setFormData(prv => ({ ...prv, condition: val === 'A' ? undefined : val }));\n };\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message,\n }),\n );\n const validData = () => {\n let result = { ...formData };\n if (result.type === 'Regular' && result.time <= 0) {\n showError('If type is Regular, the time should be greater than zero');\n return null;\n }\n if (result.title.length <= 0) {\n showError('Title should not be empty');\n return null;\n }\n if (result.description.length <= 0) {\n showError('Description should not be empty');\n return null;\n }\n if (result.type !== 'Harvesting') {\n result.condition = undefined;\n }\n return result;\n };\n const confirmClick = async () => {\n const form = validData();\n if (!form) return;\n setDisabled(true);\n const resp = !editId\n ? await sendSingleRequest(\n form,\n 'POST',\n 'api/automation/automations',\n true,\n )\n : await sendSingleRequest(\n form,\n 'PUT',\n `api/automation/automations/${editId}`,\n true,\n );\n setDisabled(false);\n if (resp.status) {\n dispatch(\n showFeedback({ type: 'success', message: 'Success', isMessage: true }),\n );\n dispatch(loadAutomationData());\n onConfirm(resp.data);\n } else {\n showError(resp.data?.message ?? 'Failed to submit');\n }\n };\n const types = editId ? typeList : [...typeList, 'Tag Schedule'];\n\n useEffect(() => {\n if (data) {\n let tmp: any = { ...defaultForm };\n for (let k in tmp) {\n if ((data as any)[k]) tmp[k] = (data as any)[k];\n }\n if (data.farm) {\n tmp.farm_id = data.farm.id;\n }\n if (data.line) {\n tmp.line_id = data.line.id;\n }\n setFormData(tmp);\n }\n }, [data]);\n\n return (\n }\n >\n
\n
\n \n {translate(lang, !editId ? 'Add Automation' : 'Edit Automation')}\n \n
\n
\n updateForm('type', v)}\n label={translate(lang, 'Type')}\n options={types.map(x => ({\n id: x,\n label: translate(lang, x),\n value: x,\n }))}\n value={formData.type}\n />\n {formData.type === 'Harvesting' ? (\n <>\n
\n
\n updateForm('time', Number(e.target.value))}\n className='w-100'\n value={formData.time.toString()}\n min={0}\n />\n
\n
\n updateForm('unit', v)}\n options={units.map(x => ({\n id: x,\n label: translate(lang, x),\n value: x,\n }))}\n value={formData.unit}\n />\n
\n
\n
\n updateCondition(v as any)}\n />\n
\n \n ) : (\n <>\n
\n
\n updateForm('time', Number(e.target.value))}\n className='w-100'\n value={formData.time.toString()}\n min={0}\n />\n
\n
\n updateForm('unit', v)}\n options={units.map(x => ({\n id: x,\n label: translate(lang, x),\n value: x,\n }))}\n value={translate(lang, formData.unit)}\n />\n
\n
\n \n )}\n updateForm('assigned_boat_id', Number(v))}\n options={[\n {\n value: '0',\n id: '0',\n label: ` -- ${translate(lang, 'No Boat')} -- `,\n },\n ...boats.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.reg_number}`,\n })),\n ]}\n />\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n }))}\n onChange={v => {\n updateForm('farm_id', Number(v));\n updateForm('line_id', undefined);\n }}\n />\n {!!formData.farm_id && (\n x.id === formData.farm_id)\n ?.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n })) ?? []\n }\n onChange={v => updateForm('line_id', Number(v))}\n />\n )}\n updateForm('title', e.target.value)}\n className='mr-16 w-100 mb-24'\n value={formData.title}\n />\n updateForm('description', e.target.value)}\n className='mr-16 w-100 mb-24'\n value={formData.description}\n />\n
\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n \n );\n};\n\nexport default AutomationModal;\n","import { useState } from 'react';\nimport { Modal } from 'antd';\nimport { Button, CloseIcon, Dropdown, Input, Subtitle } from '../shared';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { isEmailFormat } from '../../util/validation';\nimport { sendSingleRequest } from '../../apis';\nimport { loadAutomationData } from '../../store/automation/automation.actions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst periods = [\n { id: 't', value: 'today', label: 'Today' },\n { id: '7', value: 'last_7', label: 'Last 7 days' },\n { id: '30', value: 'last_30', label: 'Last 30 days' },\n { id: 'm', value: 'last_month', label: 'Last month' },\n { id: 'y', value: 'last_year', label: 'Last year' },\n];\n\nconst types = [\n { id: 'f', value: 'farm', label: 'Farm Overview' },\n { id: 't', value: 'task', label: 'Task Report' },\n { id: 's', value: 'seeding', label: 'Seeding Report' },\n { id: 'h', value: 'harvest', label: 'Harvest Report' },\n { id: 'a', value: 'assessment', label: 'Assessment Report' },\n { id: 'b', value: 'budget', label: 'Budget Report' },\n { id: 'n', value: 'spat_nursery', label: 'Spat Nursery Report' },\n];\n\nconst freOptions = [\n { id: '1', value: '1', label: 'Daily' },\n { id: '7', value: '7', label: 'Weekly' },\n];\n\ninterface IFormData {\n title: string;\n description: string;\n frequency: number;\n period: 'today' | 'last_7' | 'last_30' | 'last_month' | 'last_year';\n report_type:\n | 'farm'\n | 'task'\n | 'seeding'\n | 'harvest'\n | 'assessment'\n | 'budget'\n | 'spat_nursery';\n emails: string;\n}\n\nconst defaultForm: IFormData = {\n title: '',\n description: '',\n period: 'today',\n frequency: 1,\n report_type: 'farm',\n emails: '',\n};\n\ninterface Props {\n title?: string;\n visible: boolean;\n onClose: () => void;\n}\n\nconst AutoReportModal = ({ title, visible, onClose }: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [formData, setFormData] = useState(defaultForm);\n\n const updateForm = (key: keyof IFormData, val: any) => {\n setFormData({ ...formData, [key]: val });\n };\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n\n const confirmClick = async () => {\n if (!formData.emails) {\n showError('You should enter at least one email');\n return;\n }\n if (formData.emails.split(',').some(x => !isEmailFormat(x))) {\n showError('_invalid_emails');\n return;\n }\n setDisabled(true);\n const response = await sendSingleRequest(\n {\n ...formData,\n emails: formData.emails.split(','),\n },\n 'POST',\n 'api/automation/report',\n true,\n );\n if (response.status) {\n await dispatch(loadAutomationData());\n dispatch(\n showFeedback({\n isMessage: true,\n message: response.data?.message ?? 'Success',\n type: 'success',\n }),\n );\n onClose();\n } else {\n setDisabled(false);\n showError(response.data?.message ?? 'Unknown error');\n }\n };\n\n return (\n }\n >\n
\n
\n \n {translate(lang, title ?? 'Automate report sending')}\n \n
\n
\n updateForm('emails', e.target.value)}\n />\n
\n
\n
\n updateForm('report_type', v)}\n />\n
\n
\n updateForm('frequency', Number(v))}\n />\n
\n
\n updateForm('period', v)}\n />\n
\n
\n updateForm('title', e.target.value)}\n />\n
\n
\n updateForm('description', e.target.value)}\n />\n
\n
\n
\n
\n \n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n \n \n );\n};\n\nexport default AutoReportModal;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { selectTags } from '../../store/automation/automation.selector';\nimport { Modal } from 'antd';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Dropdown,\n Input,\n Subtitle,\n} from '../shared';\nimport { useState } from 'react';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { sendSingleRequest } from '../../apis';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { loadAutomationData } from '../../store/automation/automation.actions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst units = ['hour', 'day', 'week', 'month'];\n\ninterface IForm {\n id?: number;\n time: number;\n unit: 'hour' | 'day' | 'week' | 'month';\n tag_id: number | undefined;\n farms: number[];\n lines?: number[];\n is_from_last?: boolean;\n}\n\nconst defaultForm: IForm = {\n time: 0,\n unit: 'day',\n tag_id: undefined,\n farms: [],\n};\n\ninterface Props {\n visible: boolean;\n data?: any;\n updateID?: number;\n onClose: (d: any) => void;\n}\n\nconst TagScheduleModal = ({ visible, data, updateID, onClose }: Props) => {\n const dispatch = useDispatch();\n const tags = useSelector(selectTags)?.filter(x => x.is_urgent) ?? [];\n const farmsData = useSelector(selectFarmsData);\n const lang = useSelector(selectLang);\n\n const [form, setForm] = useState(\n data ? { ...data, id: undefined } : defaultForm,\n );\n const [disabled, setDisabled] = useState(false);\n\n const updateForm = (key: keyof IForm, value: any) => {\n setForm(prev => ({ ...prev, [key]: value }));\n };\n const showError = (msg: string) =>\n dispatch(\n showFeedback({\n message: msg,\n type: 'error',\n isMessageModal: true,\n }),\n );\n const confirmClick = async () => {\n let submitData = { ...form };\n if (!submitData.tag_id) {\n showError(translate(lang, 'Please select a tag'));\n return;\n }\n if (!submitData.farms || submitData.farms.length <= 0) {\n showError(translate(lang, 'Please select at least one farm'));\n return;\n }\n if (updateID) {\n submitData.id = updateID;\n }\n setDisabled(true);\n const res = await sendSingleRequest(\n submitData,\n 'POST',\n 'api/automation/tag_schedule',\n true,\n );\n if (res.status) {\n await dispatch(loadAutomationData());\n setDisabled(false);\n onClose(res.data);\n } else {\n setDisabled(false);\n showError(translate(lang, res.data?.message ?? 'Unknown error'));\n }\n };\n\n const linesOption = () => {\n const farms = farmsData.filter(x => form.farms.includes(x.id));\n let result: Array<{ id: string; value: string; label: string }> = [];\n for (const f of farms) {\n for (const l of f.lines) {\n result.push({\n id: l.id.toString(),\n value: l.id.toString(),\n label: `${f.name} - ${l.line_name}`,\n });\n }\n }\n return result;\n };\n\n return (\n }\n >\n
\n
\n \n {translate(\n lang,\n !updateID ? 'Add Tag Schedule' : 'Edit Tag Schedule',\n )}\n \n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n }))}\n value={form.tag_id?.toString()}\n onChange={v => updateForm('tag_id', Number(v))}\n />\n
\n
\n
\n updateForm('time', Number(e.target.value))}\n className='w-100'\n value={form.time.toString()}\n min={0}\n />\n
\n
\n updateForm('unit', v)}\n options={units.map(x => ({ id: x, label: x, value: x }))}\n value={form.unit}\n />\n
\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n }))}\n value={form.farms.map(x => x.toString()) as any}\n onChange={(v: any) =>\n updateForm(\n 'farms',\n v.map((x: string) => Number(x)),\n )\n }\n />\n
\n
\n x.toString()) ?? undefined) as any}\n onChange={(v: any) =>\n updateForm(\n 'lines',\n v.map((x: string) => Number(x)),\n )\n }\n />\n
\n
\n updateForm('is_from_last', e.target.checked)}\n />\n
\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n \n );\n};\n\nexport default TagScheduleModal;\n","import { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n Button,\n PlusIcon,\n Title,\n Spinner,\n ModalComponent,\n} from '../../components/shared';\nimport AutomationTable from '../../components/automation/AutomationTable';\nimport {\n loadAutomationData,\n removeAutomation,\n} from '../../store/automation/automation.actions';\nimport { useWidth } from '../../util/useWidth';\nimport { loadUserBoats } from '../../store/users/users.actions';\nimport { IAutomation } from '../../entities/automation.entities';\nimport AutomationModal from '../../components/automation/AutomationModal';\nimport AutoReportModal from '../../components/todo/AutoReportModal';\nimport { Table } from 'antd';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectLang, selectSpin } from '../../store/ui/ui.selector';\nimport {\n selectAutomations,\n selectAutoReports,\n} from '../../store/automation/automation.selector';\nimport { translate } from '../../lib/lang.helper';\nimport TagScheduleModal from '../../components/automation/TagScheduleModal';\n\nconst periods = [\n { value: 'today', label: 'Today' },\n { value: 'last_7', label: 'Last 7 days' },\n { value: 'last_30', label: 'Last 30 days' },\n { value: 'last_month', label: 'Last month' },\n { value: 'last_year', label: 'Last year' },\n];\n\nconst types = [\n { value: 'farm', label: 'Farm Overview' },\n { value: 'task', label: 'Task Report' },\n { value: 'seeding', label: 'Seeding Report' },\n { value: 'harvest', label: 'Harvest Report' },\n { value: 'assessment', label: 'Assessment Report' },\n { value: 'budget', label: 'Budget Report' },\n];\n\nconst reportColumns = [\n {\n key: 'receivers',\n title: 'Receivers',\n render: (x: IAutomation) => {x.action},\n },\n {\n key: 'frequency',\n title: 'Frequency',\n render: (x: IAutomation) => (\n \n {x.time === 1\n ? 'Daily'\n : x.time === 7\n ? 'Weekly'\n : `Every ${x.time} days`}\n \n ),\n },\n {\n key: 'period',\n title: 'Period',\n render: (x: IAutomation) => (\n {periods.find(y => y.value === x.unit)?.label}\n ),\n },\n {\n key: 'report_type',\n title: 'Type',\n render: (x: IAutomation) => (\n {types.find(y => y.value === x.condition)?.label}\n ),\n },\n {\n key: 'title',\n title: 'Title',\n render: (x: IAutomation) => {x.title},\n },\n {\n key: 'comment',\n title: 'Comment',\n render: (x: IAutomation) => {x.description},\n },\n];\n\nconst AutomationPage = () => {\n const dispatch = useDispatch();\n const width = useWidth();\n\n const lang = useSelector(selectLang);\n const profile = useSelector(selectProfile);\n const isSpinner = useSelector(selectSpin);\n const automations = useSelector(selectAutomations);\n const autoReports = useSelector(selectAutoReports);\n const isEditable = profile?.edit_permission;\n\n const [autoData, setAutoData] = useState();\n const [visAuto, setVisAuto] = useState(false);\n const [deleteAutomation, setDeleteAutomation] = useState(false);\n const [autoId, setAutoId] = useState(0);\n const [showReport, setShowReport] = useState(false);\n const [isTagType, setIsTagType] = useState(false);\n\n const showAutomationAddModal = () => {\n setVisAuto(true);\n setAutoData(undefined);\n };\n const onEdit = (dat: any) => {\n setIsTagType(dat.type === 'TAG_SCHEDULE');\n setAutoData(dat);\n setVisAuto(true);\n };\n const onDelete = (dat: any) => {\n setAutoId(dat.id);\n setDeleteAutomation(!deleteAutomation);\n };\n const onConfirmDelete = async () => {\n setDeleteAutomation(!deleteAutomation);\n await dispatch(removeAutomation(autoId));\n setAutoId(0);\n };\n const tableColumns = [\n ...reportColumns.map(x => ({ ...x, title: translate(lang, x.title) })),\n {\n key: 'delete',\n title: '',\n render: (x: IAutomation) => (\n onDelete(x)}\n >\n {translate(lang, 'Delete')}\n \n ),\n },\n ];\n\n useEffect(() => {\n dispatch(loadAutomationData());\n dispatch(loadUserBoats());\n }, [dispatch]);\n\n return (\n
\n
\n
\n 768 ? 'pl-21 pt-32 pb-34' : 'pb-14 pt-20'}\n size={5}\n color='black-3'\n align='default'\n fontWeight={700}\n >\n {translate(lang, 'Automation')}\n \n {isEditable && width > 768 && (\n \n {translate(lang, 'Add Automation')}\n \n )}\n {isEditable && width <= 768 && (\n \n \n \n )}\n
\n 768 ? 'd-flex justify-content-between pl-15 pr-15' : ''\n }\n >\n {!isSpinner && (\n
\n \n
\n )}\n {isSpinner && (\n
\n \n
\n )}\n
\n
\n
\n \n {translate(lang, 'Automate reports')}\n \n {isEditable && (\n setShowReport(true)}\n >\n {translate(lang, 'Automate report sending')}\n \n )}\n
\n \n \n
\n
\n \n {visAuto &&\n (isTagType ? (\n {\n setVisAuto(false);\n setAutoData(undefined);\n setIsTagType(false);\n }}\n />\n ) : (\n {\n setVisAuto(false);\n setAutoData(undefined);\n }}\n onConfirm={() => {\n setVisAuto(false);\n setAutoData(undefined);\n }}\n onSelectTag={() => setIsTagType(true)}\n />\n ))}\n {\n setDeleteAutomation(!deleteAutomation);\n setAutoData(undefined);\n }}\n type='delete'\n title={translate(lang, 'Delete')}\n text={translate(lang, 'Are you sure to delete this data?')}\n onConfirm={onConfirmDelete}\n />\n {showReport && (\n setShowReport(false)} />\n )}\n \n );\n};\n\nexport default AutomationPage;\n","import { useState } from 'react';\nimport { Collapse, Modal } from 'antd';\nimport { useWidth } from '../../util/useWidth';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Dropdown,\n Subtitle,\n ToggleButton,\n} from '../shared';\nimport { CaretLeftOutlined } from '@ant-design/icons';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { IUserResource } from '../../entities/user.entities';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\nconst permissionsLabel = [\n { label: 'View', key: 'view_permission' },\n { label: 'Edit', key: 'edit_permission' },\n { label: 'Finance', key: 'finance_permission' },\n];\n\ninterface Props {\n visible: boolean;\n title: string;\n className?: string;\n onClose: () => void;\n onConfirm: (d: any) => void;\n data: IUserResource;\n}\n\nconst UserPermissionsModal = ({\n visible,\n title,\n onClose,\n onConfirm,\n data,\n className,\n}: Props) => {\n const width = useWidth();\n const dispatch = useDispatch();\n const farms = useSelector(selectFarmsData);\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [checkedFarms, setCheckedFarms] = useState(data.farms ?? []);\n const [checkedLines, setCheckedLines] = useState(data.lines ?? []);\n const [checkedPermissions, setCheckedPermissions] = useState({\n view_permission: !!data.view_permission,\n edit_permission: !!data.edit_permission,\n finance_permission: !!data.finance_permission,\n });\n const [role, setRole] = useState(data.role ?? 'user');\n\n const isSelectedFarm = (id: number) => checkedFarms.includes(id);\n const isSelectedLine = (id: number) => checkedLines.includes(id);\n const isFullSelected = (id: number) => {\n const f = farms.find(x => x.id === id);\n return f?.lines.every(l => isSelectedLine(l.id));\n };\n\n const toggleFarm = (id: number, val: boolean) => {\n const f = farms.find(x => x.id === id);\n const lines = f?.lines ?? [];\n if (isFullSelected(id)) {\n const ls = checkedLines.filter(c => lines.findIndex(l => l.id === c) < 0);\n const fs = checkedFarms.filter(x => x !== f?.id);\n setCheckedFarms(fs);\n setCheckedLines(ls);\n } else {\n let ls = [...checkedLines];\n for (let l of lines) {\n if (!checkedLines.includes(l.id)) ls.push(l.id);\n }\n let fs = [...checkedFarms];\n if (!fs.includes(id)) fs.push(id);\n setCheckedFarms(fs);\n setCheckedLines(ls);\n }\n };\n const toggleLine = (id: number, val: boolean) => {\n const f = farms.find(x => x.lines.findIndex(l => l.id === id) > -1);\n if (!f) return;\n let ls: number[] = [];\n if (checkedLines.includes(id)) {\n ls = checkedLines.filter(x => x !== id);\n } else {\n ls = [...checkedLines, id];\n }\n setCheckedLines(ls);\n const lines = f.lines ?? [];\n if (lines.every(x => !ls.includes(x.id)) && checkedFarms.includes(f.id)) {\n setCheckedFarms(checkedFarms.filter(x => x !== f.id));\n } else if (\n lines.some(x => ls.includes(x.id)) &&\n !checkedFarms.includes(f.id)\n ) {\n setCheckedFarms([...checkedFarms, f.id]);\n }\n };\n const togglePermission = (id: string) => {\n let tmp: any = { ...checkedPermissions };\n tmp[id] = !tmp[id];\n setCheckedPermissions(tmp);\n };\n\n const handleConfirm = () => {\n setDisabled(true);\n sendSingleRequest(\n {\n user_id: data.id,\n farms: checkedFarms,\n lines: checkedLines,\n ...checkedPermissions,\n role,\n },\n 'POST',\n 'api/user/user-access',\n true,\n ).then(res => {\n setDisabled(false);\n if (res.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Updated successfully'),\n }),\n );\n onConfirm(data);\n } else {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Unknown error'),\n }),\n );\n }\n });\n };\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, title)}\n \n
\n
\n setRole(v)}\n />\n
\n {role === 'user' && (\n <>\n {permissionsLabel.map((x, i) => (\n
\n togglePermission(x.key)}\n />\n
\n ))}\n
\n
\n (\n \n )}\n >\n {farms.map(farm => (\n toggleFarm(farm.id, e.target.checked)}\n />\n }\n >\n {farm.lines.map(line => (\n toggleLine(line.id, e.target.checked)}\n />\n ))}\n \n ))}\n \n
\n
\n \n )}\n
\n
\n \n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default UserPermissionsModal;\n","import { useState } from 'react';\nimport { Modal } from 'antd';\nimport { IUserResource } from '../../entities/user.entities';\nimport { Button, CloseIcon, Input, Subtitle } from '../shared';\nimport { sendSingleRequest } from '../../apis';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n visible: boolean;\n user: IUserResource;\n onClose: () => void;\n}\n\nconst UpdateUserModal = ({ visible, user, onClose }: Props) => {\n const lang = useSelector(selectLang);\n const dispatch = useDispatch();\n\n const [password, setPassword] = useState('');\n const [psConfirm, setPsConfirm] = useState('');\n const [disabled, setDisabled] = useState(false);\n const [error, setError] = useState();\n\n const handleChange = (type: 'p' | 'c', value: string) => {\n setError(undefined);\n if (type === 'p') {\n setPassword(value);\n } else {\n setPsConfirm(value);\n }\n };\n const confirmClick = () => {\n if (password.length < 3) {\n setError(translate(lang, 'Minimum allowed password length is %s', 3));\n return;\n }\n if (password !== psConfirm) {\n setError('Password confirmation mismatch');\n return;\n }\n setDisabled(true);\n sendSingleRequest(\n { user_id: user.id, password },\n 'POST',\n 'api/user/owner-update-user',\n true,\n ).then(res => {\n if (res.status) {\n dispatch(\n showFeedback({\n type: 'success',\n isMessage: true,\n message: translate(lang, 'Password updated successfully'),\n }),\n );\n onClose();\n } else {\n setDisabled(false);\n setError(res.data?.message ?? 'Unknown error');\n }\n });\n };\n\n return (\n }\n footer={null}\n >\n
\n
\n \n {translate(lang, \"Change %s's password\", user.name)}\n \n
\n {!!error && (\n
{translate(lang, error)}
\n )}\n
\n
\n handleChange('p', e.target.value)}\n />\n
\n
\n handleChange('c', e.target.value)}\n />\n
\n
\n
\n onClose()}\n disabled={disabled}\n >\n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n
\n \n );\n};\n\nexport default UpdateUserModal;\n","import { Table } from 'antd';\nimport { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { Button, Title } from '../../components/shared';\nimport { checkRolePermission } from '../../entities/util-functions';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface IInvite {\n email: string;\n role: string;\n register_url: string;\n}\n\nconst columns = [\n {\n key: 'email',\n title: 'Email',\n render: (x: IInvite) => {x.email},\n },\n {\n key: 'role',\n title: 'Role',\n render: (x: IInvite) => {x.role},\n },\n {\n key: 'url',\n title: 'Active link',\n render: (x: IInvite) => {x.register_url},\n },\n {\n key: 'btn',\n title: '',\n render: (x: IInvite) => (\n {\n navigator.clipboard.writeText(x.register_url);\n alert('Sing up link is copied');\n }}\n >\n Copy\n \n ),\n },\n {\n key: 'right',\n title: '',\n render: () => <>,\n },\n];\n\nconst InvitedUsers = () => {\n const lang = useSelector(selectLang);\n const profile = useSelector(selectProfile);\n\n const [invites, setInvites] = useState();\n\n useEffect(() => {\n const loadInvites = async () => {\n const res = await sendSingleRequest(\n {},\n 'GET',\n 'api/user/owner-pending-users',\n true,\n );\n if (res.status) setInvites(res.data);\n };\n if (\n checkRolePermission({ allowedRoles: ['owner', 'admin'] }, profile?.role)\n ) {\n loadInvites();\n }\n }, []);\n\n return checkRolePermission(\n { allowedRoles: ['owner', 'admin'] },\n profile?.role,\n ) ? (\n
\n
\n \n {translate(lang, 'Pending Invited Users')}\n \n
\n
\n ({\n ...x,\n title: translate(lang, x.title),\n }))}\n dataSource={invites}\n />\n
\n
\n ) : (\n
\n );\n};\n\nexport default InvitedUsers;\n","import { FC, useEffect, useMemo, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Button,\n CheckboxButton,\n Dropdown,\n ModalComponent,\n PlusIcon,\n Search,\n SearchBigIcon,\n SortIcon,\n Spinner,\n TagComponent,\n Title,\n} from '../../components/shared';\nimport { getAllUsers } from '../../store/users/users.actions';\nimport { useWidth } from '../../util/useWidth';\nimport { Modal, Table, Button as AntBtn } from 'antd';\nimport { sendSingleRequest } from '../../apis';\nimport UserPermissionsModal from '../../components/users/UserPermissionsModal';\nimport { IUserResource } from '../../entities/user.entities';\nimport UpdateUserModal from '../../components/users/UpdateUserModal';\nimport InvitedUsers from './InvitedUsers';\nimport { checkRolePermission } from '../../entities/util-functions';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectUsers } from '../../store/users/users.selector';\nimport { QRCode } from 'react-qrcode-logo';\nimport { TLang } from '../../entities/ui.entities';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\n\ninterface IQRToken {\n id: number;\n token: string;\n}\n\nconst QRImageModal: FC<{\n qrCode: IQRToken;\n onClose: () => void;\n lang: TLang | undefined;\n}> = ({ qrCode, onClose, lang }) => {\n const copyQRImage = () => {\n const canvas: any = document.getElementById('login-qr-canvas');\n canvas?.toBlob(\n async (blob: any) => {\n try {\n await navigator.clipboard.write([\n new ClipboardItem({\n [blob.type]: blob,\n }),\n ]);\n } catch (error) {\n window.alert(error);\n }\n },\n 'image/png',\n 1,\n );\n };\n\n return (\n \n \n \n
\n \n {translate(lang, 'Copy QR Image')}\n \n
\n \n \n );\n};\n\nconst ViewQRButton = ({ onClick }: { onClick: () => void }) => {\n const [disabled, setDisabled] = useState(false);\n\n const handleClick = async () => {\n setDisabled(true);\n await onClick();\n setDisabled(false);\n };\n\n return (\n \n View Login\n \n );\n};\n\nconst defaultColumns = [\n {\n title: 'Email',\n dataIndex: 'email',\n key: 'email',\n },\n {\n title: 'Full Name',\n dataIndex: 'name',\n key: 'name',\n },\n {\n title: 'Status',\n key: 'status',\n className: 'user-status',\n render: (x: IUserResource) => {\n return (\n
\n \n {x.status}\n \n
\n );\n },\n },\n {\n title: 'Role',\n dataIndex: 'role',\n key: 'role',\n render: (x: any) => {roles.find(y => y.id === x)?.label},\n },\n];\n\nconst roles = [\n { value: '3', label: 'All', id: '' },\n { value: '0', label: 'Admin', id: 'admin' },\n { value: '1', label: 'User', id: 'user' },\n { value: '2', label: 'Owner', id: 'owner' },\n { value: '4', label: 'Processing plant', id: 'processing_plant' },\n];\n\nconst Users = () => {\n const dispatch = useDispatch();\n const width = useWidth();\n const lang = useSelector(selectLang);\n const profile = useSelector(selectProfile);\n const usersStore = useSelector(selectUsers);\n const isEditable = profile?.edit_permission;\n\n const [value, setValue] = useState('');\n const [isSearch, setIsSearch] = useState(false);\n const [isSort, setIsSort] = useState(false);\n const [roleSelected, setRoleSelected] = useState();\n const [users, setUsers] = useState([]);\n const [delUser, setDelUser] = useState();\n const [closeUser, setCloseUser] = useState();\n const [isSpinner, setIsSpinner] = useState(false);\n const [selectedUser, setSelectedUser] = useState();\n const [ownerSelUser, setOwnerSelUser] = useState();\n const [userQR, setUserQR] = useState();\n const [disabled, setDisabled] = useState(false);\n\n const handleFilter = () => {\n setIsSpinner(true);\n let defaultUser = usersStore;\n if (roleSelected) {\n defaultUser = defaultUser.filter(user => user.role === roleSelected);\n }\n if (value) {\n defaultUser = defaultUser.filter(\n user => user.email?.includes(value) || user.name?.includes(value),\n );\n }\n setUsers(defaultUser);\n setIsSpinner(false);\n };\n\n const handleOnRole = (event: any) => {\n setRoleSelected(event.key);\n };\n const handleOnActiveSearch = () => {\n setIsSearch(!isSearch);\n if (isSort) {\n setIsSort(false);\n }\n };\n const handleOnActiveSort = () => {\n setIsSort(!isSort);\n if (isSearch) {\n setIsSearch(false);\n }\n };\n const handleConfirmDelete = async () => {\n if (!delUser) return;\n setDisabled(true);\n const res = await sendSingleRequest(\n { user_id: delUser.id },\n 'DELETE',\n 'api/user/destroy-user',\n true,\n );\n if (res.status) {\n await dispatch(getAllUsers());\n setDisabled(false);\n setDelUser(undefined);\n } else {\n setDisabled(false);\n alert(res.data?.message ?? 'Failed to delete');\n }\n };\n const updateUserStatus = async () => {\n if (!closeUser) return;\n\n setDisabled(true);\n const res = await sendSingleRequest(\n { user_id: closeUser.id, status: closeUser.status === 'active' ? -1 : 1 },\n 'PUT',\n 'api/user/status',\n true,\n );\n if (res.status) {\n await dispatch(getAllUsers());\n setDisabled(false);\n setCloseUser(undefined);\n } else {\n setDisabled(false);\n alert(res.data?.message ?? 'Failed to update');\n }\n };\n const toggleUserVerified = async (\n user_id: string | undefined,\n is_verified: boolean,\n ) => {\n const res = await sendSingleRequest(\n { user_id, is_verified },\n 'PUT',\n 'api/user/user-verify',\n true,\n );\n if (res.status) {\n setUsers(prv =>\n prv.map(x =>\n x?.id.toString() === user_id ? { ...x, is_verified } : x,\n ),\n );\n }\n };\n const loginQRGenerate = async (user: IUserResource) => {\n const res = await sendSingleRequest(\n {},\n 'GET',\n `api/user/onetime-token/${user.id}`,\n true,\n );\n if (res.status) {\n setUserQR(res.data);\n } else {\n window.alert(res.data?.message ?? 'Failed to generate QR code');\n }\n };\n\n const columns = useMemo(() => {\n let cols = [...defaultColumns];\n if (isEditable) {\n cols.push({\n title: 'Data validation required',\n key: 'is_verified',\n dataIndex: '',\n render: (u: IUserResource) => (\n \n toggleUserVerified(u.id.toString(), !e.target.checked)\n }\n />\n ),\n });\n }\n if (profile?.role !== 'user') {\n cols.push({\n title: 'Permissions',\n key: 'permissions',\n dataIndex: '',\n render: (u: IUserResource) =>\n u.role !== 'owner' ? (\n setSelectedUser(u)}\n >\n {translate(lang, 'View')}\n \n ) : (\n <>\n ),\n });\n }\n if (profile?.role === 'owner') {\n cols.push(\n {\n title: 'Password',\n key: 'update',\n dataIndex: '',\n render: (u: IUserResource) => (\n setOwnerSelUser(u)}\n >\n {translate(lang, 'Change')}\n \n ),\n },\n {\n title: 'Action',\n key: 'action',\n dataIndex: '',\n render: (u: IUserResource) => (\n
\n {profile.role === 'owner' &&\n checkRolePermission(\n {\n allowedRoles: ['user', 'processing_plant'],\n },\n u.role,\n ) && (\n setDelUser(u)}\n >\n {translate(lang, 'Delete')}\n \n )}\n loginQRGenerate(u)} />\n {profile.role === 'owner' && u.role !== 'owner' && (\n setCloseUser(u)}\n >\n {translate(\n lang,\n u.status === 'active' ? 'Archive' : 'Activate',\n )}\n \n )}\n
\n ),\n },\n );\n }\n return cols.map(x => ({ ...x, title: translate(lang, x.title) }));\n }, [defaultColumns, profile]);\n\n useEffect(() => handleFilter(), [roleSelected]);\n useEffect(() => handleFilter(), [usersStore]);\n\n useEffect(() => {\n setIsSpinner(true);\n dispatch(getAllUsers()).then(() => setIsSpinner(false));\n }, [dispatch]);\n\n return (\n <>\n
\n
\n
\n \n {translate(lang, 'Users')}\n \n {profile?.role !== 'user' && (\n \n {width > 768 ? (\n \n ) : (\n \n \n \n )}\n \n )}\n
\n {width < 769 ? (\n <>\n
\n \n \n \n \n \n \n
\n {(isSearch || isSort) && (\n
\n {isSort && (\n
\n handleOnRole(event)}\n options={roles}\n />\n \n
\n )}\n {isSearch && (\n setValue(e.target.value)}\n value={value}\n />\n )}\n
\n )}\n \n ) : (\n
\n
\n handleOnRole(event)}\n options={roles}\n />\n \n
\n setValue(e.target.value)}\n value={value}\n />\n
\n )}\n {isSpinner ? (\n
\n \n
\n ) : (\n
\n \n
\n )}\n
\n \n
\n {!!delUser && (\n setDelUser(undefined)}\n type='delete'\n title={translate(lang, 'Delete')}\n text={translate(lang, 'Are you sure to delete this user?')}\n onConfirm={() => handleConfirmDelete()}\n disabled={disabled}\n />\n )}\n {!!closeUser && (\n setCloseUser(undefined)}\n type='warning'\n title={translate(\n lang,\n closeUser.status === 'active' ? 'Archive' : 'Activate',\n )}\n text={translate(\n lang,\n `Are you sure to ${\n closeUser.status === 'active' ? 'archive' : 'activate'\n } this user?`,\n )}\n onConfirm={updateUserStatus}\n disabled={disabled}\n />\n )}\n {!!selectedUser && (\n setSelectedUser(undefined)}\n onConfirm={() => {\n setSelectedUser(undefined);\n dispatch(getAllUsers());\n }}\n data={selectedUser}\n />\n )}\n {!!ownerSelUser && (\n setOwnerSelUser(undefined)}\n />\n )}\n {!!userQR && (\n setUserQR(undefined)}\n lang={lang}\n />\n )}\n \n );\n};\n\nexport default Users;\n","import Caret from '../shared/caret/Caret';\nimport Subtitle from '../shared/subtitle/Subtitle';\nimport Button from '../shared/button/Button';\nimport './styles.scss';\n\nconst zeroPad = (num: number) => String(num).padStart(2, '0');\n\nconst getYearRange = (year: number) => {\n if (new Date().getMonth() < 3) year -= 1;\n\n return `01/04/${zeroPad(year % 100)}-31/03/${zeroPad((year + 1) % 100)}`;\n};\n\ninterface Props {\n year: number;\n onChange(e: number): void;\n disabledNext?: boolean;\n disabledPrev?: boolean;\n}\n\nconst BudgetYearArrows = ({\n year,\n onChange,\n disabledNext,\n disabledPrev,\n}: Props) => {\n const handleClickPrev = () => {\n onChange(year - 1);\n };\n const handleClickNext = () => {\n onChange(year + 1);\n };\n\n return (\n
\n \n \n \n
\n \n {year}\n \n \n {getYearRange(year)}\n \n
\n \n \n \n
\n );\n};\n\nexport default BudgetYearArrows;\n","import { useEffect, useState, useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport {\n Title,\n Spinner,\n Paragrapgh,\n Button,\n CaretDownIcon,\n} from '../../components/shared';\nimport { useWidth } from '../../util/useWidth';\nimport { sendSingleRequest } from '../../apis';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { Table } from 'antd';\nimport { IBudgetValue, IBudgetFarm } from '../../entities/budget.entities';\nimport BudgetYearArrows from '../../components/budget/BudgetYearArrows';\nimport { formatNumber, numberToMoneyStr } from '../../entities/util-functions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\n\ninterface ILabel {\n label: string;\n planned: number;\n actual: number;\n unit: 'm' | '$' | 't';\n}\n\ninterface ValueProps {\n val: IBudgetValue;\n unit: 'm' | '$' | 't';\n}\n\nconst ValueCell = ({ val, unit }: ValueProps) => (\n
\n
\n {unit === 't'\n ? `${formatNumber(val.actual / 1000)} t`\n : unit === '$'\n ? `$ ${numberToMoneyStr(val.actual)}`\n : `${formatNumber(val.actual)} m`}\n
\n {/* */}\n
\n);\n\nconst ProfitSpan = (val: number) => (\n
\n {`$ ${numberToMoneyStr(val)}`}\n
\n);\n\nconst farmColumns = (lang: TLang | undefined) => [\n {\n title: translate(lang, 'Farm'),\n dataIndex: 'name',\n key: 'name',\n render: (x: string) => {x},\n },\n {\n title: translate(lang, 'Total length'),\n dataIndex: 'total_length',\n key: 'total_length',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Total seeding cost'),\n dataIndex: 'total_seeding_cost',\n key: 'total_seeding_cost',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Total maintenance cost'),\n dataIndex: 'total_maintenance_cost',\n key: 'total_maintenance_cost',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Total harvest tonnes'),\n dataIndex: 'total_harvest_amount',\n key: 'total_harvest_amount',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Total harvest cost'),\n dataIndex: 'total_harvest_cost',\n key: 'total_harvest_cost',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Total harvest income'),\n dataIndex: 'total_harvest_income',\n key: 'total_harvest_income',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Total profit'),\n key: 'total_profit',\n render: (x: IBudgetFarm) =>\n ProfitSpan(\n x.total_harvest_income.actual -\n x.total_seeding_cost.actual -\n x.total_maintenance_cost.actual -\n x.total_harvest_cost.actual,\n ),\n },\n];\n\nconst lineColumns = (lang: TLang | undefined) => [\n {\n title: translate(lang, 'Line'),\n dataIndex: 'line_name',\n key: 'line_name',\n render: (x: string) => {x},\n },\n {\n title: translate(lang, 'Length'),\n dataIndex: 'length',\n key: 'length',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Seeding cost'),\n dataIndex: 'seeding_cost',\n key: 'seeding_cost',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Maintenance cost'),\n dataIndex: 'maintenance_cost',\n key: 'maintenance_cost',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Harvest tonnes'),\n dataIndex: 'harvest_amount',\n key: 'harvest_amount',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Harvest cost'),\n dataIndex: 'harvest_cost',\n key: 'harvest_cost',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Harvest income'),\n dataIndex: 'harvest_income',\n key: 'harvest_income',\n render: (x: IBudgetValue) => ,\n },\n {\n title: translate(lang, 'Profit'),\n key: 'profit',\n render: (x: any) =>\n ProfitSpan(\n x.harvest_income.actual -\n x.seeding_cost.actual -\n x.maintenance_cost.actual -\n x.harvest_cost.actual,\n ),\n },\n { title: '', key: 'end', render: (x: any) => undefined },\n];\n\nconst BudgetTotalPage = () => {\n const width = useWidth();\n const dispatch = useDispatch();\n const history = useHistory();\n const lang = useSelector(selectLang);\n\n const [year, setYear] = useState(new Date().getFullYear());\n const [data, setData] = useState([]);\n const [loading, setLoading] = useState(false);\n\n const summary = useMemo(() => {\n let result: Array = [];\n let length = { planned: 0, actual: 0 },\n seeding = { planned: 0, actual: 0 },\n maintenance = { planned: 0, actual: 0 },\n harvest_amount = { planned: 0, actual: 0 },\n harvest_income = { planned: 0, actual: 0 },\n harvest_cost = { planned: 0, actual: 0 };\n\n for (let d of data) {\n length.planned += d.total_length.planned;\n length.actual += d.total_length.actual;\n\n seeding.planned += d.total_seeding_cost.planned;\n seeding.actual += d.total_seeding_cost.actual;\n\n maintenance.planned += d.total_maintenance_cost.planned;\n maintenance.actual += d.total_maintenance_cost.actual;\n\n harvest_amount.planned += d.total_harvest_amount.planned / 1000;\n harvest_amount.actual += d.total_harvest_amount.actual / 1000;\n\n harvest_income.planned += d.total_harvest_income.planned;\n harvest_income.actual += d.total_harvest_income.actual;\n\n harvest_cost.planned += d.total_harvest_cost.planned;\n harvest_cost.actual += d.total_harvest_cost.actual;\n }\n result = [\n { label: translate(lang, 'Total length'), unit: 'm', ...length },\n { label: translate(lang, 'Total seeding cost'), unit: '$', ...seeding },\n {\n label: translate(lang, 'Total maintenance cost'),\n unit: '$',\n ...maintenance,\n },\n {\n label: translate(lang, 'Total harvest tonnes'),\n unit: 't',\n ...harvest_amount,\n },\n {\n label: translate(lang, 'Total harvest cost'),\n unit: '$',\n ...harvest_cost,\n },\n {\n label: translate(lang, 'Total harvest income'),\n unit: '$',\n ...harvest_income,\n },\n {\n label: translate(lang, 'Total profit'),\n unit: '$',\n planned: 0,\n actual:\n harvest_income.actual -\n seeding.actual -\n maintenance.actual -\n harvest_cost.actual,\n },\n ];\n return result;\n }, [data]);\n\n const loadData = useCallback(async () => {\n setLoading(true);\n const res = await sendSingleRequest(\n { year },\n 'GET',\n 'api/farm/line/budgets',\n true,\n );\n setLoading(false);\n if (res.status) {\n setData(res.data);\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n message: res.data?.message ?? 'Failed to load budget information',\n type: 'error',\n }),\n );\n }\n }, [year]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return (\n
\n
\n
\n 768 ? 'pl-21 pt-32 pb-34' : 'pb-14 pt-20'}\n size={5}\n color='black-3'\n align='default'\n fontWeight={700}\n >\n {translate(lang, 'Budget')}\n \n
\n history.push('/budget-log')}\n >\n {translate(lang, 'Budget Log')}\n \n
\n
\n
\n setYear(value)}\n />\n
\n {loading ? (\n
\n \n
\n ) : (\n <>\n
\n {summary.map((item, i) => (\n
\n \n {item.label}\n \n
\n 768 ? 'pr-10' : 'pr-4'}\n size={width > 768 ? 1 : 2}\n color='black'\n align='left'\n fontWeight={width > 768 ? 500 : 400}\n >\n {item.unit === '$'\n ? `$ ${numberToMoneyStr(item.actual)}`\n : `${formatNumber(item.actual)} ${item.unit}`}\n \n
\n
\n ))}\n
\n 768 ? 'd-flex justify-content-between pl-15 pr-15' : ''\n }\n >\n
\n (\n ({\n onClick: () =>\n history.push(\n `/budget/${d.id}?line=${r.id}&year=${year}`,\n ),\n })}\n />\n ),\n expandIcon: ({ onExpand, record }) => (\n undefined}\n onClick={event => {\n event.stopPropagation();\n onExpand(record, event);\n }}\n >\n \n
\n ),\n }}\n onRow={d => ({\n onClick: () => history.push(`/budget/${d.id}`),\n })}\n />\n
\n
\n \n )}\n \n \n );\n};\n\nexport default BudgetTotalPage;\n","import { useState } from 'react';\nimport { IBudgetLog } from '../../../entities/budget.entities';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\nimport { Button, Table } from 'antd';\nimport ModalComponent from '../modal/Modal';\nimport './styles.scss';\n\ninterface Props {\n logsData: IBudgetLog[];\n onDelete: (item: IBudgetLog) => void;\n pagination: any;\n onPagination: (d: any) => void;\n}\n\nconst BudgetLogsTable = ({\n logsData,\n pagination,\n onDelete,\n onPagination,\n}: Props) => {\n const [comment, setComment] = useState();\n\n const columns = [\n {\n title: 'Farm',\n dataIndex: 'farm_name',\n key: 'farm_name',\n },\n {\n title: 'Line',\n dataIndex: 'line_name',\n key: 'line_name',\n },\n {\n title: 'Type',\n dataIndex: 'human_name',\n key: 'human_name',\n },\n {\n title: 'Change',\n key: 'change',\n render: (x: IBudgetLog) => (\n \n {x.change.old} →\n {x.change.new}\n \n ),\n },\n {\n title: 'User',\n dataIndex: 'user_name',\n key: 'user_name',\n },\n {\n title: 'Date',\n key: 'date',\n render: (x: IBudgetLog) => (\n {defaultDateFormat(Number(x.date))}\n ),\n },\n {\n title: 'Comment',\n key: 'comment',\n render: (x: IBudgetLog) =>\n !!x.comment && (\n undefined}\n onClick={() => setComment(x.comment ?? '')}\n >\n View\n \n ),\n },\n {\n title: '',\n key: 'action',\n render: (x: IBudgetLog) => (\n onDelete(x)}\n >\n Delete\n \n ),\n },\n ];\n\n return (\n <>\n \n {comment !== undefined && (\n setComment(undefined)}\n type=''\n title={'Comment'}\n text={comment}\n />\n )}\n \n );\n};\n\nexport default BudgetLogsTable;\n","import { FC, useState, memo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Dropdown, Menu, Pagination } from 'antd';\nimport Subtitle from '../subtitle/Subtitle';\nimport ModalComponent from '../modal/Modal';\nimport { IBudgetLog } from '../../../entities/budget.entities';\nimport { selectProfile } from '../../../store/auth/auth.selector';\nimport DotsIcon from '../DotsIcon';\nimport Paragrapgh from '../paragrapgh/Paragrapgh';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\nimport './styles.scss';\n\ninterface IPage {\n current: number;\n pageSize: number;\n total: number;\n}\n\ninterface Props {\n data: IBudgetLog[];\n onDeleteLog: (log: IBudgetLog) => void;\n pagination: IPage;\n onPagination: (page: number, pageSize?: number) => void;\n}\n\nconst BudgetLogsMobile: FC = memo(\n ({ data, onDeleteLog, pagination, onPagination }) => {\n const profile = useSelector(selectProfile);\n\n const [viewLog, setViewLog] = useState();\n\n return (\n <>\n
\n {data.length > 0 ? (\n <>\n {data.map(log => (\n
\n
\n {!!profile?.edit_permission && (\n
\n e.stopPropagation()}\n >\n onDeleteLog(log)}>\n Delete\n \n }\n placement='bottomRight'\n trigger={['click']}\n >\n
\n \n
\n \n
\n
\n )}\n
\n
\n
\n \n Farm\n \n \n {log.farm_name}\n \n
\n
\n \n Line\n \n \n {log.line_name}\n \n
\n
\n
\n
\n \n Type\n \n \n {log.human_name}\n \n
\n
\n \n Change\n \n \n \n {log.change.old} →\n \n {log.change.new}\n \n \n \n
\n
\n
\n
\n \n User\n \n \n {log.user_name}\n \n
\n
\n \n Date\n \n \n {defaultDateFormat(log.date)}\n \n
\n
\n
\n
\n \n Comment\n \n \n undefined}\n onClick={() => setViewLog(log)}\n >\n View\n \n \n
\n
\n
\n ))}\n
\n \n
\n \n ) : (\n
\n \n No data available\n \n
\n )}\n \n setViewLog(undefined)}\n type=''\n title='Comment'\n text={viewLog?.comment ?? 'No comments yet'}\n />\n \n );\n },\n);\n\nexport default BudgetLogsMobile;\n","import { useEffect, useState } from 'react';\nimport { useWidth } from '../../util/useWidth';\nimport {\n Feedback,\n ModalComponent,\n Spinner,\n Title,\n} from '../../components/shared';\nimport { sendSingleRequest } from '../../apis';\nimport BudgetLogsTable from '../../components/shared/tables/BudgetLogsTable';\nimport { IBudgetLog } from '../../entities/budget.entities';\nimport BudgetLogsMobile from '../../components/shared/table-mobile/BudgetLogsMobile';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst BudgetLog = () => {\n const width = useWidth();\n const lang = useSelector(selectLang);\n\n const [logs, setLogs] = useState([]);\n const [deleteId, setDeleteId] = useState(0);\n const [message, setMessage] = useState('');\n const [pagination, setPagination] = useState({\n current: 1,\n pageSize: 20,\n total: 200,\n });\n const [isSpinner, setIsSpinner] = useState(false);\n\n const handleOnDelete = (log: IBudgetLog) => {\n setDeleteId(log.id);\n };\n\n const handleConfirmDelete = async () => {\n const response = await sendSingleRequest(\n { budget_log_id: deleteId },\n 'POST',\n 'api/farm/line/retrieve-log',\n true,\n );\n if (response.status) {\n setLogs(logs.filter(item => item?.id !== deleteId));\n setPagination({ ...pagination, total: pagination.total - 1 });\n setMessage('Success');\n } else {\n setMessage(response.data?.message ?? 'Unknown error');\n }\n setDeleteId(0);\n };\n\n const paginationOnChange = (changePagination: any) => {\n setPagination(changePagination);\n };\n\n useEffect(() => {\n if (message) {\n setTimeout(() => {\n setMessage('');\n }, 3000);\n }\n }, [message]);\n\n useEffect(() => {\n let isIn = true;\n\n setIsSpinner(true);\n sendSingleRequest(\n { current_page: pagination.current, page_size: pagination.pageSize },\n 'GET',\n `api/farm/line/budget-logs`,\n true,\n ).then(res => {\n if (!isIn) return;\n\n if (res.status) {\n setLogs(res.data?.data);\n setPagination({ ...pagination, total: res.data?.meta?.total });\n }\n setIsSpinner(false);\n });\n\n return () => {\n isIn = false;\n };\n }, [pagination.current]);\n\n return (\n <>\n
\n
\n
\n \n {translate(lang, 'Budget Log')}\n \n
\n {!isSpinner ? (\n
\n {width > 768 ? (\n \n ) : (\n \n )}\n
\n ) : (\n
\n \n
\n )}\n
\n setDeleteId(0)}\n type='delete'\n onConfirm={() => handleConfirmDelete()}\n />\n
\n {message && (\n \n )}\n \n );\n};\n\nexport default BudgetLog;\n","import { sendSingleRequest } from '../../apis';\n\nexport const CreateAccountMessage = async (\n content: string,\n success: (param: any) => void,\n failed: (param: any) => void,\n) => {\n const res = await sendSingleRequest(\n { content },\n 'POST',\n `api/account-message/message`,\n true,\n );\n if (res.status) {\n sendSingleRequest(\n { message_id: res.data.id },\n 'POST',\n `api/user/notification/message-created`,\n true,\n ).then(res => console.log(res));\n success(res.data);\n } else {\n failed(res.data);\n }\n};\n\nexport const DeleteAccountMessage = async (\n message_id: number | string,\n success: (param: any) => void,\n failed: (param: any) => void,\n) => {\n const response = await sendSingleRequest(\n { message_id },\n 'DELETE',\n `api/account-message/message`,\n true,\n );\n if (response.status) {\n success(response.data);\n } else {\n failed(response.data);\n }\n};\n\nexport const ReadAccountMessages = async (\n offset: number,\n limit: number,\n success: (params: any) => void,\n failed: (params: any) => void,\n) => {\n const res = await sendSingleRequest(\n { offset, limit },\n 'GET',\n `api/account-message/messages`,\n true,\n );\n if (res.status) {\n success(res.data);\n } else {\n failed(res.data);\n }\n};\n\nexport const MessageActionReadAll = async (\n message_ids: number[],\n success: (params: any) => void,\n failed: (params: any) => void,\n) => {\n const response = await sendSingleRequest(\n { message_ids },\n 'POST',\n 'api/account-message/bulk-action',\n true,\n );\n if (response.status) {\n success(response.data);\n } else {\n failed(response.data);\n }\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button, Input, TrashIcon } from '../../components/shared';\nimport {\n CreateAccountMessage,\n DeleteAccountMessage,\n MessageActionReadAll,\n ReadAccountMessages,\n} from './AccountMessageFunctions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { updateUserMeta } from '../../store/auth/auth.actions';\nimport { selectNewAccountMessage } from '../../store/users/users.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\ninterface IMessage {\n id: number;\n user_id: number;\n user: any;\n content: string;\n created_at: string;\n updated_at: string;\n is_read: boolean;\n is_mine: boolean;\n}\n\nconst limit = 30;\n\nconst AccountMessagesPage = () => {\n const dispatch = useDispatch();\n const newAccountMessage = useSelector(selectNewAccountMessage);\n const lang = useSelector(selectLang);\n\n const [content, setContent] = useState('');\n const [disable, setDisable] = useState(false);\n const [messages, setMessages] = useState([]);\n const offset = 0;\n\n const inputContentHandle = (\n event: React.ChangeEvent,\n ) => {\n setContent(event.target.value);\n };\n const deleteClick = async (\n itemId: any,\n event: React.MouseEvent,\n ) => {\n event.preventDefault();\n DeleteAccountMessage(\n itemId,\n () => {\n loadData();\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Removed successfully'),\n }),\n );\n },\n data => {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, data?.message ?? 'Something went wrong'),\n }),\n );\n },\n );\n };\n const sendMessage = async (event: React.MouseEvent) => {\n event.preventDefault();\n if (content.length < 2) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, 'You should input %s letters at least', 2),\n }),\n );\n return;\n }\n setDisable(true);\n CreateAccountMessage(\n content,\n () => {\n setDisable(false);\n setContent('');\n loadData();\n },\n data => {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, data?.message ?? 'Something went wrong'),\n }),\n );\n setDisable(false);\n },\n );\n };\n const sendReadAction = async (\n item: IMessage,\n event: React.MouseEvent,\n ) => {\n event.preventDefault();\n await setReadAll();\n };\n const loadData = useCallback(async () => {\n ReadAccountMessages(\n offset,\n limit,\n data => setMessages(data),\n data =>\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, data?.message ?? 'Something went wrong'),\n }),\n ),\n );\n }, [offset, limit]);\n\n const setReadAll = async () => {\n if (messages.length <= 0) return;\n const message_ids = messages\n .filter(x => !x.is_read && !x.is_mine)\n .map(t => t.id);\n if (message_ids.length <= 0) return;\n MessageActionReadAll(\n message_ids,\n () => {\n loadData().then(() => updateUserMeta());\n },\n () => {\n loadData().then(() => updateUserMeta());\n },\n );\n };\n\n useEffect(() => {\n loadData();\n\n return () => {};\n }, [loadData]);\n\n useEffect(() => {\n if (newAccountMessage) {\n loadData();\n }\n }, [newAccountMessage]);\n\n return (\n
\n
\n
\n \n {messages.map(item => (\n \n
\n
\n                    {item.content}\n                  
\n
\n
\n
\n Written by \n \n {item.user.name}\n \n on \n \n {item.created_at}\n \n
\n {item.is_mine && (\n
\n \n \n \n
\n )}\n
\n
\n ))}\n
\n
\n
\n
setReadAll()}>\n \n
\n
\n \n {translate(lang, 'Send')}\n \n
\n
\n
\n
\n \n \n );\n};\n\nexport default AccountMessagesPage;\n","import { DropdownMenu, Subtitle } from '../../components/shared';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { ISpatStorageResource } from '../../entities/farms.entities';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { labelRange } from '../../lib/common.helpers';\n\ninterface Props {\n data: ISpatStorageResource[];\n showEditModal: (evt: any, x: any) => void;\n showDeleteModal: (evt: any, x: any) => void;\n}\n\nconst SpatStorageMobileTable = ({\n data,\n showEditModal,\n showDeleteModal,\n}: Props) => {\n const lang = useSelector(selectLang);\n\n return (\n
\n {data.map((item, idx) => (\n
\n
\n \n {item.source}\n \n
\n showEditModal(evt, item)}\n onDeleteRow={evt => showDeleteModal(evt, item)}\n type='isModal'\n />\n
\n
\n
\n
\n
\n \n {translate(lang, 'Source line')}\n \n \n \n {item?.source_line\n ? `${item?.source_line.farm.name} - ${item?.source_line.line_name}`\n : `${item?.src_line_name ?? '-'}`}\n \n \n
\n
\n \n {translate(lang, 'Destination Line')}\n \n \n \n {item?.destination_line\n ? `${item?.destination_line.farm.name} - ${item?.destination_line.line_name}`\n : `${item?.dst_line_name ?? '-'}`}\n \n \n
\n
\n
\n
\n \n {translate(lang, 'Collection date')}\n \n \n {defaultDateFormat(item.collection_date)}\n \n
\n
\n \n {translate(lang, 'Seeded date')}\n \n \n {defaultDateFormat(item.seeded_date)}\n \n
\n
\n
\n
\n \n {translate(lang, 'Condition')}\n \n \n {item.condition ?? '-'}\n \n
\n
\n \n ID\n \n \n {item.id}\n \n
\n
\n
\n
\n \n {translate(lang, 'Weight')}\n \n \n {item.weight}\n \n
\n
\n \n {translate(lang, 'Available weight')}\n \n \n {item.available_weight}\n \n
\n
\n
\n
\n \n {translate(lang, 'Size')}\n \n \n \n {labelRange(\n item.harvest?.shell_length,\n item.harvest?.shell_length_max ?? undefined,\n )}\n \n \n
\n
\n
\n
\n
\n ))}\n
\n );\n};\n\nexport default SpatStorageMobileTable;\n","import { useState, useMemo, useEffect } from 'react';\nimport { Modal } from 'antd';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n Dropdown,\n Input,\n Subtitle,\n} from '../../components/shared';\nimport ModalFeedbackView from '../../components/shared/feedback/ModalFeedbackView';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { selectUtils } from '../../store/utils/utils.selector';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { toMillisecond, toSecond } from '../../util/toggleSecondMillisecond';\nimport { TBusinessType } from '../../entities/general.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n// import SpatOysterAssesment from './SpatOysterAssesment';\n// import SpatMusselAssesment from './SpatMusselAssesment';\n\ninterface IFormData {\n type: TBusinessType;\n source: string;\n seed_type: string | null;\n src_line_id?: number | null;\n src_line_name: string | null;\n dst_line_id?: number | null;\n dst_line_name: string | null;\n collection_date: number;\n condition: string;\n weight: number | null;\n stage: number | null;\n flupsy_storage?: boolean;\n has_assessment?: boolean;\n assessment_template?: any;\n}\n\nconst defaultForm: IFormData = {\n type: 'MUSSEL',\n source: '',\n seed_type: null,\n src_line_id: undefined,\n src_line_name: null,\n dst_line_id: undefined,\n dst_line_name: null,\n collection_date: new Date().setHours(0, 0, 0, 0),\n condition: '',\n weight: null,\n stage: 1,\n flupsy_storage: false,\n has_assessment: false,\n assessment_template: null,\n};\n\nconst conditions = [\n { id: 'Good', label: 'Good', value: 'Good' },\n { id: 'Average', label: 'Average', value: 'Average' },\n { id: 'Bad', label: 'Bad', value: 'Bad' },\n];\n\ninterface Props {\n visible: boolean;\n title?: string;\n data?: any;\n editId?: number;\n onConfirm: (d: any) => void;\n onCancel: () => void;\n}\n\nconst SpatStorageModal = ({\n visible,\n title,\n data,\n editId,\n onConfirm,\n onCancel,\n}: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n const seedTypeOptions = useSelector(selectUtils)\n .filter(x => x.type === 'seedtype')\n .map(x => ({ id: x.id.toString(), value: x.name, label: x.name }));\n\n const [busType, setBusType] = useState(\n data?.type\n ? data.type\n : farmsData.every(x => x.type === 'MUSSEL')\n ? 'MUSSEL'\n : farmsData.every(x => x.type === 'OYSTER')\n ? 'OYSTER'\n : undefined,\n );\n\n\n const [form, setForm] = useState(defaultForm);\n\n const [assessmentForm, setAssessmentForm] = useState({});\n const [disabled, setDisabled] = useState(false);\n const [errors, setErrors] = useState<{\n source: string | null;\n condition: string | null;\n weight: string | null;\n }>({ source: null, condition: null, weight: null });\n\n const updateForm = (key: keyof IFormData, val: any) => {\n if (['weight', 'src_line_id', 'dst_line_id', 'stage'].includes(key)) {\n val = val.length <= 0 ? null : Number(val);\n }\n setForm({ ...form, [key]: val });\n setErrors({ ...errors, [key]: null });\n };\n\n const updateAssessmentForm = (key: any, val: any) => {\n setAssessmentForm({ ...assessmentForm, [key]: val });\n }\n\n const validForm = () => {\n let tmpErr = { ...errors };\n let flag = true;\n if (form.source.length <= 0) {\n tmpErr.source = translate(lang, 'Please input source field');\n flag = false;\n }\n if (!form.condition || form.condition.length <= 0) {\n tmpErr.condition = translate(lang, 'Please input condition field');\n flag = false;\n }\n if (!form.weight || form.weight <= 0) {\n tmpErr.weight = translate(lang, 'Please input weight field');\n flag = false;\n }\n if (!form.stage) {\n dispatch(\n showFeedback({\n type: 'error',\n isMessageModal: true,\n message: translate(lang, 'Please input stage field'),\n }),\n );\n flag = false;\n }\n setErrors(tmpErr);\n if (!flag) return null;\n\n const res = {\n ...form,\n collection_date: toSecond(form.collection_date),\n type: busType,\n };\n return res;\n };\n const confirmClick = async () => {\n const formData = validForm();\n if (!formData) return;\n\n setDisabled(true);\n const response = !editId\n ? await sendSingleRequest(formData, 'POST', 'api/farm/spat-storage', true)\n : await sendSingleRequest(\n formData,\n 'PUT',\n `api/farm/spat-storage/${editId}`,\n true,\n );\n setDisabled(false);\n\n if (response.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, response.data?.message ?? 'Success'),\n }),\n );\n onConfirm(response.data);\n } else {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, response.data?.message ?? 'Server error'),\n }),\n );\n }\n };\n const availableLines = useMemo(() => {\n let result = [];\n for (let f of farmsData.filter(x => x.type === busType)) {\n for (let l of f.lines)\n result.push({\n id: l.id.toString(),\n value: l.id.toString(),\n label: `${f.name} - ${l.line_name}`,\n });\n }\n result.push({ id: '', value: '', label: 'Other' });\n\n return result;\n }, [farmsData, busType]);\n\n useEffect(() => {\n if (data) {\n \n let tmp: any = { ...defaultForm };\n for (let i in form) {\n if (data[i] !== undefined) tmp[i] = (data as any)[i];\n }\n if (data.collection_date) {\n tmp.collection_date = toMillisecond(data.collection_date);\n }\n tmp.flupsy_storage = data.flupsy_storage ?? false;\n tmp.has_assessment = data.assessment_template ? true : false;\n if(data.assessment_template) {\n setAssessmentForm(data.assessment_template);\n }\n setForm(tmp);\n }\n }, [data]);\n\n useEffect(() => {\n if (form.has_assessment) {\n let tmpForm = form;\n form.assessment_template = assessmentForm;\n setForm(tmpForm);\n }\n }, [assessmentForm]);\n\n return (\n }\n >\n
\n
\n \n {translate(\n lang,\n !title ? 'Add new spat storage' : 'Edit spat storage data',\n )}\n \n
\n {!busType ? (\n
\n
\n setBusType('MUSSEL')}\n >\n {translate(lang, 'Mussel Spat Storage')}\n \n
\n
\n setBusType('OYSTER')}\n >\n {translate(lang, 'Oyster Spat Storage')}\n \n
\n
\n ) : (\n
\n
\n updateForm('source', e.target.value)}\n />\n {errors.source && (\n
{errors.source}
\n )}\n
\n \n
\n updateForm('seed_type', v)}\n />\n
\n {!editId && ( \n
\n updateForm('flupsy_storage', v.target.checked)}\n checked={form.flupsy_storage}\n />\n
\n )}\n {!form.flupsy_storage &&\n <>\n updateForm('src_line_id', v)}\n />\n {form.src_line_id === null && (\n updateForm('src_line_name', e.target.value)}\n />\n )}\n updateForm('dst_line_id', v)}\n />\n \n }\n {form.dst_line_id === null && (\n updateForm('dst_line_name', e.target.value)}\n />\n )}\n \n !!e && updateForm('collection_date', e.toDate().getTime())\n }\n required={true}\n />\n
\n updateForm('condition', v)}\n label={translate(lang, 'Condition')}\n options={conditions}\n value={form.condition}\n />\n {errors.condition && (\n
{errors.condition}
\n )}\n
\n
\n updateForm('weight', e.target.value)}\n unit={ busType === 'OYSTER' && !form.flupsy_storage ? 'pieces' : 'kg'}\n />\n {errors.weight && (\n
{errors.weight}
\n )}\n
\n
\n updateForm('stage', e.target.value)}\n />\n
\n {/* {!form.flupsy_storage && (\n <>\n
\n updateForm('has_assessment', v.target.checked)}\n checked={form.has_assessment}\n />\n
\n {\n form.has_assessment && (\n busType === 'MUSSEL' ? (\n \n ) : (\n \n )\n )\n }\n \n )} */}\n
\n )}\n
\n {!!busType && (\n
\n \n {translate(lang, 'Confirm')}\n \n
\n )}\n \n \n );\n};\n\nexport default SpatStorageModal;\n","import React, {useState} from 'react';\nimport { Row, Col } from 'antd';\nimport { Modal, Tooltip } from 'antd';\nimport { Button, CloseIcon, MinusIcon, PlusIcon, Subtitle } from '../shared';\n\ninterface FlupsySectionsModalProps {\n bucketsX: number; \n bucketsY: number; \n divisions: number; \n bucketsData: any;\n onCancel: () => void;\n}\n\nconst FlupsySectionsModal: React.FC = ({ bucketsX, bucketsY, divisions, onCancel, bucketsData }) => {\n\n const [zoom, setZoom] = useState(1);\n\n const onNodeViewWheel = (e: React.WheelEvent) => {\n if (!e.shiftKey) return;\n const z = e.deltaY < 0 ? zoom - 0.1 : zoom + 0.1;\n setZoom(Math.max(0.1, z));\n };\n\n const getLine = (y: number, x: number) => {\n let lineOutput = {\n id: 0,\n line_name: '',\n seeds: 0,\n input_date: '',\n size: '',\n };\n bucketsData.lines.forEach((line: any) => {\n if (line.fluspy_position === `${y}-${x}`) {\n lineOutput = line;\n }\n });\n return lineOutput;\n }\n const renderBuckets = () => {\n const buckets = [];\n let lineNumber = 0;\n for (let y = 1; y <= bucketsY; y++) {\n \n buckets.push(\n \n {Array.from({ length: bucketsX }).map((_, x) => \n { lineNumber++; return (\n \n \n \n )}\n )}\n \n );\n }\n return buckets;\n };\n\n return (\n <>\n }\n width='full'\n style={{ maxWidth: 1440 }}\n footer={null}\n >\n
\n \n setZoom(Math.max(0.1, zoom - 0.1))}\n >\n \n
\n
\n \n {zoom.toFixed(1)}\n \n
\n
setZoom(zoom + 0.1)}>\n \n
\n \n \n
\n
{renderBuckets()}
\n
\n \n \n );\n};\n\nexport default FlupsySectionsModal;\n\n","import { useState, useMemo, useEffect } from 'react';\nimport { Modal } from 'antd';\nimport {\n Button,\n CloseIcon,\n Datepicker,\n Dropdown,\n Input,\n Subtitle,\n Spinner,\n} from '../../components/shared';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\nimport FlupsySectionsModal from '../../components/view-modals/FlupsySectionsModal';\nimport { parse } from 'path';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { sendSingleRequest } from '../../apis';\nimport ModalFeedbackView from '../../components/shared/feedback/ModalFeedbackView';\nimport { Link } from 'react-router-dom';\n\nconst basketsPerSectionsOptions = [\n { id: '4', label: '4', value: '4' },\n { id: '6', label: '6', value: '6' },\n { id: '8', label: '8', value: '8' },\n];\n\ninterface Props {\n visible: boolean;\n onCancel: () => void;\n}\n\ninterface BucketsData {\n lines: any;\n farm_id: number;\n}\n\nconst FlupsyModal = ({ visible, onCancel }: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const [basketketsPerSection, setBasketketsPerSection] = useState(0);\n const [showCreateForm, setShowCreateForm] = useState(false);\n const [backetWidth, setBacketWidth] = useState(0);\n const [backetHeight, setBacketHeight] = useState(0);\n const [showFluspySectionsModal, setShowFluspySectionsModal] = useState(false);\n const [disabled, setDisabled] = useState(false);\n const [bucketsData, setBucketsData] = useState(null);\n const [existingData, setExistingData] = useState([]);\n const [loading, setLoading] = useState(true);\n const [errors, setErrors] = useState<{\n source: string | null;\n condition: string | null;\n weight: string | null;\n }>({ source: null, condition: null, weight: null });\n\n useEffect(() => {\n fetchFlupsy();\n }, []);\n\n const fetchFlupsy = async () => {\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/farm/get-fluspy',\n true,\n );\n if (response.status) {\n setExistingData(response.data);\n if(response.data.length === 0) {\n setShowCreateForm(true);\n }\n }\n setLoading(false);\n };\n\n const validForm = () => {\n if (![4, 6, 8].includes(basketketsPerSection)) {\n dispatch(\n showFeedback({\n type: 'error',\n isMessageModal: true,\n message: translate(\n lang,\n 'Please select the number of buckets per section',\n ),\n }),\n );\n return null;\n }\n\n if (backetWidth < 1) {\n dispatch(\n showFeedback({\n type: 'error',\n isMessageModal: true,\n message: translate(lang, 'Please enter the height of the raft'),\n }),\n );\n return null;\n }\n\n if (backetHeight < 1) {\n dispatch(\n showFeedback({\n type: 'error',\n isMessageModal: true,\n message: translate(lang, 'Please enter the length of the raft'),\n }),\n );\n return null;\n }\n\n return true;\n };\n\n const confirmClick = async () => {\n const formData = validForm();\n if (!formData) return;\n setDisabled(true);\n const response = await sendSingleRequest(\n {\n buckets: basketketsPerSection,\n height: backetHeight,\n length: backetWidth,\n },\n 'POST',\n 'api/farm/create-fluspy',\n true,\n );\n\n if (response.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, response.data?.message ?? 'Success'),\n }),\n );\n\n setBucketsData({\n lines: response.data?.lines,\n farm_id: response.data?.farm.id,\n });\n setShowFluspySectionsModal(true);\n setDisabled(false);\n } else {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, response.data?.message ?? 'Server error'),\n }),\n );\n setDisabled(false);\n }\n };\n\n const selectExisting = async (e: any, index: number) => {\n e.preventDefault();\n setBucketsData({\n lines: existingData[index].lines,\n farm_id: existingData[index].farm.id,\n });\n\n setBacketHeight(existingData[index].farm.metadata.height);\n setBacketWidth(existingData[index].farm.metadata['length']);\n setBasketketsPerSection(existingData[index].farm.metadata.buckets);\n setShowFluspySectionsModal(true);\n };\n\n return (\n }\n >\n
\n {loading ? (\n
\n \n
\n ) : (\n <>\n {existingData.length > 0 && (\n <>\n
\n \n {translate(lang, 'Existing Flupsy')}\n \n
\n
\n {existingData.map((data: any, index: number) => (\n
\n \n
\n ))}\n
\n {!showCreateForm &&\n setShowCreateForm(true)}\n disabled={disabled}\n >\n {translate(lang, 'Create New')}\n \n }\n \n )}\n {showCreateForm && (<> \n
\n \n {translate(lang, 'Bay Spat Storage')}\n \n
\n
\n \n

\n Section is a section of your flupsy containint multiple\n bucket. How many buckets you have per section?\n

\n setBasketketsPerSection(parseInt(v))}\n label={translate(lang, 'Select buckets')}\n options={basketsPerSectionsOptions}\n value={basketketsPerSection.toString()}\n />\n {errors.condition && (\n
{errors.condition}
\n )}\n
\n
\n

\n How big is your raft in terms of sections where X is height\n and Y is length. For instance 4x by 4y would give you 16\n sections (remember each section also has multiple baskets)\n

\n
\n
\n setBacketHeight(parseInt(e.target.value))}\n />\n {errors.weight && (\n
{errors.weight}
\n )}\n
\n
\n setBacketWidth(parseInt(e.target.value))}\n />\n {errors.weight && (\n
{errors.weight}
\n )}\n
\n confirmClick()}\n disabled={disabled}\n >\n {translate(lang, 'Confirm')}\n \n
\n )} \n \n )}\n \n {showFluspySectionsModal && (\n setShowFluspySectionsModal(false)}\n />\n )}\n \n \n );\n};\n\nexport default FlupsyModal;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { Image, Modal, Table, Button as AntBtn } from 'antd';\nimport { ColumnsType } from 'antd/lib/table';\nimport { sendSingleRequest } from '../../apis';\nimport {\n BreadcrumbComponent,\n Button,\n CaretDownIcon,\n CloseIcon,\n Dropdown,\n Input,\n ModalComponent,\n Paragrapgh,\n Spinner,\n Subtitle,\n} from '../../components/shared';\nimport { useWidth } from '../../util/useWidth';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport right_icon from '../../images/right-icon.png';\nimport getBreadcrumbMenu from '../../util/BreadcrumbMenu';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { loadSpatStorages } from '../../store/farms/farms.actions';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport SpatStorageMobileTable from './SpatStorageMobileTable';\nimport {\n IFarmResource,\n ILineResource,\n ISpatSeed,\n ISpatSource,\n ISpatStorageResource,\n} from '../../entities/farms.entities';\nimport { formatNumber } from '../../entities/util-functions';\nimport SpatStorageModal from './SpatStorageModal';\nimport SpatJourneyModal from '../../components/view-modals/SpatJourneyModal';\nimport {\n selectFarmsData,\n selectSpatStorages,\n} from '../../store/farms/farms.selector';\nimport { TBusinessType } from '../../entities/general.entities';\nimport { useLocation } from 'react-router-dom';\nimport { TLang } from '../../entities/ui.entities';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { labelRange } from '../../lib/common.helpers';\nimport DotsMenu from '../../components/shared/dropdown-menu/DotsMenu';\nimport './styles.scss';\nimport FlupsyModal from './FlupsyModal';\n\nconst columns = (lang: TLang | undefined) => [\n {\n title: 'ID',\n key: 'id',\n render: (x: ISpatStorageResource) => {x.id},\n },\n {\n title: translate(lang, 'Source'),\n key: 'source',\n render: (x: ISpatStorageResource) => {x.source},\n },\n {\n title: translate(lang, 'Seed type'),\n key: 'seed_type',\n render: (x: ISpatStorageResource) => {x.seed_type ?? '-'},\n },\n {\n title: translate(lang, 'Source line'),\n key: 'source_line',\n render: (x: ISpatStorageResource) => (\n \n {x?.source_line\n ? `${x?.source_line.farm.name} - ${x?.source_line.line_name}`\n : `${x?.src_line_name ?? ''}`}\n \n ),\n },\n {\n title: translate(lang, 'Destination Line'),\n key: 'destination_line',\n render: (x: ISpatStorageResource) => (\n \n {x?.destination_line\n ? `${x?.destination_line.farm.name} - ${x?.destination_line.line_name}`\n : `${x?.dst_line_name ?? ''}`}\n \n ),\n },\n {\n title: translate(lang, 'Collection date'),\n key: 'collection_date',\n render: (x: ISpatStorageResource) => (\n {defaultDateFormat(x.collection_date)}\n ),\n },\n {\n title: translate(lang, 'Seeded date'),\n key: 'seeded_date',\n render: (x: ISpatStorageResource) => (\n {defaultDateFormat(x.seeded_date)}\n ),\n },\n {\n title: translate(lang, 'Condition'),\n key: 'condition',\n render: (x: ISpatStorageResource) => {x.condition},\n },\n {\n title: translate(lang, 'Amount'),\n key: 'weight',\n render: (x: ISpatStorageResource) => (\n
\n
Total: {formatNumber(x.weight)}
\n
Available {formatNumber(x.available_weight ?? 0)}
\n
Harvested: {formatNumber(x.harvested_weight ?? 0)}
\n
\n {`Seeded: ${formatNumber(\n x.seedings?.reduce((p, c) => p + c.spat_amount, 0),\n )}`}\n
\n
\n ),\n },\n {\n title: translate(lang, 'Size'),\n key: 'size',\n render: (x: ISpatStorageResource) => (\n \n {labelRange(\n x.harvest?.shell_length,\n x.harvest?.shell_length_max ?? undefined,\n )}\n \n ),\n },\n {\n title: translate(lang, 'Stage'),\n key: 'stage',\n render: (x: ISpatStorageResource) => {x.stage},\n },\n];\n\nconst seedColumns = (type: TBusinessType, lang: TLang | undefined) => [\n {\n title: translate(lang, 'Farm Name'),\n key: 'farm',\n render: (x: ISpatSeed) => {x.line?.farm.name ?? ''},\n },\n {\n title: translate(lang, 'Line Name'),\n key: 'line',\n render: (x: ISpatSeed) => {x.line?.line_name ?? ''},\n },\n {\n title: translate(lang, 'Season'),\n key: 'season',\n render: (x: ISpatSeed) => {x.season_name},\n },\n {\n title:\n type === 'MUSSEL'\n ? `${translate(lang, 'Line Length')} (m)`\n : type === 'OYSTER'\n ? translate(lang, 'Basket count')\n : `${translate(lang, 'Tank Area')} (m²)`,\n key: 'line_length',\n render: (x: ISpatSeed) => (\n \n {type === 'MUSSEL'\n ? x.line_length\n : type === 'OYSTER'\n ? x.basket_count\n : x.tank_area}\n \n ),\n },\n {\n title: translate(lang, 'Amount'),\n key: 'amount',\n render: (x: ISpatSeed) => {formatNumber(x.spat_amount)},\n },\n {\n title: translate(lang, 'Date seeded'),\n key: 'planned_date_seed',\n render: (x: ISpatSeed) => (\n {defaultDateFormat(x.planned_date_seed)}\n ),\n },\n];\n\nconst SpatTrackItem: React.FC<{ spat: ISpatSource; c: boolean }> = ({\n spat,\n c,\n}) => {\n const spatStorages = useSelector(selectSpatStorages);\n const curStorage = spatStorages.find(x => x.id === spat.id);\n\n return (\n <>\n
\n Name: {spat.source}\n
\n Weight: {curStorage?.weight}\n
\n {curStorage?.source_line && (\n \n {`Harvested from ${curStorage.source_line.farm.name} - ${curStorage.source_line.line_name}`}\n \n )}\n
\n {c && (\n
\n \n
\n )}\n \n );\n};\n\nconst SpatTrackRow: React.FC<{ spats: ISpatSource[] }> = ({ spats }) => (\n
\n {spats.map((item: any, idx: number) => (\n \n ))}\n
\n);\n\nconst weightLabel = (spat: ISpatStorageResource) =>\n spat.type === 'MUSSEL'\n ? `${spat.available_weight} kg`\n : spat.type === 'OYSTER'\n ? `${spat.available_weight} pcs`\n : `${spat.available_weight} kg`;\n\nconst ArchiveModal: React.FC<{\n spatStorage: ISpatStorageResource;\n onClose: () => void;\n}> = ({ spatStorage, onClose }) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n\n const archiveClick = async () => {\n setDisabled(true);\n const res = await sendSingleRequest(\n { close_action: true, is_closed: true },\n 'PUT',\n `api/farm/spat-storage/${spatStorage.id}`,\n true,\n );\n if (res.status) {\n await dispatch(loadSpatStorages());\n onClose();\n } else {\n alert(translate(lang, res.data?.message ?? 'Server error'));\n setDisabled(false);\n }\n };\n const mortalityClick = async () => {\n const available = spatStorage.available_weight;\n setDisabled(true);\n const res = await sendSingleRequest(\n { close_action: true, loss: available },\n 'PUT',\n `api/farm/spat-storage/${spatStorage.id}`,\n true,\n );\n if (res.status) {\n await dispatch(loadSpatStorages());\n onClose();\n } else {\n alert(translate(lang, res.data?.message ?? 'Server error'));\n setDisabled(false);\n }\n };\n\n return (\n }\n width={600}\n >\n
\n
\n \n {`You are about to archive this spat storage, even though it still has ${weightLabel(\n spatStorage,\n )} available. What would you like to do?`}\n \n
\n
\n {spatStorage.seedings.length > 0 && (\n \n {`The spat is still hanging on lines: ${spatStorage.seedings\n .map(x => `${x.line?.farm.name} ${x.line?.line_name}`)\n .join(', ')}`}\n \n )}\n {spatStorage.available_weight &&\n spatStorage.available_weight >= spatStorage.weight && (\n \n {!spatStorage.source_line && !spatStorage.src_line_name\n ? 'The spat is currently fully harvested and not in the water'\n : `The spat came from ${\n spatStorage.source_line\n ? `${spatStorage.source_line.farm.name} - ${spatStorage.source_line.line_name}`\n : spatStorage.src_line_name\n } and is fully available now`}\n \n )}\n
\n
\n \n {`If the spat difference is because of mortality, please let us know`}\n \n
\n
\n \n {translate(lang, 'Cancel')}\n \n
\n \n {translate(lang, 'Archive')}\n \n
\n \n {'Treat difference as mortality'}\n \n
\n
\n \n );\n};\n\nconst typeOptions = [\n { id: '', value: '', label: 'All' },\n { id: 'MUSSEL', value: 'MUSSEL', label: 'Mussel' },\n { id: 'OYSTER', value: 'OYSTER', label: 'Oyster' },\n { id: 'SEAWEED', value: 'SEAWEED', label: 'Seaweed' },\n];\n\nconst SpatStoragesPage = () => {\n const width = useWidth();\n const dispatch = useDispatch();\n const query = new URLSearchParams(useLocation().search);\n\n const breadcrumbItems = getBreadcrumbMenu('SPAT_STORAGES');\n const { redirectToLine } = useMenuHandler();\n const spatStorages = useSelector(selectSpatStorages);\n const lang = useSelector(selectLang);\n const farms = useSelector(selectFarmsData);\n\n const [showModal, setShowModal] = useState(false);\n const [showFlupsyModal, setShowFlupsyModal] = useState(false);\n const [selectedItem, setSelectedItem] = useState();\n const [deleteShow, setDeleteShow] = useState(false);\n const [disable, setDisable] = useState(false);\n const [fltType, setFltType] = useState('AVL');\n const [journeyData, setJourneyData] = useState();\n const [loading, setLoading] = useState(false);\n const [pageOptions, setPageOptions] = useState({\n current: 1,\n pageSize: 7,\n });\n const [busType, setBusType] = useState(\n (query.get('type') as TBusinessType | undefined) ?? '',\n );\n const [filterFarm, setFilterFarm] = useState();\n const [filterLine, setFilterLine] = useState();\n const [archiveData, setArchiveData] = useState();\n\n const onAddClick = () => {\n setSelectedItem(undefined);\n setShowModal(true);\n };\n const showEditModal = (item: ISpatStorageResource) => {\n setShowModal(true);\n setSelectedItem(item);\n };\n const showDeleteModal = (item: ISpatStorageResource) => {\n setSelectedItem(item);\n setDeleteShow(true);\n };\n\n const onAddFLupsyClick = () => {\n setSelectedItem(undefined);\n setShowFlupsyModal(true);\n };\n const deleteSelectedItem = () => {\n if (!selectedItem) return;\n setDisable(true);\n sendSingleRequest(\n {},\n 'DELETE',\n `api/farm/spat-storage/${selectedItem.id}`,\n true,\n ).then(res => {\n setDeleteShow(false);\n setDisable(false);\n dispatch(loadSpatStorages());\n });\n };\n const redirectTo = (dataRow: ISpatSeed) => {\n if (dataRow.line) {\n redirectToLine(dataRow.line?.farm.id, dataRow?.line.id);\n }\n };\n const selectFarm = (id_str: string) => {\n const farm = farms.find(f => f.id === Number(id_str));\n setFilterFarm(farm);\n setFilterLine(undefined);\n };\n const selectLine = (id_str: string) => {\n const line = filterFarm?.lines.find(l => l.id === Number(id_str));\n setFilterLine(line);\n };\n const tableColumns = [\n ...columns(lang),\n {\n title: 'More',\n key: 'more',\n align: 'right',\n render: (x: ISpatStorageResource) => {\n let menus = [\n { label: translate(lang, 'Edit'), onClick: () => showEditModal(x) },\n {\n label: translate(lang, 'Delete'),\n onClick: () => showDeleteModal(x),\n },\n ];\n if (x.available_weight && x.available_weight > 0) {\n menus.push({\n label: translate(lang, 'Archive'),\n onClick: () => setArchiveData(x),\n });\n }\n return ;\n },\n },\n ] as ColumnsType;\n\n const filteredSpats = useMemo(() => {\n let result =\n fltType === 'ACV'\n ? spatStorages.filter(\n x =>\n (x.available_weight ?? 0) <= 0 &&\n (!x.harvest || x.harvest.is_catch_spat === true),\n )\n : spatStorages.filter(x => (x.available_weight ?? 0) > 0);\n if (busType.length > 0) {\n result = result.filter(x => x.type === busType);\n }\n if (filterFarm) {\n result = result.filter(x => x.source_line?.farm.id === filterFarm.id);\n }\n if (filterLine) {\n result = result.filter(x => x.source_line?.id === filterLine.id);\n }\n return result;\n }, [fltType, spatStorages, busType, filterFarm, filterLine]);\n\n const openJourney = async (id: number) => {\n const spatStorage = spatStorages.find(x => x.id === id);\n if (!spatStorage) return;\n\n setLoading(true);\n const res = await sendSingleRequest(\n {},\n 'GET',\n `api/farm/spats-journey/${id}`,\n true,\n );\n setLoading(false);\n\n if (res.status) {\n setJourneyData(res.data);\n } else {\n alert(translate(lang, res.data?.message ?? 'Server error'));\n }\n };\n\n useEffect(() => {\n dispatch(loadSpatStorages());\n }, [dispatch]);\n\n return (\n
\n {loading && (\n
\n \n
\n )}\n
\n {width > 768 ? (\n
\n \n \n {translate(lang, 'Baby Spat Storage (Flupsy)')}\n \n \n {translate(lang, 'Add Spat Storage')}\n \n
\n ) : (\n
\n \n {translate(lang, 'Add Spat Storage')}\n \n
\n )}\n
\n
\n
\n
\n setBusType(v as TBusinessType)}\n />\n
\n
\n setFltType(v)}\n />\n
\n
\n ({\n id: f.id.toString(),\n value: f.id.toString(),\n label: f.name,\n }))}\n value={filterFarm?.id.toString()}\n onChange={selectFarm}\n allowClear={true}\n showSearch={true}\n />\n
\n {filterFarm && (\n
\n ({\n id: l.id.toString(),\n value: l.id.toString(),\n label: l.line_name,\n }))}\n value={filterLine?.id.toString()}\n onChange={selectLine}\n allowClear={true}\n showSearch={true}\n />\n
\n )}\n
\n
\n {width > 768 ? (\n setPageOptions(po as any)}\n dataSource={filteredSpats}\n expandable={{\n expandedRowRender: d => (\n <>\n ({\n onClick: redirectTo.bind(null, dR),\n })}\n />\n \n \n ),\n expandIcon: ({ onExpand, record }) => (\n undefined}\n onClick={event => {\n event.stopPropagation();\n onExpand(record, event);\n }}\n >\n \n
\n ),\n }}\n onRow={(r: ISpatStorageResource) => ({\n onClick: () => openJourney(r.id),\n })}\n />\n ) : (\n \n )}\n
\n
\n
\n
\n {!!showModal && (\n {\n setShowModal(false);\n setSelectedItem(undefined);\n dispatch(loadSpatStorages());\n }}\n onCancel={() => {\n setSelectedItem(undefined);\n setShowModal(false);\n }}\n />\n )}\n {!!showFlupsyModal && (\n {\n setSelectedItem(undefined);\n setShowFlupsyModal(false);\n }}\n />\n )}\n {!!deleteShow && (\n setDeleteShow(false)}\n type='delete'\n title={translate(lang, 'Delete')}\n text={translate(lang, 'Are you sure to delete this data?')}\n disabled={disable}\n onConfirm={deleteSelectedItem}\n />\n )}\n {!!journeyData && (\n setJourneyData(undefined)}\n />\n )}\n {!!archiveData && (\n setArchiveData(undefined)}\n />\n )}\n \n );\n};\n\nexport default SpatStoragesPage;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIkAAABPCAYAAADfleZgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA2IDc5LjE2NDc1MywgMjAyMS8wMi8xNS0xMTo1MjoxMyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjMgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc3NkY4MEM1OTk4MjExRUNCRjAwRkI5MzRCOTYyNjE3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjc3NkY4MEM2OTk4MjExRUNCRjAwRkI5MzRCOTYyNjE3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Nzc2RjgwQzM5OTgyMTFFQ0JGMDBGQjkzNEI5NjI2MTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Nzc2RjgwQzQ5OTgyMTFFQ0JGMDBGQjkzNEI5NjI2MTciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Y6sXAAAAIOElEQVR42uxdTUhk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\"","import { useCallback, useEffect, useState } from 'react';\nimport { Table } from 'antd';\nimport { Link } from 'react-router-dom';\nimport {\n BreadcrumbComponent,\n Button,\n CaretDownIcon,\n ModalComponent,\n} from '../../components/shared';\nimport { useWidth } from '../../util/useWidth';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { loadInventories } from '../../store/inventories/inventories.actions';\nimport { ColumnsType } from 'antd/lib/table';\nimport { sendSingleRequest } from '../../apis';\nimport InventoryModal from './InventoryModal';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport getBreadcrumbMenu from '../../util/BreadcrumbMenu';\nimport { formatNumber } from '../../entities/util-functions';\nimport { selectInventories } from '../../store/inventories/inventories.selector';\nimport { IInventoryResource } from '../../entities/inventory.entities';\nimport { IFarmResource } from '../../entities/farms.entities';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\nimport DotsMenu from '../../components/shared/dropdown-menu/DotsMenu';\nimport { labelNumber } from '../../lib/common.helpers';\nimport './styles.scss';\n\ninterface IMusselRow extends IInventoryResource {\n performance?: number | null;\n}\n\nconst basicColumns = (lang: TLang | undefined) => [\n {\n title: 'ID',\n key: 'id',\n render: (x: IInventoryResource) => {x.id},\n },\n {\n title: translate(lang, 'Type'),\n key: 'type',\n render: (x: IInventoryResource) => {x.type},\n },\n {\n title: translate(lang, 'Name'),\n key: 'name',\n render: (x: IInventoryResource) => {x.name},\n },\n {\n title: translate(lang, 'Quantity'),\n key: 'quantity',\n render: (x: IInventoryResource) => {x.quantity},\n },\n {\n title: translate(lang, 'Available Quantity'),\n key: 'available_quantity',\n render: (x: IInventoryResource) => {x.available_quantity},\n },\n {\n title: translate(lang, 'Price'),\n key: 'price',\n render: (x: IInventoryResource) => {`$ ${x.price}`},\n },\n {\n title: translate(lang, 'Performance'),\n key: 'performance',\n render: (x: IMusselRow) => (\n \n {x.performance\n ? `1 float - ${formatNumber(\n x.performance < 1000 ? x.performance : x.performance / 1000,\n )} ${x.performance < 1000 ? 'kg' : 'tons'}`\n : '-'}\n \n ),\n },\n {\n title: translate(lang, 'Level'),\n key: 'level',\n render: (x: IMusselRow) => (\n {x.level === 1 ? 'Surface' : 'Submerged'}\n ),\n },\n {\n title: translate(lang, 'Volume'),\n key: 'volume',\n render: (x: IInventoryResource) => (\n {labelNumber(x.volume, 'm³', '-')}\n ),\n },\n];\n\ninterface ISubRow {\n farm_id: number;\n line_id: number;\n farm_number: string;\n line_name: string;\n current_stock: number;\n last_float_job: string;\n last_assessment_date: string | null;\n}\n\nconst getSubRows = (\n inventory: IInventoryResource,\n farms: IFarmResource[],\n): ISubRow[] => {\n let result: ISubRow[] = [];\n\n for (let farm of farms) {\n for (let line of farm.lines) {\n if (!line.growing_cycle) continue;\n\n const found = line.growing_cycle.inventories_sum.find(\n x => x.inventory_id === inventory.id,\n );\n if (!found) continue;\n\n const tmp = inventory.inventory_seeds.filter(x => x.line_id === line.id);\n if (tmp.length <= 0) continue;\n\n tmp.sort((a, b) => (a.manage_date > b.manage_date ? -1 : 1));\n const lastItem = tmp[0];\n\n result.push({\n farm_id: farm.id,\n line_id: line.id,\n farm_number: farm.farm_number,\n line_name: line.line_name,\n current_stock: found.quantity,\n last_float_job: defaultDateFormat(lastItem.manage_date) ?? '-',\n last_assessment_date: defaultDateFormat(\n line.growing_cycle.last_assessment?.assessment_date,\n '-',\n ),\n });\n }\n }\n\n return result;\n};\n\nconst subColumns = (lang: TLang | undefined) => [\n {\n title: translate(lang, 'Farm Number'),\n key: 'farm_number',\n render: (x: ISubRow) => {x.farm_number},\n },\n {\n title: translate(lang, 'Line name'),\n key: 'line_name',\n render: (x: ISubRow) => {x.line_name},\n },\n {\n title: translate(lang, 'Current stock'),\n key: 'current_stock',\n render: (x: ISubRow) => {x.current_stock},\n },\n {\n title: translate(lang, 'Last float job (Date)'),\n key: 'last_float_job',\n render: (x: ISubRow) => {x.last_float_job},\n },\n {\n title: translate(lang, 'Last assessment date'),\n key: 'last_assessment_date',\n render: (x: ISubRow) => {x.last_assessment_date},\n },\n {\n title: '',\n key: 'right',\n },\n];\n\nconst InventoriesPage = () => {\n const width = useWidth();\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n const inventories = useSelector(selectInventories);\n\n const { redirectToLine } = useMenuHandler();\n const breadcrumbItems = getBreadcrumbMenu('INVENTORIES');\n\n const [showModal, setShowModal] = useState(false);\n const [modalTitle, setModalTitle] = useState('');\n const [deleteShow, setDeleteShow] = useState(false);\n const [disable, setDisable] = useState(false);\n const [selectedItem, setSelectedItem] = useState(null);\n const [performs, setPerforms] =\n useState>();\n\n const loadData = useCallback(async () => {\n await dispatch(loadInventories());\n const res = await sendSingleRequest(\n {},\n 'GET',\n 'api/inventory/performances',\n true,\n );\n if (res.status) {\n setPerforms(res.data);\n }\n }, [dispatch]);\n\n const showAddModal = () => {\n setSelectedItem(null);\n setModalTitle('Add new inventory');\n setShowModal(true);\n };\n const showEditModal = (evt: any, item: any) => {\n setModalTitle('Edit inventory');\n setSelectedItem(item);\n setShowModal(true);\n };\n const showDeleteModal = (evt: any, item: any) => {\n setSelectedItem(item);\n setDeleteShow(true);\n };\n const confirmSubmit = () => {\n setDisable(false);\n setShowModal(false);\n };\n const deleteSelectedItem = async () => {\n if (!selectedItem) return;\n setDisable(true);\n const res = await sendSingleRequest(\n {},\n 'DELETE',\n `api/inventory/inventories/${selectedItem.id}`,\n true,\n );\n if (res.status) {\n setDeleteShow(false);\n setDisable(false);\n loadData();\n } else {\n alert(res.data?.message ?? 'Server error');\n }\n };\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n const tableColumns = [\n ...basicColumns(lang),\n {\n key: 'more',\n title: 'More',\n align: 'right',\n render: (x: IInventoryResource) => (\n showEditModal(evt, x),\n },\n {\n label: translate(lang, 'Delete'),\n onClick: evt => showDeleteModal(evt, x),\n },\n ]}\n />\n ),\n },\n ] as ColumnsType;\n\n const rowsData = inventories.map(x => {\n const t = performs?.find(y => y.id === x.id);\n return { ...x, performance: t === undefined ? null : t.performance };\n });\n\n return (\n
\n
\n {width > 768 ? (\n
\n \n \n \n \n
\n ) : (\n
\n \n {translate(lang, 'Add Inventory')}\n \n
\n )}\n
\n
\n {\n return (\n ({\n onClick: () => redirectToLine(dR.farm_id, dR.line_id),\n })}\n />\n );\n },\n expandIcon: ({ onExpand, record }) => (\n undefined}\n onClick={event => {\n event.stopPropagation();\n onExpand(record, event);\n }}\n >\n \n
\n ),\n }}\n />\n
\n
\n
\n {showModal && (\n setShowModal(false)}\n onConfirm={confirmSubmit}\n data={selectedItem}\n updateId={selectedItem?.id ?? undefined}\n />\n )}\n setDeleteShow(false)}\n type='delete'\n title={translate(lang, 'Delete')}\n text={translate(lang, 'Are you sure to delete this data?')}\n disabled={disable}\n onConfirm={deleteSelectedItem}\n />\n \n );\n};\n\nexport default InventoriesPage;\n","import { useEffect, useMemo, useState } from 'react';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Datepicker,\n Dropdown,\n Input,\n Subtitle,\n} from '../../components/shared';\nimport { Modal } from 'antd';\nimport { useSelector } from 'react-redux';\nimport { selectUtils } from '../../store/utils/utils.selector';\nimport moment from 'moment';\nimport { downloadPDF } from '../../apis';\nimport {\n selectMusselFarms,\n selectOysterFarms,\n} from '../../store/farms/farms.selector';\nimport { IHarvestResource } from '../../entities/growing.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface IField {\n key: string;\n type: 'select' | 'bool' | 'string' | 'date';\n label: string;\n}\n\nconst musselFields: IField[] = [\n {\n key: 'season',\n type: 'select',\n label: 'Season',\n },\n {\n key: 'complete_date',\n type: 'date',\n label: 'Date of harvest',\n },\n {\n key: 'is_full',\n type: 'bool',\n label: 'Is Full ?',\n },\n {\n key: 'is_final',\n type: 'bool',\n label: 'Is Final ?',\n },\n {\n key: 'amount',\n type: 'string',\n label: 'Amount (kg)',\n },\n {\n key: 'bags_quantity',\n type: 'string',\n label: 'Number of bags',\n },\n {\n key: 'id',\n type: 'string',\n label: 'I DECLARE THAT THE FOLLOWING WAS HARVESTED:',\n },\n {\n key: 'tag_color',\n type: 'string',\n label: 'Tag color',\n },\n {\n key: 'port_of_unload',\n type: 'select',\n label: 'Port of unload',\n },\n {\n key: 'crop_owner',\n type: 'string',\n label: 'Crop owner',\n },\n {\n key: 'farm_name',\n type: 'string',\n label: 'Farm name',\n },\n {\n key: 'line_name',\n type: 'string',\n label: 'Line name',\n },\n {\n key: 'growing_area',\n type: 'select',\n label: 'Growing area',\n },\n {\n key: 'delivered_to',\n type: 'select',\n label: 'Delivered to',\n },\n {\n key: 'packhouse',\n type: 'select',\n label: 'Packhouse',\n },\n {\n key: 'shell_size',\n type: 'string',\n label: 'Shell size',\n },\n {\n key: 'shell_condition',\n type: 'string',\n label: 'Shell condition',\n },\n {\n key: 'mussel_type',\n type: 'string',\n label: 'Mussel type',\n },\n {\n key: 'mussels',\n type: 'string',\n label: 'Performance',\n },\n {\n key: 'meat_yield',\n type: 'string',\n label: 'Meat yield',\n },\n {\n key: 'blues',\n type: 'string',\n label: 'Biofouling (e.g. Blues/Oysters)',\n },\n {\n key: 'marine_waste',\n type: 'string',\n label: 'Marine waste',\n },\n {\n key: 'backbone_ok',\n type: 'bool',\n label: 'Backbone OK',\n },\n {\n key: 'backbone_replace',\n type: 'bool',\n label: 'Backbone replace',\n },\n {\n key: 'lights_ids_in_place',\n type: 'bool',\n label: 'Lights IDs in place',\n },\n {\n key: 'flotation_on_farm',\n type: 'bool',\n label: 'Flotation on farm',\n },\n {\n key: 'rope_bags_quantity',\n type: 'string',\n label: 'Number of rope bags',\n },\n {\n key: 'product_left_on_line',\n type: 'string',\n label: 'Product left on line',\n },\n {\n key: 'temperature',\n type: 'string',\n label: 'Temperature (°C)',\n },\n {\n key: 'windy',\n type: 'string',\n label: 'Windy (m/s)',\n },\n {\n key: 'harvester_name',\n type: 'string',\n label: 'Harvester name',\n },\n {\n key: 'comment',\n type: 'string',\n label: 'Comment',\n },\n ],\n oysterFields: IField[] = [\n {\n key: 'batch_no',\n type: 'string',\n label: 'Batch No',\n },\n {\n key: 'harvest_number',\n type: 'string',\n label: 'Harvest Number',\n },\n {\n key: 'growing_area',\n type: 'select',\n label: 'Growing Area',\n },\n {\n key: 'start_time',\n type: 'string',\n label: 'Start time',\n },\n {\n key: 'finish_time',\n type: 'string',\n label: 'Finish time',\n },\n {\n key: 'complete_date',\n type: 'date',\n label: 'Date of harvest',\n },\n ];\n\ninterface ViewProps {\n form: any;\n setForm: (d: any) => void;\n onNextClick: () => void;\n lastHarvest?: IHarvestResource | null;\n}\n\nconst MusselFormView = ({ form, setForm, onNextClick }: ViewProps) => {\n const lang = useSelector(selectLang);\n const farms = useSelector(selectMusselFarms);\n const utils = useSelector(selectUtils);\n const options = [\n ...utils,\n ...farms.map(x => ({\n name: `${x.name} (${x.farm_number})`,\n type: 'growing_area',\n })),\n ];\n\n const updateForm = (key: string, val: any) => {\n setForm({ ...form, [key]: val });\n };\n\n useEffect(() => {\n setForm((prv: any) => ({\n ...prv,\n growing_area:\n prv.growing_area || farms.length <= 0\n ? prv.growing_area\n : `${farms[0].name} (${farms[0].farm_number})`,\n }));\n }, [farms]);\n\n return (\n
\n {musselFields.map((field, idx) => (\n
\n {field.type === 'select' ? (\n
\n x.type === field.key)\n .map(x => ({ id: x.name, value: x.name, label: x.name })),\n ]}\n value={form[field.key] ?? undefined}\n onChange={v => updateForm(field.key, v)}\n />\n
\n ) : field.type === 'bool' ? (\n
\n updateForm(field.key, e.target.checked)}\n />\n
\n ) : field.type === 'date' ? (\n
\n \n e &&\n updateForm(\n field.key,\n moment(e.toDate().getTime()).format('DD/MM/YYYY'),\n )\n }\n />\n
\n ) : (\n
\n updateForm(field.key, e.target.value)}\n />\n
\n )}\n
\n ))}\n
\n \n {translate(lang, 'Next')}\n \n
\n
\n );\n};\n\nconst OysterFormView = ({\n form,\n setForm,\n onNextClick,\n lastHarvest,\n}: ViewProps) => {\n const lang = useSelector(selectLang);\n const farms = useSelector(selectOysterFarms);\n const utils = useSelector(selectUtils);\n const options = [\n ...utils,\n ...farms.map(x => ({\n name: `${x.name} (${x.farm_number})`,\n type: 'growing_area',\n })),\n ];\n const linesOption = useMemo(() => {\n let res: Array<{\n farm_name: string;\n line_id: string;\n line_name: string;\n spat_num: string;\n }> = [];\n for (let farm of farms) {\n for (let line of farm.lines) {\n if (!line.growing_cycle || !line.growing_cycle.main_seed.spat_storage)\n continue;\n res.push({\n farm_name: farm.name,\n line_id: line.id.toString(),\n line_name: `${farm.name} - ${line.line_name}`,\n spat_num: line.growing_cycle.main_seed.spat_storage.source,\n });\n }\n }\n return res;\n }, [farms]);\n\n const updateForm = (key: string, val: any) => {\n setForm({ ...form, [key]: val });\n };\n const selectLines = (lines: string[]) => {\n const batch = linesOption\n .filter(x => lines.includes(x.line_id))\n .map(x => x.spat_num)\n .filter((v, i, a) => a.indexOf(v) === i)\n .join(',');\n const growingArea = linesOption\n .filter(x => lines.includes(x.line_id))\n .map(x => x.farm_name)\n .filter((v, i, a) => a.indexOf(v) === i)\n .join(',');\n setForm((prv: any) => ({\n ...prv,\n batch_no: batch,\n lines,\n growing_area: growingArea ? growingArea : prv.growing_area,\n }));\n };\n\n useEffect(() => {\n setForm((prv: any) => ({\n ...prv,\n growing_area:\n prv.growing_area || farms.length <= 0\n ? prv.growing_area\n : `${farms[0].name} (${farms[0].farm_number})`,\n }));\n }, [farms]);\n\n return (\n
\n
\n ({\n id: x.line_id,\n value: x.line_id,\n label: x.line_name,\n }))}\n value={form?.lines}\n onChange={(v: any) => selectLines(v)}\n />\n
\n {oysterFields.map((field, idx) => (\n
\n {field.key === 'harvest_number' ? (\n
\n updateForm('harvest_number', e.target.value)}\n />\n
\n ) : field.type === 'select' ? (\n
\n x.type === field.key)\n .map(x => ({ id: x.name, value: x.name, label: x.name })),\n ]}\n value={form[field.key] ?? undefined}\n onChange={v => updateForm(field.key, v)}\n />\n
\n ) : field.type === 'bool' ? (\n
\n updateForm(field.key, e.target.checked)}\n />\n
\n ) : field.type === 'date' ? (\n
\n \n e &&\n updateForm(\n field.key,\n moment(e.toDate().getTime()).format('DD/MM/YYYY'),\n )\n }\n />\n
\n ) : (\n
\n updateForm(field.key, e.target.value)}\n />\n
\n )}\n
\n ))}\n
\n \n {translate(lang, 'Next')}\n \n
\n
\n );\n};\n\nconst openPDF = (file: any) => {\n if (!file) return;\n const blob = new Blob([file], { type: 'application/pdf' });\n const url = window.URL.createObjectURL(blob);\n window.open(url, '_blank');\n};\n\ninterface Props {\n lastHarvest?: IHarvestResource | null;\n}\n\nconst HarvestPDFCodeButton = ({ lastHarvest }: Props) => {\n const lang = useSelector(selectLang);\n\n const [opened, setOpened] = useState(false);\n const [type, setType] = useState<'mussel' | 'oyster'>();\n const [form, setForm] = useState({});\n const [paperQuantity, setPaperQuantity] = useState(1);\n const [showFinal, setShowFinal] = useState(false);\n const [disabled, setDisabled] = useState(false);\n\n const title =\n type === 'mussel'\n ? 'Mussel harvest PDF form'\n : type === 'oyster'\n ? 'Oyster harvest PDF form'\n : 'What type of PDF form do you want to print?';\n\n const modalClose = () => {\n setOpened(false);\n setType(undefined);\n setPaperQuantity(1);\n setForm({});\n setShowFinal(false);\n setDisabled(false);\n };\n const confirmClick = async () => {\n if (!type || !paperQuantity || paperQuantity <= 0) return;\n\n setDisabled(true);\n const res = await downloadPDF(\n { ...form, type, paper_quantity: paperQuantity },\n 'POST',\n 'api/harvest-qr-form',\n );\n setDisabled(false);\n if (res.data) {\n openPDF(res.data);\n modalClose();\n } else {\n window.alert(res.data?.message ?? 'Failed to print the form');\n }\n };\n\n return (\n
\n setOpened(true)}\n >\n {translate(lang, 'Print Empty Declaration Forms')}\n \n {opened && (\n }\n >\n
\n
\n \n {title}\n \n
\n {showFinal ? (\n
\n setPaperQuantity(Number(e.target.value))}\n />\n
\n \n {translate(lang, 'Confirm')}\n \n
\n
\n ) : (\n <>\n {type === 'mussel' ? (\n setShowFinal(true)}\n />\n ) : type === 'oyster' ? (\n setShowFinal(true)}\n lastHarvest={lastHarvest}\n />\n ) : (\n
\n
\n setType('mussel')}\n >\n {translate(lang, 'Mussel harvest PDF form')}\n \n
\n
\n setType('oyster')}\n >\n {translate(lang, 'Oyster harvest PDF form')}\n \n
\n
\n )}\n \n )}\n
\n \n )}\n
\n );\n};\n\nexport default HarvestPDFCodeButton;\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport {\n Button,\n Datepicker,\n Dropdown,\n Spinner,\n Title,\n} from '../../components/shared';\nimport { Bar } from 'react-chartjs-2';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Tooltip,\n Legend,\n} from 'chart.js';\nimport {\n defaultDateFormat,\n toSecond,\n} from '../../util/toggleSecondMillisecond';\nimport { Table } from 'antd';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport { formatNumber, numberToMoneyStr } from '../../entities/util-functions';\nimport { Link } from 'react-router-dom';\nimport moment from 'moment';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport {\n IHarvestResource,\n IMusselHarvest,\n IOysterHarvest,\n} from '../../entities/growing.entities';\nimport HarvestPDFCodeButton from './HarvestPDFCodeButton';\nimport { IFarmResource } from '../../entities/farms.entities';\nimport { selectAccount } from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\nChartJS.register(CategoryScale, LinearScale, BarElement, Tooltip, Legend);\n\nconst options = {\n responsive: true,\n plugins: {\n legend: {\n position: 'top' as const,\n },\n title: {\n display: true,\n text: 'Chart.js Bar Chart',\n },\n },\n};\n\ninterface IRow {\n id: number;\n season: string;\n date: number;\n farm: string;\n line: string;\n amount: string;\n length: string;\n income: string;\n is_full: boolean;\n quantity: string;\n}\n\nconst convertRow = (row: IHarvestResource, farms: IFarmResource[]) => {\n const farm = farms.find(x => x.id === row.line.farm_id) as IFarmResource;\n const amount = row.is_waste\n ? 'Stripped to waste'\n : farm.type === 'MUSSEL'\n ? `${formatNumber((row as IMusselHarvest).amount)} kg`\n : `${formatNumber((row as IOysterHarvest).amount_dz)} dozens`;\n const length = row.is_waste\n ? ''\n : farm.type === 'MUSSEL'\n ? `${(row as IMusselHarvest).line_length} m`\n : row.line_length == null\n ? ''\n : `${row.line_length} ${(row.line as any).farming_method}`;\n const quantity = row.is_waste\n ? ''\n : farm.type === 'MUSSEL'\n ? `${(row as IMusselHarvest).bags_quantity ?? 0} bags`\n : `${row.bags_quantity ?? 0} trays`;\n const income = row.is_waste ? '' : `$${numberToMoneyStr(row.income ?? 0)}`;\n return {\n id: row.id,\n season: row.season_name,\n date: row.complete_date,\n farm: farm.name,\n line: row.line.line_name,\n amount,\n length,\n income,\n is_full: row.is_full,\n quantity,\n };\n};\n\nconst columns: any = [\n {\n key: 'id',\n title: 'ID',\n dataIndex: 'id',\n render: (v: number) => {v},\n },\n {\n key: 'season',\n title: 'Season',\n dataIndex: 'season',\n render: (x: string) => {x},\n },\n {\n key: 'date',\n title: 'Date',\n dataIndex: 'date',\n render: (x: number) => {defaultDateFormat(x)},\n },\n {\n key: 'farm',\n title: 'Farm',\n dataIndex: 'farm',\n render: (x: string) => {x},\n },\n {\n key: 'line',\n title: 'Line',\n dataIndex: 'line',\n render: (x: string) => {x},\n },\n {\n key: 'tones',\n title: 'Amount',\n dataIndex: 'amount',\n render: (x: string) => {x},\n },\n {\n key: 'income',\n title: 'Income',\n dataIndex: 'income',\n render: (x: string) => {x},\n },\n {\n key: 'line_length',\n title: 'Harvested length/containers',\n dataIndex: 'length',\n render: (x: string) => {x},\n },\n {\n key: 'is_full',\n title: 'F/P',\n dataIndex: 'is_full',\n render: (x: boolean) => {!x ? 'Partial' : 'Full'},\n },\n {\n key: 'quantity',\n title: 'Volume Quantity / Number of Trays',\n dataIndex: 'quantity',\n render: (x: string) => {x},\n align: 'left',\n },\n];\n\nconst colors = [\n '#0d88e6',\n '#fd7f6f',\n '#7eb0d5',\n '#b2e061',\n '#bd7ebe',\n '#ffb55a',\n '#ffee65',\n '#beb9db',\n '#fdcce5',\n '#8bd3c7',\n '#4421af',\n '#1a53ff',\n];\n\ninterface IResponse {\n data: IHarvestResource[];\n offset: number;\n limit: number;\n count: number;\n}\n\ninterface IFltOption {\n season?: string;\n date_from: number;\n date_to: number;\n farm_id?: number;\n line_id?: number;\n}\n\nconst getHarvests = async (\n filter: IFltOption | undefined = undefined,\n pageOptions: any = undefined,\n): Promise => {\n let params = {\n season_name: filter?.season ?? undefined,\n date_from: filter?.date_from ? toSecond(filter.date_from) : undefined,\n date_to: filter?.date_to ? toSecond(filter.date_to) : undefined,\n farm_id: filter?.farm_id ?? undefined,\n line_id: filter?.line_id ?? undefined,\n offset: pageOptions\n ? (pageOptions.current - 1) * pageOptions.pageSize\n : undefined,\n limit: pageOptions ? pageOptions.pageSize : 10,\n };\n const res = await sendSingleRequest(\n params,\n 'GET',\n 'api/overview/harvests',\n true,\n );\n return res.status ? res.data : undefined;\n};\n\nconst SummaryHarvestPage = () => {\n const account = useSelector(selectAccount);\n const farmsData = useSelector(selectFarmsData);\n const lang = useSelector(selectLang);\n\n const [harvests, setHarvests] = useState([]);\n const [lastHarvest, setLastHarvest] = useState();\n const [bestPerformingData, setBestPerformingData] = useState();\n const [catchSpatMonthData, setCatchSpatMonthData] = useState();\n const [lineData, setLineData] = useState();\n const [monthData, setMonthData] = useState();\n const [pageOptions, setPageOptions] = useState({\n current: 1,\n pageSize: 10,\n total: 0,\n });\n const { redirectToHarvestDetail } = useMenuHandler();\n const [fltOpt, setFltOpt] = useState({\n date_from: moment().toDate().getTime(),\n date_to: moment().toDate().getTime(),\n });\n const [seasons, setSeasons] = useState([\n { id: 'All', label: 'All', value: 'All' },\n ]);\n const [loading, setLoading] = useState(31);\n\n const loadData = useCallback(() => {\n setLoading(0);\n getHarvests().then(res => {\n setLoading(p => p | 1);\n if (res) {\n const tmpHv: IHarvestResource[] = res.data;\n setLastHarvest(tmpHv.find(x => !!x.harvest_number));\n setHarvests(tmpHv.map(x => convertRow(x, farmsData)));\n setPageOptions({ ...pageOptions, total: res.count });\n\n const dateMin = tmpHv.reduce(\n (p, c) => (p > c.complete_date ? c.complete_date : p),\n Date.now(),\n );\n const dateMax = tmpHv.reduce(\n (p, c) => (p < c.complete_date ? c.complete_date : p),\n 0,\n );\n setFltOpt(prv => ({\n ...prv,\n date_from: 1000 * dateMin,\n date_to: 1000 * dateMax,\n }));\n const uniqueSeasons = Array.from(\n new Set(tmpHv.map(x => x.season_name)),\n );\n let ss = [\n { id: 'All', label: 'All', value: 'All' },\n ...uniqueSeasons.map(x => ({\n id: x,\n label: x,\n value: x,\n })),\n ];\n setSeasons(ss);\n }\n });\n sendSingleRequest(\n { type: 'normal' },\n 'GET',\n 'api/overview/harvest-summary',\n true,\n ).then(res => {\n setLoading(p => p | 2);\n if (res.status) setMonthData(res.data);\n });\n sendSingleRequest(\n { type: 'catch_spat' },\n 'GET',\n 'api/overview/harvest-summary',\n true,\n ).then(res => {\n setLoading(p => p | 4);\n if (res.status) setCatchSpatMonthData(res.data);\n });\n sendSingleRequest(\n { type: 'line' },\n 'GET',\n 'api/overview/harvest-summary',\n true,\n ).then(res => {\n setLoading(p => p | 8);\n if (res.status) setLineData(res.data);\n });\n sendSingleRequest({}, 'GET', 'api/overview/best-perform-line', true).then(\n res => {\n setLoading(p => p | 16);\n if (res.status) setBestPerformingData(res.data);\n },\n );\n }, []);\n\n const handlePageChange = async (pageOptions: any) => {\n const res = await getHarvests(fltOpt, pageOptions);\n if (!res) return;\n const tmpHv: IHarvestResource[] = res.data;\n setHarvests(tmpHv.map(x => convertRow(x, farmsData)));\n setPageOptions({ ...pageOptions, total: res.count });\n };\n const changeFilter = async (filter: IFltOption) => {\n const res = await getHarvests(filter, pageOptions);\n if (!res) return;\n const tmpHv: IHarvestResource[] = res.data;\n setHarvests(tmpHv.map(x => convertRow(x, farmsData)));\n setPageOptions({ ...pageOptions, total: res.count });\n setFltOpt(filter);\n };\n const getHarvestPerYearDataSets = (data: any) => {\n const labels: any = [];\n const datasets: any = [];\n let i = 0;\n for (let y in data) {\n const d: any = {\n label: y,\n data: [],\n backgroundColor: colors[i],\n };\n i = (i + 1) % 12;\n for (let m in data[y]) {\n if (!labels.includes(m)) labels.push(m);\n d.data.push(data[y][m]);\n }\n datasets.push(d);\n }\n return {\n labels,\n datasets,\n };\n };\n const getBestPerformingDataSets = (data: any) => {\n const labels: any = [];\n const datasets: any = [];\n let i = 0;\n for (let f in data) {\n const d: any = {\n label: f,\n data: [],\n backgroundColor: colors[i],\n };\n i = (i + 1) % 12;\n for (let m in data[f]) {\n if (!labels.includes(m)) labels.push(m);\n d.data.push(data[f][m]);\n }\n datasets.push(d);\n }\n return {\n labels,\n datasets,\n };\n };\n\n const farmsOption = [\n { id: 'All', value: 'ALL', label: 'All' },\n ...farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n })),\n ];\n const linesOption = fltOpt.farm_id\n ? [\n { id: 'All', value: '', label: 'All' },\n ...(farmsData\n .find(x => x.id === fltOpt.farm_id)\n ?.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n })) ?? []),\n ]\n : null;\n\n const filterFarmChange = (v: string) => {\n const f = v === 'ALL' ? undefined : farmsData.find(x => x.id === Number(v));\n changeFilter({ ...fltOpt, farm_id: f?.id, line_id: undefined });\n };\n const filterLineChange = (v: string) => {\n if (v === 'ALL') {\n changeFilter({ ...fltOpt, line_id: undefined });\n } else {\n const f = farmsData.find(x => x.lines.some(y => y.id === Number(v)));\n const l = f?.lines.find(x => x.id === Number(v));\n changeFilter({ ...fltOpt, line_id: l?.id });\n }\n };\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return (\n
\n
\n
\n \n {translate(lang, 'Harvest Stats')}\n \n
\n \n \n \n \n
\n
\n
\n
\n
\n {!(loading & 2) ? (\n
\n \n
\n ) : (\n
\n
\n {translate(lang, 'Harvest per year')}\n
\n \n
\n )}\n
\n
\n {!(loading & 4) ? (\n
\n \n
\n ) : (\n
\n
\n {translate(lang, 'Harvests of spat catch per year')}\n
\n \n
\n )}\n
\n
\n
\n
\n {!(loading & 8) ? (\n
\n \n
\n ) : (\n
\n
\n {translate(lang, 'Best harvested lines')}\n
\n \n
\n )}\n
\n
\n {!(loading & 16) ? (\n
\n \n
\n ) : (\n
\n
\n {translate(lang, 'Best performing lines by harvest tones')}\n
\n \n
\n )}\n
\n
\n
\n
\n
\n
\n Number(x.id) === fltOpt.farm_id)?.id ??\n 'ALL'\n }\n onChange={filterFarmChange}\n />\n
\n
\n Number(x.id) === fltOpt.line_id)\n ?.id ?? 'ALL'\n }\n onChange={filterLineChange}\n disabled={!linesOption}\n />\n
\n
\n \n e &&\n changeFilter({\n ...fltOpt,\n date_from: e.toDate().getTime(),\n })\n }\n />\n
\n
\n \n e &&\n changeFilter({ ...fltOpt, date_to: e.toDate().getTime() })\n }\n />\n
\n
\n \n changeFilter({\n ...fltOpt,\n season: v.length <= 0 ? undefined : v,\n })\n }\n />\n
\n
\n
\n
\n x.key !== 'income')\n .map((x: any) => ({\n ...x,\n title: translate(lang, x.title),\n }))\n : columns.map((x: any) => ({\n ...x,\n title: translate(lang, x.title),\n }))\n }\n dataSource={harvests}\n onRow={h => ({\n onClick: () => redirectToHarvestDetail(h.id),\n })}\n />\n
\n
\n
\n
\n
\n );\n};\n\nexport default SummaryHarvestPage;\n","import { useMemo, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\nimport { Dropdown, Input, Subtitle, Title } from '../../components/shared';\nimport { IMusselLineResource as IMusselLine } from '../../entities/farms.entities';\nimport {\n defaultDateFormat,\n toMillisecond,\n} from '../../util/toggleSecondMillisecond';\nimport { Table } from 'antd';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport { selectMusselFarms } from '../../store/farms/farms.selector';\nimport { selectUserMeta } from '../../store/auth/auth.selector';\nimport {\n amountDays,\n calcLineLastSize,\n getEstHarvestDate,\n getLineStatus,\n} from '../../lib/farm.helpers';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\nimport moment from 'moment';\nimport { selectAllTags } from '../../store/extra/extra.selector';\nimport { calcDiffDays } from '../../lib/common.helpers';\nimport { formatNumber } from '../../entities/util-functions';\nimport './styles.scss';\n\nconst getLastAssDate = (line: IMusselLine) =>\n line.growing_cycle?.last_assessment?.assessment_date ?? null;\n\nconst sizeRange = (line: IMusselLine) => {\n const shellSize = calcLineLastSize(line);\n return shellSize ? `${shellSize.min}-${shellSize.max} mm` : '-';\n};\n\nconst compareReady = (a: IMusselLine, b: IMusselLine) => {\n if (a.growing_cycle) {\n if (!b.growing_cycle) return -1;\n\n if (a.growing_cycle.ready_harvest) {\n return b.growing_cycle.ready_harvest\n ? a.growing_cycle.ready_harvest - b.growing_cycle.ready_harvest\n : -1;\n } else {\n if (b.growing_cycle.ready_harvest) return 1;\n\n const adt = getEstHarvestDate(a) ?? 0;\n const bdt = getEstHarvestDate(b) ?? 0;\n\n return adt - bdt;\n }\n } else {\n return b.growing_cycle ? 1 : 0;\n }\n};\n\nconst options = (lang: TLang | undefined) => [\n { id: '0', label: translate(lang, 'All'), value: 'all' },\n { id: '1', label: translate(lang, 'Oldest line'), value: 'oldest_line' },\n {\n id: '2',\n label: translate(lang, 'Oldest assessment'),\n value: 'oldest_assessment',\n },\n {\n id: '3',\n label: translate(lang, 'Ready to harvest'),\n value: 'ready_harvest',\n },\n { id: '4', label: translate(lang, 'Catching Spat'), value: 'catch_spat' },\n {\n id: '5',\n label: translate(lang, 'Needing Assessment'),\n value: 'require_assessment',\n },\n {\n id: '6',\n label: translate(lang, 'Recent Assessment'),\n value: 'recent_assessment',\n },\n { id: '7', label: translate(lang, 'Empty Lines'), value: 'empty_lines' },\n];\n\nconst columns = (line_assess_expire_days: number, lang: TLang | undefined) => [\n {\n title: translate(lang, 'Farm'),\n key: 'farm',\n render: (x: IMusselLine) => (\n <>\n {x.farm_name}\n
\n {x.farm_number}\n \n ),\n sorter: (a: IMusselLine, b: IMusselLine) =>\n a.farm_name.localeCompare(b.farm_name),\n },\n {\n title: translate(lang, 'Line'),\n key: 'line_name',\n render: (x: IMusselLine) => {x.line_name},\n sorter: (a: IMusselLine, b: IMusselLine) =>\n a.line_name.localeCompare(b.line_name),\n },\n {\n title: translate(lang, 'Length'),\n key: 'length',\n render: (x: IMusselLine) => (\n {x.growing_cycle?.current_line_length ?? '-'}\n ),\n sorter: (a: IMusselLine, b: IMusselLine) =>\n (a.growing_cycle?.current_line_length ?? -1) -\n (b.growing_cycle?.current_line_length ?? -1),\n },\n {\n title: translate(lang, 'Date seeded'),\n key: 'date_seeded',\n render: (x: IMusselLine) => (\n <>\n {x.growing_cycle ? (\n defaultDateFormat(x.growing_cycle.main_seed.planned_date_seed)\n ) : (\n
\n \n {translate(lang, 'Line empty for')}\n \n \n {amountDays(x.line_idle)}\n \n
\n )}\n \n ),\n sorter: (a: IMusselLine, b: IMusselLine) => {\n if (a.growing_cycle) {\n return b.growing_cycle\n ? a.growing_cycle.main_seed.planned_date_seed -\n b.growing_cycle.main_seed.planned_date_seed\n : 1;\n } else {\n return b.growing_cycle ? -1 : (a.line_idle ?? 0) - (b.line_idle ?? 0);\n }\n },\n },\n {\n title: translate(lang, 'Planned harvest date'),\n key: 'planned_harvest_date',\n render: (x: IMusselLine) => (\n {defaultDateFormat(getEstHarvestDate(x), '-')}\n ),\n sorter: (a: IMusselLine, b: IMusselLine) =>\n (getEstHarvestDate(a) ?? 0) - (getEstHarvestDate(b) ?? 0),\n },\n {\n title: translate(lang, 'Last assessment date'),\n key: 'last_assessment',\n render: (line: IMusselLine) => {\n const x = getLastAssDate(line);\n const d =\n getLineStatus(line, line_assess_expire_days) === 'REQUIRE_ASSESSMENT';\n return (\n {defaultDateFormat(x, '-')}\n );\n },\n sorter: (a: IMusselLine, b: IMusselLine) =>\n (getLastAssDate(a) ?? -1) - (getLastAssDate(b) ?? -1),\n },\n {\n title: translate(lang, 'Ready to harvest'),\n key: 'ready_to_harvest',\n render: (x: IMusselLine) => {\n if (x.growing_cycle) {\n const al = x.growing_cycle.last_assessment\n ? defaultDateFormat(\n x.growing_cycle.last_assessment.planned_date_harvest,\n )\n : null;\n const sl = defaultDateFormat(\n x.growing_cycle.main_seed.planned_date_harvest,\n );\n const el =\n al && al !== sl ? (\n
\n {`${translate(lang, 'original harvest date')}: ${sl}`}\n
\n ) : (\n <>\n );\n\n if (x.growing_cycle.ready_harvest) {\n const d = moment().diff(\n toMillisecond(x.growing_cycle.ready_harvest),\n 'days',\n );\n return (\n \n
\n {`Ready ${\n d === 0\n ? 'today'\n : d < 0\n ? `in ${-d} day(s)`\n : `${d} day(s) ago`\n }`}\n
\n {el}\n
\n );\n } else {\n const d = calcDiffDays(getEstHarvestDate(x) ?? 0);\n return (\n \n
\n {`Planned ${\n d === 0\n ? 'today'\n : d < 0\n ? `in ${-d} day(s)`\n : `${d} day(s) ago`\n }`}\n
\n {el}\n
\n );\n }\n } else {\n return -;\n }\n },\n sorter: compareReady,\n },\n {\n title: translate(lang, 'Ready to harvest (date)'),\n key: 'ready_harvest_date',\n render: (x: IMusselLine) =>\n x.growing_cycle?.ready_harvest ? (\n \n {translate(\n lang,\n 'marked as ready by %s on %s',\n x.growing_cycle.last_assessment?.verifier?.name ??\n x.growing_cycle.last_assessment?.user?.name,\n defaultDateFormat(x.growing_cycle.ready_harvest),\n )}\n \n ) : (\n {'-'}\n ),\n sorter: compareReady,\n },\n {\n title: translate(lang, 'Size Range'),\n key: 'size_range',\n render: (x: IMusselLine) => {sizeRange(x)},\n sorter: (a: IMusselLine, b: IMusselLine) =>\n (calcLineLastSize(a)?.avg ?? 0) - (calcLineLastSize(b)?.avg ?? 0),\n },\n {\n title: translate(lang, 'Stage'),\n key: 'stage',\n render: (x: IMusselLine) => (\n {x.growing_cycle ? x.growing_cycle.main_seed.stage : '-'}\n ),\n sorter: (a: IMusselLine, b: IMusselLine) =>\n (a.growing_cycle?.main_seed.stage ?? 0) -\n (b.growing_cycle?.main_seed.stage ?? 0),\n align: 'center',\n } as any,\n];\n\ntype optionType =\n | 'all'\n | 'oldest_line'\n | 'oldest_assessment'\n | 'ready_harvest'\n | 'catch_spat'\n | 'require_assessment'\n | 'recent_assessment'\n | 'empty_lines';\n\nconst LinesPage = () => {\n const query = new URLSearchParams(useLocation().search);\n const farms = useSelector(selectMusselFarms);\n const userMeta = useSelector(selectUserMeta);\n const lineTags = useSelector(selectAllTags);\n const lang = useSelector(selectLang);\n\n const [selectedOption, setSelectedOption] = useState(\n (query.get('filter') as any) ?? 'all',\n );\n const [sizeFrom, setSizeFrom] = useState('');\n const [sizeTo, setSizeTo] = useState('');\n const [filterName, setFilterName] = useState('');\n const [chkTags, setChkTags] = useState();\n const [fltStage, setFltStage] = useState(0);\n\n const maxStage = Math.max(\n 0,\n ...farms.flatMap(farm =>\n farm.lines.map(line => line.growing_cycle?.main_seed.stage ?? 0),\n ),\n );\n\n const filteredLines = useMemo(() => {\n let result: IMusselLine[] = [];\n for (let farm of farms) {\n result.push(...farm.lines.map(t => t as any));\n }\n if (selectedOption === 'oldest_line') {\n result = result.filter(x => !!x.growing_cycle);\n result.sort((a, b) =>\n (a.growing_cycle?.main_seed.planned_date_seed ?? 0) <\n (b.growing_cycle?.main_seed.planned_date_seed ?? 0)\n ? -1\n : 1,\n );\n } else if (selectedOption === 'oldest_assessment') {\n result = result.filter(x => getLastAssDate(x) !== null);\n result.sort((a, b) =>\n (getLastAssDate(a) ?? 0) < (getLastAssDate(b) ?? 0) ? -1 : 1,\n );\n } else if (selectedOption === 'catch_spat') {\n result = result.filter(\n t => t.growing_cycle && t.growing_cycle.main_seed.is_catch_spat,\n );\n result.sort((a, b) =>\n (a.growing_cycle?.main_seed.planned_date_seed ?? 0) <\n (b.growing_cycle?.main_seed.planned_date_seed ?? 0)\n ? -1\n : 1,\n );\n } else if (selectedOption === 'ready_harvest') {\n result = result.filter(x => !!x.growing_cycle);\n result.sort(compareReady);\n } else if (selectedOption === 'require_assessment') {\n result = result.filter(\n x =>\n getLineStatus(x, userMeta?.line_assess_expire_days ?? 90) ===\n 'REQUIRE_ASSESSMENT',\n );\n } else if (selectedOption === 'recent_assessment') {\n result = result.filter(x => {\n if (!x.growing_cycle?.last_assessment) return false;\n let d = Date.now() - toMillisecond(getLastAssDate(x));\n return d < 7 * 3600 * 24 * 1000;\n });\n } else if (selectedOption === 'empty_lines') {\n result = result.filter(x => !x.growing_cycle);\n }\n if (sizeFrom.length > 0) {\n result = result.filter(x => {\n const min = calcLineLastSize(x)?.min;\n return (min ?? 0) >= parseInt(sizeFrom);\n });\n }\n if (sizeTo.length > 0) {\n result = result.filter(x => {\n const max = calcLineLastSize(x)?.max;\n return (max ?? 0) <= parseInt(sizeTo);\n });\n }\n if (chkTags && chkTags.length > 0 && lineTags) {\n const tags = lineTags\n .filter(x => chkTags.includes(x.id))\n .map(t => t.tag_lines)\n .reduce((p, c) => [...p, ...c], [])\n .map(t => t.line_id);\n result = result.filter(x => tags.includes(x.id));\n }\n if (filterName.length > 0) {\n result = result.filter(x =>\n x.line_name.toLowerCase().includes(filterName.toLowerCase()),\n );\n }\n if (fltStage) {\n result = result.filter(\n x => x.growing_cycle && x.growing_cycle.main_seed.stage === fltStage,\n );\n }\n return result;\n }, [\n sizeFrom,\n sizeTo,\n selectedOption,\n farms,\n userMeta,\n chkTags,\n filterName,\n fltStage,\n ]);\n\n const { redirectToLine } = useMenuHandler();\n\n return (\n
\n
\n
\n
\n
\n \n {translate(lang, 'Lines')}\n \n
\n
\n
\n
\n
\n
\n setSizeFrom(e.target.value)}\n unit='mm'\n />\n
\n
\n setSizeTo(e.target.value)}\n unit='mm'\n />\n
\n
\n setFilterName(e.target.value)}\n />\n
\n
\n setSelectedOption(v)}\n />\n
\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n }))}\n value={chkTags?.map(t => t.toString()) as any}\n onChange={(v: any) =>\n setChkTags(v.map((x: any) => Number(x)))\n }\n />\n
\n
\n i + 1,\n ).map(x => ({\n id: x.toString(),\n value: x.toString(),\n label: x.toString(),\n })),\n ]}\n value={fltStage.toString()}\n onChange={v => setFltStage(Number(v))}\n />\n
\n
\n
\n
\n ({\n onClick: redirectToLine.bind(this, r.farm_id, r.id),\n })}\n scroll={{ y: 600 }}\n />\n
\n {`Total length: ${formatNumber(\n filteredLines.reduce(\n (p, c) => p + (c.growing_cycle?.current_line_length ?? 0),\n 0,\n ),\n )} m`}\n
\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default LinesPage;\n","import React, { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Button,\n CheckboxButton,\n Title,\n Spinner,\n Datepicker,\n Dropdown,\n RadioButton,\n} from '../../components/shared';\nimport rightIcon from '../../images/right-open-icon.png';\nimport downIcon from '../../images/down-close-icon.png';\nimport { downloadReport } from '../../apis';\nimport moment from 'moment';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { Radio } from 'antd';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectAccount } from '../../store/auth/auth.selector';\nimport { selectBoats } from '../../store/users/users.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\ntype LabelType = 'FARM' | 'LINE';\n\ninterface RowItemProps {\n isCollapsed: boolean | null;\n level: LabelType;\n label: string;\n isChecked: boolean;\n isFullChecked: boolean;\n toggleCollapse: (p: any) => void;\n toggleCheck: (p: any) => void;\n onClickLabel?: (p: any) => void;\n}\n\nconst RowItem: React.FC = ({\n isCollapsed,\n level,\n label,\n isChecked,\n isFullChecked,\n toggleCollapse,\n toggleCheck,\n onClickLabel,\n}) => {\n const exp_cal_class =\n isCollapsed === null\n ? 'empty'\n : isCollapsed === true\n ? 'collapsed'\n : 'expanded';\n\n return (\n
\n
\n
\n {isCollapsed !== null &&\n (isCollapsed ? (\n right-icon\n ) : (\n down-icon\n ))}\n
\n
\n {label}\n
\n
\n \n
\n
\n );\n};\n\ntype TReport =\n | 'FARM'\n | 'TASK'\n | 'SEEDING'\n | 'HARVEST'\n | 'ASSESSMENT'\n | 'BUDGET'\n | 'FLOAT'\n | 'INSURANCE'\n | 'TIME_SHEET'\n | 'PRODUCTIVITY';\ntype TPeriod = 'TODAY' | 'LAST_7' | 'LAST_30' | 'LAST_MONTH' | 'YEAR';\n\nconst reportTypeOptions = [\n {\n id: 'farm',\n value: 'FARM',\n label: 'Farm Overview',\n },\n {\n id: 'task',\n value: 'TASK',\n label: 'Task Report',\n },\n {\n id: 'seeding',\n value: 'SEEDING',\n label: 'Seeding Report',\n },\n {\n id: 'harvest',\n value: 'HARVEST',\n label: 'Harvest Report',\n },\n {\n id: 'assessment',\n value: 'ASSESSMENT',\n label: 'Assessment Report',\n },\n {\n id: 'float',\n value: 'FLOAT',\n label: 'Float Report',\n },\n {\n id: 'insurance',\n value: 'INSURANCE',\n label: 'Insurance Report',\n },\n {\n id: 'time_sheet',\n value: 'TIME_SHEET',\n label: 'Boat Timesheet',\n },\n {\n id: 'productivity',\n value: 'PRODUCTIVITY',\n label: 'Productivity Report',\n },\n {\n id: 'spat_storage',\n value: 'SPAT_STORAGE',\n label: 'Spats Report',\n },\n {\n id: 'spat_nursery',\n value: 'SPAT_NURSERY',\n label: 'Spat Nursery Report',\n }\n];\n\nconst budgetOption = {\n id: 'budget',\n value: 'BUDGET',\n label: 'Budget Report',\n};\n\nconst periodTypeOptions = [\n {\n id: 'today',\n value: 'TODAY',\n label: 'Today',\n },\n {\n id: 'last_7',\n value: 'LAST_7',\n label: 'Last 7 days',\n },\n {\n id: 'last_30',\n value: 'LAST_30',\n label: 'Last 30 days',\n },\n {\n id: 'last_month',\n value: 'LAST_MONTH',\n label: 'Last month',\n },\n {\n id: 'year',\n value: 'YEAR',\n label: 'Year to date',\n },\n];\n\nconst harvestFinalOptions = [\n { id: 'final', value: 'final', label: 'Final harvest' },\n { id: 'non_final', value: 'non_final', label: 'Reseeding' },\n { id: 'all', value: 'all', label: 'All' },\n];\n\nconst ReportPage = () => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const farms = useSelector(selectFarmsData);\n const boatsData = useSelector(selectBoats);\n const showBudget = useSelector(selectAccount)?.show_budget_menu;\n const reportTypes = showBudget\n ? [...reportTypeOptions, budgetOption]\n : reportTypeOptions;\n\n const [checkedFarmIds, setCheckedFarmIds] = useState(\n farms.map(x => Number(x.id)),\n );\n const [checkedLineIds, setCheckedLineIds] = useState(\n farms.reduce(\n (p, c) => [...p, ...c.lines.map(l => Number(l.id))],\n [] as number[],\n ),\n );\n const [boatIDs, setBoatIDs] = useState(\n boatsData.map(x => x.id) || [],\n );\n const [isFarmCollapsed, setIsFarmCollapsed] = useState({});\n const [previewLink, setPreviewLink] = useState(null);\n const [loading, setLoading] = useState(false);\n const [dateRange, setDateRange] = useState({\n rangeFrom: new Date(new Date().getFullYear(), 0, 1).getTime(),\n rangeTo: Date.now(),\n });\n const updateDateRange = (key: string, val: number) => {\n setDateRange({ ...dateRange, [key]: val });\n };\n const [farmVisual, setFarmVisual] = useState(false);\n const [reportType, setReportType] = useState('FARM');\n const [period, setPeriod] = useState('YEAR');\n const [fileType, setFileType] = useState<'pdf' | 'xlsx'>('pdf');\n const [hvFinal, setHvFinal] = useState('all');\n\n const updatePeriod = (p: TPeriod) => {\n setPeriod(p);\n if (p === 'TODAY') {\n setDateRange({\n rangeFrom: moment().toDate().getTime(),\n rangeTo: moment().toDate().getTime(),\n });\n } else if (p === 'LAST_7') {\n setDateRange({\n rangeFrom: moment().subtract(7, 'd').toDate().getTime(),\n rangeTo: moment().toDate().getTime(),\n });\n } else if (p === 'LAST_30') {\n setDateRange({\n rangeFrom: moment().subtract(30, 'd').toDate().getTime(),\n rangeTo: moment().toDate().getTime(),\n });\n } else if (p === 'LAST_MONTH') {\n setDateRange({\n rangeFrom: moment()\n .subtract(1, 'month')\n .startOf('month')\n .toDate()\n .getTime(),\n rangeTo: moment()\n .subtract(1, 'month')\n .endOf('month')\n .toDate()\n .getTime(),\n });\n } else if (p === 'YEAR') {\n setDateRange({\n rangeFrom: moment().startOf('year').toDate().getTime(),\n rangeTo: moment().toDate().getTime(),\n });\n }\n };\n const isFarmChecked = (k: number) => {\n return checkedFarmIds.includes(k);\n };\n const isLineChecked = (k: number) => {\n return checkedLineIds.includes(k);\n };\n const isFarmFullChecked = (i: number) => {\n const lineIds = farms.find(t => t.id === i)?.lines.map(x => x.id);\n return (lineIds ?? []).every(k => isLineChecked(parseInt(k.toString())));\n };\n const toggleLineCheck = (f: number, k: number) => {\n const tmp = [...checkedLineIds];\n const i = tmp.findIndex(x => x === k);\n if (i < 0) {\n tmp.push(k);\n if (!checkedFarmIds.some(x => x === f)) {\n setCheckedFarmIds([...checkedFarmIds, f]);\n }\n } else {\n tmp.splice(i, 1);\n const farm = farms.find(x => x.id === f);\n if (!farm?.lines.some(x => tmp.some(y => y === x.id))) {\n setCheckedFarmIds(checkedFarmIds.filter(x => x !== f));\n }\n }\n setCheckedLineIds(tmp);\n };\n const toggleFarmCheck = (k: number) => {\n const tmp = [...checkedFarmIds];\n const i = tmp.findIndex(x => x === k);\n const lineIds =\n farms.find(x => x.id === k)?.lines.map(l => parseInt(l.id.toString())) ??\n [];\n if (i < 0) {\n tmp.push(k);\n setCheckedFarmIds(tmp);\n setCheckedLineIds([...checkedLineIds, ...lineIds]);\n } else {\n const lTmp = [...checkedLineIds];\n if (lineIds.every(l => checkedLineIds.findIndex(x => x === l) >= 0)) {\n tmp.splice(i, 1);\n setCheckedFarmIds(tmp);\n for (let x of lineIds)\n lTmp.splice(\n lTmp.findIndex(l => l === x),\n 1,\n );\n } else {\n for (let x of lineIds.filter(l => lTmp.findIndex(x => x === l) < 0)) {\n lTmp.push(x);\n }\n }\n setCheckedLineIds(lTmp);\n }\n };\n const isCheckedFarmAll = () => {\n return farms.every(f => isFarmFullChecked(parseInt(f.id.toString())));\n };\n const toggleFarmCheckAll = () => {\n if (farms.every(f => isFarmFullChecked(parseInt(f.id.toString())))) {\n setCheckedFarmIds([]);\n setCheckedLineIds([]);\n } else {\n setCheckedFarmIds(farms.map(f => parseInt(f.id.toString())));\n const tmp = [];\n for (let f of farms) {\n const ls = f.lines.map(l => parseInt(l.id.toString()));\n tmp.push(...ls);\n }\n setCheckedLineIds(tmp);\n }\n };\n const toggleFarmCollapse = (farmId: number) => {\n let cf: any = { ...isFarmCollapsed };\n if (cf[farmId]) cf[farmId] = false;\n else cf[farmId] = true;\n setIsFarmCollapsed(cf);\n };\n const requestReport = async (type: 'download' | 'preview') => {\n if (type === 'preview' && /iPad|iPhone/.test(navigator.platform)) {\n alert('Sorry, iPhone or iPad does not support preview feature well');\n }\n setLoading(true);\n setPreviewLink(null);\n const mode =\n reportType === 'FARM'\n ? `farm-overview?type=${farmVisual ? 'visual' : 'normal'}`\n : reportType.toLowerCase();\n let data: any = {\n farms: checkedFarmIds,\n lines: checkedLineIds,\n boats: boatIDs,\n range_from:\n reportType === 'TASK'\n ? moment(dateRange.rangeFrom).format('yyyy-MM-DD')\n : Math.floor(dateRange.rangeFrom / 1000),\n range_to:\n reportType === 'TASK'\n ? moment(dateRange.rangeTo).add(1, 'day').format('yyyy-MM-DD')\n : Math.floor(dateRange.rangeTo / 1000),\n file_type: fileType,\n };\n if (reportType === 'HARVEST' && hvFinal !== 'all') {\n data.is_final = hvFinal === 'final';\n }\n try {\n const res = await downloadReport(data, mode);\n const blob = new Blob([res.data], { type: 'application/pdf' });\n let url = window.URL.createObjectURL(\n fileType === 'pdf' ? blob : res.data,\n );\n if (type === 'download') {\n let link = document.createElement('a');\n link.href = url;\n link.download = `report.${fileType}`;\n link.click();\n window.URL.revokeObjectURL(link.href);\n } else {\n setPreviewLink(url);\n }\n } catch (err: any) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, err?.message ?? 'Something went wrong.'),\n }),\n );\n }\n setLoading(false);\n };\n\n return (\n
\n
\n
\n
\n \n {translate(lang, 'Report')}\n \n
\n
\n
\n
\n
\n ({\n ...x,\n label: translate(lang, x.label),\n }))}\n onChange={v => setReportType(v as any)}\n />\n
\n {!['FLOAT', 'INSURANCE', 'FARM', 'SPAT_STORAGE', 'SPAT_NURSERY'].includes(\n reportType,\n ) && (\n
\n updatePeriod(v as any)}\n />\n
\n )}\n
\n {!['FLOAT', 'INSURANCE', 'FARM', 'SPAT_STORAGE', 'SPAT_NURSERY'].includes(\n reportType,\n ) && (\n
\n \n updateDateRange(\n 'rangeFrom',\n e?.toDate().getTime() ?? Date.now(),\n )\n }\n className='mr-7'\n />\n \n updateDateRange(\n 'rangeTo',\n e?.toDate().getTime() ?? Date.now(),\n )\n }\n className='ml-7'\n />\n
\n )}\n {reportType === 'HARVEST' && (\n
\n setHvFinal(v)}\n />\n
\n )}\n
\n setFileType(e.target.value)}\n >\n \n \n \n
\n {['TIME_SHEET', 'PRODUCTIVITY'].includes(reportType) ? (\n boatsData.map(boat => (\n
\n null}\n toggleCheck={() =>\n setBoatIDs(\n boatIDs.includes(boat.id)\n ? boatIDs.filter(x => x !== boat.id)\n : [...boatIDs, boat.id],\n )\n }\n onClickLabel={() =>\n setBoatIDs(\n boatIDs.includes(boat.id)\n ? boatIDs.filter(x => x !== boat.id)\n : [...boatIDs, boat.id],\n )\n }\n />\n
\n ))\n ) : (\n <>\n null}\n toggleCheck={() => setFarmVisual(!farmVisual)}\n onClickLabel={() => setFarmVisual(!farmVisual)}\n />\n 0}\n isFullChecked={isCheckedFarmAll()}\n toggleCollapse={() => null}\n toggleCheck={() => toggleFarmCheckAll()}\n onClickLabel={() => toggleFarmCheckAll()}\n />\n {farms.map(farm => (\n
\n \n toggleFarmCollapse(parseInt(farm.id.toString()))\n }\n toggleCheck={() =>\n toggleFarmCheck(parseInt(farm.id.toString()))\n }\n onClickLabel={() => {\n toggleFarmCheck(parseInt(farm.id.toString()));\n }}\n />\n {!!isFarmCollapsed[parseInt(farm.id.toString())] &&\n farm.lines.length > 0 &&\n farm.lines.map(line => (\n
\n null}\n toggleCheck={() =>\n toggleLineCheck(\n parseInt(farm.id.toString()),\n parseInt(line.id.toString()),\n )\n }\n onClickLabel={() =>\n toggleLineCheck(\n parseInt(farm.id.toString()),\n parseInt(line.id.toString()),\n )\n }\n />\n
\n ))}\n
\n ))}\n \n )}\n
\n
\n
\n requestReport('preview')}\n >\n {translate(lang, 'Preview')}\n \n requestReport('download')}\n >\n {translate(lang, 'Download')}\n \n
\n
\n {loading ? (\n
\n \n
\n ) : (\n previewLink && (\n \n )\n )}\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default ReportPage;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN0AAACBCAYAAABEiL+WAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA2IDc5LjE2NDc1MywgMjAyMS8wMi8xNS0xMTo1MjoxMyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjMgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkJENUI2NDYwOUVGMDExRUM5MDI1QUY4OTg3NTgxRjZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkJENUI2NDYxOUVGMDExRUM5MDI1QUY4OTg3NTgxRjZFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkQ1QjY0NUU5RUYwMTFFQzkwMjVBRjg5ODc1ODFGNkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QkQ1QjY0NUY5RUYwMTFFQzkwMjVBRjg5ODc1ODFGNkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7dQc4jAAAOxElEQVR42uxdfWwT5xm/ONcQCgUSMCpZJBog2kAlMAHVytIVVdsKbbSWTRuQQUNXaRBFa0vnFcRHpgXGDE0blCmEVgiIxBwQRSwSf0TdhmgaCUgqghlDshIaxpwF13HsOYmTeiHa+1h25qS247Pv633u+UnmLvZh3z1+f/49X+97GU1NTUIiXL16dcLfRUVFsMm+ffv2go6OjuVdXV3LnU7nsuhjzGbzF6tWrWpZunRpFzu+lz01wo4PvTY8PBzabtiwQSCkjmnTpkk6/s6dO2S0SSgsLBzfv3DhgvDyyy/DblZbW9s3YGzb7fbver3e/Oj/s2LFir+ycX1n9erVnU8//bSfPTV28+bN0GtZWVnjxxUUFMT93AyJpCu4cuXKOnYyp6RcHDvRX7zwwgvwRt1EOiKdDkmXyUhXdOPGjeLOzs5aCW9hKy4uvvjSSy99yvY9cpOuoKam5hDblqZ5nbadO3dWsa2DSEek0xqfffYZbL7HOLAjzbFtg3+qq6sr2MY3FenEKd4ss7W19Wft7e0lMhAOUHrixAkBfh0Y6YDtj+irJ2iEOXfv3t0mUdnijmv4x2KxCK+88sqHbLclodIdPnw43mtz9+7dWysT2WL+OkT/MhCkgcUTko5vbGwko0VFPA0NDe8qNbZzcnKOnjx5ch/bHY2pdCMjI7Gef7Kqqup9BQkX+nWAXwZG+jfBH6ZxoCwePSKnIoxvnz171qLk2PZ6ve++9dZb/oMHDwKHvkawjPr6+snPzSgvL/9IYcJNUDxG8LfZ1k3jIXk888wzko4/c+YMGU0Q1pw7d+5tNcd2c3PzNrYdm6B0eXl5E2K47du3V6p4UiHFq6ysJMVTGKIoGt0EoHBvqz22Dxw4cBm8+wlKt2bNmui/t7S3t9s0MoqNke/XbPuQKDI11q5dK+n4GB6NkSBHhjJllJWVrWQb+/gPYFTqHuK4Eg0NU8o+X9izZ89utu8kWsmL6dOnG9ml1IxwAEjaMNK/JoSz9Zk+n09wOBzw+KnL5dqvsYGWt7a2PllcXNzG9v1Elfh46qmnJB1/69YtiuE0HNfDw8N/6+jo+Cd7CBnV1dXw5ByLxeLVkbFspHiJsW7dOknHGzCRohfCjY/piNqJly9fDvm8OjNYqdVqJVdTRhgskaJF0mTKMX3t2rXQeM4IP/EnnZ3g+K8DJVdigxIpcaFp0iQRCgsLIUP/x4y6urqZFRUVAzo2IhFPBtIZxL3Um0v5tbHMHj8X29raFuvckJTVlAGQMEOOHzQ3N2/XMeFCY/n06dNviPfu3VvMgUEpxksTUmclcOhS6p1wIcA8VHFgYGA2J4YNEY9cTQIvMVws9Pf3zxIDgcBMjgxMriaBW8IBvvrqqywe88ikeCkAYUeK5p0mqUAUxVFxzpw5fTwSjxRPGiLLZJDCaQuz2ewzLV68uItTw4PiHWHbfKIUuZS8YMmSJW6xqKjoCybTAsfEE3bt2gU9o900HhPGEhgug4eyQCLYmMgF9N6RkvTFRBY8MgqJXn31VUnHHzt2jAinMWAZB7bZLYaXIbve2dnJM+lCCx6R4sUHi915Pn1ImnBNOMCLL774MWzFbdtgNrlwrrKyspbzcVVaU1NDxIsDjhMpXMdw0d7Y888/fxd2MvLzx/MQ+5xO5yEE48tmBOKxX01Jx3Pae6n3XsrkL2TNGriG0LINYknJ+GTxj5mLtgzBBZLixQCHvZfcx3DRQrBx48ZPIn+I58+fj+w7WKDn9Hq9GMYYEY9vYCIcqNzlS5cujS+6JR46NMGjPFhRUZGP5GKJePwS7hNE12N75513LkY/YXK5XELUYzDcXmVDcsGl4XswFNBY5krh0BCurq5uR39/f5A9hMhDtNvtkw98COuxh28sQoqHBBxM7eFmek6yhIMx19XVNTj5BTFO/aalrKzsPw0NDUQ8JNB5RwqqGE6YYmEtU4L/aGfEO0quJoEIJx/hQko3RSrZjtHVNFrLGCDOjWK0xo+uXr3ahCmGg7HFOJVw5ou4YMGCqd6ohb2RC9qssBAPrsWIxNMh4TZhIlyyczzF3t7eZN7QgU3xjEa87OxsvbmUqBQO8gUDAwNJTapORulQK144brWT8Kgew6EhnNQ7TokS24McmzdvPhaef4eCeJChJVdTdcKhKgu43W5Jt3gTU6jftIM6YConkOIR4VIhXKrLhWQ+++yzwmOPPSb14Vq9evU/Pv/881z2HssRGHC53W6ftXLlynts38XFCS+XZvbr168T4WROmmRmZv6bPQSpj2QTKYZIrmB2NQcHB7X66B+3trZeNGrSJKZ7uWjRonROoIWdwL+g9kWuJiEO4X5i5KRJTNKloXQRdFNyRf+YOVP1NYXBpUSncFKTJjFJJ9PaGe0wSKmArl+o3JGCrvBdVVUFM9jdcryZKOPaGQ6MWU0qJ6REOFSFb8hSBgIBt1xvKPey6nYqJ+gTo6OjasVwF7ERTpB5FXExNzdX7hO1g++LKbkCPyK8E0+F2x+DwqFKmsjpUk74LmRIpMQCyuQKz8RTWOlQlgW8Xq9biTeX0nspFe2keIYAlQV0onSoFY/H5IpC7iW4lOhiOL/f71H0u1BhuW2U5YStW7dWs/0OAyscurJAdXV1BdsqvkCoWjeFdGAj3tmzZ43sakYIh6aXEpImgUBAlRV5RRXXuEdXx4NrAfcZ1FzvJytjIiUSw6GaLSBnHW5K0ilQMkgEdOUEiFd5IR4R7uuEUzppEpN0brdb7QvthngI3DNMxDOAq4my8K100iQm6cxmsxYX3IGxnKDn5Eqa615uaW9vL8FEOLWSJjFJB8s8a4RubDGenpMraazwDApnw0Q4ULi+vj7NbmMkTp8+XUsD2LFlNfWueEZ3KZVq7eKJdAAHNlcTSTkBHeG0SJrozb1E7WrqrZwwMDAg5fDX7Xb7KWwupRZJk5ikU7D3UrKrCYaxWq1oiKencoLJZEr20Nc6Ojq+j4lwWiZNYpJO4d5LqXBiUzwgnh5ivCR7LyFL2YBN4bRMmuhd6dAqHsR4HBTQgXCospR6U7hx0un0BvBObFlNrRVvipIBurKAXgkXIp2ODYeySRrWCmX7LWp/eILiOCmc2qTTQckgIfGwlRNgcV7mag7rxNWkThMtSKeTkkEidGNMrqiteDFmGUCWElXSBJY69/v9Pr2fqLhw4UIeDGoHg1ZVVaFSvPXr10Og9Rc1PnBsbCz6T6jDoSoL1NXV7WDbQR5OVvzyyy95MexDbDFec3MzuJo+NVzNrKysaJcSVeEbfpBdLtcgLyesxnINssZ4VEBPO4ajpInWpEtzyocWcNJEWMmAdpRNRDidkI5Tg3djJJ4SyZXdu2GBYqEMWy8lNC8Hg0EfjycvPvHEE7wavhtjcoURT5CReCaMhOMpaRKTdBwlUmIBXXJFLuJhVTiYD+fxeAZ5vggxLy+P9y/CAV8EUz0iHnKFq6+v/yXbDvF+IaLX68Xwhbipc0UQDhw4ENndhDGGY2N1CMPFiGmsnaG7GA9jOUFKciUYDMIG3QRUXrOUcUnHYckgEZwYFS9JV5NcSl5Ip+IKz6opHsbkyuSWMQgLwnFsBBWdnZ212BRuiAHbABXnz58vIIQDWzkBWsYY8QQhdq/mrxjhvoOJcKdPn36DbUcwDk7eSwaJgLFXs5QR74cR4j3++OORGA6VwkHSpLe3dwTrwMRQMkioeMjKCQIj3vaw4n1qMpk2Y1tECGMMNxkZu3btEgyAgpqamkMCnhtfYAS6LGVcpUNUMkgEbOUEIhzPpIuaZ4UdTmTJFXIpeSWdxJV/ecdDZHU87gmHqdMk6ZiOyboRv+w5FouljoinLeEwlwUSKl1PT48Rv3AfKZ72MZzH4xkx4sWLOTk5Rv3iu7GVEyiG44R0gUDAyAPATVlNdQkHE1DHxsaGjGwEE40DwQnEgwFBplCecALHM75lU7pwK5HhiUeuprKEa2xsfJ1tg2QKPJNYZXE1KbmiXAzn8/mIcBHSmc1mssL/0Q11o7179xLxSOGUI53f7ycrTISHkivyEA7KAj09PUQ4iukoxlMaOTk5Rz/44IPfCgYsfCdFOjJB/BiPiJeawjEXvWqEgUwRh3QxbqFEiCIeNUlLIxzV4ZIg3axZs8gKifEQYhOLxULEm4JwlDRJknR9fX1khanho+TK1ArX399PhEuGdPPmzSMrJAcnKR4pnCyko5KBNMWjGI8ULm3SZWdnkxUkxnhUQKeyQDqghufU4AHiCcZtkrYR4dJQOiqnpE48g7qaIZcyEAjQwEmVdFQySM/VNFhyxdbU1PQa2z6irz51ZOzZs4eskD7yrVbrEeTEM+yaJrIrHZUMZAHqcgIkTU6ePLmP7VL7khykM/hyDXLCh7FXM5Kl9Pv9RDi5SMdAVpAPbkzlBCoLKEQ6A63wrBY8GFxNINzx48fhfspU+JYZGZNuLEiQD08yd/N9Toln+GXyFCUdMy5ZQTnMKC8v/4gz4lFZgJSOFE9NlxImoJLCKRzTUXFccXBRQDebzYdqa2sPUgynPKj3Uh34wvdf02Wv5rx58/5AhFNR6YJBsrNaxNNjOQFcyvfeew/WNKGBoBbpZs+eTVZQDx5oFq6oqNAF8ajTRCPSeTwesoK6GNRD5wp1mmhIurlz55IV1IdbS8UDwp05cwb8XCoLaEE6l8tFVtBI8bSYjwdZyhMnTvxudHSUCKcV6ahkoClULSfk5+fvZwprJYXTmHQzZswgK2gLH7RclZeXK0q8wsLCN61Waz0pnPbIaGxsJCvoA1m/YXA6nctkJp+tuLj44v79+//M9sfIzDpQOjKBbhAsKSn5Pdt+8/z5806v1/uuHOq2ZcuWC+DGknlJ6QgxkJOTE9k1MZezuKmpaUf4bynKF+p62blzJ2RoHPPnzw89uXbtWjIwKR0hAcANbDl8+HAL2869cePGh/fv31/84MGDb8VSQGjjKigo+HteXl7Pc889dxvixK6uLrIikY6QIqB7oeXIkSNAQNPQ0NC+YDBoGhkZgUdmdnb2o9zc3P+y1x6dOnWKrMUB/ifAAGIiLr1coImzAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIEAAADhCAYAAADvVNYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA2IDc5LjE2NDc1MywgMjAyMS8wMi8xNS0xMTo1MjoxMyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjMgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjRGMEQwRDlBOUVGMDExRUNBOTJBRjQ3QkNBMDc0RjM0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjRGMEQwRDlCOUVGMDExRUNBOTJBRjQ3QkNBMDc0RjM0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NEYwRDBEOTg5RUYwMTFFQ0E5MkFGNDdCQ0EwNzRGMzQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NEYwRDBEOTk5RUYwMTFFQ0E5MkFGNDdCQ0EwNzRGMzQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz68GWO1AAAJEklEQVR42uydTUhc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\"","export default __webpack_public_path__ + \"static/media/warning-icon.e03cc51c.png\";","import React, { useState, useRef, useEffect } from 'react';\nimport { translate } from '../../../lib/lang.helper';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../../apis';\nimport { Feedback } from '../../shared';\n\ninterface SeedPoint {\n seed_id: string | number;\n basket_count: number;\n start_position?: number | null;\n end_position?: number | null;\n}\n\ninterface SeedingLineProps {\n points: SeedPoint[];\n total_basket_line: number;\n movableSeed: string | number;\n onClose: () => void;\n lineData?: any;\n updateLineSeedings?: any;\n}\n\nfunction autoAssignBaskets(\n points: SeedPoint[],\n totalLine: number,\n): SeedPoint[] {\n const result = [...points];\n let lastUsed = 0;\n\n for (const seed of result) {\n if (seed.start_position == null || seed.end_position == null) {\n const start = lastUsed + 1;\n const end = start + seed.basket_count - 1;\n seed.start_position = start;\n seed.end_position = end;\n lastUsed = end;\n } else {\n lastUsed = Math.max(lastUsed, seed.end_position);\n }\n if (seed.start_position < 1) seed.start_position = 1;\n if (seed.end_position > totalLine) seed.end_position = totalLine;\n }\n return result;\n}\n\nfunction getOccupiedArray(\n seeds: SeedPoint[],\n movableSeed: string | number,\n totalLine: number,\n): boolean[] {\n const occupied = new Array(totalLine + 1).fill(false);\n\n seeds.forEach(s => {\n if (s.seed_id === movableSeed) return;\n const start = s.start_position ?? 1;\n const end = s.end_position ?? 1;\n for (let b = start; b <= end; b++) {\n occupied[b] = true;\n }\n });\n\n return occupied;\n}\n\nfunction collides(\n startBasket: number,\n length: number,\n occupied: boolean[],\n): boolean {\n for (let b = startBasket; b < startBasket + length; b++) {\n if (occupied[b]) return true;\n }\n return false;\n}\n\nfunction snapToEmpty(\n candidate: number,\n seedLength: number,\n occupied: boolean[],\n): number {\n const totalLine = occupied.length - 1;\n\n if (candidate < 1) candidate = 1;\n if (candidate + seedLength - 1 > totalLine) {\n candidate = totalLine - seedLength + 1;\n }\n\n if (!collides(candidate, seedLength, occupied)) {\n return candidate;\n }\n\n let offset = 1;\n while (true) {\n const leftTry = candidate - offset;\n const rightTry = candidate + offset;\n let outOfBoundsLeft = false;\n let outOfBoundsRight = false;\n\n if (leftTry >= 1) {\n if (!collides(leftTry, seedLength, occupied)) {\n return leftTry;\n }\n } else {\n outOfBoundsLeft = true;\n }\n\n if (rightTry + seedLength - 1 <= totalLine) {\n if (!collides(rightTry, seedLength, occupied)) {\n return rightTry;\n }\n } else {\n outOfBoundsRight = true;\n }\n\n if (outOfBoundsLeft && outOfBoundsRight) {\n return candidate;\n }\n\n offset++;\n if (offset > totalLine) {\n return candidate;\n }\n }\n}\n\nexport const SeedingsOrder: React.FC = ({\n points,\n total_basket_line,\n movableSeed,\n onClose,\n lineData,\n updateLineSeedings,\n}) => {\n const [seeds, setSeeds] = useState(() =>\n autoAssignBaskets(points, total_basket_line),\n );\n\n const [errorMsg, setErrorMsg] = useState();\n\n const lang = useSelector(selectLang);\n\n const [isDragging, setIsDragging] = useState(false);\n const [saving, setSaving] = useState(false);\n const [dragStartX, setDragStartX] = useState(0);\n const [originalLeftBasket, setOriginalLeftBasket] = useState(0);\n\n const containerRef = useRef(null);\n\n const occupied = getOccupiedArray(seeds, movableSeed, total_basket_line);\n\n function updateMovableSeedPosition(newStart: number) {\n setSeeds(prev =>\n prev.map(s => {\n if (s.seed_id !== movableSeed) return s;\n const length = s.basket_count;\n return {\n ...s,\n start_position: newStart,\n end_position: newStart + length - 1,\n };\n }),\n );\n }\n\n function handleMouseDown(\n e: React.MouseEvent,\n seed: SeedPoint,\n ) {\n e.preventDefault();\n e.stopPropagation();\n if (seed.seed_id !== movableSeed) return;\n\n setIsDragging(true);\n setDragStartX(e.clientX);\n\n const startBasket = seed.start_position ?? 1;\n setOriginalLeftBasket(startBasket);\n }\n\n function handleMouseMove(e: MouseEvent) {\n if (!isDragging) return;\n e.preventDefault();\n\n const container = containerRef.current;\n if (!container) return;\n\n const seed = seeds.find(s => s.seed_id === movableSeed);\n if (!seed) return;\n\n const seedLength =\n (seed.end_position ?? 0) - (seed.start_position ?? 0) + 1;\n\n const deltaPx = e.clientX - dragStartX;\n\n const containerWidth = container.offsetWidth;\n if (containerWidth <= 0) return;\n\n const basketsDelta = (deltaPx / containerWidth) * total_basket_line;\n const candidate = Math.round(originalLeftBasket + basketsDelta);\n\n const newStart = snapToEmpty(candidate, seedLength, occupied);\n updateMovableSeedPosition(newStart);\n }\n\n function handleMouseUp() {\n if (isDragging) {\n setIsDragging(false);\n }\n }\n\n useEffect(() => {\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isDragging, dragStartX, originalLeftBasket, seeds]);\n\n function getSeedStyle(s: SeedPoint): React.CSSProperties {\n const start = s.start_position ?? 1;\n const end = s.end_position ?? 1;\n const length = end - start + 1;\n\n const leftPct = ((start - 1) / total_basket_line) * 100;\n const widthPct = (length / total_basket_line) * 100;\n\n const isMovable = s.seed_id === movableSeed;\n\n return {\n position: 'absolute',\n top: 0,\n left: `${leftPct}%`,\n width: `${widthPct}%`,\n height: '100%',\n backgroundColor: isMovable ? 'green' : 'gray',\n cursor: isMovable ? 'grab' : 'auto',\n userSelect: 'none',\n };\n }\n\n const handleSave = async () => {\n setSaving(true);\n const response = await sendSingleRequest(\n {\n line_id: lineData.id,\n seedings: seeds,\n },\n 'POST',\n `api/farm/line/seeding-position`,\n true,\n );\n\n if (response.status) {\n setSaving(false);\n updateLineSeedings(response.data);\n onClose();\n } else {\n setSaving(false);\n setErrorMsg(translate(lang, response.data.message));\n }\n };\n\n return (\n
\n
{translate(lang, 'Move Seeding')}
\n \n {seeds.map(seed => {\n return (\n handleMouseDown(e, seed)}\n >\n \n {seed.seed_id}\n \n
\n );\n })}\n \n
\n onClose()}\n >\n {translate(lang, 'Close')}\n \n handleSave()}\n >\n {saving ? translate(lang, 'Saving...') : translate(lang, 'Save')}\n \n
\n {!!errorMsg && (\n setErrorMsg(undefined)}\n />\n )}\n \n );\n};\n","import { useMemo, useState } from 'react';\nimport { Modal } from 'antd';\nimport { useSelector } from 'react-redux';\nimport { Marker } from 'react-google-maps';\nimport { defaultDateFormat } from '../../../util/toggleSecondMillisecond';\nimport HarvestCompleteModal from '../../farm-modals/HarvestCompleteModal';\nimport { sendSingleRequest } from '../../../apis';\nimport { TBusinessType } from '../../../entities/general.entities';\nimport { translate } from '../../../lib/lang.helper';\nimport { selectLang } from '../../../store/ui/ui.selector';\nimport { SeedingsOrder } from './SeedingsOrder';\nimport AssessmentModal from '../../farm-modals/AssessmentModal';\nimport { ILineDetail } from '../../../entities/farms.entities';\n\ninterface Item {\n points?: { lat: number; lng: number }[] | null;\n color?: string;\n basket_count?: number;\n total_seeded_basket_count?: number;\n seedings?: any;\n type?: TBusinessType;\n onMouseOver?: (position: { lat: number; lng: number }) => void;\n onMouseOut?: (position: { lat: number; lng: number }) => void;\n lineData?: any;\n totalLineLength?: number;\n coordinates?: any;\n newPoints?: any;\n}\n\ndeclare namespace google {\n export namespace maps {\n class Map {\n constructor(mapDiv: HTMLElement, opts?: any);\n }\n class LatLngBounds {\n constructor(southWest?: LatLng, northEast?: LatLng);\n extend(point: LatLng): void;\n getCenter(): LatLng;\n contains(latLng: LatLng): boolean;\n }\n\n class LatLng {\n constructor(lat: number, lng: number);\n }\n class AdvancedMarkerElement {\n constructor(opts?: any);\n }\n }\n}\n\nconst isInViewport = (\n position: { lat: number; lng: number },\n bounds: google.maps.LatLngBounds | null,\n) => {\n if (!bounds) return false;\n return bounds.contains(new google.maps.LatLng(position.lat, position.lng));\n};\n\nconst DottedLine = ({\n item,\n direction,\n bounds,\n point,\n updateLineSeedings,\n}: {\n item: Item;\n direction: string | null | undefined;\n bounds: google.maps.LatLngBounds | null;\n point: any;\n updateLineSeedings: any;\n}) => {\n const lang = useSelector(selectLang);\n const [activeInfo, setActiveInfo] = useState<{\n lat: number;\n lng: number;\n seed: any;\n } | null>(null);\n const [showModal, setShowModal] = useState(false);\n const [showAssessmentModal, setShowAssessmentModal] = useState(false);\n const [lineData, setLineData] = useState();\n const [loadingLineData, setLoadingLineData] = useState(false);\n const [seedID, setSeedID] = useState(null);\n const [spatSourceId, setSpatSourceId] = useState(null);\n const [spatSource, setSpatSource] = useState(null);\n const [showMove, setShowMove] = useState(false);\n\n const markers = useMemo(() => {\n const points = [\n {\n ...point.start,\n seed: {\n ...point.seed,\n type: item.type,\n },\n },\n ];\n return points.filter(point => isInViewport(point, bounds));\n }, [item, bounds]);\n\n const handleHarvestLoad = async (e: any, type: string) => {\n e.preventDefault();\n setLoadingLineData(true);\n const response = await sendSingleRequest(\n { with_harvest_spats: true },\n 'GET',\n `api/farm/line/lines/${item.lineData.id}`,\n true,\n );\n if (response.status) {\n setSeedID(activeInfo?.seed.id ?? null);\n setSpatSourceId(activeInfo?.seed.spat_source_id ?? null);\n setSpatSource(activeInfo?.seed.spat_source ?? null);\n if (type === 'harvest') {\n setShowModal(true);\n }\n if (type === 'assess') {\n setShowAssessmentModal(true);\n }\n setActiveInfo(null);\n setLineData(response.data);\n setLoadingLineData(false);\n } else {\n alert('Failed to load line data');\n setLoadingLineData(false);\n }\n };\n\n const prepareData = () => {\n const tmp: any = { ...lineData };\n tmp.batch_seed_id = seedID;\n tmp.is_final = false;\n return tmp;\n };\n\n const prepareAssessmentData = () => {\n const tmp: any = { ...lineData };\n tmp.seeding_id = seedID;\n tmp.origin_spat_id = spatSourceId;\n tmp.hide_specie = true;\n tmp.spat_source = spatSource;\n return tmp;\n };\n\n return (\n <>\n {markers.map((position, index) => {\n return (\n \n \n !\n \n `)}`,\n }}\n onClick={() =>\n setActiveInfo({\n lat: position.lat,\n lng: position.lng,\n seed: position.seed,\n })\n }\n />\n );\n })}\n\n {activeInfo && (\n setActiveInfo(null)} footer={null}>\n
\n

\n {translate(lang, 'Seeding date')}:{' '}\n {defaultDateFormat(activeInfo.seed.planned_date_seed)}\n

\n

\n \n {translate(lang, 'Spat ID')} {activeInfo.seed.spat_source}\n \n

\n

\n \n {translate(lang, 'Storage type')}: {activeInfo.seed.type}\n \n

\n

\n \n {item.type === 'OYSTER'\n ? translate(lang, 'Number of baskets')\n : translate(lang, 'Length')}\n : {activeInfo.seed.basket_count}\n \n

\n handleHarvestLoad(e, 'harvest')}\n >\n {loadingLineData\n ? translate(lang, 'Loading...')\n : translate(lang, 'Harvest')}\n \n handleHarvestLoad(e, 'assess')}\n >\n {loadingLineData\n ? translate(lang, 'Loading...')\n : translate(lang, 'Assess')}\n \n {!showMove && (\n setShowMove(true)}\n >\n {translate(lang, 'Move')}\n \n )}\n
\n {showMove && (\n point.type != 'empty')\n .map((point: any) => {\n return {\n seed_id: point.seed.id,\n basket_count: point.seed.basket_count,\n start_position: point.start_position ?? null,\n end_position: point.end_position ?? null,\n };\n })}\n total_basket_line={item.basket_count ?? item.totalLineLength ?? 0}\n movableSeed={activeInfo.seed.id}\n lineData={item}\n onClose={() => setShowMove(false)}\n updateLineSeedings={updateLineSeedings}\n />\n )}\n
\n )}\n\n {showModal && lineData && (\n {\n setShowModal(false);\n }}\n onConfirm={() => {}}\n onlyView={false}\n warningMessage={''}\n lineChangeable={false}\n />\n )}\n {showAssessmentModal && lineData && (\n <>\n {\n setShowAssessmentModal(false);\n }}\n onConfirm={() => {\n setShowAssessmentModal(false);\n }}\n onlyView={false}\n lineChangeable={false}\n />\n \n )}\n \n );\n};\n\nexport default DottedLine;\n","import { compose, withProps } from 'recompose';\nimport { useState, useRef } from 'react';\nimport {\n GoogleMap,\n Marker,\n InfoWindow,\n withScriptjs,\n withGoogleMap,\n Polygon,\n Polyline,\n OverlayView,\n} from 'react-google-maps';\nimport Spinner from '../spinner/Spinner';\nimport mapPin from '../../../images/map-pin.svg';\nimport { ILocation, TBusinessType } from '../../../entities/general.entities';\nimport warningIcon from '../../../images/warning-icon.png';\nimport { LINE_COLORS } from '../../../lib/constant';\nimport './styles.scss';\nimport DottedLine from './DottedLine';\n\n\nconst emptyColor = LINE_COLORS.EMPTY;\n\ninterface IMarker {\n content?: any;\n data?: any;\n location: ILocation;\n bounds?: ILocation[] | null;\n points?: ILocation[] | null;\n newPoints?: any | null;\n tracks?: ILocation[] | null;\n color?: string;\n onClick?: (x: any) => void;\n onMouseOver?: (x: ILocation) => void;\n onMouseOut?: (x: ILocation) => void;\n urgent?: ILocation | null;\n direction?: string | null | undefined;\n type?: TBusinessType;\n lineData?: any;\n totalLineLength?: number;\n}\n\ninterface IPopup {\n position: ILocation;\n onClose: () => void;\n view: any;\n}\n\ninterface Props {\n center?: ILocation;\n zoom?: number;\n markers: IMarker[];\n mapTypeId?: 'roadmap' | 'satellite' | 'hybrid' | 'terrain';\n popup?: IPopup;\n updateLineSeedings?: any;\n}\n\nconst defaultCenter = {\n lat: -41.0917585,\n lng: 173.828391,\n};\n\nconst defaultZoom = 12;\n\nconst Loading = () => (\n
\n \n
\n);\n\ndeclare namespace google {\n export const maps: any;\n}\n\nconst MarkersMap = compose(\n withProps({\n googleMapURL: `https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,drawing,places&key=${process.env.REACT_APP_GOOGLE_MAP_KEY}`,\n loadingElement: ,\n containerElement: (\n
\n ),\n mapElement: (\n
\n ),\n }),\n withScriptjs,\n withGoogleMap,\n)(({ zoom, center, markers, mapTypeId, popup, updateLineSeedings }) => {\n\n const mapRef = useRef(null);\n const [zoomed, setZoomed] = useState(zoom);\n const [gBounds, setGBounds] = useState(null);\n\n const isShowDottedLine = (item: IMarker) => {\n if (!zoomed || zoomed <= 5 || !gBounds) {\n return false;\n }\n \n if (!item.points || item.points.length < 2) {\n return false;\n }\n\n return true;\n };\n\n return (\n popup?.onClose()}\n onZoomChanged={() => {\n const currentZoom = mapRef.current?.getZoom();\n if (currentZoom !== undefined) {\n setZoomed(currentZoom);\n }\n }}\n onBoundsChanged={() => {\n const newBounds = mapRef.current?.getBounds();\n if (newBounds) {\n setGBounds(newBounds);\n }\n }}\n >\n {!!popup && {popup.view}}\n {markers.map((item, idx) =>\n item.bounds && item.bounds.length > 2 ? (\n
\n popup?.onClose()}\n />\n \n
{item.content ?? ''}
\n
\n
\n ) : item.newPoints && item.newPoints.length >= 1 ? (\n
\n {item.newPoints.map((point : any, idx : string) => (\n <>\n {point.type != 'empty'&& isShowDottedLine(item) && (\n \n )}\n \n item.onMouseOver\n ? item.onMouseOver({ lat: e.latLng.lat(), lng: e.latLng.lng() })\n : undefined\n }\n onMouseOut={e =>\n item.onMouseOut\n ? item.onMouseOut({ lat: e.latLng.lat(), lng: e.latLng.lng() })\n : undefined\n }\n \n />\n \n ))}\n {!!item.content && (\n \n
\n {item.content}\n
\n \n )}\n {!!item.urgent && (\n \n \n \n
\n \n )}\n
\n ) \n : !!item.tracks && item.tracks.length > 0 ? (\n
\n \n {item.content ?? ''}\n
\n ) : (\n \n \n
{item.content ?? ''}
\n
\n \n ),\n )}\n \n )\n});\n\nexport default MarkersMap;","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button, Dropdown, Title } from '../../components/shared';\nimport MarkersMap from '../../components/shared/map/MarkersMap';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport {\n IMusselLineDetail,\n IMusselLineResource,\n IOysterLineDetail,\n IOysterLineResource,\n} from '../../entities/farms.entities';\nimport { IBoatResource, IBoatTrack } from '../../entities/boat.entities';\nimport { sendSingleRequest } from '../../apis';\nimport { formatNumber, hashColor } from '../../entities/util-functions';\nimport boat_png from '../../images/boat.png';\nimport { selectAccount, selectUserMeta } from '../../store/auth/auth.selector';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport {\n calcLineLastSize,\n calcSpecieLineDozens,\n getEstHarvestDate,\n getLineOysters,\n getLineStatus,\n} from '../../lib/farm.helpers';\nimport { LINE_COLORS } from '../../lib/constant';\nimport { ILocation, TBusinessType } from '../../entities/general.entities';\nimport moment from 'moment';\nimport {\n defaultDateFormat,\n toMillisecond,\n toSecond,\n} from '../../util/toggleSecondMillisecond';\nimport { TLang } from '../../entities/ui.entities';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang, selectMapType } from '../../store/ui/ui.selector';\nimport { selectAllTags } from '../../store/extra/extra.selector';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSquareCheck, faSquare } from '@fortawesome/free-regular-svg-icons';\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { saveMapType } from '../../store/ui/ui.actions';\nimport { selectSizedOysters } from '../../store/utils/utils.selector';\nimport LinesFilterView, {\n checkLineFilter,\n} from '../../components/lines/LinesFilterView';\nimport './styles.scss';\n\nlibrary.add(faSquareCheck, faSquare);\n\ninterface IMapLine {\n id: number;\n name: string;\n farm_id: number;\n points: ILocation[];\n color: string;\n is_urgent: boolean;\n seedPercent?: number;\n stage: number;\n type: TBusinessType;\n basket_count?: number;\n total_seeded_basket_count?: number;\n seedings?: any;\n direction?: string;\n storageType?: string;\n cycles?: any;\n totalLineLength?: number;\n lineLength?: number;\n}\n\ninterface ICountOf {\n total: number;\n empty: number;\n ready_harvest: number;\n require_assessment: number;\n catch_spat: number;\n growing_mussel: number;\n}\n\ninterface IMapFarm {\n id: number;\n name: string;\n farm_number: string;\n bounds?: ILocation[] | null;\n countOf: ICountOf;\n onClick?: () => void;\n}\n\ntype IOptionType =\n | 'ALL'\n | 'REQUIRE_ASSESSMENT'\n | 'READY_HARVEST'\n | 'CATCHING_SPAT';\n\nconst defaultZoom = 17;\n\nconst statusOptions = (lang: TLang | undefined) => [\n { id: '0', label: translate(lang, 'All'), value: 'ALL' },\n {\n id: '1',\n label: translate(lang, 'Require assessment'),\n value: 'REQUIRE_ASSESSMENT',\n },\n {\n id: '2',\n label: translate(lang, 'Ready to harvest'),\n value: 'READY_HARVEST',\n },\n { id: '3', label: translate(lang, 'Catching spat'), value: 'CATCHING_SPAT' },\n];\n\nconst toLatLng = (x: any) => ({\n lat: Number(x.latitude),\n lng: Number(x.longitude),\n});\n\nconst topPosition = (farm: IMapFarm) => {\n if (!farm.bounds || farm.bounds.length <= 0) {\n return { lat: 0, lng: 0 };\n }\n let res = farm.bounds[0];\n for (let i = farm.bounds.length - 1; i > 0; i--) {\n if (\n res.lat < farm.bounds[i].lat ||\n (res.lat === farm.bounds[i].lat && res.lng > farm.bounds[i].lng)\n )\n res = farm.bounds[i];\n }\n return res;\n};\n\nconst FarmMarker: React.FC<{ farm: IMapFarm; lang: TLang | undefined }> = ({\n farm,\n lang,\n}) => (\n
\n
\n {farm.name}\n ({farm.farm_number})\n
\n
\n \n {translate(lang, 'View')}\n \n
\n
\n);\n\nconst mapOptions = [\n { id: 'roadmap', label: 'Roadmap', value: 'roadmap' },\n { id: 'satellite', label: 'Satellite', value: 'satellite' },\n { id: 'hybrid', label: 'Hybrid', value: 'hybrid' },\n { id: 'terrain', label: 'Terrain', value: 'terrain' },\n];\n\ninterface IFilter {\n spatSource?: string;\n tagName?: string;\n sizeIndexes: number[];\n status: IOptionType;\n}\n\ninterface ITrackLocation {\n boat: IBoatResource;\n boat_tracks: IBoatTrack[];\n}\n\nconst FarmsMap = () => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const userMeta = useSelector(selectUserMeta);\n const allFarms = useSelector(selectFarmsData);\n const lineTags = useSelector(selectAllTags);\n const mapType = useSelector(selectMapType);\n const onGrowWaste = useSelector(selectAccount)?.oyster_crops;\n const oysterSpecies = useSelector(selectSizedOysters);\n const { redirectToFarm, redirectToFarmVisualLine, redirectToLine } =\n useMenuHandler();\n const timer = useRef();\n\n const [center, setCenter] = useState();\n const [boatTracks, setBoatTracks] = useState([]);\n const [zoom, setZoom] = useState(defaultZoom);\n const [blurBit, setBlurBit] = useState(0);\n const [filter, setFilter] = useState({\n sizeIndexes: [],\n status: 'ALL',\n });\n const [popupView, setPopupView] = useState();\n\n const loadLine = async (\n type: TBusinessType,\n lineId: number,\n location: ILocation,\n ) => {\n const response = await sendSingleRequest(\n {},\n 'GET',\n `api/farm/line/lines/${lineId}`,\n true,\n );\n if (!response.status) return;\n const lnDtl = response.data as IMusselLineDetail | IOysterLineDetail;\n const musselDtl = lnDtl as IMusselLineDetail;\n const oysterDtl = lnDtl as IOysterLineDetail;\n const seedings = lnDtl.growing_cycle\n ? lnDtl.cycles[lnDtl.cycles.length - 1].seedings\n : undefined;\n if (seedings)\n seedings.sort((a, b) => a.planned_date_seed - b.planned_date_seed);\n const lastSeed = seedings ? seedings[seedings.length - 1] : undefined;\n const spatSrc = lnDtl.growing_cycle?.main_seed.spat_storage;\n\n setPopupView({\n position: location,\n onClose: () => setPopupView(undefined),\n view: lnDtl.growing_cycle ? (\n
\n {translate(lang, 'Line %s', lnDtl.line_name)}\n
\n {`First seeded on ${defaultDateFormat(\n lnDtl.growing_cycle.main_seed.planned_date_seed,\n )}`}\n
\n
\n {`Line full date on ${defaultDateFormat(\n lastSeed?.planned_date_seed,\n )}`}\n
\n {type === 'MUSSEL' ? (\n
{`${musselDtl.growing_cycle?.current_line_length} m growing`}
\n ) : type === 'OYSTER' ? (\n
{`${getLineOysters(oysterDtl, 'dozens')} dozens growing`}
\n ) : (\n <>\n )}\n
{spatSrc ? `Spat source: ${spatSrc.source}` : 'Catch spat'}
\n {type === 'MUSSEL' ? (\n
\n {`${translate(lang, 'Last known size')}: ${\n calcLineLastSize(lnDtl)?.avg\n } mm`}\n
\n ) : type === 'OYSTER' ? (\n <>\n {calcSpecieLineDozens(oysterDtl, onGrowWaste, oysterSpecies)\n ?.filter(x => x.amount !== undefined && x.amount != 0)\n ?.map((x, i) => (\n
\n {`${x.name}: ${formatNumber(x.amount ?? 0)} dz`}\n
\n ))}\n
\n {`${translate(lang, 'Total')}: ${getLineOysters(oysterDtl)} dz`}\n
\n \n ) : (\n <>\n )}\n
\n {`${translate(lang, 'Estimated harvest Date')}: ${defaultDateFormat(\n getEstHarvestDate(lnDtl),\n )}`}\n
\n
\n ) : (\n
\n {`Line ${lnDtl.line_name} is empty`}\n
\n ),\n });\n };\n\n const [updatedSeedings, setUpdatedSeedings] = useState({});\n\n const updateLineSeedings = (newSeedings: any) => {\n setUpdatedSeedings((prev: any) => newSeedings);\n };\n\n const { farmsData, linesData, maxStage } = useMemo(() => {\n let farmsData: IMapFarm[] = [],\n linesData: IMapLine[] = [];\n let maxStage = 0;\n for (let farm of allFarms) {\n let tmpFarm: IMapFarm = {\n id: farm.id,\n name: farm.name,\n farm_number: farm.farm_number,\n bounds: farm.bounds,\n countOf: {\n total: 0,\n empty: 0,\n ready_harvest: 0,\n require_assessment: 0,\n catch_spat: 0,\n growing_mussel: 0,\n },\n };\n for (let line of farm.lines) {\n let totalSeedLength = 0;\n if (line.seedings) {\n line.seedings.map((item, index) => {\n if (item.line_length) {\n totalSeedLength += item.line_length;\n }\n });\n }\n if (\n line.growing_cycle &&\n line.growing_cycle.main_seed.stage > maxStage\n ) {\n maxStage = line.growing_cycle.main_seed.stage;\n }\n if (!checkLineFilter(line, filter, lineTags)) continue;\n const lineStatus = getLineStatus(\n line,\n userMeta?.line_assess_expire_days,\n );\n\n let color = LINE_COLORS[lineStatus];\n if (\n (filter.status === 'CATCHING_SPAT' && color !== 'CATCH_SPAT') ||\n (filter.status === 'READY_HARVEST' && color !== 'READY_HARVEST') ||\n (filter.status === 'REQUIRE_ASSESSMENT' &&\n color !== 'REQUIRE_ASSESSMENT')\n )\n continue;\n\n const tags =\n lineTags?.filter(\n x => !!x.color && x.tag_lines.some(y => y.line_id === line.id),\n ) ?? [];\n if (tags.length > 0 && tags[0].color) {\n color = tags[0].color;\n }\n\n if (line.points && line.points.length > 1) {\n let tmpLine: IMapLine = {\n id: line.id,\n name: line.line_name,\n farm_id: line.farm_id,\n points: line.points,\n color,\n is_urgent: !!line.is_urgent,\n stage: line.growing_cycle?.main_seed.stage ?? 0,\n type: farm.type,\n totalLineLength: totalSeedLength,\n };\n if (farm.type === 'OYSTER' && line.growing_cycle) {\n const ol = line as IOysterLineResource;\n tmpLine.direction = ol.direction;\n tmpLine.basket_count = ol.basket_count;\n tmpLine.total_seeded_basket_count =\n ol.growing_cycle?.total_seeded_basket_count ?? 0;\n tmpLine.seedings = ol.growing_cycle?.seedings;\n tmpLine.storageType =\n ol.growing_cycle?.main_seed?.spat_storage?.seed_type ?? '';\n tmpLine.seedPercent = Math.min(\n 1,\n (ol.growing_cycle?.current_basket_count ?? 0) / ol.basket_count,\n );\n tmpLine.cycles = [ol.growing_cycle];\n }\n if (farm.type === 'MUSSEL') {\n const ml = line as IMusselLineResource;\n tmpLine.totalLineLength =\n ml.growing_cycle?.total_seeded_length ?? 0;\n tmpLine.lineLength = ml.growing_cycle?.current_line_length ?? 0;\n tmpLine.seedings = ml?.growing_cycle?.seedings;\n tmpLine.storageType =\n ml.growing_cycle?.main_seed?.spat_storage?.seed_type ?? '';\n }\n if (tmpLine.seedings) {\n tmpLine.seedings.map((seed: any, index: string | number) => {\n if (updatedSeedings.length > 0) {\n updatedSeedings.map((updatedSeed: any) => {\n if (updatedSeed.seed_id === seed.id) {\n seed.start_position = updatedSeed.start_position;\n seed.end_position = updatedSeed.end_position;\n }\n });\n }\n return seed;\n });\n }\n linesData.push(tmpLine);\n }\n if (lineStatus === 'EMPTY') {\n tmpFarm.countOf.empty++;\n } else if (lineStatus === 'READY_HARVEST') {\n tmpFarm.countOf.ready_harvest++;\n } else if (lineStatus === 'REQUIRE_ASSESSMENT') {\n tmpFarm.countOf.require_assessment++;\n } else if (lineStatus === 'CATCH_SPAT') {\n tmpFarm.countOf.catch_spat++;\n } else {\n tmpFarm.countOf.growing_mussel++;\n }\n tmpFarm.countOf.total++;\n }\n tmpFarm.onClick = () =>\n farm.type === 'MUSSEL'\n ? redirectToFarmVisualLine(farm.id)\n : redirectToFarm(farm.id);\n\n farmsData.push(tmpFarm);\n }\n return { farmsData, linesData, maxStage };\n }, [allFarms, lineTags, filter, userMeta, updatedSeedings]);\n\n const farmMarkers = farmsData\n .filter(f => f.bounds && f.bounds.length > 0)\n .map(f => ({\n location: topPosition(f),\n content: ,\n bounds: f.bounds,\n }));\n\n function generateSeedingPoints(\n points: any,\n seedings: any,\n totalBasketCount: any,\n ) {\n if (!seedings || seedings.length === 0) {\n return [{ start: points[0], end: points[1], type: 'empty' }];\n }\n\n const interpolatePoint = (start: any, end: any, ratio: number) => ({\n lat: parseFloat((start.lat + (end.lat - start.lat) * ratio).toFixed(10)),\n lng: parseFloat((start.lng + (end.lng - start.lng) * ratio).toFixed(10)),\n });\n\n seedings.sort(\n (a: any, b: any) => (a.start_position ?? 0) - (b.start_position ?? 0),\n );\n\n let result: any[] = [];\n let lastAssignedBasket = 1;\n let lastPoint = points[0];\n\n for (let i = 0; i < seedings.length; i++) {\n let { start_position, end_position, basket_count, line_length } =\n seedings[i];\n let data_count = basket_count ?? line_length;\n\n if (!start_position) start_position = lastAssignedBasket;\n if (!end_position) end_position = start_position + data_count - 1;\n\n if (start_position > lastAssignedBasket) {\n const emptyEndRatio = (start_position - 1) / (totalBasketCount - 1);\n const emptyEndPoint = interpolatePoint(\n points[0],\n points[1],\n emptyEndRatio,\n );\n result.push({\n start: lastPoint,\n end: emptyEndPoint,\n type: 'empty',\n });\n lastPoint = emptyEndPoint;\n }\n\n const seedingEndRatio = (end_position - 1) / (totalBasketCount - 1);\n const seedingEndPoint = interpolatePoint(\n points[0],\n points[1],\n seedingEndRatio,\n );\n result.push({\n start: lastPoint,\n end: seedingEndPoint,\n type: 'seeding',\n seed: seedings[i],\n start_position,\n end_position,\n });\n\n lastPoint = seedingEndPoint;\n lastAssignedBasket = end_position + 1;\n }\n\n if (lastAssignedBasket <= totalBasketCount) {\n result.push({\n start: lastPoint,\n end: points[1],\n type: 'empty',\n });\n }\n\n return result;\n }\n\n const lineMarkers = linesData.map(x => {\n let points = [...(x.points as ILocation[])];\n if (points[1].lat < points[0].lat) {\n points = [points[1], points[0]];\n }\n const location: ILocation = points[0];\n const urgent = x.is_urgent ? points[1] : null;\n let color = x.color;\n if (x.stage > 0 && blurBit & (1 << (x.stage - 1))) {\n color = `${color.slice(0, 7)}20`;\n }\n return {\n id: x.id,\n location,\n points,\n newPoints: generateSeedingPoints(\n points,\n x.seedings ?? [],\n x.basket_count ?? x.lineLength,\n ),\n urgent,\n basket_count: x.basket_count,\n total_seeded_basket_count: x.total_seeded_basket_count,\n seedings: x.seedings,\n onClick: () => redirectToLine(x.farm_id, x.id),\n color,\n type: x.type,\n content: x.name,\n onMouseOver: (p: ILocation) => {\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => loadLine(x.type, x.id, p), 500);\n },\n onMouseOut: () => {\n if (timer.current) clearTimeout(timer.current);\n },\n lineData: x,\n totalLineLength: x.totalLineLength,\n lineLength: x.lineLength ?? 0,\n };\n });\n\n const boatMarkers = boatTracks.map(x => ({\n location: toLatLng(x.boat_tracks[x.boat_tracks.length - 1]),\n tracks: [toLatLng(x.boat_tracks[x.boat_tracks.length - 1])],\n content: (\n <>\n \n {moment(\n toMillisecond(x.boat_tracks[x.boat_tracks.length - 1].rec_time),\n ).fromNow()}\n
\n \n boat\n \n \n ),\n }));\n\n const moveCenter = (farm: any) => {\n if (!farm.bounds || farm.bounds.length <= 0) {\n window.alert(translate(lang, 'Location of this farm is not defined'));\n } else {\n setCenter({\n lat: parseFloat(farm.bounds[0].lat),\n lng: parseFloat(farm.bounds[0].lng),\n });\n setZoom(zoom > defaultZoom ? defaultZoom : zoom + 0.01);\n }\n };\n\n useEffect(() => {\n (async () => {\n const res = await sendSingleRequest(\n { start_time: toSecond(Date.now() - 8 * 3600 * 1000) },\n 'GET',\n 'api/boat/boat-track',\n true,\n );\n if (res.status) {\n setBoatTracks(res.data);\n }\n })();\n }, []);\n\n return (\n
\n
\n
\n
\n \n {translate(lang, 'Farms Map')}\n \n
\n
\n setFilter({ ...filter, ...v })}\n />\n setFilter({ ...filter, status: v })}\n />\n
\n
\n
\n
\n dispatch(saveMapType(v))}\n />\n
\n \n
\n
\n
\n {farmsData.map(farm => (\n moveCenter(farm)}\n >\n
\n {farm.name}\n \n ({farm.farm_number})\n \n
\n
\n {!!farm.bounds && farm.bounds.length > 0\n ? `${farm.bounds[0].lat} ${farm.bounds[0].lng}`\n : '-'}\n
\n
\n
\n {translate(lang, 'Total %s lines', farm.countOf.total)}\n
\n
\n {translate(lang, '%s lines empty', farm.countOf.empty)}\n
\n
\n {translate(\n lang,\n '%s lines ready to harvest',\n farm.countOf.ready_harvest,\n )}\n
\n
\n {translate(\n lang,\n '%s lines require assessment',\n farm.countOf.require_assessment,\n )}\n
\n
\n {translate(\n lang,\n '%s lines catch spat',\n farm.countOf.catch_spat,\n )}\n
\n
\n {translate(\n lang,\n '%s lines normal growing',\n farm.countOf.growing_mussel,\n )}\n
\n
\n
\n ))}\n
\n {maxStage > 0 && (\n
\n {[...Array(maxStage).keys()].map(x => (\n setBlurBit(blurBit ^ (1 << x))}\n >\n \n \n {translate(lang, 'Stage %s', x + 1)}\n \n
\n ))}\n
\n )}\n
\n
\n
\n \n \n );\n};\n\nexport default FarmsMap;\n","import { useMemo } from 'react';\nimport { Subtitle } from '../../components/shared';\nimport { IFarmProperty, ILineProperty } from '../../entities/farms.entities';\nimport { IMusselHarvest } from '../../entities/growing.entities';\nimport { formatNumber } from '../../entities/util-functions';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { amountDays } from '../../lib/farm.helpers';\nimport { labelNumber } from '../../lib/common.helpers';\n\ninterface Props {\n farm: IFarmProperty;\n line: ILineProperty;\n harvests: IMusselHarvest[];\n harvestID: number;\n firstStageLength: number | null;\n prevStageLength: number | null;\n lastStageLength: number | null;\n stageAmountSum: number;\n stageLengthSum: number;\n grownDays: number;\n}\n\nconst MusselHarvestHeader = ({\n farm,\n line,\n harvests,\n harvestID,\n firstStageLength,\n prevStageLength,\n lastStageLength,\n stageAmountSum,\n stageLengthSum,\n grownDays,\n}: Props) => {\n const lang = useSelector(selectLang);\n\n const { firstRatio, lastRatio } = useMemo(() => {\n const fr =\n firstStageLength === null || lastStageLength === null\n ? null\n : lastStageLength / firstStageLength;\n const lr =\n prevStageLength === null || lastStageLength === null\n ? null\n : lastStageLength / prevStageLength;\n return {\n firstRatio:\n fr === null ? (\n '- : -'\n ) : (\n <>\n {`1 : ${formatNumber(fr)}`}\n {`${firstStageLength}m : ${lastStageLength}m`}\n \n ),\n lastRatio:\n lr === null ? (\n '- : -'\n ) : (\n <>\n {`1 : ${formatNumber(lr)}`}\n {`${prevStageLength}m : ${lastStageLength}m`}\n \n ),\n };\n }, [firstStageLength, prevStageLength, lastStageLength]);\n const harvest = harvests.find(x => x.id === harvestID);\n\n return (\n
\n
\n \n {translate(lang, 'Farm name')}\n \n \n {farm.name}\n \n \n {translate(lang, 'Line name')}\n \n \n {line.line_name}\n \n
\n
\n \n {translate(lang, 'Farm number')}\n \n \n {farm.farm_number}\n \n \n {translate(lang, 'Harvested Line Length')}\n \n \n {labelNumber(stageLengthSum, 'm', '-')}\n \n
\n
\n \n {translate(lang, 'Farm area')}\n \n \n {labelNumber(\n farm.area.length <= 0 ? undefined : Number(farm.area),\n 'ha',\n '-',\n )}\n \n \n {translate(lang, 'Backbone')}\n \n \n {labelNumber(line.backbone ?? undefined, 'm', '-')}\n \n
\n
\n \n {translate(lang, 'This harvest amount')}\n \n \n {`${formatNumber(harvest?.amount ?? 0)} kg`}\n \n \n {translate(lang, 'Total harvested this stage')}\n \n \n {`${formatNumber(stageAmountSum)} kg`}\n \n
\n
\n \n {translate(lang, 'First seed ratio')}\n \n \n {firstRatio}\n \n \n {translate(lang, 'Last seed ratio')}\n \n \n {lastRatio}\n \n
\n
\n \n {translate(lang, 'Age of growth')}\n \n \n {amountDays(grownDays)}\n \n \n {translate(lang, 'Mussels per meters of line this stage')}\n \n \n {(stageAmountSum / stageLengthSum).toFixed(2)} kg/m\n \n
\n
\n );\n};\n\nexport default MusselHarvestHeader;\n","import { useMemo } from 'react';\nimport { Subtitle } from '../../components/shared';\nimport { IFarmProperty, ILineProperty } from '../../entities/farms.entities';\nimport {\n IOysterHarvest,\n IOysterSeeding,\n} from '../../entities/growing.entities';\nimport { formatNumber } from '../../entities/util-functions';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { labelNumber, piecesToDozens } from '../../lib/common.helpers';\nimport { SelectAccountSetting } from '../../store/extra/extra.selector';\nimport { getMortalityLabel } from '../../lib/farm.helpers';\n\ninterface Props {\n farm: IFarmProperty;\n line: ILineProperty;\n seedings: IOysterSeeding[];\n harvests: IOysterHarvest[];\n harvestID: number;\n stageAmountSum: number;\n stageMortalitySum: number;\n}\n\nconst OysterHarvestHeader = ({\n farm,\n line,\n seedings,\n harvests,\n harvestID,\n stageAmountSum,\n stageMortalitySum,\n}: Props) => {\n const lang = useSelector(selectLang);\n const accSetting = SelectAccountSetting(farm.id);\n\n const { seededBaskets, harvest } = useMemo(() => {\n const seededBaskets = seedings.reduce((p, c) => p + c.basket_count, 0);\n const harvest = harvests.find(x => x.id === harvestID);\n\n return { seededBaskets, harvest };\n }, [seedings, harvests, harvestID]);\n\n return (\n
\n
\n \n {translate(lang, 'Farm name')}\n \n \n {farm.name}\n \n \n {translate(lang, 'Line name')}\n \n \n {line.line_name}\n \n
\n
\n \n {translate(lang, 'Farm number')}\n \n \n {farm.farm_number}\n \n \n {translate(lang, 'Number of %s seeded', line.farming_method)}\n \n \n {seededBaskets}\n \n
\n
\n \n {translate(lang, 'Farm area')}\n \n \n {labelNumber(\n farm.area.length <= 0 ? undefined : Number(farm.area),\n 'ha',\n '-',\n )}\n \n \n {translate(lang, 'Line %s', line.farming_method)}\n \n \n {`${line.basket_count} ${line.farming_method}`}\n \n
\n
\n \n {translate(lang, 'This harvest amount')}\n \n \n {`${formatNumber(harvest?.amount_dz ?? 0)} dozens`}\n \n \n {translate(lang, 'Total harvested this stage')}\n \n \n {`${formatNumber(piecesToDozens(stageAmountSum))} dozens`}\n \n
\n {!!accSetting?.track_mortality && (\n
\n \n {translate(lang, 'This harvest mortality')}\n \n \n {harvest ? getMortalityLabel(harvest, 'dozens') : ''}\n \n \n {translate(lang, 'Mortality in this stage')}\n \n \n {!!stageAmountSum\n ? `${formatNumber(\n piecesToDozens(stageMortalitySum),\n )} dozens (${formatNumber(\n (stageMortalitySum / stageAmountSum) * 100,\n )} %)`\n : '-'}\n \n
\n )}\n
\n );\n};\n\nexport default OysterHarvestHeader;\n","import { useMemo } from 'react';\nimport { Subtitle } from '../../components/shared';\nimport { IFarmProperty, ILineProperty } from '../../entities/farms.entities';\nimport { formatNumber } from '../../entities/util-functions';\nimport {\n ISeaweedHarvest,\n ISeaweedSeeding,\n} from '../../entities/growing.entities';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { labelNumber } from '../../lib/common.helpers';\n\ninterface Props {\n farm: IFarmProperty;\n line: ILineProperty;\n seedings: ISeaweedSeeding[];\n harvests: ISeaweedHarvest[];\n}\n\nconst SeaweedHarvestHeader = ({ farm, line, seedings, harvests }: Props) => {\n const lang = useSelector(selectLang);\n\n const { seededArea, amountSum, firstRatio, lastRatio } = useMemo(() => {\n const seededArea = seedings.reduce((p, c) => p + c.tank_area, 0);\n const amountSum = harvests.reduce((p, c) => p + c.amount, 0);\n const ll =\n seededArea -\n harvests.reduce((p, c) => p + (c.tank_area ?? 0), 0) +\n (harvests[harvests.length - 1]?.tank_area ?? 0);\n const fr = !seedings[0]?.tank_area ? 0 : ll / seedings[0]?.tank_area;\n const lr = !harvests[harvests.length - 2]?.tank_area\n ? 0\n : ll / (harvests[harvests.length - 2].tank_area ?? 1);\n\n return {\n seededArea,\n amountSum,\n firstRatio: !fr ? '- : -' : `1 : ${formatNumber(fr)}`,\n lastRatio: !lr ? '- : -' : `1 : ${formatNumber(lr)}`,\n };\n }, [seedings, harvests]);\n\n return (\n
\n
\n \n {translate(lang, 'Farm name')}\n \n \n {farm.name}\n \n \n {translate(lang, 'Line name')}\n \n \n {line.line_name}\n \n
\n
\n \n {translate(lang, 'Farm number')}\n \n \n {farm.farm_number}\n \n \n {translate(lang, 'Total tank area')}\n \n \n {`${seededArea} m²`}\n \n
\n
\n \n {translate(lang, 'Farm area')}\n \n \n {labelNumber(\n farm.area.length <= 0 ? undefined : Number(farm.area),\n 'ha',\n '-',\n )}\n \n \n {translate(lang, 'Line tank area')}\n \n \n {labelNumber(line.tank_area ?? undefined, 'm²', '-')}\n \n
\n
\n \n {translate(lang, 'Total harvest amount')}\n \n \n {amountSum.toFixed(2)} kg\n \n \n {translate(lang, 'Seaweeds per m² of tank')}\n \n \n {(amountSum / seededArea).toFixed(2)} kg/m\n \n
\n
\n \n {translate(lang, 'First seed ratio')}\n \n \n {firstRatio}\n \n \n {translate(lang, 'Last seed ratio')}\n \n \n {lastRatio}\n \n
\n
\n );\n};\n\nexport default SeaweedHarvestHeader;\n","import { useEffect, useMemo, useState } from 'react';\nimport { IHarvestResource } from '../../entities/growing.entities';\nimport { Modal, Table } from 'antd';\nimport { Button, CloseIcon, Spinner, Subtitle } from '../shared';\nimport { formatNumber, hashColor } from '../../entities/util-functions';\nimport { sendSingleRequest } from '../../apis';\nimport { ITrackCode } from '../../entities/task.entities';\nimport { TrackStatus } from '../../entities/general.entities';\nimport moment from 'moment';\nimport { toMillisecond } from '../../util/toggleSecondMillisecond';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\n\ninterface ITrackRow {\n id: number | string;\n trackTime: string;\n harvestNumber: string;\n trackID: string;\n status: string;\n userName: string;\n color: string;\n children: Array<{\n id: number;\n trackTime: string;\n status: string;\n userName: string;\n color: string;\n }>;\n}\n\nconst trackColumns = (lang: TLang | undefined) => [\n {\n title: translate(lang, 'Date & Time'),\n key: 'time',\n render: (x: ITrackRow) => {x.trackTime},\n width: '25%',\n },\n {\n title: translate(lang, 'Track ID'),\n key: 'trackID',\n render: (x: ITrackRow) => {x.trackID},\n },\n {\n title: translate(lang, 'Harvest Number'),\n key: 'harvestNumber',\n render: (x: ITrackRow) => {x.harvestNumber},\n },\n {\n title: translate(lang, 'Status'),\n key: 'status',\n render: (x: ITrackRow) => (\n \n {x.status === TrackStatus.MIDDLE_HARVESTED\n ? TrackStatus.HARVESTED\n : x.status}\n \n ),\n },\n {\n title: translate(lang, 'User'),\n key: 'user',\n render: (x: ITrackRow) => {x.userName},\n },\n {\n title: '',\n key: 'right',\n render: (x: ITrackRow) => null,\n },\n];\n\nconst bagColumns = (lang: TLang | undefined) => [\n {\n title: translate(lang, 'Harvest ID'),\n key: 'harvest_id',\n render: (x: ITrackCode) => (\n \n {x.track_lines\n .filter(y => y.harvest)\n .map(y => y.harvest?.id)\n .join(', ')}\n \n ),\n },\n {\n title: translate(lang, 'Track ID'),\n key: 'track_id',\n render: (x: ITrackCode) => {x.track_id},\n },\n {\n title: translate(lang, 'Harvested Total'),\n key: 'harvested_total',\n render: (x: ITrackCode) => {\n const amount = x.track_lines\n .filter(y => y.harvest)\n .reduce((p, c) => p + (c.harvest?.amount ?? 0), 0);\n return {formatNumber(amount)};\n },\n },\n {\n title: translate(lang, 'Processed Total'),\n key: 'processed_total',\n render: (x: ITrackCode) => {\n const bag_details = x.qr_data?.bag_details;\n let sum = 0;\n if (bag_details) {\n sum = bag_details.reduce((p: number, c: any) => p + c.weight, 0);\n }\n return {formatNumber(sum)};\n },\n },\n {\n title: '',\n key: 'right',\n },\n];\n\nconst bagDataColumns = (lang: TLang | undefined) => [\n { title: '', key: 'first' },\n {\n title: translate(lang, 'Name'),\n key: 'name',\n render: (x: any) => {x?.name},\n },\n {\n title: translate(lang, 'Weight'),\n key: 'weight',\n render: (x: any) => {formatNumber(x?.weight)},\n },\n {\n title: '',\n key: 'right',\n },\n];\n\ninterface Props {\n visible: boolean;\n trackIDs?: string[];\n harvests?: IHarvestResource[];\n onClose: () => void;\n}\n\nconst HarvestTrackModal = ({ visible, harvests, trackIDs, onClose }: Props) => {\n const lang = useSelector(selectLang);\n\n const [loading, setLoading] = useState(false);\n const [tracks, setTracks] = useState([]);\n\n const trackRows = useMemo(() => {\n let trackRows: ITrackRow[] = [];\n for (const t of tracks) {\n const last = t.statuses[t.statuses.length - 1];\n const color = hashColor(\n `${Math.random() * 1000}-${last.tracked_time}-${t.track_id}`,\n );\n const harvestNumber = t.track_lines\n .filter(x => x.harvest)\n .map(x => x.harvest?.harvest_number)\n .join(', ');\n const row: ITrackRow = {\n id: t.id,\n trackTime: moment(toMillisecond(last.tracked_time)).format('lll'),\n trackID: t.track_id,\n harvestNumber,\n status: last.status,\n userName: last.user?.name ?? '',\n color,\n children: t.statuses.map((x, j) => ({\n id: j,\n trackTime: moment(toMillisecond(x.tracked_time)).format('lll'),\n status: x.status,\n userName: x.user?.name ?? '',\n color: color,\n })),\n };\n trackRows.push(row);\n }\n return trackRows;\n }, [tracks]);\n\n useEffect(() => {\n (async () => {\n setLoading(true);\n let tmpData: ITrackCode[] = [];\n if (harvests) {\n for (const h of harvests) {\n const res = await sendSingleRequest(\n { harvest_id: h.id },\n 'GET',\n 'api/task/track-codes',\n true,\n );\n if (res.status) {\n for (let x of res.data) {\n if (!tmpData.some(y => y.track_id === x.track_id)) {\n tmpData.push(x);\n }\n }\n }\n }\n } else if (trackIDs) {\n for (const t of trackIDs) {\n const res = await sendSingleRequest(\n { track_id: t },\n 'GET',\n 'api/task/track-codes',\n true,\n );\n if (res.status) {\n for (let x of res.data) {\n if (!tmpData.some(y => y.track_id === x.track_id)) {\n tmpData.push(x);\n }\n }\n }\n }\n }\n tmpData = tmpData.filter(x => x.statuses.length > 0);\n tmpData.sort(\n (a, b) => a.statuses[0].tracked_time - b.statuses[0].tracked_time,\n );\n setTracks(tmpData);\n setLoading(false);\n })();\n }, [harvests, trackIDs]);\n\n const { totAmount, totProcessed } = useMemo(() => {\n let totAmount = 0,\n totProcessed = 0;\n let hc: number[] = [];\n if (tracks) {\n for (const t of tracks) {\n if (t.qr_data && t.qr_data.bag_details) {\n totProcessed += t.qr_data.bag_details.reduce(\n (p: number, c: any) => p + c.weight,\n 0,\n );\n }\n for (let l of t.track_lines) {\n if (l.harvest && !hc.includes(l.harvest.id)) {\n totAmount += l.harvest.amount;\n hc.push(l.harvest.id);\n }\n }\n }\n }\n return { totAmount, totProcessed };\n }, [tracks]);\n\n return (\n }\n width={1100}\n footer={null}\n >\n
\n
\n \n {translate(lang, 'Track Information')}\n \n
\n {loading ? (\n
\n \n
\n ) : (\n <>\n
\n ({\n style: {\n backgroundColor: `${row.color}33`,\n },\n })}\n />\n
\n
\n \n {translate(lang, 'Processed Bag Result')}\n \n
\n
\n !!x.qr_data?.bag_details)}\n expandable={{\n expandedRowRender: d => (\n
\n \n
\n ),\n }}\n />\n
\n
\n {`${translate(lang, 'Harvested Total')}: ${formatNumber(\n totAmount,\n )} kg`}\n
\n
\n {`${translate(lang, 'Processed Total')}: ${formatNumber(\n totProcessed,\n )} kg`}\n
\n
\n
\n \n )}\n
\n \n {translate(lang, 'Close')}\n \n
\n
\n \n );\n};\n\nexport default HarvestTrackModal;\n","import { Modal, Table } from 'antd';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport ReactImageGallery from 'react-image-gallery';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport { sendSingleRequest } from '../../apis';\nimport {\n BreadcrumbComponent,\n Button,\n ModalComponent,\n Spinner,\n Title,\n} from '../../components/shared';\nimport {\n IAssessmentResource,\n IFarmProperty,\n ILineProperty,\n IMaintenanceResource,\n} from '../../entities/farms.entities';\nimport getBreadcrumbMenu from '../../util/BreadcrumbMenu';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport HarvestsTable from '../../components/lines/HarvestsTable';\nimport TimelineView from '../../components/lines/TimelineView';\nimport {\n IHarvestResource,\n IMusselHarvest,\n IMusselSeeding,\n IOysterHarvest,\n IOysterSeeding,\n ISeaweedHarvest,\n ISeaweedSeeding,\n ISeedingResource,\n} from '../../entities/growing.entities';\nimport MaintenanceTable from '../../components/lines/MaintenanceTable';\nimport MusselHarvestHeader from './MusselHarvestHeader';\nimport OysterHarvestHeader from './OysterHarvestHeader';\nimport SeaweedHarvestHeader from './SeaweedHarvestHeader';\nimport { TBusinessType } from '../../entities/general.entities';\nimport HarvestTrackModal from '../../components/track-modals/HarvestTrackModal';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\nimport { selectAllFarms } from '../../store/extra/extra.selector';\nimport { labelNumber, labelRange } from '../../lib/common.helpers';\nimport { IInventoryManage } from '../../entities/inventory.entities';\n\ninterface IDataResource {\n farm: IFarmProperty;\n line: ILineProperty;\n seedings: ISeedingResource[];\n maintenances: IMaintenanceResource[];\n assessments: IAssessmentResource[];\n inventory_seeds: IInventoryManage[];\n harvests: IHarvestResource[];\n pdf_form?: any;\n main_seeding_id: number;\n main_harvest_id: number;\n first_stage_length: number | null;\n prev_stage_length: number | null;\n last_stage_length: number | null;\n stage_length_sum: number;\n stage_amount_sum: number;\n stage_mortality_sum: number;\n grown_days: number;\n}\n\nconst seedColumns = (\n type: TBusinessType,\n method: string | null,\n lang: TLang | undefined,\n) => {\n let result: any = [\n {\n key: 'id',\n dataIndex: 'id',\n title: 'ID',\n render: (x: any) => {x},\n },\n {\n key: 'planned_date_seed',\n dataIndex: 'planned_date_seed',\n title: translate(lang, 'Date seeded'),\n render: (x: any) => {defaultDateFormat(x)},\n },\n {\n key: 'planned_date_harvest',\n dataIndex: 'planned_date_harvest',\n title: translate(lang, 'Planned date harvest'),\n render: (x: any) => {defaultDateFormat(x)},\n },\n {\n key: 'season_name',\n dataIndex: 'season_name',\n title: translate(lang, 'Season'),\n render: (x: string) => {x},\n },\n ];\n if (type === 'MUSSEL') {\n result.push(\n {\n key: 'line_length',\n title: translate(lang, 'Longline length'),\n render: (x: IMusselSeeding) => (\n {labelNumber(x.line_length, 'm', '-')}\n ),\n },\n {\n key: 'spat_storage',\n dataIndex: '',\n title: translate(lang, 'Spats'),\n render: (x: IMusselSeeding) => (\n \n {x.spat_storage\n ? `${x.spat_storage.source} - ${x.spat_amount} kg`\n : ''}\n \n ),\n },\n {\n key: 'drop',\n dataIndex: 'drop',\n title: translate(lang, 'Drop'),\n render: (x: any) => {x === null ? '-' : x},\n },\n {\n key: 'submersion',\n dataIndex: 'submersion',\n title: translate(lang, 'Submersion'),\n render: (x: any) => {x === null ? '-' : x},\n },\n );\n } else if (type === 'OYSTER') {\n result.push(\n {\n key: 'basket_count',\n title: translate(lang, '%s count', method),\n render: (x: IOysterSeeding) => {x.basket_count ?? ''},\n },\n {\n key: 'spat_storage',\n dataIndex: '',\n title: translate(lang, 'Spats'),\n render: (x: IOysterSeeding) => (\n \n {x.spat_storage\n ? `${x.spat_storage.source} - ${x.spat_amount_dz} dz`\n : ''}\n \n ),\n },\n );\n }\n result.push(\n {\n key: 'spat_size',\n dataIndex: '',\n title: translate(lang, 'Spat Size'),\n render: (x: ISeedingResource) => (\n \n {labelRange(x.spat_size, x.spat_size_max ?? undefined, 'mm')}\n \n ),\n },\n {\n key: 'density',\n title: translate(lang, 'Density'),\n render: (x: any) => (\n \n {labelRange(x.density ?? undefined, x.density_max ?? undefined)}\n \n ),\n },\n );\n return result;\n};\n\ninterface IGalleryImages {\n original: string;\n thumbnail: string;\n}\n\nconst formDownload = (pdfFile: any) => {\n if (!pdfFile) return;\n const bc = atob(pdfFile);\n const bn = bc.split('').map(x => x.charCodeAt(0));\n const ba = new Uint8Array(bn);\n const blob = new Blob([ba], { type: 'application/pdf' });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = 'harvest-form.pdf';\n link.click();\n window.URL.revokeObjectURL(link.href);\n};\n\nconst HarvestDetailPage = () => {\n const dispatch = useDispatch();\n\n const params = useParams<{ harvestId: string }>();\n const breadcrumbItems = getBreadcrumbMenu('HARVEST_DETAIL', {\n HARVEST_ID: params.harvestId,\n });\n const farmsData = useSelector(selectAllFarms);\n const lang = useSelector(selectLang);\n\n const [harvestData, setHarvestData] = useState();\n const [asPhotoModalVisible, setAsPhotoModalVisible] = useState(false);\n const [assessPhotos, setAssessPhotos] = useState>([]);\n const [infoShow, setInfoShow] = useState(false);\n const [infoText, setInfoText] = useState('');\n const [visTrack, setVisTrack] = useState(false);\n const [tagLogs, setTagLogs] = useState([]);\n\n const loadData = useCallback(async () => {\n const res = await sendSingleRequest(\n { require_pdf: true, with_harvest_spats: true, with_history: true },\n 'GET',\n `api/farm/line/harvest-data?harvest_id=${params.harvestId}`,\n true,\n );\n if (res.status) {\n const lsp = await sendSingleRequest(\n {},\n 'GET',\n `api/farm/line/tag-logs/${res.data.line.id}`,\n true,\n );\n let logs: any[] = [];\n if (lsp.status) {\n for (let x of lsp.data) {\n if (!x.is_on) {\n logs.push(\n {\n id: x.id,\n tag: x.tag,\n is_on: true,\n logged_date: x.created_at,\n user: x.user,\n },\n {\n id: x.id,\n tag: x.tag,\n is_on: false,\n logged_date: x.updated_at,\n user: x.user,\n },\n );\n } else {\n logs.push({\n id: x.id,\n tag: x.tag,\n is_on: true,\n logged_date: x.created_at,\n user: x.user,\n });\n }\n }\n }\n setTagLogs(logs);\n setHarvestData(res.data);\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Something went wrong'),\n }),\n );\n }\n }, [params.harvestId]);\n\n const openImages = (images: string[]) => {\n setAsPhotoModalVisible(true);\n setAssessPhotos(\n images.map(image => {\n return {\n original: image,\n thumbnail: image,\n };\n }),\n );\n };\n const openInfo = (comment: any) => {\n setInfoShow(true);\n setInfoText(comment && comment.length > 0 ? comment : 'No comments yet');\n };\n\n const tableColumns = () => {\n if (!harvestData) return [];\n\n let result = seedColumns(\n harvestData.farm.type,\n harvestData.line.farming_method,\n lang,\n );\n result.splice(1, 0, {\n key: 'line',\n title: translate(lang, 'Farm/Line'),\n render: (x: ISeedingResource) => (\n \n {`${farmsData.find(y => y.id === x.line.farm_id)?.name} - ${\n x.line.line_name\n }`}\n \n ),\n });\n result.push(\n {\n key: 'comment',\n dataIndex: 'comment',\n title: translate(lang, 'Comment'),\n render: (x: any) => (\n undefined}\n onClick={openInfo.bind(this, x)}\n >\n {translate(lang, 'View')}\n \n ),\n },\n {\n key: 'images',\n dataIndex: 'images',\n title: translate(lang, 'Photo'),\n render: (x: any) =>\n !!x && x.length > 0 ? (\n
\n {translate(lang, 'View')}\n
\n ) : (\n \n ),\n },\n {\n key: 'empty',\n title: '',\n render: (x: any) => ,\n },\n );\n return result;\n };\n\n const timelines = useMemo(() => {\n if (!harvestData) {\n return [];\n }\n let planned: any[] = [];\n for (let seed of harvestData.seedings as any) {\n const dates = seed.planned_date_history ?? [];\n for (let i = 0; i < dates.length - 1; i++) {\n if (dates[i] !== dates[i + 1]) {\n planned.push({\n id: `${seed.id} - ${i}`,\n old_date: dates[i],\n new_date: dates[i + 1],\n });\n }\n }\n }\n return [\n ...harvestData.seedings.map(x => ({\n type: 'SEEDING',\n data: x,\n })),\n ...harvestData.assessments.map(x => ({\n type: 'ASSESSMENT',\n data: x,\n })),\n ...harvestData.maintenances.map(x => ({\n type: 'MAINTENANCE',\n data: x,\n })),\n ...harvestData.inventory_seeds.map(x => ({\n type: 'INVENTORY_SEED',\n data: x,\n })),\n ...harvestData.harvests.map(x => ({\n type: 'HARVEST',\n data: x,\n })),\n ...tagLogs.map(x => ({\n type: 'TAG_LOG',\n data: x,\n })),\n ...planned.map((x: any) => ({ type: 'HARVEST_PLANNED', data: x })),\n ];\n }, [harvestData, tagLogs]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return (\n
\n
\n
\n
\n \n
\n {!!harvestData?.pdf_form && (\n formDownload(harvestData.pdf_form)}\n >\n {translate(lang, 'Download Harvest Declaration Form')}\n \n )}\n {!!harvestData?.harvests && harvestData.harvests.length > 0 && (\n setVisTrack(true)}\n >\n {translate(lang, 'View Harvest Tracking')}\n \n )}\n
\n
\n {harvestData ? (\n <>\n {harvestData.farm.type === 'MUSSEL' ? (\n \n ) : harvestData.farm.type === 'OYSTER' ? (\n \n ) : (\n \n )}\n {timelines.length > 0 && (\n \n )}\n
\n
\n \n {translate(lang, 'Seedings')}\n \n \n
\n
\n
\n \n
\n
\n loadData()}\n type={harvestData.farm.type}\n farmID={harvestData.farm.id}\n />\n
\n setInfoShow(false)}\n type=''\n title={translate(lang, 'Comment')}\n text={infoText}\n />\n {asPhotoModalVisible && (\n setAsPhotoModalVisible(false)}\n onCancel={() => setAsPhotoModalVisible(false)}\n width={1000}\n >\n \n \n )}\n \n ) : (\n
\n \n
\n )}\n
\n
\n {!!visTrack && !!harvestData?.harvests && (\n setVisTrack(false)}\n />\n )}\n
\n );\n};\n\nexport default HarvestDetailPage;\n","import { sendSingleRequest } from '../../apis';\nimport { IThunkType } from '../../store/rootReducer';\nimport { showFeedback } from '../../store/ui/ui.actions';\n\ninterface IUser {\n id: number;\n name: string;\n avatar: string | null;\n}\n\nexport interface IUserMessageResource {\n id: number;\n content: string;\n sender: IUser | null;\n receiver: IUser | null;\n is_read: boolean;\n created_at: number;\n}\n\nexport const getAccountUsers = async (dispatch: IThunkType) => {\n const response = await sendSingleRequest(\n {},\n 'GET',\n `api/user-message/users`,\n true,\n );\n if (response.status) {\n return response.data;\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Something went wrong',\n }),\n );\n return null;\n }\n};\n\ninterface IUMProps {\n user_id: number;\n limit: number;\n offset?: number;\n}\n\nexport const getUserMessages = async (dispatch: IThunkType, data: IUMProps) => {\n const response = await sendSingleRequest(\n data,\n 'POST',\n `api/user-message/messages`,\n true,\n );\n if (response.status) {\n return response.data;\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Something went wrong',\n }),\n );\n return null;\n }\n};\n\nexport const sendMessage = async (\n dispatch: IThunkType,\n userId: number,\n content: string,\n) => {\n const response = await sendSingleRequest(\n { receiver_id: userId, content },\n 'POST',\n `api/user-message/message`,\n true,\n );\n if (response.status) {\n return response.data;\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Something went wrong',\n }),\n );\n return null;\n }\n};\n\nexport const setReadAction = async (\n dispatch: IThunkType,\n userId: number,\n lastMsgId: number,\n) => {\n const response = await sendSingleRequest(\n { sender_id: userId, last_message_id: lastMsgId },\n 'POST',\n `api/user-message/read-message`,\n true,\n );\n if (response.status) {\n return true;\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Something went wrong!',\n }),\n );\n return false;\n }\n};\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n getAccountUsers,\n getUserMessages,\n IUserMessageResource,\n sendMessage,\n setReadAction,\n} from './UserMessagesFunctions';\nimport { Button, Input, Spinner } from '../../components/shared';\nimport moment from 'moment';\nimport { Avatar } from 'antd';\nimport { UserOutlined } from '@ant-design/icons';\nimport toggleSecondMillisecond from '../../util/toggleSecondMillisecond';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectNewUserMessage } from '../../store/users/users.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport './styles.scss';\n\ninterface IUserProp {\n id: number;\n name: string;\n company_name: string | null;\n company_address: string | null;\n avatar: string | null;\n unread_msg_count: number;\n}\n\nconst UserMessagesPage = () => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const newUserMessage = useSelector(selectNewUserMessage);\n const profile = useSelector(selectProfile);\n\n const [users, setUsers] = useState([]);\n const [suId, setSuId] = useState(null);\n const [limit, setLimit] = useState(10);\n const [messages, setMessages] = useState([]);\n const [loadingMsg, setLoadingMsg] = useState(false);\n const [content, setContent] = useState('');\n const [disable, setDisable] = useState(false);\n\n const readMsgHandle = (uId: any, msg: any) => {\n if (\n uId === null ||\n uId === undefined ||\n msg === null ||\n msg === undefined ||\n msg.length <= 0\n )\n return;\n const i = users.findIndex(x => x.id === uId);\n if (i < 0 || users[i].unread_msg_count <= 0) return;\n setReadAction(dispatch, uId, msg[0].id).then(r => {\n if (!r) return;\n const tmp = [...users];\n tmp[i].unread_msg_count = 0;\n setUsers(tmp);\n });\n };\n const handleClickUser = (userId: number) => {\n setSuId(userId);\n };\n const inputContentHandle = (\n event: React.ChangeEvent,\n ) => {\n readMsgHandle(suId, messages);\n setContent(event.target.value);\n };\n const sendClickHandle = (event: React.MouseEvent) => {\n event.preventDefault();\n if (content.length <= 0 || suId === null) return;\n setDisable(true);\n sendMessage(dispatch, suId, content).then(r => {\n setDisable(false);\n setMessages([r, ...messages]);\n setContent('');\n });\n };\n const onScrollEvent = (event: React.UIEvent) => {\n const target: any = event.target;\n if (\n target.scrollHeight + target.scrollTop <= target.clientHeight + 1 &&\n suId\n ) {\n getUserMessages(dispatch, {\n user_id: suId,\n limit: limit + 10,\n offset: limit,\n }).then(m => {\n if (m !== undefined && m !== null && m.length > 0) {\n setMessages([...messages, ...m]);\n setLimit(limit + m.length);\n }\n });\n }\n };\n\n useEffect(() => {\n if (suId) {\n setLoadingMsg(true);\n getUserMessages(dispatch, { user_id: suId, limit }).then(m => {\n if (m !== undefined && m !== null) {\n setMessages(m);\n readMsgHandle(suId, m);\n }\n setLoadingMsg(false);\n });\n }\n }, [dispatch, suId]);\n\n useEffect(() => {\n getAccountUsers(dispatch).then(d => {\n if (d !== undefined && d !== null) setUsers(d);\n });\n }, [dispatch]);\n\n useEffect(() => {\n if (suId && newUserMessage && newUserMessage.sender_id === suId) {\n getUserMessages(dispatch, { user_id: suId, limit }).then(m => {\n if (m !== undefined && m !== null) setMessages(m);\n });\n getAccountUsers(dispatch).then(d => {\n if (d !== undefined && d !== null) setUsers(d);\n });\n }\n }, [newUserMessage, suId, limit]);\n\n return (\n
\n
\n
\n
\n {users.map(user => (\n \n
\n }\n />\n
\n
\n
{user.name}
\n
\n {translate(lang, 'Company')}: {user.company_name ?? '---'}\n
\n
\n {user.unread_msg_count > 0 && (\n
\n {user.unread_msg_count}\n
\n )}\n
\n ))}\n
\n
\n {loadingMsg ? (\n \n ) : (\n suId && (\n <>\n {messages.length > 0 && (\n \n {messages.map(msg => (\n \n
\n
{msg.content}
\n
\n {moment(\n toggleSecondMillisecond(msg.created_at),\n ).format('dddd hh:mm a')}\n
\n
\n
\n ))}\n
\n )}\n
\n
\n \n
\n
\n \n {translate(lang, 'Send')}\n \n
\n
\n \n )\n )}\n
\n \n \n \n );\n};\n\nexport default UserMessagesPage;\n","import { useRef, useState } from 'react';\nimport { Modal } from 'antd';\nimport ModalFeedbackView from '../../components/shared/feedback/ModalFeedbackView';\nimport { Button, CloseIcon, Dropdown, Subtitle } from '../../components/shared';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n selectMusselFarms,\n selectMusselSpats,\n} from '../../store/farms/farms.selector';\nimport { IFarmResource, ILineResource } from '../../entities/farms.entities';\nimport placeholder from '../../images/placeholder.png';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { sendSingleRequest } from '../../apis';\nimport { loadQueueData } from '../../store/farms/farms.actions';\nimport {\n convertAssessImportForm,\n convertFloatingImportForm,\n convertHarvestImportForm,\n convertSeedImportForm,\n} from '../../lib/form.helpers';\nimport { selectAssessmentFields } from '../../store/automation/automation.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectInventories } from '../../store/inventories/inventories.selector';\n\ninterface Props {\n visible: boolean;\n onClose: () => void;\n}\n\nconst PaperFormModal = ({ visible, onClose }: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectMusselFarms);\n const spatStorages = useSelector(selectMusselSpats);\n const inventories = useSelector(selectInventories);\n const assessmentFields = useSelector(selectAssessmentFields);\n\n const fileInputRef = useRef(null);\n\n const [disabled, setDisabled] = useState(false);\n const [curFarm, setCurFarm] = useState();\n const [curLine, setCurLine] = useState();\n const [image, setImage] = useState();\n const [scanned, setScanned] = useState();\n\n const selectFarm = (v: string) => {\n const farm = farmsData.find(x => x.id === Number(v));\n setCurFarm(farm);\n setCurLine(undefined);\n };\n const selectLine = (v: string) => {\n const line = curFarm?.lines.find(x => x.id === Number(v));\n setCurLine(line);\n };\n\n const farmOptions = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }));\n const lineOptions = curFarm?.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n }));\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n type: 'error',\n message: translate(lang, message),\n isMessageModal: true,\n }),\n );\n const handleImageChange = (e: any) => {\n if (e.target.files && e.target.files[0]) {\n const file = e.target.files[0];\n const reader = new FileReader();\n\n reader.onload = (event: ProgressEvent) => {\n setImage(event.target?.result as string);\n };\n reader.readAsDataURL(file);\n\n setScanned(undefined);\n }\n };\n const parseImage = async () => {\n if (!image) {\n showError('Please select paper form image');\n return null;\n }\n setDisabled(true);\n const base64Image = image.split(',')[1];\n const response = await sendSingleRequest(\n { image: base64Image },\n 'POST',\n 'api/textract',\n true,\n );\n setDisabled(false);\n if (!response.status) {\n showError(response.data?.message ?? 'Unknown error');\n return null;\n }\n const { type, data } = response.data;\n let result: any = {};\n if (type === 'seeding') {\n if (data.length <= 0) {\n showError('_no_data_recognized');\n return null;\n }\n result = convertSeedImportForm(\n data[0],\n farmsData,\n spatStorages,\n inventories,\n image,\n );\n } else if (type === 'assessment') {\n if (data.length <= 0) {\n showError('_no_data_recognized');\n return null;\n }\n result = convertAssessImportForm(\n data[0],\n assessmentFields,\n farmsData,\n image,\n );\n } else if (type === 'floating') {\n if (data.length <= 0) {\n showError('_no_data_recognized');\n return null;\n }\n result = convertFloatingImportForm(\n data[0],\n farmsData,\n inventories,\n image,\n );\n } else {\n result = convertHarvestImportForm(data, farmsData, inventories, image);\n }\n if (result.farm_id) {\n const farm = farmsData.find(x => x.id === result.farm_id);\n setCurFarm(farm);\n if (result.line_id && farm) {\n const line = farm.lines.find(x => x.id === result.line_id);\n setCurLine(line);\n }\n }\n return { type: `paper_${type}`, data: result };\n };\n const handleConfirm = async () => {\n const parsed = scanned ?? (await parseImage());\n if (!parsed) return;\n\n if (!scanned) {\n setScanned(parsed);\n }\n let { type, data } = parsed;\n if (curFarm) {\n data.farm_id = curFarm.id;\n } else if (!data.farm_id) {\n return showError('Please select farm');\n }\n if (curLine) {\n data.line_id = curLine.id;\n data.seeding_id = curLine.growing_cycle?.main_seed.id;\n } else if (!data.line_id) {\n return showError('Please select line');\n }\n if (type !== 'paper_seeding' && !data.seeding_id) {\n return showError('_line_empty');\n }\n setDisabled(true);\n const response = await sendSingleRequest(\n { type, data },\n 'POST',\n 'api/queue/entity',\n true,\n );\n if (response.status) {\n await dispatch(loadQueueData());\n onClose();\n } else {\n setDisabled(false);\n showError(response.data?.message ?? 'Unknown error');\n }\n };\n\n return (\n }\n width={650}\n >\n
\n
\n \n {translate(lang, 'Upload paper form image')}\n \n
\n
\n fileInputRef.current?.click()}\n style={{ cursor: 'pointer', textAlign: 'center' }}\n >\n \n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n \n );\n};\n\nexport default PaperFormModal;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAa3ElEQVR4nO3d63dTZfr44TuHnltoaYsVOSgjI44zzouZNcv//7XjUgfGpQ4KlmJpi/SUnnL6vfBbfiIFs9M7ZLe9rrV4IabJ8ySh+WQfnl35/PPPuwEAQJrqsAcAAHDeCCwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsAIJnAAgBIJrAAAJIJLACAZAILACCZwAIASCawAACSCSwAgGQCCwAgmcACAEgmsAAAkgksAIBkAgsA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AQAkE1gAAMkEFgBAMoEFAJBMYAEAJBNYAADJBBYAQDKBBQCQTGABACQTWAAAyQQWAEAygQUAkExgAQAkE1gAAMkEFgBAMoEFAJBMYAEAJBNYAADJBBYAQDKBBQCQTGABACQTWAAAyQQWAEAygQUAkExgAQAkE1gAAMkEFgBAMoEFAJBMYAEAJBNYAADJBBYAQDKBBQCQTGABACQTWAAAyQQWAEAygQUAkExgAQAkE1gAAMkEFgBAMoEFAJBMYAEAJBNYAADJBBYAQDKBBQCQTGABACQTWAAAyQQWAEAygQUAkExgAQAkE1gAAMkEFgBAMoEFAJBMYAEAJBNYAADJBBYAQDKBBQCQTGABACQTWAAAyQQWAEAygQUAkExgAQAkE1gAAMkEFgBAMoEFAJBMYAEAJBNYAADJBBYAQDKBBQCQTGABACQTWAAAyQQWAEAygQUAkExgAQAkE1gAAMkEFgBAMoEFAJBMYAEAJBNYAADJBBYAQDKBBQCQTGABACQTWAAAyQQWAEAygQUAkExgAQAkE1gAAMkEFgBAMoEFAJBMYAEAJBNYAADJBBYAQDKBBQCQTGABACQTWAAAyQQWAEAygQUAkExgAQAkE1gAAMkEFgBAMoEFAJBMYAEAJBNYAADJBBYAQDKBBQCQTGABACQTWAAAyQQWAEAygQUAkExgAQAkE1gAAMkEFgBAMoEFAJBMYAEAJBNYAADJBBYAQDKBBQCQTGABACQTWAAAyQQWAEAygQUAkExgAQAkE1gAAMkEFgBAMoEFAJBMYAEAJBNYAADJBBYAQDKBBQCQTGABACT7f4049xTUuypyAAAAAElFTkSuQmCC\"","import { useCallback, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport {\n Button,\n CloseIcon,\n Map,\n ModalComponent,\n Spinner,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport { loadQueueData } from '../../store/farms/farms.actions';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { Modal } from 'antd';\nimport SeedingModal from '../../components/farm-modals/SeedingModal';\nimport MaintenanceModal from '../../components/farm-modals/MaintenanceModal';\nimport FloatManageModal from '../../components/farm-modals/FloatManageModal';\nimport AssessmentModal from '../../components/farm-modals/AssessmentModal';\nimport HarvestCompleteModal from '../../components/farm-modals/HarvestCompleteModal';\nimport { selectQueueData } from '../../store/farms/farms.selector';\nimport {\n IQueueItem,\n TValidationType,\n} from '../../entities/automation.entities';\nimport PaperFormModal from './PaperFormModal';\nimport { useHistory } from 'react-router-dom';\nimport {\n IWeatherLocation,\n TBusinessType,\n} from '../../entities/general.entities';\nimport BulkHarvestModal from '../../components/farm-modals/BulkHarvestModal';\nimport { TLang } from '../../entities/ui.entities';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport GrowerSeedModal from '../../components/farm-modals/GrowerSeedModal';\nimport GrowerHarvestModal from '../../components/farm-modals/GrowerHarvestModal';\nimport { SelectIsGrower } from '../../store/extra/extra.selector';\nimport GrowerMaintenanceModal from '../../components/farm-modals/GrowerMaintenanceModal';\nimport CatchSpatModal from '../../components/farm-modals/CatchSpatModal';\nimport { updateUserMeta } from '../../store/auth/auth.actions';\nimport './styles.scss';\n\nconst WarningBox = ({\n onClick,\n lang,\n}: {\n onClick: (x: any) => void;\n lang: TLang | undefined;\n}) => (\n <>\n
{translate(lang, '_validate_action_warning')}
\n \n {translate(lang, '_validate_click_here')}\n \n \n);\n\ninterface MapProps {\n title: string;\n visible: boolean;\n location: IWeatherLocation;\n onClose: () => void;\n}\n\nconst MapModal = ({ title, visible, onClose, location }: MapProps) => (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {title}\n \n
\n
\n \n
\n
\n \n);\n\nconst titles = {\n assessment: 'Assessment data',\n maintenance: 'Maintenance data',\n seeding: 'Seed data',\n inventory_seed: 'Floats data',\n harvest: 'Harvest data',\n paper_seeding: 'Paper Seeding form',\n paper_floating: 'Paper Floating form',\n paper_assessment: 'Paper Assessment form',\n paper_harvest: 'Paper Harvest form',\n bulk_mussel_harvest: 'Bulk Mussel Harvests',\n bulk_oyster_harvest: 'Bulk Oyster Harvests',\n bulk_mussel_seed: 'Bulk Mussel Seeding',\n bulk_oyster_seed: 'Bulk Oyster Seeding',\n};\n\ninterface IDetail {\n [key: string]: any;\n id: number;\n _type: TValidationType;\n crop_type: TBusinessType;\n}\n\nconst QueuedDataPage = () => {\n const dispatch = useDispatch();\n const history = useHistory();\n const queueData = useSelector(selectQueueData);\n const lang = useSelector(selectLang);\n\n const [loading, setLoading] = useState(true);\n const [selectedData, setSelectedData] = useState();\n const [disable, setDisable] = useState(false);\n const [mapLoc, setMapLoc] = useState();\n const [deletingItem, setDeletingItem] = useState<{\n type: string;\n item_id: number;\n }>();\n const [updatingItem, setUpdatingItem] = useState();\n const [warning, setWarning] = useState();\n const [showCustom, setShowCustom] = useState(false);\n\n const loadData = useCallback(async () => {\n setLoading(true);\n await dispatch(updateUserMeta());\n await dispatch(loadQueueData());\n setLoading(false);\n }, [dispatch]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n const showSuccess = (message: string) =>\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, message),\n }),\n );\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n\n const confirmMaintenance = async (data: any) => {\n if (!selectedData) return;\n if (updatingItem !== undefined) {\n const res = await updateQueueItem(data, updatingItem.id, 'maintenance');\n if (res.status) {\n await loadData();\n setSelectedData(undefined);\n showSuccess(res.data?.message ?? 'Success');\n } else {\n showError(res.data?.message ?? 'Something went wrong');\n }\n } else {\n setDisable(true);\n const res = await sendSingleRequest(\n {\n id: selectedData.id,\n ...data,\n weather_condition: selectedData.weather_condition,\n },\n 'POST',\n 'api/queue/confirm-maintenance',\n true,\n );\n if (res.status) {\n await loadData();\n setSelectedData(undefined);\n showSuccess(res.data?.message ?? 'Success');\n } else {\n showError(res.data?.message ?? 'Something went wrong');\n }\n setDisable(false);\n }\n };\n const confirmAssessment = async (data: any) => {\n if (!selectedData) return;\n if (updatingItem) {\n const res = await updateQueueItem(data, updatingItem.id, 'assessment');\n if (res.status) {\n await loadData();\n setSelectedData(undefined);\n showSuccess(res.data?.message ?? 'Success');\n } else {\n showError(res.data?.message ?? 'Something went wrong');\n }\n } else {\n setDisable(true);\n const res = await sendSingleRequest(\n {\n id: selectedData.id,\n ...data,\n weather_condition: selectedData.weather_condition,\n },\n 'POST',\n 'api/queue/confirm-assessment',\n true,\n );\n if (res.status) {\n await loadData();\n setSelectedData(undefined);\n showSuccess(res.data?.message ?? 'Success');\n } else {\n showError(res.data?.message ?? 'Something went wrong');\n }\n setDisable(false);\n }\n };\n const confirmInventorySeed = async (data: any) => {\n if (!selectedData) return;\n if (updatingItem) {\n const res = await updateQueueItem(\n data,\n updatingItem.id,\n 'inventory_seed',\n );\n if (res.status) {\n await loadData();\n setSelectedData(undefined);\n showSuccess(res.data?.message ?? 'Success');\n } else {\n showError(res.data?.message ?? 'Something went wrong');\n }\n } else {\n setDisable(true);\n const res = await sendSingleRequest(\n {\n id: selectedData.id,\n ...data,\n weather_condition: selectedData.weather_condition,\n },\n 'POST',\n 'api/queue/confirm-inventory_seed',\n true,\n );\n if (res.status) {\n await loadData();\n setSelectedData(undefined);\n showSuccess(res.data?.message ?? 'Success');\n } else {\n showError(res.data?.message ?? 'Something went wrong');\n }\n setDisable(false);\n }\n };\n const confirmSeeding = async (data: any) => {\n if (!selectedData) return;\n if (updatingItem) {\n const res = await updateQueueItem(data, updatingItem.id, 'seeding');\n if (res.status) {\n await loadData();\n setSelectedData(undefined);\n showSuccess(res.data?.message ?? 'Success');\n } else {\n showError(res.data?.message ?? 'Something went wrong');\n }\n return true;\n } else {\n setDisable(true);\n const r = await sendSingleRequest(\n {\n id: selectedData.id,\n ...data,\n weather_condition: selectedData.weather_condition,\n },\n 'POST',\n `api/queue/confirm-seeding/${selectedData.crop_type}`,\n true,\n );\n setDisable(false);\n if (!r.status) {\n return r.data;\n } else {\n await loadData();\n setSelectedData(undefined);\n showSuccess(r.data?.message ?? 'Success');\n return true;\n }\n }\n };\n const confirmHarvest = async (data: any) => {\n if (!selectedData) return;\n if (updatingItem) {\n const res = await updateQueueItem(data, updatingItem.id, 'harvest');\n if (res.status) {\n await loadData();\n setSelectedData(undefined);\n showSuccess(res.data?.message ?? 'Success');\n } else {\n showError(res.data?.message ?? 'Something went wrong');\n }\n return res;\n } else {\n setDisable(true);\n const res = await sendSingleRequest(\n {\n id: selectedData.id,\n ...data,\n weather_condition: selectedData.weather_condition,\n },\n 'POST',\n `api/queue/confirm-harvest/${selectedData.crop_type}`,\n true,\n );\n if (res.status) {\n await loadData();\n setSelectedData(undefined);\n showSuccess(res.data?.message ?? 'Success');\n }\n setDisable(false);\n return res;\n }\n };\n const confirmBulkItem = async (data: any) => {\n if (!selectedData) return;\n if (updatingItem) {\n const res = await updateQueueItem(\n data,\n updatingItem.id,\n updatingItem.type,\n );\n if (res.status) {\n await loadData();\n setSelectedData(undefined);\n showSuccess(res.data?.message ?? 'Success');\n } else {\n showError(res.data?.message ?? 'Something went wrong');\n }\n return true;\n }\n const formData = {\n id: selectedData.id,\n ...data,\n weather_condition: selectedData.weather_condition,\n };\n const suffix = ['bulk_mussel_seed', 'bulk_oyster_seed', 'seeding'].includes(\n selectedData._type,\n )\n ? 'confirm-bulk-seed'\n : selectedData._type === 'bulk_mussel_harvest'\n ? 'confirm-bulk-harvest/mussel'\n : selectedData._type === 'bulk_oyster_harvest'\n ? 'confirm-bulk-harvest/oyster'\n : selectedData._type === 'harvest'\n ? `confirm-bulk-harvest/${selectedData.crop_type.toLowerCase()}`\n : '';\n setDisable(true);\n const r = await sendSingleRequest(\n formData,\n 'POST',\n `api/queue/${suffix}`,\n true,\n );\n setDisable(false);\n if (!r.status) {\n showError(r.data?.message ?? 'Something went wrong');\n return r;\n } else {\n await loadData();\n setSelectedData(undefined);\n showSuccess(r.data?.message ?? 'Success');\n return true;\n }\n };\n const deleteQueueItem = async () => {\n if (!deletingItem) return;\n setDisable(true);\n const res = await sendSingleRequest(\n deletingItem,\n 'DELETE',\n 'api/queue/entity',\n true,\n );\n setDisable(false);\n setDeletingItem(undefined);\n if (res.status) {\n showSuccess('Deleted successfully');\n loadData();\n } else {\n showError(\n res.data?.message ??\n translate(lang, 'Failed to delete %s', 'validate data'),\n );\n }\n };\n const updateQueueItem = async (data: any, item_id: number, type: any) => {\n setDisable(true);\n const res = await sendSingleRequest(\n { data, type, item_id },\n 'PUT',\n 'api/queue/entity',\n true,\n );\n if (res.status) {\n setUpdatingItem(undefined);\n }\n setDisable(false);\n\n return res;\n };\n const clickQueueItem = async (\n item: IQueueItem,\n isUpdate: boolean = false,\n ) => {\n if (item.type.startsWith('paper_')) {\n history.push(`/queue/${item.id}`);\n return;\n }\n\n setUpdatingItem(undefined);\n\n if (!isUpdate && (item.type === 'seeding' || item.type === 'harvest')) {\n let ms = queueData?.find(\n x =>\n x.type === 'seeding' &&\n x.line.id === item.line.id &&\n x.date < item.date,\n );\n let mh = queueData?.find(\n x =>\n x.type === 'harvest' &&\n x.line.id === item.line.id &&\n x.date < item.date,\n );\n if (!ms || (mh && mh.date < ms.date)) ms = mh;\n if (!!ms) {\n setWarning(\n {\n setSelectedData(undefined);\n setTimeout(() => {\n const q = queueData?.find(x => x.id === ms?.id);\n if (q) clickQueueItem(q);\n }, 300);\n }}\n lang={lang}\n />,\n );\n } else {\n setWarning(undefined);\n }\n } else {\n setWarning(undefined);\n }\n\n setDisable(true);\n const res = await sendSingleRequest(\n {},\n 'GET',\n `api/queue/detail/${item.id}`,\n true,\n );\n if (res.status) {\n setDisable(false);\n setSelectedData(res.data);\n if (isUpdate) {\n setUpdatingItem(item);\n }\n } else {\n dispatch(\n showFeedback({\n message: translate(lang, res.data?.message ?? 'Unknown error'),\n type: 'error',\n isMessage: true,\n }),\n );\n setDisable(false);\n }\n };\n const isGrower = SelectIsGrower(selectedData?.lineData?.farm_id);\n\n return (\n
\n
\n
\n \n {translate(lang, 'Unconfirmed data')}\n \n setShowCustom(true)}\n disabled={disable}\n >\n {translate(lang, 'Upload paper form')}\n \n
\n
\n {loading ? (\n \n ) : (\n
\n {queueData?.map((item, i) => (\n
\n {item.type.startsWith('bulk_') ? (\n
\n
{`${item.lines_count} lines`}
\n
\n ) : (\n
\n
Farm: {item.farm.name}
\n
\n Line: {item.line.line_name}\n
\n
\n )}\n
\n {item.is_unfinished && (\n
\n Entry not finished\n
\n )}\n
{titles[item.type]}
\n
\n {`Submitted by ${item.user.name} at ${defaultDateFormat(\n item.created_at,\n )}`}\n
\n {item.weather_condition && (\n
\n \n setMapLoc(item.weather_condition ?? undefined)\n }\n >\n {translate(lang, 'View the data entry location')}\n \n
\n )}\n
\n
\n clickQueueItem(item)}\n disabled={disable}\n >\n {translate(lang, 'View')}\n \n {!item.type.startsWith('paper_') && (\n clickQueueItem(item, true)}\n >\n {translate(lang, 'Update')}\n \n )}\n \n setDeletingItem({\n type: item.type,\n item_id: item.id,\n })\n }\n >\n {translate(lang, 'Delete')}\n \n
\n
\n ))}\n
\n )}\n
\n
\n {selectedData &&\n (selectedData._type === 'bulk_mussel_harvest' ? (\n {}}\n onClose={() => setSelectedData(undefined)}\n paramData={selectedData}\n overConfirm={confirmBulkItem}\n confirmID={selectedData.id}\n lineData={selectedData.lineData}\n warningMessage={warning}\n />\n ) : selectedData._type === 'bulk_oyster_harvest' ? (\n {}}\n overConfirm={confirmBulkItem}\n onCancel={() => setSelectedData(undefined)}\n confirmID={selectedData.id}\n warningMessage={warning}\n />\n ) : selectedData._type === 'seeding' ? (\n <>\n {!!selectedData.is_catch_spat ? (\n setSelectedData(undefined)}\n onConfirm={() => {}}\n data={selectedData}\n overConfirm={confirmSeeding}\n />\n ) : isGrower ? (\n {}}\n onClose={() => setSelectedData(undefined)}\n overConfirm={confirmBulkItem}\n data={selectedData}\n lineData={selectedData.lineData}\n warningMessage={warning}\n />\n ) : (\n setSelectedData(undefined)}\n onConfirm={() => {}}\n overConfirm={confirmSeeding}\n data={selectedData}\n confirmBtnLabel={\n !updatingItem ? 'Seed the line' : 'Update data'\n }\n lineData={selectedData.lineData}\n parentID={\n !selectedData.parent_id ? undefined : selectedData.parent_id\n }\n warningMessage={warning}\n lineChangeable={true}\n />\n )}\n \n ) : selectedData._type === 'assessment' ? (\n setSelectedData(undefined)}\n onConfirm={() => {}}\n overConfirm={confirmAssessment}\n lineData={selectedData.lineData}\n data={selectedData}\n lineChangeable={true}\n />\n ) : selectedData._type === 'harvest' ? (\n isGrower ? (\n {}}\n onClose={() => setSelectedData(undefined)}\n paramData={selectedData}\n overConfirm={confirmBulkItem}\n confirmID={selectedData.id}\n lineData={selectedData.lineData}\n warningMessage={warning}\n />\n ) : (\n setSelectedData(undefined)}\n onConfirm={() => {}}\n overConfirm={confirmHarvest}\n data={selectedData}\n lineData={selectedData.lineData}\n warningMessage={warning}\n lineChangeable={true}\n />\n )\n ) : selectedData._type === 'inventory_seed' ? (\n setSelectedData(undefined)}\n onConfirm={() => {}}\n data={selectedData as any}\n lineData={selectedData.lineData}\n overConfirm={confirmInventorySeed}\n lineChangeable\n />\n ) : selectedData._type === 'maintenance' ? (\n <>\n {isGrower ? (\n setSelectedData(undefined)}\n onConfirm={() => {}}\n data={selectedData}\n overConfirm={confirmMaintenance}\n />\n ) : (\n setSelectedData(undefined)}\n onConfirm={() => {}}\n overConfirm={confirmMaintenance}\n data={selectedData}\n lineData={selectedData.lineData}\n confirmBtnLabel={!updatingItem ? 'Confirm' : 'Update data'}\n lineChangeable={true}\n />\n )}\n \n ) : ['bulk_mussel_seed', 'bulk_oyster_seed'].includes(\n selectedData._type,\n ) ? (\n {}}\n onClose={() => setSelectedData(undefined)}\n overConfirm={confirmBulkItem}\n data={selectedData}\n lineData={selectedData.lineData}\n warningMessage={warning}\n />\n ) : (\n <>\n ))}\n {!!mapLoc && (\n setMapLoc(undefined)}\n />\n )}\n {deletingItem && (\n setDeletingItem(undefined)}\n type='delete'\n title={translate(lang, 'Delete')}\n text={translate(lang, 'Are you sure to delete this data?')}\n onConfirm={deleteQueueItem}\n />\n )}\n {showCustom && (\n setShowCustom(false)}\n />\n )}\n
\n );\n};\n\nexport default QueuedDataPage;\n","import { Modal } from 'antd';\nimport { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { Button, CloseIcon, Input, Subtitle } from '../../components/shared';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { useWidth } from '../../util/useWidth';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface IForm {\n name: string;\n reg_number: string;\n}\n\ninterface Props {\n visible: boolean;\n title: string;\n onClose: () => void;\n onConfirm: (d: any) => void;\n isAdding: boolean;\n data?: any;\n className?: string;\n}\n\nconst BoatModal = ({\n visible,\n title,\n onClose,\n onConfirm,\n isAdding,\n data,\n className,\n}: Props) => {\n const width = useWidth();\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [form, setForm] = useState({ name: '', reg_number: '' });\n\n const updateForm = (key: keyof IForm, val: string) =>\n setForm(p => ({ ...p, [key]: val }));\n\n const handleConfirm = () => {\n if (form.name.length <= 0) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: 'Name is required field',\n }),\n );\n return;\n }\n if (form.reg_number.length <= 0) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: 'Registration is required',\n }),\n );\n return;\n }\n setDisabled(true);\n if (isAdding) {\n sendSingleRequest(form, 'POST', 'api/boat/boat', true).then(r => {\n setDisabled(false);\n if (r.status) {\n onConfirm(r.data);\n } else {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: r.data?.message ?? 'Something went wrong',\n }),\n );\n }\n });\n } else {\n sendSingleRequest(form, 'PUT', `api/boat/boat/${data?.id}`, true).then(\n r => {\n setDisabled(false);\n if (r.status) {\n onConfirm(r.data);\n } else {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: r.data?.message ?? 'Something went wrong',\n }),\n );\n }\n },\n );\n }\n };\n\n useEffect(() => data && setForm(p => ({ ...p, ...data })), [data]);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(lang, title)}\n \n
\n
\n
\n updateForm('name', e.target.value)}\n />\n
\n
\n updateForm('reg_number', e.target.value)}\n />\n
\n
\n
\n
\n \n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default BoatModal;\n","import { useCallback, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport {\n Button,\n Dropdown,\n ModalComponent,\n Pen,\n Spinner,\n Title,\n TrashIcon,\n} from '../../components/shared';\nimport { IBoatResource } from '../../entities/boat.entities';\nimport { hashColor } from '../../entities/util-functions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { useWidth } from '../../util/useWidth';\nimport BoatModal from './BoatModal';\nimport { deleteUserBoat, loadUserBoats } from '../../store/users/users.actions';\nimport { selectBoats, selectUsers } from '../../store/users/users.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\nconst BoatsPage = () => {\n const dispatch = useDispatch();\n const width = useWidth();\n const lang = useSelector(selectLang);\n const userBoats = useSelector(selectBoats);\n const usersData = useSelector(selectUsers);\n const users =\n usersData.map((x: any) => ({\n id: x.id,\n label: x.name,\n value: x.id,\n })) ?? [];\n\n const [boats, setBoats] = useState();\n const [loading, setLoading] = useState(false);\n const [visible, setVisible] = useState(false);\n const [selectedBoat, setSelectedBoat] = useState();\n const [showDelete, setShowDelete] = useState(false);\n const [disabled, setDisabled] = useState(false);\n\n const handleClickAdd = () => {\n setSelectedBoat(undefined);\n setVisible(true);\n };\n const handleEditClick = (boat: IBoatResource) => {\n setSelectedBoat(boat);\n setVisible(true);\n };\n const handleDeleteClick = (boat: IBoatResource) => {\n setSelectedBoat(boat);\n setShowDelete(true);\n };\n const confirmDelete = () => {\n if (!selectedBoat) return;\n setShowDelete(false);\n dispatch(deleteUserBoat(selectedBoat.id)).then((r: any) => {\n if (r === true) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Deleted successfully'),\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, r ?? 'Something went wrong'),\n }),\n );\n }\n });\n };\n const afterConfirm = () => {\n setVisible(false);\n loadBoats();\n };\n const onSelectCrew = (boat: IBoatResource, v: any) => {\n const us = users.filter((x: any) => v.includes(x.id));\n let tmp = [...(boats ?? [])];\n const i = tmp.findIndex(x => x.id === boat.id);\n tmp[i].users = us as any;\n setBoats(tmp);\n };\n const assignUser = (boat: IBoatResource) => {\n setDisabled(true);\n const data = { boat_id: boat.id, users: boat.users.map(x => x.id) };\n sendSingleRequest(data, 'POST', 'api/boat/assign-users', true).then(r => {\n setDisabled(false);\n if (r.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Assigned successfully'),\n }),\n );\n loadBoats();\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, r.data?.message ?? 'Something went wrong'),\n }),\n );\n loadBoats();\n }\n });\n };\n\n const loadBoats = useCallback(() => {\n setLoading(true);\n dispatch(loadUserBoats()).then((r: any) => {\n setLoading(false);\n if (r !== true) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, r ?? 'Something went wrong'),\n }),\n );\n }\n });\n }, [dispatch]);\n\n useEffect(() => setBoats(userBoats), [userBoats]);\n useEffect(() => loadBoats(), [loadBoats]);\n\n return (\n
\n
\n {width > 768 && (\n \n {translate(lang, 'Boats')}\n \n )}\n
\n \n {translate(lang, 'Add New Boat')}\n \n
\n
\n {loading || !boats ? (\n
\n \n
\n ) : (\n boats.map(boat => (\n
\n
\n
\n
\n {translate(lang, 'Boat Name')}\n
\n
{boat.name}
\n
\n
\n
\n {translate(lang, 'Registration')}\n
\n \n {boat.reg_number}\n
\n
\n
\n handleEditClick(boat)}\n >\n \n \n handleDeleteClick(boat)}\n >\n \n \n
\n
\n
\n x.id) as any}\n onChange={v => onSelectCrew(boat, v)}\n />\n assignUser(boat)}\n >\n {translate(lang, 'Update')}\n \n
\n
\n ))\n )}\n
\n {visible && (\n setVisible(false)}\n />\n )}\n {showDelete && (\n setShowDelete(false)}\n onConfirm={confirmDelete}\n />\n )}\n
\n \n );\n};\n\nexport default BoatsPage;\n","import { Modal, Pagination, Table } from 'antd';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport {\n Button,\n Dropdown,\n Input,\n ModalComponent,\n Spinner,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport { ILineSpatResource } from '../../entities/boat.entities';\nimport { IFarmResource, ILineResource } from '../../entities/farms.entities';\nimport ImageGallery from 'react-image-gallery';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { useWidth } from '../../util/useWidth';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\nimport './styles.scss';\n\ninterface IImage {\n original: string;\n thumbnail: string;\n}\n\nconst columns = [\n {\n key: 'farm',\n dataIndex: 'farm',\n title: 'Farm',\n render: (f: any) => {f?.name},\n },\n {\n key: 'line',\n dataIndex: 'line',\n title: 'Line',\n render: (l: any) => {l?.line_name},\n },\n {\n key: 'spat_count',\n dataIndex: 'spat_count',\n title: 'Spat count',\n render: (x: any) => {x},\n },\n {\n key: 'user',\n dataIndex: 'user',\n title: 'Reported by',\n render: (x: any) => {x.name},\n },\n {\n key: 'created_at',\n dataIndex: 'created_at',\n title: 'Created at',\n render: (x: any) => {defaultDateFormat(x)},\n },\n];\n\ninterface MobileProp {\n data: ILineSpatResource;\n onDelete: (d: any) => void;\n onOpenInfo: (d: any) => void;\n onOpenImage: (d: any) => void;\n lang: TLang | undefined;\n}\n\nconst MobileCard = ({\n data,\n onDelete,\n onOpenInfo,\n onOpenImage,\n lang,\n}: MobileProp) => (\n
\n
\n {translate(lang, 'Spat count')}: {data.spat_count}\n
\n
\n
\n \n {translate(lang, 'Farm')}\n \n \n {data.farm?.name}\n \n
\n
\n \n {translate(lang, 'Line')}\n \n \n {data.line?.line_name}\n \n
\n
\n
\n
\n \n {translate(lang, 'Created at')}\n \n \n {defaultDateFormat(data.created_at)}\n \n
\n
\n \n {translate(lang, 'Reported by')}\n \n \n {data.user?.name}\n \n
\n
\n
\n
\n \n {translate(lang, 'Comment')}\n \n {data.comment ? (\n \n {translate(lang, 'View')}\n
\n ) : (\n \n )}\n
\n
\n \n {translate(lang, 'Image')}\n \n {data.images && data.images.length ? (\n \n {translate(lang, 'View')}\n
\n ) : (\n \n )}\n
\n \n
\n \n {translate(lang, 'Delete')}\n \n
\n \n);\n\nconst LineSpatsPage = () => {\n const dispatch = useDispatch();\n const width = useWidth();\n\n const farmsData = useSelector(selectFarmsData);\n const lang = useSelector(selectLang);\n\n const [loading, setLoading] = useState(false);\n const [spats, setSpats] = useState([]);\n const [selectedFarm, setSelectedFarm] = useState();\n const [selectedLine, setSelectedLine] = useState();\n const [cntMin, setCntMin] = useState('');\n const [cntMax, setCntMax] = useState('');\n const [infoShow, setInfoShow] = useState(false);\n const [infoText, setInfoText] = useState('');\n const [asPhotoModalVisible, setAsPhotoModalVisible] = useState(false);\n const [assessPhotos, setAssessPhotos] = useState>([]);\n const [pageOptions, setPageOptions] = useState({\n current: 1,\n pageSize: 20,\n total: spats.length ?? 0,\n });\n\n const handlePageChange = (pageOptions: any) => {\n setPageOptions(pageOptions);\n };\n const farmsOption = useMemo(() => {\n let tmp = [{ id: '0', value: '0', label: translate(lang, 'All Farms') }];\n tmp.push(\n ...farmsData.map((f: any) => ({\n id: f.id.toString(),\n value: f.id.toString(),\n label: f.name,\n })),\n );\n return tmp;\n }, [farmsData]);\n const linesOption = useMemo(() => {\n if (!selectedFarm) return null;\n let tmp = [{ id: '0', value: '0', label: translate(lang, 'All Lines') }];\n tmp.push(\n ...selectedFarm.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n })),\n );\n return tmp;\n }, [selectedFarm]);\n\n const selectFarm = (v: string) => {\n setSelectedFarm(farmsData.find((x: any) => x.id === Number(v)));\n setSelectedLine(undefined);\n };\n const selectLine = (v: string) =>\n setSelectedLine(\n (selectedFarm?.lines.find(x => x.id === Number(v)) as any) ?? undefined,\n );\n\n const loadData = useCallback(() => {\n let filter: any = {};\n if (selectedFarm) filter.farm_id = selectedFarm.id;\n if (selectedLine) filter.line_id = selectedLine.id;\n if (cntMin && cntMin.length > 0) filter.spat_count_min = cntMin;\n if (cntMax && cntMax.length > 0) filter.spat_count_max = cntMax;\n\n setLoading(true);\n sendSingleRequest(filter, 'GET', 'api/farm/line/line-spats', true).then(\n r => {\n setLoading(false);\n if (r.status) {\n setSpats(r.data);\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(\n lang,\n r.data?.message ?? 'Something went wrong',\n ),\n }),\n );\n }\n },\n );\n }, [selectedFarm, selectedLine, cntMin, cntMax, dispatch]);\n\n const openInfo = (comment: any) => {\n setInfoShow(true);\n setInfoText(\n translate(\n lang,\n comment && comment.length > 0 ? comment : 'No comments yet',\n ),\n );\n };\n const openImages = (images: string[]) => {\n setAsPhotoModalVisible(true);\n setAssessPhotos(\n images.map(image => {\n return {\n original: image,\n thumbnail: image,\n };\n }),\n );\n };\n const removeLineSpat = (spat_id: number) => {\n const y = window.confirm(\n translate(lang, 'Are you sure to delete this data?'),\n );\n if (!y) return;\n setLoading(true);\n sendSingleRequest(\n { spat_id },\n 'DELETE',\n `api/farm/line/line-spat/${spat_id}`,\n true,\n ).then(r => {\n if (r.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Deleted successfully'),\n }),\n );\n loadData();\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, r.data?.message ?? 'Something went wrong'),\n }),\n );\n setLoading(false);\n }\n });\n };\n const spatColumns = useMemo(() => {\n let res = [\n ...columns.map(x => ({ ...x, title: translate(lang, x.title) })),\n ];\n res.push(\n {\n key: 'comment',\n dataIndex: 'comment',\n title: translate(lang, 'Comment'),\n render: (x: string) => (\n
\n View\n
\n ),\n },\n {\n key: 'images',\n dataIndex: 'images',\n title: translate(lang, 'Images'),\n render: (x: any) =>\n x && x.length > 0 ? (\n
\n {translate(lang, 'View')}\n
\n ) : (\n \n ),\n },\n {\n key: 'del_btn',\n dataIndex: '',\n title: translate(lang, 'Action'),\n render: (x: any) => (\n \n {translate(lang, 'Delete')}\n \n ),\n },\n {\n key: 'right',\n dataIndex: '',\n title: '',\n render: () => ,\n },\n );\n return res;\n }, [columns, spats]);\n\n useEffect(() => loadData(), [loadData]);\n\n return (\n
\n
\n
\n
\n \n {translate(lang, 'Line Spats')}\n \n
\n
\n
\n
\n selectFarm(v)}\n />\n {linesOption && (\n selectLine(v)}\n />\n )}\n
\n
\n
\n setCntMin(e.target.value)}\n />\n
\n
\n setCntMax(e.target.value)}\n />\n
\n
\n
\n {loading ? (\n
\n \n
\n ) : width > 768 ? (\n
\n \n
\n ) : (\n
\n {spats\n .slice(\n pageOptions.current - 1,\n pageOptions.current + pageOptions.pageSize - 1,\n )\n .map(item => (\n \n ))}\n
\n \n
\n
\n )}\n
\n
\n setInfoShow(false)}\n type=''\n text={infoText}\n />\n {asPhotoModalVisible && (\n setAsPhotoModalVisible(false)}\n onCancel={() => setAsPhotoModalVisible(false)}\n width={1000}\n >\n \n \n )}\n
\n
\n );\n};\n\nexport default LineSpatsPage;\n","import { useState } from 'react';\nimport {\n Button,\n CheckboxButton,\n Dropdown,\n Input,\n Spinner,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport axios from 'axios';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport './styles.scss';\n\nconst uploadExcel = async (file: any, params: any = null) => {\n try {\n const Authorization = {\n Authorization: `Bearer ${localStorage.getItem('marine-farm')}`,\n };\n const formData = new FormData();\n formData.append('excel', file);\n if (params) {\n formData.append('params', params);\n }\n return axios.post(\n `${process.env.REACT_APP_API_URL}api/import/cycles`,\n formData,\n {\n headers: {\n ...Authorization,\n Accept: '*',\n 'Content-Type': 'multipart/form-data',\n },\n },\n );\n } catch (error) {\n throw error;\n }\n};\n\ninterface IResult {\n total_count: number;\n failed_count: number;\n failed_data: any[];\n}\n\nconst ImportCyclesPage = () => {\n const dispatch = useDispatch();\n const isGrower = useSelector(selectProfile)?.account_type === 'grower';\n\n const [disabled, setDisabled] = useState(false);\n const [file, setFile] = useState(null);\n const [result, setResult] = useState();\n const [special, setSpecial] = useState(false);\n const [defaultSeason, setDefaultSeason] = useState('2021');\n\n const onFileChange = (e: any) => {\n if (e.target.files && e.target.files.length > 0) setFile(e.target.files[0]);\n };\n const submitFile = () => {\n setResult(undefined);\n if (!file) {\n window.alert('No file selected');\n } else {\n setDisabled(true);\n uploadExcel(\n file,\n JSON.stringify({ special, default_season: defaultSeason }),\n )\n .then(r => {\n setDisabled(false);\n setResult(r.data);\n if ((r.data?.failed_count ?? 0) <= 0) {\n dispatch(\n showFeedback({\n type: 'success',\n isMessage: true,\n message: 'Imported successfully',\n }),\n );\n }\n })\n .catch(err => {\n setDisabled(false);\n alert(err?.message ?? 'Failed to upload');\n });\n }\n };\n\n return (\n
\n
\n
\n
\n \n Upload Excel file\n \n
\n
\n
\n
\n
\n
\n setSpecial(e.target.checked)}\n />\n {!special && (\n setDefaultSeason(e.target.value)}\n />\n )}\n
\n
\n \n
\n
\n \n Confirm\n \n
\n
\n
\n
\n Total: {result?.total_count ?? '-'}\n
\n
\n Success:\n {result ? result.total_count - result.failed_count : ' -'}\n
\n
\n Failed: {result?.failed_count ?? '-'}\n
\n
\n
\n {disabled ? (\n
\n \n
\n ) : (\n
\n
\n \n Failed data\n \n {result &&\n result.failed_data.map((item, idx) =>\n isGrower ? (\n
\n
\n
\n
Farm
\n
\n {item.data.farm_number}\n
\n
\n
\n
Owner
\n
\n {item.data.owner}\n
\n
\n
\n
Line
\n
\n {item.data.line}\n
\n
\n
\n
Date
\n
\n {item.data.date}\n
\n
\n
\n
\n
Message
\n
{item.message}
\n
\n
\n ) : (\n
\n
\n
\n
Activity ID
\n
\n {item.data?.activity_id}\n
\n
\n
\n
Line uid
\n
{item.data?.uid}
\n
\n
\n
Client
\n
\n {item.data?.owner}\n
\n
\n
\n
License
\n
\n {item.data?.farm_number}\n
\n
\n
\n
Activity
\n
{item.data?.type}
\n
\n
\n
Vessel
\n
\n {item.data?.vessel}\n
\n
\n
\n
\n
Message
\n
{item.message}
\n
\n
\n ),\n )}\n
\n
\n )}\n
\n
\n
\n
\n
\n );\n};\n\nexport default ImportCyclesPage;\n","import { TLang } from '../entities/ui.entities';\nimport { ITaskSetting } from '../entities/user.entities';\nimport { translate } from './lang.helper';\n\nexport const getTaskOptions = (\n lang: TLang | undefined,\n customTasks: ITaskSetting[] | null = null,\n) => {\n let result = [\n { id: 'GENERAL', value: 'GENERAL', label: 'General' },\n { id: 'SEEDING', value: 'SEEDING', label: 'Seeding' },\n { id: 'ASSESSMENT', value: 'ASSESSMENT', label: 'Assessment' },\n { id: 'MAINTENANCE', value: 'MAINTENANCE', label: 'Maintenance' },\n { id: 'HARVEST', value: 'HARVEST', label: 'Harvest' },\n {\n id: 'INVENTORY_SEED',\n value: 'INVENTORY_SEED',\n label: 'Inventory Management',\n },\n ].map(x => ({ ...x, label: translate(lang, x.label) }));\n if (customTasks) {\n result.push(\n ...customTasks.map(x => ({ id: x.name, value: x.name, label: x.name })),\n );\n }\n return result;\n};\n\nexport const isNormalTask = (type: string | null | undefined) => {\n return (\n !type ||\n ![\n 'SEEDING',\n 'ASSESSMENT',\n 'MAINTENANCE',\n 'HARVEST',\n 'INVENTORY_SEED',\n ].includes(type)\n );\n};\n","import { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport moment from 'moment';\nimport {\n Datepicker,\n Dropdown,\n Input,\n Subtitle,\n CloseIcon,\n Button,\n} from '../shared';\nimport { createTask, updateTask } from '../../store/tasks/tasks.actions';\nimport TimeTrackInput, {\n toSecTimeTracks,\n} from '../shared/input/TimeTrackInput';\nimport { Modal } from 'antd';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { IFarmResource, ILineResource } from '../../entities/farms.entities';\nimport { IBoatResource } from '../../entities/boat.entities';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectBoats } from '../../store/users/users.selector';\nimport { ITimeRange } from '../../entities/general.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectCustomTasks } from '../../store/tasks/tasks.selector';\nimport { getTaskOptions } from '../../lib/task.helper';\nimport './styles.scss';\n\nconst todayStr = moment().format('YYYY-MM-DD');\n\ninterface IFormData {\n farm_id: number | null;\n line_id: number | null;\n title: string;\n content: string | null;\n due_date: number;\n assigned_to?: number | null;\n is_completed: boolean;\n type: string | null;\n boat_id?: number | null;\n time_tracks?: ITimeRange[] | null;\n}\n\nconst defaultForm: IFormData = {\n farm_id: null,\n line_id: null,\n title: '',\n content: null,\n due_date: moment().toDate().getTime(),\n is_completed: false,\n type: null,\n};\n\ninterface Props {\n title: string;\n visible: boolean;\n data?: any;\n updateId?: number;\n viewOnly?: boolean;\n onCancel: () => void;\n onConfirm: (d: any) => void;\n}\n\nconst ModalTask = ({\n visible,\n title,\n data,\n updateId,\n viewOnly,\n onCancel,\n onConfirm,\n}: Props) => {\n const dispatch = useDispatch();\n const history = useHistory();\n\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n const profile = useSelector(selectProfile);\n const boats = useSelector(selectBoats);\n const customTasks = useSelector(selectCustomTasks);\n\n const [disabled, setDisabled] = useState(false);\n const [formData, setFormData] = useState({\n ...defaultForm,\n boat_id: profile?.boat_id,\n });\n\n const [curFarm, setCurFarm] = useState();\n const [curLine, setCurLine] = useState();\n const [curBoat, setCurBoat] = useState(\n profile?.current_boat ?? undefined,\n );\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n const handleOnSelectFarm = (val: string) => {\n const v = Number(val);\n let tmp: any = { farm_id: v };\n\n if (v <= 0) tmp.type = 'GENERAL';\n\n setFormData(prv => ({ ...prv, ...tmp }));\n setCurFarm(farmsData.find(x => x.id === v));\n };\n const handleOnSelectLine = (val: string) => {\n const v = Number(val);\n let tmp: any = {};\n const line = curFarm?.lines.find(x => x.id === v);\n tmp.line_id = line ? line.id : null;\n\n if (!line) tmp.type = 'GENERAL';\n\n setCurLine(line);\n setFormData(prv => ({ ...prv, ...tmp }));\n };\n const handleSelectBoat = (val: string) => {\n const v = Number(val);\n const b = boats.find(x => x.id === v);\n setCurBoat(b);\n setFormData(prv => ({ ...prv, boat_id: b ? b.id : null }));\n };\n const updateForm = (key: keyof IFormData, val: any) =>\n setFormData(prv => ({ ...prv, [key]: val }));\n\n const handleOnConfirm = async (is_completed: boolean | undefined) => {\n if (formData.title.length <= 0) {\n showError('Please fill task title');\n return;\n }\n if (!curBoat) {\n showError('Boat is not selected');\n return;\n }\n setDisabled(true);\n let tmp = { ...formData };\n if (tmp.time_tracks && tmp.time_tracks.length > 0) {\n const tt = toSecTimeTracks(tmp.time_tracks);\n if (!tt) {\n alert(translate(lang, '_invalid_time_range'));\n return;\n }\n tmp.time_tracks = tt;\n }\n if (!updateId) {\n await dispatch(createTask({ ...tmp, is_completed } as any));\n } else {\n await dispatch(updateTask({ ...tmp, id: updateId } as any, history));\n }\n onConfirm(tmp);\n };\n\n useEffect(() => {\n if (data) {\n let tmp = { ...data };\n if (tmp.time_tracks && tmp.time_tracks.length > 0) {\n tmp.time_tracks = tmp.time_tracks.map((x: any) => ({\n start_time: x.start_time * 1000,\n finish_time: x.finish_time * 1000,\n }));\n }\n setFormData(prv => ({ ...prv, ...tmp }));\n\n const farm = farmsData.find(x => x.id === data?.farm_id);\n const line = farm?.lines.find(x => x.id === data?.line_id);\n setCurFarm(farm);\n setCurLine(line);\n if (tmp.boat_id !== undefined) {\n setCurBoat(boats.find(x => x.id === data?.boat_id));\n }\n }\n }, [data]);\n\n return (\n }\n width={600}\n >\n \n
\n
\n \n {translate(lang, title)}\n \n
\n {todayStr > moment(formData.due_date).format('YYYY-MM-DD') ? (\n \n {translate(\n lang,\n viewOnly ? 'Past task' : 'You are adding a task in the past',\n )}\n \n ) : todayStr < moment(formData.due_date).format('YYYY-MM-DD') ? (\n \n {translate(lang, 'Scheduling task')}\n \n ) : (\n <>\n )}\n \n !!e &&\n setFormData(prv => ({ ...prv, due_date: e.toDate().getTime() }))\n }\n />\n updateForm('title', e.target.value)}\n className='mb-16 w-100'\n value={formData.title}\n disabled={viewOnly}\n />\n updateForm('content', e.target.value)}\n className='mb-16 w-100'\n value={formData.content ?? ''}\n disabled={viewOnly}\n />\n handleOnSelectFarm(v)}\n options={farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n }))}\n />\n x.id === curLine?.id)\n ? curLine?.id.toString()\n : undefined\n }\n onChange={v => handleOnSelectLine(v)}\n options={\n curFarm?.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n })) ?? []\n }\n />\n updateForm('type', v)}\n />\n {(profile?.role === 'owner' || profile?.role === 'admin') &&\n boats !== undefined && (\n handleSelectBoat(v)}\n options={boats.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} (${x.reg_number})`,\n }))}\n />\n )}\n updateForm('time_tracks', t)}\n disabled={viewOnly}\n />\n
\n
\n handleOnConfirm(undefined)}\n disabled={disabled || viewOnly}\n >\n {translate(lang, 'Confirm')}\n \n {!updateId && (\n handleOnConfirm(true)}\n disabled={disabled || viewOnly}\n >\n {`${translate(lang, 'Confirm')} & ${translate(lang, 'Complete')}`}\n \n )}\n
\n \n );\n};\n\nexport default ModalTask;\n","import { useSelector } from 'react-redux';\nimport { IAssessmentResource } from '../../entities/farms.entities';\nimport { Link } from 'react-router-dom';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n assessData: IAssessmentResource;\n onShowAssessment: (d: any) => void;\n}\n\nconst AssessmentCell = ({ assessData, onShowAssessment }: Props) => {\n const lang = useSelector(selectLang);\n const farm = useSelector(selectFarmsData).find(f =>\n f.lines.some(x => x.id === assessData.line_id),\n );\n const line = farm?.lines.find(x => x.id === assessData.line_id);\n const { shell_size } = assessData;\n const handleClick = (event: any) => {\n event.preventDefault();\n onShowAssessment({ line: line, data: assessData });\n };\n return (\n
\n
\n {translate(lang, 'assessment')}\n
\n
\n
\n {farm?.name} - {line?.line_name}\n
\n
\n {`${shell_size.min} ~ ${shell_size.max}, ${shell_size.avg} (mm)`}\n
\n
\n
\n \n {translate(lang, 'View')}\n \n
\n
\n );\n};\n\nexport default AssessmentCell;\n","import { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport {\n IHarvestResource,\n IMusselHarvest,\n IOysterHarvest,\n} from '../../entities/growing.entities';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { formatNumber } from '../../entities/util-functions';\n\ninterface Props {\n harvestData: IHarvestResource;\n onClickCell: (d: any) => void;\n}\n\nconst HarvestCell = ({ harvestData, onClickCell }: Props) => {\n const lang = useSelector(selectLang);\n const farm = useSelector(selectFarmsData).find(\n x => x.id === harvestData.line.farm_id,\n );\n const line = farm?.lines.find(x => x.id === harvestData.line_id);\n\n const handleClick = (event: any) => {\n event.preventDefault();\n onClickCell(harvestData);\n };\n\n return (\n
\n
\n {translate(lang, 'harvest')}\n
\n
\n
{`${farm?.name} - ${line?.line_name}`}
\n
\n {farm?.type === 'MUSSEL'\n ? `${harvestData.season_name} - ${formatNumber(\n (harvestData as IMusselHarvest).amount,\n )} kg`\n : `${harvestData.season_name} - ${\n (harvestData as IOysterHarvest).amount_dz\n } dz`}\n
\n
\n
\n \n {translate(lang, 'View')}\n \n
\n
\n );\n};\n\nexport default HarvestCell;\n","import { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { IInventoryManage } from '../../entities/inventory.entities';\nimport { inventoryLabel } from '../../lib/farm.helpers';\n\ninterface Props {\n floatsData: IInventoryManage;\n onShowFloats: (d: any) => void;\n}\n\nconst InventorySeedCell = ({ floatsData, onShowFloats }: Props) => {\n const lang = useSelector(selectLang);\n const farm = useSelector(selectFarmsData).find(f =>\n f.lines.some(x => x.id === floatsData.line_id),\n );\n const line = farm?.lines.find(x => x.id === floatsData.line_id);\n const handleClick = (event: any) => {\n event.preventDefault();\n onShowFloats({ line, data: floatsData });\n };\n\n return (\n
\n
\n {translate(lang, 'floats')}\n
\n
\n
{`${farm?.name} - ${line?.line_name}`}
\n
\n {floatsData.status === 'IN' ? '+' : '-'}\n {floatsData.quantity}, {inventoryLabel(floatsData.inventory)}\n
\n
\n
\n \n {translate(lang, 'View')}\n \n
\n
\n );\n};\n\nexport default InventorySeedCell;\n","import { Link } from 'react-router-dom';\nimport { IMaintenanceResource } from '../../entities/farms.entities';\nimport { useSelector } from 'react-redux';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\n\nconst typeLabel: any = {\n VISUAL_ASSESSMENT: 'Visual Assessment',\n LINE_CLEANING: 'Line Cleaning',\n GENERAL_MAINTENANCE: 'General Maintenance',\n};\n\ninterface Props {\n mntData: IMaintenanceResource;\n onShowMaintenance: (d: any) => void;\n}\n\nconst MaintenanceCell = ({ mntData, onShowMaintenance }: Props) => {\n const lang = useSelector(selectLang);\n const farm = useSelector(selectFarmsData).find(f =>\n f.lines.some(x => x.id === mntData.line_id),\n );\n const line = farm?.lines.find(x => mntData.line_id);\n const handleClick = (event: any) => {\n event.preventDefault();\n onShowMaintenance({ line: line, data: mntData });\n };\n\n return (\n
\n
\n {translate(lang, 'maintenance')}\n
\n
\n
{`${farm?.name} - ${line?.line_name}`}
\n
\n {translate(lang, typeLabel[mntData.type] ?? 'General Maintenance')}\n
\n
\n
\n \n {translate(lang, 'View')}\n \n
\n
\n );\n};\n\nexport default MaintenanceCell;\n","import { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { ILineResource } from '../../entities/farms.entities';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst unitLabel = (d: any) => {\n if (d.current_line_length !== undefined) {\n return `${d.current_line_length} m`;\n } else if (d.current_basket_count !== undefined) {\n return `${d.current_basket_count} baskets`;\n } else if (d.total_seeded_tank_area !== undefined) {\n return `${d.total_seeded_tank_area} m²`;\n } else {\n return '';\n }\n};\n\ninterface Props {\n reqLine: ILineResource;\n onClickAssessment: (d: any) => void;\n}\n\nconst RequireAssessmentCell = ({ reqLine, onClickAssessment }: Props) => {\n const lang = useSelector(selectLang);\n const farm = useSelector(selectFarmsData).find(x => x.id === reqLine.farm_id);\n const line = farm?.lines.find(x => x.id === reqLine.id);\n\n const handleShowClick = (event: any) => {\n event.preventDefault();\n onClickAssessment(line);\n };\n\n return (\n \n
\n {translate(lang, 'req. assessment')}\n
\n
\n
{`${farm?.name} - ${line?.line_name}`}
\n
\n {`${line?.growing_cycle?.main_seed.season_name} - ${unitLabel(\n line?.growing_cycle,\n )}`}\n
\n
\n
\n \n {translate(lang, 'View')}\n \n
\n \n );\n};\n\nexport default RequireAssessmentCell;\n","import { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { ISeedingResource } from '../../entities/growing.entities';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst seedPropLabel = (d: any) => {\n if (d.line_length !== undefined) {\n return `${d.season_name} ${d.line_length} m`;\n } else if (d.basket_count !== undefined) {\n return `${d.season_name} ${d.basket_count} baskets`;\n } else if (d.tank_area !== undefined) {\n return `${d.season_name} ${d.tank_area} m²`;\n } else {\n return '';\n }\n};\n\ninterface Props {\n seedData: ISeedingResource;\n onShowSeed: (d: any) => void;\n}\n\nconst SeedingCell = ({ seedData, onShowSeed }: Props) => {\n const lang = useSelector(selectLang);\n const curFarm = useSelector(selectFarmsData).find(\n x => x.id === seedData.line.farm_id,\n );\n const line = curFarm?.lines.find(x => x.id === seedData.line.id);\n\n const handleShowClick = (event: any) => {\n event.preventDefault();\n onShowSeed({ line, data: seedData });\n };\n\n return (\n
\n
\n {translate(lang, 'seed')}\n
\n
\n
\n {curFarm?.name} - {line?.line_name}\n
\n
{seedPropLabel(seedData)}
\n
\n
\n \n {translate(lang, 'View')}\n \n
\n
\n );\n};\n\nexport default SeedingCell;\n","import { hashColor } from '../../entities/util-functions';\nimport { CheckIcon, PenIcon, TrashIcon } from '../../components/shared';\nimport { ITaskData } from '../../entities/task.entities';\nimport boat_png from '../../images/boat.png';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n task: ITaskData;\n onShowTask: (t: ITaskData) => void;\n onCompleteTask: (t: ITaskData) => void;\n onEditTask: (t: ITaskData) => void;\n onDeleteTask: (t: ITaskData) => void;\n}\n\nconst TaskCell = ({\n task,\n onShowTask,\n onCompleteTask,\n onEditTask,\n onDeleteTask,\n}: Props) => {\n const lang = useSelector(selectLang);\n\n const handleCompleteClick = (event: any) => {\n event.preventDefault();\n event.stopPropagation();\n onCompleteTask(task);\n };\n const handleEditClick = (event: any) => {\n event.preventDefault();\n event.stopPropagation();\n onEditTask(task);\n };\n const handleShowClick = (event: any) => {\n event.preventDefault();\n event.stopPropagation();\n onShowTask(task);\n };\n const handleDeleteClick = (event: any) => {\n event.preventDefault();\n event.stopPropagation();\n onDeleteTask(task);\n };\n\n return (\n \n
\n {translate(lang, 'task')}\n
\n
{task.title}
\n
\n {task.boat ? (\n \n boat\n
\n ) : (\n
\n )}\n
\n {!task.is_completed && (\n \n \n \n )}\n \n \n
\n \n \n );\n};\n\nexport default TaskCell;\n","import { useMemo, useState } from 'react';\nimport {\n IAssessmentResource,\n ILineResource,\n IMaintenanceResource,\n} from '../../entities/farms.entities';\nimport { ITaskData } from '../../entities/task.entities';\nimport AssessmentCell from './AssessmentCell';\nimport HarvestCell from './HarvestCell';\nimport InventorySeedCell from './InventorySeedCell';\nimport MaintenanceCell from './MaintenanceCell';\nimport RequireAssessmentCell from './RequireAssessmentCell';\nimport SeedingCell from './SeedingCell';\nimport TaskCell from './TaskCell';\nimport {\n IHarvestResource,\n ISeedingResource,\n} from '../../entities/growing.entities';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { IBoatRefuel } from '../../entities/boat.entities';\nimport moment from 'moment';\nimport { toMillisecond } from '../../util/toggleSecondMillisecond';\nimport { IInventoryManage } from '../../entities/inventory.entities';\n\ninterface RefuelProps {\n lang: any;\n data: IBoatRefuel;\n}\n\nconst RefuelCell = ({ lang, data }: RefuelProps) => (\n
\n
\n {translate(lang, 'refuel')}\n
\n
\n
{data.boat.name}
\n {data.fuel_price !== null ? (\n
{`${data.fuel_amount}L / $${data.fuel_price}`}
\n ) : (\n
{`${data.fuel_amount}L`}
\n )}\n
\n {`${moment(toMillisecond(data.start_time)).format(\n 'hh:mm A',\n )} - ${moment(toMillisecond(data.finish_time)).format('hh:mm A')}`}\n
\n {!data.location !== null &&
{data.location}
}\n
\n
\n);\n\ninterface ICell {\n seedings: ISeedingResource[];\n assessments: IAssessmentResource[];\n maintenances: IMaintenanceResource[];\n inventory_seeds: IInventoryManage[];\n harvests: IHarvestResource[];\n tasks: ITaskData[];\n req_assess_seeds: ILineResource[];\n boat_refuels: IBoatRefuel[];\n}\n\ninterface Props {\n cellData: ICell;\n onShowTask: (data: ITaskData) => void;\n onCompleteTask: (data: ITaskData) => void;\n onEditTask: (data: ITaskData) => void;\n onDeleteTask: (data: ITaskData) => void;\n onShowSeed: (data: any) => void;\n onShowAssessment: (d: any) => void;\n onShowMaintenance: (d: any) => void;\n onShowFloats: (d: any) => void;\n onShowReqAssess: (d: any) => void;\n onShowHarvest: (d: any) => void;\n perPage?: number;\n}\n\nconst CalendarCell = ({\n cellData,\n onShowTask,\n onCompleteTask,\n onEditTask,\n onDeleteTask,\n onShowSeed,\n onShowAssessment,\n onShowMaintenance,\n onShowFloats,\n onShowReqAssess,\n onShowHarvest,\n perPage = 5,\n}: Props) => {\n const lang = useSelector(selectLang);\n\n const entities: Array<{ type: string; data: any }> = [\n ...cellData.req_assess_seeds.map(x => ({ type: 'REQ', data: x })),\n ...cellData.tasks.map(x => ({ type: 'TASK', data: x })),\n ...cellData.seedings.map(x => ({ type: 'SEED', data: x })),\n ...cellData.assessments.map(x => ({ type: 'ASS', data: x })),\n ...cellData.maintenances.map(x => ({ type: 'MNT', data: x })),\n ...cellData.inventory_seeds.map(x => ({ type: 'IVT', data: x })),\n ...cellData.harvests.map(x => ({ type: 'HAR', data: x })),\n ...cellData.boat_refuels.map(x => ({ type: 'REFUEL', data: x })),\n ];\n\n const pageSize = useMemo(\n () => Math.ceil(entities.length / perPage),\n [entities],\n );\n const [curPage, setCurPage] = useState(1);\n\n const handlePageChange = (btn: 'next' | 'prev') => {\n if (btn === 'next' && curPage < pageSize) {\n setCurPage(curPage + 1);\n } else if (btn === 'prev' && curPage > 1) {\n setCurPage(curPage - 1);\n }\n };\n const entityData = useMemo(\n () =>\n entities.filter(\n (x, i) => i >= (curPage - 1) * perPage && i < curPage * perPage,\n ),\n [perPage, curPage, entities],\n );\n\n return (\n
\n
\n {entityData.map((item, idx) =>\n item.type === 'TASK' ? (\n \n ) : item.type === 'SEED' ? (\n \n ) : item.type === 'ASS' ? (\n \n ) : item.type === 'MNT' ? (\n \n ) : item.type === 'IVT' ? (\n \n ) : item.type === 'HAR' ? (\n \n ) : item.type === 'REQ' ? (\n \n ) : item.type === 'REFUEL' ? (\n \n ) : (\n <>\n ),\n )}\n
\n
\n {entities.length > perPage && (\n
\n {curPage > 1 && (\n \n {translate(lang, 'Previous')}\n \n )}\n
\n {curPage}/{pageSize}\n
\n {curPage < pageSize && (\n \n {translate(lang, 'Next')}\n \n )}\n
\n )}\n
\n
\n );\n};\n\nexport default CalendarCell;\n","import { FC, useMemo, useState } from 'react';\nimport { Modal, Table } from 'antd';\nimport moment from 'moment';\nimport { IFarmWeatherResource } from '../../entities/farms.entities';\nimport { CloseIcon, Dropdown, Map, Subtitle } from '../shared';\nimport arrow_png from '../../images/right-arrow.png';\nimport { useSelector } from 'react-redux';\nimport { formatNumber } from '../../entities/util-functions';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst oneKnot = 1.94384;\n\nconst WindyIcon: FC<{ wu: number; wv: number }> = ({ wu, wv }) => {\n const x = Number(wu),\n y = Number(wv);\n const s = Math.sqrt(x * x + y * y),\n a = (-Math.atan2(y, x) * 180) / Math.PI;\n\n return s < 1e-9 ? (\n
{`${(s * oneKnot).toFixed(2)} knots`}
\n ) : (\n
\n
{`${(s * oneKnot).toFixed(2)} knots`}
\n
\n \n
\n
\n );\n};\n\nconst columns = (lang: any) => [\n {\n title: translate(lang, 'Time'),\n dataIndex: 'rts',\n key: 'rts',\n render: (x: any) => {moment(x).format('HH:mm')},\n },\n {\n title: translate(lang, 'Temperature'),\n dataIndex: 'temperature',\n key: 'temperature',\n render: (x: any) => {Number(x).toFixed(1)} °C,\n },\n {\n title: translate(lang, 'Wind Speed'),\n dataIndex: '',\n key: 'wind',\n render: (x: any) => ,\n },\n {\n title: translate(lang, 'Precip'),\n dataIndex: 'precip',\n key: 'precip',\n render: (x: any) => {Number(x).toFixed(1)} mm,\n },\n {\n title: translate(lang, 'Pressure'),\n dataIndex: 'pressure',\n key: 'pressure',\n render: (x: number | null) => (\n {x ? `${formatNumber(x / 1000)} KPa` : ''}\n ),\n },\n {\n title: '',\n dataIndex: '',\n key: 'right',\n render: (x: any) => ,\n },\n];\n\ninterface Props {\n visible: boolean;\n onClose: (x: any) => void;\n className?: string;\n title: string;\n data: IFarmWeatherResource[];\n}\n\nconst FarmWeatherModal = ({\n visible,\n onClose,\n className,\n title,\n data,\n}: Props) => {\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n\n const [farmID, setFarmID] = useState(farmsData[0].id.toString());\n\n const { latitude, longitude, weathers } = useMemo(() => {\n const weathers = data.filter(x => x.farm_id === Number(farmID));\n return {\n weathers,\n latitude: weathers.length > 0 ? weathers[0].latitude : null,\n longitude: weathers.length > 0 ? weathers[0].longitude : null,\n };\n }, [farmID]);\n\n return (\n }\n width={700}\n footer={null}\n >\n
\n
\n \n {translate(lang, title)}\n \n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n }))}\n onChange={v => setFarmID(v)}\n />\n
\n
\n \n
\n
\n {latitude && longitude && (\n
\n \n {translate(lang, 'The data entry location')}\n \n
\n \n
\n
\n )}\n
\n
\n \n );\n};\n\nexport default FarmWeatherModal;\n","export default __webpack_public_path__ + \"static/media/clock-image.7acc2a43.png\";","import { useState, useCallback, useEffect } from 'react';\nimport { Modal } from 'antd';\nimport moment from 'moment';\nimport { CloseIcon, Spinner, Subtitle } from '../shared';\nimport { Link } from 'react-router-dom';\nimport { sendSingleRequest } from '../../apis';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { IBoatResource } from '../../entities/boat.entities';\nimport { ITimeTrack } from '../../entities/general.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst TimeRange = (start: number, finish: number) => {\n const start_date = moment(start * 1000).format('MMM Do');\n const finish_date = moment(finish * 1000).format('MMM Do');\n\n return start_date === finish_date\n ? `${moment(start * 1000).format('LT')} - ${moment(finish * 1000).format(\n 'LT',\n )}`\n : `${start_date} ${moment(start * 1000).format(\n 'LT',\n )} - ${finish_date} ${moment(finish * 1000).format('LT')}`;\n};\n\nconst TimeTracks = (tracks: ITimeTrack[]) =>\n tracks.map(x => TimeRange(x.start_time, x.finish_time)).join(', ');\n\ninterface IReportData {\n data: Array<{\n type: string;\n data: any;\n farm: { id: number; name: string; farm_number: string } | null;\n line: { id: number; line_name: string } | null;\n }>;\n boat: IBoatResource | null;\n}\n\nconst ReportItem = ({ data }: { data: IReportData }) => {\n const lang = useSelector(selectLang);\n\n return (\n
\n
\n {data.boat\n ? translate(\n lang,\n 'Boat %s',\n `${data.boat.name}(${data.boat.reg_number}):`,\n )\n : translate(lang, 'No Boat') + ':'}\n
\n
    \n {data.data.map((item, i) => (\n
  • \n {item.type === 'SEEDING' ? (\n <>\n {`${TimeTracks(item.data.time_tracks)} SEED `}\n \n {item.farm?.farm_number} line {item.line?.line_name}\n \n \n ) : item.type === 'ASSESSMENT' ? (\n <>\n {`${TimeTracks(item.data.time_tracks)} Assessment `}\n \n {item.farm?.farm_number} line {item.line?.line_name}\n \n \n ) : item.type === 'MAINTENANCE' ? (\n <>\n {`${TimeTracks(item.data.time_tracks)} Maintenance `}\n \n {item.farm?.farm_number} line {item.line?.line_name}\n \n \n ) : item.type === 'HARVEST' ? (\n <>\n {`${TimeTracks(item.data.time_tracks)} Harvest `}\n \n {item.farm?.farm_number} line {item.line?.line_name}\n \n \n ) : (\n <>{`${TimeTracks(item.data.time_tracks)} ${item.data.title}`}\n )}\n
  • \n ))}\n
\n
\n );\n};\n\ninterface Props {\n visible: boolean;\n dateStr: string;\n className?: string;\n onClose: () => void;\n}\n\nconst DailyReportModal = ({ visible, dateStr, className, onClose }: Props) => {\n const lang = useSelector(selectLang);\n const dispatch = useDispatch();\n const day = moment(dateStr).toDate().getTime();\n const nextDay = moment(day).add(1, 'd').toDate().getTime();\n\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState();\n\n const loadData = useCallback(() => {\n setLoading(true);\n sendSingleRequest(\n {\n min_date: Math.floor(day / 1000),\n max_date: Math.floor(nextDay / 1000),\n },\n 'GET',\n 'api/report/daily-data',\n true,\n ).then(res => {\n setLoading(false);\n if (res.status) {\n let result: IReportData[] = [];\n const data = res.data;\n data.sort(\n (a: any, b: any) =>\n a.data.time_tracks[0].start_time - b.data.time_tracks[0].start_time,\n );\n for (let item of data) {\n const i = result.findIndex(x =>\n !item.boat ? !x.boat : x.boat?.id === item.boat.id,\n );\n if (i < 0) {\n result.push({\n boat: item.boat,\n data: [item],\n });\n } else {\n result[i].data.push(item);\n }\n }\n setData(result);\n } else {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Failed to load'),\n }),\n );\n }\n });\n }, []);\n\n useEffect(() => loadData(), [loadData]);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {`${moment(day).format('DD.MM.YYYY')} day report`}\n \n
\n
\n {loading ? (\n
\n \n
\n ) : !data || data.length <= 0 ? (\n \n {translate(lang, 'No Data')}\n
\n ) : (\n data.map((item, i) => )\n )}\n
\n \n \n );\n};\n\nexport default DailyReportModal;\n","import { useEffect, useMemo, useState, useCallback } from 'react';\nimport moment from 'moment';\nimport {\n Button,\n Dropdown,\n ModalComponent,\n Title,\n} from '../../components/shared';\nimport { useDispatch, useSelector } from 'react-redux';\nimport prevIcon from '../../images/prev-image.png';\nimport nextIcon from '../../images/next-image.png';\nimport { Link, useHistory } from 'react-router-dom';\nimport ModalTask from '../../components/todo/ModalTask';\nimport {\n getTaskData,\n removeTask,\n updateTask,\n} from '../../store/tasks/tasks.actions';\nimport {\n IAssessmentResource,\n IFarmWeatherResource,\n ILineResource,\n IMaintenanceResource,\n} from '../../entities/farms.entities';\nimport CalendarCell from './CalendarCell';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport { sendSingleRequest } from '../../apis';\nimport FarmWeatherModal from '../../components/farm-modals/FarmWeatherModal';\nimport { ITaskData } from '../../entities/task.entities';\nimport weather_icon from '../../images/weather-icon.png';\nimport clock_icon from '../../images/clock-image.png';\nimport DailyReportModal from '../../components/farm-modals/DailyReportModal';\nimport SeedingModal from '../../components/farm-modals/SeedingModal';\nimport MaintenanceModal from '../../components/farm-modals/MaintenanceModal';\nimport AssessmentModal from '../../components/farm-modals/AssessmentModal';\nimport FloatManageModal from '../../components/farm-modals/FloatManageModal';\nimport { checkRolePermission } from '../../entities/util-functions';\nimport GrowerSeedModal from '../../components/farm-modals/GrowerSeedModal';\nimport HarvestViewModal from '../../components/view-modals/HarvestViewModal';\nimport {\n IHarvestResource,\n ISeedingResource,\n} from '../../entities/growing.entities';\nimport { selectTasks } from '../../store/tasks/tasks.selector';\nimport { selectProfile, selectUserMeta } from '../../store/auth/auth.selector';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { getLineStatus } from '../../lib/farm.helpers';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { IBoatRefuel } from '../../entities/boat.entities';\nimport { toMillisecond, toSecond } from '../../util/toggleSecondMillisecond';\nimport './styles.scss';\nimport { IInventoryManage } from '../../entities/inventory.entities';\n\ninterface ICell {\n seedings: ISeedingResource[];\n assessments: IAssessmentResource[];\n maintenances: IMaintenanceResource[];\n inventory_seeds: IInventoryManage[];\n harvests: IHarvestResource[];\n tasks: ITaskData[];\n req_assess_seeds: ILineResource[];\n boat_refuels: IBoatRefuel[];\n}\n\ninterface IGrid {\n dateStr: string;\n cellData: ICell;\n status: 'prev' | 'current' | 'next';\n dayLabel: string;\n weathers?: Array;\n}\n\nconst zeroPad = (num: number) => String(num).padStart(2, '0');\nconst viewModeOptions = [\n { id: 'D', value: 'D', label: 'Day View' },\n { id: 'W', value: 'W', label: 'Week View' },\n { id: 'M', value: 'M', label: 'Month View' },\n];\nconst weeks = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'];\nconst TodayStr = moment().format('YYYY-MM-DD');\n\nconst CalendarPage = () => {\n const history = useHistory();\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const tasksData = useSelector(selectTasks);\n const farmsData = useSelector(selectFarmsData);\n const userMeta = useSelector(selectUserMeta);\n const profile = useSelector(selectProfile);\n\n const [loadedData, setLoadedData] = useState();\n const [curDay, setCurDay] = useState(moment().format('YYYY-MM-DD'));\n const [createTask, setCreateTask] = useState(false);\n const [showTaskData, setShowTaskData] = useState();\n const [editTaskData, setEditTaskData] = useState();\n const [editTask, setEditTask] = useState(false);\n const [deleteTask, setDeleteTask] = useState(false);\n const [deleteTaskId, setDeleteTaskId] = useState('0');\n const [createTData, setCreateTData] = useState(null);\n const [checkingTask, setCheckingTask] = useState();\n const [weathers, setWeathers] = useState();\n const [focWeathers, setFocWeathers] = useState();\n const [dailyStr, setDailyStr] = useState();\n const [viewMode, setViewMode] = useState('M');\n const [assessCell, setAssessCell] = useState<{\n line: ILineResource;\n data: IAssessmentResource;\n }>();\n const [mntCell, setMntCell] = useState<{\n line: ILineResource;\n data: IMaintenanceResource;\n }>();\n const [floatCell, setFloatCell] = useState<{\n line: ILineResource;\n data: IInventoryManage;\n }>();\n const [seedCell, setSeedCell] = useState<{\n line: ILineResource;\n data: ISeedingResource;\n }>();\n const [reqCell, setReqCell] = useState();\n const [harCell, setHarCell] = useState();\n\n const getBusinessType = (line: any) =>\n farmsData.find(x => x.id === line.farm_id)?.type ?? 'MUSSEL';\n\n const grid = useMemo(() => {\n const getGridRows = () => {\n let result: Array = [];\n if (viewMode === 'D') {\n result = [\n [\n {\n dateStr: curDay,\n cellData: {\n tasks: tasksData?.filter(\n t => moment(t.due_date).format('YYYY-MM-DD') === curDay,\n ),\n seedings: [],\n assessments: [],\n maintenances: [],\n inventory_seeds: [],\n harvests: [],\n req_assess_seeds: [],\n boat_refuels: [],\n },\n status: 'current',\n dayLabel: moment(curDay).format('DD'),\n },\n ],\n ];\n } else if (viewMode === 'W') {\n const w = (new Date(curDay).getDay() + 6) % 7;\n let rows: IGrid[] = [];\n for (let i = 0; i < 7; i++) {\n const ds = moment(curDay)\n .add(i - w, 'days')\n .format('YYYY-MM-DD');\n const mc = new Date(curDay).getMonth(),\n mm = new Date(ds).getMonth();\n rows.push({\n dateStr: ds,\n cellData: {\n tasks: tasksData?.filter(\n t => moment(t.due_date).format('YYYY-MM-DD') === ds,\n ),\n seedings: [],\n assessments: [],\n maintenances: [],\n inventory_seeds: [],\n harvests: [],\n req_assess_seeds: [],\n boat_refuels: [],\n },\n status: mm < mc ? 'prev' : mm > mc ? 'next' : 'current',\n dayLabel: moment(ds).format(mm === mc ? 'DD' : 'MMM DD'),\n });\n }\n result.push(rows);\n } else {\n const yy = moment(curDay).format('YYYY'),\n mm = moment(curDay).format('MM');\n const day = `${moment(curDay).format('YYYY-MM')}-01`;\n const firstWeek = (new Date(day).getDay() + 6) % 7;\n const lastDay = new Date(Number(yy), Number(mm), 0).getDate();\n let rows: IGrid[] = [];\n for (let i = 0; i < firstWeek; i++) {\n const ds = moment(day)\n .subtract(firstWeek - i, 'days')\n .format('YYYY-MM-DD');\n rows.push({\n dateStr: ds,\n cellData: {\n tasks: tasksData?.filter(\n t => moment(t.due_date).format('YYYY-MM-DD') === ds,\n ),\n seedings: [],\n assessments: [],\n maintenances: [],\n inventory_seeds: [],\n harvests: [],\n req_assess_seeds: [],\n boat_refuels: [],\n },\n status: 'prev',\n dayLabel: moment(ds).format('DD'),\n });\n }\n for (let i = 1; i <= lastDay; i++) {\n const ds = moment(`${yy}-${mm}-${zeroPad(i)}`).format('YYYY-MM-DD');\n rows.push({\n dateStr: ds,\n cellData: {\n tasks: tasksData?.filter(\n t => moment(t.due_date).format('YYYY-MM-DD') === ds,\n ),\n seedings: [],\n assessments: [],\n maintenances: [],\n inventory_seeds: [],\n harvests: [],\n req_assess_seeds: [],\n boat_refuels: [],\n },\n status: 'current',\n dayLabel: moment(ds).format(i === 1 ? 'MMM DD' : 'DD'),\n });\n if (rows.length >= 7) {\n result.push(rows);\n rows = [];\n }\n }\n if (rows.length > 0) {\n for (let i = 0; rows.length < 7; i++) {\n const ds = moment(day)\n .add(1, 'months')\n .add(i, 'days')\n .format('YYYY-MM-DD');\n rows.push({\n dateStr: ds,\n cellData: {\n tasks: tasksData?.filter(\n t => moment(t.due_date).format('YYYY-MM-DD') === ds,\n ),\n seedings: [],\n assessments: [],\n maintenances: [],\n inventory_seeds: [],\n harvests: [],\n req_assess_seeds: [],\n boat_refuels: [],\n },\n status: 'next',\n dayLabel: moment(ds).format(i === 0 ? 'MMM DD' : 'DD'),\n });\n }\n result.push(rows);\n }\n }\n return result;\n };\n let result = getGridRows();\n const insertData = (ds: string, key: keyof ICell, val: any) => {\n for (let i = 0; i < result.length; i++) {\n let j = 0;\n for (j = 0; j < result[i].length && result[i][j].dateStr !== ds; j++);\n if (j < result[i].length) {\n result[i][j].cellData[key].push(val);\n break;\n }\n }\n };\n const insertWeather = (ds: string, w: IFarmWeatherResource) => {\n for (let i = 0; i < result.length; i++) {\n let j = 0;\n for (j = 0; j < result[i].length && result[i][j].dateStr !== ds; j++);\n if (j < result[i].length) {\n if (result[i][j].weathers === undefined) result[i][j].weathers = [];\n result[i][j].weathers?.push(w);\n break;\n }\n }\n };\n for (let farm of farmsData) {\n for (let line of farm.lines.filter(x => !!x.growing_cycle)) {\n if (\n getLineStatus(line, userMeta?.line_assess_expire_days) ===\n 'REQUIRE_ASSESSMENT'\n ) {\n const ds = moment().format('YYYY-MM-DD');\n insertData(ds, 'req_assess_seeds', line);\n }\n }\n }\n for (let x of loadedData?.seedings ?? []) {\n const ds = moment(toMillisecond(x.planned_date_seed)).format(\n 'YYYY-MM-DD',\n );\n insertData(ds, 'seedings', x);\n }\n for (let x of loadedData?.assessments ?? []) {\n const ds = moment(toMillisecond(x.assessment_date)).format('YYYY-MM-DD');\n insertData(ds, 'assessments', x);\n }\n for (let x of loadedData?.maintenances ?? []) {\n const ds = moment(toMillisecond(x.maintain_date)).format('YYYY-MM-DD');\n insertData(ds, 'maintenances', x);\n }\n for (let x of loadedData?.inventory_seeds ?? []) {\n const ds = moment(toMillisecond(x.manage_date)).format('YYYY-MM-DD');\n insertData(ds, 'inventory_seeds', x);\n }\n for (let x of loadedData?.harvests ?? []) {\n const ds = moment(toMillisecond(x.complete_date)).format('YYYY-MM-DD');\n insertData(ds, 'harvests', x);\n }\n if (weathers && weathers.length > 0) {\n for (let w of weathers) {\n insertWeather(moment(w.rts).format('YYYY-MM-DD'), w);\n }\n }\n for (let x of loadedData?.boat_refuels ?? []) {\n const ds = moment(toMillisecond(x.start_time)).format('YYYY-MM-DD');\n insertData(ds, 'boat_refuels', x);\n }\n return result;\n }, [curDay, tasksData, farmsData, loadedData, weathers, userMeta, viewMode]);\n\n const onShowTask = (data: ITaskData) => {\n setShowTaskData(data);\n };\n const onEditTask = (data: any) => {\n setEditTaskData(data);\n setEditTask(true);\n };\n const onDeleteTask = (data: ITaskData) => {\n setDeleteTask(true);\n setDeleteTaskId(data.id!);\n };\n const handleOnAddTask = () => {\n setCreateTask(false);\n };\n const handleOnCreateTask = () => {\n if (!createTask) {\n setCreateTData(null);\n }\n setCreateTask(!createTask);\n };\n const handleUpdateMonth = (d: number) => {\n const day = moment(curDay)\n .add(d, viewMode === 'M' ? 'months' : viewMode === 'W' ? 'weeks' : 'days')\n .format('YYYY-MM-DD');\n setCurDay(day);\n };\n const goToToday = () => {\n setCurDay(TodayStr);\n };\n const handleOnConfirmDelete = async () => {\n await dispatch(removeTask(Number(deleteTaskId), history));\n setDeleteTask(false);\n };\n const handlePlusTaskClick = (date: string) => {\n setCreateTData({ due_date: moment(date).toDate().getTime() });\n setCreateTask(true);\n };\n const onCompleteTask = (task: ITaskData) => {\n setCheckingTask(task);\n };\n const doCompleteTask = () => {\n if (!checkingTask) return;\n dispatch(updateTask({ ...checkingTask, is_completed: true }, history)).then(\n () => setCheckingTask(undefined),\n );\n };\n const loadData = useCallback(async () => {\n const min_date = moment(curDay).add(-2, 'months').format('YYYY-MM-DD');\n let response = await sendSingleRequest(\n { min_date },\n 'GET',\n 'api/farm/weather',\n true,\n );\n if (response.status) {\n setWeathers(response.data);\n }\n response = await sendSingleRequest(\n {\n min_date: toSecond(moment(curDay).add(-2, 'months').toDate().getTime()),\n max_date: toSecond(moment(curDay).add(2, 'months').toDate().getTime()),\n },\n 'GET',\n 'api/overview/entries',\n true,\n );\n if (!response.status) return;\n let tmpData: ICell = response.data;\n\n response = await sendSingleRequest(\n {\n min_time: toSecond(moment(curDay).add(-2, 'months').toDate().getTime()),\n max_time: toSecond(moment(curDay).add(2, 'months').toDate().getTime()),\n },\n 'GET',\n 'api/boat/refuels',\n true,\n );\n if (response.status) {\n tmpData.boat_refuels = response.data;\n }\n setLoadedData(tmpData);\n }, [curDay]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n useEffect(() => {\n dispatch(getTaskData());\n\n return () => {};\n }, [dispatch]);\n\n const wi = grid.some(x => x.some(y => y.dateStr === TodayStr))\n ? (new Date(TodayStr).getDay() + 6) % 7\n : -1;\n\n return (\n
\n
\n
\n
\n \n {translate(lang, 'Calendar')}\n \n
\n
\n
\n
\n
\n
\n \n {translate(lang, 'Today')}\n \n
\n \n \n
\n
\n {moment(curDay).format('MMMM YYYY')}\n
\n \n \n
\n
\n
\n
\n
\n setViewMode(v)}\n />\n
\n
\n \n {translate(lang, 'Add task')}\n \n \n \n \n \n \n \n
\n {createTask && (\n \n )}\n
\n
\n
\n
\n
\n
{translate(lang, 'Task')}
\n
\n
\n
\n
{translate(lang, 'Seed')}
\n
\n
\n
\n
\n {translate(lang, 'Assessment')}\n
\n
\n
\n
\n
\n {translate(lang, 'Maintenance')}\n
\n
\n
\n
\n
\n {translate(lang, 'Floats manage')}\n
\n
\n
\n
\n
{translate(lang, 'Harvest')}
\n
\n
\n
\n
\n {translate(lang, 'REQ. ASSESS')}\n
\n
\n
\n
\n
{translate(lang, 'Refuel')}
\n
\n
\n
\n \n \n \n {viewMode === 'D' ? (\n \n ) : (\n weeks.map((w, i) => (\n \n ))\n )}\n \n \n \n {grid.map((rows, i) => (\n \n {rows.map((item, j) => (\n \n
\n handlePlusTaskClick(item.dateStr)}\n >\n {translate(lang, 'Add task')}\n \n {item.dayLabel}\n {checkRolePermission(\n { allowedRoles: ['owner', 'admin'] },\n profile?.role,\n ) && (\n setDailyStr(item.dateStr)}\n />\n )}\n {item.weathers && item.weathers.length > 0 && (\n setFocWeathers(item.weathers)}\n />\n )}\n
\n setSeedCell(d)}\n onShowAssessment={d => setAssessCell(d)}\n onShowMaintenance={d => setMntCell(d)}\n onShowFloats={d => setFloatCell(d)}\n onShowReqAssess={d => setReqCell(d)}\n onShowHarvest={d => setHarCell(d)}\n perPage={\n viewMode === 'M'\n ? 5\n : viewMode === 'W'\n ? 10\n : item.cellData.assessments.length +\n item.cellData.harvests.length +\n item.cellData.inventory_seeds.length +\n item.cellData.maintenances.length +\n item.cellData.req_assess_seeds.length +\n item.cellData.seedings.length +\n item.cellData.tasks.length\n }\n />\n \n ))}\n
\n ))}\n \n
{weeks[(new Date(curDay).getDay() + 6) % 7]}\n {w}\n
\n
\n \n {!!showTaskData && (\n setShowTaskData(undefined)}\n onCancel={() => setShowTaskData(undefined)}\n />\n )}\n {editTask && (\n setEditTask(false)}\n data={editTaskData}\n updateId={Number(editTaskData?.id)}\n onConfirm={() => setEditTask(false)}\n />\n )}\n setDeleteTask(!deleteTask)}\n type='delete'\n onConfirm={handleOnConfirmDelete}\n />\n {checkingTask && (\n setCheckingTask(undefined)}\n type='confirm'\n onConfirm={doCompleteTask}\n />\n )}\n {focWeathers && focWeathers.length > 0 && (\n setFocWeathers(undefined)}\n data={focWeathers}\n />\n )}\n {!!assessCell && (\n {}}\n onCancel={() => setAssessCell(undefined)}\n />\n )}\n {!!mntCell && (\n setMntCell(undefined)}\n onConfirm={() => {}}\n title='View maintenance'\n lineData={mntCell.line}\n data={mntCell.data}\n />\n )}\n {!!floatCell && (\n {}}\n lineData={floatCell.line}\n data={{\n ...floatCell.data,\n inventory_id: floatCell.data.inventory.id,\n }}\n onCancel={() => setFloatCell(undefined)}\n />\n )}\n {!!reqCell && (\n setReqCell(undefined)}\n onConfirm={() => {\n setReqCell(undefined);\n dispatch(loadFarmsData());\n loadData();\n }}\n lineData={reqCell}\n />\n )}\n {!!seedCell &&\n (profile?.account_type === 'grower' ? (\n setSeedCell(undefined)}\n onConfirm={() => setSeedCell(undefined)}\n onlyView={true}\n seedData={seedCell.data}\n />\n ) : (\n setSeedCell(undefined)}\n onConfirm={() => setSeedCell(undefined)}\n lineData={seedCell.line}\n updateID={seedCell.data.id}\n data={seedCell.data}\n />\n ))}\n {!!harCell && (\n setHarCell(undefined)}\n />\n )}\n {!!dailyStr && (\n setDailyStr(undefined)}\n />\n )}\n \n );\n};\n\nexport default CalendarPage;\n","import { useCallback, useEffect, useState } from 'react';\nimport moment from 'moment';\nimport { sendSingleRequest } from '../../apis';\nimport './styles.scss';\nimport { Input, Spinner } from '../../components/shared';\n\nconst TodayWindyPage = () => {\n const [windy, setWindy] = useState();\n const [loading, setLoading] = useState(false);\n const [latitude, setLatitude] = useState('40.05243183880866');\n const [longitude, setLongitude] = useState('124.32115722715984');\n\n const loadData = useCallback(() => {\n setLoading(true);\n sendSingleRequest(\n {\n latitude,\n longitude,\n },\n 'GET',\n 'api/windy',\n true,\n ).then(r => {\n setLoading(false);\n if (r.status) {\n setWindy(r.data);\n } else {\n setWindy(null);\n }\n });\n }, [latitude, longitude]);\n\n useEffect(() => loadData(), [loadData]);\n\n return (\n
\n \n
\n setLatitude(e.target.value)}\n />\n
\n
\n setLongitude(e.target.value)}\n />\n
\n
\n {loading ? (\n
\n \n
\n ) : (\n windy && (\n
\n \n \n \n Date\n {windy.ts.map((x: any, i: number) => (\n \n {moment(x).format('MM-DD LTS')}\n \n ))}\n \n \n \n Temperature (°C)\n \n {windy['temp-surface'].map((x: any, i: number) => (\n \n {Number(x - 273).toFixed(1)}\n \n ))}\n \n \n Precip (mm)\n {windy['past3hprecip-surface'].map((x: any, i: number) => (\n \n {Number(x * 1000).toFixed(2)}\n \n ))}\n \n \n Wind (m/s)\n {windy['wind_u-surface'].map((x: any, i: number) => (\n \n {Math.sqrt(\n x * x +\n windy['wind_v-surface'][i] *\n windy['wind_v-surface'][i],\n ).toFixed(2)}\n \n ))}\n \n \n \n
\n )\n )}\n \n );\n};\n\nexport default TodayWindyPage;\n","import { calcInterestRate } from '../../../entities/util-functions';\nimport InterestGrowth from './InterestGrowth';\n\ninterface Props {\n planned: number;\n actual: number;\n}\n\nconst PlannedActualRate = ({ planned, actual }: Props) => {\n const rate = calcInterestRate(planned, actual);\n\n return (\n = 0}\n interest={\n rate % 1 === 0 ? Math.abs(rate) : Number(Math.abs(rate).toFixed(2))\n }\n />\n );\n};\n\nexport default PlannedActualRate;\n","import { Modal, Radio } from 'antd';\nimport { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { IBudgetFarm } from '../../entities/budget.entities';\nimport {\n Button,\n CloseIcon,\n Dropdown,\n Input,\n RadioButton,\n Subtitle,\n} from '../shared';\nimport ModalFeedbackView from '../shared/feedback/ModalFeedbackView';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\nconst typeOptions = [\n { id: 'seeding_cost', value: 'seeding_cost', label: 'Seeding Cost ($)' },\n {\n id: 'maintenance_cost',\n value: 'maintenance_cost',\n label: 'Maintenance Cost ($)',\n },\n { id: 'harvest_cost', value: 'harvest_cost', label: 'Harvest Cost ($)' },\n];\n\nconst changeOptions = [\n {\n id: 'harvest_income',\n value: 'harvest_income',\n label: 'Harvest Income ($)',\n },\n {\n id: 'harvest_amount',\n value: 'harvest_amount',\n label: 'Harvest Amount (kg)',\n },\n { id: 'line_length', value: 'line_length', label: 'Budgeted Length (m)' },\n];\n\ninterface Props {\n visible: boolean;\n farmId: number;\n paramLineId?: number;\n budgetFarm: IBudgetFarm;\n onConfirm: (d: any) => void;\n onCancel: () => void;\n}\n\nconst BudgetExpenseModal = ({\n visible,\n farmId,\n paramLineId,\n budgetFarm,\n onConfirm,\n onCancel,\n}: Props) => {\n const dispatch = useDispatch();\n\n const lang = useSelector(selectLang);\n const linesOption =\n useSelector(selectFarmsData)\n .find(x => x.id === farmId)\n ?.lines.map(l => ({\n id: l.id.toString(),\n value: l.id.toString(),\n label: l.line_name,\n })) ?? [];\n\n const [mode, setMode] = useState<'add' | 'update'>('add');\n const [disabled, setDisabled] = useState(false);\n const [lineId, setLineId] = useState(paramLineId?.toString() ?? '');\n const [name, setName] = useState('');\n const [expenseType, setExpenseType] = useState();\n const [budgetType, setBudgetType] = useState();\n const [amount, setAmount] = useState('');\n const [unit, setUnit] = useState('$');\n\n const showError = (message: string) =>\n dispatch(showFeedback({ isMessageModal: true, type: 'error', message }));\n const confirmClick = async () => {\n if (!lineId) {\n showError(translate(lang, 'Please select a line'));\n return;\n }\n if (mode === 'add') {\n if (!expenseType) {\n showError(translate(lang, 'Which cost expense do you want to add ?'));\n return;\n }\n if (!name) {\n showError(translate(lang, 'Please input budgeted expense name'));\n return;\n }\n } else {\n if (!budgetType) {\n showError(translate(lang, 'Which budget do you want to update ?'));\n return;\n }\n }\n if (!amount || !Number(amount)) {\n showError(translate(lang, 'Please input valid expense amount'));\n return;\n }\n setDisabled(true);\n const res =\n mode === 'add'\n ? await sendSingleRequest(\n { line_id: lineId, name, type: expenseType, amount },\n 'POST',\n 'api/farm/line/budgets/add-expenses',\n true,\n )\n : await sendSingleRequest(\n { line_id: lineId, type: budgetType, amount },\n 'PUT',\n 'api/farm/line/budget/update',\n true,\n );\n\n setDisabled(false);\n if (res.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Succeed'),\n }),\n );\n onConfirm(res.data);\n } else {\n showError(translate(lang, res.data?.message ?? 'Something went wrong'));\n }\n };\n\n useEffect(() => {\n if (lineId && budgetType) {\n const bud = budgetFarm.lines.find(x => x.id === Number(lineId));\n if (budgetType === 'line_length') {\n setAmount(bud?.length.planned.toString() ?? '');\n setUnit('m');\n } else if (budgetType === 'harvest_income') {\n setAmount(bud?.harvest_income.planned.toString() ?? '');\n setUnit('$');\n } else if (budgetType === 'harvest_amount') {\n setAmount(bud?.harvest_amount.planned.toString() ?? '');\n setUnit('kg');\n } else {\n setUnit('$');\n }\n }\n if (mode === 'add') {\n setUnit('$');\n }\n\n return () => {};\n }, [lineId, budgetType]);\n\n return (\n }\n width={600}\n footer={null}\n >\n
\n
\n \n {translate(\n lang,\n mode === 'add'\n ? 'Add budgeted expense'\n : 'Update budgeted amount',\n )}\n \n
\n
\n setMode(e.target.value)}\n value={mode}\n >\n \n \n \n
\n
\n
\n t.id === lineId)?.label}\n onChange={v => setLineId(v)}\n />\n
\n {mode === 'add' ? (\n <>\n
\n setName(e.target.value)}\n />\n
\n
\n setExpenseType(v)}\n />\n
\n \n ) : (\n
\n setBudgetType(v)}\n />\n
\n )}\n
\n setAmount(e.target.value)}\n unit={unit}\n />\n
\n
\n
\n \n {translate(lang, 'Cancel')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n
\n \n \n );\n};\n\nexport default BudgetExpenseModal;\n","import { useEffect, useState, useCallback, useMemo } from 'react';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Title,\n Dropdown,\n Spinner,\n Button,\n Tooltip,\n} from '../../components/shared';\nimport { sendSingleRequest } from '../../apis';\nimport { useWidth } from '../../util/useWidth';\nimport BudgetYearArrows from '../../components/budget/BudgetYearArrows';\nimport NotFound from '../static/NotFound';\nimport { IBudgetFarm } from '../../entities/budget.entities';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport PlannedActualRate from '../../components/shared/tables-card/PlannedActualRate';\nimport { Table } from 'antd';\nimport { formatNumber, numberToMoneyStr } from '../../entities/util-functions';\nimport BudgetExpenseModal from '../../components/budget/BudgetExpenseModal';\nimport { randomKey } from '../../lib/common.helpers';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ntype TRowName =\n | 'Harvest'\n | 'Length'\n | 'Harvest tonnes'\n | 'Income'\n | 'Harvest income'\n | 'Profit'\n | 'Expenses'\n | 'Seeding cost'\n | 'Maintenance cost'\n | 'Harvest cost'\n | 'Total expenses';\n\ninterface IRow {\n name: TRowName;\n planned: number;\n actual: number;\n count?: number;\n unit: '$' | 'm' | 't';\n}\n\nconst ValueCell = (v: number, unit: '$' | 'm' | 't') =>\n unit === '$'\n ? `$ ${numberToMoneyStr(v)}`\n : unit === 'm'\n ? `${formatNumber(v)} m`\n : `${formatNumber(v / 1000)} t`;\n\nconst CountContent = (name: string, value: number) => {\n let title = '';\n if (name === 'Length' || name === 'Seeding cost') title = `${value} seedings`;\n else if (\n name === 'Harvest tonnes' ||\n name === 'Harvest income' ||\n name === 'Harvest cost'\n )\n title = `${value} harvests`;\n else if (name === 'Maintenance cost') title = `${value} maintenances`;\n return [{ id: randomKey(), title }];\n};\n\nconst columns = [\n { title: '', dataIndex: 'name', key: 'name', width: '16%' },\n {\n title: 'Budgeted',\n key: 'planned',\n render: (x: IRow) =>\n ['Harvest', 'Income', 'Expenses'].includes(x.name) ? (\n \n ) : !x.count ? (\n {ValueCell(x.planned, x.unit)}\n ) : (\n \n \n {ValueCell(x.planned, x.unit)}\n \n \n ),\n },\n {\n title: 'Actual',\n key: 'actual',\n render: (x: IRow) =>\n ['Harvest', 'Income', 'Expenses'].includes(x.name) ? (\n \n ) : !x.count ? (\n {ValueCell(x.actual, x.unit)}\n ) : (\n \n \n {ValueCell(x.actual, x.unit)}\n \n \n ),\n },\n {\n title: 'Var, %',\n key: 'rate',\n render: (x: IRow) =>\n ['Harvest', 'Income', 'Expenses'].includes(x.name) ? (\n \n ) : (\n \n \n \n ),\n },\n];\n\nconst BudgetFarmPage = () => {\n const width = useWidth();\n const dispatch = useDispatch();\n const query = new URLSearchParams(useLocation().search);\n const lang = useSelector(selectLang);\n\n const farmId = Number(useParams<{ farmId: string }>().farmId);\n\n const [loading, setLoading] = useState(true);\n const [data, setData] = useState();\n const [lineId, setLineId] = useState(\n query.get('line') ? Number(query.get('line')) : 0,\n );\n const [year, setYear] = useState(\n query.get('year') ? Number(query.get('year')) : new Date().getFullYear(),\n );\n const [showExpense, setShowExpense] = useState(false);\n\n const linesOption = [\n { id: '0', value: '0', label: translate(lang, 'All') },\n ...(data?.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n })) ?? []),\n ];\n\n const tableData = useMemo(() => {\n let result: IRow[] = [];\n if (!data) {\n return result;\n }\n if (!lineId) {\n const expense = {\n planned:\n data.total_seeding_cost.planned +\n data.total_maintenance_cost.planned +\n data.total_harvest_cost.planned,\n actual:\n data.total_seeding_cost.actual +\n data.total_maintenance_cost.actual +\n data.total_harvest_cost.actual,\n };\n const profit = {\n planned: data.total_harvest_income.planned - expense.planned,\n actual: data.total_harvest_income.actual - expense.actual,\n };\n result.push({ name: 'Harvest', unit: 't', planned: 0, actual: 0 });\n result.push({ name: 'Length', unit: 'm', ...data.total_length });\n result.push({\n name: 'Harvest tonnes',\n unit: 't',\n ...data.total_harvest_amount,\n });\n result.push({ name: 'Income', unit: '$', planned: 0, actual: 0 });\n result.push({\n name: 'Harvest income',\n unit: '$',\n ...data.total_harvest_income,\n });\n result.push({ name: 'Profit', unit: '$', ...profit });\n result.push({ name: 'Expenses', unit: '$', planned: 0, actual: 0 });\n result.push({\n name: 'Seeding cost',\n unit: '$',\n ...data.total_seeding_cost,\n });\n result.push({\n name: 'Maintenance cost',\n unit: '$',\n ...data.total_maintenance_cost,\n });\n result.push({\n name: 'Harvest cost',\n unit: '$',\n ...data.total_harvest_cost,\n });\n result.push({ name: 'Total expenses', unit: '$', ...expense });\n } else {\n const line = data.lines.find(x => x.id === lineId);\n if (!line) return;\n const expense = {\n planned:\n line.seeding_cost.planned +\n line.maintenance_cost.planned +\n line.harvest_cost.planned,\n actual:\n line.seeding_cost.actual +\n line.maintenance_cost.actual +\n line.harvest_cost.actual,\n };\n const profit = {\n planned: line.harvest_income.planned - expense.planned,\n actual: line.harvest_income.actual - expense.actual,\n };\n result.push({ name: 'Harvest', unit: 't', planned: 0, actual: 0 });\n result.push({ name: 'Length', unit: 'm', ...line.length });\n result.push({\n name: 'Harvest tonnes',\n unit: 't',\n ...line.harvest_amount,\n });\n result.push({ name: 'Income', unit: '$', planned: 0, actual: 0 });\n result.push({\n name: 'Harvest income',\n unit: '$',\n ...line.harvest_income,\n });\n result.push({ name: 'Profit', unit: '$', ...profit });\n result.push({ name: 'Expenses', unit: '$', planned: 0, actual: 0 });\n result.push({ name: 'Seeding cost', unit: '$', ...line.seeding_cost });\n result.push({\n name: 'Maintenance cost',\n unit: '$',\n ...line.maintenance_cost,\n });\n result.push({ name: 'Harvest cost', unit: '$', ...line.harvest_cost });\n result.push({ name: 'Total expenses', unit: '$', ...expense });\n }\n return result;\n }, [lineId, data]);\n\n const loadData = useCallback(() => {\n if (!farmId) return;\n setLoading(true);\n sendSingleRequest(\n { farm_id: farmId, year },\n 'GET',\n 'api/farm/line/budgets',\n true,\n ).then(res => {\n setLoading(false);\n if (res.status) {\n setData(res.data);\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, res.data?.message ?? 'Unknown error'),\n type: 'error',\n }),\n );\n }\n });\n }, [farmId, year]);\n\n useEffect(() => loadData(), [loadData]);\n\n return (\n
\n
\n 460\n ? 'd-flex pt-28 pb-24 pr-15 pl-21 align-items-center justify-content-between'\n : 'pt-16'\n }\n >\n \n {data?.name}\n \n setYear(value)}\n />\n
\n
460 ? 'pl-15 pr-15 pb-34' : 'pb-70'}>\n {loading ? (\n
\n \n
\n ) : !data ? (\n \n ) : (\n <>\n
\n setLineId(Number(v))}\n options={linesOption as any}\n value={lineId.toString()}\n defaultValue={'0'}\n />\n
\n setShowExpense(true)}\n >\n {translate(lang, 'Add expense')}\n \n
\n
\n {\n if (d.name === 'Profit' || d.name === 'Total expenses') {\n return 'mr-table__row-footer';\n }\n if (\n d.name === 'Harvest' ||\n d.name === 'Income' ||\n d.name === 'Expenses'\n ) {\n return 'mr-table__row-title';\n }\n if (\n d.name === 'Seeding cost' ||\n d.name === 'Maintenance cost' ||\n d.name === 'Harvest cost'\n ) {\n return 'mr-table__row-sub-title';\n }\n if (d.actual >= d.planned) {\n return 'mr-table__row-bg';\n }\n return '';\n }}\n />\n \n )}\n
\n
\n {showExpense && !!data && (\n setShowExpense(false)}\n onConfirm={() => {\n loadData();\n setShowExpense(false);\n }}\n />\n )}\n \n );\n};\n\nexport default BudgetFarmPage;\n","import { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Button,\n CheckboxButton,\n Dropdown,\n Spinner,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport axios from 'axios';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\n\nconst uploadExcel = async (\n file: any,\n farmId: string | null,\n createNew: boolean,\n) => {\n try {\n const Authorization = {\n Authorization: `Bearer ${localStorage.getItem('marine-farm')}`,\n };\n const formData = new FormData();\n formData.append('excel', file);\n if (farmId) {\n formData.append('farm_id', farmId);\n }\n if (createNew) formData.append('create_new', 'true');\n\n return axios.post(\n `${process.env.REACT_APP_API_URL}api/import/line-location`,\n formData,\n {\n headers: {\n ...Authorization,\n Accept: '*',\n 'Content-Type': 'multipart/form-data',\n },\n },\n );\n } catch (error) {\n throw error;\n }\n};\n\ninterface IResult {\n total_count: number;\n failed_count: number;\n failed_data: Array<{ line_uid: string; line_name: string; comment: string }>;\n}\n\nconst ImportLinesPage = () => {\n const dispatch = useDispatch();\n const farmsData = useSelector(selectFarmsData);\n const [farmId, setFarmId] = useState('0');\n const [createNew, setCreateNew] = useState(false);\n\n const [disabled, setDisabled] = useState(false);\n const [file, setFile] = useState(null);\n const [result, setResult] = useState();\n\n const onFileChange = (e: any) => {\n if (e.target.files && e.target.files.length > 0) setFile(e.target.files[0]);\n };\n const submitFile = () => {\n setResult(undefined);\n if (Number(farmId) === 0) {\n window.alert('Please select a farm');\n } else if (!file) {\n window.alert('No file selected');\n } else {\n setDisabled(true);\n uploadExcel(file, Number(farmId) <= 0 ? null : farmId, createNew)\n .then(r => {\n setDisabled(false);\n setResult(r.data);\n if ((r.data?.failed_count ?? 0) <= 0) {\n dispatch(\n showFeedback({\n type: 'success',\n isMessage: true,\n message: 'Imported successfully',\n }),\n );\n }\n })\n .catch(err => {\n setDisabled(false);\n alert(err?.message ?? 'Failed to upload');\n });\n }\n };\n\n return (\n
\n
\n
\n
\n \n Upload Line Excel file\n \n
\n
\n
\n
\n
\n
\n setCreateNew(e.target.checked)}\n className='mb-17'\n />\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n })),\n ]}\n value={farmId}\n onChange={v => setFarmId(v)}\n label='Select a farm'\n />\n
\n
\n \n
\n
\n \n Confirm\n \n
\n
\n
\n
\n Total: {result?.total_count ?? '-'}\n
\n
\n Success:\n {result ? result.total_count - result.failed_count : ' -'}\n
\n
\n Failed: {result?.failed_count ?? '-'}\n
\n
\n
\n {disabled ? (\n
\n \n
\n ) : (\n
\n
\n \n Failed data\n \n {result &&\n result.failed_data.map((item, idx) => (\n
\n
\n
\n
Line UID
\n
{item.line_uid}
\n
\n
\n
Line Name
\n
{item.line_name}
\n
\n
\n
\n
Message
\n
{item.comment}
\n
\n
\n ))}\n
\n
\n )}\n
\n
\n
\n
\n
\n );\n};\n\nexport default ImportLinesPage;\n","import { useMemo, useState } from 'react';\nimport axios from 'axios';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button, Dropdown, Subtitle, Title } from '../../components/shared';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { selectAssessmentFields } from '../../store/automation/automation.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport './styles.scss';\n\nconst LOCAL_PAGE_KEY = 'assessment_import_headers';\n\nconst assessmentOptions = [\n { id: 'farm_name', value: 'farm_name', label: 'Farm name' },\n { id: 'farm_number', value: 'farm_number', label: 'Farm number' },\n { id: 'line_name', value: 'line_name', label: 'Line name' },\n { id: 'line_length', value: 'line_length', label: 'Line length' },\n { id: 'backbone', value: 'backbone', label: 'Backbone length' },\n { id: 'season_name', value: 'season_name', label: 'Season' },\n { id: 'date_seed', value: 'date_seed', label: 'Date seeded' },\n { id: 'spat_source', value: 'spat_source', label: 'Spat Source' },\n { id: 'spat_amount', value: 'spat_amount', label: 'Spat amount' },\n { id: 'drop', value: 'drop', label: 'Drop' },\n { id: 'submersion', value: 'submersion', label: 'Submersion' },\n { id: 'spacing', value: 'spacing', label: 'Spacing' },\n { id: 'floats', value: 'floats', label: 'Floats' },\n { id: 'assessment_date', value: 'assessment_date', label: 'Assessment Date' },\n {\n id: 'planned_date_harvest',\n value: 'planned_date_harvest',\n label: 'Planned harvest date',\n },\n { id: 'size_min', value: 'size_min', label: 'Size.Min' },\n { id: 'size_max', value: 'size_max', label: 'Size.Max' },\n { id: 'size_avg', value: 'size_avg', label: 'Size.Avg' },\n { id: 'comment', value: 'comment', label: 'Comment' },\n];\n\nconst uploadExcel = async (\n file: any,\n withFields = false,\n fields: any = null,\n) => {\n try {\n const Authorization = {\n Authorization: `Bearer ${localStorage.getItem('marine-farm')}`,\n };\n const formData = new FormData();\n if (withFields && !!fields) {\n formData.append('with_fields', '1');\n for (let k in fields) {\n formData.append(k, fields[k]);\n }\n }\n formData.append('excel', file);\n\n return axios.post(\n `${process.env.REACT_APP_API_URL}api/import/assessment`,\n formData,\n {\n headers: {\n ...Authorization,\n Accept: '*',\n 'Content-Type': 'multipart/form-data',\n },\n },\n );\n } catch (error) {\n throw error;\n }\n};\n\ninterface IResult {\n total: number;\n failed: number;\n data: Array;\n}\n\nconst ImportAssessmentsPage = () => {\n const dispatch = useDispatch();\n const customFields = useSelector(selectAssessmentFields);\n const lang = useSelector(selectLang);\n\n const [result, setResult] = useState();\n const [disabled, setDisabled] = useState(false);\n const [file, setFile] = useState(null);\n const [headers, setHeaders] = useState();\n const [fields, setFields] = useState();\n const [customValues, setCustomValues] = useState();\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n const onFileChange = (e: any) => {\n if (e.target.files && e.target.files.length > 0) setFile(e.target.files[0]);\n };\n const submitFile = () => {\n if (!file) {\n showError('Please select a file');\n return;\n }\n setDisabled(true);\n uploadExcel(file, false)\n .then(res => {\n setDisabled(false);\n setHeaders(res.data);\n let saved: any = JSON.parse(\n localStorage.getItem(LOCAL_PAGE_KEY) ?? '{}',\n );\n for (let k in saved) {\n if (!res.data.includes(saved[k])) saved[k] = null;\n }\n setFields((prv: any) => (prv ? { ...prv, ...saved } : saved));\n })\n .catch(err => {\n setDisabled(false);\n showError(err?.message ?? 'Failed to upload');\n });\n };\n const getFieldKey = (val: string) => {\n for (let k in fields) {\n if (fields[k] === val) {\n return assessmentOptions.find(x => x.value === k)?.label;\n }\n }\n for (let k in customValues) {\n if (customValues[k] === val) {\n return customFields.find(x => x.id === Number(k))?.name;\n }\n }\n return '';\n };\n const handleUpdateField = (key: string, val: string) => {\n let tmp = { ...fields };\n for (let k in tmp) if (tmp[k] === val) tmp[k] = '';\n\n if (key && isNaN(+key)) tmp[key] = val;\n setFields(tmp);\n\n localStorage.setItem(LOCAL_PAGE_KEY, JSON.stringify(tmp));\n\n tmp = { ...customValues };\n for (let k in tmp) if (tmp[k] === val) tmp[k] = '';\n\n if (key && !isNaN(+key)) tmp[key] = val;\n setCustomValues(tmp);\n };\n const submitData = () => {\n if (!file) {\n showError('Please select a file');\n return;\n }\n if (!fields) {\n showError('Please select fields');\n return;\n }\n if (!fields.farm_name && !fields.farm_number) {\n showError('Farm name or farm number should be specified');\n return;\n }\n if (!fields.line_name) {\n showError('Line name should be specified');\n return;\n }\n if (!fields.assessment_date) {\n showError('Assessment date should be specified');\n return;\n }\n if (!fields.planned_date_harvest) {\n showError('Planned date harvest should be specified');\n return;\n }\n if (!fields.size_min || !fields.size_max || !fields.size_avg) {\n showError('Size.Min, Size.Max and Size.Avg should be specified');\n return;\n }\n setDisabled(true);\n uploadExcel(file, true, {\n ...fields,\n custom_fields: JSON.stringify(customValues),\n })\n .then(res => {\n setDisabled(false);\n setResult(res.data);\n })\n .catch(err => {\n setDisabled(false);\n showError(err?.message ?? 'Failed to import');\n });\n };\n\n const extractKeys = useMemo(() => {\n let res: string[] = [];\n if (!result) return res;\n result.data.forEach(x => res.push(...Object.keys(x)));\n res = res.filter((v, i, a) => a.indexOf(v) === i);\n return res;\n }, [result]);\n\n const assessOptions = useMemo(\n () => [\n { id: '-', value: '', label: '(Empty)' },\n ...assessmentOptions.filter(x => !fields || !fields[x.value]),\n ...customFields\n .filter(x => !customValues || !customValues[x.id])\n .map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n })),\n ],\n [assessmentOptions, fields],\n );\n\n return (\n
\n
\n
\n \n {translate(lang, 'Upload Assessments Excel file')}\n \n
\n
\n
\n \n
\n
\n \n {translate(lang, 'Import')}\n \n
\n
\n
\n {!!headers && (\n <>\n
\n {headers.map((x, i) => (\n
\n handleUpdateField(v, x)}\n showSearch={true}\n />\n
\n ))}\n
\n
\n \n {translate(lang, 'OK')}\n \n
\n \n )}\n
\n
\n {result && (\n
\n
\n
Total: {result.total}
\n
\n Success: {result.total - result.failed}\n
\n
Failed: {result.failed}
\n
\n
\n \n Failed data\n \n
\n \n \n \n {extractKeys.map((x, i) => (\n \n ))}\n \n \n \n {result.data.map((row, i) => (\n \n {extractKeys.map((k, j) => (\n \n ))}\n \n ))}\n \n
\n {x}\n
\n {row[k]}\n
\n
\n
\n
\n )}\n
\n
\n
\n );\n};\n\nexport default ImportAssessmentsPage;\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport moment from 'moment';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { Button, Input, Spinner } from '../../components/shared';\nimport { hashColor } from '../../entities/util-functions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { loadUserBoats } from '../../store/users/users.actions';\nimport { toMillisecond } from '../../util/toggleSecondMillisecond';\nimport { IBoatMessage, IBoatResource } from '../../entities/boat.entities';\nimport boat_png from '../../images/boat.png';\nimport { updateUserMeta } from '../../store/auth/auth.actions';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport {\n selectBoats,\n selectNewBoatMessage,\n} from '../../store/users/users.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport './styles.scss';\nimport { translate } from '../../lib/lang.helper';\n\nconst BoatMessagesPage = () => {\n const dispatch = useDispatch();\n const isReading = useRef(false);\n\n const profile = useSelector(selectProfile);\n const boatsData = useSelector(selectBoats);\n const newBoatMessage = useSelector(selectNewBoatMessage);\n const lang = useSelector(selectLang);\n\n const [lastMessage, setLastMessage] = useState();\n const [boats, setBoats] = useState([]);\n const [loading, setLoading] = useState(false);\n const [disabled, setDisabled] = useState(false);\n const [sbId, setSbId] = useState();\n const [messages, setMessages] = useState([]);\n const [limit, setLimit] = useState(30);\n const [content, setContent] = useState('');\n\n const onScrollEvent = (event: React.UIEvent) => {\n const target: any = event.target;\n if (\n sbId &&\n target.scrollHeight + target.scrollTop <= target.clientHeight + 10\n ) {\n if (limit <= messages.length) setLimit(limit + 30);\n }\n };\n const handleClickBoat = (boatId: number) => {\n if (boatId !== sbId) {\n setLimit(30);\n setLoading(true);\n setSbId(boatId);\n }\n };\n const readMessage = (boatId: number, msg: IBoatMessage[]) => {\n if (\n msg.length <= 0 ||\n !boats.find(x => x.id === boatId)?.unread_message_count ||\n isReading.current\n )\n return;\n const lastMsg = msg.reduce((p, c) => (p.id > c.id ? p : c));\n const tmp = boats.map(x =>\n x.id === boatId ? { ...x, unread_message_count: 0 } : x,\n );\n setBoats(tmp);\n\n isReading.current = true;\n sendSingleRequest(\n { boat_id: boatId, last_message_id: lastMsg.id },\n 'POST',\n 'api/boat-message/read-message',\n true,\n ).then(res => {\n dispatch(updateUserMeta());\n isReading.current = false;\n });\n };\n const inputContentHandle = (\n event: React.ChangeEvent,\n ) => {\n if (sbId) readMessage(sbId, messages);\n setContent(event.target.value);\n };\n const sendClickHandle = (event: React.MouseEvent) => {\n event.preventDefault();\n if (content.length <= 0 || !sbId) return;\n setDisabled(true);\n sendSingleRequest(\n { boat_id: sbId, content },\n 'POST',\n 'api/boat-message/message',\n true,\n ).then(res => {\n setDisabled(false);\n if (res.status) {\n setContent('');\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Unknown error'),\n }),\n );\n }\n });\n };\n\n const loadMessages = useCallback(() => {\n if (!sbId) return;\n sendSingleRequest(\n { boat_id: sbId, limit },\n 'GET',\n 'api/boat-message/messages',\n true,\n ).then(res => {\n if (loading) setLoading(false);\n if (res.status) {\n setMessages(res.data);\n setLastMessage(undefined);\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Unknown error'),\n }),\n );\n }\n });\n }, [limit, sbId]);\n\n useEffect(() => setBoats(boatsData), [boatsData]);\n useEffect(() => loadMessages(), [loadMessages]);\n\n useEffect(() => {\n dispatch(loadUserBoats({ with_message_count: true }));\n }, [dispatch]);\n\n useEffect(() => {\n if (lastMessage) {\n let tempMsg = { ...lastMessage };\n if (profile?.id === tempMsg.user_id) {\n tempMsg.is_mine = true;\n tempMsg.is_read = true;\n } else {\n tempMsg.is_mine = false;\n }\n if (sbId && tempMsg.boat_id === sbId) {\n tempMsg.is_read = true;\n if (messages.findIndex(x => x.id === tempMsg.id) < 0) {\n setMessages([tempMsg, ...messages]);\n }\n } else {\n tempMsg.is_read = false;\n const tmp = boats.map(x =>\n x.id === tempMsg.boat_id\n ? { ...x, unread_message_count: (x.unread_message_count ?? 0) + 1 }\n : x,\n );\n setBoats(tmp);\n dispatch(updateUserMeta());\n }\n setLastMessage(undefined);\n }\n }, [lastMessage, messages, boats, sbId]);\n\n useEffect(() => {\n setLastMessage(newBoatMessage);\n }, [newBoatMessage]);\n\n const lastReadId = messages.reduce(\n (p, c) => ((c.is_read || c.is_mine) && p < c.id ? c.id : p),\n 0,\n );\n\n return (\n
\n
\n
\n
\n {boats.map(x => (\n \n \n boat\n
\n
\n
{x.name}
\n
{x.reg_number}
\n
\n {!!x.unread_message_count && (\n
\n {x.unread_message_count}\n
\n )}\n
\n ))}\n
\n
\n {loading ? (\n \n ) : (\n sbId && (\n <>\n {messages.length > 0 && (\n readMessage(sbId, messages)}\n >\n {messages.map(msg => (\n lastReadId ? '--unread' : ''}`}\n >\n
\n {msg.user_id !== profile?.id && (\n
{msg.user.name}
\n )}\n
{msg.content}
\n
\n {moment(toMillisecond(msg.created_at)).format(\n 'dddd hh:mm a',\n )}\n
\n
\n
\n ))}\n
\n )}\n readMessage(sbId, messages)}\n >\n
\n \n
\n
\n \n {translate(lang, 'Send')}\n \n
\n \n \n )\n )}\n \n \n \n \n );\n};\n\nexport default BoatMessagesPage;\n","export default __webpack_public_path__ + \"static/media/mussel-app.f0c142cb.png\";","import { useState } from 'react';\nimport { QRCode } from 'react-qrcode-logo';\nimport { sendSingleRequest } from '../../apis';\nimport { Button, Input, Spinner, Title } from '../../components/shared';\nimport mussel_logo from '../../images/mussel-app.png';\nimport './styles.scss';\n\nconst QRImage = ({ code }: { code: ICode }) => (\n \n \n \n \n);\n\nfunction setPrint(this: any) {\n this.contentWindow.__container__ = this;\n this.contentWindow.onbeforeunload = () =>\n document.body.removeChild(this.__container__);\n this.contentWindow.onafterprint = () =>\n document.body.removeChild(this.__container__);\n this.contentWindow.focus();\n this.contentWindow.print();\n}\n\ninterface ICode {\n type: string;\n track_id: string;\n}\n\nconst QRGeneratePage = () => {\n const [loading, setLoading] = useState(false);\n const [qrVal, setQrVal] = useState();\n const [cnt, setCnt] = useState('1');\n\n const generateClick = () => {\n setLoading(true);\n sendSingleRequest({ count: Number(cnt) }, 'GET', 'api/qr-code', true).then(\n res => {\n setLoading(false);\n if (res.status) {\n setQrVal(res.data);\n } else {\n alert(res.data?.message ?? 'Failed to generate new track code');\n }\n },\n );\n };\n const downloadClick = () => {\n const codes = document.getElementsByClassName('qr-code-div');\n if (!codes || codes.length <= 0) return;\n for (let div of codes) {\n const trackID = div.getAttribute('id');\n const canvas: any = div.getElementsByTagName('canvas');\n if (canvas && canvas.length > 0) {\n let newCanvas = document.createElement('canvas');\n let ctx = newCanvas.getContext('2d');\n\n let logoImg = new Image();\n logoImg.src = mussel_logo;\n logoImg.onload = function () {\n if (ctx && newCanvas) {\n const logoWidth = logoImg.width * (35 / logoImg.height);\n\n newCanvas.width = Math.max(canvas[0].width, logoWidth);\n newCanvas.height = canvas[0].height + 35 + 20 + 10;\n\n ctx.drawImage(canvas[0], 0, 0);\n\n const logoX = (newCanvas.width - logoWidth) / 2;\n ctx.drawImage(logoImg, logoX, canvas[0].height + 20, logoWidth, 35);\n\n const pngUrl = newCanvas\n .toDataURL('image/png')\n .replace('image/png', 'image/octet-stream');\n let downloadLink = document.createElement('a');\n downloadLink.href = pngUrl;\n downloadLink.download = `track-code-${trackID}.png`;\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n }\n };\n }\n }\n };\n const printClick = () => {\n const frames = document.getElementsByTagName('iframe');\n for (let f of frames) f.remove();\n\n const codes = document.getElementsByClassName('qr-code-div');\n if (!codes || codes.length <= 0) return;\n\n const frame = document.createElement('iframe');\n frame.onload = setPrint;\n frame.style.visibility = 'hidden';\n frame.style.position = 'absolute';\n frame.style.right = '0';\n frame.style.bottom = '0';\n frame.style.width = '100%';\n frame.style.height = '100%';\n frame.srcdoc =\n '
';\n for (let div of codes) {\n const canvas: any = div.getElementsByTagName('canvas');\n if (canvas && canvas.length > 0) {\n const pngUrl = canvas[0].toDataURL('image/png');\n frame.srcdoc += `
`;\n }\n }\n frame.srcdoc += '
';\n document.body.appendChild(frame);\n };\n const csvClick = () => {\n if (!qrVal || qrVal.length <= 0) return;\n const content = qrVal.map(x => x.track_id).join('\\n');\n let downloadLink = document.createElement('a');\n const file = new Blob([content], { type: 'text/csv' });\n downloadLink.href = URL.createObjectURL(file);\n downloadLink.download = `qr-codes.csv`;\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n };\n\n return (\n
\n
\n
\n
\n \n QR Code Generate\n \n
\n
\n
\n
\n
\n
\n setCnt(e.target.value)}\n />\n
\n
\n \n Generate New\n \n
\n
\n {loading ? (\n \n ) : (\n !!qrVal &&\n qrVal.length > 0 && (\n <>\n \n {qrVal.map(x => (\n \n ))}\n
\n
\n
\n \n Print\n \n
\n
\n \n Download Image\n \n
\n
\n \n Download CSV\n \n
\n
\n \n )\n )}\n
\n \n );\n};\n\nexport default QRGeneratePage;\n","import { useEffect, useState } from 'react';\nimport {\n AbacusIcon,\n BgIcon,\n Button,\n Spinner,\n Title,\n} from '../../components/shared';\nimport { Link } from 'react-router-dom';\nimport { Table } from 'antd';\nimport { sendSingleRequest } from '../../apis';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport {\n checkRolePermission,\n formatNumber,\n} from '../../entities/util-functions';\nimport { BagStatus, TrackStatus } from '../../entities/general.entities';\nimport { ITrackCode } from '../../entities/task.entities';\nimport HarvestTrackModal from '../../components/track-modals/HarvestTrackModal';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport './styles.scss';\n\ninterface ISpecie {\n name: string;\n weight: number;\n}\n\ninterface IData {\n day: string;\n processed: number;\n mussels: number;\n wasted: number;\n unprocessed: number;\n trackIDs: string[];\n}\n\nconst columns = (lang: TLang | undefined, type: string) => [\n {\n key: 'date',\n title: translate(lang, 'Date'),\n render: (x: IData) => {x.day},\n },\n {\n key: 'processed',\n title: translate(lang, 'Processed bags'),\n render: (x: IData) => {x.processed},\n },\n {\n key: 'mussels',\n title: translate(lang, 'Mussels produced'),\n render: (x: IData) => (\n {`${formatNumber(x.mussels)} ${\n type === 'MUSSEL' ? 'kg' : type === 'OYSTER' ? 'dz' : 'kg/dz'\n }`}\n ),\n },\n {\n key: 'wasted',\n title: translate(lang, 'Waste produced'),\n render: (x: IData) => (\n {`${formatNumber(x.wasted)} ${\n type === 'MUSSEL' ? 'kg' : type === 'OYSTER' ? 'dz' : 'kg/dz'\n }`}\n ),\n },\n {\n key: 'remaining',\n title: translate(lang, 'Remaining bags'),\n render: (x: IData) => {x.unprocessed},\n },\n { key: 'right', title: '', render: () => null },\n];\n\nconst SummaryProcessPage = () => {\n const dispatch = useDispatch();\n const profile = useSelector(selectProfile);\n const lang = useSelector(selectLang);\n const farms = useSelector(selectFarmsData);\n const type = farms.every(x => x.type === 'MUSSEL')\n ? 'MUSSEL'\n : farms.every(x => x.type === 'OYSTER')\n ? 'OYSTER'\n : 'MIXED';\n\n const [data, setData] = useState([]);\n const [loading, setLoading] = useState(false);\n const [pageOptions, setPageOptions] = useState({\n current: 1,\n pageSize: 10,\n total: data.length ?? 0,\n });\n const [curBag, setCurBag] = useState({\n storage: 0,\n processing: 0,\n processed: 0,\n });\n const [speed, setSpeed] = useState({ bags: '', mussels: '', wasted: '' });\n const [trackIDs, setTrackIDs] = useState();\n\n useEffect(() => {\n (async () => {\n setLoading(true);\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/task/track-codes',\n true,\n );\n if (!response.status) {\n dispatch(\n showFeedback({\n type: 'error',\n message: translate(lang, response.data?.message ?? 'Server error'),\n isMessage: true,\n }),\n );\n setLoading(false);\n return;\n }\n let codes: ITrackCode[] = response.data;\n codes = codes.filter(x => x.statuses.length > 0);\n codes.sort((a, b) => {\n const aTime = a.statuses[0].tracked_time;\n const bTime = b.statuses[0].tracked_time;\n return aTime > bTime ? -1 : aTime < bTime ? 1 : 0;\n });\n let inStoreCnt = 0,\n processingCnt = 0,\n todayProcessedCnt = 0;\n let dates: string[] = [];\n for (let code of codes) {\n if (\n code.statuses.some(\n x => x.status === TrackStatus.LOADED_TO_COLD_STORAGE,\n ) &&\n code.statuses.every(\n x =>\n x.status !== TrackStatus.STARTED_PROCESSING &&\n x.status !== TrackStatus.FINISHED_PROCESSING &&\n x.status !== TrackStatus.SEEDED,\n )\n ) {\n inStoreCnt++;\n }\n if (\n code.statuses.some(x => x.status === TrackStatus.STARTED_PROCESSING)\n ) {\n if (\n code.statuses.every(\n x => x.status !== TrackStatus.FINISHED_PROCESSING,\n )\n ) {\n processingCnt++;\n }\n }\n for (let x of code.statuses) {\n const d = defaultDateFormat(x.tracked_time);\n if (d && !dates.includes(d)) {\n dates.push(d);\n }\n }\n }\n dates.sort((a, b) =>\n `${b.substring(6)}${b.substring(3, 5)}${b.substring(\n 0,\n 2,\n )}`.localeCompare(\n `${a.substring(6)}${a.substring(3, 5)}${a.substring(0, 2)}`,\n ),\n );\n let totBags = 0,\n totMussels = 0,\n totWasted = 0;\n let todayStr = defaultDateFormat(Date.now());\n let result: IData[] = [];\n for (let d of dates) {\n let processed = 0,\n mussels = 0,\n wasted = 0,\n unprocessed = 0;\n let tracks: string[] = [];\n for (let code of codes) {\n if (\n code.statuses.every(x => defaultDateFormat(x.tracked_time) !== d)\n ) {\n continue;\n }\n if (\n code.statuses.some(\n x => x.status === TrackStatus.FINISHED_PROCESSING,\n )\n ) {\n processed++;\n if (d === todayStr) {\n todayProcessedCnt++;\n }\n } else {\n unprocessed++;\n }\n if (code.qr_data && code.qr_data.bag_details) {\n const tmp: ISpecie[] = code.qr_data.bag_details;\n mussels += tmp\n .filter(x => x.name === BagStatus.HARVESTED_MUSSELS)\n .reduce((p, c) => p + c.weight, 0);\n wasted += tmp\n .filter(x => x.name !== BagStatus.HARVESTED_MUSSELS)\n .reduce((p, c) => p + c.weight, 0);\n }\n tracks.push(code.track_id);\n }\n result.push({\n day: d,\n processed,\n mussels,\n wasted,\n unprocessed,\n trackIDs: tracks,\n });\n totBags += processed;\n totMussels += mussels;\n totWasted += wasted;\n }\n if (result.length <= 0) {\n setSpeed({\n bags: '-',\n mussels: '-',\n wasted: '-',\n });\n } else {\n setSpeed({\n bags: formatNumber(totBags / result.length),\n mussels: formatNumber(totMussels / result.length),\n wasted: formatNumber(totWasted / result.length),\n });\n }\n setCurBag({\n storage: inStoreCnt,\n processing: processingCnt,\n processed: todayProcessedCnt,\n });\n setData(result);\n setLoading(false);\n })();\n }, []);\n\n return (\n
\n
\n
\n \n {translate(lang, 'Processing Stats')}\n \n {checkRolePermission(\n { deniedRoles: ['processing_plant'] },\n profile?.role,\n ) && (\n \n \n \n )}\n
\n {!loading ? (\n
\n
\n
\n } />\n \n {translate(lang, 'Currently in processing plant')}\n \n
\n
\n
\n {`${translate(lang, 'Bags in cold storage')}: ${\n curBag.storage\n }`}\n
\n
\n {`${translate(lang, 'Bags currently processing')}: ${\n curBag.processing\n }`}\n
\n
\n {`${translate(lang, 'Bags processed today')}: ${\n curBag.processed\n }`}\n
\n
\n
\n
\n
\n } />\n \n {translate(lang, 'Processing speed')}\n \n
\n
\n
\n {`${translate(lang, 'Avg. Bags per day')}: ${speed.bags}`}\n
\n
\n {`${translate(\n lang,\n `Avg. ${\n type === 'MUSSEL'\n ? 'Mussels'\n : type === 'OYSTER'\n ? 'Oysters'\n : 'Crops'\n } per day`,\n )}: ${speed.mussels}`}\n
\n
\n {`${translate(lang, 'Avg. Waste per day')}: ${speed.wasted}`}\n
\n
\n
\n
\n ) : (\n
\n \n
\n )}\n
\n
\n
\n
\n setPageOptions(o)}\n columns={columns(lang, type)}\n dataSource={data}\n onRow={d => ({ onClick: () => setTrackIDs(d.trackIDs) })}\n />\n
\n
\n
\n
\n {!!trackIDs && (\n setTrackIDs(undefined)}\n />\n )}\n
\n );\n};\n\nexport default SummaryProcessPage;\n","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport moment from 'moment';\nimport { useState, useCallback, useMemo, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport {\n Button,\n CloseIcon,\n Dropdown,\n Input,\n Spinner,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport { defaultBagMusselTypes } from '../../entities/inventory.entities';\nimport { RootState } from '../../store/rootReducer';\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { faSquareCheck, faSquare } from '@fortawesome/free-regular-svg-icons';\nimport { useLocation } from 'react-router-dom';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { Modal } from 'antd';\nimport { TrackStatus } from '../../entities/general.entities';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { ITrackCode } from '../../entities/task.entities';\nimport { selectUtils } from '../../store/utils/utils.selector';\nimport { toMillisecond, toSecond } from '../../util/toggleSecondMillisecond';\nimport './styles.scss';\n\nlibrary.add(faSquareCheck, faSquare);\n\ninterface BagProcessProps {\n visible: boolean;\n onCancel: () => void;\n onConfirm: () => void;\n trackCode: ITrackCode;\n}\n\nconst BagProcessModal = ({\n visible,\n onCancel,\n onConfirm,\n trackCode,\n}: BagProcessProps) => {\n const bagNames = useSelector(selectUtils)\n .filter(x => x.type === 'process_bag')\n .map(x => x.name);\n const bagMussels = [...defaultBagMusselTypes, ...bagNames];\n\n const [mussels, setMussels] = useState(\n bagMussels.map(x => ({ name: x, weight: '' })),\n );\n const [disabled, setDisabled] = useState(false);\n\n const handleChangeInput = (i: number, v: string) => {\n let tmp = [...mussels];\n if (tmp.length <= i) return;\n tmp[i].weight = v;\n setMussels(tmp);\n };\n const confirmClick = async () => {\n const data = {\n track_id: trackCode.track_id,\n parent_code: trackCode.parent_code,\n data: mussels.map(x => ({ name: x.name, weight: Number(x.weight) })),\n };\n setDisabled(true);\n const response = await sendSingleRequest(\n data,\n 'POST',\n 'api/task/track-harvest',\n true,\n );\n setDisabled(false);\n if (response.status) {\n onConfirm();\n } else {\n window.alert(response.data?.message ?? 'Failed');\n }\n };\n\n return (\n }\n >\n
\n
\n \n Bag Processed\n \n
\n
\n {mussels.map((x, i) => (\n
\n handleChangeInput(i, e.target.value)}\n unit='kg'\n />\n
\n ))}\n
\n
\n \n Close\n \n \n Confirm\n \n
\n
\n \n );\n};\n\ninterface IWeight {\n name: string;\n weight: number;\n}\n\nconst statusLabel = (x: string) =>\n x === TrackStatus.MIDDLE_HARVESTED ? TrackStatus.HARVESTED : x;\n\ninterface BagSumProps {\n data: IWeight[];\n}\n\nconst BagSumView = ({ data }: BagSumProps) => (\n
\n
Processed Details
\n {data?.map((x, j) => (\n
\n {x.name}\n {`${x.weight} kg`}\n
\n ))}\n
\n);\n\ninterface StatusBtnProps {\n status: string;\n trackCode: ITrackCode;\n updateClick: (s: string) => void;\n removeClick: (s: string) => void;\n disabled: boolean;\n upstate?: string;\n}\n\nconst StatusButton = ({\n status,\n trackCode,\n updateClick,\n removeClick,\n disabled,\n upstate,\n}: StatusBtnProps) => {\n const profile = useSelector(selectProfile);\n\n return (\n
\n {trackCode.statuses.length > 0 ? (\n
\n
{statusLabel(status)}
\n \n
\n ) : (\n updateClick(status)}\n >\n
{statusLabel(status)}
\n \n
\n )}\n {trackCode.statuses.map((t, j) => (\n
\n {`${moment(toMillisecond(t.tracked_time)).format(\n 'lll',\n )} performed by ${t.user?.name}`}\n
\n ))}\n {trackCode.statuses.some(t => t.user?.id === profile?.id) && (\n removeClick(status)}\n >\n \n Cancel\n \n \n )}\n \n );\n};\n\ninterface ResViewProps {\n trackCode: ITrackCode;\n onRefresh: () => void;\n}\n\nconst ResultView = ({ trackCode, onRefresh }: ResViewProps) => {\n const dispatch = useDispatch();\n const profile = useSelector((state: RootState) => state.auth.profile);\n\n const [upstate, setUpstate] = useState();\n const [disabled, setDisabled] = useState(false);\n const [visModal, setVisModal] = useState();\n\n const updateClick = async (status: string) => {\n if (!profile || disabled) return;\n setUpstate(status);\n setDisabled(true);\n const data = {\n track_id: trackCode.track_id,\n status,\n tracked_time: toSecond(Date.now()),\n parent_code: trackCode.parent_code,\n };\n const response = await sendSingleRequest(\n data,\n 'POST',\n 'api/task/track-status',\n true,\n );\n setDisabled(false);\n setUpstate(undefined);\n if (response.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Updated successfully',\n }),\n );\n onRefresh();\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Unknown error',\n }),\n );\n }\n };\n const removeClick = async (status: string) => {\n if (!profile || disabled) return;\n const trk = trackCode.statuses.find(\n x => x.status === status && x.user?.id === profile.id,\n );\n if (!trk) return;\n\n setDisabled(true);\n const response = await sendSingleRequest(\n { track_id: trackCode.track_id, status },\n 'DELETE',\n 'api/task/track-status',\n true,\n );\n if (response.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: 'Removed successfully',\n }),\n );\n onRefresh();\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message,\n }),\n );\n }\n setDisabled(false);\n };\n const openModal = () => {\n if (!profile || disabled) return;\n\n setVisModal(true);\n };\n\n const { splitCount, processedSum } = useMemo(() => {\n if (!trackCode) {\n return { splitCount: 0, processedSum: null };\n } else {\n const processedSum: IWeight[] = trackCode.qr_data?.bag_details ?? [];\n return { splitCount: trackCode.children_count, processedSum };\n }\n }, [trackCode]);\n\n const canProcess =\n (!trackCode.qr_data ||\n !trackCode.qr_data.bag_details ||\n trackCode.qr_data.bag_details.length <= 0) &&\n trackCode.statuses.some(x => x.status === TrackStatus.STARTED_PROCESSING);\n\n return (\n
\n
\n
\n {trackCode.statuses.map(x =>\n x.status === TrackStatus.OFFLOADED_FROM_BOAT ? (\n
\n \n {splitCount > 0 && (\n
{`You have ${splitCount} split smaller bags`}
\n )}\n
\n ) : (\n \n ),\n )}\n
\n
\n {trackCode.qr_data &&\n trackCode.qr_data.bag_details &&\n trackCode.qr_data.bag_details.length > 0 ? (\n \n ) : !!processedSum && processedSum.length > 0 ? (\n \n ) : (\n <>\n )}\n
\n
\n {canProcess && (\n
\n Enter Bag Processed\n
\n )}\n
\n
\n {!!visModal && (\n setVisModal(undefined)}\n onConfirm={() => {\n setVisModal(undefined);\n onRefresh();\n }}\n trackCode={trackCode}\n />\n )}\n
\n );\n};\n\nconst CvtNum = (x: string | null) => (x ? Number(x) : undefined);\n\nconst QRScanPage = () => {\n const query = new URLSearchParams(useLocation().search);\n const farmsData = useSelector(selectFarmsData);\n\n const trackID = query.get('track_id');\n const [farmId, setFarmId] = useState(CvtNum(query.get('farm_id')));\n const [lineId, setLineId] = useState(CvtNum(query.get('line_id')));\n const [seedingId, setSeedingId] = useState(\n farmsData.find(x => x.id === farmId)?.lines.find(y => y.id === lineId)\n ?.growing_cycle?.main_seed.id,\n );\n const [loading, setLoading] = useState(false);\n const [trackCode, setTrackCode] = useState();\n\n const currentFarm = farmsData.find(x => x.id === farmId);\n\n const updateFarm = (val: string) => {\n setFarmId(Number(val));\n setLineId(undefined);\n setSeedingId(undefined);\n };\n const updateLine = (val: string) => {\n if (!currentFarm) return;\n const l = currentFarm.lines.find(x => x.id === Number(val));\n if (!l?.growing_cycle) return;\n setLineId(l.id);\n setSeedingId(l.growing_cycle.main_seed.id);\n };\n\n const loadData = useCallback(async () => {\n if (!trackID) return;\n setLoading(true);\n const response = await sendSingleRequest(\n { track_id: trackID },\n 'GET',\n 'api/task/track-codes',\n true,\n );\n setLoading(false);\n if (response.status && response.data.length > 0) {\n setTrackCode(response.data[0]);\n } else {\n showFeedback({\n isMessage: true,\n type: 'error',\n message: response.data?.message ?? 'Track information not found',\n });\n }\n }, [trackID]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return (\n
\n
\n
\n
\n \n QR Code Scan\n \n
\n
\n
\n
\n {!trackID ? (\n
Empty track code is not allowed
\n ) : loading ? (\n
\n \n
\n ) : !seedingId ? (\n
\n
\n \n This code has not been attached to harvest yet. Under harvest\n option, scan bag there to connect code to the line.\n \n
\n
\n \n Where are you going to attach?\n \n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }))}\n onChange={updateFarm}\n />\n
\n {!!farmId && (\n
\n x.id === farmId)\n ?.lines.filter(y => !!y.growing_cycle)\n .map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n })) ?? []\n }\n onChange={updateLine}\n />\n
\n )}\n
\n ) : !!trackCode && !!lineId ? (\n \n ) : (\n <>\n )}\n
\n
\n );\n};\n\nexport default QRScanPage;\n","import { Table } from 'antd';\nimport { useEffect, useMemo, useState } from 'react';\nimport ReactExport from 'react-data-export';\nimport { useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport {\n Button,\n Caret,\n Spinner,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport { formatNumber, numberToMoneyStr } from '../../entities/util-functions';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport './styles.scss';\n\nconst ExcelFile = ReactExport.ExcelFile;\nconst ExcelSheet = (ExcelFile as any).ExcelSheet;\n\nconst loadData = async (params: any) =>\n await sendSingleRequest(\n params,\n 'POST',\n 'api/overview/lines-performance',\n true,\n );\n\ninterface IBasicPerDetail {\n seed_date: number;\n seed_cost: number;\n maintenance_cost: number;\n harvest_date: number;\n harvest_amount: number;\n process_details: Array<{ name: string; weight: number }>;\n harvest_income: number;\n harvest_cost: number;\n harvest_levy: number;\n total_fee: number;\n density: number;\n}\n\ninterface IMusselPerDetail extends IBasicPerDetail {\n seed_length: number;\n harvest_bags: number;\n submersion: number;\n budget_amount: number;\n budget_price: number;\n density_max: number | null;\n spacing: number;\n}\n\ninterface IOysterPerDetail extends IBasicPerDetail {\n basket_count: number;\n spacing: number | null;\n}\n\ninterface IBasicData {\n farm: {\n id: number;\n name: string;\n farm_number: string;\n };\n line: {\n id: number;\n line_name: string;\n length: number;\n };\n}\n\ninterface IMusselData extends IBasicData {\n current: IMusselPerDetail;\n previous?: IMusselPerDetail;\n}\n\ninterface IOysterData extends IBasicData {\n current: IOysterPerDetail;\n previous?: IOysterPerDetail;\n}\n\nconst calcRevenue = (\n o: IMusselPerDetail | IOysterPerDetail,\n type: 'c' | 'r' | 'm' | 'h',\n) => {\n const length = (o as any).seed_length ?? (o as any).basket_count;\n if (type === 'c') {\n return (\n o.seed_cost +\n o.harvest_cost +\n o.maintenance_cost +\n o.harvest_levy +\n o.total_fee\n );\n } else if (type === 'r') {\n return (\n o.harvest_income -\n o.seed_cost -\n o.harvest_cost -\n o.maintenance_cost -\n o.harvest_levy -\n o.total_fee\n );\n } else if (type === 'm') {\n return (\n (o.harvest_income -\n o.seed_cost -\n o.harvest_cost -\n o.maintenance_cost -\n o.harvest_levy -\n o.total_fee) /\n length\n );\n } else {\n return o.process_details.length > 0\n ? o.process_details.reduce((p, c) => p + c.weight, 0) / length\n : o.harvest_amount / length;\n }\n};\n\nconst cellDiv = (x: string) => {\n if (!x.startsWith('$ ')) return x;\n const v = Number(x.substring(2).replace(',', ''));\n return v < 0 ?
{x}
: x;\n};\n\nconst BudgetCell = (o: IMusselPerDetail, unit: 'kg' | '$') => {\n const actual =\n (unit === 'kg' ? o.harvest_amount : o.harvest_income) / o.seed_length;\n const budget =\n (unit === 'kg' ? o.budget_amount : o.budget_price) / o.seed_length;\n return (\n
actual ? 'red' : 'green' }}>\n {unit === '$' ? `$ ${numberToMoneyStr(budget)}` : formatNumber(budget)}\n
\n );\n};\n\nconst SeasonArrow: React.FC<{\n line: IMusselData | IOysterData;\n lineSeason: number[];\n setLineSeason: (d: any) => void;\n setLoading: (d: number) => void;\n onChangeLineData: (d: IMusselData | IOysterData) => void;\n}> = ({ line, lineSeason, setLineSeason, setLoading, onChangeLineData }) => {\n const onPrevClick = async () => {\n if (!line.previous) return;\n setLoading(2);\n const res = await loadData({\n line_id: line.line.id,\n max_date: line.previous.seed_date,\n });\n setLoading(0);\n if (res.status) {\n setLineSeason([...lineSeason, line.current.seed_date]);\n onChangeLineData(res.data);\n }\n };\n const onNextClick = async () => {\n if (lineSeason.length <= 0) return;\n setLoading(2);\n const res = await loadData({\n line_id: line.line.id,\n max_date: lineSeason[lineSeason.length - 1],\n });\n setLoading(0);\n if (res.status) {\n setLineSeason(lineSeason.slice(0, -1));\n onChangeLineData(res.data);\n }\n };\n\n return (\n
\n \n \n
\n
\n {lineSeason.length <= 0\n ? 'Current'\n : lineSeason.length === 1\n ? 'Previous'\n : `${lineSeason.length} seasons ago`}\n
\n \n \n \n \n );\n};\n\nconst SeasonsNavigator: React.FC<{\n data: Array;\n setData: (d: any) => void;\n setLoading: (d: number) => void;\n lineSeasons: any;\n setLineSeasons: (d: any) => void;\n}> = ({ data, setData, setLoading, lineSeasons, setLineSeasons }) => {\n const prevAble = data.some(x => !!x.previous);\n const nextAble =\n lineSeasons &&\n Object.values(lineSeasons).some((x: any) => x && x.length > 0);\n const label = useMemo(() => {\n if (!lineSeasons) return 'Current';\n const len = Object.values(lineSeasons).reduce(\n (p: number, c: any) => (c.length > p ? c.length : p),\n 0,\n );\n return len <= 0 ? 'Current' : len === 1 ? 'Previous' : `${len} seasons ago`;\n }, [lineSeasons]);\n\n const prevClick = async () => {\n setLoading(2);\n const params = data\n .filter(x => !!x.previous)\n .map(x => ({ line_id: x.line.id, max_date: x.previous?.seed_date }));\n const res = await loadData({ lines: params });\n setLoading(0);\n if (res.status) {\n let newSeasons = lineSeasons ? { ...lineSeasons } : [];\n let newData = [...data];\n for (let d of res.data) {\n const i = data.findIndex(t => t.line.id === d.line.id);\n if (i < 0) continue;\n newData[i] = d;\n if (!newSeasons[d.line.id]) newSeasons[d.line.id] = [];\n newSeasons[d.line.id].push(data[i].current.seed_date);\n }\n setLineSeasons(newSeasons);\n setData(newData);\n }\n };\n const nextClick = async () => {\n let params = [];\n for (let l in lineSeasons) {\n if (lineSeasons[l].length > 0)\n params.push({\n line_id: l,\n max_date: lineSeasons[l][lineSeasons[l].length - 1],\n });\n }\n setLoading(2);\n const res = await loadData({ lines: params });\n if (res.status) {\n let newSeasons = { ...lineSeasons };\n let newData = [...data];\n for (let d of res.data) {\n const i = data.findIndex(t => t.line.id === d.line.id);\n if (i < 0) continue;\n newData[i] = d;\n newSeasons[d.line.id] = newSeasons[d.line.id].slice(0, -1);\n }\n setLineSeasons(newSeasons);\n setData(newData);\n }\n setLoading(0);\n };\n\n return (\n
\n \n \n \n
\n \n {label}\n \n
\n \n \n \n
\n );\n};\n\nconst SummaryPerformancePage = () => {\n const profile = useSelector(selectProfile);\n const showBudget = !!profile?.account?.show_budget_menu;\n const isGrower = profile?.account_type === 'grower';\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n\n const [loading, setLoading] = useState(0);\n const [musselData, setMusselData] = useState([]);\n const [oysterData, setOysterData] = useState([]);\n const [lineSeasons, setLineSeasons] = useState();\n const [busType, setBusType] = useState(\n farmsData.every(x => x.type === 'OYSTER') ? 'OYSTER' : 'MUSSEL',\n );\n\n const { excel, table } = useMemo(() => {\n let bags: string[] = [];\n const data = busType === 'MUSSEL' ? musselData : oysterData;\n for (let d of data) {\n for (let c of d.current.process_details)\n if (!bags.includes(c.name)) bags.push(c.name);\n if (d.previous)\n for (let p of d.previous.process_details)\n if (!bags.includes(p.name)) bags.push(p.name);\n }\n const columns = [\n { title: 'Farm', width: { wch: 39 }, style: { font: { bold: false } } },\n ...data.map(x => ({\n title: x.farm.farm_number,\n style: { font: { bold: false } },\n })),\n ];\n let grid: any[] = [\n [{ value: 'Line' }, ...data.map(x => ({ value: x.line.line_name }))],\n [\n { value: '' },\n ...data.map(x => ({\n button: (\n \n setLineSeasons(\n lineSeasons\n ? { ...lineSeasons, [x.line.id]: d }\n : { [x.line.id]: d },\n )\n }\n setLoading={setLoading}\n onChangeLineData={d => {\n const dd: any = data.map(x =>\n x.line.id === d.line.id ? d : x,\n );\n if (busType === 'MUSSEL') {\n setMusselData(dd);\n } else {\n setOysterData(dd);\n }\n }}\n />\n ),\n })),\n ],\n [{ value: 'Seeding', style: { font: { bold: true } } }],\n [\n { value: 'Date Seeded' },\n ...data.map(x => ({ value: defaultDateFormat(x.current.seed_date) })),\n ],\n ];\n if (busType === 'MUSSEL') {\n grid.push([\n { value: 'Metres Seeded', is_length: true },\n ...musselData.map(x => ({\n value: formatNumber(x.current.seed_length),\n })),\n ]);\n } else {\n grid.push([\n { value: 'Seeded baskets', is_length: true },\n ...oysterData.map(x => ({\n value: formatNumber(x.current.basket_count),\n })),\n ]);\n }\n if (showBudget) {\n grid.push(\n [\n { value: 'Seeding Costs', is_cost: true },\n ...data.map(x => ({\n value: `$ ${numberToMoneyStr(x.current.seed_cost)}`,\n })),\n ],\n [\n { value: 'Maintenance Costs', is_cost: true },\n ...data.map(x => ({\n value: `$ ${numberToMoneyStr(x.current.maintenance_cost)}`,\n })),\n ],\n [\n { value: 'Total costs of seeding', is_cost: true },\n ...data.map(x => ({\n value: `$ ${numberToMoneyStr(\n x.current.seed_cost + x.current.maintenance_cost,\n )}`,\n })),\n ],\n );\n }\n grid.push(\n [{ value: '' }],\n [{ value: 'Harvest', style: { font: { bold: true } } }],\n [\n { value: 'Harvest date' },\n ...data.map(x => ({\n value: defaultDateFormat(x.current.harvest_date) ?? '',\n })),\n ],\n );\n if (busType === 'MUSSEL') {\n grid.push(\n [\n { value: 'Bags harvested', is_length: true },\n ...musselData.map(x => ({\n value: formatNumber(x.current.harvest_bags),\n })),\n ],\n [\n { value: 'Harvest kgs', is_length: true },\n ...musselData.map(x => ({\n value: formatNumber(x.current.harvest_amount),\n })),\n ],\n );\n } else {\n grid.push([\n { value: 'Harvest dozens', is_length: true },\n ...oysterData.map(x => ({\n value: formatNumber(x.current.harvest_amount),\n })),\n ]);\n }\n if (!isGrower) {\n grid.push(\n [{ value: '' }],\n [\n {\n value: 'Processing weight',\n style: { font: { bold: true } },\n },\n ],\n ...bags.map(b => [\n { value: b },\n ...data.map(x => ({\n value:\n x.current.process_details.find(p => p.name === b)?.weight ?? '',\n })),\n ]),\n [\n { value: 'Total weight' },\n ...data.map(x => ({\n value: formatNumber(\n x.current.process_details.reduce((p, c) => p + c.weight, 0),\n ),\n })),\n ],\n );\n }\n if (showBudget) {\n grid.push(\n [{ value: '' }],\n [{ value: 'Harvest cost', style: { font: { bold: true } } }],\n [\n { value: 'Levy', is_cost: true },\n ...data.map(x => ({\n value: `$ ${numberToMoneyStr(\n x.current.total_fee + x.current.harvest_levy,\n )}`,\n })),\n ],\n [\n { value: 'Harvest cost', is_cost: true },\n ...data.map(x => ({\n value: `$ ${numberToMoneyStr(x.current.harvest_cost)}`,\n })),\n ],\n [\n { value: 'Total cost', is_cost: true },\n ...data.map(x => ({\n value: `$ ${numberToMoneyStr(\n x.current.harvest_cost +\n x.current.total_fee +\n x.current.harvest_levy,\n )}`,\n })),\n ],\n [{ value: '' }],\n [{ value: 'Revenue', style: { font: { bold: true } } }],\n [\n { value: 'Cost (seed, maintenance, harvest)', is_cost: true },\n ...data.map(x => ({\n value: `$ ${numberToMoneyStr(calcRevenue(x.current, 'c'))}`,\n })),\n ],\n [\n { value: 'Revenue', is_cost: true },\n ...data.map(x => ({\n value: `$ ${numberToMoneyStr(x.current.harvest_income)}`,\n })),\n ],\n [\n { value: 'Income (revenue - cost)', is_cost: true },\n ...data.map(x => ({\n value: `$ ${numberToMoneyStr(calcRevenue(x.current, 'r'))}`,\n })),\n ],\n );\n if (busType === 'MUSSEL') {\n grid.push([\n { value: 'Income per meter', is_cost: true },\n ...data.map(x => ({\n value: `$ ${numberToMoneyStr(calcRevenue(x.current, 'm'))}`,\n })),\n ]);\n }\n }\n grid.push(\n [{ value: '' }],\n [{ value: 'Performance', style: { font: { bold: true } } }],\n );\n if (busType === 'MUSSEL') {\n grid.push(\n [\n { value: 'Budgeted kg/m' },\n ...musselData.map(x => ({\n value: x.current.budget_amount / x.current.seed_length,\n overCell: BudgetCell(x.current, 'kg'),\n })),\n ],\n [\n { value: 'kgs/m', is_length: true },\n ...data.map(x => ({\n value: formatNumber(calcRevenue(x.current, 'h')),\n })),\n ],\n [\n { value: 'previous kgs/m', is_length: true },\n ...data.map(x => ({\n value: x.previous ? formatNumber(calcRevenue(x.previous, 'h')) : '',\n })),\n ],\n [\n { value: 'density' },\n ...musselData.map(x => ({\n value: !x.current.density_max\n ? x.current.density.toString()\n : `${x.current.density} - ${x.current.density_max}`,\n })),\n ],\n [\n { value: 'previous density' },\n ...musselData.map(x => ({\n value: !x.previous\n ? ''\n : !x.previous.density_max\n ? x.previous.density.toString() ?? ''\n : `${x.previous.density} - ${x.previous.density_max}`,\n })),\n ],\n [\n { value: 'submersion (m)' },\n ...musselData.map(x => ({ value: x.current.submersion })),\n ],\n [\n { value: 'previous submersion' },\n ...musselData.map(x => ({\n value: !x.previous ? '' : x.previous.submersion.toString(),\n })),\n ],\n );\n } else {\n grid.push(\n [\n { value: 'density' },\n ...oysterData.map(x => ({\n value: x.current.density.toString(),\n })),\n ],\n [\n { value: 'previous density' },\n ...oysterData.map(x => ({\n value: !x.previous ? '' : x.previous.density.toString(),\n })),\n ],\n );\n }\n grid.push(\n [\n { value: 'spacing' },\n ...data.map(x => ({ value: x.current.spacing?.toString() })),\n ],\n [\n { value: 'previous spacing' },\n ...data.map(x => ({\n value: !x.previous ? '' : x.previous.spacing?.toString(),\n })),\n ],\n );\n if (showBudget && busType === 'MUSSEL') {\n grid.push(\n [\n { value: 'Budgeted $/m' },\n ...musselData.map(x => ({\n value: x.current.budget_price / x.current.seed_length,\n overCell: BudgetCell(x.current, '$'),\n })),\n ],\n [\n { value: 'Income per meter', is_cost: true },\n ...musselData.map(x => ({\n value: `$ ${numberToMoneyStr(\n x.current.harvest_income / x.current.seed_length,\n )}`,\n })),\n ],\n [\n { value: 'Previous income per meter', is_cost: true },\n ...musselData.map(x => ({\n value: !x.previous\n ? ''\n : `$ ${numberToMoneyStr(\n x.previous.harvest_income / x.previous.seed_length,\n )}`,\n })),\n ],\n );\n }\n const tableColumns: any = [\n {\n title: (\n <>\n
Farm
\n
Line
\n \n ),\n render: (x: any) =>\n x.is_bold ? (\n
{x.label}
\n ) : (\n x.label\n ),\n width: 180,\n key: 'label',\n fixed: 'left',\n },\n ...data.map(x => ({\n title: (\n <>\n
{x.farm.farm_number}
\n
{x.line.line_name}
\n \n ),\n dataIndex: `${x.farm.id}-${x.line.id}`,\n key: `${x.farm.id}-${x.line.id}`,\n width: 170,\n render: (y: any) => (typeof y === 'string' ? cellDiv(y) : y),\n })),\n ];\n if (showBudget) {\n tableColumns.push({\n title: 'Totals',\n width: 170,\n render: (x: any) =>\n x.is_cost ? (\n
\n {`$ ${numberToMoneyStr(x.sum)}`}\n
\n ) : x.is_length ? (\n
\n {formatNumber(x.sum)}\n
\n ) : (\n <>\n ),\n });\n }\n let tableData: any[] = [];\n const keys = data.map(x => `${x.farm.id}-${x.line.id}`);\n for (let i = 1; i < grid.length; i++) {\n let row: any = { key: i, label: grid[i][0].value };\n for (let j = 0; j < keys.length; j++) {\n row[keys[j]] =\n j + 1 < grid[i].length\n ? grid[i][j + 1].overCell ??\n grid[i][j + 1].value ??\n grid[i][j + 1].button\n : '';\n }\n if (grid[i].length === 1 && grid[i][0].value !== '') {\n row.is_bold = true;\n }\n if (grid[i][0]?.is_cost || grid[i][0]?.is_length) {\n let s = 0;\n for (let j = 0; j < keys.length; j++) {\n s += Number(row[keys[j]].replace('$ ', '').replace(',', ''));\n }\n row.sum = s;\n if (grid[i][0]?.is_cost) row.is_cost = true;\n if (grid[i][0]?.is_length) row.is_length = true;\n }\n tableData.push(row);\n }\n return {\n excel: { columns, data: grid },\n table: { columns: tableColumns, data: tableData },\n };\n }, [busType, musselData, oysterData, showBudget]);\n\n useEffect(() => {\n setLoading(1);\n loadData({}).then(res => {\n const mussels = res.data.filter((x: any) => x.farm.type === 'MUSSEL');\n const oysters = res.data.filter((x: any) => x.farm.type === 'OYSTER');\n setMusselData(mussels);\n setOysterData(oysters);\n setLoading(0);\n });\n }, []);\n\n return (\n
\n
\n
\n \n {translate(lang, 'Lines performance')}\n \n {((busType === 'MUSSEL' && musselData.length > 0) ||\n (busType === 'OYSTER' && oysterData.length > 0)) && (\n <>\n {\n const mussels = d.filter(\n (x: any) => x.farm.type === 'MUSSEL',\n );\n const oysters = d.filter(\n (x: any) => x.farm.type === 'OYSTER',\n );\n setMusselData(mussels);\n setOysterData(oysters);\n }}\n setLoading={setLoading}\n lineSeasons={lineSeasons}\n setLineSeasons={setLineSeasons}\n />\n \n {translate(lang, 'Export to excel')}\n \n }\n >\n \n \n \n )}\n
\n {loading > 0 && (\n
\n \n
\n )}\n {loading !== 1 && (\n
\n \n r.label.toLowerCase().startsWith('previous') ? '--bg-gray' : ''\n }\n />\n
\n )}\n
\n
\n );\n};\n\nexport default SummaryPerformancePage;\n","import { Modal, Table } from 'antd';\nimport { useEffect, useState } from 'react';\nimport ReactImageGallery from 'react-image-gallery';\nimport { sendSingleRequest } from '../../apis';\nimport WeatherInfoModal from '../../components/farm-modals/WeatherInfoModal';\nimport { ModalComponent, Spinner, Title } from '../../components/shared';\nimport weather_icon from '../../images/weather-icon.png';\nimport { IWeatherConditionResource } from '../../entities/general.entities';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { TLang } from '../../entities/ui.entities';\nimport { translate } from '../../lib/lang.helper';\n\ninterface ISecurityRow {\n id: number;\n line_id: number;\n line: {\n id: number;\n line_name: string;\n };\n farm: {\n id: number;\n name: string;\n farm_number: string;\n };\n user_id: number;\n user: {\n id: number;\n name: string;\n };\n content_type: string;\n comment: string | null;\n images: string[];\n weather_condition: any | null;\n created_at: number;\n}\n\nconst columns = (lang: TLang | undefined) => [\n {\n key: 'farm',\n title: translate(lang, 'Farm'),\n render: (x: ISecurityRow) => {x.farm.name},\n },\n {\n key: 'line',\n title: translate(lang, 'Line'),\n render: (x: ISecurityRow) => {x.line.line_name},\n },\n {\n key: 'user',\n title: translate(lang, 'Reporter'),\n render: (x: ISecurityRow) => {x.user.name},\n },\n {\n key: 'type',\n title: translate(lang, 'Type'),\n render: (x: ISecurityRow) => {x.content_type},\n },\n];\n\nconst BiosecurityPage = () => {\n const lang = useSelector(selectLang);\n\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState();\n const [comment, setComment] = useState();\n const [images, setImages] = useState();\n const [weather, setWeather] = useState();\n\n useEffect(() => {\n let isIn = true;\n\n setLoading(true);\n sendSingleRequest({}, 'GET', 'api/report/biosecurity', true).then(res => {\n if (isIn) {\n if (res.status) {\n setLoading(false);\n setData(res.data);\n } else {\n alert(res.data?.message ?? 'Failed to load');\n }\n }\n });\n\n return () => {\n isIn = false;\n };\n }, []);\n\n const tableColumns = [\n ...columns(lang),\n {\n key: 'comment',\n title: translate(lang, 'Comment'),\n render: (x: ISecurityRow) => (\n undefined}\n onClick={() => setComment(x.comment ?? 'No comments yet')}\n >\n {translate(lang, 'View')}\n \n ),\n },\n {\n key: 'images',\n title: translate(lang, 'Images'),\n render: (x: ISecurityRow) =>\n x.images.length > 0 ? (\n undefined}\n onClick={() =>\n setImages(x.images.map(t => ({ original: t, thumbnail: t })))\n }\n >\n View\n \n ) : (\n <>\n ),\n },\n {\n key: 'weather',\n title: translate(lang, 'Weather'),\n render: (x: ISecurityRow) =>\n !x.weather_condition ? (\n <>\n ) : (\n setWeather(x.weather_condition)}\n >\n \n {translate(lang, 'View')}\n \n ),\n },\n ];\n\n return (\n
\n
\n
\n \n {translate(lang, 'Biosecurity Reports')}\n \n
\n {loading && (\n
\n \n
\n )}\n
\n \n
\n
\n setComment(undefined)}\n type=''\n title={translate(lang, 'Comment')}\n text={translate(lang, comment ?? '')}\n />\n {images !== undefined && (\n setImages(undefined)}\n onCancel={() => setImages(undefined)}\n width={1000}\n >\n \n \n )}\n {weather !== undefined && (\n setWeather(undefined)}\n />\n )}\n
\n );\n};\n\nexport default BiosecurityPage;\n","import { useEffect, useState, useMemo } from 'react';\nimport { Spinner, Title } from '../../components/shared';\nimport { sendSingleRequest } from '../../apis';\nimport { formatNumber } from '../../entities/util-functions';\nimport { Table } from 'antd';\nimport useMenuHandler from '../../components/shared/tables/useMenuHandler';\nimport { TBusinessType } from '../../entities/general.entities';\nimport './styles.scss';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface IFarmType {\n id: number;\n name: string;\n type: TBusinessType;\n}\n\ninterface ILineName {\n id: number;\n line_name: string;\n}\n\ninterface IBasicItem {\n id: number;\n stage_order: number;\n seed_size: number;\n harvest_size: number;\n grow_months: number;\n grow_speed: number;\n}\n\ninterface IMusselItem extends IBasicItem {\n line_length: number;\n}\n\ninterface IOysterItem extends IBasicItem {}\n\ninterface ISeaweedItem extends IBasicItem {\n tank_area: number;\n}\n\ntype IStageItem = IMusselItem | IOysterItem | ISeaweedItem;\n\ninterface IStageRow {\n farm: IFarmType;\n line: ILineName;\n stages: Array;\n}\n\ninterface IStageLine {\n id: string | number;\n farm: IFarmType;\n line: ILineName;\n stage: IStageItem;\n}\n\ninterface IMusselStage extends IStageLine {\n stage: IMusselItem;\n}\n\ninterface IOysterStage extends IStageLine {\n stage: IOysterItem;\n}\n\ninterface ISeaweedStage extends IStageLine {\n stage: ISeaweedItem;\n}\n\ninterface IStageTable {\n stage_order: number;\n seed_size: number;\n harvest_size: number;\n avg_months: number;\n avg_speed: number;\n lines: IStageLine[];\n}\n\ninterface IMusselTable extends IStageTable {\n line_length: number;\n lines: IMusselStage[];\n}\n\ninterface IOysterTable extends IStageTable {\n lines: IOysterStage[];\n}\n\ninterface ISeaweedTable extends IStageTable {\n tank_area: number;\n lines: ISeaweedStage[];\n}\n\nconst basicColumns = [\n {\n key: 'farm',\n title: 'Farm',\n render: (x: IStageLine) => {x.farm.name},\n },\n {\n key: 'line',\n title: 'Line',\n render: (x: IStageLine) => {x.line.line_name},\n },\n {\n key: 'size',\n title: 'Size',\n render: (x: IStageLine) => (\n {`${formatNumber(x.stage.seed_size)} - ${formatNumber(\n x.stage.harvest_size,\n )} mm`}\n ),\n },\n {\n key: 'grow_months',\n title: 'Months',\n render: (x: IStageLine) => {x.stage.grow_months},\n },\n {\n key: 'speed',\n title: 'Speed',\n render: (x: IStageLine) => (\n {`${formatNumber(x.stage.grow_speed)} mm per month`}\n ),\n },\n];\n\nconst musselColumns = [\n ...basicColumns,\n {\n key: 'line_length',\n title: 'Line Length',\n render: (x: IMusselStage) => (\n {`${formatNumber(x.stage.line_length)} m`}\n ),\n },\n {\n key: 'right',\n title: '',\n },\n];\n\nconst oysterColumns = [...basicColumns, { key: 'right', title: '' }];\n\nconst seaweedColumns = [\n ...basicColumns,\n {\n key: 'tank_area',\n title: 'Tank Area',\n render: (x: ISeaweedStage) => {x.stage.tank_area},\n },\n { key: 'right', title: '' },\n];\n\nconst HarvestStagesPage = () => {\n const { redirectToLine } = useMenuHandler();\n const lang = useSelector(selectLang);\n\n const [data, setData] = useState();\n const [loading, setLoading] = useState(false);\n const [pageOptions, setPageOptions] = useState();\n\n const { musselTable, oysterTable, seaweedTable } = useMemo(() => {\n if (!data)\n return {\n musselTable: null,\n oysterTable: null,\n seaweedTable: null,\n };\n let musselTable: IMusselTable[] = [];\n let oysterTable: IOysterTable[] = [];\n let seaweedTable: ISeaweedTable[] = [];\n const stageCnt = data.reduce(\n (p, c) => Math.max(p, ...c.stages.map(x => x.stage_order)),\n 0,\n );\n for (let i = 1; i <= stageCnt; i++) {\n let musselParam = {\n min_seed: 0,\n max_harvest: 0,\n months_sum: 0,\n speed_sum: 0,\n cnt: 0,\n line_length: 0,\n },\n musselLines: IMusselStage[] = [];\n let oysterParam = {\n min_seed: 0,\n max_harvest: 0,\n months_sum: 0,\n speed_sum: 0,\n cnt: 0,\n },\n oysterLines: IOysterStage[] = [];\n let seaweedParam = {\n min_seed: 0,\n max_harvest: 0,\n months_sum: 0,\n speed_sum: 0,\n cnt: 0,\n tank_area: 0,\n },\n seaweedLines: ISeaweedStage[] = [];\n\n for (let item of data) {\n const x = item.stages.find(y => y.stage_order === i);\n\n if (!!x) {\n if (item.farm.type === 'MUSSEL') {\n musselParam.min_seed =\n musselParam.cnt <= 0\n ? x.seed_size\n : Math.min(x.seed_size, musselParam.min_seed);\n musselParam.max_harvest =\n musselParam.cnt <= 0\n ? x.harvest_size\n : Math.max(x.harvest_size, musselParam.max_harvest);\n musselParam.months_sum += x.grow_months;\n musselParam.speed_sum += x.grow_speed;\n musselParam.line_length += (x as IMusselItem).line_length;\n musselLines.push({\n id: `${i}-${item.line.id}`,\n farm: item.farm,\n line: item.line,\n stage: x as IMusselItem,\n });\n musselParam.cnt++;\n } else if (item.farm.type === 'OYSTER') {\n oysterParam.min_seed =\n oysterParam.cnt <= 0\n ? x.seed_size\n : Math.min(x.seed_size, oysterParam.min_seed);\n oysterParam.max_harvest =\n oysterParam.cnt <= 0\n ? x.harvest_size\n : Math.max(x.harvest_size, oysterParam.max_harvest);\n oysterParam.months_sum += x.grow_months;\n oysterParam.speed_sum += x.grow_speed;\n oysterLines.push({\n id: `${i}-${item.line.id}`,\n farm: item.farm,\n line: item.line,\n stage: x as IOysterItem,\n });\n oysterParam.cnt++;\n } else if (item.farm.type === 'SEAWEED') {\n seaweedParam.min_seed =\n seaweedParam.cnt <= 0\n ? x.seed_size\n : Math.min(x.seed_size, seaweedParam.min_seed);\n seaweedParam.max_harvest =\n seaweedParam.cnt <= 0\n ? x.harvest_size\n : Math.max(x.harvest_size, seaweedParam.max_harvest);\n seaweedParam.months_sum += x.grow_months;\n seaweedParam.speed_sum += x.grow_speed;\n seaweedParam.tank_area += (x as ISeaweedItem).tank_area;\n seaweedLines.push({\n id: `${i}-${item.line.id}`,\n farm: item.farm,\n line: item.line,\n stage: x as ISeaweedItem,\n });\n seaweedParam.cnt++;\n }\n }\n }\n if (musselParam.cnt > 0) {\n musselTable.push({\n stage_order: i,\n seed_size: musselParam.min_seed,\n harvest_size: musselParam.max_harvest,\n avg_months: Math.round(musselParam.months_sum / musselParam.cnt),\n avg_speed: musselParam.speed_sum / musselParam.cnt,\n line_length: musselParam.line_length / musselParam.cnt,\n lines: musselLines,\n });\n }\n if (oysterParam.cnt > 0) {\n oysterTable.push({\n stage_order: i,\n seed_size: oysterParam.min_seed,\n harvest_size: oysterParam.max_harvest,\n avg_months: Math.round(oysterParam.months_sum / oysterParam.cnt),\n avg_speed: oysterParam.speed_sum / oysterParam.cnt,\n lines: oysterLines,\n });\n }\n if (seaweedParam.cnt > 0) {\n seaweedTable.push({\n stage_order: i,\n seed_size: seaweedParam.min_seed,\n harvest_size: seaweedParam.max_harvest,\n avg_months: Math.round(seaweedParam.months_sum / seaweedParam.cnt),\n avg_speed: seaweedParam.speed_sum / seaweedParam.cnt,\n tank_area: seaweedParam.tank_area / seaweedParam.cnt,\n lines: seaweedLines,\n });\n }\n }\n return { musselTable, oysterTable, seaweedTable };\n }, [data]);\n\n const handlePageChange = (p: any, i: number) => {\n let tmp = pageOptions ? [...pageOptions] : [];\n tmp[i] = p;\n setPageOptions(tmp);\n };\n\n useEffect(() => {\n (async () => {\n setLoading(true);\n const res = await sendSingleRequest(\n { with_detail: true },\n 'GET',\n 'api/overview/stages',\n true,\n );\n setLoading(false);\n if (res.status) {\n setData(res.data);\n }\n })();\n }, []);\n\n return (\n
\n
\n
\n \n {translate(lang, 'Harvest Stages')}\n \n
\n {loading && (\n
\n \n
\n )}\n {musselTable && musselTable.length > 0 && (\n
\n \n {translate(lang, 'Mussel Stages')}\n \n {musselTable.map((table, i) => (\n
\n
{`STAGE ${table.stage_order}`}
\n
\n
\n {`SIZE: ${formatNumber(table.seed_size)} - ${formatNumber(\n table.harvest_size,\n )} mm`}\n
\n
\n {`MONTHS: ${table.avg_months} months`}\n
\n
\n {`SPEED: ${formatNumber(table.avg_speed)}mm per month`}\n
\n
\n {`LINE LENGTH: ${formatNumber(table.line_length)} m`}\n
\n
\n
\n ({\n ...x,\n title: translate(lang, x.title),\n }))}\n dataSource={table.lines}\n pagination={\n pageOptions && pageOptions[i]\n ? pageOptions[i]\n : {\n current: 1,\n pageSize: 5,\n total: table.lines.length,\n }\n }\n onChange={e => handlePageChange(e, i)}\n onRow={(h: any) => ({\n onClick: () => redirectToLine(h.farm.id, h.line.id),\n })}\n />\n
\n
\n ))}\n
\n )}\n {oysterTable && oysterTable.length > 0 && (\n
\n \n {translate(lang, 'Oyster Stages')}\n \n {oysterTable.map((table, i) => (\n
\n
{`STAGE ${table.stage_order}`}
\n
\n
\n {`SIZE: ${formatNumber(table.seed_size)} - ${formatNumber(\n table.harvest_size,\n )} mm`}\n
\n
\n {`MONTHS: ${table.avg_months} months`}\n
\n
\n {`SPEED: ${formatNumber(table.avg_speed)}mm per month`}\n
\n
\n
\n ({\n ...x,\n title: translate(lang, x.title),\n }))}\n dataSource={table.lines}\n pagination={\n pageOptions && pageOptions[i]\n ? pageOptions[i]\n : {\n current: 1,\n pageSize: 5,\n total: table.lines.length,\n }\n }\n onChange={e => handlePageChange(e, i)}\n onRow={(h: any) => ({\n onClick: () => redirectToLine(h.farm.id, h.line.id),\n })}\n />\n
\n
\n ))}\n
\n )}\n {seaweedTable && seaweedTable.length > 0 && (\n
\n \n {translate(lang, 'Seaweed Stages')}\n \n {seaweedTable.map((table, i) => (\n
\n
{`STAGE ${table.stage_order}`}
\n
\n
\n {`SIZE: ${formatNumber(table.seed_size)} - ${formatNumber(\n table.harvest_size,\n )} mm`}\n
\n
{`MONTHS: ${table.avg_months} months`}
\n
\n {`SPEED: ${formatNumber(table.avg_speed)}mm per month`}\n
\n
\n {`TANK AREA: ${formatNumber(table.tank_area)} m²`}\n
\n
\n
\n ({\n ...x,\n title: translate(lang, x.title),\n }))}\n dataSource={table.lines}\n pagination={\n pageOptions && pageOptions[i]\n ? pageOptions[i]\n : { current: 1, pageSize: 5, total: table.lines.length }\n }\n onChange={e => handlePageChange(e, i)}\n onRow={(h: any) => ({\n onClick: () => redirectToLine(h.farm.id, h.line.id),\n })}\n />\n
\n
\n ))}\n
\n )}\n
\n
\n );\n};\n\nexport default HarvestStagesPage;\n","import { useState } from 'react';\nimport { Modal } from 'antd';\nimport { ILineGroup } from '../../entities/farms.entities';\nimport {\n Button,\n CloseIcon,\n Dropdown,\n Input,\n Subtitle,\n} from '../../components/shared';\nimport { useDispatch, useSelector } from 'react-redux';\nimport ModalFeedbackView from '../../components/shared/feedback/ModalFeedbackView';\nimport { sendSingleRequest } from '../../apis';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface IFormData {\n farm_id: number | null;\n name: string;\n description?: string | null;\n}\n\ninterface Props {\n visible: boolean;\n onClose: (d?: any) => void;\n lineGroup?: ILineGroup;\n className?: string;\n}\n\nconst LineGroupModal = ({ visible, onClose, lineGroup, className }: Props) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n\n const [formData, setFormData] = useState({\n farm_id: lineGroup?.farm.id ?? null,\n name: lineGroup?.name ?? '',\n description: lineGroup?.description,\n });\n const [disabled, setDisabled] = useState(false);\n\n const updateForm = (key: keyof IFormData, value: any) =>\n setFormData(prv => ({ ...prv, [key]: value }));\n\n const confirmClick = async () => {\n if (!formData.farm_id) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n message: translate(lang, 'Please select a farm'),\n type: 'error',\n }),\n );\n return;\n }\n if (!formData.name) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n message: translate(lang, 'Please input line group name'),\n type: 'error',\n }),\n );\n return;\n }\n setDisabled(true);\n const response = lineGroup\n ? await sendSingleRequest(\n formData,\n 'PUT',\n `api/line-group/${lineGroup.id}`,\n true,\n )\n : await sendSingleRequest(formData, 'POST', 'api/line-group', true);\n setDisabled(false);\n if (response.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(\n lang,\n lineGroup ? 'Updated successfully' : 'Created successfully',\n ),\n type: 'success',\n }),\n );\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, response.data?.message ?? 'Error'),\n type: 'error',\n }),\n );\n }\n onClose();\n };\n\n return (\n }\n >\n
\n
\n \n {translate(\n lang,\n lineGroup ? 'Update Line Group' : 'Add New Line Group',\n )}\n \n
\n
\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n }))}\n onChange={v => updateForm('farm_id', Number(v))}\n />\n
\n
\n updateForm('name', e.target.value)}\n />\n
\n
\n \n updateForm(\n 'description',\n e.target.value.length <= 0 ? null : e.target.value,\n )\n }\n />\n
\n
\n
\n \n {translate(lang, 'Close')}\n \n \n {translate(lang, 'Confirm')}\n \n
\n \n \n );\n};\n\nexport default LineGroupModal;\n","import { Table } from 'antd';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { sendSingleRequest } from '../../apis';\nimport { BreadcrumbComponent, Button } from '../../components/shared';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport getBreadcrumbMenu from '../../util/BreadcrumbMenu';\nimport { useWidth } from '../../util/useWidth';\nimport { ILineGroup } from '../../entities/farms.entities';\nimport LineGroupModal from './LineGroupModal';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst columns = [\n {\n title: 'ID',\n key: 'id',\n render: (x: ILineGroup) => {x.id},\n },\n {\n title: 'Farm Name',\n key: 'farm',\n render: (x: ILineGroup) => {x.farm.name},\n },\n {\n title: 'Group Name',\n key: 'name',\n render: (x: ILineGroup) => {x.name},\n },\n {\n title: 'Description',\n key: 'description',\n render: (x: ILineGroup) => {x.description},\n },\n {\n title: 'Line Count',\n key: 'lines',\n render: (x: ILineGroup) => {x.lines_count},\n },\n];\n\nconst LineGroups = () => {\n const width = useWidth();\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n\n const breadcrumbItems = getBreadcrumbMenu('LINE_GROUPS');\n\n const [groups, setGroups] = useState([]);\n const [addGroup, setAddGroup] = useState(false);\n const [editGroup, setEditGroup] = useState();\n\n const loadData = useCallback(async () => {\n const response = await sendSingleRequest({}, 'GET', 'api/line-group', true);\n if (response.status) {\n setGroups(response.data);\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(\n lang,\n response.data?.message ?? 'Something went wrong',\n ),\n }),\n );\n }\n }, []);\n\n const deleteClick = async (d: ILineGroup) => {\n if (!window.confirm(translate(lang, 'Are you sure to delete this data?')))\n return;\n const response = await sendSingleRequest(\n {},\n 'DELETE',\n `api/line-group/${d.id}`,\n true,\n );\n if (response.status) {\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, 'Deleted successfully'),\n type: 'success',\n }),\n );\n loadData();\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, response.data?.message ?? 'Unknown error'),\n type: 'error',\n }),\n );\n }\n };\n\n const groupColumns = [\n ...columns.map(x => ({ ...x, title: translate(lang, x.title) })),\n {\n title: '',\n key: 'action',\n render: (x: ILineGroup) => (\n <>\n setEditGroup(x)}\n >\n {translate(lang, 'Edit')}\n \n deleteClick(x)}\n >\n {translate(lang, 'Delete')}\n \n \n ),\n },\n ];\n\n useEffect(() => {\n loadData();\n\n return () => {};\n }, [loadData]);\n\n return (\n
\n
\n {width > 768 && (\n
\n \n setAddGroup(true)}\n >\n {translate(lang, 'Add Line Group')}\n \n
\n )}\n
\n
\n
\n \n
\n
\n
\n
\n {(addGroup || editGroup) && (\n {\n setAddGroup(false);\n setEditGroup(undefined);\n loadData();\n }}\n />\n )}\n
\n );\n};\n\nexport default LineGroups;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport { getTaskData } from '../../store/tasks/tasks.actions';\nimport { Button } from '../shared';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { ITaskData, ITaskResource } from '../../entities/task.entities';\nimport SeedingModal from '../farm-modals/SeedingModal';\nimport MaintenanceModal from '../farm-modals/MaintenanceModal';\nimport AssessmentModal from '../farm-modals/AssessmentModal';\nimport HarvestCompleteModal from '../farm-modals/HarvestCompleteModal';\nimport { sendSingleRequest } from '../../apis';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectProfile } from '../../store/auth/auth.selector';\n\ninterface Props {\n task: ITaskResource | ITaskData;\n}\n\nconst TaskTypeButton = ({ task }: Props) => {\n const dispatch = useDispatch();\n const farmsData = useSelector(selectFarmsData);\n const profile = useSelector(selectProfile);\n const isEditable = profile?.edit_permission;\n\n const farm = farmsData.find(f => f.id === task.farm_id);\n const line = farm?.lines.find(l => l.id === task.line_id);\n const [visible, setVisible] = useState(false);\n const [disabled, setDisabled] = useState(task.is_completed);\n const [label, setLabel] = useState('General');\n\n const clickButton = (\n evt: React.MouseEvent,\n ) => {\n evt?.preventDefault();\n evt.stopPropagation();\n setVisible(true);\n };\n const archiveTask = async () => {\n const r = await sendSingleRequest(\n { is_completed: true },\n 'PUT',\n `api/task/tasks/${task.id}`,\n true,\n );\n if (r.status) {\n await dispatch(getTaskData());\n }\n };\n const afterConfirm = async (data: any) => {\n const cpt = async () => {\n setVisible(false);\n await archiveTask();\n await dispatch(loadFarmsData());\n };\n if (task.type === 'ASSESSMENT') {\n if (line?.growing_cycle) {\n await cpt();\n }\n } else if (task.type === 'SEEDING') {\n if (line?.id) {\n await cpt();\n }\n } else if (task.type === 'HARVEST') {\n await cpt();\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: `${label} successfully done!`,\n }),\n );\n await cpt();\n }\n };\n\n useEffect(() => {\n if (task.type === 'ASSESSMENT') {\n if (isEditable && line && line.growing_cycle) {\n setDisabled(false);\n } else {\n setDisabled(true);\n }\n setLabel('Add assessment');\n } else if (task.type === 'HARVEST') {\n if (isEditable && line && line.growing_cycle) {\n setDisabled(false);\n } else {\n setDisabled(true);\n }\n setLabel('Harvest complete');\n } else if (task.type === 'MAINTENANCE') {\n if (isEditable && line && line.growing_cycle) {\n setDisabled(false);\n } else {\n setDisabled(true);\n }\n setLabel('Add maintenance');\n } else if (task.type === 'SEEDING') {\n if (isEditable && line && !line.growing_cycle) {\n setDisabled(false);\n } else {\n setDisabled(true);\n }\n setLabel('Seed the line');\n } else if (task.type === 'INVENTORY_SEED') {\n setDisabled(true);\n setLabel('Floating');\n } else {\n setDisabled(true);\n setLabel(task.type ?? 'General');\n }\n }, [line, task]);\n\n return (\n <>\n \n {label}\n \n {!!farm && (\n <>\n {visible && task.type === 'ASSESSMENT' && line?.growing_cycle && (\n setVisible(false)}\n onConfirm={afterConfirm}\n lineData={line}\n />\n )}\n {visible && task.type === 'HARVEST' && !!line && (\n setVisible(false)}\n onConfirm={afterConfirm}\n lineData={line}\n />\n )}\n {!!visible && task.type === 'SEEDING' && !!line && (\n setVisible(false)}\n />\n )}\n \n )}\n {!!visible && task.type === 'MAINTENANCE' && line?.growing_cycle && (\n setVisible(false)}\n onConfirm={afterConfirm}\n confirmBtnLabel='Confirm & Complete'\n />\n )}\n \n );\n};\n\nexport default TaskTypeButton;\n","import { FC, useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Title,\n TabsComponent,\n Input,\n DropdownMenu,\n Spinner,\n} from '../../components/shared';\nimport ModalTask from '../../components/todo/ModalTask';\nimport { getTaskData } from '../../store/tasks/tasks.actions';\nimport { ITaskResource } from '../../entities/task.entities';\nimport moment from 'moment';\nimport TaskTypeButton from '../../components/todo/TaskTypeButton';\nimport { Table, Button } from 'antd';\nimport { selectTasks } from '../../store/tasks/tasks.selector';\nimport { sendSingleRequest } from '../../apis';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { isNormalTask } from '../../lib/task.helper';\nimport './styles.scss';\n\nconst TasksTable: FC<{\n isCompleted: boolean;\n onRowClick: (t: ITaskResource) => void;\n onDeleteClick: (t: ITaskResource) => void;\n onEditTask: (t: ITaskResource) => void;\n onCompleteTask: (t: ITaskResource) => void;\n tasksData: ITaskResource[];\n}> = ({\n isCompleted,\n onRowClick,\n onDeleteClick,\n onEditTask,\n onCompleteTask,\n tasksData,\n}) => {\n const lang = useSelector(selectLang);\n\n const columns = useMemo(() => {\n const rs = [\n {\n title: 'Title',\n key: 'title',\n render: (x: ITaskResource) => {x.title},\n sorter: (a: ITaskResource, b: ITaskResource) =>\n a.title.localeCompare(b.title),\n },\n {\n title: 'Creator',\n key: 'creator',\n render: (x: ITaskResource) => (\n \n {x.creator\n ? `created by ${x.creator.name} on ${moment(\n 1000 * x.created_at,\n ).format('DD.MM.YYYY')}`\n : `created on ${moment(1000 * x.created_at).format(\n 'DD.MM.YYYY',\n )}`}\n \n ),\n sorter: (a: ITaskResource, b: ITaskResource) =>\n a.created_at - b.created_at,\n },\n {\n title: 'Type',\n key: 'type',\n render: (x: ITaskResource) => (\n
e.stopPropagation()}>\n \n
\n ),\n },\n ];\n if (!isCompleted) {\n rs.push(\n {\n title: 'Due to',\n key: 'due_date',\n render: (x: ITaskResource) => {\n const dov = moment.unix(x.due_date / 1000);\n const d = Math.round(moment().diff(dov, 'days', true));\n return (\n
\n
{moment(x.due_date).format('DD.MM.YYYY')}
\n {d > 0 ? (\n
{`Overdue ${d} day(s)`}
\n ) : d === 0 ? (\n
{'Due today'}
\n ) : (\n
{`Due in ${-d} day(s)`}
\n )}\n
\n );\n },\n sorter: (a: ITaskResource, b: ITaskResource) =>\n a.due_date - b.due_date,\n },\n {\n title: '',\n key: 'action',\n render: (x: ITaskResource) => (\n
e.stopPropagation()}>\n \n
\n ),\n },\n );\n } else {\n rs.push({\n title: '',\n key: 'action',\n render: (x: ITaskResource) => (\n {\n e.stopPropagation();\n onDeleteClick(x);\n }}\n >\n Delete\n \n ),\n });\n }\n return rs.map(x => ({ ...x, title: translate(lang, x.title) }));\n }, [isCompleted, lang]);\n\n return (\n
\n ({\n onClick: () => onRowClick(r as any),\n })}\n />\n
\n );\n};\n\nconst tabs = [\n { id: 'all', title: 'All' },\n { id: 'GENERAL', title: 'General' },\n { id: 'SEEDING', title: 'Seeding' },\n { id: 'ASSESSMENT', title: 'Assessment' },\n { id: 'MAINTENANCE', title: 'Maintenance' },\n { id: 'HARVEST', title: 'Harvest' },\n { id: 'completed', title: 'Completed' },\n];\n\nconst TaskListPage = () => {\n const dispatch = useDispatch();\n const tasksData = useSelector(selectTasks);\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [createTask, setCreateTask] = useState(false);\n const [showTask, setShowTask] = useState();\n const [activeTab, setActiveTab] = useState('all');\n const [filterTitle, setFilterTitle] = useState('');\n const [editTask, setEditTask] = useState();\n\n const completedClearClick = async () => {\n const r = window.confirm('Are you sure to delete all completed tasks?');\n if (r) {\n setDisabled(true);\n const rs = await sendSingleRequest(\n {},\n 'POST',\n 'api/task/remove-completed-tasks',\n true,\n );\n if (rs.status) {\n await dispatch(getTaskData());\n }\n setDisabled(false);\n }\n };\n const deleteTask = async (x: ITaskResource) => {\n const r = window.confirm('Are you sure to delete this task data?');\n if (r) {\n setDisabled(true);\n const r = await sendSingleRequest(\n {},\n 'DELETE',\n `api/task/tasks/${x.id}`,\n true,\n );\n if (r.status) {\n await dispatch(getTaskData());\n } else {\n window.alert(r.data?.message ?? 'Error');\n }\n setDisabled(false);\n }\n };\n const completeTask = async (x: ITaskResource) => {\n setDisabled(true);\n const r = await sendSingleRequest(\n { is_completed: true },\n 'PUT',\n `api/task/tasks/${x.id}`,\n true,\n );\n if (r.status) {\n await dispatch(getTaskData());\n }\n setDisabled(false);\n };\n\n const filteredTasks = useMemo(() => {\n let rs = [...tasksData];\n if (activeTab === 'all') {\n rs = rs.filter(x => !x.is_completed);\n } else if (activeTab === 'GENERAL') {\n rs = rs.filter(x => !x.is_completed && isNormalTask(x.type));\n } else if (activeTab === 'completed') {\n rs = rs.filter(x => x.is_completed);\n } else {\n rs = rs.filter(x => !x.is_completed && x.type === activeTab);\n }\n if (filterTitle) {\n rs = rs.filter(x =>\n x.title.toLowerCase().includes(filterTitle.toLowerCase()),\n );\n }\n return rs;\n }, [tasksData, filterTitle, activeTab]);\n\n useEffect(() => {\n dispatch(getTaskData());\n }, [dispatch]);\n\n return (\n
\n {disabled && (\n
\n \n
\n )}\n
\n
\n \n {translate(lang, 'Things to do')}\n \n
\n
\n
\n setFilterTitle(e.target.value)}\n />\n
\n
\n {activeTab === 'completed' && (\n <>\n \n {translate(lang, 'Clear completed')}\n \n \n )}\n setCreateTask(true)}\n >\n {translate(lang, 'Add task')}\n \n
\n
\n setActiveTab(e)}\n defaultActiveKey='all'\n items={tabs.map(x => ({\n id: x.id,\n title: x.title,\n content: (\n setShowTask(t)}\n onDeleteClick={t => deleteTask(t)}\n onEditTask={t => setEditTask(t)}\n onCompleteTask={completeTask}\n tasksData={filteredTasks as any}\n />\n ),\n }))}\n />\n
\n {createTask && (\n setCreateTask(false)}\n onConfirm={() => setCreateTask(false)}\n />\n )}\n {!!showTask && (\n setShowTask(undefined)}\n onConfirm={() => setShowTask(undefined)}\n data={showTask}\n />\n )}\n {!!editTask && (\n setEditTask(undefined)}\n onConfirm={() => setEditTask(undefined)}\n data={editTask}\n updateId={editTask.id}\n />\n )}\n
\n );\n};\n\nexport default TaskListPage;\n","import { useState } from 'react';\nimport {\n Button,\n CloseIcon,\n Dropdown,\n DropdownMenu,\n Input,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport { Modal, Table } from 'antd';\nimport { ICustomField } from '../../entities/automation.entities';\nimport { useDispatch, useSelector } from 'react-redux';\nimport ModalFeedbackView from '../../components/shared/feedback/ModalFeedbackView';\nimport { sendSingleRequest } from '../../apis';\nimport { loadCustomFields } from '../../store/automation/automation.actions';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { selectCustomFields } from '../../store/automation/automation.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\nimport './styles.scss';\n\nconst ActionLabel = (type: string) => {\n if (type === 'HARVEST') return 'Harvest';\n else if (type === 'ASSESSMENT') return 'Assessment';\n else return type;\n};\n\ninterface IFieldForm {\n name: string;\n input_type: 'select' | 'input' | null;\n options: string | null;\n data_type: 'number' | 'string' | null;\n unit: string | null;\n}\n\nconst inputOptions = (lang: TLang | undefined) => [\n { id: 'select', label: translate(lang, 'Dropdown'), value: 'select' },\n { id: 'input', label: translate(lang, 'Input'), value: 'input' },\n ],\n dtOptions = (lang: TLang | undefined) => [\n { id: 'number', label: translate(lang, 'Number'), value: 'number' },\n { id: 'string', label: translate(lang, 'Text'), value: 'string' },\n ];\n\ninterface ModalProps {\n type: string;\n onClose: () => void;\n data?: ICustomField;\n editId?: number;\n}\n\nconst FieldModal = ({ type, onClose, data, editId }: ModalProps) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n const [form, setForm] = useState({\n name: '',\n input_type: null,\n options: null,\n data_type: null,\n unit: null,\n ...data,\n });\n const updateForm = (key: keyof IFieldForm, val: any) =>\n setForm({ ...form, [key]: val });\n\n const confirmClick = async () => {\n let valid = { ...form };\n if (!valid.name) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, 'Please enter name'),\n }),\n );\n return;\n }\n if (valid.unit && valid.unit.length > 9) {\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, 'Maximum allowed unit length is %s', 9),\n }),\n );\n return;\n }\n if (valid.input_type === 'input' || !valid.input_type) {\n valid.input_type = null;\n valid.options = null;\n }\n if (valid.data_type === 'string' || !valid.data_type) {\n valid.data_type = null;\n }\n if (!valid.unit) {\n valid.unit = null;\n }\n setDisabled(true);\n const res = editId\n ? await sendSingleRequest(\n valid,\n 'PUT',\n `api/custom-field/${editId}`,\n true,\n )\n : await sendSingleRequest(\n { type, ...valid },\n 'POST',\n 'api/custom-field',\n true,\n );\n if (res.status) {\n await dispatch(loadCustomFields());\n onClose();\n } else {\n setDisabled(false);\n dispatch(\n showFeedback({\n isMessageModal: true,\n type: 'error',\n message: translate(lang, res.data?.message ?? 'Unknown error'),\n }),\n );\n }\n };\n\n return (\n }\n >\n
\n
\n \n {translate(\n lang,\n `${editId ? 'Update Custom' : 'Add Custom'} ${ActionLabel(\n type,\n )} Field`,\n )}\n \n
\n updateForm('name', e.target.value)}\n />\n
\n updateForm('input_type', v)}\n />\n
\n {form.input_type === 'select' ? (\n updateForm('options', e.target.value)}\n />\n ) : (\n <>\n
\n updateForm('data_type', v)}\n />\n
\n updateForm('unit', e.target.value)}\n />\n \n )}\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n \n );\n};\n\ninterface TableProps {\n type: string;\n data: ICustomField[];\n onAddClick: (t: string) => void;\n onEditClick: (d: ICustomField) => void;\n onDeleteClick: (d: ICustomField) => void;\n}\n\nconst FieldTable = ({\n type,\n data,\n onAddClick,\n onEditClick,\n onDeleteClick,\n}: TableProps) => {\n const lang = useSelector(selectLang);\n\n const columns = [\n {\n title: translate(lang, 'Name'),\n key: 'name',\n render: (x: ICustomField) =>
{x.name}
,\n },\n {\n title: translate(lang, 'Input type'),\n key: 'input_type',\n render: (x: ICustomField) => (\n
{x.input_type === 'select' ? 'Dropdown' : 'Input'}
\n ),\n },\n {\n title: translate(lang, 'Data type'),\n key: 'data_type',\n render: (x: ICustomField) => (\n
{x.data_type === 'number' ? 'Number' : 'Text'}
\n ),\n },\n {\n title: translate(lang, 'Unit'),\n key: 'unit',\n render: (x: ICustomField) =>
{x.unit}
,\n },\n {\n title: '',\n key: 'more',\n render: (d: any) =>\n !!d.type ? (\n
\n onEditClick(d)}\n onDeleteRow={() => onDeleteClick(d)}\n />\n
\n ) : (\n \n ),\n },\n ];\n\n return (\n
\n
\n \n {translate(lang, 'Custom %s Fields', ActionLabel(type))}\n \n
\n
\n
\n onAddClick(type)}\n >\n {translate(lang, 'Add Custom %s Field', ActionLabel(type))}\n \n
\n
\n \n
\n );\n};\n\nconst CustomFieldSetting = () => {\n const dispatch = useDispatch();\n const customFields = useSelector(selectCustomFields);\n const lang = useSelector(selectLang);\n\n const [addType, setAddType] = useState();\n const [editItem, setEditItem] = useState();\n\n const handleDelete = async (item: ICustomField) => {\n if (!window.confirm(translate(lang, 'Are you sure to delete this data?')))\n return;\n\n const res = await sendSingleRequest(\n {},\n 'DELETE',\n `api/custom-field/${item.id}`,\n true,\n );\n if (res.status) {\n await dispatch(loadCustomFields());\n dispatch(\n showFeedback({\n type: 'success',\n isMessage: true,\n message: translate(lang, res.data?.message ?? 'Deleted successfully'),\n }),\n );\n } else {\n dispatch(\n showFeedback({\n type: 'error',\n isMessage: true,\n message: translate(lang, res.data?.message ?? 'Unknown error'),\n }),\n );\n }\n };\n\n return (\n
\n \n x.type === 'ASSESSMENT')}\n onAddClick={t => setAddType(t)}\n onEditClick={d => setEditItem(d)}\n onDeleteClick={d => handleDelete(d)}\n />\n x.type === 'HARVEST')}\n onAddClick={t => setAddType(t)}\n onEditClick={d => setEditItem(d)}\n onDeleteClick={d => handleDelete(d)}\n />\n {addType ? (\n setAddType(undefined)} />\n ) : editItem ? (\n setEditItem(undefined)}\n />\n ) : (\n <>\n )}\n
\n \n );\n};\n\nexport default CustomFieldSetting;\n","import { useEffect, useState } from 'react';\nimport { Modal, Table } from 'antd';\nimport {\n Button,\n CheckboxButton,\n CloseIcon,\n Dropdown,\n DropdownMenu,\n Input,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { loadTags } from '../../store/automation/automation.actions';\nimport { selectTags } from '../../store/automation/automation.selector';\nimport { ITag } from '../../entities/automation.entities';\nimport ModalFeedbackView from '../../components/shared/feedback/ModalFeedbackView';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { sendSingleRequest } from '../../apis';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { isColorFormat } from '../../util/validation';\nimport {\n calcPeriodUnit,\n invertColor,\n periodToStr,\n} from '../../lib/common.helpers';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst periodOptions = [\n { id: 'm', value: 'month', label: 'Month(s)' },\n { id: 'w', value: 'week', label: 'Week(s)' },\n { id: 'd', value: 'day', label: 'Day(s)' },\n { id: 'h', value: 'hour', label: 'Hour(s)' },\n];\n\ninterface IForm {\n name: string;\n color: string;\n lines?: number[];\n is_urgent: boolean;\n}\n\ninterface ModalProps {\n tag?: ITag;\n onClose: () => void;\n editId?: number;\n}\n\nconst TagModal = ({ tag, onClose, editId }: ModalProps) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n\n const linesOption = useSelector(selectFarmsData).reduce(\n (p, c) => [\n ...p,\n ...c.lines.map(x => ({\n id: x.id,\n value: x.id.toString(),\n label: `${c.name} - ${x.line_name}`,\n })),\n ],\n [] as any,\n );\n const [disabled, setDisabled] = useState(false);\n const [form, setForm] = useState({\n name: tag?.name ?? '',\n color: tag?.color ?? '',\n lines: tag?.tag_lines.map(x => x.line_id) ?? [],\n is_urgent: tag?.is_urgent ?? false,\n });\n const [periodUnit, setPeriodUnit] = useState(\n tag?.period ? calcPeriodUnit(tag.period) : { unit: 'day', value: null },\n );\n\n const updateForm = (key: keyof IForm, value: any) => {\n setForm({ ...form, [key]: value });\n };\n const confirmClick = async () => {\n if (!form.name) {\n window.alert(translate(lang, 'Please enter tag name'));\n return;\n }\n if (form.color && !isColorFormat(form.color)) {\n window.alert(translate(lang, 'Please enter valid color'));\n return;\n }\n let data: any = { ...form };\n if (form.is_urgent) {\n if (\n !periodUnit ||\n !periodUnit.unit ||\n periodUnit.value === undefined ||\n periodUnit.value === null\n ) {\n window.alert(translate(lang, 'Please enter valid period unit'));\n return;\n }\n const period =\n periodUnit.unit === 'month'\n ? periodUnit.value * 3600 * 24 * 30\n : periodUnit.unit === 'week'\n ? periodUnit.value * 3600 * 24 * 7\n : periodUnit.unit === 'day'\n ? periodUnit.value * 3600 * 24\n : periodUnit.value * 3600;\n data.period = period;\n }\n setDisabled(true);\n const res = editId\n ? await sendSingleRequest(data, 'PUT', `api/tag/${editId}`, true)\n : await sendSingleRequest(data, 'POST', 'api/tag', true);\n\n if (res.status) {\n await dispatch(loadTags());\n onClose();\n } else {\n setDisabled(false);\n dispatch(\n showFeedback({\n isMessageModal: true,\n message: translate(lang, res.data?.message ?? 'Unknown error'),\n type: 'error',\n }),\n );\n }\n };\n\n return (\n }\n >\n
\n
\n \n {translate(lang, `${editId ? 'Update Tag' : 'Add New Tag'}`)}\n \n
\n updateForm('name', e.target.value)}\n disabled={disabled}\n />\n updateForm('color', e.target.value)}\n disabled={disabled}\n />\n
\n x.toString()) as any}\n onChange={(v: any) =>\n updateForm(\n 'lines',\n v.map((x: string) => Number(x)),\n )\n }\n showSearch={true}\n disabled={disabled}\n />\n
\n
\n updateForm('is_urgent', e.target.checked)}\n disabled={disabled}\n />\n
\n {form.is_urgent && (\n <>\n
\n \n {translate(lang, 'How long it will be delayed')}\n \n
\n
\n
\n \n setPeriodUnit((prv: any) => ({\n ...prv,\n value:\n e.target.value.length <= 0\n ? null\n : Number(e.target.value),\n }))\n }\n />\n
\n
\n \n setPeriodUnit((prv: any) => ({ ...prv, unit: v }))\n }\n />\n
\n
\n \n )}\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n \n );\n};\n\ninterface TableProps {\n tags: ITag[];\n onEditClick: (d: ITag) => void;\n onDeleteClick: (d: ITag) => void;\n}\n\nconst TagsTable = ({ tags, onEditClick, onDeleteClick }: TableProps) => {\n const lang = useSelector(selectLang);\n\n const columns = [\n {\n title: translate(lang, 'Name'),\n key: 'name',\n render: (x: ITag) =>
{x.name}
,\n },\n {\n title: translate(lang, 'Color'),\n key: 'color',\n render: (x: ITag) =>\n x.color && (\n \n {x.color}\n \n ),\n },\n {\n title: translate(lang, 'Lines'),\n key: 'lines',\n render: (x: ITag) =>
{`tagged ${x.tag_lines.length} lines`}
,\n },\n {\n title: translate(lang, 'Required urgent attention'),\n key: 'is_urgent',\n render: (x: ITag) =>
{x.is_urgent ? 'Yes' : 'No'}
,\n },\n {\n title: translate(lang, 'If required attention is delayed'),\n key: 'period',\n render: (x: ITag) => (\n
\n {translate(\n lang,\n x.period !== null\n ? x.period\n ? `after ${periodToStr(x.period)}`\n : 'immediately'\n : '-',\n )}\n
\n ),\n },\n {\n title: '',\n key: 'more',\n render: (x: ITag) => (\n
\n onEditClick(x)}\n onDeleteRow={() => onDeleteClick(x)}\n />\n
\n ),\n },\n ];\n\n return (\n \n );\n};\n\nconst TagsPage = () => {\n const dispatch = useDispatch();\n const tags = useSelector(selectTags);\n const lang = useSelector(selectLang);\n\n const [showAdd, setShowAdd] = useState(false);\n const [editTag, setEditTag] = useState();\n\n const deleteClick = async (x: ITag) => {\n if (!window.confirm(translate(lang, 'Are you sure to delete this tag?')))\n return;\n\n const res = await sendSingleRequest({}, 'DELETE', `api/tag/${x.id}`, true);\n if (res.status) {\n await dispatch(loadTags());\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, res.data?.message ?? 'Failed'),\n type: 'error',\n }),\n );\n }\n };\n\n useEffect(() => {\n dispatch(loadTags());\n }, [dispatch]);\n\n return (\n
\n \n
\n \n {translate(lang, 'Line tags')}\n \n
\n
\n
\n setShowAdd(true)}\n >\n {`${translate(lang, 'Add')} ${translate(lang, 'Line tag')}`}\n \n
\n
\n setEditTag(x)}\n onDeleteClick={deleteClick}\n />\n
\n {showAdd && setShowAdd(false)} />}\n {editTag && (\n setEditTag(undefined)}\n />\n )}\n \n );\n};\n\nexport default TagsPage;\n","import { useMemo, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectProfile, selectUserMeta } from '../../store/auth/auth.selector';\nimport { selectBoats } from '../../store/users/users.selector';\nimport {\n CloseIcon,\n Datepicker,\n Dropdown,\n Subtitle,\n} from '../../components/shared';\nimport { Alert, Button, List, Modal, Typography, message } from 'antd';\nimport moment from 'moment';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { ITaskRequest } from '../../entities/task.entities';\nimport { sendSingleRequest } from '../../apis';\nimport { Link } from 'react-router-dom';\nimport { getLineStatus } from '../../lib/farm.helpers';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { componentTranslate, translate } from '../../lib/lang.helper';\n\ninterface IBaseData {\n last_assessment: {\n farm_id: number;\n farm_name: string;\n line_id: number;\n line_name: string;\n assessment_date: number;\n } | null;\n tasks: Array<{\n id: number;\n farm_id: number;\n line_id: number;\n }>;\n}\n\ninterface Props {\n baseData: IBaseData;\n loadData: () => void;\n}\n\nconst AssessmentSuggest = ({ baseData, loadData }: Props) => {\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n const userMeta = useSelector(selectUserMeta);\n const boats = useSelector(selectBoats);\n const profile = useSelector(selectProfile);\n const { tasks, last_assessment } = baseData;\n\n const [showAccept, setShowAccept] = useState(false);\n const [boatId, setBoatId] = useState(profile?.boat_id ?? undefined);\n const [dueDate, setDueDate] = useState(moment().toDate().getTime());\n const [disabled, setDisabled] = useState(false);\n const [slCnt, setSlCnt] = useState(3);\n\n const { farmsInfo, suggested, totalLines } = useMemo(() => {\n const farmsInfo = farmsData\n .map(farm => {\n const lines = farm.lines\n .filter(\n x =>\n getLineStatus(x, userMeta?.line_assess_expire_days) ===\n 'REQUIRE_ASSESSMENT',\n )\n .map(line => ({\n id: line.id,\n line_name: line.line_name,\n last_date:\n line.growing_cycle?.last_assessment?.assessment_date ??\n line.growing_cycle?.main_seed.planned_date_seed ??\n 0,\n }));\n const min_date = lines.reduce(\n (p, c) => (p > c.last_date ? c.last_date : p),\n new Date().getTime(),\n );\n return {\n farm_id: farm.id,\n farm_name: farm.name,\n lines,\n min_date,\n };\n })\n .filter(x => x.lines.length > 0);\n\n if (farmsInfo.length <= 0) {\n return { farmsInfo: null, suggested: null, totalLines: 0 };\n }\n const totalLines = farmsInfo.reduce((p, c) => p + c.lines.length, 0);\n\n farmsInfo.sort((a, b) => a.min_date - b.min_date);\n\n let id = 0,\n lines = farmsInfo[0].lines;\n for (id = 0; id < farmsInfo.length; id++) {\n lines = farmsInfo[id].lines.filter(y =>\n baseData.tasks.every(t => t.line_id !== y.id),\n );\n if (lines.length > 0) break;\n }\n farmsInfo.sort((a, b) => b.lines.length - a.lines.length);\n\n if (id >= farmsInfo.length) {\n return { farmsInfo, suggested: null, totalLines };\n }\n const suggested = {\n farm_id: farmsInfo[id].farm_id ?? 0,\n farm_name: farmsInfo[id].farm_name ?? '',\n lines: lines.slice(0, slCnt),\n totalCnt: lines.length,\n };\n return { farmsInfo, suggested, totalLines };\n }, [farmsData, tasks, userMeta, slCnt]);\n\n const acceptClick = async () => {\n if (!suggested) {\n message.error(translate(lang, '_no_suggested'));\n return;\n }\n if (!boatId) {\n message.error(translate(lang, 'Please select a boat'));\n return;\n }\n setDisabled(true);\n for (let line of suggested.lines) {\n const form: ITaskRequest = {\n farm_id: suggested.farm_id,\n line_id: line.id,\n title: `Assess farm ${suggested.farm_name} line ${line.line_name}`,\n content: 'Please assessment this line',\n due_date: dueDate,\n assigned_to: 0,\n boat_id: boatId,\n type: 'ASSESSMENT',\n };\n const res = await sendSingleRequest(form, 'POST', 'api/task/tasks', true);\n if (res.status) {\n message.success(\n translate(lang, 'Task %s has been created successfully', form.title),\n );\n } else {\n message.error(translate(lang, res.data?.message ?? 'Server error'));\n }\n }\n setShowAccept(false);\n setDisabled(false);\n await loadData();\n };\n\n return (\n
\n
\n \n {translate(lang, 'Assessment suggestions')}\n \n
\n
\n
\n \n {componentTranslate(\n lang,\n 'You have %s line requiring assessments',\n \n {totalLines}\n ,\n )}\n \n
\n
\n {!!last_assessment ? (\n \n {componentTranslate(\n lang,\n 'Last assessment was on farm %s line %s on day %s',\n \n {last_assessment.farm_name}\n ,\n \n {last_assessment.line_name}\n ,\n \n {defaultDateFormat(last_assessment.assessment_date)}\n ,\n )}\n \n ) : (\n {translate(lang, 'No assessment data')}\n )}\n
\n
\n {farmsInfo && (\n
\n (\n \n \n \n {componentTranslate(\n lang,\n 'Farm %s has %s line(s) requiring assessments',\n {item.farm_name},\n {item.lines.length},\n )}\n \n \n \n )}\n />\n {suggested && (\n
\n
\n \n
\n \n
\n \n {componentTranslate(\n lang,\n '_assessment_suggest_farm_line',\n {suggested.farm_name},\n \n {suggested.lines.map(x => x.line_name).join(', ')}\n ,\n )}\n \n \n {slCnt > 1 && (\n setSlCnt(Math.max(1, slCnt - 2))}\n >\n {translate(lang, 'Less')}\n \n )}\n {slCnt > 1 && slCnt < suggested.totalCnt && (\n {'|'}\n )}\n {slCnt < suggested.totalCnt && (\n \n setSlCnt(Math.min(suggested.totalCnt, slCnt + 2))\n }\n >\n {translate(lang, 'More')}\n \n )}\n \n
\n
\n setShowAccept(true)}\n >\n {translate(lang, 'Accept')}\n \n
\n
\n }\n showIcon={true}\n type='info'\n closable={false}\n />\n
\n )}\n
\n )}\n {suggested && showAccept && (\n setShowAccept(false)}\n closable\n closeIcon={}\n footer={null}\n >\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} (${x.reg_number})`,\n }))}\n value={boatId?.toString()}\n onChange={v => setBoatId(Number(v))}\n />\n
\n
\n e && setDueDate(e.toDate().getTime())}\n required\n />\n
\n
\n \n {translate(lang, 'Convert to task')}\n \n
\n
\n \n )}\n \n );\n};\n\nexport default AssessmentSuggest;\n","import { useSelector } from 'react-redux';\nimport {\n CloseIcon,\n Datepicker,\n Dropdown,\n Subtitle,\n} from '../../components/shared';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { useMemo, useState } from 'react';\nimport { Alert, Button, List, Modal, Typography, message } from 'antd';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { Link } from 'react-router-dom';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport moment from 'moment';\nimport { selectBoats } from '../../store/users/users.selector';\nimport { ITaskRequest } from '../../entities/task.entities';\nimport { sendSingleRequest } from '../../apis';\nimport { ILineResource } from '../../entities/farms.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { componentTranslate, translate } from '../../lib/lang.helper';\n\ninterface ILineLabel {\n farm_id: number;\n farm_name: string;\n line_id: number;\n line_name: string;\n}\n\ninterface IBaseData {\n last_seed: {\n farm_id: number;\n farm_name: string;\n line_id: number;\n line_name: string;\n date_seed: number;\n } | null;\n last_harvest: {\n farm_id: number;\n farm_name: string;\n line_id: number;\n line_name: string;\n complete_date: number;\n } | null;\n suggest: {\n from_line: ILineLabel;\n target_line: ILineLabel;\n } | null;\n}\n\ninterface Props {\n baseData: IBaseData;\n loadData: () => void;\n}\n\nconst SeedingSuggest = ({ baseData, loadData }: Props) => {\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n const profile = useSelector(selectProfile);\n const boats = useSelector(selectBoats);\n\n const { last_seed, last_harvest, suggest } = baseData;\n const [showAccept, setShowAccept] = useState(false);\n const [boatId, setBoatId] = useState(profile?.boat_id ?? undefined);\n const [dueDate, setDueDate] = useState(moment().toDate().getTime());\n const [disabled, setDisabled] = useState(false);\n const [sourceLine, setSourceLine] = useState(suggest?.from_line.line_id);\n const [targetLine, setTargetLine] = useState(suggest?.target_line.line_id);\n\n const { farmsInfo, totalEmpty, emptyLines, firstStateLines } = useMemo(() => {\n const farmsInfo = farmsData.map(x => {\n const emptyLines = x.lines.filter(y => !y.growing_cycle);\n const firstStageLines = x.lines.filter(\n y =>\n y.growing_cycle &&\n (!y.growing_cycle.main_seed.spat_storage ||\n !y.growing_cycle.main_seed.spat_storage.harvest_id),\n );\n return {\n id: x.id,\n name: x.name,\n emptyLines,\n firstStageLines,\n };\n });\n const emptyLines = farmsInfo.reduce(\n (p, c) => [...p, ...c.emptyLines],\n [] as ILineResource[],\n );\n const firstStateLines = farmsInfo.reduce(\n (p, c) => [...p, ...c.firstStageLines],\n [] as ILineResource[],\n );\n const totalEmpty = farmsInfo.reduce((p, c) => p + c.emptyLines.length, 0);\n\n return { farmsInfo, totalEmpty, emptyLines, firstStateLines };\n }, [farmsData]);\n\n const acceptClick = async () => {\n if (!sourceLine || !targetLine) {\n message.error(translate(lang, '_no_suggested'));\n return;\n }\n if (!boatId) {\n message.error(translate(lang, 'Please select a boat'));\n return;\n }\n setDisabled(true);\n const srcLine = firstStateLines.find(x => x.id === sourceLine),\n tarLine = emptyLines.find(x => x.id === targetLine);\n if (!srcLine || !tarLine) {\n message.error('Invalid error! Please contact to developer team');\n return;\n }\n let form: ITaskRequest = {\n farm_id: srcLine.farm_id,\n line_id: srcLine.id,\n title: `Harvest farm ${srcLine.farm_name} line ${srcLine.line_name}`,\n content: 'Please harvest this line as intermediate',\n due_date: dueDate,\n boat_id: boatId,\n type: 'HARVEST',\n };\n let res = await sendSingleRequest(form, 'POST', 'api/task/tasks', true);\n if (res.status) {\n message.success(\n translate(lang, 'Task %s has been created successfully', form.title),\n );\n } else {\n message.error(translate(lang, res.data?.message ?? 'Server error'));\n }\n form = {\n farm_id: tarLine.farm_id,\n line_id: tarLine.id,\n title: `Seed farm ${tarLine.farm_name} line ${tarLine.line_name}`,\n content: `Please seed the spats harvested from farm ${srcLine.farm_name} line ${srcLine.line_name} into this line`,\n due_date: dueDate,\n boat_id: boatId,\n type: 'SEEDING',\n };\n res = await sendSingleRequest(form, 'POST', 'api/task/tasks', true);\n if (res.status) {\n message.success(\n translate(lang, 'Task %s has been created successfully', form.content),\n );\n } else {\n message.error(translate(lang, res.data?.message ?? 'Server error'));\n }\n setShowAccept(false);\n setDisabled(false);\n await loadData();\n };\n\n return (\n
\n
\n \n {translate(lang, 'Seeding suggestions')}\n \n
\n
\n
\n {componentTranslate(\n lang,\n 'You have %s lines empty',\n \n {totalEmpty}\n ,\n )}\n
\n
\n {!!last_seed &&\n componentTranslate(\n lang,\n 'Your last seeding was on farm %s line %s on day %s',\n \n {last_seed.farm_name}\n ,\n \n {last_seed.line_name}\n ,\n \n {defaultDateFormat(last_seed.date_seed)}\n ,\n )}\n {!!last_harvest && (\n <>\n {componentTranslate(\n lang,\n !last_seed\n ? 'Your last intermediate harvest on farm %s line %s on day %s'\n : ' and last intermediate harvest on farm %s line %s on day %s',\n \n {last_harvest.farm_name}\n ,\n \n {last_harvest.line_name}\n ,\n \n {defaultDateFormat(last_harvest.complete_date)}\n ,\n )}\n \n )}\n
\n
\n {farmsInfo && (\n
\n (\n \n \n {componentTranslate(\n lang,\n 'Farm %s has %s lines empty and %s first stage crop',\n {item.name},\n {item.emptyLines.length},\n {item.firstStageLines.length},\n )}\n \n \n )}\n />\n {suggest && (\n
\n
\n \n
\n \n
\n {componentTranslate(\n lang,\n '_seed_suggest_line',\n \n \n {suggest.from_line.farm_name}\n \n ,\n \n \n {suggest.from_line.line_name}\n \n ,\n \n \n {suggest.target_line.farm_name}\n \n ,\n \n \n {suggest.target_line.line_name}\n \n ,\n )}\n
\n
\n setShowAccept(true)}\n >\n {translate(lang, 'Accept')}\n \n
\n
\n }\n showIcon={true}\n type='info'\n closable={false}\n />\n
\n )}\n
\n )}\n {showAccept && suggest && (\n setShowAccept(false)}\n closable\n closeIcon={}\n footer={null}\n >\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.farm_name} - ${x.line_name}`,\n }))}\n value={sourceLine?.toString()}\n onChange={v => setSourceLine(Number(v))}\n />\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.farm_name} - ${x.line_name}`,\n }))}\n value={targetLine?.toString()}\n onChange={v => setTargetLine(Number(v))}\n />\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} (${x.reg_number})`,\n }))}\n value={boatId?.toString()}\n onChange={v => setBoatId(Number(v))}\n />\n
\n
\n e && setDueDate(e.toDate().getTime())}\n required\n />\n
\n
\n \n {translate(lang, 'Convert to task')}\n \n
\n
\n \n )}\n \n );\n};\n\nexport default SeedingSuggest;\n","import { useSelector } from 'react-redux';\nimport {\n CloseIcon,\n Datepicker,\n Dropdown,\n Subtitle,\n} from '../../components/shared';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { useMemo, useState } from 'react';\nimport { Alert, Button, List, Modal, Typography, message } from 'antd';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { Link } from 'react-router-dom';\nimport { ILineResource } from '../../entities/farms.entities';\nimport { selectBoats } from '../../store/users/users.selector';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport moment from 'moment';\nimport { ITaskRequest } from '../../entities/task.entities';\nimport { sendSingleRequest } from '../../apis';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { componentTranslate, translate } from '../../lib/lang.helper';\n\ninterface IFarmLine {\n farm_id: number;\n farm_name: string;\n line_id: number;\n line_name: string;\n}\n\ninterface ILastHarvest extends IFarmLine {\n complete_date: number;\n}\n\ninterface IForecastHarvest extends IFarmLine {\n forecast_date: number;\n}\n\ninterface IBaseData {\n last_harvest: ILastHarvest | null;\n tasks: Array<{ id: number; farm_id: number; line_id: number }>;\n forecast_harvests: IForecastHarvest[];\n}\n\ninterface Props {\n baseData: IBaseData;\n loadData: () => void;\n}\n\nconst HarvestSuggest = ({ baseData, loadData }: Props) => {\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n const lastHarvest = baseData.last_harvest,\n tasks = baseData.tasks;\n const boats = useSelector(selectBoats);\n const profile = useSelector(selectProfile);\n const harvestPredictions = baseData.forecast_harvests.slice(0, 10);\n\n const [showAccept, setShowAccept] = useState(false);\n const [boatId, setBoatId] = useState(profile?.boat_id);\n const [dueDate, setDueDate] = useState(moment().toDate().getTime());\n const [disabled, setDisabled] = useState(false);\n\n const { farmsInfo, totReadyCnt, totGrowingCnt, suggested } = useMemo(() => {\n const farmsInfo = farmsData.map(x => {\n const readyLines = x.lines.filter(\n x => x.growing_cycle && !!x.growing_cycle.ready_harvest,\n );\n const growingLines = x.lines.filter(x => !!x.growing_cycle);\n return {\n id: x.id,\n name: x.name,\n growingLines: growingLines,\n readyLines: readyLines,\n };\n });\n farmsInfo.sort((a, b) => b.readyLines.length - a.readyLines.length);\n const totReadyCnt = farmsInfo.reduce((p, c) => p + c.readyLines.length, 0),\n totGrowingCnt = farmsInfo.reduce((p, c) => p + c.growingLines.length, 0);\n const growingLines = farmsData.reduce(\n (p, c) => [\n ...p,\n ...c.lines.filter(\n x => !!x.growing_cycle && !!x.growing_cycle.last_assessment,\n ),\n ],\n [] as ILineResource[],\n );\n const readyLines = growingLines.filter(\n x =>\n !!x.growing_cycle?.ready_harvest &&\n tasks.every(t => t.line_id !== x.id),\n );\n\n let suggestLine: ILineResource | null = null;\n if (readyLines.length > 0) {\n readyLines.sort(\n (a, b) =>\n (a.growing_cycle?.ready_harvest ?? 0) -\n (b.growing_cycle?.ready_harvest ?? 0),\n );\n suggestLine = readyLines[0];\n } else if (growingLines.length > 0) {\n const avg =\n growingLines.reduce(\n (p, c) => p + (c.growing_cycle?.last_assessment?.shell_size.avg ?? 0),\n 0,\n ) / growingLines.length;\n let minD = -1;\n for (let x of growingLines) {\n if (!x.growing_cycle?.last_assessment) continue;\n const d = Math.abs(\n x.growing_cycle.last_assessment.shell_size.avg - avg,\n );\n if (minD === -1 || minD > d) {\n minD = d;\n suggestLine = x;\n }\n }\n }\n const suggested = suggestLine\n ? {\n farm_id: suggestLine.farm_id,\n farm_name: suggestLine.farm_name,\n line_id: suggestLine.id,\n line_name: suggestLine.line_name,\n is_ready: !!suggestLine.growing_cycle?.ready_harvest,\n shell_size:\n suggestLine.growing_cycle?.last_assessment?.shell_size.avg,\n date: suggestLine.growing_cycle?.last_assessment?.assessment_date,\n }\n : null;\n return { farmsInfo, totReadyCnt, totGrowingCnt, suggested };\n }, [farmsData, tasks]);\n\n const acceptClick = async () => {\n if (!suggested || !suggested.is_ready) {\n message.error(translate(lang, 'There are no lines ready to harvest'));\n return;\n }\n if (!boatId) {\n message.error(translate(lang, 'Please select a boat'));\n return;\n }\n const form: ITaskRequest = {\n farm_id: suggested.farm_id,\n line_id: suggested.line_id,\n title: `Harvest farm ${suggested.farm_name} line ${suggested.line_name}`,\n content: 'Please harvest this line',\n due_date: dueDate,\n assigned_to: 0,\n boat_id: boatId,\n type: 'HARVEST',\n };\n setDisabled(true);\n const res = await sendSingleRequest(form, 'POST', 'api/task/tasks', true);\n if (res.status) {\n message.success(\n translate(lang, 'Task %s has been created successfully', form.title),\n );\n } else {\n message.error(translate(lang, res.data?.message ?? 'Server error'));\n }\n setShowAccept(false);\n setDisabled(false);\n await loadData();\n };\n\n return (\n
\n
\n \n {translate(lang, 'Harvest suggestions')}\n \n
\n
\n
\n {'You have '}\n {totGrowingCnt}\n {' seeded line(s) in final stage, '}\n {totReadyCnt}\n {' line(s) marked as ready to harvest.'}\n
\n
\n {lastHarvest && (\n \n {componentTranslate(\n lang,\n 'Your last final harvest was on farm %s line %s on day %s',\n \n {lastHarvest.farm_name}\n ,\n \n {lastHarvest.line_name}\n ,\n \n {defaultDateFormat(lastHarvest.complete_date)}\n ,\n )}\n \n )}\n
\n
\n {farmsInfo && (\n
\n (\n \n \n \n {componentTranslate(\n lang,\n 'Farm %s has %s line(s) seeded growing, and %s line(s) are ready to harvest',\n {item.name},\n {item.growingLines.length},\n {item.readyLines.length},\n )}\n \n \n \n )}\n />\n
\n
\n \n
\n {suggested && (\n \n {suggested.is_ready ? (\n
\n {componentTranslate(\n lang,\n '_harvest_suggest_line',\n \n \n {suggested.line_name}\n \n ,\n \n \n {suggested.farm_name}\n \n ,\n )}\n
\n ) : (\n
\n {componentTranslate(\n lang,\n '_harvest_suggest_check',\n \n \n {suggested.line_name}\n \n ,\n \n \n {suggested.farm_name}\n \n ,\n \n {`${suggested.shell_size} mm`}\n ,\n \n {defaultDateFormat(suggested.date)}\n ,\n )}\n
\n )}\n {suggested.is_ready && (\n
\n setShowAccept(true)}\n >\n {translate(lang, 'Accept')}\n \n
\n )}\n
\n }\n showIcon={true}\n type='info'\n closable={false}\n />\n )}\n {harvestPredictions.length > 0 && (\n (\n \n {componentTranslate(\n lang,\n 'Line %s on farm %s need to be harvested on %s',\n {x.line_name},\n {x.farm_name},\n \n {defaultDateFormat(x.forecast_date)}\n ,\n )}\n \n ))}\n showIcon={true}\n type='info'\n closable={false}\n />\n )}\n
\n
\n )}\n {suggested && showAccept && (\n setShowAccept(false)}\n closable\n closeIcon={}\n footer={null}\n >\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} (${x.reg_number})`,\n }))}\n value={boatId?.toString()}\n onChange={v => setBoatId(Number(v))}\n />\n
\n
\n e && setDueDate(e.toDate().getTime())}\n required\n />\n
\n
\n \n {translate(lang, 'Create task')}\n \n
\n
\n \n )}\n \n );\n};\n\nexport default HarvestSuggest;\n","import { useSelector } from 'react-redux';\nimport {\n CloseIcon,\n Datepicker,\n Dropdown,\n Subtitle,\n} from '../../components/shared';\nimport { Alert, Button, Modal, Table, Typography, message } from 'antd';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { useHistory } from 'react-router-dom';\nimport { useMemo, useState } from 'react';\nimport { formatNumber } from '../../entities/util-functions';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport moment from 'moment';\nimport { selectBoats } from '../../store/users/users.selector';\nimport { ITaskRequest } from '../../entities/task.entities';\nimport { sendSingleRequest } from '../../apis';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { componentTranslate, translate } from '../../lib/lang.helper';\nimport { selectInventories } from '../../store/inventories/inventories.selector';\nimport { inventoryLabel } from '../../lib/farm.helpers';\n\ninterface ILineFloat {\n line_id: number;\n line_name: string;\n last_float_date: number | null;\n estimate_weight: number;\n used_floats: Array<{ id: number; quantity: number }>;\n suggest_floats: Array<{ id: number; quantity: number }>;\n}\n\ninterface IFloatFarm {\n farm_id: number;\n farm_name: string;\n unit_weight: number;\n unit_size: number;\n lines: ILineFloat[];\n}\n\ninterface ILastFloating {\n inventory_id: number;\n quantity: number;\n status: 'IN' | 'OUT';\n manage_date: number;\n farm_id: number;\n farm_name: string;\n line_id: number;\n line_name: string;\n}\n\ninterface IBaseData {\n farms: IFloatFarm[];\n last_floating: ILastFloating | null;\n tasks: Array<{ id: number; farm_id: number; line_id: number }>;\n}\n\ninterface Props {\n baseData: IBaseData;\n loadData: () => void;\n}\n\nconst FloatingSuggest = ({ baseData, loadData }: Props) => {\n const profile = useSelector(selectProfile);\n const inventories = useSelector(selectInventories);\n const boats = useSelector(selectBoats);\n const lang = useSelector(selectLang);\n\n const history = useHistory();\n const { farms, last_floating, tasks } = baseData;\n\n const [curFarm, setCurFarm] = useState(\n farms.length > 0 ? farms[0].farm_id : null,\n );\n const [accept, setAccept] = useState();\n const [boatId, setBoatId] = useState(profile?.boat_id ?? undefined);\n const [dueDate, setDueDate] = useState(moment().toDate().getTime());\n const [disabled, setDisabled] = useState(false);\n\n const goToLine = (lineID: number) =>\n history.push(`/farms/${curFarm}/${lineID}`);\n\n const ivtLabel = (id: number) => {\n const t = inventories.find(x => x.id === id);\n return t ? inventoryLabel(t) : '-';\n };\n\n const columns = useMemo(\n () => [\n {\n title: translate(lang, 'Line'),\n key: 'line_id',\n render: (x: ILineFloat) => {x.line_name},\n },\n {\n title: translate(lang, 'Last floating'),\n key: 'last_float_date',\n render: (x: ILineFloat) => (\n {defaultDateFormat(x.last_float_date, '-')}\n ),\n },\n {\n title: translate(lang, 'Current floats'),\n key: 'used_floats',\n render: (x: ILineFloat) => (\n
\n {x.used_floats.map(y => (\n
{`${y.quantity} of ${ivtLabel(y.id)}`}
\n ))}\n
\n ),\n },\n {\n title: translate(lang, 'Current estimated weight'),\n key: 'estimate_weight',\n render: (x: ILineFloat) => (\n {`${formatNumber(x.estimate_weight)}`}\n ),\n },\n {\n title: translate(lang, 'Suggested floats'),\n key: 'suggest_floats',\n render: (x: ILineFloat) => (\n
\n {x.suggest_floats.map(f => (\n
\n {`${f.quantity < 0 ? 'Remove' : 'Add'} ${Math.abs(\n f.quantity,\n )} ${ivtLabel(f.id)}`}\n
\n ))}\n
\n ),\n },\n {\n title: translate(lang, 'Action'),\n key: 'farm_id',\n render: (x: ILineFloat) =>\n x.suggest_floats.length > 0 && (\n {\n e.stopPropagation();\n setAccept(x);\n }}\n disabled={tasks.some(t => t.line_id === x.line_id)}\n >\n {translate(\n lang,\n tasks.some(t => t.line_id === x.line_id)\n ? 'Floating task is created'\n : 'Create a floating task',\n )}\n \n ),\n },\n ],\n [inventories, tasks],\n );\n const acceptClick = async () => {\n if (!accept) {\n message.error(translate(lang, '_no_suggested'));\n return;\n }\n if (!boatId) {\n message.error(translate(lang, 'Please select a boat'));\n return;\n }\n if (!curFarm) {\n message.error(translate(lang, 'No suggested farm'));\n return;\n }\n const farm = farms.find(x => x.farm_id === curFarm);\n setDisabled(true);\n const form: ITaskRequest = {\n farm_id: curFarm,\n line_id: accept.line_id,\n title: `Manage floats on farm ${farm?.farm_name} line ${accept.line_name}`,\n content: 'Please manage floats on this line correctly',\n due_date: dueDate,\n assigned_to: 0,\n boat_id: boatId,\n type: 'INVENTORY_SEED',\n };\n const res = await sendSingleRequest(form, 'POST', 'api/task/tasks', true);\n if (res.status) {\n message.success(\n translate(lang, 'Task %s has been created successfully', form.title),\n );\n } else {\n message.error(translate(lang, res.data?.message ?? 'Server error'));\n }\n setDisabled(false);\n setAccept(undefined);\n await loadData();\n };\n\n return (\n
\n
\n \n {translate(lang, 'Floating suggestions')}\n \n
\n
\n
\n {!!last_floating ? (\n \n {componentTranslate(\n lang,\n 'Last floating was managed on farm %s line %s on day %s',\n \n {last_floating.farm_name}\n ,\n \n {last_floating.line_name}\n ,\n \n {defaultDateFormat(last_floating.manage_date)}\n ,\n )}\n \n ) : (\n {translate(lang, 'No floating managed')}\n )}\n
\n
\n \n
\n
\n {farms && (\n
\n
\n ({\n id: x.farm_id.toString(),\n value: x.farm_id.toString(),\n label: x.farm_name,\n }))}\n value={curFarm?.toString()}\n onChange={v => setCurFarm(Number(v))}\n />\n
\n
\n x.farm_id === curFarm)?.lines}\n onRow={r => ({\n onClick: () => goToLine(r.line_id),\n })}\n />\n
\n
\n )}\n {accept && (\n setAccept(undefined)}\n closable\n closeIcon={}\n footer={null}\n >\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} (${x.reg_number})`,\n }))}\n value={boatId?.toString()}\n onChange={v => setBoatId(Number(v))}\n />\n
\n
\n e && setDueDate(e.toDate().getTime())}\n required\n />\n
\n
\n \n {translate(lang, 'Convert to task')}\n \n
\n
\n \n )}\n
\n );\n};\n\nexport default FloatingSuggest;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { Input, Subtitle } from '../../components/shared';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { selectSizedOysters } from '../../store/utils/utils.selector';\nimport { useState } from 'react';\nimport { Button, Checkbox, Table } from 'antd';\nimport { selectOysterFarms } from '../../store/farms/farms.selector';\nimport { calcSpecieLineDozens, getLineOysters } from '../../lib/farm.helpers';\nimport { selectAccount } from '../../store/auth/auth.selector';\nimport { calcDiffDays } from '../../lib/common.helpers';\nimport { ITaskRequest } from '../../entities/task.entities';\nimport ModalTask from '../../components/todo/ModalTask';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { selectTasks } from '../../store/tasks/tasks.selector';\nimport { useHistory } from 'react-router-dom';\nimport { formatNumber } from '../../entities/util-functions';\n\nconst EPS = 0.01;\n\ninterface IOrder {\n name: string;\n amount?: number;\n}\n\ninterface ISpecie {\n name: string;\n growing: number;\n harvest: number;\n ordered: number;\n}\n\ninterface ILineItem {\n farmId: number;\n lineId: number;\n farmName: string;\n farmNumber: string;\n lineName: string;\n farmingMethod: string | null;\n totalBaskets: number;\n needBaskets: number;\n insufficiency: number;\n totalDz: number;\n usedDz: number;\n wasteDz: number;\n daysGrown: number;\n species: ISpecie[];\n checked?: boolean;\n}\n\ninterface RowProps {\n data: ILineItem;\n index: number;\n sizeNames: string[];\n orders: IOrder[];\n onToggleCheck: (lineId: number, checked: boolean) => void;\n}\n\nconst LineRow = ({\n data,\n index,\n sizeNames,\n orders,\n onToggleCheck,\n}: RowProps) => {\n const history = useHistory();\n const totSum = data.species.reduce((p, c) => p + c.harvest, 0);\n const otherSum = data.species\n .filter(x => !orders.some(y => y.name === x.name))\n .reduce((p, c) => p + c.harvest, 0);\n\n const ordersView = orders.map(x => (\n \n {`${x.name} ${formatNumber(\n data.species.find(y => y.name === x.name)?.harvest ?? 0,\n 0,\n )} dz`}\n {` (${formatNumber(\n ((data.species.find(y => y.name === x.name)?.harvest ?? 0) / totSum) *\n 100,\n 0,\n )}%) , `}\n {`${formatNumber(otherSum, 0)} dz other sizes`}\n \n ));\n\n return (\n <>\n \n \n
\n history.push(`/farms/${data.farmId}`)}\n >\n {'Farm:'}\n {`${data.farmName}/${data.farmNumber}`}\n
\n \n history.push(`/farms/${data.farmId}/${data.lineId}`)\n }\n >\n {'Line:'}\n {data.lineName}\n \n \n \n \n
{`${data.daysGrown} days`}
\n \n \n {`${formatNumber(data.totalDz, 0)} dz`}\n \n \n {`${data.totalBaskets} ${data.farmingMethod}`}\n \n <>\n {sizeNames.map(x => {\n const spc = data.species.find(y => y.name === x);\n return (\n \n
{`${formatNumber(spc?.growing ?? 0, 0)} dz`}
\n \n );\n })}\n \n \n onToggleCheck(data.lineId, e.target.checked)}\n />\n \n \n \n \n
\n {`${data.needBaskets} ${data.farmingMethod} needed`}\n {'and will contain'}\n {ordersView}\n
\n \n \n \n );\n};\n\nconst OrderSuggest = () => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const oysterSpecies = useSelector(selectSizedOysters);\n const farmsData = useSelector(selectOysterFarms);\n const onGrowWaste = useSelector(selectAccount)?.oyster_crops;\n const tasksData = useSelector(selectTasks);\n\n const [orders, setOrders] = useState(\n oysterSpecies.map(x => ({ name: x.name })),\n );\n const [suitLines, setSuitLines] = useState([]);\n const [taskData, setTaskData] = useState();\n\n const showError = (message: string) =>\n dispatch(showFeedback({ type: 'error', message, isMessage: true }));\n\n const updateOrder = (name: string, v: string) => {\n const val = v.length <= 0 ? undefined : Number(v);\n let tmp = [...orders];\n const i = tmp.findIndex(x => x.name === name);\n tmp[i].amount = val;\n setOrders(tmp);\n };\n const searchClick = () => {\n if (orders.every(x => !x.amount)) {\n showError(translate(lang, 'Please input at least one order'));\n return;\n }\n let tmp: ILineItem[] = [];\n for (const farm of farmsData) {\n for (const line of farm.lines) {\n if (!line.growing_cycle) continue;\n\n const oysters =\n calcSpecieLineDozens(line, onGrowWaste, oysterSpecies) ?? [];\n const totalBaskets = line.growing_cycle.current_basket_count;\n\n let maxCnt = 0;\n for (let i = 0; i < orders.length; i++) {\n const name = orders[i].name;\n const oam = orders[i].amount;\n const o = oysters.find(y => y.name === name);\n if (!o || !o.amount || !oam) continue;\n\n const final = Math.min(oam, o.amount);\n\n const density = o.amount / totalBaskets;\n const cnt = Math.ceil(final / density);\n if (cnt > maxCnt) maxCnt = cnt;\n }\n maxCnt = Math.min(maxCnt, totalBaskets);\n\n if (maxCnt <= 0) continue;\n\n const amount = getLineOysters(line, 'dozens') ?? 0;\n const totDensity = amount / totalBaskets;\n const total = maxCnt * totDensity;\n let insufficiency = 0,\n finals = 0;\n let species: ISpecie[] = [];\n for (let x of orders) {\n const os = oysters.find(y => y.name === x.name);\n const osm = os?.amount ?? 0;\n\n const density = osm / totalBaskets;\n const usedDz = density * maxCnt;\n finals += Math.min(usedDz, x.amount ?? 0);\n insufficiency += Math.max(0, (x.amount ?? 0) - usedDz);\n\n species.push({\n name: x.name,\n growing: osm,\n ordered: x.amount ?? 0,\n harvest: usedDz,\n });\n }\n tmp.push({\n farmId: farm.id,\n lineId: line.id,\n farmName: farm.name,\n farmNumber: farm.farm_number,\n lineName: line.line_name,\n farmingMethod: line.farming_method,\n daysGrown: calcDiffDays(\n line.growing_cycle.main_seed.planned_date_seed,\n ),\n totalBaskets,\n needBaskets: maxCnt,\n insufficiency,\n totalDz: amount,\n usedDz: total,\n wasteDz: total - finals,\n species,\n });\n }\n }\n const isEnough = tmp.some(x => x.insufficiency < EPS);\n if (isEnough) {\n tmp = tmp.filter(x => x.insufficiency < EPS);\n }\n tmp.sort((a, b) => {\n if (Math.abs(a.insufficiency - b.insufficiency) > EPS) {\n return a.insufficiency < b.insufficiency ? -1 : 1;\n }\n if (Math.abs(a.wasteDz - b.wasteDz) > EPS) {\n return a.wasteDz < b.wasteDz ? -1 : 1;\n }\n return b.daysGrown - a.daysGrown;\n });\n setSuitLines(tmp);\n tmp = tmp.slice(0, 10);\n };\n const toggleCheck = (lineId: number, checked: boolean) => {\n let tmp = [...suitLines];\n const i = tmp.findIndex(x => x.lineId === lineId);\n if (i < 0) return;\n tmp[i].checked = checked;\n setSuitLines(tmp);\n };\n const bulkConvertClick = () => {\n const checkedLines = suitLines.filter(x => x.checked);\n if (checkedLines.length === 0) {\n showError(translate(lang, 'Please select at least one line'));\n return;\n }\n\n const farmID = checkedLines.every(x => x.farmId === checkedLines[0].farmId)\n ? checkedLines[0].farmId\n : undefined;\n const farmStr = farmID\n ? `${checkedLines[0].farmName}/${checkedLines[0].farmNumber}`\n : undefined;\n const title = `Harvest line${\n checkedLines.length > 1 ? 's' : ''\n } ${checkedLines.map(x => x.lineName).join(', ')}${\n farmStr ? ` on farm ${farmStr}` : ''\n }`;\n const content = `Ordered oysters are ${orders\n .filter(x => x.amount)\n .map(x => `${x.name} ${x.amount ?? 0} dozens`)\n .join(', ')}`;\n\n const exist = tasksData.some(\n x =>\n x.farm_id === (farmID ?? null) &&\n x.type === 'HARVEST' &&\n !x.is_completed &&\n title === x.title,\n );\n if (exist) {\n showError(translate(lang, 'Task already exists for this harvest'));\n return;\n }\n setTaskData({\n title,\n farm_id: farmID,\n line_id: checkedLines.length > 1 ? undefined : checkedLines[0].lineId,\n content,\n due_date: Date.now(),\n type: 'HARVEST',\n });\n };\n const showSuccess = () =>\n dispatch(\n showFeedback({\n type: 'success',\n message: translate(lang, 'Task created successfully'),\n isMessage: true,\n }),\n );\n\n const totalRequired = orders.reduce((p, c) => p + (c.amount ?? 0), 0);\n const columns: any = [\n {\n title: translate(lang, 'Size'),\n key: 'name',\n render: (x: IOrder) => x.name,\n width: 220,\n },\n {\n title:\n translate(lang, 'Amount') +\n (totalRequired > 0 ? ` (${totalRequired} dozens)` : ''),\n key: 'amount',\n render: (x: IOrder) => (\n updateOrder(x.name, e.target.value)}\n type='number'\n unit='dozens'\n />\n ),\n align: 'left',\n width: 180,\n },\n ];\n const suitHeaders = [\n 'Farm & Line',\n 'Days grown',\n 'Dozens',\n 'Containers',\n ...oysterSpecies.map(x => x.name),\n 'Convert',\n ];\n\n return (\n
\n
\n \n {translate(lang, 'What is your order for today?')}\n \n
\n
\n
\n \n
\n
\n \n
\n {suitLines.length > 0 && (\n
\n
\n
\n
\n
\n \n \n \n {suitHeaders.map(x => (\n \n ))}\n \n \n \n {suitLines.map((x, i) => (\n y.name)}\n orders={orders.filter(y => y.amount)}\n onToggleCheck={toggleCheck}\n />\n ))}\n \n
\n {x}\n
\n
\n
\n
\n
\n
\n \n
\n
\n )}\n
\n {!!taskData && (\n {\n setTaskData(undefined);\n showSuccess();\n }}\n onCancel={() => setTaskData(undefined)}\n />\n )}\n
\n );\n};\n\nexport default OrderSuggest;\n","import { useCallback, useEffect, useState } from 'react';\nimport { Tabs, message } from 'antd';\nimport { Spinner, Subtitle, Title } from '../../components/shared';\nimport { sendSingleRequest } from '../../apis';\nimport AssessmentSuggest from './AssessmentSuggest';\nimport SeedingSuggest from './SeedingSuggest';\nimport HarvestSuggest from './HarvestSuggest';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport FloatingSuggest from './FloatingSuggest';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport OrderSuggest from './OrderSuggest';\nimport './styles.scss';\n\nconst MaintenanceSuggest = () => {\n const lang = useSelector(selectLang);\n\n return (\n
\n
\n \n {translate(lang, 'Maintenance suggestions')}\n \n
\n
\n
\n You have 10 line requiring assessments\n
\n
\n Last assessment was on farm Osman line 1A on day 12.12.2022\n
\n
\n
\n );\n};\n\nconst SuggestPage = () => {\n const history = useHistory();\n const query = new URLSearchParams(useLocation().search);\n const lang = useSelector(selectLang);\n\n const [loading, setLoading] = useState(false);\n const [baseAssess, setBaseAssess] = useState();\n const [baseSeed, setBaseSeed] = useState();\n const [baseHarvest, setBaseHarvest] = useState();\n const [baseFloat, setBaseFloat] = useState();\n const [tabKey, setTabKey] = useState(query.get('tab') ?? 'assessment');\n\n const loadAssess = useCallback(async () => {\n setLoading(true);\n const res = await sendSingleRequest(\n {},\n 'GET',\n 'api/suggest/assessment',\n true,\n );\n setLoading(false);\n if (res.status) {\n setBaseAssess(res.data);\n } else {\n message.error(translate(lang, res.data?.message ?? 'Server error'), 5);\n }\n }, []);\n\n const loadSeed = useCallback(async () => {\n setLoading(true);\n const res = await sendSingleRequest({}, 'GET', 'api/suggest/seeding', true);\n setLoading(false);\n if (res.status) {\n setBaseSeed(res.data);\n } else {\n message.error(translate(lang, res.data?.message ?? 'Server error'), 5);\n }\n }, []);\n\n const loadHarvest = useCallback(async () => {\n setLoading(true);\n const res = await sendSingleRequest({}, 'GET', 'api/suggest/harvest', true);\n setLoading(false);\n if (res.status) {\n setBaseHarvest(res.data);\n } else {\n message.error(translate(lang, res.data?.message ?? 'Server error'), 5);\n }\n }, []);\n\n const loadFloating = useCallback(async () => {\n setLoading(true);\n const res = await sendSingleRequest(\n {},\n 'GET',\n 'api/suggest/floating',\n true,\n );\n setLoading(false);\n if (res.status) {\n setBaseFloat(res.data);\n } else {\n message.error(translate(lang, res.data?.message ?? 'Server error'), 5);\n }\n }, []);\n\n const changeTab = (key: string) => {\n query.set('tab', key);\n history.replace({ search: `?${query.toString()}` });\n setTabKey(key);\n };\n\n useEffect(() => {\n if (tabKey === 'assessment') {\n loadAssess();\n } else if (tabKey === 'seeding') {\n loadSeed();\n } else if (tabKey === 'harvest') {\n loadHarvest();\n } else if (tabKey === 'floating') {\n loadFloating();\n }\n }, [tabKey]);\n\n return (\n
\n
\n
\n \n {translate(lang, 'What can you do today')}\n \n
\n {loading && (\n
\n \n
\n )}\n changeTab(t)}>\n \n {baseAssess && (\n \n )}\n \n \n {baseSeed && (\n \n )}\n \n \n {baseHarvest && (\n \n )}\n \n \n \n \n \n {baseFloat && (\n \n )}\n \n \n \n \n \n
\n
\n );\n};\n\nexport default SuggestPage;\n","import { useState } from 'react';\nimport { ILineResource } from '../../entities/farms.entities';\nimport {\n Button,\n Datepicker,\n Dropdown,\n Input,\n RadioButton,\n} from '../../components/shared';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n selectMusselFarms,\n selectMusselSpats,\n} from '../../store/farms/farms.selector';\nimport { Radio } from 'antd';\nimport { selectSeasons } from '../../store/utils/utils.selector';\nimport moment from 'moment';\nimport DateTimePicker from '../../components/shared/datepicker/DateTimePicker';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { toSecTimeTracks } from '../../components/shared/input/TimeTrackInput';\nimport {\n loadFarmsData,\n loadSpatStorages,\n} from '../../store/farms/farms.actions';\nimport { sendSingleRequest } from '../../apis';\nimport { useHistory } from 'react-router-dom';\nimport PicturesWall from '../../components/shared/pictures-wall/PicturesWall';\nimport { selectFloatInventories } from '../../store/inventories/inventories.selector';\nimport { loadInventories } from '../../store/inventories/inventories.actions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { getSpatSourceLabel } from '../../lib/farm.helpers';\n\nconst getJSTime = (t: number | undefined) =>\n t ? t * 1000 : moment().toDate().getTime();\n\ninterface IForm {\n season_name: string;\n spat_storage_id?: number;\n spat_amount?: number;\n planned_date_seed: number;\n planned_date_harvest: number;\n line_length?: number;\n spat_size?: number;\n spat_size_max?: number;\n density?: number;\n density_max?: number;\n density_unit: 'spat per m' | 'kgs per m';\n drop?: number;\n submersion?: number;\n spacing?: number;\n start_time: number;\n finish_time: number;\n comment?: string;\n images?: any[];\n float_id?: number;\n float_quantity?: number;\n}\n\nconst extractForm = (data: any): IForm => {\n let result: IForm = {\n season_name: data.season_name ?? '',\n spat_storage_id: data.spat_storage_id ?? undefined,\n spat_amount: data.spat_amount ?? undefined,\n line_length: data.line_length ?? undefined,\n planned_date_seed: getJSTime(data.planned_date_seed),\n planned_date_harvest: getJSTime(data.planned_date_harvest),\n spat_size: data.spat_size ?? undefined,\n spat_size_max: data.spat_size_max ?? undefined,\n density: data.density ?? undefined,\n density_max: data.density_max ?? undefined,\n density_unit: data.density_unit ?? 'spat per m',\n drop: data.drop ?? undefined,\n submersion: data.submersion ?? undefined,\n spacing: data.spacing ?? undefined,\n start_time: getJSTime(data.start_time),\n finish_time: getJSTime(data.finish_time),\n comment: data.comment ?? undefined,\n images: data.images,\n float_id: data.float_id ?? undefined,\n float_quantity: data.float_quantity ?? undefined,\n };\n return result;\n};\n\ninterface Props {\n formID: number;\n data: any;\n lineData: ILineResource;\n}\n\nconst PaperSeedingForm = ({ formID, data, lineData }: Props) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectMusselFarms);\n const spatStorages = useSelector(selectMusselSpats);\n const seasonData = useSelector(selectSeasons).map(x => ({\n id: x.id.toString(),\n label: x.name,\n value: x.name,\n }));\n const inventories = useSelector(selectFloatInventories);\n\n const [curFarm, setCurFarm] = useState(\n farmsData.find(x => x.id === lineData.farm_id),\n );\n const [curLine, setCurLine] = useState(lineData);\n const [formData, setFormData] = useState(extractForm(data));\n const [isSeasonNew, setIsSeasonNew] = useState<'old' | 'new'>(\n !data.season_name || seasonData.some(x => x.value === data.season_name)\n ? 'old'\n : 'new',\n );\n const [disabled, setDisabled] = useState(false);\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n type: 'error',\n isMessage: true,\n message: translate(lang, message),\n }),\n );\n const selectFarm = (v: string) => {\n const farm = farmsData.find(x => x.id === Number(v));\n setCurFarm(farm);\n setCurLine(undefined);\n };\n const selectLine = (v: string) => {\n const line = curFarm?.lines.find(x => x.id === Number(v));\n setCurLine(line);\n };\n const updateForm = (key: keyof IForm, value: any) => {\n setFormData({ ...formData, [key]: value });\n };\n\n const farmOptions = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }));\n const lineOptions = curFarm?.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n }));\n const availableWeight = formData.spat_storage_id\n ? spatStorages.find(x => x.id === Number(formData.spat_storage_id))\n ?.available_weight ?? -1\n : -1;\n const curFloat = inventories.find(x => x.id === formData.float_id);\n\n const confirmClick = async () => {\n if (!curFarm || !curLine) {\n showError('Please select farm and line');\n return;\n }\n if (!formData.season_name) {\n showError('Please enter season name');\n return;\n }\n if (!formData.spat_storage_id) {\n showError('Please select spat storage');\n return;\n }\n if (!formData.spat_amount) {\n showError('Please enter spat amount');\n return;\n }\n if (!formData.line_length) {\n showError('Please enter line length');\n return;\n }\n if (!formData.spat_size) {\n showError('Please enter spat size');\n return;\n }\n if (!formData.density) {\n showError('Please enter density');\n return;\n }\n const {\n start_time,\n finish_time,\n planned_date_seed,\n planned_date_harvest,\n float_id,\n float_quantity,\n ...params\n } = formData;\n const time_tracks = toSecTimeTracks([{ start_time, finish_time }]);\n if (time_tracks === false) {\n showError('_invalid_time_range');\n return;\n }\n if (float_id && (float_quantity === undefined || float_quantity === null)) {\n showError('Please enter float quantity');\n return;\n }\n if (\n float_id &&\n (float_quantity ?? 0) > (curFloat?.available_quantity ?? 0)\n ) {\n showError(\n translate(\n lang,\n 'Maximum available float quantity is %s',\n curFloat?.available_quantity,\n ),\n );\n return;\n }\n const picked_inventories = float_quantity\n ? [{ id: float_id, quantity: float_quantity }]\n : undefined;\n const submitData = {\n ...params,\n id: formID,\n planned_date_seed: Math.floor(planned_date_seed / 1000),\n planned_date_harvest: Math.floor(planned_date_harvest / 1000),\n time_tracks,\n parent_id: curLine.growing_cycle?.main_seed.id,\n line_id: curLine.id,\n picked_inventories,\n };\n setDisabled(true);\n const res = await sendSingleRequest(\n submitData,\n 'POST',\n 'api/queue/confirm-seeding/mussel',\n true,\n );\n if (res.status) {\n await dispatch(loadFarmsData());\n await dispatch(loadSpatStorages());\n if (picked_inventories) {\n await dispatch(loadInventories());\n }\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, 'Confirmed successfully'),\n type: 'success',\n }),\n );\n history.goBack();\n } else {\n setDisabled(false);\n showError(res.data?.message ?? 'Unknown error');\n }\n };\n\n return (\n
\n
\n
\n selectFarm(v)}\n />\n
\n
\n selectLine(v)}\n />\n
\n
\n setIsSeasonNew(e.target.value)}\n value={isSeasonNew}\n >\n \n \n \n
\n {isSeasonNew === 'old' ? (\n updateForm('season_name', value)}\n options={seasonData}\n value={formData.season_name}\n />\n ) : (\n updateForm('season_name', e.target.value)}\n />\n )}\n
\n
\n Number(x.available_weight) > 0)\n .map(item => ({\n id: item.id.toString(),\n value: item.id.toString(),\n label: getSpatSourceLabel(item.id, spatStorages),\n }))}\n onChange={(value, evt) =>\n updateForm('spat_storage_id', Number(value))\n }\n />\n {!!formData.spat_storage_id && (\n 0 ? availableWeight : undefined}\n unit='kg'\n onChange={e => updateForm('spat_amount', e.target.value)}\n />\n )}\n
\n
\n
\n \n updateForm(\n 'planned_date_seed',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n )\n }\n required\n />\n
\n
\n {\n if (\n formData.planned_date_seed !== undefined &&\n e &&\n e!.toDate().getTime() < formData.planned_date_seed\n ) {\n updateForm('planned_date_harvest', moment().toDate().getTime());\n } else {\n updateForm(\n 'planned_date_harvest',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n );\n }\n }}\n required\n />\n
\n
\n
\n updateForm('start_time', e?.toDate().getTime())}\n />\n updateForm('finish_time', e?.toDate().getTime())}\n />\n
\n
\n
\n updateForm('line_length', e.target.value)}\n />\n
\n
\n updateForm('drop', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('spat_size', e.target.value)}\n />\n
\n
\n updateForm('spat_size_max', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('density', e.target.value)}\n />\n
\n
\n updateForm('density_max', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('submersion', e.target.value)}\n />\n
\n
\n updateForm('spacing', e.target.value)}\n />\n
\n
\n
\n updateForm('comment', e.target.value)}\n />\n
\n
\n updateForm('images', f)}\n />\n
\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n }))}\n value={formData.float_id?.toString()}\n onChange={v => updateForm('float_id', Number(v))}\n />\n
\n
\n \n updateForm(\n 'float_quantity',\n e.target.value.length <= 0 ? undefined : Number(e.target.value),\n )\n }\n />\n
\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n
\n );\n};\n\nexport default PaperSeedingForm;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { ILineResource } from '../../entities/farms.entities';\nimport { useHistory } from 'react-router-dom';\nimport {\n Button,\n CheckboxButton,\n Datepicker,\n Dropdown,\n Input,\n} from '../../components/shared';\nimport { selectMusselFarms } from '../../store/farms/farms.selector';\nimport { useState } from 'react';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport moment from 'moment';\nimport { selectAssessmentFields } from '../../store/automation/automation.selector';\nimport { ICustomValue } from '../../entities/automation.entities';\nimport DateTimePicker from '../../components/shared/datepicker/DateTimePicker';\nimport { toSecTimeTracks } from '../../components/shared/input/TimeTrackInput';\nimport { sendSingleRequest } from '../../apis';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport PicturesWall from '../../components/shared/pictures-wall/PicturesWall';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { toMillisecond } from '../../util/toggleSecondMillisecond';\nimport { getEstHarvestDate } from '../../lib/farm.helpers';\n\nconst getJSTime = (t: number | undefined) =>\n t ? toMillisecond(t) : moment().toDate().getTime();\n\ninterface IForm {\n size_min?: number;\n size_avg?: number;\n size_max?: number;\n assessment_date: number;\n planned_date_harvest: number;\n ready_to_harvest: boolean;\n comment?: string;\n start_time: number;\n finish_time: number;\n images?: any[];\n}\n\ninterface Props {\n formID: number;\n data: any;\n lineData: ILineResource;\n}\n\nconst PaperAssessForm = ({ formID, data, lineData }: Props) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectMusselFarms);\n const customFields = useSelector(selectAssessmentFields);\n\n const [curFarm, setCurFarm] = useState(\n farmsData.find(f => f.id === lineData.farm_id),\n );\n const [curLine, setCurLine] = useState(lineData);\n const [formData, setFormData] = useState({\n size_min: data.size_min,\n size_avg: data.size_avg,\n size_max: data.size_max,\n assessment_date: getJSTime(data.assessment_date),\n planned_date_harvest: getJSTime(getEstHarvestDate(lineData)),\n ready_to_harvest: data.ready_to_harvest ?? false,\n start_time: getJSTime(data.start_time),\n finish_time: getJSTime(data.finish_time),\n comment: data.comment,\n images: data.images,\n });\n const [customValues, setCustomValues] = useState(\n customFields.map(x => {\n const d =\n data && data.custom_values\n ? data.custom_values.find((y: ICustomValue) => y.field_id === x.id)\n : null;\n return {\n input_type: x.input_type,\n field_label: x.name,\n options: x.options\n ?.split(',')\n .map(t => ({ id: t, label: t, value: t })),\n field_id: x.id,\n field_val: d?.field_val ?? '',\n data_type: x.data_type,\n unit: x.unit,\n };\n }),\n );\n const [disabled, setDisabled] = useState(false);\n\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n type: 'error',\n isMessage: true,\n message: translate(lang, message),\n }),\n );\n const selectFarm = (v: string) => {\n const farm = farmsData.find(x => x.id === Number(v));\n setCurFarm(farm);\n setCurLine(undefined);\n };\n const selectLine = (v: string) => {\n const line = curFarm?.lines.find(x => x.id === Number(v));\n setCurLine(line);\n };\n const updateForm = (key: keyof IForm, value: any) => {\n let tmp = { ...formData, [key]: value };\n if (key === 'size_min' || key === 'size_max') {\n tmp.size_avg = (Number(tmp.size_min) + Number(tmp.size_max)) / 2;\n }\n setFormData(tmp);\n };\n const updateCustomValue = (fieldID: number, val: string) => {\n let tmp = [...customValues];\n const i = tmp.findIndex(x => x.field_id === fieldID);\n if (i >= 0) {\n tmp[i].field_val = val;\n }\n setCustomValues(tmp);\n };\n const confirmClick = async () => {\n if (!curFarm || !curLine) {\n showError('Please select farm and line');\n return;\n }\n if (!formData.size_min || !formData.size_avg || !formData.size_max) {\n showError('Please fill in size fields');\n return;\n }\n if (Number(formData.size_min) > Number(formData.size_max)) {\n showError('Size min cannot be greater than size max');\n return;\n }\n const {\n start_time,\n finish_time,\n assessment_date,\n planned_date_harvest,\n ...params\n } = formData;\n const time_tracks = toSecTimeTracks([{ start_time, finish_time }]);\n if (time_tracks === false) {\n showError('_invalid_time_range');\n return;\n }\n const custom_values = customValues\n .filter(x => !!x.field_val)\n .map(({ field_id, field_val }) => ({ field_id, field_val }));\n const submitData = {\n ...params,\n assessment_date: Math.floor(assessment_date / 1000),\n planned_date_harvest: Math.floor(planned_date_harvest / 1000),\n line_id: curLine.id,\n seeding_id: curLine.growing_cycle?.main_seed.id ?? data.seeding_id,\n custom_values,\n id: formID,\n };\n if (curLine.id !== lineData.id && !curLine.growing_cycle) {\n showError('_line_empty');\n return;\n }\n if (!submitData.seeding_id) {\n showError('_line_empty');\n return;\n }\n setDisabled(true);\n const res = await sendSingleRequest(\n submitData,\n 'POST',\n 'api/queue/confirm-assessment',\n true,\n );\n if (res.status) {\n await dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(lang, 'Confirmed successfully'),\n type: 'success',\n }),\n );\n history.goBack();\n } else {\n setDisabled(false);\n showError(res.data?.message ?? 'Unknown error');\n }\n };\n\n const farmOptions = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }));\n const lineOptions = curFarm?.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n }));\n\n return (\n
\n
\n
\n selectFarm(v)}\n />\n
\n
\n selectLine(v)}\n />\n
\n
\n
\n
\n updateForm('size_min', e.target.value)}\n />\n
\n
\n updateForm('size_avg', e.target.value)}\n />\n
\n
\n updateForm('size_max', e.target.value)}\n />\n
\n
\n
\n
\n \n updateForm(\n 'assessment_date',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n )\n }\n required\n />\n
\n
\n \n updateForm(\n 'planned_date_harvest',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n )\n }\n required\n />\n
\n
\n
\n updateForm('start_time', e?.toDate().getTime())}\n />\n updateForm('finish_time', e?.toDate().getTime())}\n />\n
\n
\n updateForm('ready_to_harvest', e.target.checked)}\n />\n
\n {customValues.map(x => (\n
\n {x.input_type === 'select' ? (\n <>\n updateCustomValue(x.field_id, v)}\n />\n \n ) : (\n updateCustomValue(x.field_id, e.target.value)}\n unit={x.unit}\n />\n )}\n
\n ))}\n
\n updateForm('comment', e.target.value)}\n />\n
\n
\n updateForm('images', f)}\n />\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n
\n );\n};\n\nexport default PaperAssessForm;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { selectMusselFarms } from '../../store/farms/farms.selector';\nimport { useMemo, useState } from 'react';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { Button, Datepicker, Dropdown, Input } from '../../components/shared';\nimport { sendSingleRequest } from '../../apis';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport { toMillisecond, toSecond } from '../../util/toggleSecondMillisecond';\nimport moment from 'moment';\nimport { toSecTimeTracks } from '../../components/shared/input/TimeTrackInput';\nimport DateTimePicker from '../../components/shared/datepicker/DateTimePicker';\nimport { IMusselLineResource } from '../../entities/farms.entities';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\nimport { selectInventories } from '../../store/inventories/inventories.selector';\n\nconst typeOptions = (lang: TLang | undefined) => [\n {\n id: 'IN',\n value: 'IN',\n label: translate(lang, 'Remove from line to inventory'),\n },\n { id: 'OUT', value: 'OUT', label: translate(lang, 'Added to the line') },\n];\n\ninterface IForm {\n quantity?: number;\n type: 'IN' | 'OUT';\n manage_date: number;\n start_time: number;\n finish_time: number;\n}\n\ninterface Props {\n formID: number;\n data: any;\n lineData: IMusselLineResource;\n}\n\nconst PaperFloatingForm = ({ formID, data, lineData }: Props) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectMusselFarms);\n const inventories = useSelector(selectInventories);\n\n const [curFarm, setCurFarm] = useState(\n farmsData.find(f => f.id === lineData.farm_id),\n );\n const [curLine, setCurLine] = useState(\n lineData,\n );\n const [curIvt, setCurIvt] = useState(\n inventories.find(i => i.id === data.inventory_id),\n );\n const [formData, setFormData] = useState({\n quantity: data.quantity,\n type: data.type ?? 'IN',\n manage_date: toMillisecond(data.manage_date),\n start_time: toMillisecond(data.start_time),\n finish_time: toMillisecond(data.finish_time),\n });\n const [disabled, setDisabled] = useState(false);\n\n const availableQty = useMemo(() => {\n if (!curIvt) return 0;\n if (formData.type === 'OUT') {\n return curIvt.available_quantity;\n } else {\n return (\n curLine?.growing_cycle?.inventories_sum.find(\n x => x.inventory_id === curIvt.id,\n )?.quantity ?? 0\n );\n }\n }, [curIvt, formData]);\n\n const selectInventory = (id: string) => {\n const ivt = inventories.find(x => x.id === Number(id));\n setCurIvt(ivt);\n };\n const updateForm = (key: keyof IForm, value: any) => {\n if (key === 'quantity') {\n value = value.length <= 0 ? undefined : Number(value);\n }\n setFormData(prev => ({ ...prev, [key]: value }));\n };\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'error',\n message: translate(lang, message),\n }),\n );\n const selectFarm = (v: string) => {\n const farm = farmsData.find(x => x.id === Number(v));\n setCurFarm(farm);\n setCurLine(undefined);\n };\n const selectLine = (v: string) => {\n const line = curFarm?.lines.find(x => x.id === Number(v));\n setCurLine(line);\n };\n const confirmClick = async () => {\n if (!curFarm || !curLine) {\n showError('Please select farm and line');\n return;\n }\n if (!curIvt) {\n showError('Please select inventory');\n return;\n }\n if (!formData.quantity) {\n showError('Please input quantity');\n return;\n }\n if (formData.quantity < 0 || formData.quantity > availableQty) {\n showError('Quantity is out of range');\n return;\n }\n const time_tracks = toSecTimeTracks([\n { start_time: formData.start_time, finish_time: formData.finish_time },\n ]);\n if (time_tracks === false) {\n showError('_invalid_time_range');\n return;\n }\n const submitData = {\n inventory_id: curIvt.id,\n quantity: formData.quantity,\n type: formData.type,\n seeding_id: curLine.growing_cycle?.main_seed.id ?? data.seeding_id,\n manage_date: toSecond(formData.manage_date),\n time_tracks,\n id: formID,\n };\n if (curLine.id !== lineData.id && !curLine.growing_cycle) {\n showError('The line is not seeded yet');\n return;\n }\n if (!submitData.seeding_id) {\n showError('The line is not seeded yet');\n return;\n }\n setDisabled(true);\n const res = await sendSingleRequest(\n submitData,\n 'POST',\n 'api/queue/confirm-inventory_seed',\n true,\n );\n if (res.status) {\n await dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Confirmed successfully'),\n }),\n );\n history.goBack();\n } else {\n setDisabled(false);\n showError(res.data?.message ?? 'Unknown error');\n }\n };\n\n const farmOptions = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }));\n const lineOptions = curFarm?.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n }));\n\n return (\n
\n
\n
\n selectFarm(v)}\n />\n
\n
\n selectLine(v)}\n />\n
\n
\n
\n \n updateForm(\n 'manage_date',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n )\n }\n required\n />\n
\n
\n
\n updateForm('start_time', e?.toDate().getTime())}\n required\n />\n
\n
\n updateForm('finish_time', e?.toDate().getTime())}\n required\n />\n
\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.name,\n }))}\n value={curIvt?.id.toString()}\n onChange={v => selectInventory(v)}\n />\n
\n
\n updateForm('type', v)}\n />\n
\n
\n updateForm('quantity', e.target.value)}\n />\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n
\n );\n};\n\nexport default PaperFloatingForm;\n","import moment from 'moment';\nimport { IMusselLineResource } from '../../entities/farms.entities';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { selectMusselFarms } from '../../store/farms/farms.selector';\nimport { useEffect, useRef, useState } from 'react';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport {\n Button,\n CheckboxButton,\n Datepicker,\n Dropdown,\n Input,\n Subtitle,\n} from '../../components/shared';\nimport DateTimePicker from '../../components/shared/datepicker/DateTimePicker';\nimport SignatureCanvas from 'react-signature-canvas';\nimport { toSecTimeTracks } from '../../components/shared/input/TimeTrackInput';\nimport { sendSingleRequest } from '../../apis';\nimport { loadFarmsData } from '../../store/farms/farms.actions';\nimport PicturesWall from '../../components/shared/pictures-wall/PicturesWall';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst getJSTime = (t: number | undefined) =>\n t ? t * 1000 : moment().toDate().getTime();\n\ninterface IFloat {\n inventory_id?: number;\n quantity?: number;\n}\n\ninterface IForm {\n company?: string;\n harvest_number?: string;\n vessel?: string;\n bags_quantity?: number;\n shell_length?: number;\n shell_length_max?: number;\n amount?: number;\n shell_condition?: string;\n tag_color?: string;\n port_of_unload?: string;\n crop_owner?: string;\n delivered_to?: string;\n packhouse?: string;\n is_final: boolean;\n backbone_ok: boolean;\n backbone_replace: boolean;\n flotation_on_farm: boolean;\n lights_ids_in_place: boolean;\n product_left_on_line: boolean;\n blues?: string;\n marine_waste?: string;\n mussel_type?: string;\n mussels?: string;\n meat_yield?: string;\n growing_area?: string;\n rope_bags_quantity?: string;\n complete_date: number;\n season_name?: string;\n start_time: number;\n finish_time: number;\n comment?: string;\n images?: any[];\n inventories?: IFloat[];\n}\n\nconst extractForm = (data: any, lineData: IMusselLineResource): IForm => ({\n company: data.company,\n season_name:\n data.season_name ?? lineData.growing_cycle?.main_seed.season_name,\n harvest_number: data.harvest_number,\n vessel: data.vessel,\n bags_quantity: data.bags_quantity,\n shell_length: data.shell_length,\n shell_length_max: data.shell_length_max,\n amount: data.amount,\n shell_condition: data.shell_condition,\n tag_color: data.tag_color,\n port_of_unload: data.port_of_unload,\n crop_owner: data.crop_owner,\n delivered_to: data.delivered_to,\n packhouse: data.packhouse,\n is_final: data.is_final ?? true,\n backbone_ok: data.backbone_ok ?? false,\n backbone_replace: data.backbone_replace ?? false,\n flotation_on_farm: data.flotation_on_farm ?? false,\n lights_ids_in_place: data.lights_ids_in_place ?? false,\n product_left_on_line: data.product_left_on_line ?? false,\n blues: data.blues,\n marine_waste: data.marine_waste,\n mussel_type: data.mussel_type,\n mussels: data.mussels,\n meat_yield: data.meat_yield,\n growing_area: data.growing_area,\n rope_bags_quantity: isNaN(Number(data.rope_bags_quantity))\n ? undefined\n : data.rope_bags_quantity,\n complete_date: getJSTime(data.complete_date),\n start_time: getJSTime(data.start_time),\n finish_time: getJSTime(data.finish_time),\n comment: data.comment,\n images: data.images,\n inventories: data.inventories ?? [],\n});\n\ninterface Props {\n formID: number;\n data: any;\n lineData: IMusselLineResource;\n}\n\nconst PaperHarvestForm = ({ formID, data, lineData }: Props) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const lang = useSelector(selectLang);\n\n const signatureCanvas = useRef();\n const farmsData = useSelector(selectMusselFarms);\n\n const [curFarm, setCurFarm] = useState(\n farmsData.find(x => x.id === lineData.farm_id),\n );\n const [curLine, setCurLine] = useState(\n lineData,\n );\n const [formData, setFormData] = useState(extractForm(data, lineData));\n const [sigCanLoaded, setSigCanLoaded] = useState(false);\n const [disabled, setDisabled] = useState(false);\n\n const selectFarm = (v: string) => {\n const farm = farmsData.find(x => x.id === Number(v));\n setCurFarm(farm);\n setCurLine(undefined);\n };\n const selectLine = (v: string) => {\n const line = curFarm?.lines.find(x => x.id === Number(v));\n setCurLine(line);\n };\n const updateForm = (key: keyof IForm, value: any) => {\n if (\n ['amount', 'shell_length', 'shell_length_max', 'bags_quantity'].includes(\n key,\n )\n ) {\n value = value.length <= 0 ? undefined : Number(value);\n }\n setFormData({ ...formData, [key]: value });\n };\n const showError = (message: string) =>\n dispatch(\n showFeedback({\n type: 'error',\n isMessage: true,\n message: translate(lang, message),\n }),\n );\n\n const farmOptions = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} - ${x.farm_number}`,\n }));\n const lineOptions = curFarm?.lines.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: x.line_name,\n }));\n const ivtSum = curLine?.growing_cycle?.inventories_sum ?? [];\n\n const changeInventory = (id: number, value: string) => {\n const newInventories = [...(formData.inventories ?? [])];\n const idx = newInventories.findIndex(x => x.inventory_id === id);\n if (idx >= 0) {\n newInventories[idx].quantity = Number(value);\n } else {\n newInventories.push({ inventory_id: id, quantity: Number(value) });\n }\n setFormData({ ...formData, inventories: newInventories });\n };\n const confirmClick = async () => {\n if (!curFarm || !curLine) {\n showError('Please select farm and line');\n return;\n }\n if (curLine.id !== lineData.id && !curLine.growing_cycle) {\n showError('_line_empty');\n return;\n }\n if (!formData.amount) {\n showError('Please input harvest amount');\n return;\n }\n if (!formData.shell_length || !formData.shell_length_max) {\n showError('Please input shell length range');\n return;\n }\n if (!formData.bags_quantity) {\n showError('Please input number of bags');\n return;\n }\n const { complete_date, start_time, finish_time, inventories, ...params } =\n formData;\n const time_tracks = toSecTimeTracks([{ start_time, finish_time }]);\n if (time_tracks === false) {\n showError('_invalid_time_range');\n return;\n }\n const ivtItems = inventories?.filter(x =>\n ivtSum.some(t => t.inventory_id === x.inventory_id),\n );\n if (ivtItems?.some(x => x.quantity && x.quantity < 0)) {\n showError('Please enter valid quantity');\n return;\n }\n if (\n ivtItems?.some(\n x =>\n x.quantity &&\n x.quantity &&\n ivtSum.some(\n t =>\n t.inventory_id === x.inventory_id &&\n t.quantity < (x.quantity ?? 0),\n ),\n )\n ) {\n showError('Floats quantity should not exceed the maximum value');\n return;\n }\n if (\n (ivtItems?.length !== ivtSum?.length ||\n ivtItems.some(i =>\n ivtSum.some(\n t => t.inventory_id === i.inventory_id && t.quantity !== i.quantity,\n ),\n )) &&\n !window.confirm('Are you sure to leave some floats?')\n )\n return;\n const submitData = {\n ...params,\n income: 0,\n complete_date: Math.floor(complete_date / 1000),\n time_tracks,\n signature: signatureCanvas.current?.toDataURL(),\n line_id: curLine.id,\n seeding_id: curLine.growing_cycle?.main_seed.id ?? data.seeding_id,\n is_full: true,\n id: formID,\n inventories: ivtItems\n ?.filter(x => x.quantity && x.quantity > 0)\n .map(x => ({\n inventory_id: x.inventory_id,\n quantity: x.quantity,\n seeding_id: curLine.growing_cycle?.main_seed.id ?? data.seeding_id,\n })),\n };\n if (!submitData.seeding_id) {\n showError('_line_empty');\n return;\n }\n setDisabled(true);\n const res = await sendSingleRequest(\n submitData,\n 'POST',\n 'api/queue/confirm-harvest/mussel',\n true,\n );\n if (res.status) {\n await dispatch(loadFarmsData());\n dispatch(\n showFeedback({\n isMessage: true,\n type: 'success',\n message: translate(lang, 'Confirmed successfully'),\n }),\n );\n history.goBack();\n } else {\n setDisabled(false);\n showError(res.data?.message ?? 'Unknown error');\n }\n };\n\n useEffect(() => {\n if (sigCanLoaded && data && data.signature) {\n signatureCanvas.current?.fromDataURL(data.signature);\n }\n }, [data, sigCanLoaded, signatureCanvas.current]);\n\n return (\n
\n
\n
\n selectFarm(v)}\n />\n
\n
\n selectLine(v)}\n />\n
\n
\n
\n
\n \n updateForm(\n 'complete_date',\n e?.toDate().getTime() ?? moment().toDate().getTime(),\n )\n }\n />\n
\n
\n updateForm('season_name', e.target.value)}\n />\n
\n
\n
\n updateForm('start_time', e?.toDate().getTime())}\n />\n updateForm('finish_time', e?.toDate().getTime())}\n />\n
\n
\n
\n updateForm('amount', e.target.value)}\n />\n
\n
\n updateForm('bags_quantity', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('shell_length', e.target.value)}\n />\n
\n
\n updateForm('shell_length_max', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('company', e.target.value)}\n />\n
\n
\n updateForm('harvest_number', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('vessel', e.target.value)}\n />\n
\n
\n updateForm('tag_color', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('port_of_unload', e.target.value)}\n />\n
\n
\n updateForm('crop_owner', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('delivered_to', e.target.value)}\n />\n
\n
\n updateForm('packhouse', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('is_final', e.target.checked)}\n />\n
\n
\n updateForm('product_left_on_line', e.target.checked)}\n checked={formData.product_left_on_line}\n label={translate(lang, 'Product left on line')}\n />\n
\n
\n
\n
\n updateForm('backbone_ok', e.target.checked)}\n checked={formData.backbone_ok}\n label={translate(lang, 'Backbone OK')}\n />\n
\n
\n updateForm('backbone_replace', e.target.checked)}\n checked={formData.backbone_replace}\n label={translate(lang, 'Backbone replace')}\n />\n
\n
\n
\n
\n updateForm('flotation_on_farm', e.target.checked)}\n checked={formData.flotation_on_farm}\n label={translate(lang, 'Flotation on farm')}\n />\n
\n
\n updateForm('lights_ids_in_place', e.target.checked)}\n checked={formData.lights_ids_in_place}\n label={translate(lang, 'Lights and IDs in place')}\n />\n
\n
\n
\n
\n updateForm('blues', e.target.value)}\n unit='%'\n />\n
\n
\n updateForm('marine_waste', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('meat_yield', e.target.value)}\n />\n
\n
\n updateForm('shell_condition', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('mussel_type', e.target.value)}\n />\n
\n
\n updateForm('growing_area', e.target.value)}\n />\n
\n
\n
\n
\n updateForm('mussels', e.target.value)}\n unit='mussels per kg'\n />\n
\n
\n updateForm('rope_bags_quantity', e.target.value)}\n />\n
\n
\n
\n updateForm('comment', e.target.value)}\n />\n
\n
\n

\n {translate(lang, 'Signature')}\n

\n \n {\n signatureCanvas.current = r;\n setSigCanLoaded(true);\n }}\n penColor='green'\n canvasProps={{ width: 550, height: 200 }}\n />\n
\n
\n
\n updateForm('images', f)}\n />\n
\n {ivtSum && ivtSum.length > 0 && (\n
\n \n {translate(lang, 'Returning floats')}\n \n {ivtSum.map(d => (\n
\n x.inventory_id === d.inventory_id)\n ?.quantity?.toString() ?? ''\n }\n onChange={e => changeInventory(d.inventory_id, e.target.value)}\n />\n
\n ))}\n
\n )}\n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n );\n};\n\nexport default PaperHarvestForm;\n","import { useCallback, useEffect, useState } from 'react';\nimport { Spinner, Title } from '../../components/shared';\nimport { sendSingleRequest } from '../../apis';\nimport { useParams } from 'react-router-dom';\nimport NotFound from '../static/NotFound';\nimport PaperSeedingForm from './PaperSeedingForm';\nimport { useDispatch } from 'react-redux';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport PaperAssessForm from './PaperAssessForm';\nimport PaperFloatingForm from './PaperFloatingForm';\nimport PaperHarvestForm from './PaperHarvestForm';\nimport { IMusselLineResource } from '../../entities/farms.entities';\nimport './styles.scss';\n\ninterface IForm {\n id: number;\n _type:\n | 'paper_seeding'\n | 'paper_assessment'\n | 'paper_floating'\n | 'paper_harvest';\n lineData: IMusselLineResource;\n image?: string;\n\n [key: string]: any;\n}\n\nconst PaperFormPage = () => {\n const dispatch = useDispatch();\n const params = useParams<{ id: string }>();\n\n const [data, setData] = useState();\n const [loading, setLoading] = useState(true);\n\n const loadData = useCallback(async () => {\n const res = await sendSingleRequest(\n {},\n 'GET',\n `api/queue/detail/${params.id}`,\n true,\n );\n setLoading(false);\n if (res.status) {\n setData(res.data);\n } else {\n dispatch(\n showFeedback({\n isMessage: true,\n message: res.data?.message ?? 'Unknown error',\n type: 'error',\n }),\n );\n }\n }, []);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return (\n
\n
\n
\n \n {`Paper ${data?._type.slice(6) ?? ''} form`}\n \n
\n {loading ? (\n \n ) : data ? (\n
\n
\n {data._type === 'paper_seeding' ? (\n \n ) : data._type === 'paper_assessment' ? (\n \n ) : data._type === 'paper_floating' ? (\n \n ) : data._type === 'paper_harvest' ? (\n \n ) : null}\n
\n
\n {data.image && (\n \n )}\n
\n
\n ) : (\n \n )}\n
\n
\n );\n};\n\nexport default PaperFormPage;\n","import { Modal, Table } from 'antd';\nimport {\n Button,\n CloseIcon,\n Input,\n Subtitle,\n Title,\n} from '../../components/shared';\nimport { useCallback, useEffect, useState } from 'react';\nimport { sendSingleRequest } from '../../apis';\nimport { useSelector } from 'react-redux';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\n\ninterface IRow {\n id: number;\n farm_id: number;\n farm_name: string;\n is_approved: boolean;\n}\n\ninterface IRequested extends IRow {\n owner_name: string;\n}\n\ninterface IShared extends IRow {\n user_name: string;\n}\n\ninterface IModalProps {\n visible: boolean;\n data: IShared;\n onCancel: () => void;\n onConfirm: () => void;\n}\n\nconst SharedModal = ({ visible, data, onCancel, onConfirm }: IModalProps) => {\n const lang = useSelector(selectLang);\n\n const [disabled, setDisabled] = useState(false);\n\n const approveClick = async (status: boolean) => {\n setDisabled(true);\n const response = await sendSingleRequest(\n { access_id: data.id, status },\n 'PUT',\n 'api/user/farm-access',\n true,\n );\n if (response.status) {\n window.alert(\n translate(lang, response.data?.message ?? 'Approved successfully'),\n );\n onConfirm();\n } else {\n window.alert(translate(lang, response.data?.message ?? 'Unknown error'));\n }\n };\n\n return (\n }\n >\n
\n
\n \n {translate(lang, 'Farm access request')}\n \n
\n
\n
\n \n {`${translate(lang, 'Farm')}: ${data.farm_name}`}\n \n
\n
\n \n {`${translate(lang, 'Requestor')}: ${data.user_name}`}\n \n
\n
\n \n {`${translate(lang, 'Status')}: ${translate(\n lang,\n data.is_approved ? 'Approved' : 'Pending',\n )}`}\n \n
\n
\n
\n
\n {!data.is_approved ? (\n <>\n approveClick(true)}\n disabled={disabled}\n >\n {translate(lang, 'Approve')}\n \n approveClick(false)}\n disabled={disabled}\n >\n {translate(lang, 'Decline')}\n \n \n ) : (\n \n {translate(lang, 'Close')}\n \n )}\n
\n \n );\n};\n\nconst r_columns = (lang: TLang | undefined): any => [\n {\n title: translate(lang, 'Farm ID'),\n key: 'farm_id',\n render: (x: IRequested) =>
{x.farm_id}
,\n },\n {\n title: translate(lang, 'Farm'),\n key: 'farm_name',\n render: (x: IRequested) =>
{x.farm_name}
,\n },\n {\n title: translate(lang, 'Owner'),\n key: 'owner_name',\n render: (x: IRequested) =>
{x.owner_name}
,\n },\n {\n title: translate(lang, 'Status'),\n key: 'is_approved',\n align: 'center',\n render: (x: IRequested) => (\n
{translate(lang, x.is_approved ? 'Approved' : 'Pending')}
\n ),\n },\n ],\n s_columns = (lang: TLang | undefined): any => [\n {\n title: translate(lang, 'Farm ID'),\n key: 'farm_id',\n render: (x: IShared) =>
{x.farm_id}
,\n },\n {\n title: translate(lang, 'Farm'),\n key: 'farm_name',\n render: (x: IShared) =>
{x.farm_name}
,\n },\n {\n title: translate(lang, 'Requestor'),\n key: 'user',\n render: (x: IShared) =>
{x.user_name}
,\n },\n {\n title: translate(lang, 'Status'),\n key: 'is_approved',\n align: 'center',\n render: (x: IShared) => (\n
{translate(lang, x.is_approved ? 'Approved' : 'Pending')}
\n ),\n },\n ];\n\nlet isTried = false;\n\nconst ExternalFarmAccessPage = () => {\n const lang = useSelector(selectLang);\n const profile = useSelector(selectProfile);\n const query = new URLSearchParams(useLocation().search);\n const history = useHistory();\n\n const [requested, setRequested] = useState([]);\n const [shared, setShared] = useState([]);\n const [disabled, setDisabled] = useState(false);\n const [visible, setVisible] = useState(false);\n const [farmNo, setFarmNo] = useState('');\n const [focShd, setFocShd] = useState();\n\n const loadData = useCallback(async (type: 'request' | 'shared') => {\n const res = await sendSingleRequest(\n { type },\n 'GET',\n 'api/user/farm-access',\n true,\n );\n if (res.status) {\n if (type === 'request') {\n setRequested(res.data);\n } else {\n setShared(res.data);\n }\n } else {\n window.alert(translate(lang, res.data?.message ?? 'Unknown error'));\n }\n }, []);\n\n const confirmClick = async () => {\n if (!farmNo) {\n window.alert('Please enter farm ID');\n return;\n }\n setDisabled(true);\n const res = await sendSingleRequest(\n { farm_id: farmNo },\n 'POST',\n 'api/user/farm-access',\n true,\n );\n if (res.status) {\n await loadData('request');\n setDisabled(false);\n setFarmNo('');\n setVisible(false);\n } else {\n setDisabled(false);\n window.alert(res.data?.message ?? 'Invalid farm id');\n }\n };\n\n useEffect(() => {\n loadData('request');\n if (profile?.role === 'owner') {\n loadData('shared');\n }\n }, [loadData, profile]);\n\n useEffect(() => {\n (async () => {\n const access_id = query.get('access_id'),\n status = query.get('status');\n\n if (!isTried && profile?.role === 'owner' && access_id && status) {\n isTried = true;\n const response = await sendSingleRequest(\n { access_id, status: status === 'approve' },\n 'PUT',\n 'api/user/farm-access',\n true,\n );\n history.replace('/external-farm-access');\n if (response.status) {\n window.alert(\n translate(\n lang,\n response.data?.message ??\n (status === 'approve'\n ? 'Approved successfully'\n : 'Declined successfully'),\n ),\n );\n await loadData('shared');\n } else {\n window.alert(\n translate(lang, response.data?.message ?? 'Unknown error'),\n );\n }\n }\n })();\n }, [query, profile]);\n\n return (\n
\n \n
\n \n {translate(lang, 'External Farm Access Requests')}\n \n
\n
\n setVisible(true)}\n >\n {translate(lang, 'Request farm access')}\n \n
\n
\n \n
\n {profile?.role === 'owner' && (\n <>\n
\n \n {translate(lang, 'My Shared Farms')}\n \n
\n
\n ({\n onClick: () => setFocShd(record),\n })}\n />\n
\n \n )}\n
\n {visible && (\n setVisible(false)}\n footer={null}\n closable\n closeIcon={}\n >\n
\n
\n \n {translate(lang, 'External Farm Access Requests')}\n \n
\n setFarmNo(e.target.value)}\n />\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n \n )}\n {!!focShd && (\n setFocShd(undefined)}\n onConfirm={() => {\n loadData('shared');\n setFocShd(undefined);\n }}\n />\n )}\n \n );\n};\n\nexport default ExternalFarmAccessPage;\n","import { useState } from 'react';\nimport { Alert, Checkbox, Table, Button as OrgButton, message } from 'antd';\nimport {\n Button,\n Datepicker,\n Dropdown,\n Input,\n Title,\n} from '../../components/shared';\nimport { sendMultipart, sendSingleRequest } from '../../apis';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { formatNumber } from '../../entities/util-functions';\nimport { selectBoats } from '../../store/users/users.selector';\nimport { IBoatResource } from '../../entities/boat.entities';\nimport moment from 'moment';\nimport { toSecTimeTracks } from '../../components/shared/input/TimeTrackInput';\nimport { toSecond } from '../../util/toggleSecondMillisecond';\nimport { getTaskData } from '../../store/tasks/tasks.actions';\nimport { updateUserMeta } from '../../store/auth/auth.actions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { componentTranslate, translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\nimport { selectCustomTasks } from '../../store/tasks/tasks.selector';\nimport { selectUtils } from '../../store/utils/utils.selector';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport './styles.scss';\n\ninterface IRow {\n id: number;\n date: number;\n start_time: string;\n finish_time: string;\n farm_id: number | null;\n line_id: number | null;\n client: string | null;\n inventory: string | null;\n comment: string | null;\n is_billable?: boolean;\n task_type?: string;\n}\n\ninterface ITaskRow {\n id: number;\n farm_id: number | null;\n farm_name: string;\n line_id: number | null;\n line_name: string;\n title: string;\n content: string | null;\n due_date: number;\n type: string;\n start_time: number;\n finish_time: number;\n is_billable: boolean;\n}\n\nconst taskColumns = (lang: TLang | undefined, customTask: any): any => [\n {\n title: translate(lang, 'Farm'),\n key: 'farm_name',\n render: (x: ITaskRow) => {x.farm_name},\n },\n {\n title: translate(lang, 'Line'),\n key: 'line_name',\n render: (x: ITaskRow) => {x.line_name},\n },\n {\n title: translate(lang, 'Title'),\n key: 'title',\n render: (x: ITaskRow) => {x.title},\n },\n {\n title: translate(lang, 'Content'),\n key: 'content',\n render: (x: ITaskRow) => {x.content},\n },\n {\n title: translate(lang, 'Due date'),\n key: 'due_date',\n render: (x: ITaskRow) => (\n {moment(x.due_date).format('DD.MM.YYYY')}\n ),\n },\n {\n title: translate(lang, 'Start time'),\n key: 'start_time',\n render: (x: ITaskRow) => {moment(x.start_time).format('H.mm')},\n },\n {\n title: translate(lang, 'Finish time'),\n key: 'finish_time',\n render: (x: ITaskRow) => (\n {moment(x.finish_time).format('H.mm')}\n ),\n },\n {\n title: translate(lang, 'Type'),\n key: 'type',\n align: 'left',\n render: (x: ITaskRow) => {x.type},\n },\n {\n title: translate(lang, 'Billable'),\n key: 'type',\n align: 'left',\n render: (x: ITaskRow) => {x.is_billable ? 'Yes' : 'No'},\n },\n];\n\nfunction getLastThreeMonthsMondays(): Date[] {\n const result: Date[] = [];\n const today = new Date();\n const threeMonthsAgo = new Date(\n today.getFullYear(),\n today.getMonth() - 3,\n today.getDate(),\n );\n\n let day = new Date(threeMonthsAgo);\n day.setDate(day.getDate() + ((1 + 7 - day.getDay()) % 7));\n\n while (day <= today) {\n if (day.getDay() === 1) {\n result.push(new Date(day));\n }\n day.setDate(day.getDate() + 7);\n }\n return result.reverse();\n}\n\nconst toDate = (d: number, h: string) => {\n let res = moment(d);\n if (h.includes('.')) {\n const t = h.split('.');\n res = res.set('hour', Number(t[0])).set('minute', Number(t[1]));\n } else {\n res = res.set('hour', Number(h)).set('minute', 0);\n }\n return res.toDate().getTime();\n};\n\nconst hoursDiff = (s1: string | null, s2: string | null) => {\n if (!s1) s1 = '0';\n if (!s2) s2 = '0';\n\n let t1 = s1.split('.').map(x => Number(x));\n if (t1.length < 2) t1.push(0);\n\n let t2 = s2.split('.').map(x => Number(x));\n if (t2.length < 2) t2.push(0);\n\n return formatNumber(t2[0] - t1[0] + (t2[1] - t1[1]) / 60);\n};\n\nconst captureActivity = (\n act: string | null | undefined,\n customTasks: string[],\n) =>\n !act\n ? 'GENERAL'\n : customTasks.find(x => x.toLowerCase() === act.toLowerCase()) ?? 'GENERAL';\n\nconst ImportTimeSheetPage = () => {\n const dispatch = useDispatch();\n const farmsData = useSelector(selectFarmsData);\n const boatsData = useSelector(selectBoats);\n const lang = useSelector(selectLang);\n const customTasks = useSelector(selectCustomTasks);\n const customers = useSelector(selectUtils).filter(x => x.type === 'customer');\n\n const farmsOption = farmsData.map(x => ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.farm_number} ${x.name}`,\n }));\n const mondayOptions = getLastThreeMonthsMondays().map(x => ({\n id: moment(x).format('YYYY-MM-DD'),\n value: moment(x).format('YYYY-MM-DD'),\n label: moment(x).format('DD MMMM YYYY'),\n }));\n\n const [disabled, setDisabled] = useState(false);\n const [data, setData] = useState([]);\n const [boat, setBoat] = useState();\n const [tasks, setTasks] = useState([]);\n const [monday, setMonday] = useState(mondayOptions[0].value);\n\n const importExcel = async () => {\n const file = document.createElement('input');\n file.type = 'file';\n file.accept =\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n file.click();\n file.onchange = async (e: any) => {\n if (!e.target.files || e.target.files.length <= 0) return;\n\n const form = new FormData();\n form.append('excel', e.target.files[0]);\n form.append('monday', monday);\n\n setDisabled(true);\n const response = await sendMultipart(\n form,\n 'POST',\n 'api/import/time-sheet',\n true,\n );\n setTasks([]);\n setDisabled(false);\n if (response.status) {\n const tmp = response.data.map((x: any) => ({\n ...x,\n date: moment(x.date).toDate().getTime(),\n task_type: captureActivity(\n x.activity,\n customTasks?.map(x => x.name) ?? [],\n ),\n is_billable:\n x.client && !customers.some(y => y.flag && y.name === x.client),\n }));\n setData(tmp);\n } else {\n window.alert(\n translate(lang, response.data?.message ?? 'Unknown error'),\n );\n }\n };\n file.remove();\n };\n const updateForm = (i: number, key: keyof IRow, value: any) => {\n let tmp: any = [...data];\n tmp[i][key] = value;\n if (key === 'client') {\n const ba = !customers.some(x => x.flag && x.name === value);\n tmp[i]['is_billable'] = ba;\n }\n setData(tmp);\n };\n const selectBoat = (v: string) => {\n setBoat(boatsData.find(x => x.id === Number(v)));\n };\n const previewClick = () => {\n if (data.filter(x => !!x.task_type).length <= 0) {\n window.alert(\n translate(lang, 'Please select at least one task to convert'),\n );\n return;\n }\n if (!boat) {\n window.alert(translate(lang, 'Please select a boat'));\n return;\n }\n const tasks: ITaskRow[] = data\n .filter(x => !!x.task_type)\n .map(x => {\n const farm = farmsData.find(y => y.id === x.farm_id);\n const line = farm?.lines.find(y => y.id === x.line_id);\n\n return {\n id: x.id,\n farm_id: farm?.id ?? null,\n line_id: line?.id ?? null,\n farm_name: farm?.name ?? '',\n line_name: line?.line_name ?? '',\n title: x.client ?? x.task_type ?? '',\n content: [x.inventory, x.comment].filter(y => !!y).join('\\n'),\n due_date: moment(x.date).toDate().getTime(),\n type: x.task_type ?? 'GENERAL',\n start_time: toDate(x.date, x.start_time),\n finish_time: toDate(x.date, x.finish_time),\n is_billable: x.is_billable ?? false,\n };\n });\n setTasks(tasks);\n };\n const confirmClick = async () => {\n if (tasks.length <= 0) return;\n\n let tasksCount = 0,\n actionsCount = 0;\n\n setDisabled(true);\n for (let task of tasks) {\n const tt = toSecTimeTracks([\n { start_time: task.start_time, finish_time: task.finish_time },\n ]);\n const form = {\n farm_id: task.farm_id,\n line_id: task.line_id,\n title: task.title,\n content: task.content,\n due_date: task.due_date,\n is_completed: true,\n boat_id: boat?.id,\n type: task.type,\n time_tracks: tt ? tt : undefined,\n is_billable: task.is_billable,\n };\n const response = await sendSingleRequest(\n form,\n 'POST',\n 'api/task/tasks',\n true,\n );\n if (!response.status) {\n message.error(\n translate(\n lang,\n 'Error when creating task %s: %s',\n form.title,\n response.data?.message,\n ),\n );\n continue;\n } else {\n message.success(\n translate(lang, 'Task %s is created successfully.', form.title),\n );\n tasksCount++;\n }\n const act = customTasks?.find(x => x.name === task.type);\n if (!act || !act.action) continue;\n\n const farm = farmsData.find(x => x.id === task.farm_id);\n if (!farm) {\n message.error(\n translate(lang, 'Farm is not exist for task %s', form.title),\n );\n continue;\n }\n const line = farm.lines.find(x => x.id === task.line_id);\n if (!line) {\n message.error(\n translate(lang, 'Line is not exist for task %s', form.title),\n );\n continue;\n }\n const task_id = response.data.id;\n if (act?.action === 'SEEDING') {\n const tmp = {\n line_id: line.id,\n planned_date_seed: toSecond(task.due_date),\n planned_date_harvest: toSecond(task.due_date),\n task_id,\n time_tracks: tt ? tt : undefined,\n comment: task.content,\n };\n const res = await sendSingleRequest(\n { type: 'seeding', data: tmp },\n 'POST',\n 'api/queue/entity',\n true,\n );\n if (!res.status) {\n message.error(\n translate(\n lang,\n 'Error when creating seeding validation for task %s: %s',\n form.title,\n res.data?.message,\n ),\n );\n } else {\n message.success(\n translate(\n lang,\n 'Seeding validation for task %s is created successfully.',\n form.title,\n ),\n );\n actionsCount++;\n }\n } else if (act?.action === 'ASSESSMENT') {\n if (!line.growing_cycle) {\n message.error(\n translate(\n lang,\n 'Error when creating assessment validation for task %s: Line %s is empty now.',\n form.title,\n line.line_name,\n ),\n );\n continue;\n }\n const tmp = {\n line_id: line.id,\n assessment_date: toSecond(task.due_date),\n planned_date_harvest: toSecond(task.due_date),\n seeding_id: line.growing_cycle.main_seed.id,\n task_id,\n time_tracks: tt ? tt : undefined,\n comment: task.content,\n };\n const res = await sendSingleRequest(\n { type: 'assessment', data: tmp },\n 'POST',\n 'api/queue/entity',\n true,\n );\n if (!res.status) {\n message.error(\n translate(\n lang,\n 'Error when creating assessment validation for task %s: %s',\n form.title,\n res.data?.message,\n ),\n );\n } else {\n message.success(\n translate(\n lang,\n 'Assessment validation for task %s is created successfully.',\n form.title,\n ),\n );\n actionsCount++;\n }\n } else if (act?.action === 'MAINTENANCE') {\n if (!line.growing_cycle) {\n message.error(\n translate(\n lang,\n 'Error when creating maintenance validation for task %s: Line %s is empty now.',\n form.title,\n line.line_name,\n ),\n );\n continue;\n }\n const tmp = {\n line_id: line.id,\n maintain_date: toSecond(task.due_date),\n seeding_id: line.growing_cycle.main_seed.id,\n task_id,\n time_tracks: tt ? tt : undefined,\n comment: task.content,\n };\n const res = await sendSingleRequest(\n { type: 'maintenance', data: tmp },\n 'POST',\n 'api/queue/entity',\n true,\n );\n if (!res.status) {\n message.error(\n translate(\n lang,\n 'Error when creating maintenance validation for task %s: %s',\n form.title,\n res.data?.message,\n ),\n );\n } else {\n message.success(\n translate(\n lang,\n 'Maintenance validation for task %s is created successfully.',\n form.title,\n ),\n );\n actionsCount++;\n }\n } else if (act?.action === 'HARVEST') {\n if (!line.growing_cycle) {\n message.error(\n translate(\n lang,\n 'Error when creating harvest validation for task %s: Line %s is empty now.',\n form.title,\n line.line_name,\n ),\n );\n continue;\n }\n const tmp = {\n line_id: line.id,\n complete_date: toSecond(task.due_date),\n task_id,\n time_tracks: tt ? tt : undefined,\n comment: task.content,\n };\n const res = await sendSingleRequest(\n { type: 'harvest', data: tmp },\n 'POST',\n 'api/queue/entity',\n true,\n );\n if (!res.status) {\n message.error(\n translate(\n lang,\n 'Error when creating harvest validation for task %s: %s',\n form.title,\n res.data?.message,\n ),\n );\n } else {\n message.success(\n translate(\n lang,\n 'Harvest validation for task %s is created successfully.',\n form.title,\n ),\n );\n actionsCount++;\n }\n }\n }\n await dispatch(updateUserMeta());\n setDisabled(false);\n dispatch(\n showFeedback({\n isMessage: true,\n message: translate(\n lang,\n 'Imported %s tasks and %s validations',\n tasksCount,\n actionsCount,\n ),\n type: 'success',\n }),\n );\n await dispatch(getTaskData());\n };\n const getAction = (t: string | undefined) =>\n customTasks?.find(x => x.name === t)?.action;\n\n const columns: any = [\n {\n title: translate(lang, 'Date'),\n key: 'date',\n width: 170,\n render: (a: any, x: IRow, i: number) => (\n
\n
\n {moment(x.date).format('dddd')}\n
\n e && updateForm(i, 'date', e.toDate().getTime())}\n disabled={disabled}\n format='DD MMMM YYYY'\n />\n
\n ),\n },\n {\n title: translate(lang, 'Start time'),\n key: 'start_time',\n width: 80,\n render: (a: any, x: IRow, i: number) => (\n updateForm(i, 'start_time', e.target.value)}\n value={x.start_time ?? ''}\n />\n ),\n },\n {\n title: translate(lang, 'Finish time'),\n key: 'finish_time',\n width: 80,\n render: (a: any, x: IRow, i: number) => (\n updateForm(i, 'finish_time', e.target.value)}\n value={x.finish_time ?? ''}\n />\n ),\n },\n {\n title: translate(lang, 'Farm'),\n key: 'farm_id',\n render: (a: any, x: IRow, i: number) => (\n
\n {\n if (v) {\n updateForm(i, 'farm_id', Number(v));\n updateForm(i, 'line_id', null);\n }\n }}\n value={x.farm_id?.toString()}\n />\n
\n ),\n },\n {\n title: translate(lang, 'Line'),\n key: 'line_id',\n render: (a: any, x: IRow, i: number) => (\n
\n y.id === x.farm_id)\n ?.lines.map(y => ({\n id: y.id.toString(),\n value: y.id.toString(),\n label: y.line_name,\n })) ?? []\n }\n onChange={v => v && updateForm(i, 'line_id', Number(v))}\n value={x.line_id?.toString()}\n />\n
\n ),\n },\n {\n title: translate(lang, 'Client'),\n key: 'client',\n render: (a: any, x: IRow, i: number) => (\n ({\n id: x.name,\n value: x.name,\n label: x.name,\n }))}\n value={x.client ?? undefined}\n onChange={v => updateForm(i, 'client', v)}\n />\n ),\n },\n {\n title: translate(lang, 'Inventory'),\n key: 'inventory',\n render: (a: any, x: IRow, i: number) => (\n updateForm(i, 'inventory', e.target.value)}\n value={x.inventory ?? ''}\n />\n ),\n },\n {\n title: translate(lang, 'Comment'),\n key: 'comment',\n render: (a: any, x: IRow, i: number) => (\n updateForm(i, 'comment', e.target.value)}\n value={x.comment ?? ''}\n />\n ),\n },\n {\n title: translate(lang, 'Total hours'),\n key: 'total_time',\n align: 'center',\n render: (a: any, x: IRow, i: number) => (\n
{hoursDiff(x.start_time, x.finish_time)}
\n ),\n },\n {\n title: translate(lang, 'Billable'),\n key: 'billable',\n align: 'center',\n render: (a: any, x: IRow, i: number) => (\n updateForm(i, 'is_billable', e.target.checked)}\n />\n ),\n },\n {\n title: translate(lang, 'Convert to task'),\n key: 'action',\n width: 180,\n align: 'left',\n render: (a: any, x: IRow, i: number) => (\n ({\n id: y.name,\n value: y.name,\n label: y.name,\n })) ?? []\n }\n value={x.task_type}\n onChange={v => updateForm(i, 'task_type', v)}\n />\n ),\n },\n ];\n\n const totalHours = formatNumber(\n data.reduce(\n (p, c) => p + Number(hoursDiff(c.start_time, c.finish_time)),\n 0,\n ),\n );\n\n return (\n
\n
\n
\n \n {translate(lang, 'Import timesheet')}\n \n
\n
\n
\n
\n setMonday(v)}\n />\n
\n
\n \n {translate(lang, 'Download Template')}\n \n
\n
\n \n {translate(lang, 'Import Excel')}\n \n
\n
\n
\n \n \n {`${translate(lang, 'Total hours')}: ${totalHours}`}\n
\n
\n
\n
\n ({\n id: x.id.toString(),\n value: x.id.toString(),\n label: `${x.name} ${x.reg_number}`,\n }))}\n value={boat?.id.toString()}\n onChange={v => selectBoat(v)}\n />\n
\n
\n \n {translate(lang, 'Preview import')}\n \n
\n
\n {tasks.length > 0 && (\n
\n \n
\n \n
\n
    \n
  • \n {componentTranslate(\n lang,\n '%s generic tasks',\n \n {tasks.filter(x => !getAction(x.type)).length}\n ,\n )}\n
  • \n
  • \n {componentTranslate(\n lang,\n '%s seedings',\n \n {\n tasks.filter(\n x => getAction(x.type) === 'SEEDING',\n ).length\n }\n ,\n )}\n
  • \n
  • \n {componentTranslate(\n lang,\n '%s harvests',\n \n {\n tasks.filter(\n x => getAction(x.type) === 'HARVEST',\n ).length\n }\n ,\n )}\n
  • \n
  • \n {componentTranslate(\n lang,\n '%s assessments',\n \n {\n tasks.filter(\n x => getAction(x.type) === 'ASSESSMENT',\n ).length\n }\n ,\n )}\n
  • \n
  • \n {componentTranslate(\n lang,\n '%s maintenances',\n \n {\n tasks.filter(\n x => getAction(x.type) === 'MAINTENANCE',\n ).length\n }\n ,\n )}\n
  • \n
\n
\n \n {translate(lang, '_import_validation_warning')}\n \n
\n
\n
\n \n {translate(lang, 'Confirm')}\n \n
\n
\n }\n showIcon={true}\n type='info'\n closable={false}\n />\n
\n
\n )}\n
\n \n \n );\n};\n\nexport default ImportTimeSheetPage;\n","import { Pie } from 'react-chartjs-2';\nimport { IFarmResource } from '../../entities/farms.entities';\nimport { useMemo } from 'react';\nimport { Button } from 'antd';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\ninterface Props {\n farms: IFarmResource[];\n}\n\nconst FarmsOverviewChart = ({ farms }: Props) => {\n const lang = useSelector(selectLang);\n\n const data = useMemo(() => {\n let emptyCnt = 0,\n growingCnt = 0;\n for (let farm of farms) {\n const emp = farm.lines.filter(x => !x.growing_cycle).length;\n emptyCnt += emp;\n growingCnt += farm.lines.length - emp;\n }\n return {\n labels: ['Growing lines', 'Empty lines'],\n datasets: [\n {\n label: 'All Farms Overview',\n data: [growingCnt, emptyCnt],\n backgroundColor: [\n 'rgba(54, 162, 235, 0.2)',\n 'rgba(255, 99, 132, 0.2)',\n ],\n borderColor: ['rgba(54, 162, 235, 1)', 'rgba(255, 99, 132, 1)'],\n borderWidth: 1,\n },\n ],\n };\n }, [farms]);\n\n return (\n
\n
\n \n
\n \n \n \n
\n );\n};\n\nexport default FarmsOverviewChart;\n","import { useEffect, useMemo, useState } from 'react';\nimport { IHarvestResource } from '../../entities/growing.entities';\nimport { toMillisecond, toSecond } from '../../util/toggleSecondMillisecond';\nimport { Bar } from 'react-chartjs-2';\nimport { sendSingleRequest } from '../../apis';\nimport { Spinner, Subtitle } from '../../components/shared';\nimport { Link } from 'react-router-dom';\nimport { Button } from 'antd';\nimport moment from 'moment';\nimport { useSelector } from 'react-redux';\nimport { selectTasks } from '../../store/tasks/tasks.selector';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nfunction getLastSixMonths(): string[] {\n const months = [];\n const date = new Date();\n for (let i = 5; i >= 0; i--) {\n const d = new Date(date.getFullYear(), date.getMonth() - i, 1);\n months.push(d.toLocaleString('default', { month: 'long' }));\n }\n return months;\n}\n\nconst PerformanceCharts = () => {\n const tasks = useSelector(selectTasks);\n const farms = useSelector(selectFarmsData);\n const lang = useSelector(selectLang);\n\n const [harvests, setHarvests] = useState([]);\n const [loadingHarvests, setLoadingHarvests] = useState(false);\n const [loadingPerformance, setLoadingPerformance] = useState(false);\n const [performance, setPerformance] = useState({\n harvests: 0,\n assessments: 0,\n seedings: 0,\n maintenances: 0,\n tasks: 0,\n });\n\n const harvestsData = useMemo(() => {\n const months = getLastSixMonths();\n let musselSums: number[] = months.map(x => 0),\n oysterSums: number[] = months.map(x => 0);\n for (let harvest of harvests) {\n const month = new Date(\n toMillisecond(harvest.complete_date),\n ).toLocaleString('default', { month: 'long' });\n\n const index = months.indexOf(month);\n if (index >= 0) {\n const f = farms.find(x => x.id === harvest.line.farm_id);\n if (f?.type === 'MUSSEL') {\n musselSums[index] += harvest.amount;\n } else if (f?.type === 'OYSTER') {\n oysterSums[index] += harvest.amount;\n }\n }\n }\n let datasets = [\n {\n data: musselSums,\n backgroundColor: 'rgba(54, 162, 235, 0.2)',\n borderColor: 'rgba(54, 162, 235, 1)',\n borderWidth: 1,\n label: translate(lang, 'Mussels'),\n },\n ];\n if (!musselSums.some(x => x > 0)) {\n datasets = [];\n }\n if (oysterSums.some(y => y > 0)) {\n datasets.push({\n data: oysterSums,\n backgroundColor: 'rgba(22, 163, 74, 0.2)',\n borderColor: 'rgba(22, 163, 74, 1)',\n borderWidth: 1,\n label: translate(lang, 'Oysters'),\n });\n }\n return {\n labels: months,\n datasets,\n };\n }, [harvests, farms]);\n\n const performData = useMemo(\n () => ({\n labels: [\n translate(lang, 'Harvest completed'),\n translate(lang, 'Assessments'),\n translate(lang, 'Seeding jobs'),\n translate(lang, 'Maintenance jobs'),\n translate(lang, 'Tasks completed'),\n ],\n datasets: [\n {\n data: [\n performance.harvests,\n performance.assessments,\n performance.seedings,\n performance.maintenances,\n performance.tasks,\n ],\n backgroundColor: 'rgba(54, 162, 235, 0.2)',\n borderColor: 'rgba(54, 162, 235, 1)',\n borderWidth: 1,\n },\n ],\n }),\n [performance],\n );\n\n useEffect(() => {\n (async () => {\n setLoadingHarvests(true);\n const today = new Date();\n const fDay = new Date(today.getFullYear(), today.getMonth() - 6, 1);\n const min_date = toSecond(today.getTime());\n const max_date = toSecond(fDay.getTime());\n const response = await sendSingleRequest(\n { min_date, max_date, is_final: true },\n 'GET',\n 'api/overview/harvests',\n true,\n );\n setLoadingHarvests(false);\n if (response.status) {\n setHarvests(response.data.data);\n } else {\n window.alert(\n translate(lang, response.data?.message ?? 'Unknown error'),\n );\n }\n })();\n\n (async () => {\n setLoadingPerformance(true);\n const min_date = toSecond(\n moment().add(-30, 'days').startOf('day').toDate().getTime(),\n );\n const max_date = toSecond(\n moment().add(1, 'days').endOf('day').toDate().getTime(),\n );\n const response = await sendSingleRequest(\n { min_date, max_date },\n 'GET',\n 'api/overview/entries',\n true,\n );\n setLoadingPerformance(false);\n if (response.status) {\n const seedings = response.data.seedings.length;\n const assessments = response.data.assessments.length;\n const maintenances = response.data.maintenances.length;\n const harvests = response.data.harvests.length;\n setPerformance(prev => ({\n ...prev,\n seedings,\n assessments,\n maintenances,\n harvests,\n }));\n } else {\n window.alert(\n translate(lang, response.data?.message ?? 'Unknown error'),\n );\n }\n })();\n }, []);\n\n useEffect(() => {\n const cnt = tasks.filter(\n x =>\n x.is_completed &&\n x.updated_at &&\n x.updated_at >=\n toSecond(moment().add(-30, 'days').startOf('day').toDate().getTime()),\n ).length;\n setPerformance(prev => ({\n ...prev,\n tasks: cnt,\n }));\n }, [tasks]);\n\n return (\n
\n
\n \n {translate(lang, 'Final Harvest Performance')}\n {harvestsData.datasets.length > 1\n ? ' (kgs/dozens)'\n : harvestsData.datasets.length <= 0 ||\n harvestsData.datasets[0].label === 'Mussels'\n ? ' (kgs)'\n : ' (dozens)'}\n \n {loadingHarvests ? (\n
\n \n
\n ) : (\n
\n 1 ? true : false,\n },\n },\n scales: {\n y: {\n beginAtZero: true,\n },\n },\n }}\n />\n
\n )}\n \n \n \n
\n
\n \n {translate(lang, 'Farm Performance %s days', 30)}\n \n {loadingPerformance ? (\n
\n \n
\n ) : (\n
\n \n
\n )}\n \n \n \n
\n
\n );\n};\n\nexport default PerformanceCharts;\n","import { useSelector } from 'react-redux';\nimport { selectTasks } from '../../store/tasks/tasks.selector';\nimport { useState } from 'react';\nimport { ITaskResource } from '../../entities/task.entities';\nimport ModalTask from '../../components/todo/ModalTask';\nimport { Link } from 'react-router-dom';\nimport { Button } from 'antd';\nimport { TLang } from '../../entities/ui.entities';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\n\ninterface RowProps {\n tasks: ITaskResource[];\n label: string;\n color: string;\n onTaskClick: (t: ITaskResource) => void;\n onAddClick: () => void;\n lang: TLang | undefined;\n}\n\nconst Row = ({\n tasks,\n label,\n color,\n onTaskClick,\n onAddClick,\n lang,\n}: RowProps) => (\n
\n
\n {`${label} | ${tasks.length}`}\n
\n
\n {tasks.map(task => (\n onTaskClick(task)}\n >\n {task.title}\n
\n ))}\n \n
\n \n);\n\nconst todayDate = new Date().getDate();\nconst todayTimestamp = new Date().getTime();\n\nconst CalendarView = () => {\n const lang = useSelector(selectLang);\n const tasks: ITaskResource[] = useSelector(selectTasks) as any;\n const yesterday = tasks\n ?.filter(x => new Date(x.due_date).getDate() === todayDate - 1)\n .slice(0, 5);\n const today = tasks\n ?.filter(x => new Date(x.due_date).getDate() === todayDate)\n .slice(0, 5);\n const tomorrow = tasks\n ?.filter(x => new Date(x.due_date).getDate() === todayDate + 1)\n .slice(0, 5);\n\n const [newTaskDate, setNewTaskDate] = useState();\n const [viewTask, setViewTask] = useState();\n\n return (\n
\n
\n setViewTask(t)}\n onAddClick={() => setNewTaskDate(todayTimestamp - 86400000)}\n lang={lang}\n />\n
\n setViewTask(t)}\n onAddClick={() => setNewTaskDate(todayTimestamp)}\n lang={lang}\n />\n
\n setViewTask(t)}\n onAddClick={() => setNewTaskDate(todayTimestamp + 86400000)}\n lang={lang}\n />\n {!!newTaskDate && (\n setNewTaskDate(undefined)}\n data={{ due_date: newTaskDate }}\n onConfirm={() => setNewTaskDate(undefined)}\n />\n )}\n {!!viewTask && (\n setViewTask(undefined)}\n onCancel={() => setViewTask(undefined)}\n />\n )}\n
\n \n \n \n
\n );\n};\n\nexport default CalendarView;\n","import { useEffect, useState } from 'react';\nimport { Subtitle } from '../../components/shared';\nimport { IBoatMessage } from '../../entities/boat.entities';\nimport boat_png from '../../images/boat.png';\nimport { toMillisecond } from '../../util/toggleSecondMillisecond';\nimport moment from 'moment';\nimport { sendSingleRequest } from '../../apis';\nimport { useSelector } from 'react-redux';\nimport { selectBoats } from '../../store/users/users.selector';\nimport { hashColor } from '../../entities/util-functions';\nimport { Link } from 'react-router-dom';\nimport { Button } from 'antd';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\n\nconst MessagesView = () => {\n const boats = useSelector(selectBoats);\n const lang = useSelector(selectLang);\n\n const [messages, setMessages] = useState([]);\n\n useEffect(() => {\n (async () => {\n const response = await sendSingleRequest(\n { limit: 5 },\n 'GET',\n 'api/boat-message/messages',\n true,\n );\n if (response.status) {\n setMessages(response.data);\n } else {\n window.alert(\n translate(lang, response.data?.message ?? 'Something went wrong'),\n );\n }\n })();\n }, []);\n\n return (\n \n \n {translate(lang, 'Recent Chats')}\n \n
\n {messages.map(msg => (\n
\n x.id === msg.boat_id)?.reg_number ?? '',\n ),\n }}\n >\n boat\n
\n
\n
{msg.content}
\n
\n {moment(toMillisecond(msg.created_at)).format('dddd hh:mm a')}\n
\n
\n
\n ))}\n \n \n \n \n \n );\n};\n\nexport default MessagesView;\n","import { Link } from 'react-router-dom';\nimport { Spinner, Subtitle } from '../../components/shared';\nimport { IFarmResource } from '../../entities/farms.entities';\nimport { Button, Table } from 'antd';\nimport { useEffect, useState } from 'react';\nimport { sendSingleRequest } from '../../apis';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { formatNumber } from '../../entities/util-functions';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { TLang } from '../../entities/ui.entities';\nimport { getEstHarvestDate } from '../../lib/farm.helpers';\n\ninterface ILineData {\n farm: {\n id: number;\n name: string;\n farm_number: string;\n };\n line: {\n id: number;\n line_name: string;\n length: number;\n };\n previous?: {\n harvest_amount: number;\n };\n}\n\ninterface IRow {\n id: number;\n estimated_date: number;\n farm: string;\n line: string;\n last_assessment_date: string;\n harvest_amount: string;\n link: string;\n}\n\nconst columns = (lang: TLang | undefined) => [\n {\n key: 'estimated_date',\n dataIndex: 'estimated_date',\n title: translate(lang, 'Estimated Harvest Date'),\n render: (x: number) => {defaultDateFormat(x)},\n },\n {\n key: 'farm',\n title: translate(lang, 'Farm/Line'),\n render: (x: any) => {`${x.farm}/${x.line}`},\n },\n {\n key: 'last_assessment_date',\n dataIndex: 'last_assessment_date',\n title: translate(lang, 'Last assessment date'),\n render: (x: any) => {x},\n },\n {\n key: 'harvest_amount',\n dataIndex: 'harvest_amount',\n title: translate(lang, 'Last Season Harvest'),\n render: (x: any) => {x},\n },\n {\n key: 'link',\n title: '',\n dataIndex: 'link',\n render: (x: any) => (\n \n \n \n ),\n },\n];\n\ninterface Props {\n farms: IFarmResource[];\n}\n\nconst UpcomingHarvests = ({ farms }: Props) => {\n const lang = useSelector(selectLang);\n\n const [loading, setLoading] = useState(false);\n const [rows, setRows] = useState([]);\n\n useEffect(() => {\n (async () => {\n setLoading(true);\n const res = await sendSingleRequest(\n {},\n 'POST',\n 'api/overview/lines-performance',\n true,\n );\n setLoading(false);\n if (res.status) {\n const performs: ILineData[] = res.data;\n let result: IRow[] = [];\n for (let farm of farms) {\n for (let line of farm.lines) {\n if (!line.growing_cycle) continue;\n const lastAss = line.growing_cycle.last_assessment;\n const pfm = performs.find(\n x => x.farm.id === farm.id && x.line.id === line.id,\n );\n\n result.push({\n id: line.id,\n estimated_date: getEstHarvestDate(line) ?? 0,\n farm: farm.name,\n line: line.line_name,\n last_assessment_date: lastAss\n ? defaultDateFormat(lastAss.assessment_date) ?? '-'\n : '-',\n harvest_amount:\n pfm && pfm.previous\n ? `${formatNumber(pfm.previous.harvest_amount)} ${\n farm.type === 'MUSSEL' ? ' kg' : ' dozens'\n }`\n : '-',\n link: `/farms/${farm.id}/${line.id}`,\n });\n }\n }\n result.sort((a, b) => a.estimated_date - b.estimated_date);\n result = result.slice(0, 7);\n setRows(result);\n } else {\n window.alert(\n translate(lang, res.data?.message ?? 'Something went wrong'),\n );\n }\n })();\n }, [farms]);\n\n return (\n
\n \n {translate(lang, 'Upcoming Harvests')}\n \n {loading ? (\n
\n \n
\n ) : (\n
\n \n
\n )}\n \n \n \n
\n );\n};\n\nexport default UpcomingHarvests;\n","import { useSelector } from 'react-redux';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { Title } from '../../components/shared';\nimport moment from 'moment';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport FarmsOverviewChart from './FarmsOverviewChart';\nimport HarvestPerformanceChart from './PerformanceCharts';\nimport CalendarView from './CalendarView';\nimport MessagesView from './MessagesView';\nimport UpcomingHarvests from './UpcomingHarvests';\nimport { useEffect, useState } from 'react';\nimport { IFarmWeatherResource } from '../../entities/farms.entities';\nimport { sendSingleRequest } from '../../apis';\nimport { formatNumber } from '../../entities/util-functions';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport 'chart.js/auto';\nimport './styles.scss';\n\nconst oneKnot = 1.94384;\n\ninterface IWeather {\n temperature: number;\n wind: number;\n}\n\nconst HomePage = () => {\n const profile = useSelector(selectProfile);\n const farmsData = useSelector(selectFarmsData);\n const lang = useSelector(selectLang);\n\n const [weather, setWeather] = useState();\n\n useEffect(() => {\n (async () => {\n const min_date = moment().startOf('day').toDate().getTime();\n const max_date = moment().endOf('day').toDate().getTime();\n const farm = farmsData.find(f => f.bounds && f.bounds.length > 0);\n if (!farm) return;\n\n const response = await sendSingleRequest(\n { min_date, max_date, farm_id: farm.id },\n 'GET',\n 'api/farm/weather',\n true,\n );\n if (!response.status || response.data.length <= 0) return;\n const data: IFarmWeatherResource[] = response.data;\n let temp = 0,\n wind_u = 0,\n wind_v = 0;\n for (let d of data) {\n temp += Number(d.temperature);\n wind_u += Number(d.wind_u);\n wind_v += Number(d.wind_v);\n }\n temp /= data.length;\n wind_u /= data.length;\n wind_v /= data.length;\n const wind = Math.sqrt(wind_u * wind_u + wind_v * wind_v);\n setWeather({ temperature: temp, wind: wind * oneKnot });\n })();\n }, [farmsData]);\n\n return (\n
\n
\n
\n \n {`${translate(\n lang,\n 'Hello %s, today is %s',\n profile?.name,\n moment().format('D of MMMM YYYY'),\n )}${\n weather\n ? `, ${translate(\n lang,\n 'It will be %s °C at noon and wind will be %s knots.',\n formatNumber(weather.temperature),\n formatNumber(weather.wind),\n )}`\n : ''\n }`}\n \n
\n
\n
\n \n \n
\n
\n \n \n \n
\n
\n
\n
\n );\n};\n\nexport default HomePage;\n","import { useSelector } from 'react-redux';\nimport { Spinner, Title } from '../../components/shared';\nimport { translate } from '../../lib/lang.helper';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Button, Table } from 'antd';\nimport { selectOysterFarms } from '../../store/farms/farms.selector';\nimport { formatNumber } from '../../entities/util-functions';\nimport { sendSingleRequest } from '../../apis';\nimport { IName } from '../../entities/general.entities';\nimport ReactExport from 'react-data-export';\nimport { NavLink } from 'react-router-dom';\n\nconst ExcelFile = ReactExport.ExcelFile;\nconst ExcelSheet = (ExcelFile as any).ExcelSheet;\n\ninterface ICol {\n key: string;\n title: string | ReactElement;\n render: (data: any) => string | ReactElement;\n width?: number;\n fixed?: any;\n dataIndex?: string;\n minWidth?: number;\n}\n\ninterface IRow {\n key: number | string;\n isBold?: boolean;\n label: string;\n [key: string]: any;\n}\n\ninterface IIvt {\n id: number;\n label: string;\n qty: number;\n}\n\ninterface IStep {\n step: number;\n amount: number;\n}\n\ninterface ISpat {\n id: number;\n source: string;\n amount: number;\n}\n\ninterface ICell {\n key: string;\n onHand: {\n oysters: number;\n ready: number;\n wait: number;\n notFull: number;\n percentFull: number;\n basketCapacity: number;\n basketUsed: number;\n };\n linesCount: {\n ready: number;\n growing: number;\n notFull: number;\n total: number;\n };\n stages: IStep[];\n spats: ISpat[];\n inventories: IIvt[];\n}\n\ninterface ISeed {\n id: number;\n spat_storage: { id: number; source: string } | null;\n spat_amount: number;\n stage: number;\n}\n\ninterface IStage {\n farm: IName;\n line: { id: number; line_name: string };\n seedings: ISeed[];\n}\n\nconst OysterSummaryPage = () => {\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectOysterFarms);\n\n const [loading, setLoading] = useState(false);\n const [rotations, setRotations] = useState([]);\n\n const { columns, data, excel } = useMemo(() => {\n const headers = [\n { title: 'Location' },\n ...farmsData.map(x => ({ title: `${x.name} (${x.farm_number})` })),\n { title: 'Total' },\n ];\n let totalCell: ICell = {\n key: 'total',\n onHand: {\n oysters: 0,\n ready: 0,\n wait: 0,\n notFull: 0,\n percentFull: 0,\n basketCapacity: 0,\n basketUsed: 0,\n },\n linesCount: { ready: 0, growing: 0, notFull: 0, total: 0 },\n inventories: [],\n stages: [],\n spats: [],\n };\n const farmCells: ICell[] = farmsData.map(farm => {\n let onHand = {\n oysters: 0,\n ready: 0,\n wait: 0,\n notFull: 0,\n percentFull: 0,\n basketCapacity: 0,\n basketUsed: 0,\n };\n let linesCount = {\n ready: 0,\n growing: 0,\n notFull: 0,\n total: 0,\n };\n let inventories: IIvt[] = [];\n for (const line of farm.lines) {\n if (line.growing_cycle) {\n onHand.oysters += line.growing_cycle.current_amount_dz;\n if (line.growing_cycle.ready_harvest) {\n onHand.ready += line.growing_cycle.current_amount_dz;\n linesCount.ready++;\n } else {\n onHand.wait += line.growing_cycle.current_amount_dz;\n }\n if (line.basket_count > line.growing_cycle.current_basket_count) {\n onHand.notFull += line.growing_cycle.current_basket_count;\n linesCount.notFull++;\n }\n onHand.basketUsed += line.growing_cycle.current_basket_count;\n linesCount.growing++;\n for (const ivt of line.growing_cycle.inventories_sum) {\n const i = inventories.findIndex(x => x.id === ivt.inventory_id);\n if (i < 0) {\n inventories.push({\n id: ivt.inventory_id,\n label: ivt.inventory_name,\n qty: ivt.quantity,\n });\n } else {\n inventories[i].qty += ivt.quantity;\n }\n }\n }\n onHand.basketCapacity += line.basket_count;\n }\n onHand.percentFull = onHand.basketCapacity\n ? (100 * onHand.basketUsed) / onHand.basketCapacity\n : 0;\n for (const ivt of inventories) {\n const i = totalCell.inventories.findIndex(x => x.id === ivt.id);\n if (i < 0) {\n totalCell.inventories.push({ ...ivt });\n } else {\n totalCell.inventories[i].qty += ivt.qty;\n }\n }\n totalCell.onHand.oysters += onHand.oysters;\n totalCell.onHand.ready += onHand.ready;\n totalCell.onHand.wait += onHand.wait;\n totalCell.onHand.notFull += onHand.notFull;\n totalCell.onHand.basketCapacity += onHand.basketCapacity;\n totalCell.onHand.basketUsed += onHand.basketUsed;\n totalCell.linesCount.ready += linesCount.ready;\n totalCell.linesCount.growing += linesCount.growing;\n totalCell.linesCount.notFull += linesCount.notFull;\n linesCount.total = farm.lines.length;\n totalCell.linesCount.total += farm.lines.length;\n\n let stages: IStep[] = [];\n let spats: ISpat[] = [];\n const items = rotations.filter(x => x.farm.id === farm.id);\n for (let item of items) {\n for (let sd of item.seedings) {\n let i = stages.findIndex(x => x.step === sd.stage);\n if (i < 0) {\n stages.push({ step: sd.stage, amount: sd.spat_amount });\n } else {\n stages[i].amount += sd.spat_amount;\n }\n i = totalCell.stages.findIndex(x => x.step === sd.stage);\n if (i < 0) {\n totalCell.stages.push({ step: sd.stage, amount: sd.spat_amount });\n } else {\n totalCell.stages[i].amount += sd.spat_amount;\n }\n if (sd.spat_storage) {\n i = spats.findIndex(x => x.id === sd.spat_storage?.id);\n if (i < 0) {\n spats.push({\n id: sd.spat_storage.id,\n source: sd.spat_storage.source,\n amount: sd.spat_amount,\n });\n } else {\n spats[i].amount += sd.spat_amount;\n }\n i = totalCell.spats.findIndex(x => x.id === sd.spat_storage?.id);\n if (i < 0) {\n totalCell.spats.push({\n id: sd.spat_storage.id,\n source: sd.spat_storage.source,\n amount: sd.spat_amount,\n });\n } else {\n totalCell.spats[i].amount += sd.spat_amount;\n }\n }\n }\n }\n stages.sort((a, b) => a.step - b.step);\n\n return {\n key: `farm-${farm.id}`,\n onHand,\n linesCount,\n inventories,\n stages,\n spats,\n };\n });\n totalCell.onHand.percentFull = totalCell.onHand.basketCapacity\n ? (100 * totalCell.onHand.basketUsed) / totalCell.onHand.basketCapacity\n : 0;\n totalCell.stages.sort((a, b) => a.step - b.step);\n\n const columns: ICol[] = [\n {\n key: 'label',\n title: translate(lang, 'Location'),\n render: x =>\n x.isBold ? (\n
{x.label}
\n ) : (\n x.label\n ),\n width: 220,\n fixed: 'left',\n },\n ...farmsData.map(x => ({\n key: `farm-${x.id}`,\n title: (\n <>\n
{x.name}
\n
{x.farm_number}
\n \n ),\n dataIndex: `farm-${x.id}`,\n render: (x: any) =>\n x === undefined || x === null ? (\n <>\n ) : typeof x === 'string' ? (\n x\n ) : (\n
{x.value}
\n ),\n minWidth: 170,\n })),\n {\n key: 'total',\n title: translate(lang, 'Total'),\n render: (x: any) =>
{x}
,\n dataIndex: 'total',\n minWidth: 120,\n },\n ];\n let data: IRow[] = [];\n (() => {\n let row: IRow = {\n key: 'Oysters (per doz) On Hand',\n isBold: true,\n label: translate(lang, 'Oysters (per doz) On Hand'),\n };\n for (const fc of farmCells) {\n row[fc.key] = { isBold: true, value: formatNumber(fc.onHand.oysters) };\n }\n row.total = formatNumber(totalCell.onHand.oysters);\n data.push(row);\n\n row = {\n key: 'Ready to go',\n isBold: true,\n label: translate(lang, 'Ready to go'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(fc.onHand.ready);\n }\n row.total = formatNumber(totalCell.onHand.ready);\n data.push(row);\n\n row = {\n key: 'Wait More',\n isBold: true,\n label: translate(lang, 'Wait More'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(fc.onHand.wait);\n }\n row.total = formatNumber(totalCell.onHand.wait);\n data.push(row);\n\n row = {\n key: 'Line not full',\n isBold: true,\n label: translate(lang, 'Line not full'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(fc.onHand.notFull);\n }\n row.total = formatNumber(totalCell.onHand.notFull);\n data.push(row);\n\n row = {\n key: '% of lease full',\n isBold: true,\n label: translate(lang, '% of lease full'),\n };\n for (const fc of farmCells) {\n row[fc.key] = `${formatNumber(fc.onHand.percentFull)}%`;\n }\n row.total = `${formatNumber(totalCell.onHand.percentFull)}%`;\n data.push(row);\n\n row = {\n key: 'empty-1',\n isBold: true,\n label: '',\n };\n data.push(row);\n\n row = {\n key: 'Bag Capacity of lease',\n label: translate(lang, 'Bag Capacity of lease'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(fc.onHand.basketCapacity);\n }\n row.total = formatNumber(totalCell.onHand.basketCapacity);\n data.push(row);\n\n row = {\n key: 'Bags Utilized',\n label: translate(lang, 'Bags Utilized'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(fc.onHand.basketUsed);\n }\n row.total = formatNumber(totalCell.onHand.basketUsed);\n data.push(row);\n\n row = {\n key: 'Unused Capacity in bags',\n label: translate(lang, 'Unused Capacity in bags'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(\n fc.onHand.basketCapacity - fc.onHand.basketUsed,\n );\n }\n row.total = formatNumber(\n totalCell.onHand.basketCapacity - totalCell.onHand.basketUsed,\n );\n data.push(row);\n\n row = {\n key: 'empty-2',\n isBold: true,\n label: '',\n };\n data.push(row);\n row = {\n key: 'Oyster Rotation (per doz)',\n isBold: true,\n label: translate(lang, 'Oyster Rotation (per doz)'),\n };\n data.push(row);\n for (const st of totalCell.stages) {\n row = {\n key: `Stage ${st.step}`,\n label: `Stage ${st.step}`,\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(\n fc.stages.find(x => x.step === st.step)?.amount ?? 0,\n );\n }\n row.total = formatNumber(st.amount);\n data.push(row);\n }\n row = {\n key: 'Total',\n label: 'Total',\n isBold: true,\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(fc.stages.reduce((p, c) => p + c.amount, 0));\n }\n row.total = formatNumber(\n totalCell.stages.reduce((p, c) => p + c.amount, 0),\n );\n data.push(row);\n row = {\n key: 'empty-3',\n isBold: true,\n label: '',\n };\n data.push(row);\n\n row = {\n key: 'Number of lines',\n isBold: true,\n label: translate(lang, 'Number of lines'),\n };\n data.push(row);\n\n row = {\n key: 'Ready for Harvest',\n label: translate(lang, 'Ready for Harvest'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(fc.linesCount.ready);\n }\n row.total = formatNumber(totalCell.linesCount.ready);\n data.push(row);\n\n row = {\n key: 'Growing',\n label: translate(lang, 'Growing'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(fc.linesCount.growing);\n }\n row.total = formatNumber(totalCell.linesCount.growing);\n data.push(row);\n\n row = {\n key: 'Not full',\n label: translate(lang, 'Not full'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(fc.linesCount.notFull);\n }\n row.total = formatNumber(totalCell.linesCount.notFull);\n data.push(row);\n\n row = {\n key: 'Total Lines',\n isBold: true,\n label: translate(lang, 'Total Lines'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(fc.linesCount.total);\n }\n row.total = formatNumber(totalCell.linesCount.total);\n data.push(row);\n\n row = {\n key: 'empty-4',\n isBold: true,\n label: '',\n };\n data.push(row);\n row = {\n key: 'Number of Bags at Sea',\n isBold: true,\n label: translate(lang, 'Number of Bags at Sea'),\n };\n data.push(row);\n\n for (const ivt of totalCell.inventories) {\n row = {\n key: ivt.label,\n label: ivt.label,\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(\n fc.inventories.find(x => x.id === ivt.id)?.qty ?? 0,\n );\n }\n row.total = formatNumber(ivt.qty);\n data.push(row);\n }\n row = {\n key: 'Total Bags at Sea',\n isBold: true,\n label: translate(lang, 'Total Bags at Sea'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(\n fc.inventories.reduce((p, c) => p + c.qty, 0),\n );\n }\n row.total = totalCell.inventories.reduce((p, c) => p + c.qty, 0);\n data.push(row);\n\n row = {\n key: 'empty-5',\n isBold: true,\n label: '',\n };\n data.push(row);\n row = {\n key: 'Origin of Oysters in doz',\n isBold: true,\n label: translate(lang, 'Origin of Oysters in doz'),\n };\n data.push(row);\n for (const sp of totalCell.spats) {\n row = {\n key: sp.source,\n label: sp.source,\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(\n fc.spats.find(x => x.id === sp.id)?.amount ?? 0,\n );\n }\n row.total = formatNumber(sp.amount);\n data.push(row);\n }\n row = {\n key: 'Total Oysters per dozen',\n label: translate(lang, 'Total Oysters per dozen'),\n };\n for (const fc of farmCells) {\n row[fc.key] = formatNumber(fc.spats.reduce((p, c) => p + c.amount, 0));\n }\n row.total = formatNumber(\n totalCell.spats.reduce((p, c) => p + c.amount, 0),\n );\n data.push(row);\n })();\n\n let grid: any[] = [];\n (() => {\n let row: any[] = [\n { value: translate(lang, 'Oysters (per doz) On Hand') },\n ...farmCells.map(x => ({ value: x.onHand.oysters })),\n { value: totalCell.onHand.oysters },\n ];\n grid.push(row);\n\n row = [\n { value: translate(lang, 'Ready to go') },\n ...farmCells.map(x => ({ value: x.onHand.ready })),\n { value: totalCell.onHand.ready },\n ];\n grid.push(row);\n\n row = [\n { value: translate(lang, 'Wait More') },\n ...farmCells.map(x => ({ value: x.onHand.wait })),\n { value: totalCell.onHand.wait },\n ];\n grid.push(row);\n\n row = [\n { value: translate(lang, 'Line not full') },\n ...farmCells.map(x => ({ value: x.onHand.notFull })),\n { value: totalCell.onHand.notFull },\n ];\n grid.push(row);\n\n row = [\n { value: translate(lang, '% of lease full') },\n ...farmCells.map(x => ({\n value: `${formatNumber(x.onHand.percentFull)}%`,\n })),\n { value: `${formatNumber(totalCell.onHand.percentFull)}%` },\n ];\n grid.push(row);\n\n row = [{ value: '' }];\n grid.push(row);\n\n row = [\n { value: translate(lang, 'Bag Capacity of lease') },\n ...farmCells.map(x => ({ value: x.onHand.basketCapacity })),\n { value: totalCell.onHand.basketCapacity },\n ];\n grid.push(row);\n\n row = [\n { value: translate(lang, 'Bags Utilized') },\n ...farmCells.map(x => ({ value: x.onHand.basketUsed })),\n { value: totalCell.onHand.basketUsed },\n ];\n grid.push(row);\n\n row = [\n { value: translate(lang, 'Unused Capacity in bags') },\n ...farmCells.map(x => ({\n value: x.onHand.basketCapacity - x.onHand.basketUsed,\n })),\n {\n value: totalCell.onHand.basketCapacity - totalCell.onHand.basketUsed,\n },\n ];\n grid.push(row);\n\n row = [{ title: '' }];\n grid.push(row);\n\n row = [{ value: translate(lang, 'Oyster Rotation (per doz)') }];\n grid.push(row);\n\n for (let st of totalCell.stages) {\n row = [\n { value: `Stage ${st.step}` },\n ...farmCells.map(x => ({\n value: x.stages.find(y => y.step === st.step)?.amount ?? 0,\n })),\n { value: st.amount },\n ];\n grid.push(row);\n }\n row = [\n { value: translate(lang, 'Total') },\n ...farmCells.map(x => ({\n value: x.stages.reduce((p, c) => p + c.amount, 0),\n })),\n { value: totalCell.stages.reduce((p, c) => p + c.amount, 0) },\n ];\n\n row = [{ value: '' }];\n grid.push(row);\n row = [{ value: translate(lang, 'Number of lines') }];\n grid.push(row);\n\n row = [\n { value: translate(lang, 'Ready for Harvest') },\n ...farmCells.map(x => ({ value: x.linesCount.ready })),\n { value: totalCell.linesCount.ready },\n ];\n grid.push(row);\n\n row = [\n { value: translate(lang, 'Growing') },\n ...farmCells.map(x => ({ value: x.linesCount.growing })),\n { value: totalCell.linesCount.growing },\n ];\n grid.push(row);\n\n row = [\n { value: translate(lang, 'Not full') },\n ...farmCells.map(x => ({ value: x.linesCount.notFull })),\n { value: totalCell.linesCount.notFull },\n ];\n grid.push(row);\n\n row = [\n { value: translate(lang, 'Total Lines') },\n ...farmCells.map(x => ({ value: x.linesCount.total })),\n { value: totalCell.linesCount.total },\n ];\n grid.push(row);\n\n row = [{ value: '' }];\n grid.push(row);\n row = [{ value: translate(lang, 'Number of Bags at Sea') }];\n grid.push(row);\n\n for (let ivt of totalCell.inventories) {\n row = [\n { value: ivt.label },\n ...farmCells.map(x => ({\n value: x.inventories.find(y => y.id === ivt.id)?.qty ?? 0,\n })),\n { value: ivt.qty },\n ];\n grid.push(row);\n }\n row = [\n { value: translate(lang, 'Total Bags at Sea') },\n ...farmCells.map(x => ({\n value: x.inventories.reduce((p, c) => p + c.qty, 0),\n })),\n { value: totalCell.inventories.reduce((p, c) => p + c.qty, 0) },\n ];\n grid.push(row);\n\n row = [{ value: '' }];\n grid.push(row);\n row = [{ value: translate(lang, 'Origin of Oysters in doz') }];\n grid.push(row);\n\n for (let sp of totalCell.spats) {\n row = [\n { value: sp.source },\n ...farmCells.map(x => ({\n value: x.spats.find(y => y.id === sp.id)?.amount ?? 0,\n })),\n { value: sp.amount },\n ];\n grid.push(row);\n }\n row = [\n { value: translate(lang, 'Total Oysters per dozen') },\n ...farmCells.map(x => ({\n value: x.spats.reduce((p, c) => p + c.amount, 0),\n })),\n { value: totalCell.spats.reduce((p, c) => p + c.amount, 0) },\n ];\n grid.push(row);\n })();\n\n return { columns, data, excel: { columns: headers, data: grid } };\n }, [farmsData, rotations]);\n\n useEffect(() => {\n (async () => {\n setLoading(true);\n const response = await sendSingleRequest(\n { with_spats: true },\n 'GET',\n 'api/overview/stages',\n true,\n );\n setLoading(false);\n if (!response.status) {\n window.alert(translate(lang, response.data?.message ?? 'Server error'));\n return;\n }\n setRotations(response.data);\n })();\n }, []);\n\n return (\n
\n
\n
\n \n {translate(lang, 'Harvest Delivery Estimates')}\n \n \n {translate(lang, 'Calendar Estimates')}\n \n \n {translate(lang, 'Growth Calculator')}\n \n \n {translate(lang, 'Size Group')}\n \n
\n
\n \n {translate(lang, 'Summary of Stock on Hand')}\n \n \n {translate(lang, 'Export to excel')}\n \n }\n >\n \n \n
\n {loading && (\n
\n \n
\n )}\n
\n \n
\n
\n
\n );\n};\n\nexport default OysterSummaryPage;\n","import { useDispatch, useSelector } from 'react-redux';\nimport {\n CheckboxButton,\n Dropdown,\n Input,\n Spinner,\n Title,\n} from '../../components/shared';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Button, Modal, Table } from 'antd';\nimport { IName } from '../../entities/general.entities';\nimport { selectOysterFarms } from '../../store/farms/farms.selector';\nimport { selectSizedOysters } from '../../store/utils/utils.selector';\nimport { IOysterFarm } from '../../entities/farms.entities';\nimport { sendSingleRequest } from '../../apis';\nimport moment from 'moment';\nimport {\n defaultDateFormat,\n toMillisecond,\n} from '../../util/toggleSecondMillisecond';\nimport Column from 'antd/lib/table/Column';\nimport ColumnGroup from 'antd/lib/table/ColumnGroup';\nimport { formatNumber } from '../../entities/util-functions';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport { selectAccount, selectProfile } from '../../store/auth/auth.selector';\nimport { ISizedOyster } from '../../entities/utils.entities';\nimport PhotosViewButton from '../../components/lines/PhotosViewButton';\nimport { updateAccountSetting } from '../../store/auth/auth.actions';\nimport OysterLineProbModal from '../../components/farm-util/OysterLineProbModal';\nimport { calcSpecieLineDozens } from '../../lib/farm.helpers';\nimport './styles.scss';\n\ninterface ISeed {\n id: number;\n spat_storage: { id: number; source: string } | null;\n spat_amount: number;\n stage: number;\n}\n\ninterface IStage {\n farm: IName;\n line: { id: number; line_name: string };\n seedings: ISeed[];\n}\n\ninterface IEstimate {\n name: string;\n amount: number | undefined;\n}\n\ninterface IRow {\n farm_id: number;\n farm_name: string;\n farm_number: string;\n line_id: number;\n line_name: string;\n farming_method: string | null;\n seeded_date: number;\n spat_name: string;\n rotation: number;\n age: number;\n estimates: IEstimate[];\n}\n\nconst toRowData = (\n farm: IOysterFarm,\n oysterFields: ISizedOyster[],\n rotations: IStage[],\n onGrowWaste: any,\n) => {\n let result: IRow[] = [];\n for (const line of farm.lines) {\n if (!line.growing_cycle) continue;\n const rotation = rotations\n .filter(x => x.line.id === line.id)\n .reduce(\n (p, c) =>\n Math.max(\n p,\n c.seedings.reduce((ps, cs) => Math.max(ps, cs.stage), 1),\n ),\n 1,\n );\n const estimates =\n calcSpecieLineDozens(line, onGrowWaste, oysterFields) ?? [];\n result.push({\n farm_id: farm.id,\n farm_name: farm.name,\n farm_number: farm.farm_number,\n line_id: line.id,\n line_name: line.line_name,\n farming_method: line.farming_method,\n seeded_date: line.growing_cycle.main_seed.planned_date_seed,\n spat_name: line.growing_cycle.main_seed.spat_storage?.source ?? '-',\n rotation,\n age: moment().diff(\n toMillisecond(line.growing_cycle.main_seed.planned_date_seed),\n 'days',\n ),\n estimates,\n });\n }\n return result;\n};\n\nconst OysterEstimatesPage = () => {\n const history = useHistory();\n const lang = useSelector(selectLang);\n const profile = useSelector(selectProfile);\n const farmsData = useSelector(selectOysterFarms);\n const oysterFields = useSelector(selectSizedOysters);\n const onGrowWaste = useSelector(selectAccount)?.oyster_crops;\n const hiddenColumns =\n useSelector(selectAccount)?.oyster_estimate_hidden_columns;\n const columnsOrder =\n useSelector(selectAccount)?.oyster_estimate_columns_order;\n\n const [loading, setLoading] = useState(false);\n const [rotations, setRotations] = useState([]);\n const [filterFarmID, setFilterFarmID] = useState(null);\n const [filterName, setFilterName] = useState('');\n const [visModify, setVisModify] = useState(false);\n const [editLineId, setEditLineId] = useState();\n\n useEffect(() => {\n (async () => {\n setLoading(true);\n const response = await sendSingleRequest(\n { with_spats: true },\n 'GET',\n 'api/overview/stages',\n true,\n );\n setLoading(false);\n if (!response.status) {\n window.alert(translate(lang, response.data?.message ?? 'Server error'));\n return;\n }\n setRotations(response.data);\n })();\n }, []);\n\n const data = useMemo(() => {\n let result = farmsData\n .filter(x => x.lines.filter(y => !!y.growing_cycle).length > 0)\n .filter(x => (filterFarmID ? x.id === filterFarmID : true))\n .map(farm => toRowData(farm, oysterFields, rotations, onGrowWaste))\n .flat();\n if (filterName) {\n result = result.filter(x =>\n x.line_name.toLowerCase().includes(filterName.toLowerCase()),\n );\n }\n return result;\n }, [\n farmsData,\n rotations,\n oysterFields,\n filterFarmID,\n filterName,\n onGrowWaste,\n ]);\n\n const cropColumns: any = (columnsOrder !== undefined && columnsOrder.length > 0)\n ? [\n ...columnsOrder\n .filter(orderKey =>\n oysterFields.map(x => x.name).includes(orderKey) ||\n ['Grown ons', 'Waste'].includes(orderKey) \n )\n .filter(orderKey => !hiddenColumns?.includes(orderKey))\n .map(field => (\n {\n const v = r.estimates.find(x => x.name === field);\n return v && v.amount !== undefined ? (\n {`${formatNumber(v.amount)} dz`}\n ) : (\n {'-'}\n );\n }}\n sorter={(a: IRow, b: IRow) =>\n (a.estimates.find(x => x.name === field)?.amount ?? 0) -\n (b.estimates.find(x => x.name === field)?.amount ?? 0)\n }\n />\n )),\n ...[\n ...oysterFields.map(x => x.name),\n 'Grown ons',\n 'Waste',\n ]\n .filter(x => !columnsOrder.includes(x))\n .filter(x => !hiddenColumns?.includes(x))\n .map(field => (\n {\n const v = r.estimates.find(x => x.name === field);\n return v && v.amount !== undefined ? (\n {`${formatNumber(v.amount)} dz`}\n ) : (\n {'-'}\n );\n }}\n sorter={(a: IRow, b: IRow) =>\n (a.estimates.find(x => x.name === field)?.amount ?? 0) -\n (b.estimates.find(x => x.name === field)?.amount ?? 0)\n }\n />\n )),\n ]\n : [\n ...[\n ...oysterFields.map(x => x.name),\n 'Grown ons',\n 'Waste',\n ]\n .filter(x => !hiddenColumns?.includes(x))\n .map(field => (\n {\n const v = r.estimates.find(x => x.name === field);\n return v && v.amount !== undefined ? (\n {`${formatNumber(v.amount)} dz`}\n ) : (\n {'-'}\n );\n }}\n sorter={(a: IRow, b: IRow) =>\n (a.estimates.find(x => x.name === field)?.amount ?? 0) -\n (b.estimates.find(x => x.name === field)?.amount ?? 0)\n }\n />\n )),\n ];\n\n\n const tempColumns: { [key: string]: JSX.Element } = {\n 'Farm': ( (\n \n
{x.farm_name}
\n
{x.farm_number}
\n
\n )}\n sorter={(a: IRow, b: IRow) =>\n a.farm_name.localeCompare(b.farm_name)\n }\n />),\n 'Line name': ( {x.line_name}}\n sorter={(a: IRow, b: IRow) =>\n a.line_name.localeCompare(b.line_name)\n }\n />),\n 'Seeded date': ( (\n {defaultDateFormat(x.seeded_date)}\n )}\n sorter={(a: IRow, b: IRow) => a.seeded_date - b.seeded_date}\n />),\n 'Batch no': ( {x.spat_name}}\n sorter={(a: IRow, b: IRow) =>\n a.spat_name.localeCompare(b.spat_name)\n }\n />),\n 'Rotation': ( {x.rotation}}\n sorter={(a: IRow, b: IRow) => a.rotation - b.rotation}\n />),\n 'Oyster age': ( (\n {translate(lang, '%s days grown', x.age)}\n )}\n sorter={(a: IRow, b: IRow) => a.age - b.age}\n />),\n 'Estimated Crops': (\n {cropColumns}\n ),\n 'Photos': ( (\n
e.stopPropagation()}>\n \n
\n )}\n />),\n 'Modify probability': ( (\n
e.stopPropagation()}>\n setEditLineId(x.line_id)}\n >\n {translate(lang, 'Modify')}\n \n
\n )}\n />),\n }\n\n const columns: Record = (columnsOrder !== undefined && columnsOrder.length > 0)\n ? Object.fromEntries([\n ...columnsOrder\n .map(orderKey => [orderKey, tempColumns[orderKey]])\n .filter(([, column]) => Boolean(column)),\n ...Object.keys(tempColumns)\n .filter(key => !columnsOrder.includes(key))\n .map(key => [key, tempColumns[key]]),\n ])\n : tempColumns;\n\n return (\n
\n \n
\n \n {translate(lang, 'Harvest Delivery Estimates')}\n \n \n {translate(lang, 'Calendar Estimates')}\n \n \n {translate(lang, 'Growth Calculator')}\n \n \n {translate(lang, 'Size Group')}\n \n
\n
\n \n {translate(lang, 'Harvest Delivery Estimates')}\n \n
\n {loading && (\n
\n \n
\n )}\n
\n
\n
\n
\n ({\n id: x.id.toString(),\n label: x.name,\n value: x.id.toString(),\n })),\n ]}\n value={filterFarmID?.toString() ?? '0'}\n onChange={v => setFilterFarmID(v === '0' ? null : Number(v))}\n />\n
\n
\n setFilterName(e.target.value)}\n />\n
\n
\n {profile?.role === 'owner' && (\n setVisModify(true)}\n >\n {translate(lang, 'Modify columns')}\n \n )}\n
\n ({\n onClick: () =>\n history.push(`/farms/${row.farm_id}/${row.line_id}`),\n style: { cursor: 'pointer' },\n })}\n >\n {Object.keys(columns).map((columnKey, index) => {\n if (hiddenColumns?.includes(columnKey)) return null;\n return columns[columnKey];\n })}\n \n
\n
\n {visModify && (\n setVisModify(false)}\n />\n )}\n {!!editLineId && (\n setEditLineId(undefined)}\n />\n )}\n \n );\n};\n\ninterface ColModalProps {\n visible: boolean;\n onClose: () => void;\n}\n\nconst ColumnModifyModal = ({ visible, onClose }: ColModalProps) => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const hiddenColumns =\n useSelector(selectAccount)?.oyster_estimate_hidden_columns;\n const oysterFields = useSelector(selectSizedOysters);\n const oysterEstinateOrder = useSelector(selectAccount)?.oyster_estimate_columns_order ?? [];\n\n const initialColumns = oysterEstinateOrder.length > 0 ? oysterEstinateOrder : [\n 'Farm',\n 'Line name',\n 'Seeded date',\n 'Batch no',\n 'Rotation',\n 'Oyster age',\n 'Estimated Crops',\n 'Grown ons',\n 'Waste',\n 'Photos',\n ...oysterFields.map(x => x.name),\n 'Modify probability',\n ];\n\n const [tableColumns, setTableColumns] = useState(initialColumns);\n\n const [checked, setChecked] = useState(hiddenColumns ?? []);\n\n const toggleCheck = (name: string, c: boolean) => {\n if (c) {\n setChecked(checked.filter(x => x !== name));\n } else if (!checked.includes(name)) {\n setChecked([...checked, name]);\n }\n };\n const confirmClick = async () => {\n const oyster_estimate_hidden_columns = tableColumns.filter(x =>\n checked.includes(x),\n );\n const r = await dispatch(\n updateAccountSetting({ oyster_estimate_hidden_columns, oyster_estimate_columns_order: tableColumns }),\n );\n if (r !== true) {\n window.alert(r ?? 'Server error');\n } else {\n onClose();\n }\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n };\n\n const handleDrop = (index: number) => {\n return (e: React.DragEvent) => {\n const draggedIndex = parseInt(e.dataTransfer.getData('text/plain'), 10);\n if (draggedIndex === index) return;\n const newOrder = [...tableColumns];\n const [draggedItem] = newOrder.splice(draggedIndex, 1);\n newOrder.splice(index, 0, draggedItem);\n setTableColumns(newOrder);\n };\n };\n\n const handleDragStart = (index: number) => {\n return (e: React.DragEvent) => {\n e.dataTransfer.setData('text/plain', String(index));\n };\n };\n\n return (\n \n
\n {tableColumns.map((x, i) => (\n
\n toggleCheck(x, e.target.checked)}\n />\n
\n ))}\n
\n \n );\n};\n\nexport default OysterEstimatesPage;\n","import { NavLink, useHistory } from 'react-router-dom';\nimport { translate } from '../../lib/lang.helper';\nimport { useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { Spinner, Subtitle } from '../../components/shared';\nimport { formatNumber } from '../../entities/util-functions';\nimport { selectOysterFarms } from '../../store/farms/farms.selector';\nimport { useEffect, useState } from 'react';\nimport { Table } from 'antd';\nimport {\n defaultDateFormat,\n toMillisecond,\n} from '../../util/toggleSecondMillisecond';\nimport {\n amountDays,\n calcLineLastSize,\n getLineOysters,\n} from '../../lib/farm.helpers';\nimport { selectAccount } from '../../store/auth/auth.selector';\nimport { sendSingleRequest } from '../../apis';\nimport { ChartData } from 'chart.js';\nimport { Bar } from 'react-chartjs-2';\nimport {\n generateMonthlyRanges,\n generateWeeklyRanges,\n} from '../../lib/form.helpers';\nimport {\n calcDiffDays,\n labelRange,\n piecesToDozens,\n} from '../../lib/common.helpers';\n\ninterface ILineProp {\n farm_id: number;\n line_id: number;\n harvest_size: number;\n grow_speed: number;\n}\n\ninterface IRow {\n id: number | string;\n week: string;\n date: string;\n farm_id?: number;\n farm_name: string;\n farm_number: string;\n line_id?: number;\n line: string;\n farming_method: string;\n last_date: string;\n last_size: string;\n basket_count?: number;\n age: string;\n last_harvest: string;\n estimate_dz: string;\n rowSpan?: number;\n total?: number;\n}\n\nconst columns = (lang: any) => [\n {\n key: 'week',\n render: (x: IRow) =>\n x.rowSpan ? (\n \n
{x.week}
\n
{x.date}
\n
\n ) : (\n ''\n ),\n width: 210,\n },\n {\n title: translate(lang, 'Farm'),\n key: 'farm',\n render: (x: IRow) => (\n \n
{x.farm_name}
\n
{x.farm_number}
\n
\n ),\n },\n {\n title: translate(lang, 'Line'),\n key: 'line',\n render: (x: IRow) => {x.line},\n width: 80,\n },\n {\n title: translate(lang, 'Last assessment date'),\n key: 'last_date',\n render: (x: IRow) => {x.last_date},\n },\n {\n title: translate(lang, 'Last known size'),\n key: 'last_size',\n render: (x: IRow) => {x.last_size},\n },\n {\n title: translate(lang, 'Number of containers'),\n key: 'line_length',\n render: (x: IRow) =>\n x.basket_count ? (\n {`${x.basket_count} ${x.farming_method}`}\n ) : (\n <>\n ),\n },\n {\n title: translate(lang, \"Today's age\"),\n key: 'age',\n render: (x: IRow) => {x.age},\n },\n {\n title: translate(lang, 'Previous harvest'),\n key: 'last_harvest',\n render: (x: IRow) => {x.last_harvest},\n },\n {\n title: translate(lang, 'Estimated harvest'),\n key: 'estimate_harvest',\n render: (x: IRow) => {x.estimate_dz},\n },\n {\n title: translate(lang, 'Total'),\n key: 'total',\n render: (x: IRow) => (\n {x.total ? `${formatNumber(x.total)} dz` : ''}\n ),\n },\n];\n\nconst OysterCalenderPage = () => {\n const history = useHistory();\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectOysterFarms);\n const accountSetting = useSelector(selectAccount);\n\n const [rowsData, setRowsData] = useState();\n const [chartData, setChartData] =\n useState>();\n\n const totalSum = rowsData?.reduce((p, c) => p + (c.total ?? 0), 0) ?? 0;\n\n useEffect(() => {\n (async () => {\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/farm/lines-props',\n true,\n );\n if (!response.status) {\n window.alert(response.data?.message ?? 'Server error');\n return;\n }\n const linesProps: ILineProp[] = response.data;\n const weekRanges = generateWeeklyRanges();\n const harvestSize = accountSetting?.harvest_min_size,\n growSpeed = accountSetting?.grow_speed;\n let result: IRow[] = [];\n for (const week of weekRanges) {\n let first = 0,\n cnt = 0,\n totalSum = 0;\n for (const farm of farmsData) {\n for (const line of farm.lines) {\n const cycle = line.growing_cycle;\n if (!cycle) continue;\n\n const prop = linesProps.find(\n x => x.farm_id === farm.id && x.line_id === line.id,\n );\n if (!prop && (!harvestSize || !growSpeed)) continue;\n\n const size = prop?.harvest_size\n ? prop?.harvest_size\n : harvestSize ?? 0;\n const speed = prop?.grow_speed ? prop?.grow_speed : growSpeed ?? 0;\n const shellSize = calcLineLastSize(line);\n if (!shellSize || speed === 0) continue;\n\n const sd =\n cycle.last_assessment?.assessment_date ??\n cycle.main_seed.planned_date_seed;\n const dt =\n (Math.max(0, size - shellSize.avg) / speed) * 30 * 86400000;\n const pd = toMillisecond(sd) + dt;\n\n if (week.start_date <= pd && pd <= week.finish_date) {\n const id = result.length + 1;\n const basketCount = cycle.current_basket_count;\n const etaDozens = getLineOysters(line) ?? 0;\n result.push({\n id: id,\n week: week.week_label,\n date: week.day_label,\n farm_id: farm.id,\n line_id: line.id,\n farm_name: farm.name,\n farm_number: farm.farm_number,\n line: line.line_name,\n last_date:\n defaultDateFormat(cycle.last_assessment?.assessment_date) ??\n '-',\n last_size: labelRange(shellSize.min, shellSize.max, 'mm'),\n basket_count: basketCount,\n farming_method: line.farming_method ?? 'baskets',\n age: amountDays(\n calcDiffDays(cycle.main_seed.planned_date_seed),\n ),\n last_harvest: line?.last_final_harvest\n ? `${formatNumber(\n piecesToDozens(line.last_final_harvest.amount),\n )} dz${\n line.last_final_harvest.line_length\n ? ` (${formatNumber(\n line.last_final_harvest.line_length,\n )} ${line.farming_method ?? 'baskets'})`\n : ''\n }`\n : '-',\n estimate_dz: `${formatNumber(etaDozens)} dz`,\n });\n if (!first) first = id;\n totalSum += etaDozens;\n cnt++;\n }\n }\n }\n if (first) {\n let i = result.findIndex(x => x.id === first);\n result[i].rowSpan = cnt;\n result[result.length - 1].total = totalSum;\n } else {\n result.push({\n id: result.length + 1,\n week: week.week_label,\n date: week.day_label,\n farm_name: '',\n farm_number: '',\n line: '',\n last_date: '',\n last_size: '',\n basket_count: undefined,\n age: '',\n last_harvest: '',\n estimate_dz: '',\n farming_method: '',\n rowSpan: 1,\n });\n }\n }\n setRowsData(result);\n\n const monthRanges = generateMonthlyRanges();\n let chartValues: number[] = [];\n let chartLabels: string[] = [];\n for (const month of monthRanges) {\n let sum = 0;\n for (const farm of farmsData) {\n for (const line of farm.lines) {\n if (!line.growing_cycle) continue;\n const shellSize = calcLineLastSize(line);\n if (!shellSize) continue;\n\n const prop = linesProps.find(\n x => x.farm_id === farm.id && x.line_id === line.id,\n );\n if (!prop && (!harvestSize || !growSpeed)) continue;\n const sd =\n line.growing_cycle.last_assessment?.assessment_date ??\n line.growing_cycle.main_seed.planned_date_seed;\n const size = prop?.harvest_size\n ? prop?.harvest_size\n : harvestSize ?? 0;\n const speed = prop?.grow_speed ? prop?.grow_speed : growSpeed ?? 0;\n if (speed === 0) continue;\n\n const dt =\n (Math.max(0, size - shellSize.avg) / speed) * 30 * 86400000;\n const pd = toMillisecond(sd) + dt;\n\n if (month.start_date <= pd && pd <= month.finish_date) {\n sum += getLineOysters(line) ?? 0;\n }\n }\n }\n chartLabels.push(month.month_label);\n chartValues.push(sum);\n }\n setChartData({\n labels: chartLabels,\n datasets: [\n {\n data: chartValues,\n backgroundColor: 'rgba(54, 162, 235, 0.2)',\n borderColor: 'rgba(54, 162, 235, 1)',\n borderWidth: 1,\n label: translate(lang, 'Estimated Harvest'),\n },\n ],\n });\n })();\n }, []);\n\n return (\n
\n \n
\n \n {translate(lang, 'Harvest Delivery Estimates')}\n \n \n {translate(lang, 'Calendar Estimates')}\n \n \n {translate(lang, 'Growth Calculator')}\n \n \n {translate(lang, 'Size Group')}\n \n
\n {rowsData === undefined ? (\n
\n \n
\n ) : (\n
\n {chartData !== undefined && (\n
\n \n
\n )}\n ({\n onClick: () =>\n row.farm_id && row.line\n ? history.push(`/farms/${row.farm_id}/${row.line_id}`)\n : undefined,\n style: { cursor: 'pointer' },\n })}\n scroll={{ y: 600 }}\n />\n
\n \n {`${translate(lang, 'Total')}: ${formatNumber(totalSum)} dz`}\n \n
\n
\n )}\n
\n \n );\n};\n\nexport default OysterCalenderPage;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { Table } from 'antd';\nimport { selectFarmsData } from '../../store/farms/farms.selector';\nimport { useEffect, useState } from 'react';\nimport {\n defaultDateFormat,\n toMillisecond,\n} from '../../util/toggleSecondMillisecond';\nimport { translate } from '../../lib/lang.helper';\nimport {\n amountDays,\n calcLineLastSize,\n getLineOysters,\n} from '../../lib/farm.helpers';\nimport { Button, Spinner, Subtitle, Title } from '../../components/shared';\nimport { formatNumber, roundNumber } from '../../entities/util-functions';\nimport { useHistory } from 'react-router-dom';\nimport { selectAccount } from '../../store/auth/auth.selector';\nimport { Bar } from 'react-chartjs-2';\nimport { downloadReport, sendSingleRequest } from '../../apis';\nimport { ChartData } from 'chart.js';\nimport {\n generateMonthlyRanges,\n generateWeeklyRanges,\n} from '../../lib/form.helpers';\nimport {\n calcDiffDays,\n labelRange,\n piecesToDozens,\n} from '../../lib/common.helpers';\nimport {\n IMusselGrowingCycle,\n IOysterGrowingCycle,\n} from '../../entities/growing.entities';\nimport {\n IMusselLineResource,\n IOysterLineResource,\n} from '../../entities/farms.entities';\nimport { TBusinessType } from '../../entities/general.entities';\nimport './styles.scss';\n\ninterface IRow {\n id: number | string;\n type?: TBusinessType;\n week: string;\n date: string;\n farm_id?: number;\n farm_name: string;\n farm_number: string;\n line_id?: number;\n line: string;\n last_date: string;\n last_size: string;\n line_length: string;\n age: string;\n last_harvest: string;\n estimated: string;\n rowSpan?: number;\n totalMussels?: number;\n totalOysters?: number;\n units?: string;\n}\n\ninterface ILineProp {\n farm_id: number;\n line_id: number;\n harvest_size: number;\n grow_speed: number;\n farming_method: string|null;\n}\n\nconst columns = (lang: any) => [\n {\n key: 'week',\n render: (x: IRow) =>\n x.rowSpan ? (\n \n
{x.week}
\n
{x.date}
\n
\n ) : (\n ''\n ),\n width: 210,\n },\n {\n title: translate(lang, 'Farm'),\n key: 'farm',\n render: (x: IRow) => (\n \n
{x.farm_name}
\n
{x.farm_number}
\n
\n ),\n },\n {\n title: translate(lang, 'Line'),\n key: 'line',\n render: (x: IRow) => {x.line},\n width: 60,\n },\n {\n title: translate(lang, 'Last assessment date'),\n key: 'last_date',\n render: (x: IRow) => {x.last_date},\n },\n {\n title: translate(lang, 'Last known size'),\n key: 'last_size',\n render: (x: IRow) => {x.last_size},\n },\n {\n title: () => (\n <>\n
{translate(lang, 'Longline length')}
\n
{translate(lang, 'Number of containers')}
\n \n ),\n key: 'line_length',\n render: (x: IRow) => {x.line_length},\n },\n {\n title: translate(lang, \"Today's age\"),\n key: 'age',\n render: (x: IRow) => {x.age},\n },\n {\n title: translate(lang, 'Previous harvest'),\n key: 'last_harvest',\n render: (x: IRow) => {x.last_harvest},\n },\n {\n title: translate(lang, 'Estimated harvest'),\n key: 'estimate_harvest',\n render: (x: IRow) => {x.estimated},\n },\n {\n title: translate(lang, 'Total'),\n key: 'total',\n render: (x: IRow) => (\n \n {!!x.totalMussels &&
{`${formatNumber(x.totalMussels)} kg`}
}\n {!!x.totalOysters &&
{`${roundNumber(x.totalOysters)} dz`}
}\n
\n ),\n },\n];\n\nconst HarvestPlannerPage = () => {\n const dispatch = useDispatch();\n const history = useHistory();\n const lang = useSelector(selectLang);\n const farmsData = useSelector(selectFarmsData);\n const accountSetting = useSelector(selectAccount);\n\n const [rowsData, setRowsData] = useState();\n const [chartData, setChartData] =\n useState>();\n\n const totalMusselSum =\n rowsData?.reduce((p, c) => p + (c.totalMussels ?? 0), 0) ?? 0,\n totalOysterSum =\n rowsData?.reduce((p, c) => p + (c.totalOysters ?? 0), 0) ?? 0;\n\n const downloadPDF = async () => {\n try {\n const res = await downloadReport(\n {\n content: rowsData,\n total_mussels: totalMusselSum,\n total_oysters: totalOysterSum,\n file_type: 'pdf',\n },\n 'harvest-plan',\n );\n const blob = new Blob([res.data], { type: 'application/pdf' });\n let url = window.URL.createObjectURL(blob);\n let link = document.createElement('a');\n link.href = url;\n link.download = `report.pdf`;\n link.click();\n window.URL.revokeObjectURL(link.href);\n } catch (error: any) {\n window.alert(error?.message ?? 'Unknown error');\n }\n };\n const downloadExcel = async () => {\n try {\n const res = await downloadReport(\n {\n content: rowsData,\n total_mussels: totalMusselSum,\n total_oysters: totalOysterSum,\n file_type: 'xlsx',\n },\n 'harvest-plan',\n );\n let url = window.URL.createObjectURL(res.data);\n let link = document.createElement('a');\n link.href = url;\n link.download = `report.xlsx`;\n link.click();\n window.URL.revokeObjectURL(link.href);\n } catch (error: any) {\n window.alert(error?.message ?? 'Unknown error');\n }\n };\n\n useEffect(() => {\n (async () => {\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/farm/lines-props',\n true,\n );\n if (!response.status) {\n window.alert(response.data?.message ?? 'Server error');\n return;\n }\n const linesProps: ILineProp[] = response.data;\n const weekRanges = generateWeeklyRanges();\n const harvestSize = accountSetting?.harvest_min_size,\n growSpeed = accountSetting?.grow_speed;\n let result: IRow[] = [];\n for (const week of weekRanges) {\n let first = 0,\n cnt = 0,\n totalMussels = 0,\n totalOysters = 0;\n for (const farm of farmsData) {\n for (const line of farm.lines) {\n const cycle = line.growing_cycle;\n if (!cycle) continue;\n\n const prop = linesProps.find(\n x => x.farm_id === farm.id && x.line_id === line.id,\n );\n if (!prop && (!harvestSize || !growSpeed)) continue;\n\n const size = prop?.harvest_size\n ? prop.harvest_size\n : harvestSize ?? 0;\n const speed = prop?.grow_speed ? prop.grow_speed : growSpeed ?? 0;\n const shellSize = calcLineLastSize(line);\n if (!shellSize || speed === 0) continue;\n\n const sd =\n cycle.last_assessment?.assessment_date ??\n cycle.main_seed.planned_date_seed;\n const dt =\n (Math.max(0, size - shellSize.avg) / speed) * 30 * 86400000;\n const pd = toMillisecond(sd) + dt;\n\n if (week.start_date <= pd && pd <= week.finish_date) {\n let lineLength: number | null = null;\n let basketCount: number | null = null;\n let estimated: number | null = null;\n if (farm.type === 'MUSSEL') {\n const mcl = cycle as IMusselGrowingCycle;\n lineLength = mcl.current_line_length;\n estimated = mcl.estimated_amount\n ? mcl.estimated_amount\n : farm.harvest_unit_amount\n ? farm.harvest_unit_amount * mcl.current_line_length\n : null;\n } else if (farm.type === 'OYSTER') {\n basketCount = (cycle as IOysterGrowingCycle)\n .current_basket_count;\n estimated = getLineOysters(line as IOysterLineResource) ?? 0;\n }\n const id = result.length + 1;\n\n result.push({\n id: id,\n type: farm.type,\n week: week.week_label,\n date: week.day_label,\n farm_id: farm.id,\n line_id: line.id,\n farm_name: farm.name,\n farm_number: farm.farm_number,\n line: line.line_name,\n last_date:\n defaultDateFormat(cycle.last_assessment?.assessment_date) ??\n '-',\n last_size: labelRange(shellSize.min, shellSize.max, 'mm'),\n line_length:\n farm.type === 'MUSSEL'\n ? `${lineLength} m`\n : farm.type === 'OYSTER'\n ? `${basketCount} ${\n (line as IOysterLineResource).farming_method\n }`\n : '',\n age: amountDays(\n calcDiffDays(cycle.main_seed.planned_date_seed),\n ),\n last_harvest:\n farm.type === 'MUSSEL'\n ? line?.last_final_harvest\n ? `${formatNumber(line.last_final_harvest.amount)} kg${\n line.last_final_harvest.line_length\n ? ` (${formatNumber(\n line.last_final_harvest.line_length,\n )} m)`\n : ''\n }`\n : '-'\n : farm.type === 'OYSTER'\n ? line?.last_final_harvest\n ? `${formatNumber(\n piecesToDozens(line.last_final_harvest.amount),\n )} dz${\n line.last_final_harvest.line_length\n ? ` (${formatNumber(\n line.last_final_harvest.line_length,\n )} ${\n (line as IOysterLineResource).farming_method ??\n 'baskets'\n })`\n : ''\n }`\n : '-'\n : '',\n estimated: estimated\n ? `${formatNumber(estimated)} ${\n farm.type === 'MUSSEL'\n ? 'kg'\n : farm.type === 'OYSTER'\n ? 'dz'\n : ''\n }`\n : '-',\n units: farm.type === 'MUSSEL' ? 'm' : (line as IOysterLineResource).farming_method ??\n 'baskets'\n });\n if (!first) first = id;\n if (estimated) {\n if (farm.type === 'MUSSEL') totalMussels += estimated;\n else if (farm.type === 'OYSTER') totalOysters += estimated;\n }\n cnt++;\n }\n }\n }\n if (first) {\n let i = result.findIndex(x => x.id === first);\n result[i].rowSpan = cnt;\n result[result.length - 1].totalMussels = totalMussels;\n result[result.length - 1].totalOysters = totalOysters;\n } else {\n result.push({\n id: result.length + 1,\n week: week.week_label,\n date: week.day_label,\n farm_name: '',\n farm_number: '',\n line: '',\n last_date: '',\n last_size: '',\n line_length: '',\n age: '',\n last_harvest: '',\n estimated: '',\n rowSpan: 1,\n });\n }\n }\n setRowsData(result);\n\n const monthRanges = generateMonthlyRanges();\n let musselValues: number[] = [];\n let oysterValues: number[] = [];\n let chartLabels: string[] = [];\n for (const month of monthRanges) {\n let musselSum = 0,\n oysterSum = 0;\n for (const farm of farmsData) {\n for (const line of farm.lines) {\n if (!line.growing_cycle) continue;\n const shellSize = calcLineLastSize(line);\n if (!shellSize) continue;\n\n const prop = linesProps.find(\n x => x.farm_id === farm.id && x.line_id === line.id,\n );\n if (!prop && (!harvestSize || !growSpeed)) continue;\n const sd =\n line.growing_cycle.last_assessment?.assessment_date ??\n line.growing_cycle.main_seed.planned_date_seed;\n const size = prop?.harvest_size\n ? prop?.harvest_size\n : harvestSize ?? 0;\n const speed = prop?.grow_speed ? prop?.grow_speed : growSpeed ?? 0;\n if (speed === 0) continue;\n const dt =\n (Math.max(0, size - shellSize.avg) / speed) * 30 * 86400000;\n const pd = toMillisecond(sd) + dt;\n\n if (month.start_date <= pd && pd <= month.finish_date) {\n if (farm.type === 'MUSSEL') {\n const ln = line as IMusselLineResource;\n if (ln.growing_cycle?.estimated_amount) {\n musselSum += ln.growing_cycle.estimated_amount;\n } else if (farm.harvest_unit_amount) {\n musselSum +=\n farm.harvest_unit_amount *\n (ln.growing_cycle?.current_line_length ?? 0);\n }\n } else if (farm.type === 'OYSTER') {\n oysterSum += getLineOysters(line as IOysterLineResource) ?? 0;\n }\n }\n }\n }\n chartLabels.push(month.month_label);\n musselValues.push(musselSum);\n oysterValues.push(oysterSum);\n }\n setChartData({\n labels: chartLabels,\n datasets: [\n {\n label: 'Planned harvest of Mussels',\n data: musselValues,\n backgroundColor: 'rgba(54, 162, 235, 0.2)',\n borderColor: 'rgba(54, 162, 235, 1)',\n borderWidth: 1,\n },\n {\n label: 'Planned harvest of Oysters',\n data: oysterValues,\n backgroundColor: 'rgba(80, 235, 9, 0.2)',\n borderColor: 'rgb(4, 230, 76)',\n borderWidth: 1,\n },\n ],\n });\n })();\n }, [dispatch]);\n\n return (\n
\n
\n
\n \n {translate(lang, 'Harvest planner')}\n \n
\n \n {translate(lang, 'Download PDF')}\n \n \n {translate(lang, 'Download Excel')}\n \n
\n
\n {rowsData === undefined ? (\n
\n \n
\n ) : (\n
\n {chartData !== undefined && (\n
\n \n
\n )}\n ({\n onClick: () =>\n row.farm_id && row.line\n ? history.push(`/farms/${row.farm_id}/${row.line_id}`)\n : undefined,\n style: { cursor: 'pointer' },\n })}\n scroll={{ y: 600 }}\n />\n
\n \n {`${translate(lang, 'Total')}: ${formatNumber(\n totalMusselSum,\n )} kg of Mussels, ${roundNumber(totalOysterSum)} dz of Oysters`}\n \n
\n
\n )}\n
\n
\n );\n};\n\nexport default HarvestPlannerPage;\n","import { useSelector } from 'react-redux';\nimport { ModalComponent } from '../../components/shared';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { Table } from 'antd';\nimport { selectOysterFarms } from '../../store/farms/farms.selector';\nimport { useMemo, useState } from 'react';\nimport { formatNumber } from '../../entities/util-functions';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport PhotosViewButton from '../../components/lines/PhotosViewButton';\nimport { calcLineLastSize, getLineOysters } from '../../lib/farm.helpers';\n\nconst sizeSteps = [2, 3, 5, 10, 15, 20, 30, 40, 50, 60, 70, 80];\n\ninterface IRow {\n isTotal?: boolean;\n isFinal?: boolean;\n farm_id: number;\n farm_name: string;\n farm_number: string;\n line_id: number;\n line_name: string;\n date: number;\n batch: string;\n basket_count: number;\n method: string;\n size: number;\n quantity: number;\n comment?: string;\n}\n\nconst columns = [\n {\n key: 'size',\n title: 'Size / Detail',\n render: (x: IRow) =>\n x.size < 0 ? (\n <>\n ) : (\n \n {x.size === 0\n ? '1 - 2 mm'\n : x.size >= sizeSteps.length\n ? '80+ mm'\n : `${sizeSteps[x.size - 1]} - ${sizeSteps[x.size]} mm`}\n \n ),\n },\n {\n key: 'Rack',\n title: 'Rack',\n render: (x: IRow) =>\n x.isFinal ? undefined : x.isTotal ? (\n {'Total'}\n ) : (\n
\n
{`${x.farm_name}/${x.farm_number}`}
\n
{x.line_name}
\n
\n ),\n },\n {\n key: 'Units',\n title: 'Units',\n render: (x: IRow) =>\n x.isTotal ? (\n {x.basket_count}\n ) : (\n {`${x.basket_count} ${x.method}`}\n ),\n },\n {\n key: 'quantity',\n title: 'QTY (Dozens)',\n render: (x: IRow) =>\n x.isTotal ? (\n {formatNumber(x.quantity)}\n ) : (\n {formatNumber(x.quantity)}\n ),\n },\n {\n key: 'batch',\n title: 'Batch',\n render: (x: IRow) => {x.batch},\n },\n {\n key: 'date',\n title: 'Seeding date',\n render: (x: IRow) =>\n x.isTotal ? <> : {defaultDateFormat(x.date)},\n },\n {\n key: 'photos',\n title: 'Photos',\n render: (x: IRow) =>\n x.isFinal ? (\n {'Total'}\n ) : x.isTotal ? undefined : (\n
e.stopPropagation()}>\n \n
\n ),\n },\n];\nconst OysterLinesPage = () => {\n const history = useHistory();\n const lang = useSelector(selectLang);\n const farms = useSelector(selectOysterFarms);\n\n const [comment, setComment] = useState();\n\n const dataCols = [\n ...columns,\n {\n key: 'comment',\n title: translate(lang, 'Comment'),\n render: (x: IRow) =>\n !x.comment ? undefined : (\n undefined}\n onClick={e => {\n e.stopPropagation();\n setComment(x.comment);\n }}\n >\n {translate(lang, 'View')}\n \n ),\n },\n {\n key: 'more',\n title: '',\n render: () => undefined,\n },\n ];\n\n const data = useMemo(() => {\n let result: IRow[] = [];\n for (const farm of farms) {\n for (const line of farm.lines) {\n if (!line.growing_cycle) continue;\n const shellSize = calcLineLastSize(line);\n if (!shellSize) continue;\n\n const cycle = line.growing_cycle;\n const avgSize = shellSize.avg;\n\n let i = 0;\n for (; i < sizeSteps.length && avgSize >= sizeSteps[i]; i++);\n result.push({\n farm_id: farm.id,\n farm_name: farm.name,\n farm_number: farm.farm_number,\n line_id: line.id,\n line_name: line.line_name,\n date: cycle.main_seed.planned_date_seed,\n batch: cycle.main_seed.spat_storage?.source ?? 'Catch Spat',\n size: i,\n basket_count: cycle.current_basket_count,\n method: line.farming_method ?? '',\n quantity: getLineOysters(line) ?? 0,\n comment: cycle.last_assessment?.comment ?? undefined,\n });\n }\n }\n result.sort((a, b) =>\n a.size === b.size ? a.date - b.date : a.size - b.size,\n );\n let prv = -1;\n let unitSum = 0,\n qtySum = 0;\n let tmp: IRow[] = [];\n for (let i = 0; i < result.length; i++) {\n if (result[i].size === prv) {\n result[i].size = -1;\n } else {\n if (prv !== -1) {\n tmp.push({\n isTotal: true,\n farm_id: 0,\n farm_name: '',\n farm_number: '',\n line_id: -i,\n line_name: '',\n date: 0,\n batch: '',\n size: -1,\n basket_count: unitSum,\n method: '',\n quantity: qtySum,\n });\n unitSum = 0;\n qtySum = 0;\n }\n prv = result[i].size;\n }\n unitSum += result[i].basket_count;\n qtySum += result[i].quantity;\n tmp.push(result[i]);\n }\n if (prv !== -1) {\n tmp.push({\n isTotal: true,\n farm_id: 0,\n farm_name: '',\n farm_number: '',\n line_id: 0,\n line_name: '',\n date: 0,\n batch: '',\n size: -1,\n basket_count: unitSum,\n method: '',\n quantity: qtySum,\n });\n }\n unitSum = tmp\n .filter(x => !x.isTotal)\n .reduce((acc, x) => acc + x.basket_count, 0);\n qtySum = tmp\n .filter(x => !x.isTotal)\n .reduce((acc, x) => acc + x.quantity, 0);\n tmp.push({\n isTotal: true,\n isFinal: true,\n farm_id: 0,\n farm_name: '',\n farm_number: '',\n line_id: -tmp.length,\n line_name: '',\n date: 0,\n batch: '',\n size: -1,\n basket_count: unitSum,\n method: '',\n quantity: qtySum,\n });\n return tmp;\n }, [farms]);\n\n return (\n
\n
\n
\n \n {translate(lang, 'Harvest Delivery Estimates')}\n \n \n {translate(lang, 'Calendar Estimates')}\n \n \n {translate(lang, 'Growth Calculator')}\n \n \n {translate(lang, 'Size Group')}\n \n
\n
\n
\n ({\n onClick: row.isTotal\n ? undefined\n : () => history.push(`/farms/${row.farm_id}/${row.line_id}`),\n })}\n />\n
\n
\n
\n setComment(undefined)}\n type=''\n title={translate(lang, 'Comment')}\n text={comment ?? ''}\n />\n
\n );\n};\n\nexport default OysterLinesPage;\n","import { useCallback, useEffect, useState } from 'react';\nimport { Table, Spin } from 'antd';\nimport { Button, ModalComponent } from '../../components/shared';\nimport { translate } from '../../lib/lang.helper';\nimport { useWidth } from '../../util/useWidth';\nimport { selectLang } from '../../store/ui/ui.selector';\nimport { CaretDownOutlined } from '@ant-design/icons';\nimport {\n checkRolePermission,\n formatNumber,\n} from '../../entities/util-functions';\nimport { sendSingleRequest } from '../../apis';\nimport { selectProfile } from '../../store/auth/auth.selector';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { showFeedback } from '../../store/ui/ui.actions';\nimport { defaultDateFormat } from '../../util/toggleSecondMillisecond';\nimport { TBusinessType } from '../../entities/general.entities';\nimport { IAssessmentResource } from '../../entities/farms.entities';\nimport './styles.scss';\n\ninterface ILine {\n id: number;\n batch_seed_id: number;\n line_name: string;\n spat_source: string;\n date_seed: number;\n stage: string;\n seed_type: string;\n line_length: number | null;\n basket_count: number | null;\n estimated_amount: number | null;\n drop?: number;\n spacing: string;\n size_min: number;\n size_max: number;\n size_avg: number;\n density: string;\n comment: string;\n last_assessment?: IAssessmentResource;\n}\n\ninterface IFarm {\n id: string | number;\n type: TBusinessType;\n owners?: string;\n name: string;\n}\n\ninterface IDataItem {\n farm: IFarm;\n lines: ILine[];\n}\n\nconst farmColumns = [\n {\n title: 'Farm',\n dataIndex: ['farm', 'type'],\n key: 'type',\n render: (text: string, record: IDataItem) => (\n <>\n {text}\n {record.farm.owners && (\n {` - Owned by ${record.farm.owners}`}\n )}\n \n ),\n },\n];\n\nconst lineColumns = [\n { title: 'Line', key: 'line_name', render: (x: ILine) => x.line_name },\n {\n title: 'Spat Code',\n key: 'spat_source',\n render: (x: ILine) => x.spat_source,\n },\n {\n title: 'Date Seeded',\n key: 'date_seed',\n render: (x: ILine) => defaultDateFormat(x.date_seed),\n },\n { title: 'Stage', key: 'stage', render: (x: ILine) => x.stage },\n { title: 'Type', key: 'seed_type', render: (x: ILine) => x.seed_type },\n {\n title: 'Meters',\n key: 'line_length',\n render: (x: ILine) => x.line_length ?? 'N/A',\n },\n {\n title: 'Drop Depth',\n key: 'drop',\n render: (x: ILine) => x.drop ?? 'N/A',\n },\n {\n title: 'Containers',\n key: 'basket_count',\n render: (x: ILine) => x.basket_count ?? 'N/A',\n },\n { title: 'Spacing', key: 'spacing', render: (x: ILine) => x.spacing },\n {\n title: 'Date Assessed',\n key: 'assessment_date',\n render: (x: ILine) =>\n defaultDateFormat(x.last_assessment?.assessment_date, '-'),\n },\n {\n title: 'Size Min',\n key: 'size_min',\n render: (x: ILine) =>\n x.last_assessment ? (\n \n
{x.size_min}
\n
{' ↓ '}
\n
{x.last_assessment.shell_size.min}
\n
\n ) : (\n {x.size_min}\n ),\n },\n {\n title: 'Size Max',\n key: 'size_max',\n render: (x: ILine) =>\n x.last_assessment ? (\n \n
{x.size_max}
\n
{' ↓ '}
\n
{x.last_assessment.shell_size.max}
\n
\n ) : (\n {x.size_max}\n ),\n },\n {\n title: 'Size Avg',\n key: 'size_avg',\n render: (x: ILine) =>\n x.last_assessment ? (\n \n
{x.size_avg}
\n
{' ↓ '}
\n
{x.last_assessment.shell_size.avg}
\n
\n ) : (\n {x.size_avg}\n ),\n },\n {\n title: 'Estimated Harvest Tonnes',\n key: 'estimated_amount',\n render: (x: ILine) =>\n x.last_assessment && !!x.last_assessment.estimated_amount ? (\n {formatNumber(x.last_assessment.estimated_amount / 1000)}\n ) : !!x.estimated_amount ? (\n {`~ ${formatNumber(x.estimated_amount / 1000)}`}\n ) : (\n <>\n ),\n },\n { title: 'Density', key: 'density', render: (x: ILine) => x.density },\n];\n\nconst FarmSpatsPage = () => {\n const width = useWidth();\n const history = useHistory();\n const profile = useSelector(selectProfile);\n const lang = useSelector(selectLang);\n const dispatch = useDispatch();\n\n const [data, setData] = useState([]);\n const [loading, setLoading] = useState(false);\n const [expandedRowKeys, setExpandedRowKeys] = useState<(string | number)[]>(\n [],\n );\n const [comment, setComment] = useState();\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n const response = await sendSingleRequest(\n {},\n 'GET',\n 'api/overview/spats-data',\n true,\n );\n if (response.status) {\n setData(response.data);\n } else {\n dispatch(\n showFeedback({\n message: response.data?.message,\n type: 'error',\n isMessage: true,\n }),\n );\n }\n setLoading(false);\n }, []);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n const handleExpand = (expanded: boolean, record: IDataItem) => {\n if (expanded) {\n setExpandedRowKeys([record.farm.id]); // Keep only the current row expanded\n } else {\n setExpandedRowKeys([]); // Collapse all rows\n }\n };\n const tableColumns = [\n ...lineColumns,\n {\n title: 'Comment',\n key: 'comment',\n render: (x: ILine) =>\n !x.comment ? (\n <>\n ) : (\n undefined}\n onClick={() => setComment(x.comment)}\n >\n {translate(lang, 'View')}\n \n ),\n },\n ];\n\n return (\n
\n
\n
\n {checkRolePermission(\n { deniedRoles: ['processing_plant'] },\n profile?.role,\n ) && (\n
\n 768 ? 3 : 5}\n type='fill'\n width='small'\n color='blue'\n onClick={() => history.push('/farms')}\n >\n {translate(lang, 'All farms')}\n \n 768 ? 3 : 5}\n type='fill'\n width='small'\n color='blue'\n className={width > 768 ? 'ml-7' : 'mt-7'}\n onClick={() => history.push('/lines')}\n >\n {translate(lang, 'All Lines')}\n \n 768 ? 3 : 5}\n type='fill'\n width='small'\n color='blue'\n className={width > 768 ? 'ml-7' : 'mt-7'}\n onClick={() => history.push('/farms/visual-mode')}\n >\n {translate(lang, 'Farms map')}\n \n {profile?.account_type === 'grower' ? (\n 768 ? 3 : 5}\n type='bordered'\n width='small'\n color='green'\n className={width > 768 ? 'ml-7' : 'mt-7'}\n onClick={() => {}}\n >\n {translate(lang, 'Import')}\n \n ) : (\n 768 ? 3 : 5}\n type='fill'\n width='small'\n color='blue'\n className={width > 768 ? 'ml-7' : 'mt-7'}\n onClick={() => history.push('/line-spats')}\n >\n {translate(lang, 'Spat count')}\n \n )}\n
\n )}\n
\n {loading ? (\n
\n \n
\n ) : (\n
\n \n Spat Data By Farms\n
\n record.farm.id}\n pagination={false}\n columns={farmColumns}\n dataSource={data}\n expandable={{\n expandedRowRender: record => (\n \n ),\n expandIcon: ({ expanded, onExpand, record }) => (\n {\n event.stopPropagation();\n onExpand(record, event);\n }}\n >\n \n
\n ),\n expandedRowKeys, // Controlled expanded rows\n onExpand: handleExpand, // Custom expand handler\n }}\n />\n
\n )}\n \n setComment(undefined)}\n type=''\n title={translate(lang, 'Comment')}\n text={translate(lang, comment ?? '')}\n />\n \n );\n};\n\nexport default FarmSpatsPage;\n","import { TModuleName } from '../entities/util-functions';\nimport ProfileRouter from './Profile/ProfileRouter';\nimport AddUsers from './users/AddUsers';\nimport FarmsRouter from './Farms/FarmsRouter';\nimport Notifications from './static/Notifications';\nimport AutomationPage from './Task/AutomationPage';\nimport Users from './users/Users';\nimport BudgetTotalPage from './budget/BudgetTotalPage';\nimport BudgetLog from './budget/BudgetLog';\nimport AccountMessagesPage from './AccountMessage/AccountMessagesPage';\nimport SpatStoragesPage from './SpatStorage/SpatStoragesPage';\nimport InventoriesPage from './Inventories/InventoriesPage';\nimport SummaryHarvestPage from './Summary/SummaryHarvestPage';\nimport LinesPage from './Lines/LinesPage';\nimport ReportPage from './Report/ReportPage';\nimport FarmsMap from './Farms/FarmsMap';\nimport HarvestDetailPage from './harvest/HarvestDetailPage';\nimport UserMessagesPage from './UserMessage/UserMessagesPage';\nimport QueuedDataPage from './QueuedData/QueuedDataPage';\nimport BoatsPage from './boat/BoatsPage';\nimport LineSpatsPage from './line-spat/LineSpatPage';\nimport ImportCyclesPage from './import/ImportCyclesPage';\nimport CalendarPage from './calendar/CalendarPage';\nimport TodayWindyPage from './Summary/TodayWindyPage';\nimport BudgetFarmPage from './budget/BudgetFarmPage';\nimport ImportLinesPage from './import/ImportLinesPage';\nimport ImportAssessmentsPage from './import/ImportAssessmentsPage';\nimport BoatMessagesPage from './boat-message/BoatMessagesPage';\nimport QRGeneratePage from './qr-code/QRGeneratePage';\nimport SummaryProcessPage from './Summary/SummaryProcessPage';\nimport QRScanPage from './qr-code/QRScanPage';\nimport SummaryPerformancePage from './Summary/SummaryPerformancePage';\nimport BiosecurityPage from './Summary/BiosecurityPage';\nimport HarvestStagesPage from './Summary/HarvestStagesPage';\nimport LineGroups from './LineGroup/LineGroups';\nimport TaskListPage from './Task/TaskListPage';\nimport CustomFieldSetting from './Profile/CustomFieldSetting';\nimport TagsPage from './Profile/TagsPage';\nimport SuggestPage from './suggest/SuggestPage';\nimport PaperFormPage from './QueuedData/PaperFormPage';\nimport ExternalFarmAccessPage from './external-account/ExternalFarmAccessPage';\nimport ImportTimeSheetPage from './import/ImportTimeSheetPage';\nimport HomePage from './home/HomePage';\nimport OysterSummaryPage from './Summary/OysterSummaryPage';\nimport OysterEstimatesPage from './Summary/OysterEstimatesPage';\nimport OysterCalenderPage from './Summary/OysterCalenderPage';\nimport HarvestPlannerPage from './calendar/HarvestPlannerPage';\nimport OysterLinesPage from './Summary/OysterLinesPage';\nimport FarmSpatsPage from './Farms/FarmSpatsPage';\n\ninterface IRoute {\n module: TModuleName;\n route: {\n path: string;\n component: React.FC;\n exact: boolean;\n isAdmin?: boolean;\n isFinance?: boolean;\n };\n}\n\nexport const normalRoutes: Array = [\n {\n module: 'home',\n route: { path: '/', component: HomePage, exact: true },\n },\n {\n module: 'profile',\n route: {\n path: '/profile/:id?',\n component: ProfileRouter,\n exact: false,\n },\n },\n {\n module: 'user',\n route: {\n path: '/users/add-user',\n component: AddUsers,\n exact: true,\n isAdmin: true,\n },\n },\n {\n module: 'user',\n route: {\n path: '/users',\n component: Users,\n exact: true,\n },\n },\n {\n module: 'farm',\n route: {\n path: '/farms',\n component: FarmsRouter,\n exact: false,\n },\n },\n {\n module: 'farm',\n route: {\n path: '/farms-map',\n component: FarmsMap,\n exact: true,\n },\n },\n {\n module: 'budget',\n route: {\n path: '/budget',\n component: BudgetTotalPage,\n exact: true,\n isFinance: true,\n },\n },\n {\n module: 'budget',\n route: {\n path: '/budget/:farmId',\n component: BudgetFarmPage,\n exact: true,\n isFinance: true,\n },\n },\n {\n module: 'budget',\n route: {\n path: '/budget-log',\n component: BudgetLog,\n exact: true,\n isFinance: true,\n },\n },\n {\n module: 'line',\n route: {\n path: '/line-group',\n component: LineGroups,\n exact: false,\n },\n },\n {\n module: 'task',\n route: {\n path: '/tasks',\n component: TaskListPage,\n exact: false,\n },\n },\n {\n module: 'calendar',\n route: {\n path: '/calendar',\n component: CalendarPage,\n exact: false,\n },\n },\n {\n module: 'calendar',\n route: {\n path: '/harvest-planner',\n component: HarvestPlannerPage,\n exact: false,\n },\n },\n {\n module: 'calendar',\n route: {\n path: '/suggest',\n component: SuggestPage,\n exact: false,\n },\n },\n {\n module: 'spat-storage',\n route: {\n path: '/spat-storage',\n component: SpatStoragesPage,\n exact: false,\n },\n },\n {\n module: 'message',\n route: {\n path: '/account-messages',\n component: AccountMessagesPage,\n exact: false,\n },\n },\n {\n module: 'message',\n route: {\n path: '/user-messages',\n component: UserMessagesPage,\n exact: false,\n },\n },\n {\n module: 'boat',\n route: {\n path: '/boat-messages',\n component: BoatMessagesPage,\n exact: false,\n },\n },\n {\n module: 'automation',\n route: {\n path: '/automation',\n component: AutomationPage,\n exact: false,\n },\n },\n {\n module: 'inventory',\n route: {\n path: '/inventory',\n component: InventoriesPage,\n exact: false,\n },\n },\n {\n module: 'home',\n route: {\n path: '/summary/harvest',\n component: SummaryHarvestPage,\n exact: false,\n },\n },\n {\n module: 'home',\n route: {\n path: '/summary/processing',\n component: SummaryProcessPage,\n exact: false,\n },\n },\n {\n module: 'home',\n route: {\n path: '/summary/performance',\n component: SummaryPerformancePage,\n exact: false,\n },\n },\n {\n module: 'home',\n route: {\n path: '/summary/biosecurity',\n component: BiosecurityPage,\n exact: false,\n },\n },\n {\n module: 'home',\n route: {\n path: '/summary/stages',\n component: HarvestStagesPage,\n exact: false,\n },\n },\n {\n module: 'home',\n route: {\n path: '/oyster-summary/growth',\n component: OysterSummaryPage,\n exact: false,\n },\n },\n {\n module: 'home',\n route: {\n path: '/oyster-summary/estimate',\n component: OysterEstimatesPage,\n exact: false,\n },\n },\n {\n module: 'home',\n route: {\n path: '/oyster-summary/calender',\n component: OysterCalenderPage,\n exact: false,\n },\n },\n {\n module: 'home',\n route: {\n path: '/oyster-summary/lines',\n component: OysterLinesPage,\n exact: false,\n },\n },\n {\n module: 'line',\n route: {\n path: '/harvest/:harvestId',\n component: HarvestDetailPage,\n exact: false,\n },\n },\n {\n module: 'line',\n route: {\n path: '/lines',\n component: LinesPage,\n exact: false,\n },\n },\n {\n module: 'report',\n route: {\n path: '/report',\n component: ReportPage,\n exact: false,\n },\n },\n {\n module: 'import',\n route: {\n path: '/import/cycles',\n component: ImportCyclesPage,\n exact: false,\n },\n },\n {\n module: 'import',\n route: {\n path: '/import/line-location',\n component: ImportLinesPage,\n exact: false,\n },\n },\n {\n module: 'import',\n route: {\n path: '/import/assessments',\n component: ImportAssessmentsPage,\n exact: false,\n },\n },\n {\n module: 'import',\n route: {\n path: '/import/time-sheet',\n component: ImportTimeSheetPage,\n exact: false,\n },\n },\n {\n module: 'validation',\n route: {\n path: '/queue',\n component: QueuedDataPage,\n exact: true,\n },\n },\n {\n module: 'validation',\n route: {\n path: '/queue/:id',\n component: PaperFormPage,\n exact: true,\n },\n },\n {\n module: 'boat',\n route: {\n path: '/boats',\n component: BoatsPage,\n exact: false,\n },\n },\n {\n module: 'automation',\n route: {\n path: '/custom-fields',\n component: CustomFieldSetting,\n exact: false,\n },\n },\n {\n module: 'automation',\n route: {\n path: '/tags',\n component: TagsPage,\n exact: false,\n },\n },\n {\n module: 'line',\n route: {\n path: '/line-spats',\n component: LineSpatsPage,\n exact: false,\n },\n },\n {\n module: 'home',\n route: {\n path: '/notifications',\n component: Notifications,\n exact: true,\n },\n },\n {\n module: 'home',\n route: {\n path: '/today-windy',\n component: TodayWindyPage,\n exact: true,\n },\n },\n {\n module: 'home',\n route: {\n path: '/qr-generate',\n component: QRGeneratePage,\n exact: true,\n },\n },\n {\n module: 'home',\n route: {\n path: '/qr-scan',\n component: QRScanPage,\n exact: true,\n },\n },\n {\n module: 'home',\n route: {\n path: '/external-farm-access',\n component: ExternalFarmAccessPage,\n exact: true,\n },\n },\n {\n module: 'home',\n route: {\n path: '/spats',\n component: FarmSpatsPage,\n exact: true,\n },\n },\n];\n","import { Button } from 'antd';\nimport { Title } from '../../components/shared';\n\nconst OnboardingPage = () => {\n const onClose = () => {\n const w: any = window;\n if (w.ReactNativeWebView) {\n w.ReactNativeWebView.postMessage('close-onboarding');\n }\n };\n\n return (\n
\n \n Welcome!\n \n \n
\n );\n};\n\nexport default OnboardingPage;\n","import { useDispatch, useSelector } from 'react-redux';\nimport footerLogo from '../../images/mussel-app.png';\nimport { selectLang, selectVisibleGuide } from '../../store/ui/ui.selector';\nimport { translate } from '../../lib/lang.helper';\nimport { Button, Modal } from 'antd';\nimport { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { demoAccountLogin } from '../../store/auth/auth.actions';\nimport { hideGuideModal } from '../../store/ui/ui.actions';\n\nconst Footer = () => {\n const dispatch = useDispatch();\n const lang = useSelector(selectLang);\n const visible = useSelector(selectVisibleGuide);\n\n const [disabled, setDisabled] = useState(false);\n\n const hideGuide = () => dispatch(hideGuideModal());\n const viewDemoClick = async () => {\n setDisabled(true);\n await dispatch(demoAccountLogin());\n setDisabled(false);\n hideGuide();\n };\n\n return (\n
\n
\n footer-logo\n
{translate(lang, '_copyright')}
\n
\n {visible && (\n \n
\n

{translate(lang, '_welcome_body')}

\n
\n
\n
\n \n {translate(lang, 'View Demo')}\n \n \n \n \n
\n \n
\n \n )}\n
\n );\n};\n\nexport default Footer;\n","import { Switch, useLocation } from 'react-router-dom';\nimport PrivateRoute from '../components/PrivateRoute';\nimport Header from '../components/header/Header';\nimport Loading from './static/Loading';\nimport NotFound from './static/NotFound';\nimport { useDispatch, useSelector } from 'react-redux';\nimport AdminRoute from './admin/AdminRoute';\nimport { useEffect, useLayoutEffect } from 'react';\nimport { clearFeedback } from '../store/ui/ui.actions';\nimport ProtectedRoute from '../components/ProtectedRoute';\nimport SignIn from './auth/SignIn';\nimport SignUp from './auth/SignUp';\nimport RecoverPassword from './auth/RecoverPassword';\nimport SecondRecoverPassword from './auth/SecondRecoverPassword';\nimport { RegistrationMessage } from '../components/sign-up';\nimport { PasswordMessage } from '../components/recover-password';\nimport { updateSystemSettings } from '../store/utils/utils.actions';\nimport { authLoadMe, updateUserMeta } from '../store/auth/auth.actions';\nimport { is_role_allowed, is_user_allowed } from '../entities/util-functions';\nimport { selectProfile, selectToken } from '../store/auth/auth.selector';\nimport { selectPusher } from '../store/utils/utils.selector';\nimport Pusher from 'pusher-js/with-encryption';\nimport { newMessageReceivedAction } from '../store/users/users.actions';\nimport { normalRoutes } from './RouterHelper';\nimport OnboardingPage from './static/OnboardingPage';\nimport Footer from '../components/header/Footer';\n\nconst Router = () => {\n const dispatch = useDispatch();\n const location = useLocation();\n\n const token = useSelector(selectToken);\n const profile = useSelector(selectProfile);\n const { key: pusherKey, cluster: pusherCluster } = useSelector(selectPusher);\n\n useLayoutEffect(() => {\n dispatch(clearFeedback());\n dispatch(updateSystemSettings());\n\n return () => {};\n }, [dispatch]);\n\n useLayoutEffect(() => {\n window.scrollTo(0, 0);\n }, [location.pathname]);\n\n useEffect(() => {\n if (token) {\n dispatch(authLoadMe());\n }\n }, [token, dispatch]);\n\n useEffect(() => {\n if (profile?.id && pusherKey && pusherCluster) {\n const pusher = new Pusher(pusherKey, { cluster: pusherCluster });\n pusher\n .subscribe('account-user-meta')\n .bind(`account-${profile?.account_id}`, function (data: any) {\n dispatch(updateUserMeta());\n });\n pusher\n .subscribe('account-message')\n .bind(\n `message.created.to.${profile?.account_id}`,\n function (data: any) {\n dispatch(newMessageReceivedAction('ACCOUNT', data?.message));\n },\n );\n pusher\n .subscribe('boat-message')\n .bind(`message.created.to.${profile.account_id}`, function (data: any) {\n dispatch(newMessageReceivedAction('BOAT', data?.message));\n });\n pusher\n .subscribe('user-message')\n .bind(`message.sent.to.${profile?.id}`, function (data: any) {\n dispatch(newMessageReceivedAction('USER', data?.message));\n });\n }\n }, [profile?.id, pusherKey, pusherCluster, dispatch]);\n\n return !token ? (\n <>\n \n \n \n \n \n \n \n \n ) : (\n
\n
\n {profile?.type === 'admin' ? (\n \n ) : (\n \n {normalRoutes\n .filter(x => is_user_allowed(profile?.account_type, x.module))\n .filter(x => is_role_allowed(profile?.role, x.route.path))\n .map((r, i) => (\n \n ))}\n \n \n \n )}\n
\n
\n );\n};\n\nexport default Router;\n","import { BrowserRouter, Route, Switch } from 'react-router-dom';\nimport Router from './pages/Router';\nimport { useEffect } from 'react';\n\nconst App = () => {\n const loadUsetifulScript = () => {\n const script = document.createElement('script');\n script.id = 'usetifulScript';\n script.src = 'https://www.usetiful.com/dist/usetiful.js';\n script.async = true;\n script.dataset.token = 'ca1abd4beb2720b298e72bfe75d09cf4';\n\n document.head.appendChild(script);\n };\n\n useEffect(() => {\n loadUsetifulScript();\n }, []);\n\n return (\n
\n \n \n \n \n \n \n \n
\n );\n};\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { PersistGate } from 'redux-persist/integration/react';\n\nimport { store, persistor } from './store';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nimport 'antd/dist/antd.css';\nimport './styles/index.scss';\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root'),\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}