{"version":3,"sources":["./node_modules/moment/locale sync ^\\.\\/.*$","./src/$_lazy_route_resource lazy namespace object","./src/app/app-routing.module.ts","./src/app/app.component.html","./src/app/app.component.ts","./src/app/app.module.ts","./src/app/classes/Coordinates.ts","./src/app/classes/WebAPIErrors.ts","./src/app/classes/array.ts","./src/app/classes/custom-error-handler.ts","./src/app/classes/dateUtility.ts","./src/app/classes/formValidation.ts","./src/app/classes/geolocation.class.ts","./src/app/classes/highCharts.service.ts","./src/app/classes/keyboardUtility.ts","./src/app/classes/number.ts","./src/app/classes/objectUtility.ts","./src/app/components/admin/main.html","./src/app/components/admin/main.ts","./src/app/components/admin/nav/main.html","./src/app/components/admin/nav/main.ts","./src/app/components/applied-fertilizer-chart/applied-fertilizer-chart.html","./src/app/components/applied-fertilizer-chart/applied-fertilizer-chart.ts","./src/app/components/applied-water-chart/applied-water-chart.html","./src/app/components/applied-water-chart/applied-water-chart.ts","./src/app/components/available-water-chart/available-water-chart.html","./src/app/components/available-water-chart/available-water-chart.ts","./src/app/components/available-water-chart/custom-saturation-help.html","./src/app/components/available-water-chart/custom-saturation-help.ts","./src/app/components/canopy-curve/canopy-dialog.html","./src/app/components/canopy-curve/canopy-dialog.ts","./src/app/components/canopy-curve/canopy-slider.html","./src/app/components/canopy-curve/canopy-slider.ts","./src/app/components/canopy-curve/canopy-table.html","./src/app/components/canopy-curve/canopy-table.ts","./src/app/components/canopy-curve/canopy.service.ts","./src/app/components/canopy-curve/canopy.ts","./src/app/components/casp-dialog/casp-dialog.ts","./src/app/components/casp-dialog/casp.service.ts","./src/app/components/crop-types/canopy-delete-confirmation.html","./src/app/components/crop-types/canopy-delete-confirmation.ts","./src/app/components/crop-types/crop-type-detail.html","./src/app/components/crop-types/crop-type-detail.ts","./src/app/components/crop-types/crop-types.html","./src/app/components/crop-types/crop-types.ts","./src/app/components/crop-types/cropType.update.service.ts","./src/app/components/crop-types/cropTypeFormBuilder.ts","./src/app/components/crop-types/cropTypeViewModelConverter.ts","./src/app/components/crop-types/delete-confirmation.html","./src/app/components/crop-types/delete-confirmation.ts","./src/app/components/crop-types/perennial-canopy.html","./src/app/components/crop-types/perennial-canopy.ts","./src/app/components/crop-types/previous-crop-detail.html","./src/app/components/crop-types/previous-crop-detail.ts","./src/app/components/cut-event/cut-event.component.html","./src/app/components/cut-event/cut-event.component.ts","./src/app/components/cut-event/cutEvent.ts","./src/app/components/cut-event/recalculate-warning.html","./src/app/components/cut-event/recalculate-warning.ts","./src/app/components/cut-event/service.ts","./src/app/components/et-chart/et-chart.html","./src/app/components/et-chart/et-chart.ts","./src/app/components/et-chart/service.ts","./src/app/components/events/buttons/svg/fertilizer.ts.SVGFertilizerComponent.html","./src/app/components/events/buttons/svg/fertilizer.ts","./src/app/components/events/buttons/svg/ranch-marker.ts.SVGRanchMarkerComponent.html","./src/app/components/events/buttons/svg/ranch-marker.ts","./src/app/components/events/buttons/svg/water.ts.SVGWaterComponent.html","./src/app/components/events/buttons/svg/water.ts","./src/app/components/events/events.update.service.ts","./src/app/components/events/table/fertilization-hover-panel/equation-generators/equationGenerator.ts","./src/app/components/events/table/fertilization-hover-panel/equation-generators/lettuceEquationGenerator.ts","./src/app/components/events/table/fertilization-hover-panel/equation-generators/strawberryEquationGenerator.ts","./src/app/components/events/table/fertilization-hover-panel/equation-generators/tomatoEquationGenerator.ts","./src/app/components/events/table/fertilization-hover-panel/equation-generators/treeEquationGenerator.ts","./src/app/components/events/table/fertilization-hover-panel/fertilization-recommendation.ts","./src/app/components/events/table/fertilization-hover-panel/recommendation-summary.html","./src/app/components/events/table/fertilization-hover-panel/recommendation-summary.ts","./src/app/components/feedback/feedback.html","./src/app/components/feedback/feedback.ts","./src/app/components/feedback/service.ts","./src/app/components/fertilization-event/fertilizationEvent.ts","./src/app/components/fertilization-event/main.html","./src/app/components/fertilization-event/main.ts","./src/app/components/fertilization-event/service.ts","./src/app/components/fertilization-event/soil-sample.html","./src/app/components/fertilization-event/soil-sample.ts","./src/app/components/flowmeter-graph/details-table/main.html","./src/app/components/flowmeter-graph/details-table/main.ts","./src/app/components/flowmeter-graph/flowMeter.ts","./src/app/components/flowmeter-graph/flowmeter-chart.update.service.ts","./src/app/components/flowmeter-graph/flowmeter-settings.html","./src/app/components/flowmeter-graph/flowmeter-settings.ts","./src/app/components/flowmeter-graph/main.html","./src/app/components/flowmeter-graph/main.ts","./src/app/components/flowmeter-graph/service.ts","./src/app/components/flowmeter-graph/summary-table/main.html","./src/app/components/flowmeter-graph/summary-table/main.ts","./src/app/components/global-header/global-header.component.html","./src/app/components/global-header/global-header.component.ts","./src/app/components/global-settings/global-settings.component.html","./src/app/components/global-settings/global-settings.component.ts","./src/app/components/global-settings/global-settings.service.ts","./src/app/components/ignore-schedules/ignore-schedule-dialog.html","./src/app/components/ignore-schedules/ignore-schedule-dialog.ts","./src/app/components/ignore-schedules/ignore-schedules.component.html","./src/app/components/ignore-schedules/ignore-schedules.component.ts","./src/app/components/ignore-schedules/ingore-schedule.ts","./src/app/components/ignore-schedules/service.ts","./src/app/components/irrigation-event/delete-confirmation.html","./src/app/components/irrigation-event/delete-confirmation.ts","./src/app/components/irrigation-event/historical-ui/historical-ui.html","./src/app/components/irrigation-event/historical-ui/historical-ui.ts","./src/app/components/irrigation-event/interfaces.ts","./src/app/components/irrigation-event/irrigationEvent.ts","./src/app/components/irrigation-event/irrigationEventUpdateParams.ts","./src/app/components/irrigation-event/irrigationEventUpdateParamsInternal.ts","./src/app/components/irrigation-event/main.html","./src/app/components/irrigation-event/main.ts","./src/app/components/irrigation-event/recalculate-warning.html","./src/app/components/irrigation-event/recalculate-warning.ts","./src/app/components/irrigation-event/recommendation-summary/recommendation-summary.html","./src/app/components/irrigation-event/recommendation-summary/recommendation-summary.ts","./src/app/components/irrigation-event/service.ts","./src/app/components/irrigation-event/update.service.ts","./src/app/components/localization/interfaces.ts","./src/app/components/localization/localization.component.html","./src/app/components/localization/localization.component.ts","./src/app/components/localization/service.ts","./src/app/components/localization/translation.class.ts","./src/app/components/main-menu/main-menu-update.service.ts","./src/app/components/main-menu/main-menu.component.html","./src/app/components/main-menu/main-menu.component.ts","./src/app/components/planting-recalculate-modal/plantingRecalculatorService.ts","./src/app/components/planting-settings/PlantingSettingsFormConverter.ts","./src/app/components/planting-settings/planting.ts","./src/app/components/planting-settings/plantingAdvancedEdit.ts","./src/app/components/planting-settings/plantingSettingValidator.ts","./src/app/components/planting-settings/service.ts","./src/app/components/plantings/plantings.ts","./src/app/components/profile/casp-disconnect-confirmation-dialog.html","./src/app/components/profile/casp-disconnect-confirmation-dialog.ts","./src/app/components/profile/change-password.html","./src/app/components/profile/change-password.ts","./src/app/components/profile/main.html","./src/app/components/profile/main.ts","./src/app/components/profile/nav.html","./src/app/components/profile/nav.ts","./src/app/components/profile/profile.update.service.ts","./src/app/components/profile/tab.ts.ProfileTabComponent.html","./src/app/components/profile/tab.ts","./src/app/components/profile/user-information.html","./src/app/components/profile/user-information.ts","./src/app/components/public/et-calculator/et-calculator-results.component.html","./src/app/components/public/et-calculator/et-calculator-results.component.ts","./src/app/components/public/et-calculator/et-calculator.component.html","./src/app/components/public/et-calculator/et-calculator.component.ts","./src/app/components/public/forget-password/forget-password-confirmation.page.html","./src/app/components/public/forget-password/forget-password-confirmation.page.ts","./src/app/components/public/forget-password/forget-password.page.html","./src/app/components/public/forget-password/forget-password.page.ts","./src/app/components/public/home/home.component.html","./src/app/components/public/home/home.component.ts","./src/app/components/public/login/login.component.html","./src/app/components/public/login/login.component.ts","./src/app/components/public/page-not-found/page-not-found.html","./src/app/components/public/page-not-found/page-not-found.ts","./src/app/components/public/privacy-policy/privacy-policy.html","./src/app/components/public/privacy-policy/privacy-policy.ts","./src/app/components/public/recaptcha.component.html","./src/app/components/public/recaptcha.component.ts","./src/app/components/public/registeration/confirm-email.page.html","./src/app/components/public/registeration/confirm-email.page.ts","./src/app/components/public/registeration/must-confirm-email.page.html","./src/app/components/public/registeration/must-confirmEmail.page.ts","./src/app/components/public/registeration/register.page.html","./src/app/components/public/registeration/register.page.ts","./src/app/components/public/reset-password/reset-password-confirmation.page.html","./src/app/components/public/reset-password/reset-password-confirmation.page.ts","./src/app/components/public/reset-password/reset-password.page.html","./src/app/components/public/reset-password/reset-password-page.ts","./src/app/components/rainfall-chart/rainfall-chart.update.service.ts","./src/app/components/ranch-settings/interfaces.ts","./src/app/components/ranch-settings/modals/cimis-options/main.html","./src/app/components/ranch-settings/modals/cimis-options/main.ts","./src/app/components/ranch-settings/modals/commodityType/create.html","./src/app/components/ranch-settings/modals/commodityType/create.ts","./src/app/components/ranch-settings/modals/commodityType/dialog.html","./src/app/components/ranch-settings/modals/commodityType/dialog.ts","./src/app/components/ranch-settings/modals/email/email.html","./src/app/components/ranch-settings/modals/email/email.ts","./src/app/components/ranch-settings/modals/fertilizer/fertilizer.class.ts","./src/app/components/ranch-settings/modals/fertilizer/fertilizer.create.dialog.html","./src/app/components/ranch-settings/modals/fertilizer/fertilizer.create.dialog.ts","./src/app/components/ranch-settings/modals/fertilizer/fertilizer.delete.dialog.html","./src/app/components/ranch-settings/modals/fertilizer/fertilizer.delete.dialog.ts","./src/app/components/ranch-settings/modals/fertilizer/fertilizer.dialog.base.ts","./src/app/components/ranch-settings/modals/fertilizer/fertilizer.edit.dialog.html","./src/app/components/ranch-settings/modals/fertilizer/fertilizer.edit.dialog.ts","./src/app/components/ranch-settings/modals/fertilizer/fertilizer.view.dialog.html","./src/app/components/ranch-settings/modals/fertilizer/fertilizer.view.dialog.ts","./src/app/components/ranch-settings/modals/fertilizer/interfaces.ts","./src/app/components/ranch-settings/modals/fertilizer/keep-discard.dialog.html","./src/app/components/ranch-settings/modals/fertilizer/keep-discard.dialog.ts","./src/app/components/ranch-settings/modals/fertilizer/sections/edit.html","./src/app/components/ranch-settings/modals/fertilizer/sections/edit.ts","./src/app/components/ranch-settings/modals/fertilizer/sections/fertilizer-list.html","./src/app/components/ranch-settings/modals/fertilizer/sections/fertilizer-list.ts","./src/app/components/ranch-settings/modals/fertilizer/service.ts","./src/app/components/ranch-settings/modals/ranch/main.html","./src/app/components/ranch-settings/modals/ranch/main.ts","./src/app/components/ranch-settings/modals/weather-station/edit.html","./src/app/components/ranch-settings/modals/weather-station/edit.ts","./src/app/components/ranch-settings/modals/weather-station/icons/station-location.ts.SVGStationLocationComponent.html","./src/app/components/ranch-settings/modals/weather-station/icons/station-location.ts","./src/app/components/ranch-settings/modals/weather-station/main.html","./src/app/components/ranch-settings/modals/weather-station/main.ts","./src/app/components/ranch-settings/permissions.service.ts","./src/app/components/ranch-settings/service.ts","./src/app/components/server-error-dialog/http-error-dialog.html","./src/app/components/server-error-dialog/http-error-dialog.ts","./src/app/components/shared/constants.ts","./src/app/components/shared/dialogs/base-dialog.ts","./src/app/components/shared/dialogs/delete-confirmation.html","./src/app/components/shared/dialogs/delete-confirmation.ts","./src/app/components/shared/dialogs/keep-discard-dialog.html","./src/app/components/shared/dialogs/keep-discard-dialog.ts","./src/app/components/shared/dialogs/update.service.ts","./src/app/components/shared/form/form.ts","./src/app/components/shared/highchartsExportOptions.ts","./src/app/components/shared/info-icon/main.html","./src/app/components/shared/info-icon/main.ts","./src/app/components/shared/notification/main.html","./src/app/components/shared/notification/main.ts","./src/app/components/shared/slider-button/main.html","./src/app/components/shared/slider-button/main.ts","./src/app/components/soil-moisture/service.ts","./src/app/components/soil-moisture/soil-moisture-dialog.html","./src/app/components/soil-moisture/soil-moisture-dialog.ts","./src/app/components/soil-moisture/soil-moisture.component.html","./src/app/components/soil-moisture/soil-moisture.component.ts","./src/app/components/soil-moisture/soilMoisture.ts","./src/app/components/soil-moisture/soilMoistureSeriesConverter.ts","./src/app/components/soil-moisture/soilSeriesCharts.ts","./src/app/components/soil-sample-event/main.html","./src/app/components/soil-sample-event/main.ts","./src/app/components/soil-sample-event/service.ts","./src/app/components/soil-sample-event/soilSampleEvent.ts","./src/app/components/soil-sample-event/warning.html","./src/app/components/soil-sample-event/warning.ts","./src/app/components/support/support.html","./src/app/components/support/support.ts","./src/app/components/tissue-sample-event/interfaces.ts","./src/app/components/tissue-sample-event/service.ts","./src/app/components/tissue-sample-event/tissue-sample-event.component.html","./src/app/components/tissue-sample-event/tissue-sample-event.component.ts","./src/app/components/tissue-sample-event/tissueSampleEvent.ts","./src/app/components/weather-stations/cimis-day-data.service.ts","./src/app/components/weather-stations/deactivate-weather-station-dialog.html","./src/app/components/weather-stations/deactivate-weather-station-dialog.ts","./src/app/components/weather-stations/historical-et.service.ts","./src/app/components/weather-stations/missing-station-records.html","./src/app/components/weather-stations/missing-station-records.ts","./src/app/components/weather-stations/weather-api.service.ts","./src/app/components/weather-stations/weather-station-dialog.html","./src/app/components/weather-stations/weather-station-dialog.ts","./src/app/components/weather-stations/weather-station-stats-dialog.html","./src/app/components/weather-stations/weather-station-stats-dialog.ts","./src/app/components/weather-stations/weather-stations.component.html","./src/app/components/weather-stations/weather-stations.component.ts","./src/app/components/weather-stations/weatherStation.ts","./src/app/components/weather-stations/weatherStationStatsCharts.ts","./src/app/core.module.ts","./src/app/directives/clickOutsideDirective.ts","./src/app/directives/map-control.directive.ts","./src/app/directives/maxNumber.ts","./src/app/directives/minNumber.ts","./src/app/interfaces/abstract.ts","./src/app/interfaces/constants.ts","./src/app/interfaces/interfaces.ts","./src/app/interfaces/nav.interface.ts","./src/app/interfaces/tab.interface.ts","./src/app/models/commodity-type/commodityType.ts","./src/app/models/commodity-type/interfaces.ts","./src/app/models/commodity-type/service.ts","./src/app/models/crop-stage/cropStage.service.ts","./src/app/models/crop-type/cropType.ts","./src/app/models/crop-type/service.ts","./src/app/models/event/event.ts","./src/app/models/event/eventResponse.ts","./src/app/models/event/eventUtility.ts","./src/app/models/fertilization-event-well/service.ts","./src/app/models/micro-sprinkler/service.ts","./src/app/models/planting-well/service.ts","./src/app/models/soil-type/service.ts","./src/app/models/user/interfaces.ts","./src/app/models/user/service.ts","./src/app/models/weather-station-stats/service.ts","./src/app/modules/shared/shared.module.ts","./src/app/pipes/pipes.misc.ts","./src/app/pipes/translate.pipe.ts","./src/app/services/calculate.service.ts","./src/app/services/constants.ts","./src/app/services/cookie.service.ts","./src/app/services/error.service.ts","./src/app/services/http.service.ts","./src/app/services/login.service.ts","./src/app/services/model.service.ts","./src/app/services/notification.service.ts","./src/app/services/persistent-database.ts","./src/app/services/subscriptions/lot.subscription.ts","./src/app/services/token.service.ts","./src/app/services/tooltip.service.ts","./src/app/services/update.service.ts","./src/app/services/validate.service.ts","./src/environments/environment.ts","./src/main.ts"],"names":[],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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","file":"main.ada2e23536a2d2f1a8d9.js","sourcesContent":["var map = {\n\t\"./af\": \"./node_modules/moment/locale/af.js\",\n\t\"./af.js\": \"./node_modules/moment/locale/af.js\",\n\t\"./ar\": \"./node_modules/moment/locale/ar.js\",\n\t\"./ar-dz\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-dz.js\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-kw\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-kw.js\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-ly\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ly.js\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ma\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-ma.js\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-sa\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-sa.js\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-tn\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar-tn.js\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar.js\": \"./node_modules/moment/locale/ar.js\",\n\t\"./az\": \"./node_modules/moment/locale/az.js\",\n\t\"./az.js\": \"./node_modules/moment/locale/az.js\",\n\t\"./be\": \"./node_modules/moment/locale/be.js\",\n\t\"./be.js\": \"./node_modules/moment/locale/be.js\",\n\t\"./bg\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bg.js\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bm\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bm.js\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bn\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bn.js\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bo\": \"./node_modules/moment/locale/bo.js\",\n\t\"./bo.js\": \"./node_modules/moment/locale/bo.js\",\n\t\"./br\": \"./node_modules/moment/locale/br.js\",\n\t\"./br.js\": \"./node_modules/moment/locale/br.js\",\n\t\"./bs\": \"./node_modules/moment/locale/bs.js\",\n\t\"./bs.js\": \"./node_modules/moment/locale/bs.js\",\n\t\"./ca\": \"./node_modules/moment/locale/ca.js\",\n\t\"./ca.js\": \"./node_modules/moment/locale/ca.js\",\n\t\"./cs\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cs.js\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cv\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cv.js\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cy\": \"./node_modules/moment/locale/cy.js\",\n\t\"./cy.js\": \"./node_modules/moment/locale/cy.js\",\n\t\"./da\": \"./node_modules/moment/locale/da.js\",\n\t\"./da.js\": \"./node_modules/moment/locale/da.js\",\n\t\"./de\": \"./node_modules/moment/locale/de.js\",\n\t\"./de-at\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-at.js\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-ch\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de-ch.js\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de.js\": \"./node_modules/moment/locale/de.js\",\n\t\"./dv\": \"./node_modules/moment/locale/dv.js\",\n\t\"./dv.js\": \"./node_modules/moment/locale/dv.js\",\n\t\"./el\": \"./node_modules/moment/locale/el.js\",\n\t\"./el.js\": \"./node_modules/moment/locale/el.js\",\n\t\"./en-au\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-au.js\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-ca\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-ca.js\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-gb\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-gb.js\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-ie\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-ie.js\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-il\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-il.js\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-nz\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./en-nz.js\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./eo\": \"./node_modules/moment/locale/eo.js\",\n\t\"./eo.js\": \"./node_modules/moment/locale/eo.js\",\n\t\"./es\": \"./node_modules/moment/locale/es.js\",\n\t\"./es-do\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-do.js\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-us\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es-us.js\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es.js\": \"./node_modules/moment/locale/es.js\",\n\t\"./et\": \"./node_modules/moment/locale/et.js\",\n\t\"./et.js\": \"./node_modules/moment/locale/et.js\",\n\t\"./eu\": \"./node_modules/moment/locale/eu.js\",\n\t\"./eu.js\": \"./node_modules/moment/locale/eu.js\",\n\t\"./fa\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fa.js\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fi\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fi.js\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fo\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fo.js\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fr\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fr-ca\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ca.js\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ch\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr-ch.js\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr.js\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fy\": \"./node_modules/moment/locale/fy.js\",\n\t\"./fy.js\": \"./node_modules/moment/locale/fy.js\",\n\t\"./gd\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gd.js\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gl\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gl.js\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gom-latn\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gom-latn.js\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gu\": \"./node_modules/moment/locale/gu.js\",\n\t\"./gu.js\": \"./node_modules/moment/locale/gu.js\",\n\t\"./he\": \"./node_modules/moment/locale/he.js\",\n\t\"./he.js\": \"./node_modules/moment/locale/he.js\",\n\t\"./hi\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hi.js\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hr\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hr.js\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hu\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hu.js\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hy-am\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./hy-am.js\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./id\": \"./node_modules/moment/locale/id.js\",\n\t\"./id.js\": \"./node_modules/moment/locale/id.js\",\n\t\"./is\": \"./node_modules/moment/locale/is.js\",\n\t\"./is.js\": \"./node_modules/moment/locale/is.js\",\n\t\"./it\": \"./node_modules/moment/locale/it.js\",\n\t\"./it.js\": \"./node_modules/moment/locale/it.js\",\n\t\"./ja\": \"./node_modules/moment/locale/ja.js\",\n\t\"./ja.js\": \"./node_modules/moment/locale/ja.js\",\n\t\"./jv\": \"./node_modules/moment/locale/jv.js\",\n\t\"./jv.js\": \"./node_modules/moment/locale/jv.js\",\n\t\"./ka\": \"./node_modules/moment/locale/ka.js\",\n\t\"./ka.js\": \"./node_modules/moment/locale/ka.js\",\n\t\"./kk\": \"./node_modules/moment/locale/kk.js\",\n\t\"./kk.js\": \"./node_modules/moment/locale/kk.js\",\n\t\"./km\": \"./node_modules/moment/locale/km.js\",\n\t\"./km.js\": \"./node_modules/moment/locale/km.js\",\n\t\"./kn\": \"./node_modules/moment/locale/kn.js\",\n\t\"./kn.js\": \"./node_modules/moment/locale/kn.js\",\n\t\"./ko\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ko.js\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ky\": \"./node_modules/moment/locale/ky.js\",\n\t\"./ky.js\": \"./node_modules/moment/locale/ky.js\",\n\t\"./lb\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lb.js\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lo\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lo.js\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lt\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lt.js\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lv\": \"./node_modules/moment/locale/lv.js\",\n\t\"./lv.js\": \"./node_modules/moment/locale/lv.js\",\n\t\"./me\": \"./node_modules/moment/locale/me.js\",\n\t\"./me.js\": \"./node_modules/moment/locale/me.js\",\n\t\"./mi\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mi.js\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mk\": \"./node_modules/moment/locale/mk.js\",\n\t\"./mk.js\": \"./node_modules/moment/locale/mk.js\",\n\t\"./ml\": \"./node_modules/moment/locale/ml.js\",\n\t\"./ml.js\": \"./node_modules/moment/locale/ml.js\",\n\t\"./mn\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mn.js\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mr\": \"./node_modules/moment/locale/mr.js\",\n\t\"./mr.js\": \"./node_modules/moment/locale/mr.js\",\n\t\"./ms\": \"./node_modules/moment/locale/ms.js\",\n\t\"./ms-my\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms-my.js\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms.js\": \"./node_modules/moment/locale/ms.js\",\n\t\"./mt\": \"./node_modules/moment/locale/mt.js\",\n\t\"./mt.js\": \"./node_modules/moment/locale/mt.js\",\n\t\"./my\": \"./node_modules/moment/locale/my.js\",\n\t\"./my.js\": \"./node_modules/moment/locale/my.js\",\n\t\"./nb\": \"./node_modules/moment/locale/nb.js\",\n\t\"./nb.js\": \"./node_modules/moment/locale/nb.js\",\n\t\"./ne\": \"./node_modules/moment/locale/ne.js\",\n\t\"./ne.js\": \"./node_modules/moment/locale/ne.js\",\n\t\"./nl\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nl-be\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl-be.js\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl.js\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nn\": \"./node_modules/moment/locale/nn.js\",\n\t\"./nn.js\": \"./node_modules/moment/locale/nn.js\",\n\t\"./pa-in\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pa-in.js\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pl\": \"./node_modules/moment/locale/pl.js\",\n\t\"./pl.js\": \"./node_modules/moment/locale/pl.js\",\n\t\"./pt\": \"./node_modules/moment/locale/pt.js\",\n\t\"./pt-br\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt-br.js\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt.js\": \"./node_modules/moment/locale/pt.js\",\n\t\"./ro\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ro.js\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ru\": \"./node_modules/moment/locale/ru.js\",\n\t\"./ru.js\": \"./node_modules/moment/locale/ru.js\",\n\t\"./sd\": \"./node_modules/moment/locale/sd.js\",\n\t\"./sd.js\": \"./node_modules/moment/locale/sd.js\",\n\t\"./se\": \"./node_modules/moment/locale/se.js\",\n\t\"./se.js\": \"./node_modules/moment/locale/se.js\",\n\t\"./si\": \"./node_modules/moment/locale/si.js\",\n\t\"./si.js\": \"./node_modules/moment/locale/si.js\",\n\t\"./sk\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sk.js\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sl\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sl.js\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sq\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sq.js\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sr\": \"./node_modules/moment/locale/sr.js\",\n\t\"./sr-cyrl\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr-cyrl.js\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr.js\": \"./node_modules/moment/locale/sr.js\",\n\t\"./ss\": \"./node_modules/moment/locale/ss.js\",\n\t\"./ss.js\": \"./node_modules/moment/locale/ss.js\",\n\t\"./sv\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sv.js\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sw\": \"./node_modules/moment/locale/sw.js\",\n\t\"./sw.js\": \"./node_modules/moment/locale/sw.js\",\n\t\"./ta\": \"./node_modules/moment/locale/ta.js\",\n\t\"./ta.js\": \"./node_modules/moment/locale/ta.js\",\n\t\"./te\": \"./node_modules/moment/locale/te.js\",\n\t\"./te.js\": \"./node_modules/moment/locale/te.js\",\n\t\"./tet\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tet.js\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tg\": \"./node_modules/moment/locale/tg.js\",\n\t\"./tg.js\": \"./node_modules/moment/locale/tg.js\",\n\t\"./th\": \"./node_modules/moment/locale/th.js\",\n\t\"./th.js\": \"./node_modules/moment/locale/th.js\",\n\t\"./tl-ph\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tl-ph.js\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tlh\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tlh.js\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tr\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tr.js\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tzl\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzl.js\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzm\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./tzm-latn\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm-latn.js\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm.js\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./ug-cn\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./ug-cn.js\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./uk\": \"./node_modules/moment/locale/uk.js\",\n\t\"./uk.js\": \"./node_modules/moment/locale/uk.js\",\n\t\"./ur\": \"./node_modules/moment/locale/ur.js\",\n\t\"./ur.js\": \"./node_modules/moment/locale/ur.js\",\n\t\"./uz\": \"./node_modules/moment/locale/uz.js\",\n\t\"./uz-latn\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz-latn.js\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz.js\": \"./node_modules/moment/locale/uz.js\",\n\t\"./vi\": \"./node_modules/moment/locale/vi.js\",\n\t\"./vi.js\": \"./node_modules/moment/locale/vi.js\",\n\t\"./x-pseudo\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./x-pseudo.js\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./yo\": \"./node_modules/moment/locale/yo.js\",\n\t\"./yo.js\": \"./node_modules/moment/locale/yo.js\",\n\t\"./zh-cn\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-cn.js\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-hk\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-hk.js\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-tw\": \"./node_modules/moment/locale/zh-tw.js\",\n\t\"./zh-tw.js\": \"./node_modules/moment/locale/zh-tw.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./node_modules/moment/locale sync recursive ^\\\\.\\\\/.*$\";","var map = {\n\t\"./modules/crop-stages/crop-stages.module.ngfactory\": [\n\t\t\"./src/app/modules/crop-stages/crop-stages.module.ngfactory.js\",\n\t\t\"modules-crop-stages-crop-stages-module-ngfactory\"\n\t],\n\t\"./modules/dashboard.module.ngfactory\": [\n\t\t\"./src/app/modules/dashboard.module.ngfactory.js\",\n\t\t\"modules-dashboard-module-ngfactory\"\n\t],\n\t\"./modules/flowmeter/flowmeter.module.ngfactory\": [\n\t\t\"./src/app/modules/flowmeter/flowmeter.module.ngfactory.js\",\n\t\t\"modules-flowmeter-flowmeter-module-ngfactory\"\n\t],\n\t\"./modules/ranch-home.module.ngfactory\": [\n\t\t\"./src/app/modules/ranch-home.module.ngfactory.js\",\n\t\t\"default~modules-ranch-home-module-ngfactory~modules-ranches-admin-ranches-module-ngfactory\",\n\t\t\"modules-ranch-home-module-ngfactory\"\n\t],\n\t\"./modules/ranches/admin-ranches.module.ngfactory\": [\n\t\t\"./src/app/modules/ranches/admin-ranches.module.ngfactory.js\",\n\t\t\"default~modules-ranch-home-module-ngfactory~modules-ranches-admin-ranches-module-ngfactory\",\n\t\t\"modules-ranches-admin-ranches-module-ngfactory\"\n\t],\n\t\"./modules/statistics/statistics.module.ngfactory\": [\n\t\t\"./src/app/modules/statistics/statistics.module.ngfactory.js\",\n\t\t\"common\",\n\t\t\"modules-statistics-statistics-module-ngfactory\"\n\t],\n\t\"./modules/user-management/user-management.module.ngfactory\": [\n\t\t\"./src/app/modules/user-management/user-management.module.ngfactory.js\",\n\t\t\"modules-user-management-user-management-module-ngfactory\"\n\t],\n\t\"./modules/web-api-stats/web-stats.module.ngfactory\": [\n\t\t\"./src/app/modules/web-api-stats/web-stats.module.ngfactory.js\",\n\t\t\"common\",\n\t\t\"modules-web-api-stats-web-stats-module-ngfactory\"\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = \"./src/$$_lazy_route_resource lazy recursive\";\nmodule.exports = webpackAsyncContext;","import { NgModule, Injectable } from '@angular/core';\r\nimport { RouterModule, Routes, PreloadAllModules, CanDeactivate } from '@angular/router';\r\n\r\nimport { AdminComponent } from './components/admin/main';\r\nimport { ProfileComponent } from './components/profile/main';\r\nimport { IgnoreSchedulesComponent } from './components/ignore-schedules/ignore-schedules.component';\r\nimport { WeatherStationsComponent } from './components/weather-stations/weather-stations.component';\r\nimport { LocalizationComponent } from './components/localization/localization.component';\r\nimport { SoilMoistureComponent } from './components/soil-moisture/soil-moisture.component';\r\nimport { CropTypeListComponent } from './components/crop-types/crop-types';\r\nimport { CropTypeDetailComponent } from './components/crop-types/crop-type-detail';\r\nimport { HomeComponent } from './components/public/home/home.component';\r\nimport { LoginComponent } from './components/public/login/login.component';\r\nimport { ForgetPasswordPage } from './components/public/forget-password/forget-password.page';\r\nimport { ForgetPasswordConfirmationPage } from './components/public/forget-password/forget-password-confirmation.page';\r\nimport { ResetPasswordPage } from './components/public/reset-password/reset-password-page';\r\nimport { ResetPasswordConfirmationPage } from './components/public/reset-password/reset-password-confirmation.page';\r\nimport { RegistrationPage } from './components/public/registeration/register.page';\r\nimport { MustConfirmEmailPage } from './components/public/registeration/must-confirmEmail.page';\r\nimport { ConfirmEmailPage } from './components/public/registeration/confirm-email.page';\r\nimport { PrivacyPolicyComponent } from './components/public/privacy-policy/privacy-policy';\r\nimport { loginTypes } from './services/constants';\r\nimport { PreviousCropDetailComponent } from './components/crop-types/previous-crop-detail';\r\nimport { PageNotFoundComponent } from './components/public/page-not-found/page-not-found';\r\nimport { MissingStationRecordsComponent } from './components/weather-stations/missing-station-records';\r\nimport { GlobalSettingsComponent } from './components/global-settings/global-settings.component';\r\nimport { ETCalculatorComponent } from './components/public/et-calculator/et-calculator.component';\r\nimport { ETCalculatorResultsComponent } from './components/public/et-calculator/et-calculator-results.component';\r\n\r\n@Injectable()\r\nexport class ConfirmDeactivateGuard implements CanDeactivate<CropTypeDetailComponent> {\r\n\r\n\tcanDeactivate(target: CropTypeDetailComponent) {\r\n\t\tif (target.hasChanges) {\r\n\t\t\treturn window.confirm('You made changes to this form. Do you really want to navigate away from this page?');\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n}\r\nconst routes: Routes = [\r\n\t{ path: '', component: HomeComponent },\r\n\t{ path: 'login', component: LoginComponent },\r\n\t{ path: 'et-calculator', component: ETCalculatorComponent },\r\n\t{ path: 'et-calculator-results', component: ETCalculatorResultsComponent },\r\n\t{ path: 'workshop', component: LoginComponent, data: { type: loginTypes.WORKSHOP }},\r\n\t// workshop only login URL - logging in through this path will associate the user with UCCE ranch\r\n\t{ path: 'privacyPolicy', component: PrivacyPolicyComponent },\r\n\t{ path: 'MyDashboard', loadChildren: './modules/dashboard.module#DashboardModule' },\r\n\t{ path: 'RanchHome', loadChildren: './modules/ranch-home.module#RanchHomeModule' },\r\n\r\n\t{ path: 'forgetPassword', component: ForgetPasswordPage },\r\n\t{ path: 'forgetPasswordConfirmation', component: ForgetPasswordConfirmationPage },\r\n\t{ path: 'resetPassword', component: ResetPasswordPage },\r\n\t{ path: 'resetPasswordConfirmation', component: ResetPasswordConfirmationPage },\r\n\t{ path: 'register', component: RegistrationPage },\r\n\t{ path: 'mustConfirmEmail', component: MustConfirmEmailPage },\r\n\t{ path: 'confirmEmail', component: ConfirmEmailPage },\r\n\r\n\t{ path: 'Administration', component: AdminComponent },\r\n\t{ path: 'Profile', component: ProfileComponent },\r\n\t{ path: 'IgnoreSchedules', component: IgnoreSchedulesComponent },\r\n\t{ path: 'WeatherStations', component: WeatherStationsComponent },\r\n\t{ path: 'CropTypes', component: CropTypeListComponent },\r\n\t{ path: 'GlobalSettings', component: GlobalSettingsComponent },\r\n\t{ path: 'CropTypeDetails', component: CropTypeDetailComponent, canDeactivate: [ConfirmDeactivateGuard]},\r\n\t{ path: 'MissingStationRecords', component: MissingStationRecordsComponent },\r\n\t{ path: 'PreviousCropDetails', component: PreviousCropDetailComponent },\r\n\t{ path: 'Localization', component: LocalizationComponent },\r\n\t{ path: 'Ranches', loadChildren: './modules/ranches/admin-ranches.module#AdminRanchesModule'},\r\n\t{ path: 'SoilSensor', component: SoilMoistureComponent },\r\n\t{ path: 'userManagement', loadChildren: './modules/user-management/user-management.module#UserManagementModule'},\r\n\t{ path: 'flowmeter', loadChildren: './modules/flowmeter/flowmeter.module#FlowmeterModule'},\r\n\t{ path: 'cropStages', loadChildren: './modules/crop-stages/crop-stages.module#CropStagesModule'},\r\n\t{ path: 'statistics', loadChildren: './modules/statistics/statistics.module#StatisticsModule'},\r\n\t{ path: 'WebAPIStatistics', loadChildren: './modules/web-api-stats/web-stats.module#WebAPIStatisticsModule'},\r\n\t{ path: '**', component: PageNotFoundComponent }\r\n];\r\n\r\n@NgModule({\r\n\timports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })],\r\n\texports: [RouterModule],\r\n\tproviders: []\r\n})\r\n\r\nexport class AppRoutingModule { }\r\n\r\n","<div class=\"app-container\">\r\n    <!-- HEADER -->\r\n    <global-header></global-header>\r\n    <!-- uncomment HTML block below if we want to display a global notification -->\r\n    <!--\r\n    <div *ngIf=\"persistentDatabase.isGlobalNotificationVisible\"\r\n        class=\"bk-notification-global\">\r\n        <i class=\"fa fa-close\" (click)=\"dismissGlobalNotification()\"></i>\r\n        <h2>Donate to Sustain CropManage</h2>\r\n        <p>\r\n            We need your help to maintain and improve CropManage.\r\n            We are constantly fixing bugs and adding new features.  Hosting CropManage on a professional cloud server and\r\n            storing user data also has fixed costs.\r\n            Through grants, UC Cooperative Extension has paid these expenses as well as the salary of a full-time professional\r\n            software engineer who keeps CropManage running smoothly and adds new capabilities and features.\r\n            While we will continue to seek out new grant opportunities, your donation can help offset the costs\r\n            of operating CropManage and to assure that this valuable online tool is sustained into the future.\r\n        </p>\r\n        <p>If you have found CropManage to be a valuable service for your farming operation or company, please consider donating.\r\n            Just <a href=\"{{ donationLink }}\" target=\"_blank\">click here</a> to donate.</p>\r\n    </div>\r\n    -->\r\n\r\n    <router-outlet></router-outlet>\r\n\r\n    <!-- FOOTER -->\r\n\r\n    <div *ngIf=\"!isAuthenticated\" \r\n        class=\"bk-footer bk-footer--hidden-mobile\">\r\n        <ul class=\"bk-footer__links\">\r\n            <li class=\"bk-footer__link\"><a href=\"http://help.cropmanage.ucanr.edu/tutorials/\" target=\"_blank\">{{'Help' | translate }}</a></li>\r\n            <li class=\"bk-footer__link\"><a href=\"http://ucanr.edu/sites/anrstaff/Diversity/Affirmative_Action/Resources/Policy-related_downloads/\" target=\"_blank\">\r\n                {{'Disclaimer' | translate }}\r\n            </a></li>\r\n            <li class=\"bk-footer__link\"><a href=\"http://ucanr.edu/Accessibility/\" target=\"_blank\">{{'Accessibility' | translate }}</a></li>\r\n            <li class=\"bk-footer__link\"><a routerLink=\"/privacyPolicy\">{{'Privacy' | translate }}</a></li>\r\n            <li class=\"bk-footer__link\"><a href=\"{{ donationLink }}\" target=\"_blank\">{{'Donate' | translate }}</a></li>\r\n        </ul>\r\n        <div class=\"bk-footer__logo-container\">\r\n            <div class=\"bk-footer__logo\">\r\n                <img alt=\"{{'research powered by University of California' | translate }}\" src=\"assets/images/logos/powered-by-uoc-logo.svg\" />\r\n            </div>\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { Component, OnInit, ViewChild, OnDestroy } from '@angular/core';\r\nimport { TranslateService } from './components/localization/service';\r\nimport { MainMenuComponent } from './components/main-menu/main-menu.component';\r\nimport { CommodityService } from './models/commodity-type/service';\r\nimport { PersistentDatabase } from './services/persistent-database';\r\nimport { CookieService } from './services/cookie.service';\r\nimport { TokenService } from './services/token.service';\r\nimport { NotificationService } from './services/notification.service';\r\nimport { VersionUpgradeCookieName, ReleaseVersion, DONATE_URL } from './services/constants';\r\nimport { eNotificationTypes } from './interfaces/constants';\r\nimport { MainMenuUpdateService } from './components/main-menu/main-menu-update.service';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'my-app',\r\n\ttemplateUrl: `app.component.html`,\r\n\tstyleUrls: ['app.component.css']\r\n})\r\n\r\nexport class AppComponent implements OnInit, OnDestroy {\r\n\t@ViewChild(MainMenuComponent, { static: true }) public mainMenuComponent: MainMenuComponent;\r\n\r\n\tpublic donationLink = DONATE_URL;\r\n\tpublic isAuthenticated: boolean;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tpublic translateService: TranslateService,\r\n\t\tpublic persistentDatabase: PersistentDatabase,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate _mainMenuUpdateService: MainMenuUpdateService,\r\n\t\tprivate _commodityService: CommodityService) { }\r\n\r\n\tngOnInit() {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.isAuthenticated = this._tokenService.isAuthenticated();\r\n\r\n\t\tif (this.isAuthenticated === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (CookieService.get(VersionUpgradeCookieName) === 'yes') {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\tmessage: 'CropManage has been updated to version ' + ReleaseVersion\r\n\t\t\t});\r\n\r\n\t\t\tCookieService.delete(VersionUpgradeCookieName);\r\n\t\t}\r\n\r\n\t\tthis.persistentDatabase.isGlobalNotificationVisible = this.persistentDatabase.GlobalNotificationIsVisible();\r\n\t\tthis._commodityService.list();\r\n\r\n\t\tthis._mainMenuUpdateService.userAuthStatusChanged$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\r\n\t\t\tthis.isAuthenticated = this._tokenService.isAuthenticated();\r\n\t\t})\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic dismissGlobalNotification(): void {\r\n\t\tconst expireDays: number = 3 * 30; // 3 months\r\n\r\n\t\tCookieService.set(this.persistentDatabase.globalNotificationCookieName, 'globalNotification', expireDays);\r\n\t\tthis.persistentDatabase.isGlobalNotificationVisible = false;\r\n\t}\r\n}\r\n","/*modules*/\r\nimport { NgModule, ErrorHandler } from '@angular/core';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ModalModule } from 'ngx-bootstrap';\r\nimport { DragulaModule } from 'ng2-dragula';\r\nimport { MyDatePickerModule } from 'mydatepicker';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { NgxPopperModule } from 'ngx-popper';\r\nimport { DecimalPipe } from '@angular/common';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n/*google maps module*/\r\nimport { AgmCoreModule } from '@agm/core';\r\n\r\n/*custom routing module*/\r\nimport { AppRoutingModule, ConfirmDeactivateGuard } from './app-routing.module';\r\n\r\n/*components*/\r\nimport { AppComponent } from './app.component';\r\n\r\nimport { MainMenuComponent } from './components/main-menu/main-menu.component';\r\n\r\nimport { AddEventsComponent } from './components/events/buttons/create-events/main';\r\n\r\nimport { AdminComponent } from './components/admin/main';\r\n\r\nimport { ProfileComponent } from './components/profile/main';\r\nimport { ProfileNavComponent } from './components/profile/nav';\r\nimport { ProfileTabComponent } from './components/profile/tab';\r\nimport { UserInformationComponent } from './components/profile/user-information';\r\nimport { ChangePasswordComponent } from './components/profile/change-password';\r\nimport { LocalizationComponent } from './components/localization/localization.component';\r\n\r\nimport { IrrigationEventComponent } from './components/irrigation-event/main';\r\nimport { FertilizationEventDialog } from './components/fertilization-event/main';\r\n\r\nimport { SoilSampleEventDialog } from './components/soil-sample-event/main';\r\n\r\nimport { AbstractModalComponent } from './components/shared/abstract-modal/main';\r\n\r\nimport { TabComponent } from './components/shared/tab/main';\r\nimport { HorizontalNavComponent } from './components/shared/horizontal-nav/main';\r\nimport { CanopyTableComponent } from './components/canopy-curve/canopy-table';\r\nimport { SliderButtonComponent } from './components/shared/slider-button/main';\r\nimport { SoilMoistureComponent } from './components/soil-moisture/soil-moisture.component';\r\n\r\nimport { WeatherStationsComponent } from './components/weather-stations/weather-stations.component';\r\nimport { IgnoreSchedulesComponent } from './components/ignore-schedules/ignore-schedules.component';\r\nimport { NotificationComponent } from './components/shared/notification/main';\r\n\r\n/* SVG Components */\r\n\r\n/*dialogs*/\r\nimport { HttpErrorDialog } from './components/server-error-dialog/http-error-dialog';\r\nimport { CanopyDialog } from './components/canopy-curve/canopy-dialog';\r\nimport { SoilMoistureDialog } from './components/soil-moisture/soil-moisture-dialog';\r\n\r\nimport { WeatherStationDialog } from './components/weather-stations/weather-station-dialog';\r\nimport { WeatherStationStatsDialog } from './components/weather-stations/weather-station-stats-dialog';\r\nimport { DeactivateWeatherStationDialog } from './components/weather-stations/deactivate-weather-station-dialog';\r\nimport { IgnoreScheduleDialog } from './components/ignore-schedules/ignore-schedule-dialog';\r\n\r\n/*services*/\r\nimport { RanchService } from './components/ranch-settings/service';\r\nimport { UpdateService } from './services/update.service';\r\nimport { PermissionsService } from './components/ranch-settings/permissions.service';\r\nimport { TranslateService } from './components/localization/service';\r\nimport { CookieService } from './services/cookie.service';\r\nimport { SoilTypeService } from './models/soil-type/service';\r\nimport { UserService } from './models/user/service';\r\nimport { CalculateService } from './services/calculate.service';\r\nimport { HttpService } from './services/http.service';\r\nimport { ValidateService } from './services/validate.service';\r\nimport { ErrorService } from './services/error.service';\r\nimport { CustomErrorHandler } from './classes/custom-error-handler';\r\nimport { TooltipService } from './services/tooltip.service';\r\nimport { CommodityService } from './models/commodity-type/service';\r\nimport { CanopyService } from './components/canopy-curve/canopy.service';\r\nimport { SoilMoistureService } from './components/soil-moisture/service';\r\nimport { WeatherStationsService } from './models/weather-station-stats/service';\r\nimport { NotificationService } from './services/notification.service';\r\nimport { IgnoreSchedulesService } from './components/ignore-schedules/service';\r\nimport { CutEventService } from './components/cut-event/service';\r\nimport { IrrigationService } from './components/irrigation-event/service';\r\nimport { FertilizationEventService } from './components/fertilization-event/service';\r\nimport { SoilSampleEventService } from './components/soil-sample-event/service';\r\nimport { MicroSprinklerService } from './models/micro-sprinkler/service'\r\nimport { ModelService } from './services/model.service';\r\nimport { CropTypeService } from './models/crop-type/service';\r\nimport { FlowmeterService } from './components/flowmeter-graph/service';\r\nimport { FertilizationEventWellService } from './models/fertilization-event-well/service';\r\nimport { PlantingWellService } from './models/planting-well/service';\r\nimport { PersistentDatabase } from './services/persistent-database';\r\n\r\n/*interfaces*/\r\nimport { NavInterface } from './interfaces/nav.interface';\r\nimport { TabInterface } from './interfaces/tab.interface';\r\n\r\n/*pipes*/\r\n\r\nimport {\r\n\tCheckForNA, CheckForWetDate, NAifRainfall, ZeroIfEmpty,\r\n\tStringifyListPipe, YesNoPipe\r\n} from './pipes/pipes.misc';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n/*directives*/\r\n\r\nimport { CoreModule } from './core.module';\r\n\r\nimport * as jQuery from 'jquery';\r\n\r\nimport { SVGLotComponent } from './components/events/buttons/svg/lot';\r\nimport { SVGWeatherComponent } from './components/events/buttons/svg/weather';\r\nimport { SVGWellComponent } from './components/events/buttons/svg/well';\r\nimport { SVGFertilizerNoStrokeComponent } from './components/events/buttons/svg/fertilizer-no-stroke';\r\nimport { CutEventRecalculateWarningComponent } from './components/cut-event/recalculate-warning';\r\nimport { IrrigationEventRecalculateWarningDialog } from './components/irrigation-event/recalculate-warning';\r\nimport { CommodityTypeDialog } from './components/ranch-settings/modals/commodityType/dialog';\r\nimport { SVGCommodityTypeComponent } from './components/events/buttons/svg/commodity-type';\r\nimport { CommodityTypeCreateDialog } from './components/ranch-settings/modals/commodityType/create';\r\nimport { HistoricalUIComponent } from './components/irrigation-event/historical-ui/historical-ui';\r\n\r\nimport { CropTypeListComponent } from './components/crop-types/crop-types';\r\nimport { CropTypeDetailComponent } from './components/crop-types/crop-type-detail';\r\nimport { FormInputComponent } from './components/shared/form/input';\r\n\r\nimport { TissueSampleEventComponent } from './components/tissue-sample-event/tissue-sample-event.component';\r\nimport { TissueSampleEventService } from './components/tissue-sample-event/service';\r\nimport { AbstractMatDialog } from './components/shared/abstract-modal/matDialog';\r\nimport { CropStageService } from './models/crop-stage/cropStage.service';\r\n\r\nimport { ETChartComponent } from './components/et-chart/et-chart';\r\nimport { ETWeatherEventService } from './components/et-chart/service';\r\nimport { FeedbackComponent } from './components/feedback/feedback';\r\nimport { FeedbackService } from './components/feedback/service';\r\nimport { EmailRanchOwnerDialog } from './components/ranch-settings/modals/email/email';\r\nimport { FertilizerViewDialog } from './components/ranch-settings/modals/fertilizer/fertilizer.view.dialog';\r\nimport { FertilizerDeleteDialog } from './components/ranch-settings/modals/fertilizer/fertilizer.delete.dialog';\r\nimport { FertilizerEditComponent } from './components/ranch-settings/modals/fertilizer/sections/edit';\r\nimport { FertilizerEditDialog } from './components/ranch-settings/modals/fertilizer/fertilizer.edit.dialog';\r\n\r\nimport { KeepDiscardDialog } from './components/ranch-settings/modals/fertilizer/keep-discard.dialog';\r\nimport { FertilizerCreateDialog } from './components/ranch-settings/modals/fertilizer/fertilizer.create.dialog';\r\nimport { FertilizerListComponent } from './components/ranch-settings/modals/fertilizer/sections/fertilizer-list';\r\nimport { LotSubscriptionService } from './services/subscriptions/lot.subscription';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { HomeComponent } from './components/public/home/home.component';\r\nimport { LoginComponent } from './components/public/login/login.component';\r\nimport { LoginService } from './services/login.service';\r\nimport { TokenService } from './services/token.service';\r\nimport { GlobalHeaderComponent } from './components/global-header/global-header.component';\r\nimport { SharedModule } from './modules/shared/shared.module';\r\nimport { ForgetPasswordPage } from './components/public/forget-password/forget-password.page';\r\nimport { ForgetPasswordConfirmationPage } from './components/public/forget-password/forget-password-confirmation.page';\r\nimport { ResetPasswordPage } from './components/public/reset-password/reset-password-page';\r\nimport { ResetPasswordConfirmationPage } from './components/public/reset-password/reset-password-confirmation.page';\r\nimport { RegistrationPage } from './components/public/registeration/register.page';\r\nimport { MustConfirmEmailPage } from './components/public/registeration/must-confirmEmail.page';\r\nimport { ConfirmEmailPage } from './components/public/registeration/confirm-email.page';\r\nimport { RecaptchaComponent } from './components/public/recaptcha.component';\r\nimport { PrivacyPolicyComponent } from './components/public/privacy-policy/privacy-policy';\r\nimport { CaspService } from './components/casp-dialog/casp.service';\r\nimport { CaspDisconnectConfirmationDialog } from './components/profile/casp-disconnect-confirmation-dialog';\r\nimport { ProfileUpdateService } from './components/profile/profile.update.service';\r\nimport { PreviousCropDetailComponent } from './components/crop-types/previous-crop-detail';\r\nimport { CropTypeDeleteConfirmationDialog } from './components/crop-types/delete-confirmation';\r\nimport { CropTypeUpdateService } from './components/crop-types/cropType.update.service';\r\nimport { AppliedWaterChartComponent } from './components/applied-water-chart/applied-water-chart';\r\nimport { PerennialCanopyDialog } from './components/crop-types/perennial-canopy';\r\nimport { CanopyDeleteConfirmationDialog } from './components/crop-types/canopy-delete-confirmation';\r\nimport { AvailableWaterChartComponent } from './components/available-water-chart/available-water-chart';\r\nimport { IrrigationDeleteConfirmationDialog } from './components/irrigation-event/delete-confirmation';\r\nimport { IrrigationUpdateService } from './components/irrigation-event/update.service';\r\nimport { PageNotFoundComponent } from './components/public/page-not-found/page-not-found';\r\nimport { SharedKeepDiscardDialog } from './components/shared/dialogs/keep-discard-dialog';\r\nimport { SharedUpdateService } from './components/shared/dialogs/update.service';\r\nimport { IrrigationRecommendationSummaryComponent } from './components/irrigation-event/recommendation-summary/recommendation-summary';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MainMenuUpdateService } from './components/main-menu/main-menu-update.service';\r\nimport { CutEventComponent } from './components/cut-event/cut-event.component';\r\nimport { AppliedFertilizerChartComponent } from './components/applied-fertilizer-chart/applied-fertilizer-chart';\r\nimport { EventsUpdateService } from './components/events/events.update.service';\r\nimport { MissingStationRecordsComponent } from './components/weather-stations/missing-station-records';\r\nimport { CIMISDayDataService } from './components/weather-stations/cimis-day-data.service';\r\nimport { HistoricalETService } from './components/weather-stations/historical-et.service';\r\nimport { DeleteConfirmationComponent } from './components/shared/dialogs/delete-confirmation';\r\nimport { RainfallChartUpdateService } from './components/rainfall-chart/rainfall-chart.update.service';\r\nimport { FlowmeterChartUpdateService } from './components/flowmeter-graph/flowmeter-chart.update.service';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { BaseDialog } from './components/shared/dialogs/base-dialog';\r\nimport { GlobalSettingsComponent } from './components/global-settings/global-settings.component';\r\nimport { GlobalSettingsService } from './components/global-settings/global-settings.service';\r\nimport { SupportComponent } from './components/support/support';\r\nimport { WeatherAPIService } from './components/weather-stations/weather-api.service';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { SoilSampleWarningDialog } from './components/soil-sample-event/warning';\r\nimport { FertilizationSoilSampleComponent } from './components/fertilization-event/soil-sample';\r\nimport { CustomSaturationHelp } from './components/available-water-chart/custom-saturation-help';\r\nimport { PlantingRecalculatorService } from './components/planting-recalculate-modal/plantingRecalculatorService';\r\nimport { CanopySliderComponent } from './components/canopy-curve/canopy-slider';\r\nimport { ETCalculatorComponent } from './components/public/et-calculator/et-calculator.component';\r\nimport { ETCalculatorResultsComponent } from './components/public/et-calculator/et-calculator-results.component';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\n@NgModule({\r\n\timports: [\r\n\t\tBrowserModule,\r\n\t\tFormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\tHttpClientModule, // shared\r\n\t\tAppRoutingModule, // shared\r\n\t\tModalModule.forRoot(),\r\n\t\tAgmCoreModule.forRoot({ // ranch home module\r\n\t\t\tapiKey: 'AIzaSyCHJWlMmzQ_eT3BkZt64vO3b7sC_bex7Cc'\r\n\t\t}),\r\n\t\tCoreModule,\r\n\t\tDragulaModule, // should be in ranch home module\r\n\t\tMyDatePickerModule, // shared\r\n\t\tMatDialogModule,\r\n\t\tMatButtonModule, // shared\r\n\t\tMatFormFieldModule,\r\n\t\tMatInputModule,\r\n\t\tMatSelectModule,\r\n\t\tMatTabsModule,\r\n\t\tBrowserAnimationsModule,\r\n\t\tMatTooltipModule,\r\n\t\tMatSnackBarModule,\r\n\t\tMatSliderModule,\r\n\t\tMatMenuModule,\r\n\t\tMatDividerModule,\r\n\t\tMatDatepickerModule,\r\n\t\tMatNativeDateModule,\r\n\t\tNgxPopperModule,\r\n\t\tMatTableModule,\r\n\t\tMatPaginatorModule,\r\n\t\tMatSortModule,\r\n\t\tMatExpansionModule,\r\n\t\tMatProgressSpinnerModule,\r\n\t\tNgbModule.forRoot(),\r\n\t\tMatIconModule,\r\n\t\tSharedModule.forRoot(),\r\n\t],\r\n\texports: [\r\n\t],\r\n\tdeclarations: [\r\n\t\tAppComponent,\r\n\t\tHomeComponent,\r\n\t\tLoginComponent,\r\n\t\tETCalculatorComponent,\r\n\t\tETCalculatorResultsComponent,\r\n\t\tPrivacyPolicyComponent,\r\n\r\n\t\t// pipes\r\n\r\n\t\tCheckForNA,\r\n\t\tCheckForWetDate,\r\n\t\tNAifRainfall,\r\n\r\n\t\tZeroIfEmpty,\r\n\t\tStringifyListPipe,\r\n\t\tYesNoPipe,\r\n\r\n\t\tMainMenuComponent,\r\n\r\n\t\tFertilizerEditComponent,\r\n\r\n\t\tAddEventsComponent,\r\n\r\n\t\tAdminComponent,\r\n\t\tProfileComponent,\r\n\t\tProfileNavComponent,\r\n\t\tProfileTabComponent,\r\n\r\n\t\t// ClickOutsideDirective,\r\n\r\n\t\tPageNotFoundComponent,\r\n\t\tLocalizationComponent,\r\n\t\tUserInformationComponent,\r\n\t\tCaspDisconnectConfirmationDialog,\r\n\t\tCropTypeDeleteConfirmationDialog,\r\n\t\tPerennialCanopyDialog,\r\n\t\tCanopyDeleteConfirmationDialog,\r\n\t\tChangePasswordComponent,\r\n\t\tIrrigationEventComponent,\r\n\t\tIrrigationRecommendationSummaryComponent,\r\n\t\tIrrigationDeleteConfirmationDialog,\r\n\t\tSharedKeepDiscardDialog,\r\n\t\tBaseDialog,\r\n\t\tDeleteConfirmationComponent,\r\n\t\tSoilSampleEventDialog,\r\n\t\tSoilSampleWarningDialog,\r\n\r\n\t\tFertilizerViewDialog,\r\n\t\tFertilizerDeleteDialog,\r\n\t\tFertilizerEditDialog,\r\n\t\tFertilizerCreateDialog,\r\n\t\tFertilizerListComponent,\r\n\r\n\t\tKeepDiscardDialog,\r\n\r\n\t\tAbstractModalComponent,\r\n\r\n\t\tGlobalHeaderComponent,\r\n\r\n\t\tHttpErrorDialog,\r\n\t\tTabComponent,\r\n\t\tHorizontalNavComponent,\r\n\t\tCanopyDialog,\r\n\t\tCommodityTypeDialog,\r\n\t\tETChartComponent,\r\n\t\tAppliedWaterChartComponent,\r\n\t\tAppliedFertilizerChartComponent,\r\n\t\tAvailableWaterChartComponent,\r\n\t\tCustomSaturationHelp,\r\n\t\tFeedbackComponent,\r\n\t\tSupportComponent,\r\n\t\tEmailRanchOwnerDialog,\r\n\t\tCommodityTypeCreateDialog,\r\n\t\tCanopyTableComponent,\r\n\t\tSliderButtonComponent,\r\n\t\tSoilMoistureComponent,\r\n\t\tSoilMoistureDialog,\r\n\t\tWeatherStationsComponent,\r\n\t\tMissingStationRecordsComponent,\r\n\t\tWeatherStationDialog,\r\n\t\tWeatherStationStatsDialog,\r\n\t\tDeactivateWeatherStationDialog,\r\n\t\tIgnoreSchedulesComponent,\r\n\t\tIgnoreScheduleDialog,\r\n\t\tNotificationComponent,\r\n\t\tFertilizationEventDialog,\r\n\t\tFertilizationSoilSampleComponent,\r\n\t\tCutEventRecalculateWarningComponent,\r\n\t\tCanopySliderComponent,\r\n\t\tAbstractMatDialog,\r\n\t\tTissueSampleEventComponent,\r\n\t\tCutEventComponent,\r\n\t\tSVGFertilizerNoStrokeComponent,\r\n\t\tSVGCommodityTypeComponent,\r\n\t\tSVGLotComponent,\r\n\t\tSVGWeatherComponent,\r\n\t\tSVGWellComponent,\r\n\t\tIrrigationEventRecalculateWarningDialog,\r\n\t\tHistoricalUIComponent,\r\n\t\tCropTypeListComponent,\r\n\t\tGlobalSettingsComponent,\r\n\t\tCropTypeDetailComponent,\r\n\t\tPreviousCropDetailComponent,\r\n\t\tFormInputComponent,\r\n\r\n\t\tForgetPasswordPage,\r\n\t\tForgetPasswordConfirmationPage,\r\n\t\tResetPasswordPage,\r\n\t\tResetPasswordConfirmationPage,\r\n\t\tRegistrationPage,\r\n\t\tMustConfirmEmailPage,\r\n\t\tConfirmEmailPage,\r\n\t\tRecaptchaComponent\r\n\t],\r\n\tproviders: [\r\n\t\tPlantingRecalculatorService,\r\n\t\tUpdateService,\r\n\t\tIrrigationUpdateService,\r\n\t\tRainfallChartUpdateService,\r\n\t\tFlowmeterChartUpdateService,\r\n\t\tMainMenuUpdateService,\r\n\t\tSharedUpdateService,\r\n\t\tCropTypeUpdateService,\r\n\t\tLotSubscriptionService,\r\n\t\tPermissionsService,\r\n\t\tNavInterface,\r\n\t\tTabInterface,\r\n\t\tTranslateService,\r\n\t\tCookieService,\r\n\t\tSoilTypeService,\r\n\t\tUserService,\r\n\t\tCalculateService,\r\n\t\tValidateService,\r\n\t\tErrorService,\r\n\t\tHttpService,\r\n\t\tLoginService,\r\n\t\tTokenService,\r\n\t\t{ provide: ErrorHandler, useClass: CustomErrorHandler },\r\n\t\tTooltipService,\r\n\t\tCommodityService,\r\n\t\tCanopyService,\r\n\t\tDecimalPipe,\r\n\t\tSoilMoistureService,\r\n\t\tWeatherStationsService,\r\n\t\tETWeatherEventService,\r\n\t\tFeedbackService,\r\n\t\tCropStageService,\r\n\t\tNotificationService,\r\n\t\tIgnoreSchedulesService,\r\n\t\tDatePipe,\r\n\t\tCutEventService,\r\n\t\tGlobalSettingsService,\r\n\t\tEventsUpdateService,\r\n\t\tTissueSampleEventService,\r\n\t\tIrrigationService,\r\n\t\tFertilizationEventService,\r\n\t\tSoilSampleEventService,\r\n\t\tMicroSprinklerService,\r\n\t\tModelService,\r\n\t\tCropTypeService,\r\n\t\tFlowmeterService,\r\n\t\tFertilizationEventWellService,\r\n\t\tPlantingWellService,\r\n\t\tRanchService,\r\n\t\tPersistentDatabase,\r\n\t\tCaspService,\r\n\t\tProfileUpdateService,\r\n\t\tConfirmDeactivateGuard,\r\n\t\tCIMISDayDataService,\r\n\t\tHistoricalETService,\r\n\t\tWeatherAPIService,\r\n\t],\r\n\tbootstrap: [AppComponent],\r\n\tentryComponents: [\r\n\t\tHttpErrorDialog,\r\n\t\tCanopyDialog,\r\n\t\tCommodityTypeDialog,\r\n\t\tETChartComponent,\r\n\t\tAppliedWaterChartComponent,\r\n\t\tCustomSaturationHelp,\r\n\t\tAppliedFertilizerChartComponent,\r\n\t\tAvailableWaterChartComponent,\r\n\t\tSupportComponent,\r\n\t\tFeedbackComponent,\r\n\t\tEmailRanchOwnerDialog,\r\n\t\tCommodityTypeCreateDialog,\r\n\t\tSoilMoistureDialog,\r\n\t\tBaseDialog,\r\n\t\tIrrigationDeleteConfirmationDialog,\r\n\t\tSharedKeepDiscardDialog,\r\n\t\tDeleteConfirmationComponent,\r\n\t\tFertilizerViewDialog,\r\n\t\tFertilizerDeleteDialog,\r\n\t\tIrrigationEventComponent,\r\n\t\tFertilizerEditDialog,\r\n\t\tKeepDiscardDialog,\r\n\t\tFertilizerCreateDialog,\r\n\t\tIrrigationEventRecalculateWarningDialog,\r\n\t\tWeatherStationDialog,\r\n\t\tWeatherStationStatsDialog,\r\n\t\tDeactivateWeatherStationDialog,\r\n\t\tIgnoreScheduleDialog,\r\n\t\tNotificationComponent,\r\n\t\tCutEventComponent,\r\n\t\tFertilizationEventDialog,\r\n\t\tSoilSampleEventDialog,\r\n\t\tSoilSampleWarningDialog,\r\n\t\tTissueSampleEventComponent,\r\n\t\tCutEventRecalculateWarningComponent,\r\n\t\tCaspDisconnectConfirmationDialog,\r\n\t\tCropTypeDeleteConfirmationDialog,\r\n\t\tPerennialCanopyDialog,\r\n\t\tCanopyDeleteConfirmationDialog,\r\n\t]\r\n})\r\nexport class AppModule { }\r\n","import { inherits } from 'util';\r\nimport { CMCoordinates } from '../interfaces/views/map';\r\nimport { BOKA } from './number';\r\n\r\nexport class Coordinates implements CMCoordinates {\r\n\tpublic lat: number;\r\n\tpublic lng: number;\r\n\r\n\t// This does a very loose validation - checks that the input string\r\n\t// breaks into 2 numbers\r\n\t// This function should be in ValidationService\r\n\tpublic static validateCoordinateString(coords: string): boolean {\r\n\t\tlet latLng: string[];\r\n\t\tif (!coords) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tlatLng = coords.split(',');\r\n\r\n\t\tif (latLng.length === 2 && Number(latLng[0]) && Number(latLng[0])) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic constructor(coords: string) {\r\n\t\tif (!Coordinates.validateCoordinateString(coords)) {\r\n\t\t\t// in some cases, the coordinate input field may be blank\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.lat = BOKA.NumberUtil.truncateDecimal(Number(coords.split(',')[0]));\r\n\t\tthis.lng = BOKA.NumberUtil.truncateDecimal(Number(coords.split(',')[1]));\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @returns concatenated string\r\n\t */\r\n\tpublic toString() {\r\n\t\treturn this.lat + ',' + this.lng;\r\n\t}\r\n}\r\n","import { CMErrors, CMError, httpStatusCodes } from '../interfaces/interfaces';\r\n\r\n/**\r\n * A wrapper for CMErrors class, which is the error class used in Web API\r\n * to emit errors to the Web API client\r\n */\r\nexport class WebAPIErrors implements CMErrors {\r\n\tpublic errors: CMError[];\r\n\tpublic error: CMError;\r\n\r\n\tconstructor(errors: CMErrors) {\r\n\t\tif (errors === null || errors === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.errors = errors.errors;\r\n\t\tthis.error = this.getError();\r\n\t}\r\n\r\n\tpublic getError(): CMError {\r\n\t\tif (!this.errors || this.errors.length === 0) {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\treturn this.errors[0];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Tells you whether the JSON object is a CMErrors object or something else\r\n\t */\r\n\tpublic isCMError(): boolean {\r\n\t\tif (this.error === null) {\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic isError(): boolean {\r\n\t\tif (!this.isCMError()) { // implicitly checks for this.error === null\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this.error.code === httpStatusCodes.success || this.error.code === httpStatusCodes.continue) {\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n}\r\n","export interface ISortable {\r\n\tName: string;\r\n}\r\n\r\nexport module BOKA {\r\n\texport class Array {\r\n\r\n\t\t/**\r\n\t\t * expected input structure: [{ Name: \"joe\", age :15}, { Name: \"Sam\", age: 20}]\r\n\t\t * @param ar\r\n\t\t * @param key\r\n\t\t * @param callback\r\n\t\t */\r\n\t\tpublic static sortByName(ar: ISortable[], key: string, callback?: Function): object[] {\r\n\r\n\t\t\tif (!ar || ar.length === 0) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tar.sort(function (a: ISortable, b: ISortable) {\r\n\t\t\t\tif (callback) {\r\n\t\t\t\t\treturn callback(a.Name, b.Name);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn a.Name.toLowerCase() > b.Name.toLowerCase() ? 1 : a.Name.toLowerCase() < b.Name.toLowerCase() ? -1 : 0;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn ar;\r\n\t\t}\r\n\t}\r\n}\r\n","import { ErrorHandler, Injectable, Injector } from '@angular/core';\r\nimport { ErrorService } from '../services/error.service';\r\n\r\n@Injectable()\r\nexport class CustomErrorHandler implements ErrorHandler {\r\n\r\n\tconstructor(private _injector: Injector) { }\r\n\r\n\thandleError(error: Error) {\r\n\t\tlet errorService: ErrorService;\r\n\r\n\t\terrorService = this._injector.get(ErrorService);\r\n\t\terrorService.handleError(error);\r\n\t}\r\n}\r\n","import * as moment from 'moment';\r\n\r\nexport class DateUtility {\r\n\r\n\tpublic static monthsAsStrings: string[] = ['January', 'February', 'March', 'April',\r\n\t\t'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n\r\n\tpublic static languageCodes: string[] = ['en-us', 'es'];\r\n\r\n\t/**\r\n\t * We're checking for both string formats, even though we're moving to Web API\r\n\t * because the dates in unit test (which there are hundreds) are still in\r\n\t * the old format\r\n\t *\r\n\t * @param s either Web API format e.g. \"2019-02-19T00:00:01\" or\r\n\t * MVC format \\/Date(123423232)\\/\r\n\t */\r\n\tpublic static DotNetToDate(s: string): Date {\r\n\t\tlet result: Date;\r\n\t\tlet n: number;\r\n\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (typeof s !== 'string') {\r\n\t\t\treturn s;\r\n\t\t}\r\n\r\n\t\tif (s.includes('\\/Date(') === false) {\r\n\t\t\tlet a: string[] = s.split(/[^0-9]/); // fix for safari which\r\n\t\t\t\t// generates an incorrect date for new Date('2020-01-01T00:00:00')\r\n\t\t\treturn new Date (Number(a[0]), Number(a[1]) - 1, Number(a[2]), Number(a[3]), Number(a[4]), Number(a[5]));\r\n\t\t}\r\n\r\n\t\tn = parseInt(s.substr(6), 10);\r\n\r\n\t\tif (n === -62135568000000) {\r\n\t\t\treturn null; // C# null date, in year 0001\r\n\t\t}\r\n\r\n\t\tresult = new Date(n);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static DateToUTC(d: Date): number {\r\n\t\tlet year, month, day, hours, minutes: number, result;\r\n\r\n\t\tif (!d) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tyear = d.getFullYear();\r\n\t\tmonth = d.getMonth();\r\n\t\tday = d.getDate();\r\n\t\thours = d.getHours();\r\n\t\tminutes = d.getMinutes();\r\n\r\n\t\tresult = Date.UTC(year, month, day, hours, minutes);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static GetLastDayOfYear(d: Date): Date {\r\n\t\tlet result: Date;\r\n\r\n\t\tresult = new Date(d.getFullYear(), 11, 31);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static GetFirstDayOfYear(d: Date): Date {\r\n\t\tlet result: Date;\r\n\r\n\t\tresult = new Date(d.getFullYear(), 0, 1);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * This method preserves the date's year, month, date, and generates\r\n\t * a UTC date that can be sent back to server\r\n\t *\r\n\t * @param d local date\r\n\t */\r\n\tpublic static ConvertToUTC(d: Date): Date {\r\n\t\tlet month, year, day: number;\r\n\t\tlet result: Date;\r\n\r\n\t\tif (!d) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (typeof d.getFullYear !== 'function') {\r\n\t\t\tthrow 'not a date';\r\n\t\t}\r\n\r\n\t\tyear = d.getFullYear();\r\n\t\tmonth = d.getMonth();\r\n\t\tday = d.getDate();\r\n\r\n\t\tresult = new Date(Date.UTC(year, month, day, 0, 0));\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static areSameYear(x: Date, y: Date): boolean {\r\n\t\tlet years: number[];\r\n\r\n\t\tif (x === null || x === undefined || y === null || y === undefined) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tyears = [x.getFullYear(), y.getFullYear()];\r\n\r\n\t\tif (years[0] === years[1]) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static yyyymmdd(date: Date): string {\r\n\r\n\t\tif (!date) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tlet yyyy: string = date.getFullYear().toString();\r\n\t\tlet mm: string = (date.getMonth() + 1).toString(); // getMonth() is zero-based\r\n\t\tlet dd: string = date.getDate().toString();\r\n\r\n\t\treturn yyyy + (mm[1] ? mm : '0' + mm[0]) + (dd[1] ? dd : '0' + dd[0]); // padding\r\n\t}\r\n\r\n\t/**\r\n\t * What's the point of this method? why don't we just call moment(x)?\r\n\t *\r\n\t * @param x\r\n\t */\r\n\tpublic static convertToMoment(x: string | Date): moment.Moment {\r\n\t\tlet eventDateArr: string[];\r\n\r\n\t\tif (typeof x !== 'string') { // this assumes x is a date. what if its a number?\r\n\t\t\treturn moment(x);\r\n\t\t}\r\n\r\n\t\teventDateArr = x.split('/');\r\n\r\n\t\tif (eventDateArr.length < 3) {\r\n\t\t\treturn moment(x);\r\n\t\t}\r\n\r\n\t\treturn moment(x, 'MM-DD-YYYY');\r\n\t}\r\n\r\n\tpublic static dotNetToMMDDYYYY(dotNetDate: string): string {\r\n\t\tlet date: Date;\r\n\t\tlet month: number;\r\n\t\tlet day: number;\r\n\t\tlet year: number;\r\n\r\n\t\tif (!dotNetDate || typeof dotNetDate !== 'string') {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tdate = DateUtility.DotNetToDate(dotNetDate);\r\n\r\n\t\tif (!date || Object.prototype.toString.call(date) !== '[object Date]' || isNaN(date.getTime())) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tmonth = date.getMonth() + 1;\r\n\t\tday = date.getDate();\r\n\t\tyear = date.getFullYear();\r\n\r\n\t\treturn month + '/' + day + '/' + year;\r\n\t}\r\n\r\n\t/** the method names should be the same, with overrides */\r\n\tpublic static isSameDate(a: moment.Moment, b: moment.Moment) {\r\n\t\treturn a.year() === b.year() && a.month() === b.month() && a.date() === b.date();\r\n\t}\r\n\r\n\t/**\r\n\t * JS version of isSameDate - ignore hours, minutes, seconds\r\n\t * @param a\r\n\t * @param b\r\n\t */\r\n\tpublic static areEqualDates(a: Date, b: Date): boolean {\r\n\t\tif (!a || !b) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn a.toLocaleDateString('en-US') === b.toLocaleDateString('en-US')\r\n\t}\r\n\r\n\tpublic static getmmddyyyyString(date: string | Date): string {\r\n\t\tlet __this = this;\r\n\r\n\t\tif (!date) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (Object.prototype.toString.call(date) !== '[object Date]') {\r\n\t\t\tdate = __this.DotNetToDate(date as string);\r\n\t\t}\r\n\r\n\t\treturn moment(date).format('M/D/YYYY');\r\n\t}\r\n\r\n\tpublic static isMMDDYYYYString(dateString: string): boolean {\r\n\t\tlet dateArr: string[];\r\n\r\n\t\tif (!dateString || typeof dateString !== 'string') {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tdateArr = dateString.split('/');\r\n\r\n\t\tif (dateArr.length !== 3) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor (let str in dateArr) {\r\n\t\t\tif (isNaN(Number(str))) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic static MMDDYYYYToDate(mmddyyyy: string): Date {\r\n\t\tlet tempMoment: moment.Moment;\r\n\r\n\t\tif (!mmddyyyy) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\r\n\t\ttempMoment = moment(mmddyyyy, 'M/D/YYYY');\r\n\r\n\t\treturn tempMoment.toDate();\r\n\t}\r\n\r\n\tpublic static addDays(date: Date, days: number): Date {\r\n\t\tlet newDate: Date;\r\n\r\n\t\tif (!date || days === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnewDate = new Date(date);\r\n\t\tnewDate.setDate(newDate.getDate() + days);\r\n\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\tpublic static subtractDays(date: Date, days: number): Date {\r\n\t\tlet newDate: Date;\r\n\r\n\t\tif (!date || days === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnewDate = new Date(date);\r\n\t\tnewDate.setDate(newDate.getDate() - days);\r\n\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n     * if first is later than second, this will return a negative number of days\r\n     * @param first\r\n     * @param second\r\n     */\r\n\tpublic static daysBetweenDates(first: Date, second: Date): number {\r\n\t\tlet a: moment.Moment;\r\n\t\tlet b: moment.Moment;\r\n\r\n\t\tif (!first) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!second) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (first.getFullYear() === 1 || second.getFullYear() === 1) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\ta = moment([first.getFullYear(), first.getMonth(), first.getDate()]);\r\n\t\tb = moment([second.getFullYear(), second.getMonth(), second.getDate()]);\r\n\r\n\t\t// days from A until B is B.diff(A, 'days');\r\n\t\treturn b.diff(a, 'days');\r\n\t}\r\n\r\n\t// assumes string formate as 'MMDDYYYY'\r\n\tpublic static daysBetweenDateStrings(first: string, second: string): number {\r\n\t\tlet firstAsMoment: moment.Moment = DateUtility.convertToMoment(first);\r\n\t\tlet secondAsMoment: moment.Moment = DateUtility.convertToMoment(second);\r\n\r\n\t\treturn secondAsMoment.diff(firstAsMoment, 'days');\r\n\t}\r\n\r\n\t// currently not working, timeboxed and will save for later\r\n\tpublic static getLocalizedMonths(languageId: number): string[] {\r\n\t\tlet currentMoment: moment.Moment = moment();\r\n\t\tlet languageCode: string;\r\n\t\tlet months: string[] = new Array();\r\n\r\n\t\tif (!languageId) {\r\n\t\t\treturn months;\r\n\t\t}\r\n\r\n\t\tlanguageCode = DateUtility.languageCodes[languageId];\r\n\r\n\t\tif (!languageCode) {\r\n\t\t\treturn months;\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < 12; i++) {\r\n\t\t\tmonths.push(currentMoment.locale(languageCode).month(i).format('MMMM'));\r\n\t\t}\r\n\r\n\t\treturn months;\r\n\t}\r\n\r\n\tpublic static getDotNetAcceptableDateParameter(date: Date): string {\r\n\t\treturn moment(date).format('YYYY-MM-DDTHH:mm:ss');\r\n\t}\r\n\r\n\t/**\r\n     * Used for cut events.. determines if a cut event date is future vs today/past\r\n     * in the latter case, yield value is required\r\n     * @param date\r\n     */\r\n\tpublic static isFuture(date: Date): boolean {\r\n\t\tlet today: Date = new Date();\r\n\t\tlet targetDate: moment.Moment;\r\n\t\tlet difference: number;\r\n\r\n\t\tif (!date) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\ttargetDate = moment([date.getFullYear(), date.getMonth(), date.getDate()]);\r\n\t\tdifference = moment([today.getFullYear(), today.getMonth(), today.getDate()]).diff(targetDate, 'days');\r\n\r\n\t\tif (difference < 0) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * returns true if future or today\r\n\t *\r\n\t * difference is difference between date and today, in day\r\n\t *\r\n\t * @param date\r\n\t */\r\n\tpublic static isTodayOrFuture(date: Date): boolean {\r\n\t\tlet today: Date = new Date();\r\n\t\tlet targetDate: moment.Moment;\r\n\t\tlet difference: number;\r\n\r\n\t\tif (!date) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttargetDate = moment([date.getFullYear(), date.getMonth(), date.getDate()]);\r\n\t\tdifference = moment([today.getFullYear(), today.getMonth(), today.getDate()]).diff(targetDate, 'days');\r\n\r\n\t\tif (difference <= 0) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static isToday(date: Date): boolean {\r\n\t\tlet today: Date;\r\n\r\n\t\ttoday = new Date();\r\n\r\n\t\treturn date.setHours(0, 0, 0, 0) === today.setHours(0, 0, 0, 0);\r\n\t}\r\n\r\n\tpublic static datesAreSame(first: Date, second: Date): boolean {\r\n\t\tif (!first || !second) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn first.getFullYear() === second.getFullYear() &&\r\n\t\t\tfirst.getMonth() === second.getMonth() &&\r\n\t\t\tfirst.getDate() === second.getDate();\r\n\t}\r\n\r\n\t/**\r\n\t * Get the difference between two dates. if the result is positive, first date\r\n\t * is greater than the second date. If the result is negative, second date is greater\r\n\t * than the first date.\r\n\t *\r\n\t * @param first\r\n\t * @param second\r\n\t */\r\n\tpublic static getDifference(first: Date, second: Date): number {\r\n\t\treturn first.getTime() - second.getTime();\r\n\t}\r\n\r\n\tpublic static getDifferenceInDays(first: Date, second: Date): number {\r\n\t\tlet difference = this.getDifference(first, second);\r\n\r\n\t\treturn Math.abs(Math.floor(difference / (1000 * 60 * 60 * 24)));\r\n\t}\r\n\r\n\t/**\r\n\t * Used to count number of weeks a day falls on a calendar view\r\n\t * @param date\r\n\t * @param firstDateOfCalendar\r\n\t */\r\n\tpublic static getWeekOfMonth(date: Date, firstDateOfCalendar: Date): number {\r\n\t\tlet result: number;\r\n\r\n\t\tresult = Math.floor(Math.abs(moment(date).diff(moment(firstDateOfCalendar), 'days')) / 7);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param d\r\n\t * @param target\r\n\t * @returns\r\n\t */\r\n\tpublic static isOnOrBefore(d: Date, target: Date): boolean {\r\n\t\tif (!d || !target) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (d.getFullYear() > target.getFullYear()) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (d.getFullYear() < target.getFullYear()) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (d.getMonth() > target.getMonth()) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (d.getMonth() < target.getMonth()) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (d.getDate() <= target.getDate()) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static IsDate(d: Date | string): boolean {\r\n\t\tif (Object.prototype.toString.call(d) === '[object Date]') {\r\n\t\t\t// it is a date\r\n\t\t\tif (isNaN((d as Date).getTime())) {  // d.valueOf() could also work\r\n\t\t\t\treturn false;\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static formatDate(date: Date): string {\r\n\t\tif (!date) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn date.getDate() + ' ' + date.toLocaleString('en-us', { month: 'short' }) + ' ' + date.getFullYear();\r\n\t}\r\n\r\n\t/**\r\n\t * Given month, return an array containing numbers that represent possible dates\r\n\t * in the month\r\n\t * @param month zero indexed, so January is 0\r\n\t */\r\n\tpublic static getDaysOfTheMonth(month: number): number[] {\r\n\t\tlet knuckleDays: number[]; // days that have 31 days, counted using knuckles\r\n\t\tlet maxDays: number; // maximum number of days in a month\r\n\t\tlet result: number[];\r\n\r\n\t\tif (month === null || month === undefined) {\r\n\t\t\treturn new Array();\r\n\t\t}\r\n\r\n\t\tknuckleDays = [1, 3, 5, 7, 8, 10, 12];\r\n\t\tresult = new Array();\r\n\r\n\t\tmonth += 1; // month is zero indexed\r\n\r\n\t\tif (month === 2) {\r\n\t\t\tmaxDays = 29;\r\n\t\t} else if (knuckleDays.indexOf(month) === -1) {\r\n\t\t\tmaxDays = 30;\r\n\t\t} else {\r\n\t\t\tmaxDays = 31;\r\n\t\t}\r\n\r\n\t\tfor (let i = 1; i <= maxDays; i++) {\r\n\t\t\tresult.push(i);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { AbstractControl, Validator, ValidatorFn } from '@angular/forms';\r\nimport * as moment from 'moment';\r\nimport { eCalculators } from '../interfaces/constants';\r\nimport { DateUtility } from './dateUtility';\r\nimport { BOKA } from './number';\r\n\r\nexport class FormValidation {\r\n\tpublic static formArrayMustNotBeEmpty(): ValidatorFn {\r\n\t\treturn (formArray: FormArray): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet count: number;\r\n\r\n\t\t\tcount = (formArray && formArray.controls) ? formArray.controls.length : 0;\r\n\t\t\tvalid = count > 0 ? true : false;\r\n\r\n\t\t\treturn valid ? null : {formArrayMustNotBeEmpty: {value: count}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static removeErrorFromContrl(control: AbstractControl, fieldname: string): void {\r\n\t\tif (control.errors && control.errors[fieldname]) {\r\n\t\t\tdelete control.errors[fieldname];\r\n\r\n\t\t\tif (Object.keys(control.errors).length === 0) {\r\n\t\t\t\tcontrol.setErrors(null);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static checkGeolocationCoordinates(lat: number, lng: number): boolean {\r\n\t\treturn (lat >= -90 && lat <= 90) && (lng >= -180 && lng <= 180);\r\n\t}\r\n\r\n\tpublic static requiredIfTree(isTreeControl: AbstractControl): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet errorString = 'requiredIfTree';\r\n\r\n\t\t\tif (isTreeControl.value) {\r\n\t\t\t\tvalid = (control.value !== null && control.value !== undefined)\r\n\t\t\t\t\t? true : false;\r\n\t\t\t} else {\r\n\t\t\t\tFormValidation.removeErrorFromContrl(control, errorString);\r\n\t\t\t\tvalid = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {requiredIfTree: {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static requiredIfStressable(formGroup: FormGroup): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet isTree: boolean;\r\n\t\t\tlet commodityTypeId: number;\r\n\t\t\tlet errorString = 'requiredIfStressable';\r\n\r\n\t\t\tisTree = formGroup.get('IsTree').value;\r\n\t\t\tcommodityTypeId = formGroup.get('CalculatorId').value;\r\n\r\n\t\t\tif (isTree || commodityTypeId === eCalculators.TOMATO) {\r\n\t\t\t\tvalid = (control.value !== null && control.value !== undefined)\r\n\t\t\t\t\t? true : false;\r\n\t\t\t} else {\r\n\t\t\t\tFormValidation.removeErrorFromContrl(control, errorString);\r\n\t\t\t\tvalid = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {requiredIfStressable: {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static requiredIfNDependent(nDependentControl: AbstractControl): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet errorString = 'requiredIfStressable';\r\n\r\n\t\t\tif (nDependentControl.value) {\r\n\t\t\t\tvalid = (control.value !== null && control.value !== undefined)\r\n\t\t\t\t\t? true : false;\r\n\t\t\t} else {\r\n\t\t\t\tFormValidation.removeErrorFromContrl(control, errorString);\r\n\t\t\t\tvalid = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {requiredIfStressable: {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * A field is required if N dependent (e.g. not alfalfa), and not tree\r\n\t * (e.g. vegetables)\r\n\t * @param nDependentControl\r\n\t * @param isTreeControl\r\n\t * @returns\r\n\t */\r\n\tpublic static requiredIfNDependentAndNotTree(nDependentControl: AbstractControl,\r\n\t\tisTreeControl: AbstractControl): ValidatorFn {\r\n\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet errorString = 'requiredIFNDependentNotTree';\r\n\r\n\t\t\tif (nDependentControl.value && !isTreeControl.value) {\r\n\t\t\t\tvalid = (control.value !== null && control.value !== undefined)\r\n\t\t\t\t\t? true : false;\r\n\t\t\t} else {\r\n\t\t\t\tFormValidation.removeErrorFromContrl(control, errorString);\r\n\t\t\t\tvalid = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {requiredIFNDependentNotTree: {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Required if tomato, strawberry, or caneberry which require additional\r\n\t * N factor fields\r\n\t * @param nFactorsControl\r\n\t * @returns\r\n\t */\r\n\tpublic static requiredIfNFactors(nFactorsControl: AbstractControl): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet errorString = 'requiredIfNFactors';\r\n\r\n\t\t\tif (nFactorsControl.value === false) {\r\n\t\t\t\tvalid = (control.value !== null && control.value !== undefined)\r\n\t\t\t\t\t? true : false;\r\n\t\t\t} else {\r\n\t\t\t\tFormValidation.removeErrorFromContrl(control, errorString);\r\n\t\t\t\tvalid = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {requiredIfNFactors: {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static CoordinateStringIsValid(): ValidatorFn {\r\n\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet coordinates: number[];\r\n\r\n\t\t\tif (!control || !control.value) {\r\n\t\t\t\tvalid = false;\r\n\t\t\t} else {\r\n\t\t\t\tcoordinates = (control.value as string).split(',').map(x => Number(x));\r\n\r\n\t\t\t\tvalid = coordinates.length === 2 && coordinates[0] &&\r\n\t\t\t\t\tcoordinates[1] && !isNaN(Number(coordinates[0]))\r\n\t\t\t\t\t&& !isNaN(Number(coordinates[1]));\r\n\r\n\t\t\t\tif (!valid) {\r\n\t\t\t\t\treturn {'coordinatesInvalid': {value: control.value}};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvalid = (BOKA.NumberUtil.truncateDecimal(coordinates[0]) === coordinates[0]) &&\r\n\t\t\t\t\t(BOKA.NumberUtil.truncateDecimal(coordinates[1]) === coordinates[1]);\r\n\r\n\t\t\t\tif (!valid) {\r\n\t\t\t\t\treturn {'coordinatesTooLong': {value: control.value}};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvalid = FormValidation.checkGeolocationCoordinates(coordinates[0], coordinates[1]);\r\n\r\n\t\t\t\tif (!valid) {\r\n\t\t\t\t\treturn {'coordinatesInvalid': {value: control.value}};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'coordinatesInvalid': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static integerValidator(): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = control.value % 1 === 0 ? true : false;\r\n\r\n\t\t\treturn valid ? null : {'valueNotAnInteger': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @param maxDate\r\n\t * @param validOn if true, date is valid if its on the target date or after.\r\n\t * @returns\r\n\t */\r\n\tpublic static maxDateValidator(maxDate: Date, validOn?: boolean): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (maxDate) {\r\n\t\t\t\tif (validOn) {\r\n\t\t\t\t\tvalid = control.value ? moment(maxDate).isSameOrAfter(control.value) : true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalid = control.value ? moment(maxDate).isAfter(control.value) : true;\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\tvalid = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'endDateOnOrAfterTargetDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static maxDateValidatorWithControl(maxControl: AbstractControl, invalidOn?: boolean): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (maxControl.value) {\r\n\t\t\t\tif (invalidOn) {\r\n\t\t\t\t\tvalid = control.value ? moment(maxControl.value).isSameOrAfter(control.value) : true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalid = control.value ? moment(maxControl.value).isAfter(control.value) : true;\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\tvalid = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'endDateOnOrAfterTargetDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Similar to minVDateValidator, except it uses an AbstractControl as input\r\n\t * @param minControl control that can be monitored\r\n\t * @param invalidOn if true, date cannot be on the minimum date\r\n\t * @returns\r\n\t */\r\n\tpublic static minDateValidatorWithControl(minControl: AbstractControl, invalidOn?: boolean): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (minControl.value) {\r\n\t\t\t\tif (invalidOn) {\r\n\t\t\t\t\tvalid = control.value ? moment(minControl.value).isSameOrBefore(control.value) : true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalid = control.value ? moment(minControl.value).isBefore(control.value) : true;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvalid = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'dateBeforeMinDate': {value: control.value}};\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static mustEqualValidator(target: number): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = control.value === target ? true : false;\r\n\r\n\t\t\treturn valid ? null : {'mustEqualNumber': {value: control.value}};\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static minDateValidator(minDate: Date, validOn?: boolean): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (minDate) {\r\n\t\t\t\tif (validOn) {\r\n\t\t\t\t\tvalid = control.value ? moment(minDate).isSameOrBefore(control.value) : true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalid = control.value ? moment(minDate).isBefore(control.value) : true;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvalid = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'dateBeforeMinDate': {value: control.value}};\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Same as the greaterThanValidator, except the input is an AbstractControl\r\n\t * instead of a static value\r\n\t * @param target\r\n\t * @returns\r\n\t */\r\n\tpublic static greaterThanValidatorControl(target: AbstractControl): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (control.value === null) {\r\n\t\t\t\tvalid = true; // we don't evaluate if the value isn't filled, since\r\n\t\t\t\t// the field may not be required.\r\n\t\t\t} else if (control.value > target.value) {\r\n\t\t\t\tvalid = true;\r\n\t\t\t} else {\r\n\t\t\t\tvalid = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'numberGreaterThan': {value: control.value,\r\n\t\t\t\ttarget: target.value}};\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static greaterThanValidator(target: number): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (control.value === null) {\r\n\t\t\t\tvalid = true; // we don't evaluate if the value isn't filled, since\r\n\t\t\t\t// the field may not be required.\r\n\t\t\t} else if (control.value > target) {\r\n\t\t\t\tvalid = true;\r\n\t\t\t} else {\r\n\t\t\t\tvalid = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'numberGreaterThan': {value: control.value,\r\n\t\t\t\ttarget: target}};\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static isDate(): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = DateUtility.IsDate(control.value) ? true : false;\r\n\r\n\t\t\treturn valid ? null : {'invalidDate': {value: control.value}};\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static lessThanValidatorControl(target: AbstractControl): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = !control.value || control.value < target.value ? true : false;\r\n\r\n\t\t\treturn valid ? null : {'numberLessThan': {value: control.value}};\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static mustBeBeforeDate(dateControl: AbstractControl): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (!dateControl.value) {\r\n\t\t\t\tvalid = true;\r\n\t\t\t} else {\r\n\t\t\t\tvalid = moment(control.value).isBefore(dateControl.value);\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'notBeforeDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static mustBeOnOrBeforeDate(dateControl: AbstractControl): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (!dateControl.value) {\r\n\t\t\t\tvalid = true;\r\n\t\t\t} else {\r\n\t\t\t\tvalid = moment(control.value).isSameOrBefore(dateControl.value);\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'mustBeOnOrBeforeDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static mustBeAfterDate(dateControl: AbstractControl): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (!dateControl.value) {\r\n\t\t\t\tvalid = true;\r\n\t\t\t} else {\r\n\t\t\t\tvalid = moment(dateControl.value).isBefore(control.value);\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'mustBeAfterWetDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static mustBeOnOrAfterDate(dateControl: AbstractControl): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (!dateControl.value) {\r\n\t\t\t\tvalid = true;\r\n\t\t\t} else {\r\n\t\t\t\tvalid = moment(dateControl.value).isSameOrBefore(control.value);\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'mustBeOnOrAfterDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static mustBeOnSameYearAsDate(dateControl: AbstractControl): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (!dateControl.value) {\r\n\t\t\t\tvalid = true;\r\n\t\t\t} else {\r\n\t\t\t\tvalid = DateUtility.areSameYear(dateControl.value,\r\n\t\t\t\t\tcontrol.value);\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'wetDateNotSameYearAsHarvestDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static mustBeWithinDateRange(dateControl: AbstractControl, range: number): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (!dateControl.value || !control.value) {\r\n\t\t\t\tvalid = true;\r\n\t\t\t} else {\r\n\t\t\t\tlet difference: number;\r\n\r\n\t\t\t\tdifference = DateUtility.getDifferenceInDays(dateControl.value, control.value);\r\n\r\n\t\t\t\tvalid = difference <= range;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'dateRangeExceeded': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static lessThanValidator(target: number): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = control.value < target ? true : false;\r\n\r\n\t\t\treturn valid ? null : {'numberLessThan': {value: control.value}};\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static setValidator(control: AbstractControl, validators: ValidatorFn[]) {\r\n\t\tcontrol.setValidators(validators);\r\n\t\tcontrol.updateValueAndValidity();\r\n\t}\r\n\r\n\tpublic static clearValidator(control: AbstractControl) {\r\n\t\tcontrol.clearValidators();\r\n\t\tcontrol.updateValueAndValidity();\r\n\t}\r\n\r\n\t/**\r\n\t * method used for getting feedback dynamically about which fields are problematic\r\n\t * @param formGroup\r\n\t * @returns\r\n\t */\r\n\tpublic static getFormIssueString(formGroup: FormGroup): string {\r\n\t\tfor (let field in formGroup.controls) {\r\n\r\n\t\t\tif (formGroup.get(field) === null) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tlet control = formGroup.get(field);\r\n\t\t\tlet group = (control as FormGroup);\r\n\t\t\tlet subResult: string;\r\n\r\n\t\t\tif (group.controls && group.invalid) {\r\n\t\t\t\tsubResult = this.getFormIssueString((control as FormGroup));\r\n\r\n\t\t\t\tif (subResult) {\r\n\t\t\t\t\treturn subResult;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (control.invalid) {\r\n\t\t\t\treturn field;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","export interface Position {\r\n\tcoords: {\r\n\t\tlatitude: number,\r\n\t\tlongitude: number,\r\n\t},\r\n\ttimestamp: number\r\n}\r\n\r\nexport class GeoLocation {\r\n\tpublic static getCoordinates(): Promise<Position> {\r\n\t\tif (navigator.geolocation) {\r\n\t\t\treturn new Promise(\r\n\t\t\t\t(resolve, reject) => navigator.geolocation.getCurrentPosition(resolve, reject)\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn new Promise(\r\n\t\t\t\tresolve => resolve({\r\n\t\t\t\t\tcoords: null,\r\n\t\t\t\t\ttimestamp: null\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t}\r\n\t}\r\n}\r\n","import { ElementRef } from '@angular/core';\r\nimport * as Highcharts from 'highcharts';\r\nrequire('highcharts/modules/exporting')(Highcharts);\r\nrequire('highcharts/modules/export-data')(Highcharts);\r\n\r\nimport { IHighchartsXAxis } from '../interfaces/views/highCharts';\r\nimport highChartExportOptions from '../components/shared/highchartsExportOptions';\r\n\r\nexport class HighChartsService {\r\n\tpublic static drawGraph(chart: ElementRef, data: Highcharts.IndividualSeriesOptions[],\r\n\t\tyAxis?: Highcharts.AxisOptions[], height?: number ): void {\r\n\r\n\t\tlet options: Highcharts.Options;\r\n\t\tlet xAxis: IHighchartsXAxis;\r\n\r\n\t\tif (!chart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\txAxis = {\r\n\t\t\ttype: 'datetime',\r\n\t\t\tgridLineWidth: 1\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tchart: {\r\n\t\t\t// type: 'line',\r\n\t\t\t},\r\n\t\t\ttitle: {\r\n\t\t\t\ttext: null,\r\n\t\t\t},\r\n\t\t\tlegend: {\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: null,\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ttooltip: {\r\n\t\t\t\tbackgroundColor: '#FFF',\r\n\t\t\t\tborderColor: '#FFF',\r\n\t\t\t\tvalueDecimals: 2,\r\n\t\t\t\tvalueSuffix: ' in.',\r\n\t\t\t\t// formatter: tooltipFormatter\r\n\t\t\t},\r\n\t\t\txAxis: xAxis,\r\n\t\t\tyAxis: [{\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: 'Inches'\r\n\t\t\t\t}\r\n\t\t\t}],\r\n\t\t\tseries: data,\r\n\t\t\texporting: highChartExportOptions\r\n\t\t}\r\n\r\n\t\tif (height > 0) {\r\n\t\t\toptions.chart.height = height;\r\n\t\t}\r\n\r\n\t\tif (yAxis) {\r\n\t\t\toptions.yAxis = yAxis;\r\n\t\t}\r\n\r\n\t\tHighcharts.chart(chart.nativeElement, options);\r\n\t}\r\n}\r\n","import { ValidateService } from '../services/validate.service';\r\n\r\nexport class KeyboardUtility {\r\n\tpublic static preventNonNumbers(e: KeyboardEvent, allowDecimals = false): void {\r\n\t\tif (!e) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (allowDecimals && e.key === '.') {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ((!ValidateService.isValidNumber(parseInt(e.key, 10)) && e.key !== 'Enter')\r\n\t\t\t|| e.key === '-' || e.key === 'e') {\r\n\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t}\r\n}\r\n","import { isNumber } from 'util';\r\n\r\nexport module BOKA {\r\n\texport class NumberUtil {\r\n\t\tpublic static convertToFloat(n: number, places: number): number {\r\n\t\t\tlet tenFactor = 10;\r\n\r\n\t\t\tif (!n || !places) {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\twhile (places > 1) {\r\n\t\t\t\ttenFactor = tenFactor * 10;\r\n\t\t\t\tplaces -= 1;\r\n\t\t\t}\r\n\r\n\t\t\treturn Math.round(n * tenFactor + Number.EPSILON) / tenFactor;\r\n\t\t}\r\n\r\n\t\tpublic static roundToDecimalPlaces(data: number, places: number): number {\r\n\t\t\tlet tenFactor = 10;\r\n\r\n\t\t\tif (!data || !places) {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\twhile (places > 1) {\r\n\t\t\t\ttenFactor = tenFactor * 10;\r\n\t\t\t\tplaces -= 1;\r\n\t\t\t}\r\n\r\n\t\t\treturn Math.round(data * tenFactor + Number.EPSILON) / tenFactor;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Truncate a number without rounding\r\n\t\t *\r\n\t\t * @param x\r\n\t\t * @param places\r\n\t\t */\r\n\t\tpublic static truncateDecimal(x: number, places = 6): number {\r\n\t\t\tlet result: number;\r\n\t\t\tlet num: string[];\r\n\r\n\t\t\tif (x === null || x === undefined) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tnum = x.toString().split('.');\r\n\r\n\t\t\tif (num.length === 2) { // contains decimals\r\n\t\t\t\tnum[1] = num[1].substring(0, places);\r\n\t\t\t\tresult = parseFloat(num[0] + '.' + num[1]);\r\n\t\t\t\treturn result;\r\n\t\t\t} else {\r\n\t\t\t\treturn x;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import * as _ from 'underscore';\r\nimport * as jQuery from 'jquery';\r\n\r\nexport class ObjectUtility {\r\n\r\n\tpublic static copy(o: any): any {\r\n\t\tlet copy: any = {};\r\n\r\n\t\tjQuery.extend(true, copy, o);\r\n\t\treturn copy;\r\n\t}\r\n\r\n\tpublic static copyArray(objects: any[]): any[] {\r\n\t\tlet result: any[] = new Array();\r\n\r\n\t\tif (!objects) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let object of objects) {\r\n\t\t\tresult.push(ObjectUtility.copy(object));\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static isEqual(objectA: object, objectB: object): boolean {\r\n\t\treturn _.isEqual(objectA, objectB);\r\n\t}\r\n\r\n\t/**\r\n     * Compare 2 objects, similar to _isEqual, except looser comparison. If differences exist,\r\n     * display a console log, for debugging purposes\r\n     *\r\n     * @param obj1\r\n     * @param obj2\r\n     * @param parentKey\r\n     */\r\n\tpublic static AreEqual(obj1: object, obj2: object, parentKey: string): boolean {\r\n\t\tlet areEqual: boolean;\r\n\r\n\t\tareEqual = true;\r\n\r\n\t\tparentKey = parentKey || '';\r\n\r\n\t\tif (!obj1 || !obj2) {\r\n\t\t\tif (!obj1 && !obj2) {\r\n\t\t\t\t// both are equally empty, so they're.. equal\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\t// one of the objects is empty but not both, so not equal\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t_.each(_.keys(obj1), function (key) {\r\n\t\t\tif (_.isObject(_.property(key)(obj1))) {\r\n\t\t\t\tif (ObjectUtility.AreEqual(_.property(key)(obj1), _.property(key)(obj2), parentKey + key + '.') === false\r\n\t\t\t\t\t&& areEqual === true) {\r\n\t\t\t\t\tareEqual = false;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (!_.has(obj2, key) || !_.isEqual(_.property(key)(obj1), _.property(key)(obj2))) {\r\n\t\t\t\t\tareEqual = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\treturn areEqual;\r\n\t}\r\n}\r\n","<div class=\"bk-admin__container\">\r\n    <admin-nav>\r\n\r\n    </admin-nav>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { navigationViews, UpdateService } from '../../services/update.service';\r\nimport { CookieService } from '../../services/cookie.service';\r\nimport { TokenService } from '../../services/token.service';\r\n\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'admin',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class AdminComponent implements OnInit {\r\n\tconstructor(\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _cookieService: CookieService,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate _router: Router) {\r\n\r\n\t\tif (this._tokenService.isAuthenticated() === false) {\r\n\t\t\tthis._router.navigate(['login']);\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._updateService.setCurrentRanchId(null);\r\n\t\tthis._updateService.setRanchPlantingsPermissions(null);\r\n\t\tthis._cookieService.deleteCurrentRanchCookie();\r\n\t\tthis._updateService.setCurrentPage(navigationViews.LOCALIZATION);\r\n\t\tthis._updateService.clearRanchSettings();\r\n\t\tthis._router.navigate(['Localization']);\r\n\t}\r\n}\r\n","<div class=\"bk-nav\">\r\n    <div class=\"bk-nav__title-container\">\r\n        <h4 class=\"bk-nav__title\">{{'Administration' | translate }}</h4>\r\n    </div>\r\n    <ul class=\"bk-nav__items\">\r\n\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/cropStages\">\r\n\t\t\t\tCrop Stages\r\n\t\t\t</a>\r\n\t\t</li>\r\n\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/CropTypes\" [routerLinkActive]=\"'bk-nav__item--selected'\">\r\n\t\t\t\tCrop Types\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t<!--\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a href=\"/Admin/FertilizerType\" target=\"_blank\">\r\n\t\t\t\tFertilizer Types\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t-->\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/flowmeter\">\r\n\t\t\t\tFlow Meter Data\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/GlobalSettings\">\r\n\t\t\t\tGlobal Settings\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/IgnoreSchedules\" [routerLinkActive]=\"'bk-nav__item--selected'\">\r\n\t\t\t\tIgnore schedules\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/Localization\" [routerLinkActive]=\"'bk-nav__item--selected'\">\r\n\t\t\t\tLocalization\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/Ranches\" [routerLinkActive]=\"'bk-nav__item--selected'\">\r\n\t\t\t\tRanches\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/SoilSensor\" [routerLinkActive]=\"'bk-nav__item--selected'\">\r\n\t\t\t\tSoil Sensors\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t<!--\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a href=\"/Admin/SoilType\" target=\"_blank\">\r\n\t\t\t\tSoil Types\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t-->\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/statistics\">\r\n\t\t\t\tStatistics\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/WebAPIStatistics\">\r\n\t\t\t\tWeb API Statistics\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/userManagement\">\r\n\t\t\t\tUser Management\r\n\t\t\t</a>\r\n\t\t</li>\r\n\t\t<li class=\"bk-nav__item\">\r\n\t\t\t<a routerLink=\"/WeatherStations\" [routerLinkActive]=\"'bk-nav__item--selected'\">\r\n\t\t\t\tWeather Stations\r\n\t\t\t</a>\r\n\t\t</li>\r\n        <li [class.bk-nav__item--selected]=\"tab.selected\" class=\"bk-nav__item\" *ngFor=\"let tab of tabs\" (click)=\"selectTab(tab)\">\r\n            {{tab.tabTitle}}\r\n        </li>\r\n    </ul>\r\n</div>\r\n<ng-content></ng-content>\r\n","import { Component, Input } from '@angular/core';\r\nimport { NavInterface } from '../../../interfaces/nav.interface';\r\nimport { AdminTabComponent } from '../../../components/admin/tab/main';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'admin-nav',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\n/**\r\n * @Scope Scope was validated on 5/7/2020\r\n */\r\nexport class AdminNavComponent implements NavInterface {\r\n\ttabs: AdminTabComponent[] = [];\r\n\r\n\t@Input()\r\n\ttitle: string;\r\n\r\n\t/**\r\n\t * @param tab\r\n\t * @public This method is publicly visible since its called by other components\r\n\t */\r\n\tpublic selectTab(tab: AdminTabComponent): void {\r\n\t\tthis.tabs.map((t) => {\r\n\t\t\tt.selected = false;\r\n\t\t});\r\n\r\n\t\ttab.selected = true;\r\n\t}\r\n\r\n\t/**\r\n\t * @param tab\r\n\t * @public This method is publicly visible since its called by other components\r\n\t */\r\n\tpublic addTab(tab: AdminTabComponent): void {\r\n\t\tif (!this.tabs.length) {\r\n\t\t\ttab.selected = true;\r\n\t\t}\r\n\r\n\t\tthis.tabs.push(tab);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\t\r\n\t<button type=\"button\"\r\n\t\tclass=\"bk-dialog__close\"\r\n\t\t(click)=\"cancel()\">\r\n\t\t&times;\r\n\t</button>\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\t{{ 'Applied Fertilization Chart' | translate }}\r\n\t</h4>\r\n\t<h5 class='bk-modal__subTitle'>\r\n\t\t{{ plantingName }}\r\n\t</h5>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<div class=\"bk-chart\" #chartContainer></div>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button (click)=\"cancel()\" mat-button\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t\t{{ 'Close' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, Inject, OnInit, ViewChild, OnDestroy, ElementRef } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { AppliedFertilizerChartDataSet, AppliedFertilizerChartRecord } from './interfaces';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { PlantingService } from '../planting-settings/service';\r\nimport { IHighChartCustomSeries } from '../available-water-chart/interfaces';\r\nimport * as Highcharts from 'highcharts';\r\nimport highChartExportOptions from '../shared/highchartsExportOptions';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'applied-fertilizer-chart',\r\n\ttemplateUrl: 'applied-fertilizer-chart.html'\r\n})\r\n\r\nexport class AppliedFertilizerChartComponent implements OnInit, OnDestroy {\r\n\r\n\t@ViewChild('chartContainer', { static: true }) private _chartContainer: ElementRef;\r\n\tprivate _chartData: Highcharts.IndividualSeriesOptions[];\r\n\tpublic plantingName: string;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tprivate min: number; // min max date number values for displaying the chart\r\n\tprivate max: number;\r\n\r\n\tconstructor(\r\n\t\tprivate _service: PlantingService,\r\n\t\tprivate _dialogRef: MatDialogRef<AppliedFertilizerChartComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { lotPlantingId: number, name: string },\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._configureClickOutside(this._subscriptions$, this._dialogRef);\r\n\r\n\t\tif (!this._data) {\r\n\t\t\tthrow new Error('data is empty');\r\n\t\t}\r\n\r\n\t\tthis.plantingName = this._data.name;\r\n\r\n\t\tthis._service.getAppliedFertilizerChart(this._data.lotPlantingId).then(response => {\r\n\t\t\tthis._convertToGraphData(response);\r\n\r\n\t\t\tthis._drawChart();\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic cancel(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tprivate _configureClickOutside(s: Subject<boolean>, d: MatDialogRef<AppliedFertilizerChartComponent>): void {\r\n\t\t// custom click outside behavior\r\n\t\td.disableClose = true;\r\n\r\n\t\td.backdropClick().pipe(takeUntil(s)).subscribe(() => {\r\n\t\t\td.close();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _convertToGraphData(records: AppliedFertilizerChartDataSet): void {\r\n\r\n\t\tlet temp: {\r\n\t\t\trecommendations: IHighChartCustomSeries,\r\n\t\t\tAppliedAmounts: IHighChartCustomSeries,\r\n\t\t\tNUptake: Highcharts.LineChartSeriesOptions\r\n\t\t};\r\n\r\n\t\ttemp = {\r\n\t\t\trecommendations: {\r\n\t\t\t\tname: 'Recommended',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueSuffix: ' lbs N/acre'\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\tAppliedAmounts: {\r\n\t\t\t\tname: 'Fertilizer Applied',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueSuffix: ' lbs N/acre'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tNUptake: {\r\n\t\t\t\tname: 'N Uptake',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueSuffix: ' lbs N/acre'\r\n\t\t\t\t},\r\n\t\t\t\tmarker: {\r\n\t\t\t\t\tenabled: false\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let record of records.Recommendations) {\r\n\t\t\tlet utc: number;\r\n\r\n\t\t\tutc = DateUtility.DateToUTC(DateUtility.DotNetToDate(record.EventDate));\r\n\t\t\ttemp.recommendations.data.push([utc, record.Amount]);\r\n\t\t}\r\n\r\n\t\tfor (let record of records.AppliedAmounts) {\r\n\t\t\tlet utc: number;\r\n\r\n\t\t\tutc = DateUtility.DateToUTC(DateUtility.DotNetToDate(record.EventDate));\r\n\t\t\ttemp.AppliedAmounts.data.push([utc, record.Amount]);\r\n\t\t}\r\n\r\n\t\tfor (let record of records.NUptake) {\r\n\t\t\tlet utc: number;\r\n\r\n\t\t\tutc = DateUtility.DateToUTC(DateUtility.DotNetToDate(record.EventDate));\r\n\t\t\ttemp.NUptake.data.push([utc, record.Amount]);\r\n\t\t}\r\n\r\n\t\tconst { minDate, maxDate } = records.NUptake.reduce((acc, curr) => {\r\n\t\t\tlet date: number;\r\n\r\n\t\t\tdate = DateUtility.DateToUTC(DateUtility.DotNetToDate(curr.EventDate));\r\n\r\n\t\t\treturn {\r\n\t\t\t\tminDate: date < acc.minDate ? date : acc.minDate,\r\n\t\t\t\tmaxDate: date > acc.maxDate ? date : acc.maxDate\r\n\t\t\t};\r\n\t\t}, { minDate: Infinity, maxDate: -Infinity });\r\n\r\n\t\tthis.min = minDate;\r\n\t\tthis.max = maxDate;\r\n\r\n\t\tthis._chartData = [];\r\n\r\n\t\tthis._chartData.push(temp.recommendations);\r\n\t\tthis._chartData.push(temp.AppliedAmounts);\r\n\t\tthis._chartData.push(temp.NUptake);\r\n\r\n\t\tthis._chartData.push(this._generateDaysToNextFertilizaiton(records.DaysToNextFertilization,\r\n\t\t\trecords.AppliedAmounts));\r\n\t}\r\n\r\n\tprivate _generateDaysToNextFertilizaiton(daysRecords: AppliedFertilizerChartRecord[],\r\n\t\tappliedRecords: AppliedFertilizerChartRecord[]): Highcharts.LineChartSeriesOptions {\r\n\r\n\t\tlet result: Highcharts.LineChartSeriesOptions;\r\n\r\n\t\tresult = {\r\n\t\t\tname: 'Days to Next Fertilization',\r\n\t\t\tvisible: true,\r\n\t\t\tdata: [],\r\n\t\t\tmarker: {\r\n\t\t\t\tenabled: false\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdaysRecords.forEach((record, index) => {\r\n\t\t\tlet utcStart: number;\r\n\t\t\tlet utcEnd: number;\r\n\r\n\t\t\tutcStart = DateUtility.DateToUTC(DateUtility.DotNetToDate(record.EventDate));\r\n\r\n\t\t\tutcEnd = DateUtility.DateToUTC(\r\n\t\t\t\tDateUtility.addDays(DateUtility.DotNetToDate(record.EventDate), record.Amount)\r\n\t\t\t);\r\n\r\n\t\t\tresult.data.push([utcStart, appliedRecords[index].Amount]);\r\n\t\t\tresult.data.push([utcEnd, appliedRecords[index].Amount]);\r\n\t\t\tresult.data.push(null);\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _drawChart(): void {\r\n\t\tlet options: Highcharts.Options;\r\n\r\n\t\tif (!this._chartContainer) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tchart: {\r\n\t\t\t// type: 'line',\r\n\t\t\t},\r\n\t\t\ttitle: {\r\n\t\t\t\ttext: null,\r\n\t\t\t},\r\n\t\t\tlegend: {\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: null,\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ttooltip: {\r\n\t\t\t\tbackgroundColor: '#FFF',\r\n\t\t\t\tborderColor: '#FFF',\r\n\t\t\t\tvalueDecimals: 2,\r\n\t\t\t\tvalueSuffix: ' in.',\r\n\t\t\t\t// formatter: tooltipFormatter\r\n\t\t\t},\r\n\t\t\txAxis: {\r\n\t\t\t\ttype: 'datetime',\r\n\t\t\t\tgridLineWidth: 1,\r\n\t\t\t\tmin: this.min,\r\n\t\t\t\tmax: this.max\r\n\t\t\t},\r\n\t\t\tyAxis: [{\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: 'Lbs N/acre'\r\n\t\t\t\t}\r\n\t\t\t}],\r\n\t\t\tseries: this._chartData,\r\n\t\t\texporting: highChartExportOptions\r\n\t\t}\r\n\r\n\t\tHighcharts.chart(this._chartContainer.nativeElement, options);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\t\r\n\t<button type=\"button\"\r\n\t\tclass=\"bk-dialog__close\"\r\n\t\t(click)=\"cancel()\">\r\n\t\t&times;\r\n\t</button>\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\t{{ 'Applied Water Chart' | translate }}\r\n\t</h4>\r\n\t<h5 class='bk-modal__subTitle'>\r\n\t\t{{ plantingName }}\r\n\t</h5>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<div class=\"bk-chart\" #appliedWaterChartContainer></div>\r\n\t\t<div *ngIf=\"!chartHasData\"\r\n\t\t\tclass=\"warning\">\r\n\t\t\t\r\n\t\t\t<i class=\"fa fa-warning bk-error\"></i>{{ 'There are no irrigation events associated with this planting' | translate}}.\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button (click)=\"cancel()\" mat-button\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t\t{{ 'Close' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, Inject, OnInit, ViewChild, OnDestroy, ElementRef } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { IAppliedWaterChartDataSet } from './interfaces';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { HighChartsService } from '../../classes/highCharts.service';\r\nimport { PlantingService } from '../planting-settings/service';\r\nimport * as moment from 'moment';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'applied-water-chart',\r\n\ttemplateUrl: 'applied-water-chart.html',\r\n\tstyleUrls: [ 'applied-water-chart.scss']\r\n})\r\n\r\nexport class AppliedWaterChartComponent implements OnInit, OnDestroy {\r\n\r\n\t@ViewChild('appliedWaterChartContainer', { static: true }) private _appliedWaterChartContainer: ElementRef;\r\n\tpublic chartHasData = true;\r\n\tprivate _chartData: Highcharts.IndividualSeriesOptions[];\r\n\tpublic plantingName: string;\r\n\tprivate _harvestDate: Date;\r\n\tpublic maxDate: Date;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tpublic isSaving: boolean;\r\n\r\n\tconstructor(\r\n\t\tprivate _service: PlantingService,\r\n\t\tprivate _dialogRef: MatDialogRef<AppliedWaterChartComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { lotPlantingId: number, name: string, harvestDate: Date }\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._configureClickOutside(this._subscriptions$, this._dialogRef);\r\n\r\n\t\tif (!this._data) {\r\n\t\t\tthrow new Error('data is empty');\r\n\t\t}\r\n\r\n\t\tthis.plantingName = this._data.name;\r\n\t\tthis._harvestDate = this._data.harvestDate;\r\n\t\tthis._initializeForm();\r\n\r\n\t\tthis._service.getAppliedWaterChart(this._data.lotPlantingId).then(response => {\r\n\t\t\tthis._convertToGraphData(response);\r\n\t\t\tHighChartsService.drawGraph(this._appliedWaterChartContainer, this._chartData);\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic cancel(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tprivate _configureClickOutside(s: Subject<boolean>, d: MatDialogRef<AppliedWaterChartComponent>): void {\r\n\t\t// custom click outside behavior\r\n\t\td.disableClose = true;\r\n\r\n\t\td.backdropClick().pipe(takeUntil(s)).subscribe(() => {\r\n\t\t\td.close();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _convertToGraphData(records: IAppliedWaterChartDataSet): void {\r\n\r\n\t\tlet temp: {\r\n\t\t\trecommendations: Highcharts.IndividualSeriesOptions,\r\n\t\t\twaterApplied: Highcharts.IndividualSeriesOptions,\r\n\t\t};\r\n\r\n\t\ttemp = {\r\n\t\t\trecommendations: {\r\n\t\t\t\tname: 'Recommended',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: []\r\n\t\t\t},\r\n\t\t\twaterApplied: {\r\n\t\t\t\tname: 'Water Applied',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: []\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.chartHasData = true;\r\n\r\n\t\tif (records && records.Recommendations && records.Recommendations.length > 0) {\r\n\t\t\tfor (let record of records.Recommendations) {\r\n\t\t\t\tlet utc: number;\r\n\r\n\t\t\t\tutc = DateUtility.DateToUTC(DateUtility.DotNetToDate(record.EventDate));\r\n\t\t\t\ttemp.recommendations.data.push([utc, record.Inches]);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.chartHasData = false;\r\n\t\t}\r\n\r\n\t\tif (records && records.WaterApplied && records.WaterApplied.length > 0) {\r\n\t\t\tfor (let record of records.WaterApplied) {\r\n\t\t\t\tlet utc: number;\r\n\r\n\t\t\t\tutc = DateUtility.DateToUTC(DateUtility.DotNetToDate(record.EventDate));\r\n\t\t\t\ttemp.waterApplied.data.push([utc, record.Inches]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._chartData = [];\r\n\r\n\t\tthis._chartData.push(temp.recommendations);\r\n\t\tthis._chartData.push(temp.waterApplied);\r\n\t}\r\n\r\n\tpublic onUpdate(): void {\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._service.getAppliedWaterChart(this._data.lotPlantingId).then(response => {\r\n\t\t\tthis._convertToGraphData(response);\r\n\t\t\tHighChartsService.drawGraph(this._appliedWaterChartContainer, this._chartData);\r\n\t\t\tthis.isSaving = false;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _initializeForm(): void {\r\n\t\tthis.maxDate = moment(this._harvestDate).subtract(1, 'days').toDate();\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\t\r\n\t<button type=\"button\"\r\n\t\tclass=\"bk-dialog__close\"\r\n\t\t(click)=\"cancel()\">\r\n\t\t&times;\r\n\t</button>\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\t{{ 'Soil Water Balance' | translate }}\r\n\t</h4>\r\n\t<h5 class='bk-modal__subTitle'>\r\n\t\t{{ plantingName }}\r\n\t</h5>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<mat-tab-group\r\n\t\t\tclass=\"bk-available-water-chart\"\r\n\t\t\t(selectedTabChange)=\"redrawGraph($event)\">\r\n\t\t\t<mat-tab label=\"Soil Water Balance\">\r\n\t\t\t\t<div class=\"bk-chart\" #chartContainer></div>\r\n\t\t\t\t\r\n\t\t\t\t<p *ngIf=\"isLoaded\">\r\n\t\t\t\t\t{{ 'Accuracy instruction text' | translate }}.\r\n\t\t\t\t\t<span class=\"cm-learn-more-link\" (click)=\"onCustomSaturationHelpOpen()\">{{ 'Learn More' | translate }}</span>\r\n\t\t\t\t</p>\r\n\t\t\t\t<form *ngIf=\"form\"\r\n\t\t\t\t\t[formGroup]=form\r\n\t\t\t\t\tclass=\"bk-form cm-saturation-date-form\">\r\n\t\t\t\t\t\r\n\t\t\t\t\t<div class=\"bk-custom-saturation-ui\">\r\n\t\t\t\t\t\t<mat-form-field appearance=\"fill\"\r\n\t\t\t\t\t\t\tclass='mat-form-field--short'>\r\n\t\t\t\t\t\t\t<mat-label>Start Date</mat-label>\r\n\t\t\t\t\t\t\t<input matInput [matDatepicker]=\"picker\"\r\n\t\t\t\t\t\t\t\tformControlName=\"StartDate\"\r\n\t\t\t\t\t\t\t\t[min]=\"minDate\"\r\n\t\t\t\t\t\t\t\t[max]=\"maxDate\">\r\n\t\t\t\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n\t\t\t\t\t\t\t<mat-datepicker #picker></mat-datepicker>\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"f.StartDate.invalid && (f.StartDate.dirty || f.StartDate.touched)\">\r\n\t\t\t\t\t\t\t\tInitial saturation date is invalid\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\r\n\t\t\t\t\t\t<div class=\"bk-custom-saturation-ui__slider-section\">\r\n\t\t\t\t\t\t\t<mat-slider\r\n\t\t\t\t\t\t\t\tmin=\"0\" max=\"100\"\r\n\t\t\t\t\t\t\t\taria-label=\"unit(s)\"\r\n\t\t\t\t\t\t\t\tthumbLabel\r\n\t\t\t\t\t\t\t\t[displayWith]=\"formatLabel\"\r\n\t\t\t\t\t\t\t\tformControlName=\"InitialSaturation\"></mat-slider>\r\n\t\t\t\t\t\t\t<div class=\"bk-custom-saturation-ui__legend\">\r\n\t\t\t\t\t\t\t\t<span class=\"bk-legend--end\">{{ 'Dry' | translate }}</span>\r\n\t\t\t\t\t\t\t\t<span class=\"bk-legend-middle\">{{ 'Initial Available Water Percentage' | translate }}</span>\r\n\t\t\t\t\t\t\t\t<span class=\"bk-legend--end\">{{ 'Wet' | translate }}</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t<button mat-button\r\n\t\t\t\t\t\t\t[disabled]=\"!form.dirty || form.invalid\"\r\n\t\t\t\t\t\t\tclass=\"bk-button bk-button--medium bk-button--text-only bk-button--same-line\"\r\n\t\t\t\t\t\t\tstyle=\"top: -12px;\"\r\n\t\t\t\t\t\t\t(click)=\"onUpdate()\">\r\n\t\t\t\t\t\t\t{{ 'Recalculate' | translate }}\r\n\t\t\t\t\t\t\t<img class='bk-button__loader' *ngIf='!isLoaded' src='/assets/images/loader-20px.gif'/>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t</form>\r\n\t\t\t</mat-tab>\r\n\t\t\t<mat-tab label=\"ET\">\r\n\t\t\t\t<div class=\"bk-chart\" #etChartContainer></div>\r\n\r\n\t\t\t\t<div *ngIf=\"isLoaded\"\r\n\t\t\t\t\tclass=\"bk-chart__explanation\">\r\n\r\n\t\t\t\t\t<h2 class=\"bk-chart__explanation__header\">\r\n\t\t\t\t\t\t<mat-icon>\r\n\t\t\t\t\t\t\tinfo_outline\r\n\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t\tHow to read this chart\r\n\t\t\t\t\t</h2>\r\n\t\t\t\t\t<p><em>ETc</em> line represents the crop specific evapotranspiration (ET) over time, which is the reference ET (ETo)\r\n\t\t\t\t\t\tmultiplied by a crop's crop coefficient (Kc). <em>ETe</em> line is ETo modified by effects of soil evaporation.\r\n\t\t\t\t\t</p>\r\n\t\t\t\t</div>\r\n\t\t\t</mat-tab>\r\n\r\n\t\t\t<ng-container *ngIf=\"isAdmin\">\r\n\t\t\t\t<mat-tab label=\"Crop Coefficient\">\r\n\t\t\t\t\t<div class=\"bk-chart\" #kcChartContainer></div>\r\n\r\n\t\t\t\t\t<div *ngIf=\"isLoaded\"\r\n\t\t\t\t\t\tclass=\"bk-chart__explanation\">\r\n\r\n\t\t\t\t\t\t<h2 class=\"bk-chart__explanation__header\">\r\n\t\t\t\t\t\t\t<mat-icon>\r\n\t\t\t\t\t\t\t\tinfo_outline\r\n\t\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t\t\tHow to read this chart\r\n\t\t\t\t\t\t</h2>\r\n\t\t\t\t\t\t<p><em>Kc</em> line tracks your crop's crop coefficient over time, which is multiplied against reference ET to\r\n\t\t\t\t\t\t\tcalculate ETc.\r\n\t\t\t\t\t\t</p>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</mat-tab>\r\n\t\t\t</ng-container>\r\n\t\t\t<mat-tab label=\"Crop Stress\">\r\n\t\t\t\t<div class=\"bk-chart\" #ksChartContainer></div>\r\n\r\n\t\t\t\t<div *ngIf=\"isLoaded\"\r\n\t\t\t\t\tclass=\"bk-chart__explanation\">\r\n\r\n\t\t\t\t\t<h2 class=\"bk-chart__explanation__header\">\r\n\t\t\t\t\t\t<mat-icon>\r\n\t\t\t\t\t\t\tinfo_outline\r\n\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t\tHow to read this chart\r\n\t\t\t\t\t</h2>\r\n\t\t\t\t\t<p><em>Ks</em> line tracks your crop's stress over time\r\n\t\t\t\t\t</p>\r\n\t\t\t\t</div>\r\n\t\t\t</mat-tab>\r\n\t\t\t<ng-container *ngIf=\"isAdmin\">\r\n\t\t\t\t<mat-tab label=\"Root Depth\">\r\n\t\t\t\t\t<div class=\"bk-chart\" #rootDepthChartContainer></div>\r\n\t\t\t\t\t<div *ngIf=\"isLoaded\"\r\n\t\t\t\t\t\tclass=\"bk-chart__explanation\">\r\n\r\n\t\t\t\t\t\t<h2 class=\"bk-chart__explanation__header\">\r\n\t\t\t\t\t\t\t<mat-icon>\r\n\t\t\t\t\t\t\t\tinfo_outline\r\n\t\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t\t\tHow to read this chart\r\n\t\t\t\t\t\t</h2>\r\n\t\t\t\t\t\t<p><em>Root depth</em> line tracks your crop's root depth over time. A plant's available water is impacted\r\n\t\t\t\t\t\t\tby the root depth. As the root depth increases, more water is available to the plant.\r\n\t\t\t\t\t\t</p>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</mat-tab>\r\n\t\t\t</ng-container>\r\n\t\t</mat-tab-group>\r\n\t\t<!-- saturation controls -->\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button (click)=\"cancel()\" mat-button\r\n\t\t\tclass=\"bk-button--medium bk-dialog__button--primary\">\r\n\t\t\t{{ 'Close' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, Inject, OnInit, ViewChild, OnDestroy, ElementRef, AfterViewInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { PlantingService } from '../planting-settings/service';\r\nimport { IAvailableWater, IHighChartCustomSeries } from './interfaces';\r\nimport * as Highcharts from 'highcharts';\r\nimport highChartExportOptions from '../shared/highchartsExportOptions';\r\nimport { MatTabChangeEvent } from '@angular/material/tabs';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { IPlanting } from '../planting-settings/interfaces';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport * as moment from 'moment';\r\nimport { FormValidation } from '../../classes/formValidation';\r\nimport { CustomSaturationHelp } from './custom-saturation-help';\r\nimport { SharedUpdateService } from '../shared/dialogs/update.service';\r\nimport { PersistentDatabase } from '../../services/persistent-database';\r\nimport { DIALOG_HIDE_CLASS } from '../shared/constants';\r\n\r\nexport type AvailableWaterChartFormFields = 'StartDate' | 'InitialSaturation';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'available-water-chart',\r\n\ttemplateUrl: 'available-water-chart.html',\r\n\tstyleUrls: ['available-water-chart.scss']\r\n})\r\n\r\nexport class AvailableWaterChartComponent implements OnInit, OnDestroy {\r\n\tpublic plantingName: string;\r\n\tpublic isLoaded = false;\r\n\tpublic form: FormGroup;\r\n\tpublic maxDate: Date;\r\n\tpublic minDate: Date;\r\n\tpublic isAdmin = true;\r\n\r\n\t@ViewChild('chartContainer', { static: true }) private _chartContainer: ElementRef;\r\n\t@ViewChild('etChartContainer', { static: true }) private _ETChartContainer: ElementRef;\r\n\t@ViewChild('kcChartContainer', { static: false }) private _KCChartContainer: ElementRef;\r\n\t@ViewChild('ksChartContainer', { static: true }) private _KSChartContainer: ElementRef;\r\n\t@ViewChild('rootDepthChartContainer', { static: false }) private _rootDepthChartContainer: ElementRef;\r\n\tprivate _chartData: Highcharts.IndividualSeriesOptions[];\r\n\tprivate _ETChartData: Highcharts.IndividualSeriesOptions[]; // for the ET chart\r\n\tprivate _KCChartData: Highcharts.IndividualSeriesOptions[];\r\n\tprivate _rootDepthChartData: Highcharts.IndividualSeriesOptions[];\r\n\tprivate _KsChartData: Highcharts.IndividualSeriesOptions[];\r\n\tprivate _planting: IPlanting;\r\n\tprivate _soilWaterColor = 'rgb(203, 221, 237)';\r\n\tprivate _maxRainApplied: number; // maximum applied water /rainfall value, used to scale the chart\r\n\tprivate _isStressEnabled: boolean;\r\n\r\n\tprivate _charts: {\r\n\t\tsoilWater: Highcharts.ChartObject,\r\n\t\tet: Highcharts.ChartObject,\r\n\t\tkc: Highcharts.ChartObject,\r\n\t\tks: Highcharts.ChartObject,\r\n\t\trootDepth: Highcharts.ChartObject\r\n\t};\r\n\r\n\tprivate _maxSAW: number;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic get f(): { [key in AvailableWaterChartFormFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in AvailableWaterChartFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { lotPlantingId: number, name: string },\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<AvailableWaterChartComponent>,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _service: PlantingService,\r\n\t\tprivate _persistentDatabase: PersistentDatabase,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._configureClickOutside(this._subscriptions$, this._dialogRef);\r\n\r\n\t\tif (!this._data) {\r\n\t\t\tthrow new Error('data is empty');\r\n\t\t}\r\n\r\n\t\tthis._planting = this._ranchService.plantings.getPlantingById(this._data.lotPlantingId);\r\n\t\tthis.plantingName = this._data.name;\r\n\r\n\t\tthis.isAdmin = (this._persistentDatabase.user.Roles &&\r\n\t\t\tthis._persistentDatabase.user.Roles.length > 0 &&\r\n\t\t\tthis._persistentDatabase.user.Roles[0].Id === 1) ? true : false;\r\n\t\t\tthis._service.getCustomSaturationSettings(this._data.lotPlantingId).then(response => {\r\n\t\t\t\tthis._initializeForm();\r\n\r\n\t\t\tif (response.SaturationDate !== null) {\r\n\t\t\t\t\tthis.f.StartDate.setValue(DateUtility.DotNetToDate(response.SaturationDate));\r\n\t\t\t} else {\r\n\t\t\t\tthis.f.StartDate.setValue(this.minDate);\r\n\t\t\t\t}\r\n\r\n\t\t\tif (response.PercentSaturation !== null) {\r\n\t\t\t\t\tthis.f.InitialSaturation.setValue(response.PercentSaturation * 100);\r\n\t\t\t} else {\r\n\t\t\t\tthis.f.InitialSaturation.setValue(75);\r\n\t\t\t\t}\r\n\r\n\t\t\tthis._isStressEnabled = response.IsStressEnabled;\r\n\r\n\t\t\tthis._service.getAvailableWaterChart(this._data.lotPlantingId).then(chartResponse => {\r\n\t\t\t\tthis._loadChartData(chartResponse);\r\n\t\t\t\tthis.isLoaded = true;\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic cancel(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tpublic onUpdate(): void {\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.isLoaded) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isLoaded = false;\r\n\r\n\t\tthis._service.refreshAvailableWaterChart(this._planting.Id,\r\n\t\t\tthis.f.StartDate.value, this.f.InitialSaturation.value).then(() => {\r\n\t\t\t\tthis._service.getAvailableWaterChart(this._planting.Id).then((response) => {\r\n\t\t\t\t\tthis._loadChartData(response);\r\n\t\t\t\t\tthis.isLoaded = true;\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t// recalculate available water\r\n\t\t// refetch graph\r\n\t}\r\n\r\n\t/**\r\n\t * Reflow highCharts inside tabs. Otherwise they create horizontal scrollbars\r\n\t * @param $event\r\n\t */\r\n\tpublic redrawGraph($event: MatTabChangeEvent): void {\r\n\t\tif (!this._charts || !this._charts.soilWater ||\r\n\t\t\t!this._charts.et || !this._charts.kc || !this._charts.rootDepth) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tswitch ($event.index) {\r\n\t\t\tcase 0:\r\n\t\t\t\tthis._charts.soilWater.reflow();\r\n\t\t\t\tbreak;\r\n\t\t\tcase 1:\r\n\t\t\t\tthis._charts.et.reflow();\r\n\t\t\t\tbreak;\r\n\t\t\tcase 2:\r\n\t\t\t\tthis._charts.kc.reflow();\r\n\t\t\t\tbreak;\r\n\t\t\tcase 3:\r\n\t\t\t\tthis._charts.ks.reflow();\r\n\t\t\t\tbreak;\r\n\t\t\tcase 4:\r\n\t\t\t\tthis._charts.rootDepth.reflow();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/***\r\n\t * Method visible in the template for opening\r\n\t * the confirmation dialog\r\n\t */\r\n\tpublic onCustomSaturationHelpOpen(): void {\r\n\r\n\t\tthis._dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\r\n\t\tthis._dialog.open(CustomSaturationHelp, {\r\n\t\t\twidth: '600px',\r\n\t\t\tdisableClose: true,\r\n\t\t});\r\n\r\n\t\tthis._sharedUpdateService.cancel$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._dialogRef.removePanelClass(DIALOG_HIDE_CLASS);\r\n\t\t});\r\n\t}\r\n\r\n\t\t/***\r\n\t * Hide the parent dialog while child dialogs are open\r\n\t */\r\n\t\tprivate _hide(): void {\r\n\t\t\tthis._dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\t\t}\r\n\r\n\tprivate _configureClickOutside(s: Subject<boolean>, d: MatDialogRef<AvailableWaterChartComponent>): void {\r\n\t\t// custom click outside behavior\r\n\t\td.disableClose = true;\r\n\r\n\t\td.backdropClick().pipe(takeUntil(s)).subscribe(() => {\r\n\t\t\td.close();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _convertToGraphData(records: IAvailableWater[]): void {\r\n\r\n\t\tlet temp: {\r\n\t\t\tcalculated: Highcharts.AreaChartSeriesOptions,\r\n\t\t\train: IHighChartCustomSeries,\r\n\t\t\trainKs: IHighChartCustomSeries,\r\n\t\t\tet: IHighChartCustomSeries,\r\n\t\t\twaterApplied: IHighChartCustomSeries,\r\n\t\t\twaterAppliedKs: IHighChartCustomSeries,\r\n\t\t\trootDepth: IHighChartCustomSeries,\r\n\t\t\tkc: IHighChartCustomSeries,\r\n\t\t\tpotentialPAW: Highcharts.LineChartSeriesOptions,\r\n\t\t\trecommendation: IHighChartCustomSeries,\r\n\t\t\tETe: IHighChartCustomSeries,\r\n\t\t\tks:\tIHighChartCustomSeries,\r\n\t\t\tETo: IHighChartCustomSeries,\r\n\t\t\tkcMax: IHighChartCustomSeries,\r\n\t\t\tDr: IHighChartCustomSeries\r\n\t\t};\r\n\r\n\t\tthis._maxRainApplied = 0;\r\n\r\n\t\ttemp = {\r\n\t\t\tcalculated: {\r\n\t\t\t\tname: 'Estimated Soil Water Deficit',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\ttype: 'area',\r\n\t\t\t\tdata: [],\r\n\t\t\t\tcolor: this._soilWaterColor,\r\n\t\t\t\tmarker: {\r\n\t\t\t\t\tsymbol: 'circle',\r\n\t\t\t\t\t// 'circle', 'square','diamond', 'triangle' and 'triangle-down'.\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\trecommendation: {\r\n\t\t\t\tname: 'Recommendation',\r\n\t\t\t\ttype: 'line',\r\n\t\t\t\tvisible: false,\r\n\t\t\t\tdata: []\r\n\t\t\t},\r\n\t\t\train: {\r\n\t\t\t\tname: 'Rainfall',\r\n\t\t\t\ttype: 'column',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tcolor: 'rgb(67, 67, 72)',\r\n\t\t\t\tdata: [],\r\n\t\t\t},\r\n\t\t\trainKs: {\r\n\t\t\t\tname: 'Rainfall',\r\n\t\t\t\ttype: 'column',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tcolor: 'rgb(67, 67, 72)',\r\n\t\t\t\tdata: [],\r\n\t\t\t\tyAxis: 1\r\n\t\t\t},\r\n\t\t\tet: {\r\n\t\t\t\tname: 'ETc',\r\n\t\t\t\ttype: 'line',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueDecimals: 4\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tETe: {\r\n\t\t\t\tname: 'ETe',\r\n\t\t\t\ttype: 'line',\r\n\t\t\t\tvisible: false,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueDecimals: 4\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tETo: {\r\n\t\t\t\tname: 'ETo',\r\n\t\t\t\ttype: 'line',\r\n\t\t\t\tvisible: false,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueDecimals: 4\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tDr: {\r\n\t\t\t\tname: 'Allowable Depletion',\r\n\t\t\t\ttype: 'line',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueDecimals: 2\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\twaterApplied: {\r\n\t\t\t\tname: 'Applied Water',\r\n\t\t\t\ttype: 'column',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tcolor: 'rgb(144, 237, 125)',\r\n\t\t\t\tdata: []\r\n\t\t\t},\r\n\t\t\twaterAppliedKs: {\r\n\t\t\t\tname: 'Applied Water',\r\n\t\t\t\ttype: 'column',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tcolor: 'rgb(144, 237, 125)',\r\n\t\t\t\tdata: [],\r\n\t\t\t\tyAxis: 1\r\n\t\t\t},\r\n\t\t\trootDepth: {\r\n\t\t\t\tname: 'Root Depth',\r\n\t\t\t\ttype: 'line',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueSuffix: ' ft'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tkc: {\r\n\t\t\t\tname: 'Kc',\r\n\t\t\t\ttype: 'line',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueSuffix: ''\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tkcMax: {\r\n\t\t\t\tname: 'KcMax',\r\n\t\t\t\ttype: 'line',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueSuffix: ''\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tks: {\r\n\t\t\t\tname: 'Ks',\r\n\t\t\t\ttype: 'area',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\tyAxis: 0,\r\n\t\t\t\tcolor: this._soilWaterColor,\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueSuffix: ''\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tpotentialPAW: {\r\n\t\t\t\tname: 'PAW Deficit',\r\n\t\t\t\ttype: 'line',\r\n\t\t\t\tdashStyle: 'dash',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tcolor: 'rgb(247, 163, 92)',\r\n\t\t\t\tdata: [],\r\n\t\t\t\tmarker: {\r\n\t\t\t\t\tsymbol: 'triangle'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._chartData = [];\r\n\t\tthis._ETChartData = [];\r\n\t\tthis._KCChartData = [];\r\n\t\tthis._KsChartData = [];\r\n\t\tthis._rootDepthChartData = [];\r\n\r\n\t\tif (!records || records.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let record of records) {\r\n\t\t\tlet d: number;\r\n\r\n\t\t\td = DateUtility.DateToUTC(record.Date);\r\n\r\n\t\t\ttemp.calculated.data.push([d, record.Calculated - record.Potential]);\r\n\t\t\ttemp.rain.data.push([d, record.Rainfall]);\r\n\t\t\ttemp.rainKs.data.push([d, record.Rainfall]);\r\n\t\t\ttemp.et.data.push([d, record.ETc]);\r\n\t\t\ttemp.ETe.data.push([d, record.ETe]);\r\n\t\t\ttemp.ETo.data.push([d, record.ETo]);\r\n\t\t\ttemp.Dr.data.push([d, record.Dr]);\r\n\t\t\ttemp.potentialPAW.data.push([d, 0 - record.PotentialPAW]);\r\n\t\t\ttemp.kcMax.data.push([d, record.KcMax]);\r\n\t\t\ttemp.waterApplied.data.push([d, record.WaterApplied]);\r\n\t\t\ttemp.waterAppliedKs.data.push([d, record.WaterApplied]);\r\n\t\t\ttemp.rootDepth.data.push([d, record.RootDepth]);\r\n\t\t\ttemp.kc.data.push([d, record.Kc]);\r\n\t\t\ttemp.ks.data.push([d, (1 - record.Ks) * 100]);\r\n\r\n\t\t\tthis._maxRainApplied = Math.max(this._maxRainApplied, record.Rainfall, record.WaterApplied);\r\n\t\t}\r\n\r\n\t\tthis._ETChartData.push(temp.et);\r\n\t\tthis._ETChartData.push(temp.ETe);\r\n\t\tthis._ETChartData.push(temp.ETo);\r\n\r\n\t\tthis._KCChartData.push(temp.kc);\r\n\r\n\t\tif (this.isAdmin) {\r\n\r\n\t\t\tthis._KCChartData.push(temp.kcMax);\r\n\t\t}\r\n\r\n\t\tthis._KsChartData.push(temp.ks);\r\n\t\tthis._KsChartData.push(temp.rainKs);\r\n\t\tthis._KsChartData.push(temp.waterAppliedKs);\r\n\r\n\t\tthis._rootDepthChartData.push(temp.rootDepth);\r\n\r\n\t\tthis._chartData.push(temp.calculated);\r\n\t\tthis._chartData.push(temp.rain);\r\n\t\tthis._chartData.push(temp.waterApplied);\r\n\r\n\t\tif (this._isStressEnabled) {\r\n\t\t\tthis._chartData.push(temp.Dr);\r\n\t\t} else {\r\n\t\tthis._chartData.push(temp.potentialPAW);\r\n\t}\r\n\t}\r\n\r\n\tprivate _drawGraph(chart: ElementRef, data: IHighChartCustomSeries[], yAxis: Highcharts.AxisOptions[]): Highcharts.ChartObject {\r\n\r\n\t\tlet options: Highcharts.Options;\r\n\t\tlet myChart: Highcharts.ChartObject;\r\n\r\n\t\tif (!chart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tchart: {\r\n\t\t\t// type: 'line',\r\n\t\t\t\tzoomType: 'x'\r\n\t\t\t},\r\n\t\t\tplotOptions: {\r\n\t\t\t\tarea: {\r\n\t\t\t\t\tfillColor: 'rgba(2, 0, 255, 0.1)', // unfilled area\r\n\t\t\t\t\tnegativeFillColor: this._soilWaterColor, // Solid fill color for the soil water\r\n\t\t\t\t\tthreshold: null\r\n\t\t\t\t},\r\n\t\t\t\tseries: {\r\n\t\t\t\t\tmarker: {\r\n\t\t\t\t\t\tenabled: false,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tevents: {\r\n\t\t\t\t\t\t/** modify yaxis depending on active legend */\r\n\t\t\t\t\t\tlegendItemClick: (e: MouseEvent) => {\r\n\t\t\t\t\t\t\tlet name: string;\r\n\r\n\t\t\t\t\t\t\tname = (e.target as HTMLInputElement).name;\r\n\r\n\t\t\t\t\t\t\tif (name === 'Estimated Soil Water') {\r\n\t\t\t\t\t\t\t\tif (myChart.series[0].visible) {\r\n\t\t\t\t\t\t\t\t\tmyChart.yAxis[0].update({\r\n\t\t\t\t\t\t\t\t\t\tmax: null\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t} else if (!myChart.series[0].visible) {\r\n\t\t\t\t\t\t\t\t\tmyChart.yAxis[0].update({\r\n\t\t\t\t\t\t\t\t\t\tmax: this._maxSAW\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ttitle: {\r\n\t\t\t\ttext: null,\r\n\t\t\t},\r\n\t\t\tlegend: {\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: null,\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ttooltip: {\r\n\t\t\t\tbackgroundColor: '#FFF',\r\n\t\t\t\tborderColor: '#FFF',\r\n\t\t\t\tvalueDecimals: 2,\r\n\t\t\t\tvalueSuffix: ' in.',\r\n\t\t\t\t// formatter: tooltipFormatter\r\n\t\t\t},\r\n\t\t\txAxis: {\r\n\t\t\t\ttype: 'datetime',\r\n\t\t\t\tgridLineWidth: 1,\r\n\t\t\t\tplotLines: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcolor: 'red',\r\n\t\t\t\t\t\tdashStyle: 'longdashdot',\r\n\t\t\t\t\t\tvalue: this._planting.WetDate.getTime(),\r\n\t\t\t\t\t\twidth: 2,\r\n\t\t\t\t\t\tzIndex: 5,\r\n\t\t\t\t\t\tlabel: {\r\n\t\t\t\t\t\t\tverticalAlign: 'middle',\r\n\t\t\t\t\t\t\ttext: this._planting.WetDate.toDateString(),\r\n\t\t\t\t\t\t\tstyle: {\r\n\t\t\t\t\t\t\t\tfontWeight: 'bold',\r\n\t\t\t\t\t\t\t\tfontSize: '12px'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\tyAxis: yAxis,\r\n\t\t\tseries: data,\r\n\t\t\texporting: highChartExportOptions\r\n\t\t}\r\n\r\n\t\tmyChart = Highcharts.chart(chart.nativeElement, options);\r\n\t\treturn myChart;\r\n\t}\r\n\r\n\tprivate _findMax(records: IAvailableWater[]): number {\r\n\t\tlet result = 0;\r\n\r\n\r\n\t\tif (!records || records.length === 0) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\treturn records[0].Potential;\r\n\t}\r\n\r\n\t/**\r\n\t * Use the earliest record date as the default start date, to account for\r\n\t * various vegetable crop types\r\n\t * @param records\r\n\t * @returns\r\n\t */\r\n\tprivate _getDefaultStartDate(records: IAvailableWater[]): Date {\r\n\t\tif (!records || records.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn records[0].Date\r\n\t}\r\n\r\n\t/**\r\n\t * For all crops, the user is allowed to choose a custom start date before\r\n\t * wet date\r\n\t * @param wetDate\r\n\t * @returns\r\n\t */\r\n\tprivate _getMinStartDate(wetDate: Date): Date {\r\n\t\tlet result: Date;\r\n\r\n\t\tresult = moment(wetDate).subtract(2, 'months').toDate();\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _initializeForm(): void {\r\n\r\n\t\tthis.minDate = this._getMinStartDate(this._planting.WetDate);\r\n\t\tthis.maxDate = moment(this._planting.WetDate).add(-1, 'days').toDate();\r\n\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tStartDate: [null,\r\n\t\t\t\t[Validators.required, FormValidation.minDateValidator(this.minDate, true),\r\n\t\t\t\tFormValidation.maxDateValidator(this.maxDate, true)]],\r\n\t\t\tInitialSaturation: [null, [Validators.required, Validators.min(0), Validators.max(100)]]\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _loadChartData(response: IAvailableWater[]): void {\r\n\t\tthis._maxSAW = this._findMax(response);\r\n\t\tthis._convertToGraphData(response);\r\n\r\n\t\tthis._charts = {\r\n\t\t\tsoilWater: this._drawGraph(this._chartContainer, this._chartData, [{\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: 'Deficit Inches'\r\n\t\t\t\t},\r\n\t\t\t\tstartOnTick: false,\r\n\t\t\t\tendOnTick: false\r\n\t\t\t}]),\r\n\t\t\tet: this._drawGraph(this._ETChartContainer, this._ETChartData, [\r\n\t\t\t\t{\r\n\t\t\t\t\ttitle: {\r\n\t\t\t\t\t\ttext: 'Inches'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tstartOnTick: false,\r\n\t\t\t\t\tendOnTick: false\r\n\t\t\t\t}\r\n\t\t\t]),\r\n\t\t\tkc: this._drawGraph(this._KCChartContainer, this._KCChartData, [\r\n\t\t\t\t{\r\n\t\t\t\t\ttitle: {\r\n\t\t\t\t\t\ttext: 'Kc',\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t]),\r\n\t\t\tks: this._drawGraph(this._KSChartContainer, this._KsChartData, [\r\n\t\t\t\t{\r\n\t\t\t\t\ttitle: {\r\n\t\t\t\t\t\ttext: 'Ks (%)',\r\n\t\t\t\t\t},\r\n\t\t\t\t\topposite: false,\r\n\t\t\t\t\tmax: 100,\r\n\t\t\t\t\tmin: 0\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\ttitle: {\r\n\t\t\t\t\t\ttext: 'Inches'\r\n\t\t\t\t\t},\r\n\t\t\t\t\topposite: true,\r\n\t\t\t\t\tmax: this._maxRainApplied,\r\n\t\t\t\t\tmin: 0\r\n\t\t\t\t}\r\n\t\t\t]),\r\n\t\t\trootDepth: this._drawGraph(this._rootDepthChartContainer, this._rootDepthChartData, [\r\n\t\t\t\t{\r\n\t\t\t\t\ttitle: {\r\n\t\t\t\t\t\ttext: 'Ft'\r\n\t\t\t\t\t},\r\n\t\t\t\t\treversed: true,\r\n\t\t\t\t},\r\n\t\t\t])\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\t\r\n\t<button type=\"button\"\r\n\t\tclass=\"bk-dialog__close\"\r\n\t\t(click)=\"close()\">\r\n\t\t&times;\r\n\t</button>\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\tConfiguring Initial Saturation\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<p>\r\n\t\t\tCropManage calculates soil water balance for a planting two months before the planting start date using\r\n\t\t\tweather data with an initial available water percentage at 75%. You can improve the accuracy of the results by providing\r\n\t\t\tyour own soil moisture information measured before the planting start date.\r\n\t\t</p>\r\n\t\t<p>The soil moisture information you enter can be associated with rainfall, irrigation, or soil moisture measurements.\r\n\t\t\t\r\n\t\t</p>\r\n\t\t<ul>\r\n\t\t\t<li>\r\n\t\t\t\t<strong>Soil Moisture Measurement</strong>\r\n\t\t\t\t<br>\r\n\t\t\t\tIf you taken a soil moisture measurement, enter \r\n\t\t\t\tthe date you took the measurement, and the percentage saturation.\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<strong>Rainfall</strong>\r\n\t\t\t\t<br>\r\n\t\t\t\tIf it rained prior to the planting start date, enter the date it rained, and\r\n\t\t\t\tan estimate of percent saturation.\r\n\t\t\t</li>\r\n\t\t\t<li><strong>Irrigation</strong>\r\n\t\t\t\t<br>\r\n\t\t\t\tIf you irrigated, enter the irrigation date. If you irrigated to saturation,\r\n\t\t\t\tfor example, set the percent saturation to 100%.</li>\r\n\t\t</ul>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button (click)=\"close()\" mat-button\r\n\t\t\tclass=\"bk-button--medium bk-dialog__button--primary\">\r\n\t\t\t{{ 'Close' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { SharedUpdateService } from '../shared/dialogs/update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'custom-saturation-help',\r\n\ttemplateUrl: 'custom-saturation-help.html',\r\n\tstyleUrls: ['custom-saturation-help.scss']\r\n})\r\n\r\nexport class CustomSaturationHelp implements OnInit, OnDestroy {\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialogRef: MatDialogRef<CustomSaturationHelp>,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._configureClickOutside(this._subscriptions$, this._dialogRef);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis._sharedUpdateService.cancel();\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tprivate _configureClickOutside(s: Subject<boolean>, d: MatDialogRef<CustomSaturationHelp>): void {\r\n\t\t// custom click outside behavior\r\n\t\td.disableClose = true;\r\n\r\n\t\td.backdropClick().pipe(takeUntil(s)).subscribe(() => {\r\n\t\t\td.close();\r\n\t\t});\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n    <button type=\"button\" class=\"bk-dialog__close\" (click)=\"close()\">\r\n        &times;\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>\r\n        {{ plantingName }} {{'Canopy Curve' | translate }}\r\n    </h4>\r\n\r\n    <div mat-dialog-content>\r\n            <div class=\"bk-dialog__section\">\r\n                <div class=\"bk-dialog__canopy-graph--container\">\r\n                    <div *ngIf=\"!isLoaded\"\r\n                        class=\"bk-loader__container\">\r\n                        <div class=\"bk-loader\"></div>\r\n                    </div>\r\n                    <div class=\"bk-chart\" #highchartsContainer></div>\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"bk-dialog_section-subtitle\">\r\n                {{'CropManage Canopy Parameters' | translate }}\r\n                <a class=\"bk-dialog__link bk-dialog__link--canopy-reset\"\r\n                    *ngIf=\"canopy.form\"\r\n                    href=\"javascript:void(0);\"\r\n                    (click)=\"reset()\">\r\n                    {{'Reset to Default Parameters' | translate }}\r\n                </a>\r\n            </div>\r\n\r\n            <form [formGroup]=\"canopy.form\"\r\n                *ngIf=\"canopy.form\">\r\n                <div class=\"bk-dialog__row bk-dialog__row--canopy\">\r\n\r\n                    <canopy-slider\r\n                        [controlName]=\"'CanopyGMax'\"\r\n                        [label]=\"'Max. Canopy'\"\r\n                        [formGroup]=\"canopy.form\"\r\n                        [min]=\"0\"\r\n                        [max]=\"100\"\r\n                        [decimals]=\"1\"\r\n                        [step]=\"1\"\r\n                        [defaultValue]=\"defaultSetting.CanopyGMax\"\r\n                        [tooltipText]=\"'Canopy Curve CanopyGMax tooltip text'\"\r\n                        (reload)=\"reloadData()\">\r\n                    </canopy-slider>\r\n\r\n                    <canopy-slider *ngIf=\"commodityTypeId !== COMMODITY_TYPES.ALFALFA\"\r\n                        [controlName]=\"'MaxFraction'\"\r\n                        [label]=\"'Max. Fraction'\"\r\n                        [formGroup]=\"canopy.form\"\r\n                        [min]=\"0.01\"\r\n                        [max]=\"1\"\r\n                        [decimals]=\"2\"\r\n                        [step]=\"0.01\"\r\n                        [defaultValue]=\"defaultSetting.MaxFraction\"\r\n                        [tooltipText]=\"'Canopy Curve MaxFraction tooltip text'\"\r\n                        (reload)=\"reloadData()\">\r\n                    </canopy-slider>\r\n\r\n                    <canopy-slider *ngIf=\"commodityTypeId === COMMODITY_TYPES.ALFALFA\"\r\n                        [controlName]=\"'CanopyMin'\"\r\n                        [label]=\"'Minimum Canopy'\"\r\n                        [formGroup]=\"canopy.form\"\r\n                        [min]=\"0\"\r\n                        [max]=\"100\"\r\n                        [decimals]=\"1\"\r\n                        [step]=\"1\"\r\n                        [defaultValue]=\"defaultSetting.CanopyMin\"\r\n                        [tooltipText]=\"'Canopy Curve CanopyMin tooltip text'\"\r\n                        (reload)=\"reloadData()\">\r\n                    </canopy-slider>\r\n\r\n                    <canopy-slider\r\n                        [controlName]=\"'CanopyA'\"\r\n                        [label]=\"'Canopy A'\"\r\n                        [formGroup]=\"canopy.form\"\r\n                        [min]=\"1.5\"\r\n                        [max]=\"10\"\r\n                        [decimals]=\"2\"\r\n                        [step]=\"0.01\"\r\n                        [defaultValue]=\"defaultSetting.CanopyA\"\r\n                        [tooltipText]=\"'Intercept factor for canopy curve'\"\r\n                        (reload)=\"reloadData()\">\r\n                    </canopy-slider>\r\n\r\n                    <canopy-slider\r\n                        [controlName]=\"'CanopyB'\"\r\n                        [label]=\"'Canopy B'\"\r\n                        [formGroup]=\"canopy.form\"\r\n                        [min]=\"-20\"\r\n                        [max]=\"-4\"\r\n                        [decimals]=\"2\"\r\n                        [step]=\"0.01\"\r\n                        [defaultValue]=\"defaultSetting.CanopyB\"\r\n                        [tooltipText]=\"'Slope factor for canopy curve'\"\r\n                        (reload)=\"reloadData()\">\r\n                    </canopy-slider>\r\n\r\n                    <canopy-slider *ngIf=\"isRequiredField('CanopyE')\"\r\n                        [controlName]=\"'CanopyE'\"\r\n                        [label]=\"'Canopy E'\"\r\n                        [formGroup]=\"canopy.form\"\r\n                        [min]=\"-2.5\"\r\n                        [max]=\"0.2\"\r\n                        [decimals]=\"2\"\r\n                        [step]=\"0.01\"\r\n                        [defaultValue]=\"defaultSetting.CanopyE\"\r\n                        [tooltipText]=\"'Canopy Curve CanopyE tooltip text'\"\r\n                        (reload)=\"reloadData()\">\r\n                    </canopy-slider>\r\n\r\n                    <canopy-slider *ngIf=\"isRequiredField('CanopyF')\"\r\n                        [controlName]=\"'CanopyF'\"\r\n                        [label]=\"'Canopy F'\"\r\n                        [formGroup]=\"canopy.form\"\r\n                        [min]=\"0.4\"\r\n                        [max]=\"3\"\r\n                        [decimals]=\"2\"\r\n                        [step]=\"0.01\"\r\n                        [defaultValue]=\"defaultSetting.CanopyF\"\r\n                        [tooltipText]=\"'Canopy Curve CanopyF tooltip text'\"\r\n                        (reload)=\"reloadData()\">\r\n                    </canopy-slider>\r\n                </div>\r\n            </form>\r\n\r\n            <div class=\"bk-dialog__canopy-warning\" *ngIf=\"!hasCoordinates\">\r\n                <div class=\"bk-dialog__canopy-warning--head\">\r\n                    {{'Cannot display NASA Sims information. Planting Coordinates are missing' | translate}}\r\n                </div>\r\n                <div class=\"bk-dialog__canopy-warning--paragraph\">\r\n                    {{'Add Coordinates in the Planting Settings to fix the problem.' | translate}}\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"bk-dialog__section\">\r\n                <canopy-table [plantingId]=\"plantingId\" [canopy]=\"canopy\" (onDataUpdated)=\"dataUpdated()\"></canopy-table>\r\n            </div>\r\n\r\n            <a class=\"bk-dialog__link bk-dialog__link--canopy-sims\" href=\"https://will-carrara.github.io/flask-sims/docs/equations.pdf\"\r\n                target=\"_blank\">\r\n                {{'Learn more about NASA SIMS' | translate }}\r\n            </a>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n        <button mat-button class=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n            (click)=\"close()\">\r\n            {{ (canopy.dataHasChanged() ? 'Cancel' : 'Close') | translate }}\r\n        </button>\r\n        <button mat-button class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            [disabled]=\"!canopy.form || canopy.form.invalid || !canopy.dataHasChanged()\"\r\n            (click)=\"save()\">\r\n            {{ 'Save' | translate }}\r\n        </button>\r\n    </div>\r\n</div>\r\n\r\n","import { Component, Inject, OnInit, ViewChild, OnDestroy, ElementRef, ViewChildren, QueryList } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\nimport { Canopy } from './canopy';\r\nimport { CanopyTableComponent } from './canopy-table';\r\n\r\nimport { CanopyService } from './canopy.service';\r\nimport { KeyboardUtility } from '../../classes/keyboardUtility';\r\n\r\nimport { ICanopyData, ISimsGraphDataModel, ISimsGraphDataRecord } from './interfaces';\r\nimport { Subject } from 'rxjs';\r\nimport { IHighChartCustomSeries } from '../available-water-chart/interfaces';\r\nimport highChartExportOptions from '../shared/highchartsExportOptions';\r\nimport * as Highcharts from 'highcharts';\r\nimport { PlantingService } from '../planting-settings/service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { eCommodityTypes, eNotificationTypes } from '../../interfaces/constants';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { eCommodityTypeCalculators } from '../../models/commodity-type/interfaces';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\n\r\n/**\r\n * Refactoring Log:\r\n * (8/16/2019) cleaned up private/public methods naming and ordering\r\n */\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'canopy-dialog',\r\n\ttemplateUrl: 'canopy-dialog.html',\r\n\tstyleUrls: ['canopy-dialog.scss']\r\n})\r\n\r\nexport class CanopyDialog implements OnInit, OnDestroy {\r\n\t@ViewChildren('highchartsContainer') private _highchartsContainers: QueryList<ElementRef>;\r\n\tprivate _highchartsContainer: ElementRef;\r\n\tpublic canopy: Canopy;\r\n\tprivate _canopyLatestInput: Canopy; // copy of canopy?\r\n\tprivate _timeoutId: number;\r\n\tprivate _latestInputInQueue: boolean;\r\n\tpublic hasCoordinates = true;\r\n\tpublic plantingId: number;\r\n\tpublic plantingName: string;\r\n\tpublic isLoaded = false;\r\n\tprivate _isProcessingCanopyData = false;\r\n\tpublic isSaving: boolean;\r\n\tprivate _chartData: Highcharts.IndividualSeriesOptions[];\r\n\tpublic defaultSetting: ICanopyData;\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\tpublic CALCULATORS = eCommodityTypeCalculators;\r\n\tprivate _highChartObject: Highcharts.ChartObject;\r\n\r\n\t@ViewChild(CanopyTableComponent, { static: false }) public canopyTable: CanopyTableComponent; // child component so must be public\r\n\tpublic commodityTypeCalculator: string;\r\n\tpublic commodityTypeId: number;\r\n\r\n\tprivate _subscriptions$: Subject<boolean> = new Subject();\r\n\r\n\tconstructor(\r\n\t\tprivate _dialogRef: MatDialogRef<CanopyDialog>,\r\n\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: {\r\n\t\t\tplantingId: number,\r\n\t\t\tplantingName: string,\r\n\t\t\tcommodityTypeId: number,\r\n\t\t\tcommodityTypeCalculator: string\r\n\t\t},\r\n\r\n\t\tprivate _canopyService: CanopyService,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _plantingService: PlantingService,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _updateService: UpdateService) {\r\n\r\n\t\tthis.plantingId = this._data.plantingId;\r\n\t\tthis.plantingName = this._data.plantingName;\r\n\r\n\t\tthis.commodityTypeId = this._data.commodityTypeId;\r\n\t\tthis.commodityTypeCalculator = this._data.commodityTypeCalculator;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\r\n\t\tthis.canopy = new Canopy(this.commodityTypeId, this.commodityTypeCalculator,\r\n\t\t\tthis._fb);\r\n\r\n\t\tthis._canopyLatestInput = new Canopy(this.commodityTypeId, this.commodityTypeCalculator,\r\n\t\t\tthis._fb); // user input cache for animated graph output\r\n\r\n\t\tthis._isProcessingCanopyData = false;\r\n\t\tthis._latestInputInQueue = false;\r\n\r\n\t\tthis.isSaving = false;\r\n\r\n\t\tthis._canopyService.simsData(this.plantingId)\r\n\t\t.then((data) => {\r\n\t\t\tif (!data) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.defaultSetting = {\r\n\t\t\t\tPlantingId: null,\r\n\t\t\t\tranchGuid: null,\r\n\t\t\t\tCanopyGMax: data.CanopyParamsDefault.CanopyGMax,\r\n\t\t\t\tMaxFraction: data.CanopyParamsDefault.MaxFraction,\r\n\t\t\t\tCanopyA: data.CanopyParamsDefault.CanopyA,\r\n\t\t\t\tCanopyB: data.CanopyParamsDefault.CanopyB,\r\n\t\t\t\tCanopyE: data.CanopyParamsDefault.CanopyE,\r\n\t\t\t\tCanopyF: data.CanopyParamsDefault.CanopyF,\r\n\t\t\t\tCanopyMin: data.CanopyParamsDefault.CanopyMin,\r\n\t\t\t\tHasCoordinates: null\r\n\t\t\t};\r\n\r\n\t\t\tthis.canopy.setData(data);\r\n\r\n\t\t\tif (this.canopy.isInvalid()) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.canopyTable.loadTableData();\r\n\t\t\tthis._loadGraph(this.canopy);\r\n\t\t\tthis.hasCoordinates = data.HasCoordinates;\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\t/**\r\n\t * This triggers when an entry is either added or removed from\r\n\t * the canopy table\r\n\t */\r\n\tpublic dataUpdated(): void {\r\n\t\tif (this.canopy.isInvalid()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._loadGraph(this.canopy);\r\n\t}\r\n\r\n\t/**\r\n\t * Method called by this component's template to only allow numbers\r\n\t * @param e\r\n\t */\r\n\tpublic preventNonNumbers(e: KeyboardEvent): void {\r\n\t\tKeyboardUtility.preventNonNumbers(e, true);\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param canopy if not specified, use this.canopy. This parameter is added to cache recent user inputs\r\n\t * @returns void\r\n\t */\r\n\tpublic reloadData(canopy: Canopy = null): void {\r\n\t\tconst DELAY = 300; // ms debounce delay\r\n\r\n\t\tif (!canopy) {\r\n\t\t\tcanopy = this.canopy;\r\n\t\t}\r\n\r\n\t\tif (canopy.isInvalid()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this._isProcessingCanopyData) {\r\n\t\t\tlet canopyData: ICanopyData;\r\n\r\n\t\t\tcanopyData = canopy.form.value;\r\n\r\n\t\t\tthis._canopyLatestInput.setData({\r\n\t\t\t\tPlantingId: this.canopy.PlantingId,\r\n\t\t\t\tRanchGuid: null,\r\n\t\t\t\tHasCoordinates: null,\r\n\t\t\t\tCanopyParams: {\r\n\t\t\t\t\tCanopyA: canopyData.CanopyA,\r\n\t\t\t\t\tCanopyB: canopyData.CanopyB,\r\n\t\t\t\t\tCanopyE: canopyData.CanopyE,\r\n\t\t\t\t\tCanopyF: canopyData.CanopyF,\r\n\t\t\t\t\tCanopyGMax: canopyData.CanopyGMax,\r\n\t\t\t\t\tCanopyMin: canopyData.CanopyMin,\r\n\t\t\t\t\tMaxFraction: canopyData.MaxFraction\r\n\t\t\t\t},\r\n\t\t\t\tCanopyParamsDefault: null\r\n\t\t\t});\r\n\r\n\t\t\tthis._latestInputInQueue = true;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._isProcessingCanopyData = true;\r\n\r\n\t\tif (this._timeoutId) {\r\n\t\t\tclearTimeout(this._timeoutId);\r\n\t\t}\r\n\r\n\t\tthis._timeoutId = window.setTimeout(() => {\r\n\t\t\tthis._reloadGraph(canopy);\r\n\t\t\tthis._isProcessingCanopyData = false;\r\n\r\n\t\t\tif (this._latestInputInQueue) {\r\n\t\t\t\tthis.reloadData(this._canopyLatestInput);\r\n\t\t\t\tthis._latestInputInQueue = false;\r\n\t\t\t}\r\n\t\t}, DELAY);\r\n\t}\r\n\r\n\tpublic isRequiredField(field: string) {\r\n\t\tlet control: AbstractControl;\r\n\r\n\t\tcontrol = this.canopy.form.get(field);\r\n\t\tif (!control.validator) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst validator = control.validator({} as AbstractControl);\r\n\t\treturn (validator && validator.required);\r\n\t}\r\n\r\n\tpublic reset(): void {\r\n\t\tthis.canopy.resetForm(this.defaultSetting);\r\n\t\tthis.reloadData();\r\n\t}\r\n\r\n\tpublic save(): void {\r\n\t\tlet data: ICanopyData;\r\n\r\n\t\tdata = this.canopy.getModelForPost();\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._canopyService.update(data, this.plantingId)\r\n\t\t.then(() => {\r\n\t\t\tthis.isSaving = false;\r\n\t\t\tthis._dialogRef.close();\r\n\t\t\tthis._recalculatePlanting();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _recalculatePlanting(): void {\r\n\t\tthis._plantingService.recalculatePlanting(this.plantingId, true).then((res) => {\r\n\t\t\tif (!res || !res.Events) {\r\n\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\tmessage: 'The planting recalculation failed'\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\t\tmessage: 'The planting was successfully recalculated'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._ranchService.plantings.replacePlantingEvents(res.Events, this.plantingId);\r\n\t\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date()); // update views if needed\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _convertToGraphData(records: ISimsGraphDataModel): void {\r\n\r\n\t\tlet temp: {\r\n\t\t\tcropManage: Highcharts.IndividualSeriesOptions,\r\n\t\t\tSIMS: Highcharts.IndividualSeriesOptions,\r\n\t\t\tuser: Highcharts.IndividualSeriesOptions\r\n\t\t};\r\n\r\n\t\tthis._chartData = [];\r\n\r\n\t\tif (!records) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttemp = {\r\n\t\t\tcropManage: {\r\n\t\t\t\tname: 'CropManage Canopy',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: this._formatCanopyData(records.CropManageData),\r\n\t\t\t\ttype: 'line'\r\n\t\t\t},\r\n\t\t\tSIMS: {\r\n\t\t\t\tname: 'SIMS Canopy',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: this._formatCanopyData(records.SIMSCanopyData),\r\n\t\t\t\ttype: 'scatter'\r\n\t\t\t},\r\n\t\t\tuser: {\r\n\t\t\t\tname: 'User Data',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: this._formatCanopyData(records.UserCanopyData),\r\n\t\t\t\ttype: 'scatter'\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._chartData.push(temp.cropManage);\r\n\t\tthis._chartData.push(temp.SIMS);\r\n\t\tthis._chartData.push(temp.user);\r\n\t}\r\n\r\n\tprivate _drawGraph(chart: ElementRef, data: IHighChartCustomSeries[]): void {\r\n\r\n\t\tlet options: Highcharts.Options;\r\n\r\n\t\tif (!chart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tchart: {\r\n\t\t\t// type: 'line',\r\n\t\t\t},\r\n\t\t\ttitle: {\r\n\t\t\t\ttext: null,\r\n\t\t\t},\r\n\t\t\tlegend: {\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: null,\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ttooltip: {\r\n\t\t\t\tbackgroundColor: '#FFF',\r\n\t\t\t\tborderColor: '#FFF',\r\n\t\t\t\tvalueDecimals: 2,\r\n\t\t\t\tvalueSuffix: ' %',\r\n\t\t\t\tpointFormat: '{point.y}',\r\n\t\t\t\theaderFormat: '<span style=\"font-size: 10px\">{point.x:%b %d, %Y}</span><br>'\r\n\t\t\t},\r\n\t\t\txAxis: {\r\n\t\t\t\ttype: 'datetime',\r\n\t\t\t\tgridLineWidth: 1\r\n\t\t\t},\r\n\t\t\tyAxis: [\r\n\t\t\t\t{\r\n\t\t\t\t\ttitle: {\r\n\t\t\t\t\t\ttext: '%'\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t],\r\n\t\t\tseries: data,\r\n\t\t\texporting: highChartExportOptions\r\n\t\t}\r\n\r\n\t\tthis._highChartObject = Highcharts.chart(chart.nativeElement, options);\r\n\t}\r\n\r\n\tprivate _formatCanopyData(records: ISimsGraphDataRecord[]): [number, number] [] {\r\n\t\tlet results: [number, number][];\r\n\r\n\t\tresults = records.map(o => { return [DateUtility.DateToUTC(o.Date), o.Percentage];\r\n\t\t});\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tprivate _reloadGraph(canopy: Canopy) {\r\n\t\tthis._canopyService.canopyData(canopy).then((response) => {\r\n\t\t\tlet series = this._formatCanopyData(response);\r\n\r\n\t\t\tthis._highChartObject.series[0].update({\r\n\t\t\t\tdata: series\r\n\t\t\t\t}, false);\r\n\r\n\t\t\tthis._highChartObject.redraw();\r\n\t\t\tthis.canopyTable.reloadTableCanopyData(response);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate async _loadGraph(canopy: Canopy): Promise<void> {\r\n\r\n\t\tconst response = await this._canopyService.simsGraphData(canopy);\r\n\r\n\t\tthis._convertToGraphData(response);\r\n\t\t// we're having to do this because of the ng ifs that are cluttering\r\n\t\t// this template\r\n\t\tthis._highchartsContainer = this._highchartsContainers.first;\r\n\t\tthis._drawGraph(this._highchartsContainer, this._chartData);\r\n\r\n\t\tthis.isLoaded = true;\r\n\t}\r\n}\r\n","<form [formGroup]=\"formGroup\">\r\n\t<div class=\"bk-dialog__row-item\">\r\n\t\t<label class=\"bk-dialog__label bk-dialog__tooltip-element\"\r\n\t\t\tmatTooltip=\"{{tooltipText | translate}}\"\r\n\t\t\t\t[matTooltipPosition]=\"'above'\" \r\n\t\t\t\t[matTooltipClass]=\"'bk-dialog__tooltip'\">\r\n\t\t\t{{ label | translate }}\r\n\t\t\t<i class=\"bk-dialog__info-icon fa fa-info-circle\" ></i>\r\n\t\t</label>\r\n\t\t<div class=\"bk-dialog__field--container\">\r\n\t\t\t<input class=\"bk-dialog__field bk-modal__input--short\"\r\n\t\t\t\ttype=\"number\"\r\n\t\t\t\tformControlName=\"{{ controlName }}\"\r\n\t\t\t\t(blur)=\"reloadData()\"/>\r\n\t\t\t<div class=\"bk-dialog__field-button\">\r\n\t\t\t\t<slider-button [sliderValue]=\"formGroup.get(controlName).value\"\r\n\t\t\t\t\t[sliderMin]=\"min\"\r\n\t\t\t\t\t[sliderMax]=\"max\"\r\n\t\t\t\t\t[sliderDecimals]=\"decimals\"\r\n\t\t\t\t\t[sliderDisabled]=\"false\"\r\n\t\t\t\t\t[step]=\"step\" \r\n\r\n\t\t\t\t\t(sliderValueChanged)=\"formGroup.get(controlName).setValue($event);\r\n\t\t\t\t\t\tformGroup.get(controlName).markAsTouched(); reloadData();\">\r\n\t\t\t\t</slider-button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"bk-dialog__field--old-value\">\r\n\t\t\t{{defaultValue}}\r\n\t\t</div>\r\n\t\t<div *ngIf=\"formGroup.get(controlName).invalid\">\r\n\t\t\t<div *ngIf=\"formGroup.get(controlName).errors.required\"\r\n\t\t\t\tclass=\"bk-invalid-text\">\r\n\r\n\t\t\t\t{{'Field cannot be empty' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<div *ngIf=\"formGroup.get(controlName).errors.max\"\r\n\t\t\t\tclass=\"bk-invalid-text\">\r\n\r\n\t\t\t\t{{'Value cannot be more than' | translate }} {{max}}\r\n\t\t\t</div>\r\n\t\t\t<div *ngIf=\"formGroup.get(controlName).errors.min\"\r\n\t\t\t\tclass=\"bk-invalid-text\">\r\n\r\n\t\t\t\t{{'Value cannot be less than' | translate }} {{min}}\r\n\t\t\t</div> \r\n\t\t</div>\r\n\t</div>\r\n</form>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { CanopyCurveFields } from './canopy';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'canopy-slider',\r\n\ttemplateUrl: 'canopy-slider.html'\r\n})\r\n\r\nexport class CanopySliderComponent implements OnInit {\r\n\r\n\t@Input()\r\n\tpublic controlName: string;\r\n\r\n\t@Input()\r\n\tpublic formGroup: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic label: string;\r\n\r\n\t@Input()\r\n\tpublic min: number;\r\n\r\n\t@Input()\r\n\tpublic max: number;\r\n\r\n\t@Input()\r\n\tpublic decimals: number;\r\n\r\n\t@Input()\r\n\tpublic step: number;\r\n\r\n\t@Input()\r\n\tpublic defaultValue: number;\r\n\r\n\t@Input()\r\n\tpublic tooltipText: string;\r\n\r\n\t@Output()\r\n\tpublic reload: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n\tpublic get f(): { [key in CanopyCurveFields]: AbstractControl } {\r\n\t\treturn this.formGroup.controls as { [key in CanopyCurveFields]: AbstractControl };\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n\r\n\tpublic reloadData(): void {\r\n\t\tthis.reload.emit();\r\n\t}\r\n}\r\n","<div class=\"bk-dialog__table\">\r\n    <div class=\"bk-dialog__table-row bk-dialog__canopy-table--head\">\r\n        <div class=\"bk-dialog__table-title\">\r\n            {{ 'Canopy Data' | translate }}\r\n        </div>\r\n        <div class=\"bk-dialog__canopy-table--add-row\" *ngIf=\"!addingEntry && !removingEntry\" (click)=\"showAddEntryForm()\">\r\n            <i class=\"fa fa-plus bk-dialog__canopy-table--add-icon\"></i> {{ 'Add Custom Canopy Data' | translate }}\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"bk-dialog__canopy-table--form-add\" #addEntryForm>\r\n        <div class=\"bk-dialog__canopy-table--form\">\r\n            <div class=\"bk-dialog__canopy-table--form-item\">\r\n                <label class=\"bk-dialog__label\">\r\n\t\t\t\t\t{{'Canopy Measure Date' | translate }}\r\n\t\t\t\t</label>\r\n\r\n                <my-date-picker [options]=\"datePickerOptions\" (dateChanged)=\"onDateChanged($event)\" \r\n\t\t\t\t\t[(ngModel)]=\"newEntryDate\"></my-date-picker>\r\n            </div>\r\n\r\n            <div class=\"bk-dialog__canopy-table--form-item\">\r\n                <label class=\"bk-dialog__label\">{{'Measured Canopy Cover' | translate }}</label>\r\n                <input class=\"bk-dialog__field bk-modal__input--short\" type=\"number\"\r\n\t\t\t\t\t   [(ngModel)]=\"newEntry.CanopyCover\" (keyup)=\"validateNewEntry('canopyCover')\"\r\n                       [ngClass]=\"{'bk-input-invalid' : !formValid.canopyCover }\" />\r\n                <div class=\"bk-dialog__field-unit\">%</div>\r\n            </div>\r\n\r\n            <div class=\"bk-dialog__canopy-table--form-buttons\">\r\n                <button class=\"bk-button bk-button--medium bk-button--text-only\" (click)=\"cancelAddingEntry()\">{{ 'Cancel' | translate }}</button>\r\n                <button class=\"bk-button bk-button--medium\" [disabled]=\"isNewEntryInvalid()\" (click)=\"save()\">{{ 'Add' | translate }}</button>\r\n            </div>\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"bk-dialog__table-row\">\r\n        <div class=\"bk-dialog__table-col bk-dialog__canopy-table--col-1 bk-dialog__canopy-table--col-1-head\">\r\n            {{ 'Date' | translate }}\r\n        </div>\r\n        <div class=\"bk-dialog__table-col bk-dialog__canopy-table--col-2 bk-dialog__canopy-table--col-2-head\">\r\n            {{ 'Measured Canopy' | translate }}\r\n        </div>\r\n        <div class=\"bk-dialog__table-col bk-dialog__canopy-table--col-3 bk-dialog__canopy-table--col-3-head\">\r\n            {{ 'CropManage Model Canopy' | translate }}\r\n        </div>\r\n    </div>\r\n\r\n    <ng-container class=\"bk-dialog__table-row\"\r\n        *ngFor=\"let tableRow of tableData.Data\">\r\n\r\n        <div class=\"bk-dialog__canopy-table--form-remove\"\r\n            [@openClose]=\"(isOpen && entryToRemove.Date === tableRow.Date) ? 'open' : 'closed'\">\r\n            <div [@rowChildrenAnim]=\"(isOpen && entryToRemove.Date === tableRow.Date) ? 'open' : 'closed'\"\r\n                 class=\"bk-dialog__canopy-table--form\">\r\n                 <div class=\"bk-dialog__canopy_table--flex\">\r\n                    <div class=\"bk-dialog__canopy-table--remove-text\">\r\n                        {{ 'Remove' | translate }} {{ tableRow.Date }} {{ 'measurement' | translate }}?\r\n                    </div>\r\n\r\n                    <div class=\"bk-dialog__canopy-table--remove-buttons\">\r\n                        <button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n                            (click)=\"cancelRemovingEntry()\">\r\n                            {{'Cancel' | translate }}\r\n                        </button>\r\n                        <button class=\"bk-button bk-button--medium\"\r\n                            (click)=\"remove()\">\r\n                            {{ 'Remove' | translate }}\r\n                        </button>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"bk-dialog__table-row\">\r\n            <div class=\"bk-dialog__table-col bk-dialog__canopy-table--col-1\">\r\n                <i class=\"fa fa-times-circle bk-dialog__canopy-table--remove-icon\" (click)=\"openRemoveEntrySection(tableRow)\"></i> \r\n                {{ tableRow.Date | date:'shortDate' }}\r\n            </div>\r\n            <div class=\"bk-dialog__table-col bk-dialog__canopy-table--col-2\">\r\n                {{ tableRow.MeasuredCanopy | number: '1.0-2'}}% {{ tableRow.Source }}\r\n            </div>\r\n            <div class=\"bk-dialog__table-col bk-dialog__canopy-table--col-3\">\r\n                {{ tableRow.CropManageCanopy | number: '1.0-2'}}%\r\n            </div>\r\n        </div>\r\n    </ng-container>\r\n\r\n    <div class=\"bk-dialog__table-row\">\r\n        <div class=\"bk-dialog__table-col bk-dialog__canopy-table--rms-text\">\r\n            <span class=\"bk-dialog__tooltip-element\" matTooltip=\"{{'Canopy Root Mean Square Difference Text' | translate}}\" [matTooltipPosition]=\"'above'\" [matTooltipClass]=\"'bk-dialog__tooltip'\">\r\n                {{ 'Root Mean Square Difference' | translate }}: <i class=\"bk-dialog__info-icon fa fa-info-circle\"></i>\r\n            </span>\r\n        </div>\r\n        <div class=\"bk-dialog__table-col bk-dialog__canopy-table--rms-value\">\r\n            {{ tableData.RootMeanSquared }}\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { Component, OnInit, Input, Output, EventEmitter, ElementRef, ViewChild } from '@angular/core';\r\nimport { IMyDpOptions } from 'mydatepicker';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\n\r\nimport { CanopyService } from './canopy.service';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { Canopy } from './canopy';\r\n\r\nimport { ICanopyTableData, INewCanopyData, ICanopyTableRow } from './canopyCurve.interface';\r\nimport { animate, animateChild, query, state, style, transition, trigger } from '@angular/animations';\r\nimport { ICanopyData, ISimsGraphDataRecord } from './interfaces';\r\n\r\n/**\r\n * Refactoring Log\r\n * - (8/16/2019) checked access modifiers of class parameters\r\n * -- validated access modifiers of class methods and sorted them\r\n */\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'canopy-table',\r\n\ttemplateUrl: 'canopy-table.html',\r\n\tstyleUrls: [ 'canopy-table.scss'],\r\n\tanimations: [\r\n\t\ttrigger('rowChildrenAnim', [\r\n\t\t\tstate('open', style({\r\n\t\t\t\tdisplay: 'block'\r\n\t\t\t})),\r\n\t\t\tstate('closed', style({\r\n\t\t\t\tdisplay: 'none',\r\n\t\t\t})),\r\n\t\t\ttransition('open => closed', [ animate('0.2s') ]),\r\n\t\t\ttransition('closed => open', [ animate('0.2s') ]),\r\n\t\t]),\r\n\t\ttrigger('openClose', [\r\n\t\t\tstate('open', style({\r\n\t\t\t\theight: '56px',\r\n\t\t\t})),\r\n\t\t\tstate('closed', style({\r\n\t\t\t\theight: '0px',\r\n\t\t\t})),\r\n\t\t\ttransition('open => closed', [\r\n\t\t\t\tquery('@*', animateChild()),\r\n\t\t\t\tanimate('0.2s 200ms'),\r\n\t\t\t]),\r\n\t\t\ttransition('closed => open', [\r\n\t\t\t\tquery('@*', animateChild()),\r\n\t\t\t\tanimate('0.2s 200ms')\r\n\t\t\t]),\r\n\t\t])\r\n\t]\r\n})\r\n\r\nexport class CanopyTableComponent implements OnInit {\r\n\r\n\t@ViewChild('addEntryForm', { static: true }) private _addEntryForm: ElementRef;\r\n\t@ViewChild('removeEntryForm', { static: true }) private _removeEntryForm: ElementRef;\r\n\r\n\t@Input()\r\n\tpublic canopy: Canopy;\r\n\r\n\t@Input()\r\n\tpublic plantingId: number;\r\n\r\n\t@Output()\r\n\tpublic onDataUpdated: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n\tpublic addingEntry: boolean;\r\n\tpublic datePickerOptions: IMyDpOptions;\r\n\tpublic entryToRemove: ICanopyTableRow;\r\n\tpublic formValid: Record<string, boolean>;\r\n\tpublic newEntry: INewCanopyData;\r\n\tpublic newEntryDate: { jsdate: Date };\r\n\tpublic removingEntry: boolean;\r\n\tpublic tableData: ICanopyTableData;\r\n\tpublic isOpen = false;\r\n\r\n\tprivate _formStarted: Record<string, boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _canopyService: CanopyService,\r\n\t\tprivate _snackBar: MatSnackBar) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.newEntry = {\r\n\t\t\tPlantingId: this.plantingId,\r\n\t\t\tDate: new Date(),\r\n\t\t\tCanopyCover: null\r\n\t\t};\r\n\r\n\t\tthis.entryToRemove = {\r\n\t\t\tCanopyCoverEventId: null,\r\n\t\t\tDate: null,\r\n\t\t\tCropManageCanopy: null,\r\n\t\t\tMeasuredCanopy: null,\r\n\t\t\tSource: null\r\n\t\t};\r\n\r\n\t\tthis.datePickerOptions = {\r\n\t\t\tshowClearDateBtn: false\r\n\t\t};\r\n\r\n\t\tthis.formValid = {\r\n\t\t\tcanopyCover: true\r\n\t\t};\r\n\r\n\t\tthis._formStarted = {\r\n\t\t\tcanopyCover: false\r\n\t\t};\r\n\r\n\t\tthis.tableData = {\r\n\t\t\tData: [],\r\n\t\t\tRootMeanSquared: 0\r\n\t\t};\r\n\r\n\t\tthis.newEntryDate = {\r\n\t\t\tjsdate: new Date()\r\n\t\t};\r\n\r\n\t\tthis.removingEntry = false;\r\n\t\tthis.addingEntry = false;\r\n\r\n\t\tthis._clearNewEntryForm();\r\n\t}\r\n\r\n\tpublic cancelAddingEntry(): void {\r\n\t\tthis._hideAddEntryForm();\r\n\t\tthis._clearNewEntryForm();\r\n\t}\r\n\r\n\tpublic cancelRemovingEntry(): void {\r\n\t\tthis.isOpen = false;\r\n\r\n\t\tthis.entryToRemove = {\r\n\t\t\tCanopyCoverEventId: null,\r\n\t\t\tDate: null,\r\n\t\t\tCropManageCanopy: null,\r\n\t\t\tMeasuredCanopy: null,\r\n\t\t\tSource: null\r\n\t\t};\r\n\t}\r\n\r\n\tpublic onDateChanged(e: { jsdate: Date }): void {\r\n\t\tif (!e || !e.jsdate) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.newEntry.Date = e.jsdate;\r\n\t}\r\n\r\n\tpublic isNewEntryInvalid(): boolean {\r\n\r\n\t\tfor (let key in this._formStarted) {\r\n\t\t\tif (!this._formStarted[key]) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let key in this.formValid) {\r\n\t\t\tif (!this.formValid[key]) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic reloadTableCanopyData(records: ISimsGraphDataRecord[]): void {\r\n\t\tfor (let row of this.tableData.Data) {\r\n\t\t\tlet match: ISimsGraphDataRecord;\r\n\r\n\t\t\tmatch = records.find(x => x.Date.getTime() === row.Date.getTime());\r\n\r\n\t\t\tif (match) {\r\n\t\t\t\trow.CropManageCanopy = match.Percentage;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @param maxCanopyFraction\r\n\t * @param maxFraction\r\n\t * @param canopyA\r\n\t * @param canopyB\r\n\t * @param canopyE\r\n\t * @param canopyF\r\n\t * @public Referenced by canopy dialog component so must be public\r\n\t */\r\n\tpublic loadTableData(): void {\r\n\t\tlet canopy: ICanopyData;\r\n\r\n\t\tif (!this.canopy || !this.canopy.form) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcanopy = this.canopy.form.value as ICanopyData;\r\n\r\n\t\tthis._canopyService.GetTable(this.plantingId, canopy.CanopyGMax,\r\n\t\t\tcanopy.MaxFraction, canopy.CanopyA, canopy.CanopyB, canopy.CanopyE,\r\n\t\t\tcanopy.CanopyF, canopy.CanopyMin)\r\n\t\t\t.then(data => {\r\n\t\t\t\tif (!data) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.tableData = data\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic openRemoveEntrySection(canopyData: ICanopyTableRow): void {\r\n\t\tthis.isOpen = !this.isOpen;\r\n\r\n\t\tif (this.addingEntry) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.entryToRemove = canopyData;\r\n\t}\r\n\r\n\tpublic remove(): void {\r\n\t\tthis._canopyService.deleteTableEntry(this.entryToRemove.CanopyCoverEventId)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis._snackBar.open('Data Removed Successfully', 'Close', {\r\n\t\t\t\t\tduration: 2000\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.loadTableData();\r\n\t\t\t\tthis.onDataUpdated.emit(true);\r\n\t\t\t\tthis.cancelRemovingEntry();\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic save(): void {\r\n\t\tthis._canopyService.createTableEntry(this.plantingId, this.newEntry)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis._snackBar.open('Data Saved Successfully', 'Close', {\r\n\t\t\t\t\tduration: 2000\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.loadTableData();\r\n\r\n\t\t\t\tthis.onDataUpdated.emit(true);\r\n\t\t\t\tthis.cancelAddingEntry();\r\n\t\t\t})\r\n\t}\r\n\r\n\tpublic showAddEntryForm(): void {\r\n\t\tthis.addingEntry = true;\r\n\t\t$(this._addEntryForm.nativeElement).slideToggle('medium');\r\n\t}\r\n\r\n\tpublic validateNewEntry(key: string): void {\r\n\t\tthis._formStarted[key] = true;\r\n\r\n\t\tswitch (key) {\r\n\t\t\tcase 'canopyCover':\r\n\t\t\t\tthis.formValid.canopyCover = ValidateService.isValidNumber(this.newEntry.CanopyCover) &&\r\n\t\t\t\t\tthis.newEntry.CanopyCover >= 0 && this.newEntry.CanopyCover <= 100;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _clearNewEntryForm(): void {\r\n\t\tthis.newEntry = {\r\n\t\t\tPlantingId: this.plantingId,\r\n\t\t\tDate: new Date(),\r\n\t\t\tCanopyCover: null\r\n\t\t}\r\n\r\n\t\tthis.newEntryDate = { jsdate: new Date() };\r\n\r\n\t\tObject.keys(this._formStarted).forEach(i => {\r\n\t\t\tthis._formStarted[i] = false;\r\n\t\t});\r\n\r\n\t\tObject.keys(this.formValid).forEach(i => {\r\n\t\t\tthis.formValid[i] = true;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _hideAddEntryForm(): void {\r\n\t\t$(this._addEntryForm.nativeElement).slideUp('medium');\r\n\t\tthis.addingEntry = false;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { HttpService, HttpServicePostOptions, HttpServiceGetOptions } from '../../services/http.service';\r\n\r\nimport { ICanopyTableData, ICanopyTableDataJSON, INewCanopyData } from './canopyCurve.interface';\r\nimport { ICanopyData, ISimsGraphDataModel, ICanopyService, SimsDataModel, ISimsGraphDataRecord,\r\n\tISimsGraphDataModelJSON } from './interfaces';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { CMError, SuccessResponse } from '../../interfaces/interfaces';\r\nimport { of } from 'rxjs';\r\nimport { Canopy } from './canopy';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\n\r\n@Injectable()\r\nexport class CanopyService implements ICanopyService {\r\n\r\n\tprivate _urls = {\r\n\t\tcanopyData: (plantingId: number) => `/v2/plantings/${plantingId}/sims-data/canopy.json`,\r\n\t\tsimsData: (plantingId: number) => `/v2/plantings/${plantingId}/sims-data/summary.json`,\r\n\t\tsimsGraph: (plantingId: number) => `/v2/plantings/${plantingId}/simis-data/graph.json`,\r\n\t\tupdate: (plantingId: number) => `/v2/plantings/${plantingId}/crop-types/canopy-coefficients.json`,\r\n\t\ttable: {\r\n\t\t\tget: (plantingId: number) => `/v2/plantings/${plantingId}/simis-data/table.json`,\r\n\t\t\tcreate: (plantingId: number) => `/v2/plantings/${plantingId}/canopy-cover-events.json`,\r\n\t\t\tdelete: (eventId: number) => `/v2/canopy-cover-events/${eventId}.json`\r\n\t\t}\r\n\t}\r\n\r\n\tconstructor(private _httpService: HttpService) { }\r\n\r\n\tpublic simsData(plantingId: number): Promise<SimsDataModel> {\r\n\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this._urls.simsData(plantingId),\r\n\r\n\t\t\tcallback: (response: SimsDataModel) => {\r\n\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn response;\r\n\t\t\t},\r\n\t\t\tisWebAPI: true,\r\n\t\t}\r\n\r\n\t\treturn this._httpService.get(options);\r\n\t}\r\n\r\n\t/**\r\n\t * Identical to simsgraphdata except the response payload is smaller\r\n\t * @param canopy\r\n\t * @returns\r\n\t */\r\n\tpublic canopyData(canopy: Canopy): Promise<ISimsGraphDataRecord[]> {\r\n\r\n\t\tlet params: HttpParams;\r\n\t\tlet model: ICanopyData;\r\n\r\n\t\tif (!canopy || !canopy.form || canopy.form.invalid) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tmodel = canopy.form.value as ICanopyData;\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('CanopyGMax', model.CanopyGMax.toString())\r\n\t\t\t.set('MaxFraction', model.MaxFraction.toString())\r\n\t\t\t.set('CanopyA', model.CanopyA.toString())\r\n\t\t\t.set('CanopyB', model.CanopyB.toString())\r\n\t\t\t.set('CanopyE', model.CanopyE.toString())\r\n\t\t\t.set('CanopyF', model.CanopyF.toString())\r\n\t\t\t.set('CanopyMin', model.CanopyMin.toString());\r\n\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this._urls.canopyData(canopy.PlantingId),\r\n\r\n\t\t\tcallback: (response: ISimsGraphDataModelJSON): ISimsGraphDataRecord[] => {\r\n\t\t\t\tlet result: ISimsGraphDataRecord[] = [];\r\n\r\n\t\t\t\tresponse.CropManageData.forEach(o => {\r\n\t\t\t\t\tresult.push({\r\n\t\t\t\t\t\tDate: DateUtility.DotNetToDate(o.Date),\r\n\t\t\t\t\t\tPercentage: o.Percentage\r\n\t\t\t\t\t})\r\n\t\t\t\t})\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t}\r\n\r\n\t\treturn this._httpService.get(options);\r\n\t}\r\n\r\n\tpublic simsGraphData(canopy: Canopy): Promise<ISimsGraphDataModel> {\r\n\r\n\t\tlet params: HttpParams;\r\n\t\tlet model: ICanopyData;\r\n\r\n\t\tif (!canopy || !canopy.form || canopy.form.invalid) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tmodel = canopy.form.value as ICanopyData;\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('CanopyGMax', model.CanopyGMax.toString())\r\n\t\t\t.set('MaxFraction', model.MaxFraction.toString())\r\n\t\t\t.set('CanopyA', model.CanopyA.toString())\r\n\t\t\t.set('CanopyB', model.CanopyB.toString())\r\n\t\t\t.set('CanopyE', model.CanopyE.toString())\r\n\t\t\t.set('CanopyF', model.CanopyF.toString())\r\n\t\t\t.set('CanopyMin', model.CanopyMin.toString());\r\n\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this._urls.simsGraph(canopy.PlantingId),\r\n\r\n\t\t\tcallback: (response: ISimsGraphDataModelJSON): ISimsGraphDataModel => {\r\n\t\t\t\tlet result: ISimsGraphDataModel;\r\n\r\n\t\t\t\tresult = {\r\n\t\t\t\t\tstartDate: response.startDate,\r\n\t\t\t\t\tEndDate: response.EndDate,\r\n\t\t\t\t\tCropManageData: response.CropManageData.map(o => {\r\n\t\t\t\t\t\treturn { Date: DateUtility.DotNetToDate(o.Date), Percentage: o.Percentage }}),\r\n\t\t\t\t\tSIMSCanopyData: response.SIMSCanopyData.map(o => {\r\n\t\t\t\t\t\treturn { Date: DateUtility.DotNetToDate(o.Date), Percentage: o.Percentage * 100 }\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tUserCanopyData: response.UserCanopyData.map(o => {\r\n\t\t\t\t\t\treturn { Date: DateUtility.DotNetToDate(o.Date), Percentage: o.Percentage * 100 }\r\n\t\t\t\t\t})\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t}\r\n\r\n\t\treturn this._httpService.get(options);\r\n\t}\r\n\r\n\tpublic update(model: ICanopyData, plantingId: number): Promise<ICanopyData> {\r\n\r\n\t\tif (!model) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tlet options: HttpServicePostOptions = {\r\n\t\t\turl: this._urls.update(plantingId),\r\n\t\t\tcallback: (response: ICanopyData) => {\r\n\t\t\t\treturn response;\r\n\t\t\t},\r\n\t\t\tbody: model,\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this._httpService.put(options);\r\n\t}\r\n\r\n\tpublic GetTable(plantingId: number, canopyGMax: number, maxFraction: number, canopyA: number,\r\n\t\tcanopyB: number, canopyE: number, canopyF: number, canopyMin: number): Promise<ICanopyTableData> {\r\n\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('CanopyGMax', '' + canopyGMax)\r\n\t\t\t.set('MaxFraction', '' + maxFraction)\r\n\t\t\t.set('CanopyA', '' + canopyA)\r\n\t\t\t.set('CanopyB', '' + canopyB)\r\n\t\t\t.set('CanopyE', '' + canopyE)\r\n\t\t\t.set('CanopyF', '' + canopyF)\r\n\t\t\t.set('CanopyMin', canopyMin.toString());\r\n\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this._urls.table.get(plantingId),\r\n\t\t\tcallback: (response: ICanopyTableDataJSON): ICanopyTableData => {\r\n\t\t\t\tlet result: ICanopyTableData;\r\n\r\n\t\t\t\tresult = {\r\n\t\t\t\t\tData: response.Data.map(o => {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tCanopyCoverEventId: o.CanopyCoverEventId,\r\n\t\t\t\t\t\t\tDate: DateUtility.DotNetToDate(o.Date),\r\n\t\t\t\t\t\t\tCropManageCanopy: o.CropManageCanopy,\r\n\t\t\t\t\t\t\tMeasuredCanopy: o.MeasuredCanopy,\r\n\t\t\t\t\t\t\tSource: o.Source\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tRootMeanSquared: response.RootMeanSquared\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t}\r\n\r\n\t\treturn this._httpService.get(options);\r\n\t}\r\n\r\n\tpublic createTableEntry(plantingId: number, newCanopyData: INewCanopyData): Promise<CMError> {\r\n\r\n\t\tlet options: HttpServicePostOptions = {\r\n\t\t\turl: this._urls.table.create(plantingId),\r\n\t\t\tcallback: (response: CMError ) => {\r\n\t\t\t\treturn response\r\n\t\t\t},\r\n\t\t\tbody: newCanopyData,\r\n\t\t\tisWebAPI: true,\r\n\t\t}\r\n\r\n\t\treturn this._httpService.post(options);\r\n\t}\r\n\r\n\tpublic deleteTableEntry(simsId: number): Promise<SuccessResponse> {\r\n\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this._urls.table.delete(simsId),\r\n\t\t\tcallback: (response: SuccessResponse): SuccessResponse => {\r\n\t\t\t\treturn response\r\n\t\t\t},\r\n\t\t\tisWebAPI: true,\r\n\t\t}\r\n\r\n\t\treturn this._httpService.delete(options);\r\n\t}\r\n}\r\n","import { ICanopyData, SimsCanopyDatamodel, SimsDataModel } from './interfaces';\r\nimport { eCommodityTypes } from '../../interfaces/constants';\r\nimport { eCommodityTypeCalculators } from '../../models/commodity-type/interfaces';\r\nimport { CropType } from '../../models/crop-type/cropType';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { FormValidation } from '../../classes/formValidation';\r\n\r\nexport type CanopyCurveFields = 'CanopyGMax' | 'MaxFraction' | 'CanopyA' |\r\n\t'CanopyB' | 'CanopyE' | 'CanopyF' | 'CanopyMin';\r\n\r\nexport class Canopy {\r\n\r\n\tpublic form: FormGroup;\r\n\treadonly graphContainerElement: string = '#flot-canopy-chart';\r\n\r\n\t// values from the backend\r\n\tpublic PlantingId = 0;\r\n\tpublic ranchGuid = '';\r\n\tpublic HasCoordinates: boolean = null;\r\n\r\n\tpublic get f(): { [key in CanopyCurveFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in CanopyCurveFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _commodityTypeId: number,\r\n\t\tprivate _commodityTypeCalculator: string,\r\n\t\tprivate _fb: FormBuilder\r\n\t) {\r\n\t}\r\n\r\n\tprivate _initializeForm(model: SimsCanopyDatamodel): void {\r\n\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tCanopyGMax: [model.CanopyGMax, [Validators.required, Validators.min(0), Validators.max(100)]],\r\n\t\t\tMaxFraction: [model.MaxFraction, [Validators.required, Validators.min(0.01), Validators.max(1)]],\r\n\t\t\tCanopyMin: [model.CanopyMin, [Validators.required, Validators.min(0), Validators.max(100)]],\r\n\t\t\tCanopyA: [model.CanopyA, [Validators.required, Validators.min(1.5), Validators.max(10)]],\r\n\t\t\tCanopyB: [model.CanopyB, [Validators.required, Validators.min(-20), Validators.max(-4)]],\r\n\t\t\tCanopyE: [model.CanopyE, [Validators.required, Validators.min(-2.5), Validators.max(0.2)]],\r\n\t\t\tCanopyF: [model.CanopyF, [Validators.required, Validators.min(0.4), Validators.max(3)]]\r\n\t\t});\r\n\r\n\t\tif (this._commodityTypeId === eCommodityTypes.ALFALFA) {\r\n\t\t\tFormValidation.clearValidator(this.f.MaxFraction);\r\n\t\t} else {\r\n\t\t\tFormValidation.clearValidator(this.f.CanopyMin);\r\n\t\t}\r\n\r\n\t\tif (this._commodityTypeCalculator !== eCommodityTypeCalculators.processingTomato\r\n\t\t\t&& !CropType.isTree(this._commodityTypeId)) {\r\n\r\n\t\t\tFormValidation.clearValidator(this.f.CanopyE);\r\n\t\t\tFormValidation.clearValidator(this.f.CanopyF);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic setData(canopyData: SimsDataModel): void {\r\n\t\tif (!canopyData) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._initializeForm(canopyData.CanopyParams)\r\n\t\tthis.PlantingId = canopyData.PlantingId;\r\n\t\tthis.ranchGuid = canopyData.RanchGuid;\r\n\t}\r\n\r\n\tpublic dataHasChanged(): boolean {\r\n\t\tif (this.form && this.form.touched) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A method used to create a model to post to C# with\r\n\t * @returns\r\n\t */\r\n\tpublic getModelForPost(): ICanopyData {\r\n\t\tlet canopyData: ICanopyData;\r\n\r\n\t\tcanopyData = {\r\n\t\t\tPlantingId: this.PlantingId,\r\n\t\t\tranchGuid: this.ranchGuid,\r\n\t\t\tCanopyGMax: this.f.CanopyGMax.value,\r\n\t\t\tMaxFraction: this.f.MaxFraction.value,\r\n\t\t\tCanopyA: this.f.CanopyA.value,\r\n\t\t\tCanopyB: this.f.CanopyB.value,\r\n\t\t\tCanopyE: this.f.CanopyE.value,\r\n\t\t\tCanopyF: this.f.CanopyF.value,\r\n\t\t\tCanopyMin: this.f.CanopyMin.value,\r\n\t\t\tHasCoordinates: this.HasCoordinates\r\n\t\t}\r\n\r\n\t\treturn canopyData;\r\n\t}\r\n\r\n\tpublic isInvalid(): boolean {\r\n\t\tif (!this.form || this.form.invalid) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic resetForm(defaultValues: ICanopyData): void {\r\n\t\tif (!this.form) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.form.reset(defaultValues);\r\n\t\tthis.form.markAllAsTouched();\r\n\t}\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { CaspService } from './casp.service';\r\nimport { CASP_HOMEPAGE_URL, CASPNotNowCookieName} from '../../services/constants';\r\nimport { CookieService } from '../../services/cookie.service';\r\nimport { environment } from '../../../environments/environment';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'casp-dialog',\r\n\ttemplateUrl: 'casp-dialog.html',\r\n\tstyleUrls: [ 'casp.scss']\r\n})\r\n\r\nexport class CaspDialogComponent implements OnInit {\r\n\r\n\tprivate _temporaryKey: string;\r\n\tpublic url = CASP_HOMEPAGE_URL;\r\n\tpublic dontAskMeAgain: boolean;\r\n\tprivate _cookieName = CASPNotNowCookieName;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialogRef: MatDialogRef<CaspDialogComponent>,\r\n\t\tprivate _service: CaspService\r\n\t) {\r\n\t\t// disable click outside\r\n\t\tthis._dialogRef.disableClose = true;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._preparePopup();\r\n\t\tthis.dontAskMeAgain = this._isCookieSet();\r\n\t}\r\n\r\n\tprivate _preparePopup(): void {\r\n\t\tthis._service.temporaryKey().then(response => {\r\n\t\t\tconst popupWidth = 600;\r\n\t\t\tconst popupHeight = 800;\r\n\r\n\t\t\tlet windowWidth, windowHeight, left, top: number;\r\n\t\t\tlet button: JQuery;\r\n\r\n\t\t\tif (!response) {\r\n\t\t\t\tthrow Error('Temporary key call failed');\r\n\t\t\t}\r\n\r\n\t\t\tthis._temporaryKey = response;\r\n\r\n\t\t\t// We use JQuery to append a button to dom since Angular doesn't allow onclick\r\n\t\t\t// and onclick is needed to open the window without being blocked\r\n\r\n\t\t\twindowWidth = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ?\r\n\t\t\t\tdocument.documentElement.clientWidth : screen.width;\r\n\r\n\t\t\twindowHeight = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ?\r\n\t\t\t\tdocument.documentElement.clientHeight : screen.height;\r\n\r\n\t\t\tleft = (windowWidth - popupWidth) / 2;\r\n\t\t\ttop = (windowHeight - popupHeight) / 2;\r\n\r\n\t\t\tbutton = jQuery(`<button mat-button class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n\t\t\t\tonclick=\"window.open('${environment.CASP_LOGIN_URL}?key=${this._temporaryKey}',\r\n\t\t\t\t'asdas', 'toolbars=0,width=${popupWidth},height=${popupHeight},top=${top},left=${left},scrollbars=0,resizable=1');\">\r\n\t\t\t\tConnect with CASP</button>`);\r\n\r\n\t\t\tjQuery('.dialog-actions').append(button);\r\n\r\n\t\t\tjQuery('.bk-dialog__button--primary').click(() => {\r\n\t\t\t\t// close this window once the popup window opens\r\n\t\t\t\tthis._dialogRef.close();\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _isCookieSet(): boolean {\r\n\t\tlet cookie: string;\r\n\r\n\t\tcookie = CookieService.get(this._cookieName);\r\n\r\n\t\tif (cookie) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\t// if cookie is set, then it was dismissed.. so its not visible\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic notNow(): void {\r\n\t\tthis._service.setCookie();\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ModelService } from '../../services/model.service';\r\nimport { SuccessResponse } from '../../interfaces/interfaces';\r\nimport { CookieService } from '../../services/cookie.service';\r\nimport { CASPNotNowCookieName } from '../../services/constants';\r\n\r\n@Injectable()\r\nexport class CaspService extends ModelService {\r\n\r\n\tprivate _urls = {\r\n\t\tshouldPrompt: (ranchGuid: string) => `/v2/ranch/${ranchGuid}/should-show-casp-prompt.json`,\r\n\t\ttemporaryKey: `/v2/account/temporary-key.json`,\r\n\t\tisEnabled: `/v2/account/is-casp-enabled.json`,\r\n\t\tdisconnect: `/v2/account/disable-casp.json`\r\n\t};\r\n\r\n\t/**\r\n\t * Evaluates whether user should be prompted to connect to CASP, based on\r\n\t * whether he is already connected to CASP and he is the owner of the current ranch\r\n\t *\r\n\t * @param ranchGuid\r\n\t */\r\n\tpublic shouldPrompt(ranchGuid: string): Promise<boolean> {\r\n\r\n\t\treturn this.get(this._urls.shouldPrompt(ranchGuid),\r\n\t\t\t(response: boolean): boolean => {\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Validates whether user is connect to CASP or not\r\n\t */\r\n\tpublic isEnabled(): Promise<boolean> {\r\n\r\n\t\treturn this.get(this._urls.isEnabled,\r\n\t\t\t(response: boolean): boolean => {\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Get temporary user key\r\n\t */\r\n\tpublic temporaryKey(): Promise<string> {\r\n\r\n\t\treturn this.get(this._urls.temporaryKey,\r\n\t\t\t(response: string) => {\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tpublic setCookie(): void {\r\n\t\tconst days = 7;\r\n\r\n\t\tCookieService.set(CASPNotNowCookieName, 'CASPNotNow', days);\r\n\t}\r\n\r\n\t/**\r\n\t * Disconnect user from CASP\r\n\t */\r\n\tpublic disable(): Promise<SuccessResponse> {\r\n\t\treturn this.deleteItem(this._urls.disconnect,\r\n\t\t\t(response: SuccessResponse) => {\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\t{{'Delete' | translate }} {{ 'Canopy Parameters' | translate }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<div class=\"bk-modal__remove-text\">\r\n\t\t\t{{'Are you sure you want to delete this record?' | translate }}?\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t(click)=\"close()\">\r\n\t\t\t{{'Cancel' | translate }}\r\n\t\t</button>\r\n\t\t<button class=\"bk-button bk-button--medium\"\r\n\t\t\t(click)=\"delete()\">\r\n\t\t\t{{'Delete' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { CropTypeUpdateService } from './cropType.update.service';\r\nimport { IPerennialCanopy } from '../../models/crop-type/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ap-canopy-delete-confirmation',\r\n\ttemplateUrl: 'canopy-delete-confirmation.html'\r\n})\r\n\r\nexport class CanopyDeleteConfirmationDialog implements OnInit {\r\n\r\n\tpublic constructor(\r\n\t\tprivate _dialogRef: MatDialogRef<CanopyDeleteConfirmationDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { Id: number },\r\n\t\tprivate _updateService: CropTypeUpdateService,\r\n\t) {\r\n\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\t\tthis._updateService.deletePerennialCanopy(this._data.Id);\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tpublic close() {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","<admin-nav></admin-nav>\r\n\r\n<div class=\"bk-admin__page\">\r\n\t\r\n\t<div class=\"bk-form__header\">\r\n\t\t<h5 class=\"bk-text--gray\">\r\n\t\t\t{{ 'Edit' | translate}} {{ 'Crop Type' | translate}}\r\n\t\t</h5>\r\n\t</div>\r\n\r\n\t<form *ngIf=\"form\" [formGroup]=\"form\">\r\n\t\t<div class=\"bk-form__wrapper\" >\r\n\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Name' | translate }}\r\n\t\t\t</label>\r\n\t\t\t<input class=\"bk-modal__field bk-form__input-text--wide\"\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tname=\"Name\"\r\n\t\t\t\tformControlName=\"Name\"/>\r\n\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Commodity Type' | translate }}\r\n\t\t\t</label>\r\n\t\t\t<select class=\"bk-modal__field\"\r\n\t\t\t\tname=\"CommodityTypeId\"\r\n\t\t\t\tformControlName=\"CommodityTypeId\">\r\n\r\n\t\t\t\t<option [ngValue]=\"0\"\r\n\t\t\t\t\tselected>\r\n\t\t\t\t\t{{'Select One' | translate }}\r\n\t\t\t\t</option>\r\n\t\t\t\t<option *ngFor=\"let commodityType of commodityTypes\"\r\n\t\t\t\t\t[ngValue]=\"commodityType.Id\">\r\n\t\t\t\t\t{{commodityType.Name}}\r\n\t\t\t\t</option>\r\n\t\t\t</select>\r\n\r\n\t\t\t<ng-container *ngIf=\"!f.IsYearSpecific.value || f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t{{'Maximum Crop Age' | translate }} <mat-icon class=\"bk-info-icon\" matTooltip=\"{{ 'Max Age Help Text' | translate }}\">\r\n\t\t\t\t\t\tinfo_outline\r\n\t\t\t\t\t</mat-icon>\r\n\t\t\t\t</label>\r\n\t\t\t\t<select class=\"bk-modal__field\"\r\n\t\t\t\t\tname=\"MaxAge\"\r\n\t\t\t\t\tformControlName=\"MaxAge\">\r\n\t\r\n\t\t\t\t\t<option \r\n\t\t\t\t\t\t*ngFor=\"let age of maxCropAges\"\r\n\t\t\t\t\t\t[ngValue]=\"age.key\">\r\n\t\t\t\t\t\t{{age.value}}\r\n\t\t\t\t\t</option>\r\n\t\t\t\t</select>\r\n\t\t\t</ng-container>\r\n\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Crop Sensitivity' | translate }} (Optional)\r\n\t\t\t</label>\r\n\t\t\t<input class=\"bk-modal__field\"\r\n\t\t\t\ttype=\"number\"\r\n\t\t\t\tname=\"CropSensitivity\"\r\n\t\t\t\tformControlName=\"CropSensitivity\"/>\r\n\r\n\t\t\t<fieldset *ngIf=\"f.ShouldShowTreeCoefficients.value\"\r\n\t\t\t\tclass=\"bk-form__fieldset\">\r\n\t\t\t\t<legend class=\"bk-form__legend\">\r\n\t\t\t\t\t{{ 'Tree Coefficients' | translate }}\r\n\t\t\t\t</legend>\r\n\r\n\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Intercept' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"TreeInterceptCoefficient\"\r\n\t\t\t\t\t\t\tformControlName=\"TreeInterceptCoefficient\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Spring Leaf N' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"TreeLeafNCoefficient\"\r\n\t\t\t\t\t\t\tformControlName=\"TreeLeafNCoefficient\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'ilr4' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"TreeIlr4Coefficient\"\r\n\t\t\t\t\t\t\tformControlName=\"TreeIlr4Coefficient\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'ilr8' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"TreeIlr8Coefficient\"\r\n\t\t\t\t\t\t\tformControlName=\"TreeIlr8Coefficient\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'ilr4 X ilr8' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"TreeIlrProductCoefficient\"\r\n\t\t\t\t\t\t\tformControlName=\"TreeIlrProductCoefficient\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</fieldset>\r\n\r\n\t\t\t<ng-container *ngIf=\"!f.IsTree.value && !f.IsNDependent.value\">\r\n\r\n\t\t\t\t<ng-container *ngIf=\"f.IsPreviousCrop.value === false\">\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Previous' | translate }} {{'Crop Type' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field\"\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tname=\"PreviousCropName\"\r\n\t\t\t\t\t\tformControlName=\"PreviousCropName\"/>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</ng-container>\r\n\r\n\t\t\t<div class=\"bk-form__checkbox\">\r\n\t\t\t\t<input class=\"bk-form__checkbox__input\"\r\n\t\t\t\t\ttype=\"checkbox\"\r\n\t\t\t\t\tname=\"IsNDependent\"\r\n\t\t\t\t\tformControlName=\"IsNDependent\"/>\r\n\t\t\t\t<div class=\"bk-form__checkbox__label\">\r\n\t\t\t\t\t{{ 'Is N Dependent' | translate }} \r\n\t\t\t\t\t<mat-icon class=\"bk-info-icon\"\r\n\t\t\t\t\t\tmatTooltip=\"{{ 'N Dependent Help Text' | translate }}\">\r\n\t\t\t\t\t\tinfo_outline\r\n\t\t\t\t\t</mat-icon>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"bk-form__checkbox\">\r\n\t\t\t\t<input class=\"bk-form__checkbox__input\"\r\n\t\t\t\t\ttype=\"checkbox\"\r\n\t\t\t\t\tname=\"IsMacroTunnelEnabled\"\r\n\t\t\t\t\tformControlName=\"IsMacroTunnelEnabled\"/>\r\n\t\t\t\t<div class=\"bk-form__checkbox__label\">\r\n\t\t\t\t\t{{ 'Enable Macro Tunnel' | translate }} \r\n\t\t\t\t\t<mat-icon class=\"bk-info-icon\"\r\n\t\t\t\t\t\tmatTooltip=\"{{ 'Enable Macro Tunnel Help Text' | translate }}\">\r\n\t\t\t\t\t\tinfo_outline\r\n\t\t\t\t\t</mat-icon>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t<ng-container *ngIf='f.IsNDependent.value'>\r\n\r\n\t\t\t\t<h4>\r\n\t\t\t\t\t{{ 'Fertilization' | translate }}\r\n\t\t\t\t</h4>\r\n\t\t\t\t<!-- fertilization section -->\r\n\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Fert A' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"FertA\"\r\n\t\t\t\t\t\t\tformControlName=\"FertA\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Fert B' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"FertB\"\r\n\t\t\t\t\t\t\tformControlName=\"FertB\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Fert Yo' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"FertYo\"\r\n\t\t\t\t\t\t\tformControlName=\"FertYo\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\r\n\t\t\t\t<fieldset class=\"bk-form__fieldset\">\r\n\t\t\t\t\t<ng-container *ngIf=\"!f.IsTree.value\">\r\n\t\t\t\t\t\t<legend class=\"bk-form__legend\">\r\n\t\t\t\t\t\t\t{{ 'N Uptake' | translate }}\r\n\t\t\t\t\t\t</legend>\r\n\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Max Uptake' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"MaxUptake\"\r\n\t\t\t\t\t\t\tformControlName=\"MaxUptake\" />\r\n\t\t\t\r\n\t\t\t\t\t\t<ng-container *ngIf=\"!f.IgnoresNFactors.value\">\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\t{{'N Uptake Threshold' | translate }}\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"NUptakeThreshold\"\r\n\t\t\t\t\t\t\t\tformControlName=\"NUptakeThreshold\"/>\r\n\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Uptake Constant' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"UptakeConstant\"\r\n\t\t\t\t\t\t\tformControlName=\"UptakeConstant\" />\r\n\t\t\t\t\t</ng-container>\r\n\t\t\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Uptake Factor' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"UptakeFactor\"\r\n\t\t\t\t\t\tformControlName=\"UptakeFactor\" />\r\n\t\t\t\t</fieldset>\r\n\r\n\t\t\t\t<fieldset class=\"bk-form__fieldset\" *ngIf=\"!f.IsTree.value\">\r\n\t\t\t\t\t<legend class=\"bk-form__legend\">\r\n\t\t\t\t\t\t{{ 'Soil N Threshold' | translate }}\r\n\t\t\t\t\t</legend>\r\n\r\n\t\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\t{{'Soil N Threshold' | translate }}\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"SoilNThreshold\"\r\n\t\t\t\t\t\t\t\tformControlName=\"SoilNThreshold\" />\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\t{{'Soil N Threshold Mid' | translate }}\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"SoilNThresholdMid\"\r\n\t\t\t\t\t\t\t\tformControlName=\"SoilNThresholdMid\" />\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\t{{'Soil N Threshold Late' | translate }}\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"SoilNThresholdLate\"\r\n\t\t\t\t\t\t\t\tformControlName=\"SoilNThresholdLate\"/>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\t{{'Soil N Threshold Fraction' | translate }}\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"SoilNThresholdFraction\"\r\n\t\t\t\t\t\t\t\tformControlName=\"SoilNThresholdFraction\"/>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\t{{'Soil N Threshold Fraction Mid' | translate }}\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"SoilNThresholdFractionMid\"\r\n\t\t\t\t\t\t\t\tformControlName=\"SoilNThresholdFractionMid\" />\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</fieldset>\r\n\r\n\t\t\t\t<fieldset class=\"bk-form__fieldset\"\r\n\t\t\t\t\t*ngIf=\"!f.IgnoresNFactors.value\">\r\n\t\t\t\t\t<legend class=\"bk-form__legend\">\r\n\t\t\t\t\t\t{{ 'Soil N Ratio' | translate}}\r\n\t\t\t\t\t</legend>\r\n\r\n\t\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\tA\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"SoilNRatioA\"\r\n\t\t\t\t\t\t\t\tformControlName=\"SoilNRatioA\"  />\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\tB\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"SoilNRatioB\"\r\n\t\t\t\t\t\t\t\tformControlName=\"SoilNRatioB\" />\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\tC\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"SoilNRatioC\"\r\n\t\t\t\t\t\t\t\tformControlName=\"SoilNRatioC\" />\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</fieldset>\r\n\r\n\t\t\t\t<fieldset class=\"bk-form__fieldset\"\r\n\t\t\t\t\t*ngIf=\"!f.IsTree.value && !f.IgnoresNFactors.value\">\r\n\t\t\t\t\t<legend class=\"bk-form__legend\">\r\n\t\t\t\t\t\t{{ 'N Fertilizer Factors' | translate }}\r\n\t\t\t\t\t</legend>\r\n\r\n\t\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\tA\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"NFertilizerFactorA\"\r\n\t\t\t\t\t\t\t\tformControlName=\"NFertilizerFactorA\" />\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\tB\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"NFertilizerFactorB\"\r\n\t\t\t\t\t\t\t\tformControlName=\"NFertilizerFactorB\"  />\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\tC\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"NFertilizerFactorC\"\r\n\t\t\t\t\t\t\t\tformControlName=\"NFertilizerFactorC\" />\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\tD\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"NFertilizerFactorD\"\r\n\t\t\t\t\t\t\t\tformControlName=\"NFertilizerFactorD\" />\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</fieldset>\r\n\r\n\t\t\t\t<!-- perennial N Parameters -->\r\n\r\n\t\t\t\t<ng-container *ngIf=\"!f.IsTree.value\">\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Crop Mineralization Rate' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"CropMineralizationRate\"\r\n\t\t\t\t\t\tformControlName=\"CropMineralizationRate\"  />\r\n\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Previous Crop K' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"PrevCropK\"\r\n\t\t\t\t\t\tformControlName=\"PrevCropK\" />\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t{{'Max N Recommendation' | translate }} (lbs N/acre)\r\n\t\t\t\t</label>\r\n\t\t\t\t\r\n\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\tname=\"MaxNRec\"\r\n\t\t\t\t\t[minNumber]=\"0.01\"\r\n\t\t\t\t\tformControlName=\"MaxNRec\" />\r\n\r\n\t\t\t\t<ng-container *ngIf=\"!f.IsTree.value && (f.CalculatorId.value === CALCULATOR.STRAWBERRY\r\n\t\t\t\t\t|| f.CalculatorId.value === CALCULATOR.TOMATO)\">\r\n\t\t\t\t\t\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Strawberry Fertilization Interval' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"StrawberryFertilizationInterval\"\r\n\t\t\t\t\t\tformControlName=\"StrawberryFertilizationInterval\" />\r\n\t\t\t\t</ng-container>\r\n\t\t\t</ng-container>\r\n\r\n\t\t\t<ng-container *ngIf=\"f.IsTree.value\">\r\n\t\t\t\t<ng-container *ngIf=\"f.SpringLeafNutrientsRequired.value\">\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Inadequate Summer Leaf N' | translate }} (%)\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"InadequateSummerLeafN\"\r\n\t\t\t\t\t\tformControlName=\"InadequateSummerLeafN\" />\r\n\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Excessive Summer Leaf N' | translate }} (%)\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"ExcessiveSummerLeafN\"\r\n\t\t\t\t\t\tformControlName=\"ExcessiveSummerLeafN\" />\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t{{'Leaf tissue Nfertilizer adjustment' | translate }} (lbs N/acre)\r\n\t\t\t\t</label>\r\n\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\tname=\"NFertilizerAdjustment\"\r\n\t\t\t\t\tformControlName=\"NFertilizerAdjustment\" />\r\n\r\n\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t{{'Fertilizer N Use Efficiency' | translate }} (%)\r\n\t\t\t\t</label>\r\n\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\tname=\"FertilizerUseEfficiency\"\r\n\t\t\t\t\tformControlName=\"FertilizerUseEfficiency\" />\r\n\r\n\t\t\t\t<table class=\"bk-form__table\">\r\n\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t{{ 'Low Vigor' | translate }}\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t{{ 'High Vigor' | translate }}\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t</thead>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t<tr *ngFor=\"let demand of f.VegetativeNDemands.controls; let i = index\">\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<label *ngIf=\"demand.get('YearMin').value === demand.get('YearMax').value\">\r\n\t\t\t\t\t\t\t\t\t{{ demand.get('YearMax').value + 1 }} {{ 'Year' | translate }}\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t<label *ngIf=\"demand.get('YearMax').value > 100\">\r\n\t\t\t\t\t\t\t\t\t{{ demand.get('YearMin').value }}+ {{ 'Years' | translate}}\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t<label *ngIf=\"demand.get('YearMin').value !== demand.get('YearMax').value\r\n\t\t\t\t\t\t\t\t\t&& demand.get('YearMax').value !== 1000000 && demand.get('YearMin').value === 0\">\r\n\t\t\t\t\t\t\t\t\t{{ 'First' | translate }} {{ 'Year' | translate}}\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t<label *ngIf=\"demand.get('YearMin').value !== demand.get('YearMax').value\r\n\t\t\t\t\t\t\t\t\t&& demand.get('YearMax').value !== 1000000 && demand.get('YearMin').value > 0\">\r\n\r\n\t\t\t\t\t\t\t\t\t{{ demand.get('YearMin').value }} - {{ demand.get('YearMax').value }} {{ 'Years' | translate}}\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\tname=\"vegetativeNDemandLow{{i}}\"\r\n\t\t\t\t\t\t\t\t\t[formControl]=\"f.VegetativeNDemands.controls[i].get('Low')\" />\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\tname=\"vegetativeNDemandHigh{{i}}\"\r\n\t\t\t\t\t\t\t\t\t[formControl]=\"f.VegetativeNDemands.controls[i].get('High')\" />\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t</table>\r\n\r\n\t\t\t\t<table class=\"bk-form__table\"\r\n\t\t\t\t\t*ngIf=\"f.SpringLeafNutrientsRequired.value === true\">\r\n\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t{{ 'Season Average' | translate }}\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t{{ 'Threshold' | translate }}\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t</thead>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t<ng-container *ngFor=\"let threshold of fnc.TreeNutrientThresholds.controls; let i = index\">\r\n\t\t\t\t\t\t\t<tr *ngIf=\"(f.ShouldShowTreeCoefficients.value && threshold.get('NutrientSymbol').value !== 'B')\r\n\t\t\t\t\t\t\t\t|| (!f.ShouldShowTreeCoefficients.value && threshold.get('NutrientSymbol').value !== 'P'\r\n\t\t\t\t\t\t\t\t&& threshold.get('NutrientSymbol').value !== 'S')\">\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t<label>\r\n\t\t\t\t\t\t\t\t\t\t{{ threshold.get('NutrientSymbol').value }} ({{ threshold.get('NutrientUnit').value }})\r\n\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\t\tname=\"treeNutrientThresholdSeasonAverage{{i}}\"\r\n\t\t\t\t\t\t\t\t\t\t[formControl]=\"fnc.TreeNutrientThresholds.controls[i].get('SeasonAverage')\" />\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\t\tname=\"treeNutrientThresholdThreshold{{i}}\"\r\n\t\t\t\t\t\t\t\t\t\t[formControl]=\"fnc.TreeNutrientThresholds.controls[i].get('Threshold')\" />\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t</table>\r\n\r\n\t\t\t\t<table class=\"bk-form__table\"\r\n\t\t\t\t\t*ngIf=\"f.SpringLeafNutrientsRequired.value === true && !f.ShouldShowTreeCoefficients.value\"><!-- hide these if not almonds -->\r\n\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t{{ 'Factor' | translate }}\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t{{ 'Coefficient' | translate }} A\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t{{ 'Coefficient' | translate }} B\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t</thead>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t<ng-container *ngFor=\"let threshold of fnc.TreeNutrientThresholds.controls; let i = index\">\r\n\t\t\t\t\t\t\t<tr *ngIf=\"threshold.get('NutrientSymbol').value !== 'P' &&\r\n\t\t\t\t\t\t\tthreshold.get('NutrientSymbol').value !== 'S'\">\r\n\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t<label>\r\n\t\t\t\t\t\t\t\t\t\t{{ threshold.get('NutrientSymbol').value }} ({{ threshold.get('NutrientUnit').value }})\r\n\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\t\tname=\"treeNutrientThresholdTissueFactor{{i}}\"\r\n\t\t\t\t\t\t\t\t\t\t[formControl]=\"fnc.TreeNutrientThresholds.controls[i].get('TissueFactor')\" />\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\t\tname=\"treeNutrientThresholdTissueCoefficientA{{i}}\"\r\n\t\t\t\t\t\t\t\t\t\t[formControl]=\"fnc.TreeNutrientThresholds.controls[i].get('TissueCoefficientA')\" />\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"threshold.get('NutrientSymbol').value === 'N'\">\r\n\t\t\t\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"treeNutrientThresholdTissueCoefficientB{{i}}\"\r\n\t\t\t\t\t\t\t\t\t\t\t[formControl]=\"fnc.TreeNutrientThresholds.controls[i].get('TissueCoefficientB')\" />\r\n\t\t\t\t\t\t\t\t\t</ng-container> \r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t</table>\r\n\t\t\t</ng-container>\r\n\r\n\t\t\t<!-- irrigation -->\r\n\r\n\t\t\t<h4>Irrigation Factors</h4>\r\n\r\n\t\t\t<table class=\"bk-form__table\">\r\n\t\t\t\t<thead>\r\n\t\t\t\t\t<th>Irrigation Method</th>\r\n\t\t\t\t\t<th>Factor</th>\r\n\t\t\t\t</thead>\r\n\t\t\t\t<tbody>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<label>Sprinkler</label>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"SprinklerIrrigationFactor\"\r\n\t\t\t\t\t\t\t\tformControlName=\"SprinklerIrrigationFactor\" />\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<label>Drip</label>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"DripIrrigationFactor\"\r\n\t\t\t\t\t\t\t\tformControlName=\"DripIrrigationFactor\" />\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<label>Flood</label>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"FloodIrrigationFactor\"\r\n\t\t\t\t\t\t\t\tformControlName=\"FloodIrrigationFactor\" />\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</tbody>\r\n\t\t\t</table>\r\n\r\n\t\t\t<fieldset class=\"bk-form__fieldset\">\r\n\t\t\t\t<legend class=\"bk-form__legend\">\r\n\t\t\t\t\t{{ 'Target Tensions' | translate }}\r\n\t\t\t\t</legend>\r\n\r\n\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'1 ft' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"TargetTension1\"\r\n\t\t\t\t\t\t\tformControlName=\"TargetTension1\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'2 ft' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"TargetTension2\"\r\n\t\t\t\t\t\t\tformControlName=\"TargetTension2\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label bk-form__input-text--float\">\r\n\t\t\t\t\t\t\t{{'3 ft' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"TargetTension3\"\r\n\t\t\t\t\t\t\tformControlName=\"TargetTension3\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label bk-form__input-text--float\">\r\n\t\t\t\t\t\t\t{{'4 ft' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"TargetTension4\"\r\n\t\t\t\t\t\t\tformControlName=\"TargetTension4\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</fieldset>\r\n\t\t\t\r\n\t\t\t<fieldset class=\"bk-form__fieldset\">\r\n\t\t\t\t<legend class=\"bk-form__legend\">\r\n\t\t\t\t\t{{ 'Canopy' | translate }}\r\n\t\t\t\t</legend>\r\n\r\n\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t<li *ngIf=\"f.IsYearSpecific.value || f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Canopy' | translate }} A\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"CanopyA\"\r\n\t\t\t\t\t\t\tformControlName=\"CanopyA\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li *ngIf=\"f.IsYearSpecific.value || f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Canopy' | translate }} B\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"CanopyB\"\r\n\t\t\t\t\t\t\tformControlName=\"CanopyB\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Canopy' | translate }} C\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"CanopyC\"\r\n\t\t\t\t\t\t\tformControlName=\"CanopyC\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Canopy' | translate }} D\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"CanopyD\"\r\n\t\t\t\t\t\t\tformControlName=\"CanopyD\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li *ngIf=\"f.CalculatorId.value === CALCULATOR.TOMATO\">\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Canopy' | translate }} E\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"CanopyE\"\r\n\t\t\t\t\t\t\tformControlName=\"CanopyE\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li *ngIf=\"f.CalculatorId.value === CALCULATOR.TOMATO\">\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Canopy' | translate }} F\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"CanopyF\"\r\n\t\t\t\t\t\t\tformControlName=\"CanopyF\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\r\n\t\t\t\t<ng-container *ngIf=\"form.get('MaxAge').value > 0 && !f.IsYearSpecific.value &&\r\n\t\t\t\t\tf.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Perennial Canopy Parameters' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<button class=\"bk-button bk-create-button\"\r\n\t\t\t\t\t\t(click)=\"createPerennialCanopy()\">\r\n\t\t\t\t\t\t<span class=\"bk-data-table__plus-icon\">+</span> \r\n\t\t\t\t\t\t{{ 'Create' | translate}}\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\r\n\t\t\t\t\t<table *ngIf=\"perennialCanopies && perennialCanopies.length > 0\"\r\n\t\t\t\t\t\tclass=\"bk-form__table\">\r\n\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t\tAge of Crop\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t\t{{ 'Canopy' | translate }} A\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t\t{{ 'Canopy' | translate }} B\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t<th *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.CANEBERRY\">\r\n\t\t\t\t\t\t\t\t{{ 'Canopy' | translate }} E\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t<th *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.CANEBERRY\">\r\n\t\t\t\t\t\t\t\t{{ 'Canopy' | translate }} F\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t\t{{ 'Max Canopy' | translate }}\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t\t{{ 'Canopy Max Fraction' | translate }}\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t\t{{ 'Action' | translate }}\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t</thead>\r\n\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let canopy of perennialCanopies; let i = index\">\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t{{ canopy.Age + 1}}\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t{{ canopy.CanopyA }}\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t{{ canopy.CanopyB }}\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t<td *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.CANEBERRY\">\r\n\t\t\t\t\t\t\t\t\t\t{{ canopy.CanopyE }}\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t<td *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.CANEBERRY\">\r\n\t\t\t\t\t\t\t\t\t\t{{ canopy.CanopyF }}\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t{{ canopy.CanopyGMax }}\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t{{ canopy.CanopyMaxFraction }}\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"bk-button bk-admin__button\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"editPerennialCanopy(canopy)\">\r\n\t\t\t\t\t\t\t\t\t\t\t{{ 'Edit' | translate }}\r\n\t\t\t\t\t\t\t\t\t\t</button>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"bk-button bk-admin__button\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"deletePerennialCanopy(canopy.Id)\">\r\n\t\t\t\t\t\t\t\t\t\t\t{{ 'Delete' | translate }}\r\n\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t</table>\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<ng-container *ngIf=\"f.IsYearSpecific.value || f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t<!-- alfalfa uses canopyMin and canopyMax -->\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Canopy GMax' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"CanopyGMax\"\r\n\t\t\t\t\t\tformControlName=\"CanopyGMax\" />\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<ng-container *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t<!-- alfalfa uses canopyMin -->\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Canopy Min' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"CanopyMin\"\r\n\t\t\t\t\t\tformControlName=\"CanopyMin\" />\r\n\t\t\t\t</ng-container>\r\n\t\t\r\n\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t{{'Canopy Intercept' | translate }}\r\n\t\t\t\t</label>\r\n\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\tname=\"CanopyIntercept\"\r\n\t\t\t\t\tformControlName=\"CanopyIntercept\" />\r\n\t\t\r\n\t\t\t\t<!-- alfalfa doesn't use CanopyMaxFraction in its calculations -->\r\n\t\t\t\t<ng-container *ngIf=\"f.IsYearSpecific.value && f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Canopy Max Fraction' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"CanopyMaxFraction\"\r\n\t\t\t\t\t\tformControlName=\"CanopyMaxFraction\" />\r\n\t\t\t\t</ng-container>\r\n\t\t\t</fieldset>\r\n\r\n\t\t\t<!-- ALFALFA section -->\r\n\r\n\t\t\t<ng-container *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t{{'Base KC' | translate }}\r\n\t\t\t\t</label>\r\n\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\tname=\"BasalKC\"\r\n\t\t\t\t\tformControlName=\"BasalKC\" />\r\n\r\n\t\t\t\t<table *ngIf=\"f.SeasonalKCs && f.SeasonalKCs.controls.length > 0\" \r\n\t\t\t\t\tclass=\"bk-form__table\" cellspacing=\"5\" cellpadding=\"5\">\r\n\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t<th>&nbsp;</th>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t{{ 'Ni to Max Canopy' | translate }}\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t</thead>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t<tr *ngFor=\"let month of months; let i = index\">\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<label>\r\n\t\t\t\t\t\t\t\t\t{{ month }}\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\t[formControl]=\"f.SeasonalKCs.controls[i].get('NiToMaxCanopy')\" />\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t</table>\r\n\t\t\t</ng-container>\r\n\r\n\t\t\t<!-- Almonds section -->\r\n\r\n\t\t\t<ng-container *ngIf=\"f.IsTree.value\">\r\n\r\n\t\t\t\t<div class=\"bk-form__checkbox\">\r\n\t\t\t\t\t<input class=\"bk-form__checkbox__input\"\r\n\t\t\t\t\t\ttype=\"checkbox\"\r\n\t\t\t\t\t\tname=\"PreHarvestSenesce\"\r\n\t\t\t\t\t\tformControlName=\"PreHarvestSenesce\"/>\r\n\t\t\t\t\t<div class=\"bk-form__checkbox__label\">\r\n\t\t\t\t\t\t{{ 'Pre-Harvest Senesce' | translate }} \r\n\t\t\t\t\t\t<mat-icon class=\"bk-info-icon\"\r\n\t\t\t\t\t\t\tmatTooltip=\"{{ 'Pre-Harvest Senesce Help Text' | translate }}\">\r\n\t\t\t\t\t\t\tinfo_outline\r\n\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<ng-container *ngIf=\"f.PreHarvestSenesce.value\">\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Leaf Senesce' | translate }} (%)\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"LeafSenesce\"\r\n\t\t\t\t\t\tformControlName=\"LeafSenesce\"/>\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Kccov_quad' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"Kccov_quad\"\r\n\t\t\t\t\t\t\tformControlName=\"Kccov_quad\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Kccov_int' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"Kccov_int\"\r\n\t\t\t\t\t\t\tformControlName=\"Kccov_int\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Kccov_slope' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"Kccov_slope\"\r\n\t\t\t\t\t\t\tformControlName=\"Kccov_slope\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\r\n\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t{{'Cov Density Factor' | translate }}\r\n\t\t\t\t</label>\r\n\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\tname=\"CovDensityFactor\"\r\n\t\t\t\t\tformControlName=\"CovDensityFactor\"/>\r\n\r\n\t\t\t\t<fieldset class=\"bk-form__fieldset\">\r\n\t\t\t\t\t<legend class=\"bk-form__legend\">\r\n\t\t\t\t\t\t{{ 'Default Wet Area' | translate }}\r\n\t\t\t\t\t</legend>\r\n\t\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\t{{ 'Drip' | translate}}\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"WetAreaDrip\"\r\n\t\t\t\t\t\t\t\tformControlName=\"WetAreaDrip\"/>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t\t{{ 'Micro Sprinkler' | translate}}\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tname=\"WetAreaMicroSprinkler\"\r\n\t\t\t\t\t\t\t\tformControlName=\"WetAreaMicroSprinkler\"/>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</fieldset>\r\n\r\n\t\t\t\t<table class=\"bk-form__table\" cellspacing=\"5\" cellpadding=\"5\">\r\n\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t<th>&nbsp;</th>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t{{ 'Density' | translate }}\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t{{ 'Cover' | translate }}\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t</thead>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t<tr *ngFor=\"let month of months; let i = index\">\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<label>\r\n\t\t\t\t\t\t\t\t\t{{ month }}\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<select name=\"Density{{i}}\"\r\n\t\t\t\t\t\t\t\t\tclass=\"\"\r\n\t\t\t\t\t\t\t\t\t[formControl]=\"f.SeasonalKCs.controls[i].get('Density')\">\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<option *ngFor=\"let densityOption of densityOptions\"\r\n\t\t\t\t\t\t\t\t\t\t[ngValue]=\"densityOption.key\">\r\n\t\t\t\t\t\t\t\t\t\t{{densityOption.value}}\r\n\t\t\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\tname=\"Cover{{i}}\"\r\n\t\t\t\t\t\t\t\t\t[formControl]=\"f.SeasonalKCs.controls[i].get('Cover')\"/>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t</table>\r\n\r\n\t\t\t</ng-container>\r\n\r\n\t\t\t<!-- STRESSSABLE -->\r\n\r\n\t\t\t<div class=\"bk-form__checkbox\">\r\n\t\t\t\t<input class=\"bk-form__checkbox__input\"\r\n\t\t\t\t\ttype=\"checkbox\"\r\n\t\t\t\t\tname=\"IsStressable\"\r\n\t\t\t\t\tformControlName=\"IsStressable\"/>\r\n\t\t\t\t<div class=\"bk-form__checkbox__label\">\r\n\t\t\t\t\t<div>{{ 'Is Stressable' | translate }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t<ng-container *ngIf='f.IsStressable.value'>\r\n\r\n\t\t\t\t<ng-container *ngIf=\"!f.IsTree.value\">\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Early Fruit' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"EarlyFruit\"\r\n\t\t\t\t\t\tformControlName=\"EarlyFruit\"/>\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Water Stress Start' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"WaterStressStart\"\r\n\t\t\t\t\t\t\tformControlName=\"WaterStressStart\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Water Stress End' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"WaterStressEnd\"\r\n\t\t\t\t\t\t\tformControlName=\"WaterStressEnd\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\t\t\t\t\r\n\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Stress Start' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"StressStart\"\r\n\t\t\t\t\t\t\tformControlName=\"StressStart\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Stress End' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"StressEnd\"\r\n\t\t\t\t\t\t\tformControlName=\"StressEnd\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\t\t\t\t\r\n\t\t\t</ng-container>\r\n\r\n\t\t\t<!-- misc fields -->\r\n\t\t\t<h4>\r\n\t\t\t\t{{ 'Miscellaneous Parameters' | translate }}\r\n\t\t\t</h4>\r\n\r\n\t\t\t<fieldset class=\"bk-form__fieldset\">\r\n\t\t\t\t<legend class=\"bk-form__legend\">\r\n\t\t\t\t\t{{ 'Days' | translate }}\r\n\t\t\t\t</legend>\r\n\r\n\t\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Germination Days' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"GermDays\"\r\n\t\t\t\t\t\t\tformControlName=\"GermDays\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Max Days' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"MaxDays\"\r\n\t\t\t\t\t\t\tformControlName=\"MaxDays\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\r\n\t\t\t\t<ng-container *ngIf=\"f.IsNDependent.value\">\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Harvest Interval Fraction' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"HarvestIntervalFraction\"\r\n\t\t\t\t\t\tformControlName=\"HarvestIntervalFraction\" />\r\n\t\t\t\t\t<p>Harvest Interval Fraction is a factor in calculating Soil Mineralization which is used\r\n\t\t\t\t\t\tto calculate fertilization recommendations.\r\n\t\t\t\t\t</p>\r\n\t\t\t\t</ng-container>\r\n\t\t\r\n\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t{{'Days to End Date' | translate }}\r\n\t\t\t\t</label>\r\n\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\tname=\"DaysToEndDate\"\r\n\t\t\t\t\tformControlName=\"DaysToEndDate\"/>\r\n\t\t\t\t\r\n\t\t\t</fieldset>\r\n\r\n\t\t\t<fieldset class=\"bk-form__fieldset\">\r\n\t\t\t\t<legend class=\"bk-form__legend\">\r\n\t\t\t\t\t{{ 'Root Depth' | translate }}\r\n\t\t\t\t</legend>\r\n\r\n\t\t\t\t<ng-container *ngIf=\"!f.IsYearSpecific.value\">\r\n\r\n\t\t\t\t\t<table class=\"bk-form__table\">\r\n\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t\t&nbsp;\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t\t{{ 'Min' | translate }}\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t<th>\r\n\t\t\t\t\t\t\t\t{{ 'Max' | translate }}\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t</thead>\r\n\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t<tr *ngFor=\"let depth of f.PerennialRootDepths.controls; let i = index\">\r\n\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t<label *ngIf=\"depth.get('YearMax').value !== 1000000\">\r\n\t\t\t\t\t\t\t\t\t\t{{ depth.get('YearMax').value }} {{ 'Year' | translate }}\r\n\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t\t<label *ngIf=\"depth.get('YearMax').value === 1000000\">\r\n\t\t\t\t\t\t\t\t\t\t{{ depth.get('YearMin').value + 1 }} + {{ 'Years' | translate}}\r\n\t\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\t\tname=\"perennialRootDepthMin{{i}}\"\r\n\t\t\t\t\t\t\t\t\t\t[formControl]=\"f.PerennialRootDepths.controls[i].get('Min')\"/>\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\t\tname=\"perennialRootDepthMax{{i}}\"\r\n\t\t\t\t\t\t\t\t\t\t[formControl]=\"f.PerennialRootDepths.controls[i].get('Max')\" />\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t</table>\r\n\t\t\t\t\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<ul *ngIf=\"f.IsYearSpecific.value\"\r\n\t\t\t\t\tclass=\"bk-form__side-by-side\">\r\n\t\t\t\t\t\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Minimum Root Depth' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"MinRootDepth\"\r\n\t\t\t\t\t\t\tformControlName=\"MinRootDepth\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Maximum Root Depth' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"MaxRootDepth\"\r\n\t\t\t\t\t\t\tformControlName=\"MaxRootDepth\"/>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\t\t\t\t\r\n\t\t\t\t<ng-container *ngIf=\"f.IsNDependent.value && !f.IsTree.value\">\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Root Depth Threshold' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"RootDepthThreshold\"\r\n\t\t\t\t\t\tformControlName=\"RootDepthThreshold\"/>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</fieldset>\r\n\r\n\t\t\t<ng-container *ngIf=\"!f.IsTree.value\">\r\n\t\t\t\t<label class=\"bk-modal__label\"> <!--- May be used by 3rd party apps to choose crop type -->\r\n\t\t\t\t\t{{'Rows' | translate }}\r\n\t\t\t\t</label>\r\n\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\tname=\"Rows\"\r\n\t\t\t\t\tformControlName=\"Rows\"/>\r\n\t\t\t\t\r\n\t\t\t\t<label class=\"bk-modal__label\"> <!--- BedWidth is not used in any calculation - but maybe used by 3rd party apps -->\r\n\t\t\t\t\t{{'Bed Width' | translate }}\r\n\t\t\t\t</label>\r\n\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\tname=\"BedWidth\"\r\n\t\t\t\t\tformControlName=\"BedWidth\"/>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\r\n\t\t<!-- FOOTER -->\r\n\r\n\t\t<div class=\"bk-form__footer modal-footer bk-modal__footer\">\r\n\t\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t\t(click)=\"goBack()\">\r\n\t\t\t\t{{ 'Cancel' | translate }}\r\n\t\t\t</button>\r\n\r\n\t\t\t<button\r\n\t\t\t\tclass=\"bk-button\"\r\n\t\t\t\t[disabled]='!form.valid'\r\n\t\t\t\t(click)=\"update()\">\r\n\t\t\t\t{{ 'Save' | translate }}\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</form>\r\n</div>","\r\nimport { OnInit, Component, OnDestroy } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { CropTypeService } from '../../models/crop-type/service';\r\nimport { ICropTypeViewModel, IPerennialCanopy } from '../../models/crop-type/interfaces';\r\nimport { of, Subject } from 'rxjs';\r\nimport { ICommodityType } from '../../models/commodity-type/interfaces';\r\nimport { CommodityService } from '../../models/commodity-type/service';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { eCalculators, eCommodityTypes, eNotificationTypes } from '../../interfaces/constants';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { ISelectOptions } from '../../interfaces/abstract';\r\nimport { TokenService } from '../../services/token.service';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { PerennialCanopyDialog } from './perennial-canopy';\r\nimport { CropTypeUpdateService } from './cropType.update.service';\r\nimport { CanopyDeleteConfirmationDialog } from './canopy-delete-confirmation';\r\nimport { FormGroup, FormBuilder, AbstractControl, Validators } from '@angular/forms';\r\nimport { CropTypeFormBuilder, CropTypeFormFields } from './cropTypeFormBuilder';\r\nimport { NCalculatorFields } from '../planting-settings/sections/nitrogen-calculator/n-calculator';\r\nimport { CropTypeViewModel } from '../../models/crop-type/cropTypeViewModel';\r\nimport { ICropSettingsForm } from '../planting-settings/planting-settings-form.interfaces';\r\nimport { CropTypeViewmodelConverter } from './cropTypeViewModelConverter';\r\nimport { FormValidation } from '../../classes/formValidation';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'crop-type-detail',\r\n\ttemplateUrl: 'crop-type-detail.html',\r\n\tstyleUrls: ['crop-type-detail.scss']\r\n})\r\n\r\nexport class CropTypeDetailComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic CALCULATOR = eCalculators;\r\n\tpublic commodityTypes: ICommodityType[];\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\tpublic dateUtility = DateUtility;\r\n\tpublic months = DateUtility.monthsAsStrings;\r\n\tpublic daysOfTheMonth: number[] = new Array();\r\n\tpublic perennialCanopies: IPerennialCanopy[];\r\n\r\n\tpublic hasChanges: boolean; // flag used to prevent user from navigating away\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\t\t// from this form if changes have been made to perennial tables\r\n\tprivate _cropTypeForm: CropTypeFormBuilder;\r\n\r\n\tpublic maxCropAges = [ // content of dropdown used to limit max age for a crop\r\n\t\t{ key: null, value: 'Select One'},\r\n\t\t{ key: 0, value: '1 year' },\r\n\t\t{ key: 1, value: '2 years' },\r\n\t\t{ key: 2, value: '3 years' },\r\n\t\t{ key: 3, value: '4 years' },\r\n\t\t{ key: 4, value: '5 years' },\r\n\t\t{ key: 5, value: '6 years' },\r\n\t\t{ key: 6, value: '7 years' },\r\n\t\t{ key: 7, value: '8 years' },\r\n\t\t{ key: 8, value: '9 years' },\r\n\t\t{ key: 9, value: '10 years' },\r\n\t\t{ key: 10, value: '11 years' },\r\n\t\t{ key: 11, value: '12 years' },\r\n\t\t{ key: 12, value: '13 years' },\r\n\t\t{ key: 13, value: '14 years' },\r\n\t\t{ key: 14, value: '15 years' },\r\n\t];\r\n\r\n\tpublic densityOptions: ISelectOptions[] = [\r\n\t\t{ key: 0, value: 'Sparse' },\r\n\t\t{ key: 1, value: 'Full' }\r\n\t];\r\n\r\n\t// private members\r\n\r\n\tprivate _cropTypeId: number;\r\n\tprivate _isClone: boolean;\r\n\tpublic form: FormGroup;\r\n\r\n\tconstructor(\r\n\t\tprivate _router: Router,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate _route: ActivatedRoute,\r\n\t\tprivate _navigationRouter: Router,\r\n\t\tprivate _cropTypeService: CropTypeService,\r\n\t\tprivate _commodityService: CommodityService,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _updateService: CropTypeUpdateService,\r\n\t\tprivate _fb: FormBuilder\r\n\t) {\r\n\t\tif (this._tokenService.isAuthenticated() === false) {\r\n\t\t\tthis._router.navigate(['login']);\r\n\t\t}\r\n\r\n\t\tthis.hasChanges = false;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis._updateService.perennialCanopyCreated.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis._addPerennialCanopy(data);\r\n\t\t\tthis.hasChanges = true;\r\n\t\t});\r\n\r\n\t\tthis._updateService.perennialCanopyUpdated.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis._updatePerennialCanopy(data);\r\n\t\t\tthis.hasChanges = true;\r\n\t\t});\r\n\r\n\t\tthis._updateService.perennialCanopyDeleted.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis._deletePerennialCanopy(data);\r\n\t\t\tthis.hasChanges = true;\r\n\t\t});\r\n\r\n\t\tthis._route.queryParams.pipe(takeUntil(this._subscriptions$)).subscribe(params => {\r\n\t\t\tthis._cropTypeId = params['id'];\r\n\t\t\tthis._isClone = params['isClone'] === 'true' ? true : false;\r\n\r\n\t\t\tif (this._cropTypeId && !this._isClone) {\r\n\t\t\t\tthis._getEditModel(this._cropTypeId).then((responseModel) => {\r\n\t\t\t\t\tthis._commodityService.list().then((response) => {\r\n\t\t\t\t\t\tthis.commodityTypes = response;\r\n\r\n\t\t\t\t\t\tif (responseModel) {\r\n\t\t\t\t\t\t\tthis._initializeForm(responseModel);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t})\r\n\t\t\t} else if (this._cropTypeId && this._isClone) {\r\n\t\t\t\tthis._getCloneModel(this._cropTypeId).then((responseModel) => {\r\n\r\n\t\t\t\t\tthis._commodityService.list().then((response) => {\r\n\t\t\t\t\t\tthis.commodityTypes = response;\r\n\r\n\t\t\t\t\t\tif (responseModel) {\r\n\t\t\t\t\t\t\tthis._initializeForm(responseModel);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis._cropTypeId = null;\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t})\r\n\t\t\t} else {\r\n\t\t\t\tthis._getCreateModel().then((responseModel) => {\r\n\r\n\t\t\t\t\tthis._commodityService.list().then((response) => {\r\n\t\t\t\t\t\tthis.commodityTypes = response;\r\n\t\t\t\t\t\tthis._initializeForm(responseModel);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic get f(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fnc(): { [key in NCalculatorFields]: AbstractControl } {\r\n\t\treturn (this.form.get('NCalculator') as FormGroup).controls as { [key in NCalculatorFields]: AbstractControl };\r\n\t}\r\n\r\n\tprivate _initializeForm(ct: ICropTypeViewModel): void {\r\n\r\n\t\tthis._cropTypeForm = new CropTypeFormBuilder(this._fb, this.commodityTypes,\r\n\t\t\tthis._subscriptions$);\r\n\t\tthis.form = this._cropTypeForm.initializeForm(ct);\r\n\t\tthis._customizeValidation();\r\n\t\tthis._bindValueChanges();\r\n\t}\r\n\r\n\tpublic rebuildForm(): void {\r\n\t\tlet cache: CropTypeViewModel;\r\n\r\n\t\tthis.form.updateValueAndValidity(); // make sure form values are fully updated\r\n\t\tcache = this.form.value as CropTypeViewModel;\r\n\t\tcache.TreeNutrientThresholds = this.fnc.TreeNutrientThresholds.value;\r\n\t\tthis.form = this._cropTypeForm.initializeForm(cache);\r\n\t\tthis._customizeValidation();\r\n\t\tthis._bindValueChanges();\r\n\t}\r\n\r\n\tprivate _customizeValidation(): void {\r\n\t\tif (!this.f.IsTree.value) {\r\n\t\t\tFormValidation.setValidator(this.f.DaysToEndDate, [Validators.required,\r\n\t\t\t\tFormValidation.greaterThanValidator(0)]);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _bindValueChanges(): void {\r\n\t\tthis.f.CommodityTypeId.valueChanges.subscribe(() => {\r\n\t\t\tthis.rebuildForm();\r\n\t\t});\r\n\r\n\t\tthis.f.IsNDependent.valueChanges.subscribe(() => {\r\n\t\t\tthis.rebuildForm();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _sortPerennialCanopy(): void {\r\n\t\tif (!this.perennialCanopies) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.perennialCanopies.sort((a, b) => {\r\n\t\t\tlet result: number;\r\n\r\n\t\t\tresult = a.Age - b.Age;\r\n\r\n\t\t\treturn result;\r\n\t\t})\r\n\t}\r\n\r\n\tprivate _deletePerennialCanopy(id: number): void {\r\n\t\tif (!this.perennialCanopies || this.perennialCanopies.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.perennialCanopies = this.perennialCanopies.filter(x => x.Id !== id);\r\n\t}\r\n\r\n\tprivate _addPerennialCanopy(model: IPerennialCanopy): void {\r\n\t\tthis.perennialCanopies.push(model);\r\n\t\tthis._sortPerennialCanopy();\r\n\t}\r\n\r\n\tprivate _updatePerennialCanopy(model: IPerennialCanopy): void {\r\n\t\tlet canopyOriginal: IPerennialCanopy;\r\n\r\n\t\tif (!this.perennialCanopies || this.perennialCanopies.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcanopyOriginal = this.perennialCanopies.find(x => x.Id === model.Id);\r\n\r\n\t\tif (!canopyOriginal) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcanopyOriginal.Age = model.Age;\r\n\t\tcanopyOriginal.CanopyA = model.CanopyA;\r\n\t\tcanopyOriginal.CanopyB = model.CanopyB;\r\n\t\tcanopyOriginal.CanopyE = model.CanopyE;\r\n\t\tcanopyOriginal.CanopyF = model.CanopyF;\r\n\t\tcanopyOriginal.CanopyGMax = model.CanopyGMax;\r\n\t\tcanopyOriginal.CanopyMaxFraction = model.CanopyMaxFraction;\r\n\r\n\t\tthis._sortPerennialCanopy();\r\n\t}\r\n\r\n\tpublic editPerennialCanopy(model: IPerennialCanopy): void {\r\n\t\tlet data: {\r\n\t\t\tmodel: IPerennialCanopy,\r\n\t\t\tcommodityTypeId: number,\r\n\t\t\tmaxAge: number,\r\n\t\t};\r\n\r\n\t\tdata = {\r\n\t\t\tmodel: model,\r\n\t\t\tcommodityTypeId: this.f.CommodityTypeId.value,\r\n\t\t\tmaxAge: this.f.MaxAge.value,\r\n\t\t};\r\n\r\n\t\tthis._dialog.open(PerennialCanopyDialog, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: data,\r\n\t\t\tmaxWidth: 'unset'\r\n\t\t});\r\n\t}\r\n\r\n\tpublic deletePerennialCanopy(id: number): void {\r\n\t\tthis._dialog.open(CanopyDeleteConfirmationDialog, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: {\r\n\t\t\t\tId: id,\r\n\t\t\t},\r\n\t\t\tmaxWidth: 'unset'\r\n\t\t});\r\n\t}\r\n\r\n\tpublic createPerennialCanopy(): void {\r\n\t\tlet data: {\r\n\t\t\tmodel: IPerennialCanopy,\r\n\t\t\tcommodityTypeId: number,\r\n\t\t\tmaxAge: number,\r\n\t\t}\r\n\r\n\t\tdata = {\r\n\t\t\tmodel: {\r\n\t\t\t\tId: null,\r\n\t\t\t\tAge: null,\r\n\t\t\t\tCropTypeId: this.f.Id.value,\r\n\t\t\t\tCanopyA: null,\r\n\t\t\t\tCanopyB: null,\r\n\t\t\t\tCanopyE: null,\r\n\t\t\t\tCanopyF: null,\r\n\t\t\t\tCanopyGMax: null,\r\n\t\t\t\tCanopyMaxFraction: null\r\n\t\t\t},\r\n\t\t\tcommodityTypeId: this.f.CommodityTypeId.value,\r\n\t\t\tmaxAge: this.f.MaxAge.value,\r\n\t\t}\r\n\r\n\t\tthis._dialog.open(PerennialCanopyDialog, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: data,\r\n\t\t\tmaxWidth: 'unset'\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n     * Get initial parameter defaults for creating a new crop type\r\n     */\r\n\tprivate async _getCreateModel(): Promise<ICropTypeViewModel> {\r\n\r\n\t\tlet response: ICropTypeViewModel = await this._cropTypeService.getCreateModel();\r\n\r\n\t\tthis.perennialCanopies = response.PerennialCanopies;\r\n\r\n\t\treturn response;\r\n\t}\r\n\r\n\t/**\r\n     * get cropTypeViewModel from backend to edit\r\n     */\r\n\tprivate async _getEditModel(id: number): Promise<ICropTypeViewModel> {\r\n\t\tlet response: ICropTypeViewModel;\r\n\r\n\t\tif (!id) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tresponse = await this._cropTypeService.getEditModel(id);\r\n\r\n\t\tif (!response) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tthis.perennialCanopies = response.PerennialCanopies;\r\n\t\tthis._sortPerennialCanopy();\r\n\r\n\t\treturn response;\r\n\t}\r\n\r\n\tprivate async _getCloneModel(id: number): Promise<ICropTypeViewModel> {\r\n\t\tlet response: ICropTypeViewModel;\r\n\r\n\t\tif (!id) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tresponse = await this._cropTypeService.getCloneModel(id);\r\n\r\n\t\tif (!response) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tthis.perennialCanopies = response.PerennialCanopies;\r\n\t\tresponse.Name = null;\r\n\r\n\t\treturn response;\r\n\t}\r\n\r\n\tpublic update() {\r\n\t\tlet model: ICropTypeViewModel;\r\n\r\n\t\tthis.hasChanges = false;\r\n\t\tmodel = CropTypeViewmodelConverter.convert(this.form.value as ICropSettingsForm);\r\n\t\tmodel.PerennialCanopies = this.perennialCanopies;\r\n\r\n\t\tif (this._cropTypeId) {\r\n\t\t\tthis._cropTypeService.update(model).then(() => {\r\n\t\t\t\tthis._notifyAfterSave();\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis._cropTypeService.create(model).then(() => {\r\n\t\t\t\tthis._notifyAfterSave();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _notifyAfterSave(): void {\r\n\t\tthis._notificationService.generateNotifcation({\r\n\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\tmessage: 'Crop Type ' + this.f.Name.value\r\n\t\t\t+ ' was successfully saved'\r\n\t\t});\r\n\r\n\t\tthis._navigationRouter.navigate(['CropTypes']);\r\n\t}\r\n\r\n\t/**\r\n     * Back button => back to list view\r\n     */\r\n\tpublic goBack() {\r\n\t\tthis._navigationRouter.navigate(['CropTypes']);\r\n\t}\r\n}\r\n","<admin-nav></admin-nav>\r\n<div class=\"bk-admin__page\">\r\n\r\n    <div class=\"bk-tab-headers\">\r\n        <h5 class=\"bk-text--gray bk-tab-headers__tab\"\r\n            [ngClass]=\"{'bk-tab-headers__tab--selected': viewType === viewTypes.CROP_TYPE }\"\r\n            [routerLink]=\"['/CropTypes']\" [queryParams]=\"{viewType:viewTypes.CROP_TYPE}\">\r\n            {{'Crop Types' | translate }}\r\n        </h5>\r\n        <h5 class=\"bk-text--gray bk-tab-headers__tab\"\r\n            [ngClass]=\"{'bk-tab-headers__tab--selected': viewType === viewTypes.PREVIOUS_CROP }\"\r\n            [routerLink]=\"['/CropTypes']\" [queryParams]=\"{viewType:viewTypes.PREVIOUS_CROP}\">\r\n            {{'Previous Crop' | translate }}\r\n        </h5>\r\n    </div>\r\n\r\n    <div class=\"bk-data-table bk-data-table__weather-stations\">\r\n        <div class=\"bk-data-table__head\">\r\n            <div class=\"bk-data-table__title\">\r\n                &nbsp;\r\n                <button class=\"bk-button bk-data-table__title--button-right\"\r\n                    (click)=\"create()\">\r\n                    <span class=\"bk-data-table__plus-icon\">+</span> \r\n                    {{ (viewType === viewTypes.CROP_TYPE ? 'Add Crop Type' : 'Add Previous Crop') | translate}}\r\n                </button>\r\n\r\n            </div>\r\n            <div class=\"bk-data-table__search\">\r\n                <label class=\"bk-data-table__search--label\">\r\n                    {{ 'Filter By' | translate }}\r\n                    <input class=\"bk-data-table__search--input\"\r\n                        (keyup)=\"search($event.target.value)\"\r\n                        placeholder=\"Name\"\r\n                        [(ngModel)]=\"query\"/>\r\n                </label>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"bk-data-table__content\">\r\n            <mat-table [dataSource]=\"dataSource\" matSort>\r\n\r\n                <ng-container matColumnDef=\"Name\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header>\r\n                        {{ 'Name' | translate }}\r\n                    </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\">\r\n                        {{row.Name}}\r\n                    </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"MaxUptake\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header>\r\n                        {{ 'N Uptake' | translate }}\r\n                    </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\">\r\n                        {{row.MaxUptake}}\r\n                    </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"MaxNRec\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header>\r\n                        {{ 'Max N Recommendation' | translate }}\r\n                    </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\">\r\n                        {{row.MaxNRec}}\r\n                    </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"CommodityTypeName\">\r\n                        <mat-header-cell *matHeaderCellDef mat-sort-header>\r\n                            {{ 'Commodity' | translate }}\r\n                        </mat-header-cell>\r\n                        <mat-cell *matCellDef=\"let row\">\r\n                            {{row.CommodityTypeName}}\r\n                        </mat-cell>\r\n                    </ng-container>\r\n\r\n                <ng-container matColumnDef=\"Action\">\r\n                    <mat-header-cell *matHeaderCellDef>\r\n                        {{ 'Actions' | translate }}\r\n                    </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"\r\n                        class=\"bk-data-table__cell-overflow\">\r\n                        \r\n                        <button type=\"button\"\r\n                            class=\"bk-button bk-admin__button\"\r\n                            (click)=\"edit(row.Id)\">\r\n                            {{ 'Edit' | translate }}\r\n                        </button>\r\n                        <button type=\"button\"\r\n                            *ngIf=\"viewType === viewTypes.CROP_TYPE\"\r\n                            class=\"bk-button bk-admin__button\"\r\n                            (click)=\"clone(row.Id)\">\r\n                            {{ 'Clone' | translate }}\r\n                        </button>\r\n\r\n                        <button type=\"button\"\r\n                            class=\"bk-button bk-admin__button\"\r\n                            (click)=\"delete(row)\">\r\n                            {{ 'Delete' | translate }}\r\n                        </button>\r\n                    </mat-cell>\r\n                </ng-container>\r\n\r\n                <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n                <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\r\n\r\n            </mat-table>\r\n\r\n            <div class=\"bk-data-table__empty\"\r\n                *ngIf=\"results.length && dataSource && dataSource.filteredData\r\n                    && dataSource.filteredData.length === 0\">\r\n                {{ 'There are no results matching' | translate }} \r\n                <span class=\"bk-data-table__empty--filter\">\"{{dataSource.filter}}\"</span>\r\n            </div>\r\n\r\n            <mat-paginator [pageSizeOptions]=\"[10, 25, 50]\"></mat-paginator>\r\n        </div>\r\n    </div>\r\n</div>","import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\n\r\nimport { CropTypeService } from '../../models/crop-type/service';\r\nimport { ICropTypeListItem } from '../../models/crop-type/interfaces';\r\nimport { ObjectUtility } from '../../classes/objectUtility';\r\nimport { NavigationExtras, Router, ActivatedRoute } from '@angular/router';\r\nimport { TokenService } from '../../services/token.service';\r\nimport {  Subject } from 'rxjs';\r\nimport { CropTypeUpdateService } from './cropType.update.service';\r\nimport { CropTypeDeleteConfirmationDialog } from './delete-confirmation';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { PersistentDatabase } from '../../services/persistent-database';\r\n\r\nexport enum cropTypeViewTypes {\r\n\tCROP_TYPE = 0,\r\n\tPREVIOUS_CROP = 1\r\n};\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'crop-types',\r\n\ttemplateUrl: 'crop-types.html',\r\n\tstyleUrls: [ 'crop-types.scss']\r\n})\r\n\r\nexport class CropTypeListComponent implements OnInit, OnDestroy {\r\n\t@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n\t@ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n\tpublic dataSource: MatTableDataSource<ICropTypeListItem>;\r\n\tpublic results: ICropTypeListItem[] = new Array();\r\n\tpublic originalResults: ICropTypeListItem[] = new Array();\r\n\r\n\tpublic displayedColumns: string[] = ['Name', 'MaxUptake', 'MaxNRec', 'CommodityTypeName', 'Action'];\r\n\r\n\tpublic query = '';\r\n\r\n\tpublic viewTypes = cropTypeViewTypes;\r\n\tpublic viewType: cropTypeViewTypes = cropTypeViewTypes.CROP_TYPE;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tprivate _pageIndex = 0;\r\n\r\n\tconstructor(\r\n\t\tprivate _persistentDatabase: PersistentDatabase,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _activatedRoute: ActivatedRoute,\r\n\t\tprivate _cropTypeService: CropTypeService,\r\n\t\tprivate _updateService: CropTypeUpdateService,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate _route: ActivatedRoute,\r\n\t\tprivate _router: Router) {\r\n\r\n\t\tif (this._tokenService.isAuthenticated() === false) {\r\n\t\t\tthis._router.navigate(['login']);\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tif (this.sort) {\r\n\t\t\tif (this.sort.sortChange) {\r\n\t\t\t\tthis.sort.sortChange.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\t\t\tif (!this.paginator) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\twhile (this.paginator.hasPreviousPage()) {\r\n\t\t\t\t\t\tthis.paginator.previousPage();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._route.queryParams.pipe(takeUntil(this._subscriptions$)).subscribe(params => {\r\n\t\t\tif (params) {\r\n\t\t\t\tif (parseInt(params['viewType'], 10) === cropTypeViewTypes.PREVIOUS_CROP) {\r\n\t\t\t\t\tthis.viewType = cropTypeViewTypes.PREVIOUS_CROP;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.viewType = cropTypeViewTypes.CROP_TYPE;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// get crop types\r\n\r\n\t\t\tthis._list();\r\n\t\t});\r\n\r\n\t\tthis._updateService.cropUpdated.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\t// if user is edited or deleted, refresh the view\r\n\t\t\tthis._list();\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic create(): void {\r\n\t\tif (this.viewType === cropTypeViewTypes.CROP_TYPE) {\r\n\t\t\tthis._persistentDatabase.cropTypePageIndex = this.dataSource.paginator.pageIndex;\r\n\t\t\tthis._router.navigate(['CropTypeDetails']);\r\n\t\t} else {\r\n\t\t\tthis._persistentDatabase.cropTypePageIndex = this.dataSource.paginator.pageIndex;\r\n\t\t\tthis._router.navigate(['PreviousCropDetails']);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic delete(row: ICropTypeListItem): void {\r\n\r\n\t\tlet data: {\r\n\t\t\tid: number,\r\n\t\t\tname: string\r\n\t\t};\r\n\r\n\t\tdata = {\r\n\t\t\tid: row.Id,\r\n\t\t\tname: row.Name\r\n\t\t};\r\n\r\n\t\tthis._dialog.open(CropTypeDeleteConfirmationDialog, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: data,\r\n\t\t\tmaxWidth: 'unset'\r\n\t\t});\r\n\t}\r\n\r\n\tpublic edit(cropTypeId: number): void {\r\n\t\tlet navigationExtras: NavigationExtras = {\r\n\t\t\tqueryParams: {\r\n\t\t\t\t'id': cropTypeId,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.viewType === cropTypeViewTypes.CROP_TYPE) {\r\n\t\t\tthis._persistentDatabase.cropTypePageIndex = this.dataSource.paginator.pageIndex;\r\n\t\t\tthis._router.navigate(['CropTypeDetails'], navigationExtras);\r\n\t\t} else {\r\n\t\t\tthis._persistentDatabase.cropTypePageIndex = this.dataSource.paginator.pageIndex;\r\n\t\t\tthis._router.navigate(['PreviousCropDetails'], navigationExtras);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic clone(cropTypeId: number): void {\r\n\r\n\t\tlet navigationExtras: NavigationExtras = {\r\n\t\t\tqueryParams: {\r\n\t\t\t\t'id': cropTypeId,\r\n\t\t\t\t'isClone': true\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._router.navigate(['CropTypeDetails'], navigationExtras);\r\n\t}\r\n\r\n\tprivate _filterByPrevious(v: number): void {\r\n\t\tif (!this.originalResults) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.viewType = v;\r\n\r\n\t\tswitch (v) {\r\n\t\t\tcase 0: // crop types\r\n\t\t\t\tthis.results = this.originalResults.filter(x => x.IsPreviousCrop === false);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 1: // Previous crop types\r\n\t\t\t\tthis.results = this.originalResults.filter(x => x.IsPreviousCrop === true);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 2: // show all\r\n\t\t\t\tthis.results = ObjectUtility.copyArray(this.originalResults);\r\n\t\t}\r\n\r\n\t\tthis._setDataSource(this.results);\r\n\t}\r\n\r\n\tpublic search(query: string): void {\r\n\t\tif (!this.dataSource) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (query === null) {\r\n\t\t\tquery = '';\r\n\t\t}\r\n\r\n\t\tquery = query.trim();\r\n\t\tquery = query.toLowerCase();\r\n\t\tthis._persistentDatabase.cropTypeQuery = query;\r\n\r\n\t\tthis.dataSource.filter = query;\r\n\t}\r\n\r\n\tprivate _list(): Promise<void> {\r\n\t\treturn this._cropTypeService.getCropTypesAdmin(true).then((response) => {\r\n\t\t\tthis.originalResults = response;\r\n\t\t\tthis._filterByPrevious(this.viewType);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _setDataSource(results: ICropTypeListItem[]): void {\r\n\t\tthis.dataSource = new MatTableDataSource(results);\r\n\t\tthis.dataSource.paginator = this.paginator;\r\n\t\tthis.dataSource.sort = this.sort;\r\n\r\n\t\tif (this._persistentDatabase.cropTypeQuery) {\r\n\t\t\tthis.dataSource.filter = this._persistentDatabase.cropTypeQuery;\r\n\t\t\tthis.query = this._persistentDatabase.cropTypeQuery;\r\n\t\t}\r\n\r\n\t\tthis._setPageIndex();\r\n\t}\r\n\r\n\tprivate _setPageIndex(): void {\r\n\t\tif (!this.dataSource || !this.dataSource.paginator ||\r\n\t\t\t!this._persistentDatabase || !this.paginator) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this._persistentDatabase.cropTypePageIndex > 0 && this._persistentDatabase.cropTypePageIndex\r\n\t\t\t!== this.dataSource.paginator.pageIndex) {\r\n\r\n\t\t\tthis.paginator.pageIndex = this._persistentDatabase.cropTypePageIndex;\r\n\t\t\tthis._persistentDatabase.cropTypePageIndex = 0; // clear cache\r\n\r\n\t\t\tthis.paginator.page.next({\r\n\t\t\t\tpageIndex: this._persistentDatabase.cropTypePageIndex,\r\n\t\t\t\tpageSize: this.paginator.pageSize,\r\n\t\t\t\tlength: this.paginator.length\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject, Observable } from 'rxjs';\r\nimport { IPerennialCanopy } from '../../models/crop-type/interfaces';\r\n\r\n@Injectable()\r\nexport class CropTypeUpdateService {\r\n\tprivate _cropUpdated: Subject<null> = new Subject<null>();\r\n\tpublic cropUpdated = this._cropUpdated.asObservable();\r\n\r\n\tprivate _perennialCanopyCreated: Subject<IPerennialCanopy> = new Subject<IPerennialCanopy>();\r\n\tpublic perennialCanopyCreated: Observable<IPerennialCanopy> = this._perennialCanopyCreated.asObservable();\r\n\r\n\tprivate _perennialCanopyUpdated: Subject<IPerennialCanopy> = new Subject<IPerennialCanopy>();\r\n\tpublic perennialCanopyUpdated: Observable<IPerennialCanopy> = this._perennialCanopyUpdated.asObservable();\r\n\r\n\tprivate _perennialCanopyDeleted: Subject<number> = new Subject<number>();\r\n\tpublic perennialCanopyDeleted: Observable<number> = this._perennialCanopyDeleted.asObservable();\r\n\r\n\t/**\r\n\t * Triggers when a user is edited or deleted\r\n\t * @param userId\r\n\t */\r\n\tpublic updateList(): void {\r\n\t\tthis._cropUpdated.next();\r\n\t}\r\n\r\n\tpublic addPerennialCanopy(model: IPerennialCanopy): void {\r\n\t\tthis._perennialCanopyCreated.next(model);\r\n\t}\r\n\r\n\tpublic updatePerennialCanopy(model: IPerennialCanopy): void {\r\n\t\tthis._perennialCanopyUpdated.next(model);\r\n\t}\r\n\r\n\tpublic deletePerennialCanopy(id: number): void {\r\n\t\tthis._perennialCanopyDeleted.next(id);\r\n\t}\r\n}\r\n","import { AbstractControl, FormBuilder, ValidatorFn, Validators } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { FormValidation } from '../../classes/formValidation';\r\nimport { eCalculators, eCommodityTypes } from '../../interfaces/constants';\r\nimport { eCommodityTypeCalculators, ICommodityType } from '../../models/commodity-type/interfaces';\r\nimport { CropType } from '../../models/crop-type/cropType';\r\nimport { ICropTypeViewModel, IPerennialCanopy, IPerennialRootDepth,\r\n\tITreeNutrientThreshold, IVegetativeNDemand } from '../../models/crop-type/interfaces';\r\nimport { ISeasonalKC } from '../../models/seasonal-kc/interfaces';\r\nimport { Planting } from '../planting-settings/planting';\r\nimport { PlantingSettingsValidator } from '../planting-settings/plantingSettingValidator';\r\nimport { eNutrientSymbols } from '../tissue-sample-event/interfaces';\r\n\r\n// YieldTarget is used in planting settings only\r\n// PreviousCropTypeId is used by CropSettingsComponent only\r\n// PerennialCanopy and PerennialRootDepth are custom fields for CropSettingsComponent\r\nexport type CropTypeFormFields = 'Id' | 'BasalKC' | 'BedWidth' | 'CanopyA' | 'CanopyB' |\r\n\t'CanopyC' |\r\n\t'CanopyD' | 'CanopyE' | 'CanopyF' |\r\n\t'CanopyGMax' | 'CanopyIntercept' | 'CanopyMaxFraction' |\r\n\t'CanopyMin' |\r\n\t'CommodityTypeId' |\r\n\t'CovDensityFactor' |\r\n\t'CropMineralizationRate' | 'CropSensitivity' | 'DripIrrigationFactor' |\r\n\t'EarlyFruit' |\r\n\t'ExcessiveSummerLeafN' | 'FertA' |\r\n\t'FertB' |\r\n\t'FertilizerUseEfficiency' | 'FertYo' | 'FloodIrrigationFactor' |\r\n\t'GermDays' |\r\n\t'HarvestIntervalFraction' |\r\n\t'IgnoresNFactors' | 'InadequateSummerLeafN' | 'IsNDependent' | 'IsMacroTunnelEnabled'\r\n\t| 'IsPerennial' | 'IsPreviousCrop' | 'IsStressable' |'IsTree' |\r\n\t'IsYearSpecific' | 'Kccov_int' | 'Kccov_quad' | 'Kccov_slope' |\r\n\t'LeafSenesce' |\r\n\t'MaxAge' | 'MaxDays' | 'MaxNRec' | 'MaxRootDepth' | 'MaxUptake' |\r\n\t'MinRootDepth' | 'Name' |\r\n\t'NFertilizerAdjustment' | 'NFertilizerFactorA' | 'NFertilizerFactorB' |\r\n\t'NFertilizerFactorC' | 'NFertilizerFactorD' | 'NUptakeThreshold' |\r\n\t'PerennialCanopies' |\r\n\t'PerennialRootDepths' | 'PrevCropK' | 'PreHarvestSenesce' |\r\n\t'RootDepthThreshold' | 'Rows' |\r\n\t'SeasonalKCs' | 'ShouldShowTreeCoefficients' | 'SoilNThreshold' |\r\n\t'SoilNThresholdFraction' | 'SoilNThresholdFractionMid' |\r\n\t'SoilNThresholdLate' |\r\n\t'SoilNThresholdMid' |\r\n\t'SoilNRatioA' | 'SoilNRatioB' | 'SoilNRatioC' |\r\n\t'SpringLeafNutrientsRequired' | 'SprinklerIrrigationFactor' |\r\n\t'StrawberryFertilizationInterval' |\r\n\t'StressStart' | 'StressEnd' | 'TargetTension1' | 'TargetTension2' |\r\n\t'TargetTension3' | 'TargetTension4' |\r\n\t'TreeIlr4Coefficient' |\r\n\t'TreeIlr8Coefficient' | 'TreeIlrProductCoefficient' | 'TreeInterceptCoefficient' |\r\n\t'TreeLeafNCoefficient' | 'UptakeConstant' |\r\n\t'UptakeFactor' | 'VegetativeNDemands' | 'WaterStressStart' | 'WaterStressEnd' |\r\n\t'WetAreaDrip' | 'WetAreaMicroSprinkler' |\r\n\t// planting settings / crop settings only\r\n\t'DaysToEndDate' | 'DefaultCropTypeId' |\r\n\t'IsCoverCropEnabled' | 'IsStressEnabled' |\r\n\t'LeafSenesceDate' | 'PrevCropDays' | 'PreviousCropTypeId' |\r\n\t'StressStartDate' | 'StressEndDate' |\r\n\t// not submitted\r\n\t'CalculatorId' | 'RootDepthIndex' | 'PerennialCanopyIndex' | 'VegetativeIndex';\r\n\r\nexport class CropTypeFormBuilder {\r\n\tpublic form: FormGroup;\r\n\r\n\tpublic get f(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tprotected _commodityTypes: ICommodityType[];\r\n\tprotected _fb: FormBuilder;\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\tprivate _commodityTypeCalculator: string;\r\n\r\n\tconstructor(fb: FormBuilder, commodityTypes: ICommodityType[], $subscription: Subject<boolean>) {\r\n\t\tthis._fb = fb;\r\n\t\tthis._commodityTypes = commodityTypes;\r\n\t\tthis._subscriptions$ = $subscription;\r\n\t}\r\n\r\n\t/**\r\n\t * Determine crop type properties based on commodity type. The crop type\r\n\t * properties are used to fine tune validation of the form.\r\n\t * @param commodityTypeId\r\n\t * @returns\r\n\t */\r\n\tpublic determineCropProperties(commodityTypeId: number): void {\r\n\t\tlet commodityType: ICommodityType;\r\n\r\n\t\tif (!this._commodityTypes || this._commodityTypes.length === 0) {\r\n\t\t\tthrow new Error('commodity types array is empty');\r\n\t\t}\r\n\r\n\t\tcommodityType = this._commodityTypes.filter(x => x.Id === commodityTypeId)[0];\r\n\r\n\t\tif (!commodityType) {\r\n\t\t\treturn;  // no commodity type selected\r\n\t\t}\r\n\r\n\t\tthis._commodityTypeCalculator = commodityType.CommodityTypeCalculator;\r\n\r\n\t\tthis.f.CalculatorId.setValue(Planting.getCalculator(this._commodityTypeCalculator));\r\n\t\tthis.f.ShouldShowTreeCoefficients.setValue(CropType.areTreeCoefficientsRequired(this._commodityTypeCalculator));\r\n\t\tthis.f.IsTree.setValue(CropType.isTreeByInterface(this._commodityTypeCalculator));\r\n\t\tthis.f.IgnoresNFactors.setValue(CropType.ignoresNFactors(this._commodityTypeCalculator));\r\n\t\tthis.f.IsPerennial.setValue(CropType.isPerennialCalc(this._commodityTypeCalculator));\r\n\t\tthis.f.SpringLeafNutrientsRequired.setValue(CropType.areSpringLeafNutrientsRequired(this._commodityTypeCalculator));\r\n\r\n\t\tif (this.f.IsPerennial.value === false || this._commodityTypeCalculator === eCommodityTypeCalculators.caneberry) {\r\n\t\t\tthis.f.IsYearSpecific.setValue(true);\r\n\t\t} else {\r\n\t\t\tthis.f.IsYearSpecific.setValue(false);\r\n\t\t}\r\n\r\n\t\tthis.f.MaxAge.setValue(this.f.MaxAge.value); // refresh value\r\n\t}\r\n\r\n\t/**\r\n\t * Public to external components calling this class\r\n\t * @param ct\r\n\t * @returns formGroup\r\n\t */\r\n\tpublic initializeForm(ct: ICropTypeViewModel): FormGroup {\r\n\t\tif (!ct) {\r\n\t\t\tthrow new Error('crop type is empty');\r\n\t\t}\r\n\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tBasalKC: [ct.BasalKC, [Validators.required]],\r\n\t\t\tBedWidth: [ct.BedWidth],\r\n\t\t\tCanopyA: [ct.CanopyA],\r\n\t\t\tCanopyB: [ct.CanopyB],\r\n\t\t\tCanopyC: [ct.CanopyC],\r\n\t\t\tCanopyD: [ct.CanopyD],\r\n\t\t\tCanopyIntercept: [ct.CanopyIntercept],\r\n\t\t\tCanopyGMax: [ct.CanopyGMax, FormValidation.greaterThanValidator(0)],\r\n\t\t\tCanopyMaxFraction: [ct.CanopyMaxFraction],\r\n\t\t\tCanopyMin: [ct.CanopyMin],\r\n\t\t\tCommodityTypeId: [ct.CommodityTypeId, [Validators.required, Validators.min(1)]],\r\n\r\n\t\t\tCropSensitivity: [ct.CropSensitivity, [\r\n\t\t\t\tFormValidation.greaterThanValidator(0),\r\n\t\t\t\tValidators.max(3)\r\n\t\t\t]],\r\n\r\n\t\t\tDaysToEndDate: [ct.DaysToEndDate > 0 ? ct.DaysToEndDate : null],\r\n\r\n\t\t\tDripIrrigationFactor: [ct.DripIrrigationFactor, [Validators.required,\r\n\t\t\t\tValidators.max(1), Validators.min(0)]],\r\n\r\n\t\t\tEarlyFruit: [ct.EarlyFruit, [Validators.required]],\r\n\t\t\tFertilizerUseEfficiency: [ct.FertilizerUseEfficiency, { validators: [Validators.required], updateOn: 'blur' }],\r\n\r\n\t\t\tFloodIrrigationFactor: [ct.FloodIrrigationFactor, [Validators.required,\r\n\t\t\t\tValidators.max(1), Validators.min(0)]],\r\n\r\n\t\t\tGermDays: [ct.GermDays, [Validators.required] ],\r\n\r\n\t\t\tId: [ct.Id],\r\n\t\t\tInadequateSummerLeafN: [ct.InadequateSummerLeafN, { Validators: [Validators.required], updateOn: 'blur'}],\r\n\t\t\tIsMacroTunnelEnabled: [ct.IsMacroTunnelEnabled],\r\n\t\t\tIsNDependent: [ct.IsNDependent],\r\n\t\t\tIsPreviousCrop: [ct.IsPreviousCrop],\r\n\t\t\tIsStressable: [ct.IsStressable],\r\n\t\t\tKccov_int: [ct.Kccov_int, [Validators.required]],\r\n\t\t\tKccov_quad: [ct.Kccov_quad, [Validators.required]],\r\n\t\t\tKccov_slope: [ct.Kccov_slope, [Validators.required]],\r\n\t\t\tLeafSenesce: [ct.LeafSenesce, [Validators.required,\r\n\t\t\t\tFormValidation.greaterThanValidator(0),\r\n\t\t\t\tFormValidation.lessThanValidator(1)]],\r\n\t\t\tMaxAge: [ct.MaxAge], // required if perennial\r\n\t\t\tMaxDays: [ct.MaxDays > 0 ? ct.MaxDays : null],\r\n\t\t\tMaxRootDepth: [ct.MaxRootDepth, [Validators.required]],\r\n\t\t\tMaxUptake: [ct.MaxUptake, [FormValidation.greaterThanValidator(0), Validators.required]],\r\n\t\t\tMinRootDepth: [ct.MinRootDepth, [Validators.required]],\r\n\t\t\tName: [ct.Name, Validators.required],\r\n\r\n\t\t\tNCalculator: this._fb.group({\r\n\r\n\t\t\t\tCompostN: [ct.CompostN, { validators: [Validators.min(0)], updateOn: 'blur' }],\r\n\t\t\t\tCoverCropN: [ct.CoverCropN, { validators: [Validators.min(0)], updateOn: 'blur' }],\r\n\t\t\t\tManureN: [ct.ManureN, { validators: [Validators.min(0)], updateOn: 'blur' }],\r\n\t\t\t\tYieldTarget: [null, { validators: [Validators.min(0)], updateOn: 'blur' }],\r\n\t\t\t\tYieldTargetDisplayed: [null],\r\n\t\t\t\tTreeNutrientThresholds: this._fb.array([]),\r\n\t\t\t}),\r\n\r\n\t\t\tNFertilizerAdjustment: [ct.NFertilizerAdjustment, { Validators: [Validators.required], updateOn: 'blur'}],\r\n\t\t\tPerennialCanopies: this._fb.array([]),\r\n\t\t\tPerennialRootDepths: this._fb.array([]),\r\n\t\t\tPreviousCropName: [ct.PreviousCropName],\r\n\t\t\tPreHarvestSenesce: [ct.PreHarvestSenesce],\r\n\t\t\tRows: [ct.Rows],\r\n\t\t\tSeasonalKCs: this._fb.array([]),\r\n\r\n\t\t\tSprinklerIrrigationFactor: [ct.SprinklerIrrigationFactor, [Validators.required,\r\n\t\t\t\tValidators.max(1), Validators.min(0)]],\r\n\r\n\t\t\tStrawberryFertilizationInterval: [ct.StrawberryFertilizationInterval > 0 ?\r\n\t\t\t\tct.StrawberryFertilizationInterval : null, [Validators.required,\r\n\t\t\t\tFormValidation.greaterThanValidator(0)]],\r\n\r\n\t\t\tStressEnd: [ct.StressEnd],\r\n\t\t\tStressStart: [ct.StressStart],\r\n\t\t\tTargetTension1: [ct.TargetTension1],\r\n\t\t\tTargetTension2: [ct.TargetTension2],\r\n\t\t\tTargetTension3: [ct.TargetTension3],\r\n\t\t\tTargetTension4: [ct.TargetTension4],\r\n\t\t\tTreeInterceptCoefficient: [ct.TreeInterceptCoefficient, { updateOn: 'blur' }],\r\n\t\t\tTreeIlr4Coefficient: [ct.TreeIlr4Coefficient, { updateOn: 'blur' }],\r\n\t\t\tTreeIlr8Coefficient: [ct.TreeIlr8Coefficient, { updateOn: 'blur'}],\r\n\t\t\tTreeIlrProductCoefficient: [ct.TreeIlrProductCoefficient, { updateOn: 'blur'}],\r\n\t\t\tTreeLeafNCoefficient: [ct.TreeLeafNCoefficient, { updateOn: 'blur'}],\r\n\t\t\tVegetativeNDemands: this._fb.array([]),\r\n\t\t\tWaterStressEnd: [ct.WaterStressEnd],\r\n\t\t\tWaterStressStart: [ct.WaterStressStart],\r\n\t\t\tWetAreaDrip: [ct.WetAreaDrip, [Validators.required,\r\n\t\t\t\tValidators.min(0), Validators.max(100),\r\n\t\t\t\tPlantingSettingsValidator.mustBeAnInteger()]],\r\n\r\n\t\t\t// field(s) that won't be submitted\r\n\t\t\tIgnoresNFactors: [null],\r\n\t\t\tIsPerennial: [null],\r\n\t\t\tIsTree: [null],\r\n\t\t\tIsYearSpecific: [null],\r\n\t\t\tShouldShowTreeCoefficients: [null],\r\n\t\t\tSpringLeafNutrientsRequired: [null],\r\n\t\t\tCalculatorId: [null, [Validators.required]],\r\n\t\t});\r\n\r\n\t\tthis.determineCropProperties(this.f.CommodityTypeId.value);\r\n\r\n\t\tthis.form = this._fb.group({\r\n\t\t\t...this.form.controls,\r\n\t\t\tCanopyE: [ct.CanopyE, FormValidation.requiredIfStressable(this.form)],\r\n\t\t\tCanopyF: [ct.CanopyF, FormValidation.requiredIfStressable(this.form)],\r\n\t\t\tCovDensityFactor: [ct.CovDensityFactor, FormValidation.requiredIfTree(this.f.IsTree)],\r\n\r\n\t\t\tCropMineralizationRate: [ct.CropMineralizationRate > 0 ?\r\n\t\t\t\tct.CropMineralizationRate : null,\r\n\t\t\t\t[FormValidation.requiredIfNDependent(this.f.IsNDependent),\r\n\t\t\t\t\tFormValidation.greaterThanValidator(0)]],\r\n\r\n\t\t\tExcessiveSummerLeafN: [ct.ExcessiveSummerLeafN, { validators:\r\n\t\t\t\t[FormValidation.requiredIfTree(this.f.IsTree)],  updateOn: 'blur'}],\r\n\r\n\t\t\tFertA: [ct.FertA, [FormValidation.requiredIfNDependent(this.f.IsNDependent)]],\r\n\t\t\tFertB: [ct.FertB, [FormValidation.requiredIfNDependent(this.f.IsNDependent)]],\r\n\t\t\tFertYo: [ct.FertYo, [FormValidation.requiredIfNDependent(this.f.IsNDependent)]],\r\n\r\n\t\t\tHarvestIntervalFraction: [ct.HarvestIntervalFraction > 0 ?\r\n\t\t\t\tct.HarvestIntervalFraction : null, [FormValidation.requiredIfNDependent(this.f.IsNDependent),\r\n\t\t\t\tFormValidation.greaterThanValidator(0)]],\r\n\r\n\t\t\tMaxNRec: [ct.MaxNRec > 0 ? ct.MaxNRec : null,\r\n\t\t\t\t[FormValidation.greaterThanValidator(0),\r\n\t\t\t\tFormValidation.requiredIfNDependent(this.f.IsNDependent)]],\r\n\r\n\t\t\tNFertilizerFactorA: [ct.NFertilizerFactorA > 0 ? ct.NFertilizerFactorA : null,\r\n\t\t\t\t[FormValidation.requiredIfNFactors(this.f.IgnoresNFactors)]],\r\n\r\n\t\t\tNFertilizerFactorB: [ct.NFertilizerFactorB > 0 ? ct.NFertilizerFactorB : null,\r\n\t\t\t\t[FormValidation.requiredIfNFactors(this.f.IgnoresNFactors)]],\r\n\r\n\t\t\tNFertilizerFactorC: [ct.NFertilizerFactorC > 0 ? ct.NFertilizerFactorC : null,\r\n\t\t\t\t[FormValidation.requiredIfNFactors(this.f.IgnoresNFactors)]],\r\n\r\n\t\t\tNFertilizerFactorD: [ct.NFertilizerFactorD > 0 ? ct.NFertilizerFactorD : null,\r\n\t\t\t\t[FormValidation.requiredIfNFactors(this.f.IgnoresNFactors)]],\r\n\r\n\t\t\tNUptakeThreshold: [ct.NUptakeThreshold > 0 ? ct.NUptakeThreshold : null,\r\n\t\t\t\t[FormValidation.requiredIfNFactors(this.f.IgnoresNFactors)]],\r\n\r\n\t\t\tPrevCropK: [ct.PrevCropK > 0 ? ct.PrevCropK : null],\r\n\r\n\t\t\tRootDepthThreshold: [ct.RootDepthThreshold > 0 ? ct.RootDepthThreshold : null,\r\n\t\t\t\t[FormValidation.requiredIfNDependentAndNotTree(this.f.IsNDependent, this.f.IsTree)]],\r\n\r\n\t\t\tSoilNRatioA: [ct.SoilNRatioA > 0 ? ct.SoilNRatioA : null,\r\n\t\t\t\t[FormValidation.requiredIfNFactors(this.f.IgnoresNFactors)]],\r\n\r\n\t\t\tSoilNRatioB: [ct.SoilNRatioB > 0 ? ct.SoilNRatioB : null,\r\n\t\t\t\t[FormValidation.requiredIfNFactors(this.f.IgnoresNFactors)]],\r\n\r\n\t\t\tSoilNRatioC: [ct.SoilNRatioC > 0 ? ct.SoilNRatioC : null,\r\n\t\t\t\t[FormValidation.requiredIfNFactors(this.f.IgnoresNFactors)]],\r\n\r\n\t\t\tSoilNThreshold: [ct.SoilNThreshold > 0 ? ct.SoilNThreshold : null,\r\n\t\t\t\t[FormValidation.requiredIfNDependentAndNotTree(this.f.IsNDependent, this.f.IsTree)]],\r\n\r\n\t\t\tSoilNThresholdFraction: [ct.SoilNThresholdFraction > 0 ?\r\n\t\t\t\tct.SoilNThresholdFraction : null,\r\n\t\t\t\t[FormValidation.requiredIfNDependentAndNotTree(this.f.IsNDependent, this.f.IsTree)]],\r\n\r\n\t\t\tSoilNThresholdFractionMid: [ct.SoilNThresholdFractionMid > 0 ?\r\n\t\t\t\tct.SoilNThresholdFractionMid : null,\r\n\t\t\t\t[FormValidation.requiredIfNDependentAndNotTree(this.f.IsNDependent, this.f.IsTree)]],\r\n\r\n\t\t\tSoilNThresholdLate: [ct.SoilNThresholdLate > 0 ? ct.SoilNThresholdLate : null,\r\n\t\t\t\t[FormValidation.requiredIfNDependentAndNotTree(this.f.IsNDependent, this.f.IsTree)]],\r\n\r\n\t\t\tSoilNThresholdMid: [ct.SoilNThresholdMid > 0 ? ct.SoilNThresholdMid : null,\r\n\t\t\t\t[FormValidation.requiredIfNDependentAndNotTree(this.f.IsNDependent, this.f.IsTree)]],\r\n\r\n\t\t\tUptakeConstant: [ct.UptakeConstant ? ct.UptakeConstant : 0,\r\n\t\t\t\t[FormValidation.requiredIfNDependent(this.f.IsNDependent)]],\r\n\r\n\t\t\tUptakeFactor: [ct.UptakeFactor ? ct.UptakeFactor : 0,\r\n\t\t\t\t{ Validators: [FormValidation.requiredIfNDependent(this.f.IsNDependent)],\r\n\t\t\t\t\tupdateOn: 'blur' }],\r\n\r\n\t\t\tWetAreaMicroSprinkler: [ct.WetAreaMicroSprinkler,\r\n\t\t\t\t[FormValidation.requiredIfTree(this.f.IsTree), Validators.min(0),\r\n\t\t\t\tValidators.max(100), PlantingSettingsValidator.mustBeAnInteger()]],\r\n\r\n\t\t});\r\n\r\n\t\tthis.setupConditionalValidators();\r\n\r\n\t\tthis.f.MaxAge.setValidators(this._requiredIfNotYearSpecific(this.form));\r\n\r\n\t\tif (ct.VegetativeNDemands && ct.VegetativeNDemands.length > 0) {\r\n\t\t\tfor (let demand of ct.VegetativeNDemands) {\r\n\t\t\t\t(this.f.VegetativeNDemands as FormArray).\r\n\t\t\t\t\tpush(this._getVegetativeDemandFormGroup(demand));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (ct.TreeNutrientThresholds && ct.TreeNutrientThresholds.length > 0) {\r\n\t\t\tfor (let threshold of ct.TreeNutrientThresholds) {\r\n\t\t\t\t(this.form.get('NCalculator').get('TreeNutrientThresholds') as FormArray).\r\n\t\t\t\t\tpush(this._getThresholdFormGroup(threshold));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (ct.SeasonalKCs && ct.SeasonalKCs.length > 0) {\r\n\t\t\tfor (let kc of ct.SeasonalKCs) {\r\n\t\t\t\t(this.f.SeasonalKCs as FormArray).\r\n\t\t\t\t\tpush(this._getSeasonalKCFormGroup(kc));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (ct.PerennialRootDepths && ct.PerennialRootDepths.length > 0) {\r\n\t\t\tfor (let rootDepth of ct.PerennialRootDepths) {\r\n\t\t\t\t(this.f.PerennialRootDepths as FormArray).\r\n\t\t\t\t\tpush(this._getPerennialRootDepthFormGroup(rootDepth));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (ct.PerennialCanopies && ct.PerennialCanopies.length > 0) {\r\n\t\t\tfor (let item of ct.PerennialCanopies) {\r\n\t\t\t\t(this.f.PerennialCanopies as FormArray).\r\n\t\t\t\t\tpush(this._getPerennialCanopiesFormGroup(item));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (ct.Id) {\r\n\t\t\tthis.form.markAsDirty();\r\n\t\t}\r\n\r\n\t\treturn this.form;\r\n\t}\r\n\r\n\tprotected setupConditionalValidators(): void {\r\n\t\tif (this.f.IsYearSpecific.value) {\r\n\t\t\tthis.f.MinRootDepth.enable();\r\n\t\t\tthis.f.MaxRootDepth.enable();\r\n\t\t} else {\r\n\t\t\tthis.f.MinRootDepth.disable();\r\n\t\t\tthis.f.MaxRootDepth.disable();\r\n\t\t}\r\n\r\n\t\tif (this.f.CommodityTypeId.value === eCommodityTypes.ALFALFA) {\r\n\t\t\tthis.f.BasalKC.enable();\r\n\t\t} else {\r\n\t\t\tthis.f.BasalKC.disable();\r\n\t\t}\r\n\r\n\t\tif (this.f.IsTree.value) {\r\n\t\t\tthis.f.FertilizerUseEfficiency.enable();\r\n\t\t\tthis.f.InadequateSummerLeafN.enable();\r\n\t\t\tthis.f.Kccov_int.enable();\r\n\t\t\tthis.f.Kccov_quad.enable();\r\n\t\t\tthis.f.Kccov_slope.enable();\r\n\t\t\tthis.f.LeafSenesce.enable();\r\n\t\t\tthis.f.NFertilizerAdjustment.enable();\r\n\t\t\tthis.f.WetAreaDrip.enable();\r\n\t\t} else {\r\n\t\t\tthis.f.FertilizerUseEfficiency.disable();\r\n\t\t\tthis.f.InadequateSummerLeafN.disable();\r\n\t\t\tthis.f.Kccov_int.disable();\r\n\t\t\tthis.f.Kccov_quad.disable();\r\n\t\t\tthis.f.Kccov_slope.disable();\r\n\t\t\tthis.f.LeafSenesce.disable();\r\n\t\t\tthis.f.NFertilizerAdjustment.disable();\r\n\t\t\tthis.f.WetAreaDrip.disable();\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\tthis.f.StressStart.setValidators([FormValidation.greaterThanValidator(0),\r\n\t\t\tValidators.max(1), FormValidation.lessThanValidatorControl(this.f.StressEnd)]);\r\n\r\n\t\tthis.f.StressEnd.setValidators([FormValidation.greaterThanValidator(0),\r\n\t\t\tFormValidation.greaterThanValidatorControl(this.f.StressStart),\r\n\t\t\tValidators.max(1)]);\r\n\t\t\t**/\r\n\r\n\t\t/**\r\n\t\tif (this.f.IsTree.value || this.f.CalculatorId.value === eCalculators.TOMATO) {\r\n\t\t\tthis.f.StressStart.enable();\r\n\t\t\tthis.f.StressEnd.enable();\r\n\t\t} else {\r\n\t\t\tthis.f.StressStart.disable();\r\n\t\t\tthis.f.StressEnd.disable();\r\n\t\t}\r\n\r\n\t\t**/\r\n\r\n\t\tif (this.f.CalculatorId.value === eCalculators.TOMATO) {\r\n\t\t\tthis.f.EarlyFruit.enable();\r\n\t\t} else {\r\n\t\t\tthis.f.EarlyFruit.disable();\r\n\t\t}\r\n\r\n\t\tif (this.f.CalculatorId.value === eCalculators.STRAWBERRY ||\r\n\t\t\tthis.f.CalculatorId.value === eCalculators.TOMATO ) {\r\n\r\n\t\t\tthis.f.StrawberryFertilizationInterval.enable();\r\n\t\t} else {\r\n\t\t\tthis.f.StrawberryFertilizationInterval.disable();\r\n\t\t}\r\n\r\n\t\tif (this.f.IsNDependent.value && !this.f.IsTree.value) {\r\n\t\t\tthis.f.MaxUptake.enable();\r\n\t\t\tthis.f.CropMineralizationRate.enable();\r\n\t\t\tthis.f.PrevCropK.enable();\r\n\t\t} else {\r\n\t\t\tthis.f.MaxUptake.disable();\r\n\t\t\tthis.f.CropMineralizationRate.disable();\r\n\t\t\tthis.f.PrevCropK.disable();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getPerennialCanopiesFormGroup(x: IPerennialCanopy): FormGroup {\r\n\t\tlet result: FormGroup;\r\n\r\n\t\tresult = this._fb.group({\r\n\t\t\tId: [x.Id],\r\n\t\t\tCropTypeId: [x.CropTypeId],\r\n\t\t\tAge: [x.Age],\r\n\t\t\tCanopyA: [x.CanopyA],\r\n\t\t\tCanopyB: [x.CanopyB],\r\n\t\t\tCanopyE: [x.CanopyE],\r\n\t\t\tCanopyF: [x.CanopyF],\r\n\t\t\tCanopyGMax: [x.CanopyGMax],\r\n\t\t\tCanopyMaxFraction: [x.CanopyMaxFraction]\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _getPerennialRootDepthFormGroup(x: IPerennialRootDepth): FormGroup {\r\n\t\tlet result: FormGroup;\r\n\r\n\t\tresult = this._fb.group({\r\n\t\t\tId: [x.Id],\r\n\t\t\tCropTypeId: [x.CropTypeId],\r\n\t\t\tYearMin: [x.YearMin],\r\n\t\t\tYearMax: [x.YearMax],\r\n\t\t\tMax: [x.Max],\r\n\t\t\tMin: [x.Min]\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _getSeasonalKCFormGroup(kc: ISeasonalKC): FormGroup {\r\n\t\tlet result: FormGroup;\r\n\r\n\t\tresult = this._fb.group({\r\n\t\t\tId: [kc.Id],\r\n\t\t\tCropTypeId: [kc.CropTypeId],\r\n\t\t\tMonth: [kc.Month],\r\n\t\t\tNiToMaxCanopy: [kc.NiToMaxCanopy],\r\n\t\t\tDensity: [kc.Density],\r\n\t\t\tCover: [kc.Cover]\r\n\t\t});\r\n\r\n\t\tif (this.f.CommodityTypeId.value === eCommodityTypes.ALFALFA) {\r\n\t\t\tresult.get('NiToMaxCanopy').setValidators(Validators.required);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _getThresholdFormGroup(x: ITreeNutrientThreshold): FormGroup {\r\n\t\tlet result: FormGroup;\r\n\r\n\t\tresult = this._fb.group({\r\n\t\t\tId: [x.Id],\r\n\t\t\tCropTypeId: [x.CropTypeId],\r\n\t\t\tNutrientId: [x.NutrientId],\r\n\t\t\tSeasonAverage: [x.SeasonAverage, { updateOn: 'blur' }],\r\n\t\t\tThreshold: [x.Threshold, { updateOn: 'blur' }],\r\n\t\t\tRecorded: [x.Recorded, { updateOn: 'blur' }],\r\n\t\t\tTissueFactor: [x.TissueFactor],\r\n\t\t\tTissueCoefficientA: [x.TissueCoefficientA],\r\n\t\t\tTissueCoefficientB: [x.TissueCoefficientB],\r\n\t\t\tNutrientSymbol: [x.NutrientSymbol],\r\n\t\t\tNutrientUnit: [x.NutrientUnit],\r\n\t\t\tNutrientName: [x.NutrientName]\r\n\t\t});\r\n\r\n\t\tif (this._shouldSetTreeNutrientThresholdValidation(x)) {\r\n\t\t\tresult.get('SeasonAverage').setValidators(Validators.required);\r\n\t\t\tresult.get('Threshold').setValidators(Validators.required);\r\n\t\t} else {\r\n\t\t\tresult.get('SeasonAverage').clearValidators();\r\n\t\t\tresult.get('Threshold').clearValidators();\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _shouldSetTreeNutrientThresholdValidation(threshold: ITreeNutrientThreshold): boolean {\r\n\t\tif (!this.f.SpringLeafNutrientsRequired.value) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tswitch (this._commodityTypeCalculator) {\r\n\t\t\tcase eCommodityTypeCalculators.pistachio:\r\n\t\t\t\treturn false;\r\n\t\t\tcase eCommodityTypeCalculators.walnut:\r\n\t\t\t\tif (threshold.NutrientSymbol === eNutrientSymbols.Boron) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\tcase eCommodityTypeCalculators.almond:\r\n\t\t\t\tif (threshold.NutrientSymbol === eNutrientSymbols.Phosphorous || eNutrientSymbols.Sulfur) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getVegetativeDemandFormGroup(x: IVegetativeNDemand): FormGroup {\r\n\t\tlet result: FormGroup;\r\n\r\n\t\tresult = this._fb.group({\r\n\t\t\tId: [x.Id],\r\n\t\t\tCropTypeId: [x.CropTypeId],\r\n\t\t\tYearMin: [x.YearMin],\r\n\t\t\tYearMax: [x.YearMax],\r\n\t\t\tLow: [x.Low],\r\n\t\t\tHigh: [x.High]\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _requiredIfNotYearSpecific(fg: FormGroup): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet isYearSpecific: boolean;\r\n\t\t\tconst errorName = 'requiredIfNDependnt';\r\n\r\n\t\t\tisYearSpecific = fg.get('IsYearSpecific').value;\r\n\r\n\t\t\tif (!isYearSpecific) {\r\n\t\t\t\tvalid = control.value !== null  ? true : false;\r\n\t\t\t} else {\r\n\t\t\t\tFormValidation.removeErrorFromContrl(control, errorName);\r\n\t\t\t\tvalid = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {errorName: {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic getPerennialRootDepthIndex(age: number): number {\r\n\t\tlet result: number;\r\n\r\n\t\tif (!this.f.PerennialRootDepths || (this.f.PerennialRootDepths as\r\n\t\t\tFormArray).length === 0 || age === null || age === undefined) {\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = (this.f.PerennialRootDepths as FormArray).controls.\r\n\t\t\tfindIndex(x => age === x.get('YearMin').value ||\r\n\t\t\t(x.get('YearMax').value - x.get('YearMin').value > 1 && age\r\n\t\t\t>= x.get('YearMin').value));\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic getPerennialCanopyIndex(age: number): number {\r\n\t\tlet result: number;\r\n\r\n\t\tif (!this.f.PerennialCanopies || (this.f.PerennialCanopies as\r\n\t\t\tFormArray).length === 0 || age === null || age === undefined) {\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (age === 0) {\r\n\t\t\tresult = (this.f.PerennialCanopies as FormArray).controls.\r\n\t\t\tfindIndex(x => x.get('Age').value === age);\r\n\t\t} else {\r\n\t\t\tlet ar: AbstractControl[];\r\n\t\t\tlet id: number;\r\n\r\n\t\t\tar = (this.f.PerennialCanopies as FormArray).controls\r\n\t\t\t\t.filter(x => x.get('Age').value <= age).sort((a, b) => {\r\n\t\t\t\treturn b.get('Age').value - a.get('Age').value;\r\n\t\t\t});\r\n\r\n\t\t\tid = (ar[0].value as IPerennialCanopy).Id;\r\n\r\n\t\t\tresult = (this.f.PerennialCanopies as FormArray).controls.\r\n\t\t\t\tfindIndex(x => x.get('Id').value === id);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Find the index of match in vegetative N Demand array\r\n\t * @param age crop age\r\n\t * @returns array index\r\n\t */\r\n\tpublic getVegetativeNDemandIndex(age: number): number {\r\n\t\tlet result: number;\r\n\r\n\t\tif (age === null || age === undefined ||\r\n\t\t\t(this.f.VegetativeNDemands as FormArray).length === 0) { // age 0 is valid\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = (this.f.VegetativeNDemands as FormArray).controls.\r\n\t\t\tfindIndex(x => age + 1 >= x.get('YearMin').value\r\n\t\t\t&& age + 1 <= x.get('YearMax').value);\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { ICropType, ICropTypeViewModel } from '../../models/crop-type/interfaces';\r\nimport { ICropSettingsForm } from '../planting-settings/planting-settings-form.interfaces';\r\n\r\nexport class CropTypeViewmodelConverter {\r\n\tpublic static convert(cropTypeForm: ICropSettingsForm): ICropTypeViewModel {\r\n\t\tlet result: ICropTypeViewModel;\r\n\r\n\t\tresult = cropTypeForm;\r\n\t\tresult.CompostN = cropTypeForm.NCalculator.CompostN;\r\n\t\tresult.CoverCropN = cropTypeForm.NCalculator.CoverCropN;\r\n\t\tresult.ManureN = cropTypeForm.NCalculator.ManureN;\r\n\t\tresult.TreeNutrientThresholds = cropTypeForm.NCalculator.TreeNutrientThresholds;\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\t{{'Delete' | translate }} {{'Crop Type' | translate }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<div class=\"bk-modal__remove-text\">\r\n\t\t\t{{'Are you sure you want to delete' | translate }} <strong>{{ cropTypeName }}</strong>?\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t(click)=\"close()\">\r\n\t\t\t{{'Cancel' | translate }}\r\n\t\t</button>\r\n\t\t<button class=\"bk-button bk-button--medium\"\r\n\t\t\t(click)=\"delete()\">\r\n\t\t\t{{(isSaving ? 'Deleting' : 'Delete') | translate }} {{'Crop Type' | translate }}\r\n             <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { CMError } from '../../interfaces/interfaces';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { eNotificationTypes } from '../../interfaces/constants';\r\nimport { CropTypeService } from '../../models/crop-type/service';\r\nimport { CropTypeUpdateService } from './cropType.update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ap-crop-type-delete-confirmation',\r\n\ttemplateUrl: 'delete-confirmation.html'\r\n})\r\n\r\nexport class CropTypeDeleteConfirmationDialog implements OnInit {\r\n\r\n\tprivate _id: number;\r\n\tpublic cropTypeName: string;\r\n\tpublic isSaving = false;\r\n\r\n\tpublic constructor(\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<CropTypeDeleteConfirmationDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { id: number, name: string },\r\n\t\tprivate _cropTypeService: CropTypeService,\r\n\t\tprivate _updateService: CropTypeUpdateService,\r\n\t\tprivate _notificationService: NotificationService\r\n\t) {\r\n\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.cropTypeName = this._data.name;\r\n\t\tthis._id = this._data.id;\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._cropTypeService.delete(this._id)\r\n\t\t.then((response: CMError) => {\r\n\t\t\tthis.isSaving = false;\r\n\r\n\t\t\tif (response && response.message) {\r\n\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\tmessage: response.message\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\t\tmessage: 'Your crop type was successfully deleted.'\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._updateService.updateList(); // refresh parent view\r\n\t\t\t}\r\n\r\n\t\t\tthis._dialog.closeAll();\r\n\t\t});\r\n\t}\r\n\r\n\tpublic close() {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\t<form #f=\"ngForm\">\r\n\t\t<h4 mat-dialog-title>\r\n\t\t\t{{'Perennial Canopy Parameters' | translate }}\r\n\t\t</h4>\r\n\r\n\t\t<div mat-dialog-content>\r\n\t\t\t\r\n\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t<li>\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Crop Age' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<select class=\"bk-modal__field\"\r\n\t\t\t\t\t\tname=\"Age\"\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t[(ngModel)]=\"model.Age\">\r\n\t\t\t\r\n\t\t\t\t\t\t<option [ngValue]=\"null\"\r\n\t\t\t\t\t\t\tselected>\r\n\t\t\t\t\t\t\t{{'Select One' | translate }}\r\n\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t<option *ngFor=\"let age of ages\"\r\n\t\t\t\t\t\t\t[ngValue]=\"age.key\">\r\n\t\t\t\t\t\t\t{{age.value}}\r\n\t\t\t\t\t\t</option>\r\n\t\t\t\t\t</select>\r\n\t\t\t\t</li>\r\n\t\t\t</ul>\r\n\r\n\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t<li>\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Canopy A' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"CanopyA\"\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t[(ngModel)]=\"model.CanopyA\" />\r\n\t\t\t\t</li>\r\n\t\t\t\t<li>\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Canopy B' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"CanopyB\"\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t[(ngModel)]=\"model.CanopyB\" />\r\n\t\t\t\t</li>\r\n\t\t\t\t<li>\r\n\t\t\t\t\t<ng-container *ngIf=\"commodityTypeId !== COMMODITY_TYPES.CANEBERRY\">\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Canopy E' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"CanopyE\"\r\n\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t[(ngModel)]=\"model.CanopyE\" />\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li>\r\n\t\t\t\t\t<ng-container *ngIf=\"commodityTypeId !== COMMODITY_TYPES.CANEBERRY\">\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t\t{{'Canopy F' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tname=\"CanopyF\"\r\n\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t[(ngModel)]=\"model.CanopyF\" />\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</li>\r\n\t\t\t</ul>\r\n\t\t\t<ul class=\"bk-form__side-by-side\">\r\n\t\t\t\t<li>\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Canopy Max' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"CanopyGMax\"\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t[(ngModel)]=\"model.CanopyGMax\" />\r\n\t\t\t\t</li>\r\n\t\t\t\t<li>\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Canopy Max Fraction' | translate }}\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"CanopyMaxFraction\"\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t[(ngModel)]=\"model.CanopyMaxFraction\" />\r\n\t\t\t\t</li>\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\r\n\t\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t\t(click)=\"close()\">\r\n\t\t\t\t{{'Cancel' | translate }}\r\n\t\t\t</button>\r\n\t\t\t<button class=\"bk-button bk-button--medium\"\r\n\t\t\t\t[disabled]='!f.form.valid'\r\n\t\t\t\t(click)=\"save()\">\r\n\t\t\t\t{{'Save' | translate }}\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</form>\r\n</div>\r\n","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { eCommodityTypes} from '../../interfaces/constants';\r\nimport { CropTypeUpdateService } from './cropType.update.service';\r\nimport { IPerennialCanopy } from '../../models/crop-type/interfaces';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ISelectOptions } from '../../interfaces/abstract';\r\nimport { PlantingAdvancedEdit } from '../planting-settings/plantingAdvancedEdit';\r\nimport { FormComponent } from '../shared/form/form';\r\nimport { TranslateService } from '../localization/service';\r\nimport { TranslatePipe } from '../../pipes/translate.pipe';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ap-perennial-canopy',\r\n\ttemplateUrl: 'perennial-canopy.html'\r\n})\r\n\r\nexport class PerennialCanopyDialog extends FormComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic model: IPerennialCanopy;\r\n\tpublic commodityTypeId: number;\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\tpublic ages: ISelectOptions[];\r\n\r\n\tpublic formErrors = {\r\n\t\t'Age': '',\r\n\t};\r\n\r\n\tpublic validationMessages = {\r\n\t\t'Age': {\r\n\t\t\t'required': 'Age is required.',\r\n\t\t},\r\n\t};\r\n\r\n\tpublic constructor(\r\n\t\tprivate _dialogRef: MatDialogRef<PerennialCanopyDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { model: IPerennialCanopy, commodityTypeId: number,\r\n\t\t\tmaxAge: number},\r\n\t\tprivate _updateService: CropTypeUpdateService,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _translateService: TranslateService\r\n\t) {\r\n\t\tsuper();\r\n\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._dialogRef.backdropClick().pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\t// Close the dialog or show keep/discard\r\n\t\t\tthis._dialogRef.close();\r\n\t\t});\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tif (!this._data) {\r\n\t\t\tthrow new Error('data is empty');\r\n\t\t}\r\n\r\n\t\tthis.model = this._data.model;\r\n\t\tthis.commodityTypeId = this._data.commodityTypeId;\r\n\t\tthis.ages = PlantingAdvancedEdit.generateAgeOfCropDropdown(this._data.maxAge, this._translateService);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic save(): void {\r\n\t\tif (this.model.Id) {\r\n\t\t\tthis._updateService.updatePerennialCanopy(this.model);\r\n\t\t} else {\r\n\t\t\tthis._updateService.addPerennialCanopy(this.model);\r\n\t\t}\r\n\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tpublic close() {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","<admin-nav></admin-nav>\r\n\r\n<div *ngIf='cropType'\r\n\tclass=\"bk-admin__page\">\r\n\t\r\n\t<div class=\"bk-form__header\">\r\n\t\t<h5 class=\"bk-text--gray\">\r\n\t\t\t{{ 'Edit' | translate}} {{ 'Previous Crop' | translate}}\r\n\t\t</h5>\r\n\t</div>\r\n\r\n\t<form #f=\"ngForm\">\r\n\t\t<div class=\"bk-form__wrapper\" >\r\n\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Name' | translate }}\r\n\t\t\t</label>\r\n\t\t\t<input class=\"bk-modal__field bk-form__input-text--wide\"\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\trequired\r\n\t\t\t\tname=\"Name\"\r\n\t\t\t\t[(ngModel)]=\"cropType.Name\"/>\r\n\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Commodity Type' | translate }}\r\n\t\t\t</label>\r\n\t\t\t<select class=\"bk-modal__field\"\r\n\t\t\t\tname=\"CommodityTypeId\"\r\n\t\t\t\trequired\r\n\t\t\t\t[(ngModel)]=\"cropType.CommodityTypeId\">\r\n\r\n\t\t\t\t<option [ngValue]=\"0\"\r\n\t\t\t\t\tselected>\r\n\t\t\t\t\t{{'Select One' | translate }}\r\n\t\t\t\t</option>\r\n\t\t\t\t<option *ngFor=\"let commodityType of commodityTypes\"\r\n\t\t\t\t\t[ngValue]=\"commodityType.Id\">\r\n\t\t\t\t\t{{commodityType.Name}}\r\n\t\t\t\t</option>\r\n\t\t\t</select>\r\n\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Crop Mineralization Rate' | translate }}\r\n\t\t\t</label>\r\n\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\ttype=\"number\"\r\n\t\t\t\tname=\"CropMineralizationRate\"\r\n\t\t\t\trequired\r\n\t\t\t\t[(ngModel)]=\"cropType.CropMineralizationRate\" />\r\n\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Previous Crop K' | translate }}\r\n\t\t\t</label>\r\n\t\t\t<input class=\"bk-modal__field bk-form__input-text--float\"\r\n\t\t\t\ttype=\"number\"\r\n\t\t\t\tname=\"PrevCropK\"\r\n\t\t\t\trequired\r\n\t\t\t\t[(ngModel)]=\"cropType.PrevCropK\" />\r\n\t\t</div>\r\n\t\t<!-- FOOTER -->\r\n\r\n\t\t<div class=\"bk-form__footer modal-footer bk-modal__footer\">\r\n\t\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t\t(click)=\"goBack()\">\r\n\t\t\t\t{{ 'Cancel' | translate }}\r\n\t\t\t</button>\r\n\r\n\t\t\t<button\r\n\t\t\t\tclass=\"bk-button\"\r\n\t\t\t\t[disabled]='!f.form.valid'\r\n\t\t\t\t(click)=\"update()\">\r\n\t\t\t\t{{ 'Save' | translate }}\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</form>\r\n</div>","\r\nimport { OnInit, Component, OnDestroy } from '@angular/core';\r\nimport { ActivatedRoute, Router, NavigationExtras } from '@angular/router';\r\nimport { CropTypeService } from '../../models/crop-type/service';\r\nimport { ICropTypeViewModel } from '../../models/crop-type/interfaces';\r\nimport { FormComponent } from '../shared/form/form';\r\nimport { of, Subject } from 'rxjs';\r\nimport { ICommodityType } from '../../models/commodity-type/interfaces';\r\nimport { CommodityService } from '../../models/commodity-type/service';\r\nimport { eNotificationTypes } from '../../interfaces/constants';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { TokenService } from '../../services/token.service';\r\nimport { cropTypeViewTypes } from './crop-types';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'previous-crop-detail',\r\n\ttemplateUrl: 'previous-crop-detail.html'\r\n})\r\n\r\nexport class PreviousCropDetailComponent extends FormComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic commodityTypes: ICommodityType[];\r\n\tpublic cropType: ICropTypeViewModel;\r\n\r\n\tpublic formErrors = {\r\n\t\t'Name': '',\r\n\t\t'CommodityTypeId': '',\r\n\r\n\t\t'MaxNRec': '',\r\n\t\t'PrevCropK': '',\r\n\t};\r\n\r\n\tpublic validationMessages = {\r\n\t\t'Name': { 'required': 'Name is required.' },\r\n\t\t'CommodityTypeId': { 'required': 'Commodity type is required' },\r\n\r\n\t\t'MaxNRec': {\r\n\t\t\t'required': 'MaxNRec is required.',\r\n\t\t\t'minNumber': 'MaxNRec must be greater than 0.'\r\n\t\t},\r\n\t\t'PrevCropK': { 'required': 'PrevCropK is required' },\r\n\t};\r\n\r\n\t// private members\r\n\r\n\tprivate _cropTypeId: number;\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _router: Router,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate _route: ActivatedRoute,\r\n\t\tprivate _navigationRouter: Router,\r\n\t\tprivate _cropTypeService: CropTypeService,\r\n\t\tprivate _commodityService: CommodityService,\r\n\t\tprivate _notificationService: NotificationService\r\n\t) {\r\n\t\tsuper();\r\n\r\n\t\tif (this._tokenService.isAuthenticated() === false) {\r\n\t\t\tthis._router.navigate(['login']);\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis._route.queryParams.pipe(takeUntil(this._subscriptions$)).subscribe(params => {\r\n\t\t\tthis._cropTypeId = params['id'];\r\n\r\n\t\t\tif (this._cropTypeId) {\r\n\t\t\t\tthis.getEditModel(this._cropTypeId).then(() => {\r\n\t\t\t\t\tthis._commodityService.list().then((response) => {\r\n\t\t\t\t\t\tthis.commodityTypes = response;\r\n\t\t\t\t\t\tthis.isDirtyOnLoad = true;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t})\r\n\t\t\t} else {\r\n\t\t\t\tthis.getCreateModel().then(() => {\r\n\t\t\t\t\tthis._commodityService.list().then((response) => {\r\n\t\t\t\t\t\tthis.commodityTypes = response;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\t/**\r\n     * Get initial parameter defaults for creating a new crop type\r\n     */\r\n\tprivate async getCreateModel(): Promise<void> {\r\n\r\n\t\tlet response: ICropTypeViewModel = await this._cropTypeService.getCreateModel();\r\n\t\tthis.cropType = response;\r\n\t\tthis.cropType.IsPreviousCrop = true;\r\n\t}\r\n\r\n\t/**\r\n     * get cropTypeViewModel from backend to edit\r\n     */\r\n\tprivate async getEditModel(id: number): Promise<void> {\r\n\t\tlet response: ICropTypeViewModel;\r\n\r\n\t\tif (!id) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tresponse = await this._cropTypeService.getEditModel(id);\r\n\r\n\t\tif (!response) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tthis.cropType = response;\r\n\t}\r\n\r\n\tpublic update() {\r\n\t\tif (this.cropType.Id) {\r\n\t\t\tthis._cropTypeService.update(this.cropType).then(() => {\r\n\t\t\t\tthis._notifyAfterSave();\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis._cropTypeService.create(this.cropType).then(() => {\r\n\t\t\t\tthis._notifyAfterSave();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _notifyAfterSave() {\r\n\t\tlet navigationExtras: NavigationExtras = {\r\n\t\t\tqueryParams: {\r\n\t\t\t\t'viewType': cropTypeViewTypes.PREVIOUS_CROP,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._notificationService.generateNotifcation({\r\n\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\tmessage: 'Crop Type ' + this.cropType.Name + ' was successfully saved'\r\n\t\t});\r\n\r\n\t\tthis._navigationRouter.navigate(['CropTypes'], navigationExtras);\r\n\t}\r\n\r\n\t/**\r\n     * Back button => back to list view\r\n     */\r\n\tpublic goBack() {\r\n\t\tlet navigationExtras: NavigationExtras = {\r\n\t\t\tqueryParams: {\r\n\t\t\t\t'viewType': cropTypeViewTypes.PREVIOUS_CROP,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._navigationRouter.navigate(['CropTypes'], navigationExtras);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\r\n    <button type=\"button\"\r\n        class=\"bk-dialog__close\"\r\n        (click)=\"cancel()\">\r\n\r\n        &times;\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>\r\n        <ng-container *ngIf=\"!id\">\r\n            {{ 'Add' | translate }}\r\n        </ng-container>\r\n        <ng-container *ngIf=\"id && view !== cutEventViews.DELETE_CONFIRMATION\">\r\n            {{ 'Edit' | translate }}\r\n        </ng-container>\r\n        <ng-container *ngIf=\"id && view === cutEventViews.DELETE_CONFIRMATION\">\r\n            {{ 'Delete' | translate }}\r\n        </ng-container>\r\n        {{ 'Cutting Event' | translate}}\r\n    </h4>\r\n\r\n    <div *ngIf=\"view === cutEventViews.FORM\"\r\n        mat-dialog-content>\r\n\r\n        <form [formGroup]=\"form\" class=\"bk-form\">\r\n            <mat-form-field appearance=\"fill\"\r\n                class=\"mat-form-field--short\">\r\n                <mat-label>{{'Event Date' | translate }}</mat-label>\r\n                <input matInput [matDatepicker]=\"picker\"\r\n                    required\r\n                    [max]=\"maxDate\"\r\n                    formControlName=\"EventDate\">\r\n                <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n                <mat-datepicker #picker></mat-datepicker>\r\n                <mat-error *ngIf=\"f.EventDate.invalid && (f.EventDate.dirty || f.EventDate.touched)\">\r\n                    <div *ngIf=\"f.EventDate.errors.required\">\r\n                        {{ 'Event date is required' | translate }}\r\n                    </div>\r\n                    <div *ngIf=\"f.EventDate.errors.daysAfterGerminationError\">\r\n                        {{ 'Event date cannot be on or earlier than germination date' | translate }} ({{ germinationDate | date:'shortDate' }})\r\n                    </div>\r\n                </mat-error>\r\n            </mat-form-field>\r\n\r\n            <ng-container *ngIf=\"isFutureEvent === false\">\r\n                <mat-form-field appearance=\"fill\"\r\n                    class=\"mat-form-field--short\">\r\n                    <mat-label>\r\n                        {{ 'Crop Stage' | translate }}\r\n                    </mat-label>\r\n                    <mat-select formControlName=\"MaturityId\">\r\n                        <mat-option *ngFor=\"let maturity of maturities\"\r\n                            [value]=\"maturity.Id\">\r\n                            {{maturity.Name}}\r\n                        </mat-option>\r\n                    </mat-select>\r\n                </mat-form-field>\r\n\r\n                <mat-form-field appearance=\"fill\"\r\n                    class=\"mat-form-field--short\">\r\n                    <mat-label>\r\n                        {{'Cutting Yield' | translate }}\r\n                    </mat-label>\r\n                    <input matInput\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        name=\"Yield\"\r\n                        formControlName=\"Yield\"/>\r\n                    <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                        {{ 'tons' | translate }}\r\n                    </span>\r\n                </mat-form-field>\r\n            </ng-container>\r\n        </form>\r\n        <span *ngIf='id > 0'\r\n            class='bk-modal__last-updated-meta bk-clearfix'>\r\n            {{ 'Last updated by' | translate }} {{LastUpdatedUser}}\r\n        </span>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === cutEventViews.DISCARD_CHANGES\"\r\n        mat-dialog-content>\r\n\r\n        <div class=\"bk-dialog__paragraph\">\r\n            {{ 'The changes you made were not saved' | translate}}. {{'Discard changes' | translate}}?\r\n        </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === cutEventViews.DELETE_CONFIRMATION\"\r\n        mat-dialog-content>\r\n        <div class=\"bk-dialog__paragraph\">\r\n            {{ 'Are you sure you want to delete this event' | translate}}?\r\n        </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === cutEventViews.FORM\"\r\n        mat-dialog-actions\r\n        align=\"end\">\r\n\r\n        <button *ngIf=\"id\"\r\n            class=\"bk-button__delete\"\r\n            (click)=\"view = cutEventViews.DELETE_CONFIRMATION\">\r\n            {{'Delete' | translate }}\r\n        </button>\r\n\r\n        <button class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-dialog__button--secondary\"\r\n            mat-button\r\n            (click)=\"cancel()\">\r\n            {{ 'Cancel' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"save()\"\r\n            [disabled]=\"form.invalid\">\r\n            {{ (isSaving ? 'Saving' : 'Save') | translate }}\r\n            <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n        </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === cutEventViews.SUCCEEDING_EVENTS\" mat-dialog-content>\r\n        <div class=\"bk-modal__remove-text\">\r\n            {{'Your action changed recommendations for these irrigation event(s)' | translate }}:\r\n        </div>\r\n        <table class=\"bk-event-table__affected-events\">\r\n            <tr *ngFor=\"let succeedingEventGroup of succeedingEventGroups\">\r\n                <td class=\"bk-event-table__affected-events-cell--date\">\r\n                    {{succeedingEventGroup.EventDate | date:'mediumDate'}}\r\n                </td>\r\n                <td class=\"bk-event-table__affected-events-cell\">\r\n                    <div class=\"bk-planting__event-row__icon bk-button--blue-icon\">\r\n                        <svg-water></svg-water>\r\n                    </div>\r\n                    <span *ngIf=\"succeedingEventGroup && succeedingEventGroup.Irrigation\">\r\n                        {{succeedingEventGroup.Irrigation.IrrigationMethod}}\r\n                    </span>\r\n                </td>\r\n            </tr>\r\n        </table>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === cutEventViews.DISCARD_CHANGES\"\r\n        mat-dialog-actions\r\n        align=\"end\">\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-dialog__button--secondary\"\r\n            (click)=\"cancelDiscardingChanges()\">\r\n            {{ 'Keep Editing' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"close(true)\">\r\n            {{ 'Discard' | translate }}\r\n        </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === cutEventViews.SUCCEEDING_EVENTS\"\r\n        mat-dialog-actions\r\n        align=\"end\">\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\" \r\n            (click)=\"close(true)\">\r\n            {{'Close' | translate }}\r\n        </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === cutEventViews.DELETE_CONFIRMATION\"\r\n        mat-dialog-actions\r\n        align=\"end\" >\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n            (click)=\"cancelDiscardingChanges()\">\r\n            {{ 'Cancel' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"delete()\">\r\n            {{ (isSaving ? 'Deleting' : 'Delete') | translate }}\r\n            <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n        </button>\r\n    </div>\r\n</div>","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { CutEventService } from './service';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { CutEvent, eCutEventViews } from './cutEvent';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { UpdateService } from '../../services/update.service';\r\n\r\nimport { IMaturity } from '../../models/maturity/interfaces';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { FormBuilder, Validators, ValidatorFn } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { EventsType } from '../../interfaces/constants';\r\nimport * as moment from 'moment';\r\nimport { IPlanting } from '../planting-settings/interfaces';\r\nimport { FormValidation } from '../../classes/formValidation';\r\nimport { EventDialogParameters } from '../../classes/eventDialogUtility';\r\nimport { PlantingRecalculatorService } from '../planting-recalculate-modal/plantingRecalculatorService';\r\n\r\nexport type CutEventFields = 'Id' | 'EventDate' |\r\n\t'MaturityId' |'Yield';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'cut-event',\r\n\ttemplateUrl: 'cut-event.component.html'\r\n})\r\n\r\nexport class CutEventComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic cutEventViews = eCutEventViews;\r\n\tpublic form: FormGroup;\r\n\tpublic germinationDate: Date;\r\n\tpublic id: number;\r\n\tpublic isFutureEvent: boolean = null; // determine if event is in the future,\r\n\t\t// which hides Yield and Crop Stage from UI\r\n\tpublic isSaving = false;\r\n\tpublic LastUpdatedUser: string;\r\n\tpublic maturities: IMaturity[];\r\n\tpublic maxDate: Date;\r\n\tpublic succeedingEventGroups: EventGroup[];\r\n\tpublic view: eCutEventViews = eCutEventViews.FORM;\r\n\r\n\tprivate _eventDateOriginal: Date;\r\n\tprivate _dateDefault: Date;\r\n\tprivate _harvestDate: Date;\r\n\tprivate _plantingId: number;\r\n\tprivate _planting: IPlanting;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic get f(): { [key in CutEventFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in CutEventFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _cutEventService: CutEventService,\r\n\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: EventDialogParameters,\r\n\r\n\t\tprivate _dialogRef: MatDialogRef<CutEventComponent>,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _plantingRecalculatorService: PlantingRecalculatorService,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t) {\r\n\t\tif (this._data) {\r\n\t\t\tthis.id = this._data.id;\r\n\t\t\tthis.germinationDate = this._data.wetDate;\r\n\t\t\tthis._plantingId = this._data.plantingId;\r\n\t\t\tthis._dateDefault = this._data.dateDefault;\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._planting = this._ranchService.plantings.getPlantingById(this._plantingId);\r\n\r\n\t\tif (this._planting) {\r\n\t\t\tthis._harvestDate = this._planting.HarvestDate;\r\n\t\t} else {\r\n\t\t\tthrow Error('no planting found');\r\n\t\t}\r\n\r\n\t\tthis._initializeForm();\r\n\t\t// originalEvent needs to be assigned\r\n\t\t// before ajax call, or user will encounter\r\n\t\t// an error if he closes the popup before ajax finishes\r\n\t\t// this.event = new CutEvent(this.plantingId); // need to be set here -\r\n\t\t// otherwise template doesn't have\r\n\t\t// defensive code against this.event, which doesn't load till ajax comes back\r\n\r\n\t\tthis._dialogRef.disableClose = true;\r\n\r\n\t\tthis._dialogRef.backdropClick().pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.cancel();\r\n\t\t});\r\n\r\n\t\tif (this.id) {\r\n\t\t\tthis._cutEventService.get(this.id, this._plantingId)\r\n\t\t\t.then((response: CutEvent) => {\r\n\t\t\t\tthis._populateForm(response);\r\n\t\t\t\tthis.LastUpdatedUser = response.LastUpdatedUser;\r\n\t\t\t\tthis.form.markAsDirty();\r\n\t\t\t\tthis._eventDateOriginal = response.EventDate;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tif (this._dateDefault) {\r\n\t\t\t\tthis.f.EventDate.setValue(this._dateDefault);\r\n\t\t\t} else {\r\n\t\t\t\tthis.f.EventDate.setValue(null);\r\n\t\t\t}\r\n\r\n\t\t\t// default to blank date here, unlike other events, because date change\r\n\t\t\t// is required to trigger historical UI.\r\n\t\t\t// for better consistency, we need to not attach workflow to cut events.\r\n\t\t}\r\n\r\n\t\tthis._cutEventService.listMaturities()\r\n\t\t\t.then(response => this.maturities = response);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic cancel(): void {\r\n\t\tif (this.form.touched) {\r\n\t\t\tthis.view = eCutEventViews.DISCARD_CHANGES;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.close();\r\n\t}\r\n\r\n\tpublic cancelDiscardingChanges(): void {\r\n\t\tthis.view = eCutEventViews.FORM;\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis._dialogRef.close();\r\n\t\tthis._updateService.setEventDialogClosed();\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._cutEventService.delete(this.f.Id.value, this._plantingId).then(response => {\r\n\t\t\tthis.isSaving = false;\r\n\t\t\tthis._ranchService.plantings.deleteEventInPlantings(this.f.EventDate.value,\r\n\t\t\t\tthis._plantingId, EventsType.CUTTING);\r\n\r\n\t\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date());\r\n\r\n\t\t\tthis.succeedingEventGroups = response;\r\n\r\n\t\t\tif (this.succeedingEventGroups && this.succeedingEventGroups.length > 0) {\r\n\t\t\t\tthis.view = eCutEventViews.SUCCEEDING_EVENTS;\r\n\t\t\t} else {\r\n\t\t\t\tthis.close();\r\n\t\t\t}\r\n\r\n\t\t\tthis._plantingRecalculatorService.recalculate(this._plantingId, true);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic save(): void {\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.isFutureEvent) {\r\n\t\t\tthis.f.MaturityId.setValue(null);\r\n\t\t\tthis.f.Yield.setValue(null);\r\n\t\t}\r\n\r\n\t\tif (this.f.Id.value) {\r\n\t\t\tthis._update();\r\n\t\t} else {\r\n\t\t\tthis._create();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _create(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._cutEventService.save(this._plantingId, this.f.EventDate.value,\r\n\t\t\tthis.f.MaturityId.value, this.f.Yield.value, false).then((response) => {\r\n\r\n\t\t\tlet eventGroup: EventGroup;\r\n\r\n\t\t\tthis.isSaving = false;\r\n\r\n\t\t\tif (!response || !response.Events) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\teventGroup = response.Events[0];\r\n\t\t\teventGroup.eventType = EventsType.CUTTING;\r\n\r\n\t\t\tthis._ranchService.plantings.addEventToPlantings(eventGroup, this._plantingId);\r\n\t\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date());\r\n\r\n\t\t\tthis.succeedingEventGroups = response.EventGroupsSucceeding;\r\n\r\n\t\t\tif (this.succeedingEventGroups && this.succeedingEventGroups.length > 0) {\r\n\t\t\t\tthis.view = eCutEventViews.SUCCEEDING_EVENTS;\r\n\t\t\t} else {\r\n\t\t\t\tthis.close();\r\n\t\t\t}\r\n\r\n\t\t\tthis._plantingRecalculatorService.recalculate(this._plantingId, true);\r\n\r\n\t\t\treturn;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _daysAfterGerminationValidator(date: Date): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet daysAfterGermination: number;\r\n\r\n\t\t\tdaysAfterGermination = control.value ? DateUtility.daysBetweenDates(date, control.value)\r\n\t\t\t\t: null;\r\n\r\n\t\t\tvalid = daysAfterGermination < 1 ? false : true;\r\n\r\n\t\t\treturn valid ? null : {'daysAfterGerminationError': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _update(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._cutEventService.save(this._plantingId, this.f.EventDate.value,\r\n\t\t\tthis.f.MaturityId.value, this.f.Yield.value, false, this.f.Id.value)\r\n\t\t\t.then((response) => {\r\n\r\n\t\t\tlet eventGroup: EventGroup;\r\n\r\n\t\t\tthis.isSaving = false;\r\n\r\n\t\t\tif (!response || !response.Events) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\teventGroup = response.Events[0];\r\n\r\n\t\t\teventGroup.eventType = EventsType.CUTTING;\r\n\t\t\teventGroup.originalEventDate = this._eventDateOriginal;\r\n\r\n\t\t\tthis._ranchService.plantings.addEventToPlantings(eventGroup,\r\n\t\t\t\tthis._plantingId, this.f.Id.value);\r\n\t\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date());\r\n\r\n\t\t\tthis.succeedingEventGroups = response.EventGroupsSucceeding;\r\n\r\n\t\t\tif (this.succeedingEventGroups && this.succeedingEventGroups.length > 0) {\r\n\t\t\t\tthis.view = eCutEventViews.SUCCEEDING_EVENTS;\r\n\t\t\t} else {\r\n\t\t\t\tthis.close();\r\n\t\t\t}\r\n\r\n\t\t\tthis._plantingRecalculatorService.recalculate(this._plantingId, true);\r\n\r\n\t\t\treturn;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _initializeForm(): void {\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tId: [null],\r\n\t\t\tEventDate: [null, [Validators.required,\r\n\t\t\t\tFormValidation.maxDateValidator(this._harvestDate),\r\n\t\t\t\tthis._daysAfterGerminationValidator(this.germinationDate)]],\r\n\t\t\tMaturityId: [null],\r\n\t\t\tYield: [null, Validators.min(0)]\r\n\t\t});\r\n\r\n\t\tthis.maxDate = moment(this._harvestDate).subtract(1, 'days').toDate();\r\n\r\n\t\tthis.f.EventDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.isFutureEvent = DateUtility.isFuture(this.f.EventDate.value);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _populateForm(model: CutEvent): void {\r\n\t\tthis.f.Id.setValue(model.Id);\r\n\t\tthis.f.EventDate.setValue(model.EventDate);\r\n\t\tthis.f.MaturityId.setValue(model.MaturityId);\r\n\t\tthis.f.Yield.setValue(model.Yield);\r\n\t}\r\n}\r\n","import { DateUtility } from '../../classes/dateUtility';\r\nimport { ICutEventJSON } from './cut-event.interfaces';\r\n\r\nexport enum eCutEventViews {\r\n\tFORM = 1,\r\n\tHISTORICAL_CUTTING_INFORMATION,\r\n\tDISCARD_CHANGES,\r\n\tDELETE_CONFIRMATION,\r\n\tSUCCEEDING_EVENTS\r\n}\r\n\r\nexport interface ICutEventRecency {\r\n\tHasCutRecently: boolean,\r\n\tIsNearGerminationDate: boolean\r\n}\r\n\r\nexport enum eCutEventValidationStates {\r\n\tVALID = 1,\r\n\tEMPTY,\r\n\tEARLIER_THAN_GERMINATION,\r\n\tOUT_OF_RANGE, // historical only\r\n\tPAST_CUT_EVENT, // historical only\r\n\tHAS_FUTURE_YIELD\r\n}\r\n\r\nexport class CutEvent {\r\n\tpublic Id: number;\r\n\tpublic PlantingId: number;\r\n\tpublic EventDate: Date;\r\n\tpublic MaturityId: number;\r\n\tpublic Yield: number;\r\n\tpublic IsBookmark: boolean;\r\n\tpublic CutInterval: number;\r\n\tpublic LastUpdatedUser: string;\r\n\r\n\tprivate readonly _maxDaysBetweenCutEvents: number = 60;\r\n\r\n\tconstructor(plantingId?: number) {\r\n\t\tthis.Id = null;\r\n\t\tthis.PlantingId = plantingId ? plantingId : null;\r\n\t\tthis.EventDate = null;\r\n\t\tthis.MaturityId = null;\r\n\t\tthis.Yield = null;\r\n\t\tthis.IsBookmark = false; // default to false\r\n\t}\r\n\r\n\t/**\r\n     * Takes JSON data and copies into a class object\r\n     * @param json\r\n     */\r\n\tpublic transmuteJSON(json: ICutEventJSON) {\r\n\t\tthis.Id = json.Id;\r\n\t\tthis.PlantingId = json.PlantingId;\r\n\t\tthis.EventDate = DateUtility.DotNetToDate(json.EventDate);\r\n\t\tthis.MaturityId = json.MaturityId;\r\n\t\tthis.Yield = json.Yield;\r\n\t\tthis.IsBookmark = json.IsBookmark;\r\n\t\tthis.CutInterval = json.CutInterval;\r\n\t\tthis.LastUpdatedUser = json.LastUpdatedUser;\r\n\t}\r\n\r\n\t/**\r\n     * Takes an empty class object and copy to another class object\r\n     */\r\n\tpublic copy(cutEvent: CutEvent): void {\r\n\t\tthis.Id = cutEvent.Id;\r\n\t\tthis.PlantingId = cutEvent.Id;\r\n\t\tthis.EventDate = cutEvent.EventDate;\r\n\t\tthis.MaturityId = cutEvent.MaturityId;\r\n\t\tthis.Yield = cutEvent.Yield;\r\n\t\tthis.IsBookmark = cutEvent.IsBookmark;\r\n\t}\r\n\r\n\tpublic clear(): void {\r\n\t\tthis.EventDate = null;\r\n\t\tthis.MaturityId = null;\r\n\t\tthis.Yield = null;\r\n\t\tthis.IsBookmark = false;\r\n\t}\r\n\r\n\tpublic isDifferent(event: CutEvent): boolean {\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (this.EventDate !== event.EventDate ||\r\n\t\t\tthis.MaturityId !== event.MaturityId ||\r\n\t\t\tthis.Yield !== event.Yield ||\r\n\t\t\tthis.IsBookmark !== event.IsBookmark) {\r\n\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\r\n    <button type=\"button\"\r\n        class=\"bk-dialog__close\"\r\n        (click)=\"close()\">\r\n\r\n        <span>&times;</span>\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>\r\n        {{ 'Recommendations Changed' | translate}}\r\n    </h4>\r\n\r\n    <div mat-dialog-content>\r\n        <div class=\"bk-modal__remove-text\">\r\n            {{'Your action changed recommendations for these irrigation event(s)' | translate }}:\r\n        </div>\r\n        <table class=\"bk-event-table__affected-events\">\r\n            <tr *ngFor=\"let event of events\">\r\n                <td class=\"bk-event-table__affected-events-cell--date\">\r\n                    {{event.EventDate | date:'mediumDate'}}\r\n                </td>\r\n                <td class=\"bk-event-table__affected-events-cell\">\r\n                    <div class=\"bk-planting__event-row__icon bk-button--blue-icon\">\r\n                        <svg-water></svg-water>\r\n                    </div>\r\n                    <span *ngIf=\"event && event.Irrigation\">\r\n                        {{event.Irrigation.IrrigationMethod}}\r\n                    </span>\r\n                </td>\r\n            </tr>\r\n        </table>\r\n    </div>\r\n    <div mat-dialog-actions>\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\" \r\n            (click)=\"close()\">\r\n            {{'Close' | translate }}\r\n        </button>\r\n    </div>\r\n</div>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'cut-event-recalculate-warning',\r\n\ttemplateUrl: 'recalculate-warning.html'\r\n})\r\n\r\nexport class CutEventRecalculateWarningComponent implements OnInit {\r\n\r\n\tpublic events: EventGroup[];\r\n\r\n\tconstructor(public dialogRef: MatDialogRef<CutEventRecalculateWarningComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: {\r\n\t\t\tsucceedingEvents: EventGroup[]\r\n\t\t}) {\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t\tthis.events = this.data.succeedingEvents;\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\n\r\nimport { HttpService, HttpServicePostOptions, HttpServiceGetOptions } from '../../services/http.service';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { CutEvent, ICutEventRecency } from './cutEvent';\r\n\r\nimport { IMaturity } from '../../models/maturity/interfaces';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { IEventPostResponseJSON, IEventPostResponse } from '../../models/event/interfaces';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { ICutEventJSON } from './cut-event.interfaces';\r\nimport { ICutEvenService } from './interfaces';\r\nimport { EventResponse } from '../../models/event/eventResponse';\r\n\r\n@Injectable()\r\nexport class CutEventService implements ICutEvenService {\r\n\r\n\tprivate _urls = {\r\n\t\tsave: '/v2/cut-events.json',\r\n\t\tget: (id: number) => `/v2/cut-events/${id}.json`,\r\n\t\tdelete: (id: number) => `/v2/cut-events/${id}.json`,\r\n\t\tmaturities: {\r\n\t\t\tlist: '/v2/maturities.json'\r\n\t\t},\r\n\t}\r\n\r\n\tprivate _maturities: IMaturity[];\r\n\r\n\tconstructor(private _httpService: HttpService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _ranchService: RanchService\r\n\t) { }\r\n\r\n\tpublic save(plantingId: number, eventDate: Date, maturityId: number = null,\r\n\t\tcutYield: number = null, isBookmark: boolean = null, id: number = null, dateOnly = false):\r\n\t\tPromise<EventResponse> {\r\n\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tlet body: {\r\n\t\t\tplantingId: number,\r\n\t\t\teventDate: Date,\r\n\t\t\tmaturityId: number,\r\n\t\t\tyield: number,\r\n\t\t\tIsBookmark: boolean,\r\n\t\t\tid: number,\r\n\t\t\tDateOnly: boolean\r\n\t\t};\r\n\r\n\t\tif (!plantingId || !eventDate) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tbody = {\r\n\t\t\tplantingId: plantingId,\r\n\t\t\teventDate: DateUtility.ConvertToUTC(eventDate),\r\n\t\t\tmaturityId: maturityId,\r\n\t\t\tyield: cutYield,\r\n\t\t\tIsBookmark: isBookmark,\r\n\t\t\tid: id,\r\n\t\t\tDateOnly: dateOnly\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: body,\r\n\t\t\turl: this._urls.save,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: IEventPostResponseJSON): EventResponse => {\r\n\t\t\t\tlet result: EventResponse;\r\n\r\n\t\t\t\tresult = new EventResponse(response);\r\n\t\t\t\tresult.updateSucceedingEvents(plantingId, this._ranchService);\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this._httpService.post(options);\r\n\t}\r\n\r\n\tpublic listMaturities(): Promise<IMaturity[]> {\r\n\t\tlet options: HttpServiceGetOptions;\r\n\r\n\t\tif (this._maturities) {\r\n\t\t\treturn of(this._maturities).toPromise();\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\turl: this._urls.maturities.list,\r\n\t\t\tuseLocalStorage: true,\r\n\t\t\tcallback: (response: IMaturity[] ) => {\r\n\t\t\t\tthis._maturities = response;\r\n\r\n\t\t\t\treturn this._maturities;\r\n\t\t\t},\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this._httpService.get(options);\r\n\t}\r\n\r\n\tpublic get(id: number, plantingId: number): Promise<CutEvent> {\r\n\t\tlet options: HttpServiceGetOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this._urls.get(id),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (event: ICutEventJSON) => {\r\n\t\t\t\tlet cutEvent: CutEvent;\r\n\r\n\t\t\t\tif (!event) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcutEvent = new CutEvent(plantingId);\r\n\t\t\t\tcutEvent.transmuteJSON(event);\r\n\r\n\t\t\t\treturn cutEvent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this._httpService.get(options);\r\n\t}\r\n\r\n\tpublic delete(id: number, plantingId: number): Promise<EventGroup[]> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tif (!plantingId || !id) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: null,\r\n\t\t\turl: this._urls.delete(id),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: IEventPostResponseJSON): EventGroup[] => {\r\n\t\t\t\tlet eventGroupsSucceeding: EventGroup[];\r\n\r\n\t\t\t\tEventGroup.updateEvents(response.EventGroupsSucceeding, plantingId,\r\n\t\t\t\t\tDateUtility.DotNetToDate(response.WetDate), this._ranchService);\r\n\r\n\t\t\t\teventGroupsSucceeding = EventGroup.convertAll(response.EventGroupsSucceeding,\r\n\t\t\t\t\tDateUtility.DotNetToDate(response.WetDate));\r\n\r\n\t\t\t\treturn eventGroupsSucceeding;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this._httpService.delete(options);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\t\r\n\t<button type=\"button\"\r\n\t\tclass=\"bk-dialog__close\"\r\n\t\t(click)=\"cancel()\">\r\n\t\t&times;\r\n\t</button>\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\t{{ 'ET Chart' | translate }}\r\n\t</h4>\r\n\t<h5 class='bk-modal__subTitle'>\r\n\t\t{{ planting.Name }}\r\n\t</h5>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<div *ngIf=\"etEvents && etEvents.length === 0\">\r\n\t\t\t{{ 'There are no ET events associated with this planting.' | translate }}\r\n\t\t</div>\r\n\t\t<div *ngIf=\"isLoaded === false\"\r\n\t\t\tclass='bk-et-chart__loader bk-vertical-center'>\r\n\r\n\t\t\t<div class=\"bk-loader__container\">\r\n\t\t\t\t<div class=\"bk-loader\"></div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<table *ngIf=\"etEvents && etEvents.length > 0\"\r\n\t\t\tclass=\"bk-modal__table\">\r\n\t\t\t<thead>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<th>\r\n\t\t\t\t\t\t{{'Date' | translate }}\r\n\t\t\t\t\t</th>\r\n\t\t\t\t\t<th>\r\n\t\t\t\t\t\t{{'ET' | translate }}\r\n\t\t\t\t\t</th>\r\n\t\t\t\t\t<th>\r\n\t\t\t\t\t\t{{ 'Source' | translate }}\r\n\t\t\t\t\t</th>\r\n\t\t\t\t\t<th *ngFor=\"let tableHeader of tableHeaders\">\r\n\t\t\t\t\t\t{{ tableHeader }}\r\n\t\t\t\t\t</th>\r\n\t\t\t\t</tr>\r\n\t\t\t</thead>\r\n\r\n\t\t\t<tbody>\r\n\t\t\t\t<ng-container *ngFor=\"let etEvent of etEvents\">\r\n\t\t\t\t\t<tr class=\"bk-modal__row\" >\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t{{etEvent.EventDate | date:'M/d/yyyy'}}\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<input class=\"bk-input--short\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tstep=\"0.01\"\r\n\t\t\t\t\t\t\t\t(blur)=\"save(etEvent)\"\r\n\t\t\t\t\t\t\t\t[(ngModel)]=\"etEvent.ET\" />\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t{{ etEvent.Source }}\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td *ngFor=\"let stationET of etEvent.Stations\">\r\n\t\t\t\t\t\t\t{{ stationET !== null ? stationET : ('No Data' | translate) }}\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td *ngIf=\"tableHeaders.indexOf('Spatial') > -1\">\r\n\t\t\t\t\t\t\t{{ etEvent.SpatialET !== null ? etEvent.SpatialET : ('No Data' | translate ) }}\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</tbody>\r\n\t\t</table>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button (click)=\"cancel()\" mat-button\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t\t{{ 'Close' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ETWeatherEventService } from './service';\r\nimport { ETEventViewModel } from './interface';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { PlantingRecalculatorService } from '../planting-recalculate-modal/plantingRecalculatorService';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'et-chart',\r\n\ttemplateUrl: 'et-chart.html'\r\n})\r\n\r\nexport class ETChartComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic planting: {\r\n\t\tId: number,\r\n\t\tName: string\r\n\t};\r\n\r\n\tpublic etEvents: ETEventViewModel[];\r\n\tpublic tableHeaders: string[];\r\n\tpublic isLoaded = false;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tpublic dialogRef: MatDialogRef<ETChartComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { lotPlantingId: number, name: string },\r\n\t\tprivate _service: ETWeatherEventService,\r\n\t\tprivate _plantingRecalculateService: PlantingRecalculatorService\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tif (!this._data) {\r\n\t\t\tthrow new Error('ETChartComponent.ngOnInit(): this._data is empty');\r\n\t\t}\r\n\r\n\t\tthis.planting = {\r\n\t\t\tId: this._data.lotPlantingId,\r\n\t\t\tName: this._data.name\r\n\t\t};\r\n\r\n\t\t// custom click outside behavior\r\n\t\tthis.dialogRef.disableClose = true;\r\n\r\n\t\tthis.dialogRef.backdropClick().pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.dialogRef.close();\r\n\t\t});\r\n\r\n\t\tthis._list();\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic save(etEvent: ETEventViewModel): void {\r\n\r\n\t\tif (etEvent.ET !== null && etEvent.ET !== undefined && etEvent.ET >= 0) {\r\n\t\t\tthis._service.save(etEvent).then((res) => {\r\n\t\t\t\tthis._plantingRecalculateService.processEventStream(res, this.planting.Id);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic cancel(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n\r\n\tprivate _list(): void {\r\n\r\n\t\tthis._service.list(this.planting.Id).then((response) => {\r\n\t\t\tif (!response) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.etEvents = response.ETEvents;\r\n\t\t\tthis.tableHeaders = response.Headers;\r\n\t\t\tthis.isLoaded = true;\r\n\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ModelService } from '../../services/model.service';\r\nimport { ETEventViewModel, ETChartViewModel, ETChart, WeatherEventViewModelJSON } from './interface';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { of } from 'rxjs';\r\nimport { IPlanting, IPlantingJSON } from '../planting-settings/interfaces';\r\nimport { Planting } from '../planting-settings/planting';\r\n\r\n@Injectable()\r\nexport class ETWeatherEventService extends ModelService {\r\n\r\n\tprivate _urls = {\r\n\t\tlist: (plantingId: number) => `/v2/plantings/${plantingId}/et-weather-events.json`,\r\n\t\tsave: '/v2/et-weather-events.json'\r\n\t};\r\n\r\n\tpublic list(plantingId: number): Promise<ETChart> {\r\n\r\n\t\tif (!plantingId) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.get(this._urls.list(plantingId),\r\n\t\t\t(response: ETChartViewModel) => {\r\n\t\t\t\tlet etEvents: ETEventViewModel[];\r\n\t\t\t\tlet tableHeaders: string[];\r\n\t\t\t\tlet result: ETChart;\r\n\r\n\t\t\t\ttableHeaders = new Array();\r\n\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tetEvents = new Array();\r\n\r\n\t\t\t\t// we need station/Coordinates data to be in a tabular data structure\r\n\r\n\t\t\t\tif (response.ETEvents && response.ETEvents.length > 0) {\r\n\t\t\t\t\tfor (let etEvent of response.ETEvents) {\r\n\t\t\t\t\t\tetEvents.push({\r\n\t\t\t\t\t\t\tId: etEvent.Id,\r\n\t\t\t\t\t\t\tEventDate: DateUtility.DotNetToDate(etEvent.EventDate),\r\n\t\t\t\t\t\t\tSource: etEvent.Source,\r\n\t\t\t\t\t\t\tET: etEvent.ET\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (response.ETFromStations && response.ETFromStations.length > 0) {\r\n\t\t\t\t\tfor (let station of response.ETFromStations) {\r\n\r\n\t\t\t\t\t\ttableHeaders.push(station.StationName);\r\n\r\n\t\t\t\t\t\tfor (let etEvent of etEvents) {\r\n\t\t\t\t\t\t\tlet event: WeatherEventViewModelJSON;\r\n\r\n\t\t\t\t\t\t\tif (!etEvent.Stations) {\r\n\t\t\t\t\t\t\t\tetEvent.Stations = new Array();\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (!station.WeatherEvents || station.WeatherEvents.length === 0) {\r\n\t\t\t\t\t\t\t\tetEvent.Stations.push(null);\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tevent = station.WeatherEvents.filter(x =>\r\n\t\t\t\t\t\t\t\tDateUtility.DotNetToDate(x.EventDate).getTime() === etEvent.EventDate.getTime())[0];\r\n\r\n\t\t\t\t\t\t\tif (event) {\r\n\t\t\t\t\t\t\t\tetEvent.Stations.push(event.ET)\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tetEvent.Stations.push(null);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (response.ETFromSpatial && response.ETFromSpatial.WeatherEvents !== null &&\r\n\t\t\t\t\tresponse.ETFromSpatial.WeatherEvents.length > 0) {\r\n\r\n\t\t\t\t\ttableHeaders.push('Spatial');\r\n\r\n\t\t\t\t\tif (response.ETFromSpatial.WeatherEvents && response.ETFromSpatial.WeatherEvents.length > 0) {\r\n\t\t\t\t\t\tfor (let etEvent of etEvents) {\r\n\t\t\t\t\t\t\tlet event = response.ETFromSpatial.WeatherEvents.filter(x => DateUtility.DotNetToDate(x.EventDate).getTime()\r\n\t\t\t\t\t\t\t\t=== etEvent.EventDate.getTime())[0];\r\n\r\n\t\t\t\t\t\t\tif (event) {\r\n\t\t\t\t\t\t\t\tetEvent.SpatialET = event.ET;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tetEvent.SpatialET = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult = {\r\n\t\t\t\t\tETEvents: etEvents,\r\n\t\t\t\t\tHeaders: tableHeaders\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic save(event: ETEventViewModel): Promise<IPlanting> {\r\n\t\tlet params = {\r\n\t\t\tid: event.Id,\r\n\t\t\tET: event.ET\r\n\t\t};\r\n\r\n\t\treturn this.post(this._urls.save,\r\n\t\t\t(res: IPlantingJSON): IPlanting => {\r\n\t\t\t\tlet result: IPlanting;\r\n\r\n\t\t\t\tresult = Planting.convertPlantingJSON(res);\r\n\t\t\t\treturn result;\r\n\t\t}, params);\r\n\t}\r\n}\r\n","\n   <svg\n   version=\"1.1\"\n   id=\"svg46\"\n   width=\"24\"\n   height=\"24\"\n   viewBox=\"0 0 24 24\">\n  <g\n     id=\"fertilizer\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n    <path\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"M 3.8297121,0.51130121 3.8114703,2.4749241 C 1.76397,11.202565 3.1249414,\n       16.215468 3.8758847,21.32146 l -0.032207,2.133568 H 19.850115 V 21.32146 c 1.440376,\n       -6.005475 1.70476,-11.8067791 0,-18.8465359 l -0.0031,-1.96362289 z\"\n       id=\"path77\"\n       sodipodi:nodetypes=\"ccccccccc\" />\n    <path\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"M 3.8114703,2.4749241 H 19.850114\"\n       id=\"path89\"\n       sodipodi:nodetypes=\"cc\" />\n    <path\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"M 3.8758825,21.32146 H 19.850114\"\n       id=\"path91\" />\n    <ellipse\n       style=\"stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       id=\"path918\"\n       ry=\"5.1076374\"\n       rx=\"5.1529775\"\n       cy=\"12.177129\"\n       cx=\"11.832805\" />\n    <path\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"m 11.902627,16.429598 -0.09663,-4.008525\"\n       id=\"path922\"\n       sodipodi:nodetypes=\"cc\" />\n    <path\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"m 11.934833,15.265833 c 0.07489,-1.436924 0.550112,-2.605951 2.415459,\n       -2.84476 0.02167,1.222541 -0.402021,2.631732 -2.415459,2.84476 z\"\n       id=\"path924\"\n       sodipodi:nodetypes=\"ccc\" />\n    <path\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"m 11.806008,12.421073 c -0.883286,-1.129684 -1.278589,-2.333239 0.02054,\n       -3.7932977 0.818137,0.9025078 1.411052,2.2508957 -0.02054,3.7932977 z\"\n       id=\"path926\"\n       sodipodi:nodetypes=\"ccc\" />\n    <path\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"m 11.934833,15.265833 c -1.421878,-0.159125 -2.5543028,-0.719449 -2.6816599,\n       -2.672867 1.2147599,0.04659 2.5886009,0.566896 2.6816599,2.672867 z\"\n       id=\"path928\"\n       sodipodi:nodetypes=\"ccc\" />\n  </g>\n</svg>\n    ","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'svg-fertilizer',\r\n\ttemplate: `\r\n   <svg\r\n   version=\"1.1\"\r\n   id=\"svg46\"\r\n   width=\"24\"\r\n   height=\"24\"\r\n   viewBox=\"0 0 24 24\">\r\n  <g\r\n     id=\"fertilizer\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n    <path\r\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"M 3.8297121,0.51130121 3.8114703,2.4749241 C 1.76397,11.202565 3.1249414,\r\n       16.215468 3.8758847,21.32146 l -0.032207,2.133568 H 19.850115 V 21.32146 c 1.440376,\r\n       -6.005475 1.70476,-11.8067791 0,-18.8465359 l -0.0031,-1.96362289 z\"\r\n       id=\"path77\"\r\n       sodipodi:nodetypes=\"ccccccccc\" />\r\n    <path\r\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"M 3.8114703,2.4749241 H 19.850114\"\r\n       id=\"path89\"\r\n       sodipodi:nodetypes=\"cc\" />\r\n    <path\r\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"M 3.8758825,21.32146 H 19.850114\"\r\n       id=\"path91\" />\r\n    <ellipse\r\n       style=\"stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       id=\"path918\"\r\n       ry=\"5.1076374\"\r\n       rx=\"5.1529775\"\r\n       cy=\"12.177129\"\r\n       cx=\"11.832805\" />\r\n    <path\r\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"m 11.902627,16.429598 -0.09663,-4.008525\"\r\n       id=\"path922\"\r\n       sodipodi:nodetypes=\"cc\" />\r\n    <path\r\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"m 11.934833,15.265833 c 0.07489,-1.436924 0.550112,-2.605951 2.415459,\r\n       -2.84476 0.02167,1.222541 -0.402021,2.631732 -2.415459,2.84476 z\"\r\n       id=\"path924\"\r\n       sodipodi:nodetypes=\"ccc\" />\r\n    <path\r\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"m 11.806008,12.421073 c -0.883286,-1.129684 -1.278589,-2.333239 0.02054,\r\n       -3.7932977 0.818137,0.9025078 1.411052,2.2508957 -0.02054,3.7932977 z\"\r\n       id=\"path926\"\r\n       sodipodi:nodetypes=\"ccc\" />\r\n    <path\r\n       style=\"stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"m 11.934833,15.265833 c -1.421878,-0.159125 -2.5543028,-0.719449 -2.6816599,\r\n       -2.672867 1.2147599,0.04659 2.5886009,0.566896 2.6816599,2.672867 z\"\r\n       id=\"path928\"\r\n       sodipodi:nodetypes=\"ccc\" />\r\n  </g>\r\n</svg>\r\n    `,\r\n})\r\n\r\nexport class SVGFertilizerComponent {\r\n\r\n}\r\n","\n\t\t<svg version=\"1.0\" xmlns=\"http://www.w3.org/2000/svg\"\n width=\"512.000000pt\" height=\"512.000000pt\" viewBox=\"0 0 512.000000 512.000000\"\n preserveAspectRatio=\"xMidYMid meet\">\n\n<g transform=\"translate(0.000000,512.000000) scale(0.100000,-0.100000)\"\nfill=\"#000000\" stroke=\"none\">\n<path d=\"M2010 5100 c-50 -28 -1950 -1718 -1977 -1759 l-23 -34 0 -434 c0\n-412 1 -436 20 -472 20 -41 85 -81 128 -81 36 0 87 25 131 65 l41 37 0 -1151\nc0 -1135 0 -1152 20 -1191 13 -26 34 -47 60 -60 39 -20 54 -20 2310 -20 2256\n0 2271 0 2310 20 26 13 47 34 60 60 20 38 20 57 20 917 l0 878 -23 39 c-12 22\n-37 47 -57 57 -19 9 -297 66 -617 125 l-583 109 0 109 0 108 41 -37 c44 -40\n95 -65 131 -65 42 0 103 38 126 79 22 38 22 45 22 470 0 350 -3 437 -14 459\n-8 15 -40 52 -72 82 -151 142 -1890 1677 -1917 1693 -41 22 -93 21 -137 -3z\nm951 -1111 c484 -430 883 -787 885 -793 2 -6 3 -97 2 -201 l-3 -189 -830 728\nc-456 401 -843 737 -860 747 -30 19 -97 25 -131 12 -10 -4 -396 -338 -858\n-742 -462 -405 -844 -737 -848 -739 -5 -2 -8 84 -8 192 l0 195 268 238 c147\n131 502 445 787 698 286 253 563 499 615 547 52 48 96 87 97 87 2 1 399 -351\n884 -780z m-152 -674 l721 -630 0 -227 0 -228 -1450 0 -1450 0 2 228 3 229\n720 631 c396 347 723 630 727 629 4 -1 331 -285 727 -632z m721 -2200 l0 -815\n-170 0 -170 0 0 585 c0 567 -1 587 -20 625 -13 26 -34 47 -60 60 -39 20 -57\n20 -1030 20 -973 0 -991 0 -1030 -20 -26 -13 -47 -34 -60 -60 -19 -38 -20 -58\n-20 -625 l0 -585 -170 0 -170 0 0 815 0 815 1450 0 1450 0 0 -815z m808 689\nl472 -88 0 -708 0 -708 -490 0 -490 0 0 801 c0 757 1 800 18 795 9 -2 230 -44\n490 -92z m-1798 -517 c0 -2 -103 -73 -230 -157 l-230 -153 -201 134 c-110 73\n-215 143 -232 156 l-31 23 462 0 c254 0 462 -2 462 -3z m-739 -495 c-3 -4\n-123 -87 -268 -184 l-263 -177 0 364 0 364 268 -180 c147 -99 265 -183 263\n-187z m1089 4 l0 -363 -264 176 c-144 97 -263 181 -263 186 0 7 488 346 525\n364 1 0 2 -163 2 -363z m-576 -338 l229 -153 -232 -3 c-127 -1 -335 -1 -462 0\nl-231 3 228 153 c126 83 231 152 234 152 2 0 108 -69 234 -152z\"/>\n<path d=\"M2037 3345 c-21 -7 -48 -21 -59 -32 -44 -39 -48 -66 -48 -363 0 -262\n1 -283 20 -320 23 -45 80 -80 130 -80 50 0 107 35 130 81 20 38 21 54 18 334\n-3 280 -4 295 -24 322 -42 56 -108 79 -167 58z\"/>\n</g>\n</svg>\n    ","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'svg-ranch-marker',\r\n\ttemplate: `\r\n\t\t<svg version=\"1.0\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"512.000000pt\" height=\"512.000000pt\" viewBox=\"0 0 512.000000 512.000000\"\r\n preserveAspectRatio=\"xMidYMid meet\">\r\n\r\n<g transform=\"translate(0.000000,512.000000) scale(0.100000,-0.100000)\"\r\nfill=\"#000000\" stroke=\"none\">\r\n<path d=\"M2010 5100 c-50 -28 -1950 -1718 -1977 -1759 l-23 -34 0 -434 c0\r\n-412 1 -436 20 -472 20 -41 85 -81 128 -81 36 0 87 25 131 65 l41 37 0 -1151\r\nc0 -1135 0 -1152 20 -1191 13 -26 34 -47 60 -60 39 -20 54 -20 2310 -20 2256\r\n0 2271 0 2310 20 26 13 47 34 60 60 20 38 20 57 20 917 l0 878 -23 39 c-12 22\r\n-37 47 -57 57 -19 9 -297 66 -617 125 l-583 109 0 109 0 108 41 -37 c44 -40\r\n95 -65 131 -65 42 0 103 38 126 79 22 38 22 45 22 470 0 350 -3 437 -14 459\r\n-8 15 -40 52 -72 82 -151 142 -1890 1677 -1917 1693 -41 22 -93 21 -137 -3z\r\nm951 -1111 c484 -430 883 -787 885 -793 2 -6 3 -97 2 -201 l-3 -189 -830 728\r\nc-456 401 -843 737 -860 747 -30 19 -97 25 -131 12 -10 -4 -396 -338 -858\r\n-742 -462 -405 -844 -737 -848 -739 -5 -2 -8 84 -8 192 l0 195 268 238 c147\r\n131 502 445 787 698 286 253 563 499 615 547 52 48 96 87 97 87 2 1 399 -351\r\n884 -780z m-152 -674 l721 -630 0 -227 0 -228 -1450 0 -1450 0 2 228 3 229\r\n720 631 c396 347 723 630 727 629 4 -1 331 -285 727 -632z m721 -2200 l0 -815\r\n-170 0 -170 0 0 585 c0 567 -1 587 -20 625 -13 26 -34 47 -60 60 -39 20 -57\r\n20 -1030 20 -973 0 -991 0 -1030 -20 -26 -13 -47 -34 -60 -60 -19 -38 -20 -58\r\n-20 -625 l0 -585 -170 0 -170 0 0 815 0 815 1450 0 1450 0 0 -815z m808 689\r\nl472 -88 0 -708 0 -708 -490 0 -490 0 0 801 c0 757 1 800 18 795 9 -2 230 -44\r\n490 -92z m-1798 -517 c0 -2 -103 -73 -230 -157 l-230 -153 -201 134 c-110 73\r\n-215 143 -232 156 l-31 23 462 0 c254 0 462 -2 462 -3z m-739 -495 c-3 -4\r\n-123 -87 -268 -184 l-263 -177 0 364 0 364 268 -180 c147 -99 265 -183 263\r\n-187z m1089 4 l0 -363 -264 176 c-144 97 -263 181 -263 186 0 7 488 346 525\r\n364 1 0 2 -163 2 -363z m-576 -338 l229 -153 -232 -3 c-127 -1 -335 -1 -462 0\r\nl-231 3 228 153 c126 83 231 152 234 152 2 0 108 -69 234 -152z\"/>\r\n<path d=\"M2037 3345 c-21 -7 -48 -21 -59 -32 -44 -39 -48 -66 -48 -363 0 -262\r\n1 -283 20 -320 23 -45 80 -80 130 -80 50 0 107 35 130 81 20 38 21 54 18 334\r\n-3 280 -4 295 -24 322 -42 56 -108 79 -167 58z\"/>\r\n</g>\r\n</svg>\r\n    `,\r\n})\r\n\r\nexport class SVGRanchMarkerComponent {\r\n\r\n}\r\n","\n        <svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\">\n            <g id=\"Exports\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n                <g id=\"Icon-Water\">\n                    <g>\n                        <path d=\"M17,11 C17,13.762 14.762,16 12,16 C9.238,16 7,13.762 7,\n                            11 C7,8.239 12,1 12,1 C12,1 17,8.239 17,11 Z\"\n                            id=\"Shape\" stroke=\"#000000\" stroke-linejoin=\"round\">\n                        </path>\n                        <path d=\"M12,13 C10.711,13 9.667,11.955 9.667,10.667\"\n                            id=\"Shape\" stroke=\"#000000\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        </path>\n                        <path d=\"M18.988,17.483 C17.252,18.723 14.764,19.5 12,\n                            19.5 C9.221,19.5 6.72,18.715 4.982,17.463\" id=\"Shape\"\n                            stroke=\"#000000\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        </path>\n                        <path d=\"M22.94,19.061 C20.363,21.158 16.419,22.5 12,\n                            22.5 C7.551,22.5 3.584,21.141 1.008,19.018\" id=\"Shape\"\n                            stroke=\"#000000\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        </path>\n                        <rect id=\"Rectangle-path\" x=\"0\" y=\"0\" width=\"24\" height=\"24\"></rect>\n                    </g>\n                </g>\n            </g>\n        </svg>\n    ","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'svg-water',\r\n\ttemplate: `\r\n        <svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\">\r\n            <g id=\"Exports\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n                <g id=\"Icon-Water\">\r\n                    <g>\r\n                        <path d=\"M17,11 C17,13.762 14.762,16 12,16 C9.238,16 7,13.762 7,\r\n                            11 C7,8.239 12,1 12,1 C12,1 17,8.239 17,11 Z\"\r\n                            id=\"Shape\" stroke=\"#000000\" stroke-linejoin=\"round\">\r\n                        </path>\r\n                        <path d=\"M12,13 C10.711,13 9.667,11.955 9.667,10.667\"\r\n                            id=\"Shape\" stroke=\"#000000\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n                        </path>\r\n                        <path d=\"M18.988,17.483 C17.252,18.723 14.764,19.5 12,\r\n                            19.5 C9.221,19.5 6.72,18.715 4.982,17.463\" id=\"Shape\"\r\n                            stroke=\"#000000\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n                        </path>\r\n                        <path d=\"M22.94,19.061 C20.363,21.158 16.419,22.5 12,\r\n                            22.5 C7.551,22.5 3.584,21.141 1.008,19.018\" id=\"Shape\"\r\n                            stroke=\"#000000\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n                        </path>\r\n                        <rect id=\"Rectangle-path\" x=\"0\" y=\"0\" width=\"24\" height=\"24\"></rect>\r\n                    </g>\r\n                </g>\r\n            </g>\r\n        </svg>\r\n    `,\r\n})\r\n\r\nexport class SVGWaterComponent {\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class EventsUpdateService {\r\n\tprivate _closeModal: Subject<null> = new Subject<null>();\r\n\tpublic closeModal$ = this._closeModal.asObservable();\r\n\r\n\t/**\r\n\t * Used to close event table/list modal when calendar is opened\r\n\t */\r\n\tpublic closeModal(): void {\r\n\t\tthis._closeModal.next();\r\n\t}\r\n}\r\n","import { BOKA } from '../../../../../classes/number';\r\nimport { FertilizationRecommendedSummaryViewModel, IVegetableFertilization } from '../../../../fertilization-event/interfaces';\r\nimport { TranslateService } from '../../../../localization/service';\r\nimport { IGeneratedEquation } from './lettuceEquationGenerator';\r\n\r\nexport abstract class EquationGenerator {\r\n\tprotected _s: FertilizationRecommendedSummaryViewModel;\r\n\tprotected _ts: TranslateService;\r\n\tprotected equationResult: number;\r\n\r\n\tpublic constructor(s: FertilizationRecommendedSummaryViewModel,\r\n\t\ttranslateService: TranslateService) {\r\n\t\tthis._s = s;\r\n\t\tthis._ts = translateService;\r\n\t}\r\n\r\n\tpublic abstract getEquation(): IGeneratedEquation;\r\n\r\n\tprotected isRecommendationClamped(): boolean {\r\n\t\tif (BOKA.NumberUtil.roundToDecimalPlaces(this._s.Recommendation, 5) <\r\n\t\t\tBOKA.NumberUtil.roundToDecimalPlaces(this.equationResult, 5)) {\r\n\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected getNegativeMessage(result: IGeneratedEquation, index = 1): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[index] =\r\n\t\t\t`${this._ts.translate('Below Zero Fert Rec Warning')}.`\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected getClamped(result: IGeneratedEquation, index = 1): IGeneratedEquation {\r\n\t\tif (!result) {\r\n\t\t\tthrow new Error('no generated equation found');\r\n\t\t}\r\n\r\n\t\tresult.equationDescriptions[index] = `${this._ts.translate('The recommendation is too large and is clamped to')} <em><strong>\r\n\t\t\t${this._s.Recommendation.toFixed(2)}</strong></em>. ${this._ts.translate('Adjust Max N Suggestion')}.`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected addNinWater(result: IGeneratedEquation, index = 0): IGeneratedEquation {\r\n\t\tif (this._s.NAppliedFromWater > 0) {\r\n\t\t\tresult.equationDescriptions[index] += ' - ' + this._ts.translate('Water N Contribution');\r\n\t\t\tresult.equations[index] += ` - ${this._s.NAppliedFromWater.toFixed(2)}`;\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected isNearHarvest(s: IVegetableFertilization): boolean {\r\n\t\treturn (s.SoilNppm < s.SoilNThresholdppm && s.FractionalInterval > s.HarvestIntervalFraction) ? true : false;\r\n\t}\r\n}\r\n","import { LettuceFertilizationRecommendedSummaryViewModel } from '../../../../fertilization-event/interfaces';\r\nimport { TranslateService } from '../../../../localization/service';\r\nimport { EquationGenerator } from './equationGenerator';\r\nimport { FertilizationRecommendationFields } from './strawberryEquationGenerator';\r\n\r\nexport interface IGeneratedEquation {\r\n\tequationDescriptions: string[],\r\n\tequations: string[]\r\n}\r\n\r\nexport class LettuceEquationGenerator extends EquationGenerator {\r\n\r\n\tprotected _s: LettuceFertilizationRecommendedSummaryViewModel;\r\n\r\n\tconstructor(s: LettuceFertilizationRecommendedSummaryViewModel,\r\n\t\ttranslateService: TranslateService) {\r\n\t\tsuper(s, translateService);\r\n\t\tthis._s = s;\r\n\t}\r\n\r\n\tprotected _getPrimaryEquation(result: IGeneratedEquation): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[0] = `${this._ts.translate('Fertilizer N Recommendation')}\r\n\t\t\t= ${this._ts.translate('Crop N Uptake')} +\r\n\t\t\t(${this._ts.translate('Soil N Threshold')} - ${this._ts.translate('Soil N')}) - ${this._ts.translate('Total Mineralized N')}`;\r\n\r\n\t\tthis.equationResult = this._s.NUptakeDifference + (this._s.SoilNThreshold - this._s.SoilN)\r\n\t\t- this._s.NMineralTotal - this._s.NAppliedFromWater;\r\n\r\n\t\tresult.equations[0] = `${this.equationResult.toFixed(2)} =\r\n\t\t\t${this._s.NUptakeDifference.toFixed(2)} + (${this._s.SoilNThreshold.toFixed(2)}\r\n\t\t\t- ${this._s.SoilN.toFixed(2)}) - ${this._s.NMineralTotal.toFixed(2)}`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic getEquation(): IGeneratedEquation {\r\n\t\tlet result: IGeneratedEquation = {\r\n\t\t\tequationDescriptions: [],\r\n\t\t\tequations: []\r\n\t\t};\r\n\r\n\t\tlet f = FertilizationRecommendationFields;\r\n\r\n\t\tif (this.isNearHarvest(this._s)) {\r\n\t\t\tresult = this._getNearHarvestEquation(result);\r\n\t\t\tthis._s.NMineralTotal = null;\r\n\t\t\tthis._s.SoilN = null;\r\n\t\t\tthis._s.SoilNThreshold = null;\r\n\t\t} else {\r\n\t\t\tresult = this._getPrimaryEquation(result);\r\n\t\t}\r\n\r\n\t\tif (this.equationResult < 0) {\r\n\t\t\tresult = this.getNegativeMessage(result);\r\n\t\t} else if (this.isRecommendationClamped()) {\r\n\t\t\tresult = this.getClamped(result);\r\n\t\t}\r\n\r\n\t\tresult = this.addNinWater(result);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _getNearHarvestEquation(result: IGeneratedEquation): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[0] = `${this._ts.translate('Fertilizer N Recommendation')} = ${this._ts.translate('Crop N Uptake')}`;\r\n\t\tresult.equations[0] = `${this._s.Recommendation.toFixed(2)} = ${this._s.NUptakeDifference.toFixed(2)}`;\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { StrawberryFertilizationRecommendedSummaryViewModel } from '../../../../fertilization-event/interfaces';\r\nimport { TranslateService } from '../../../../localization/service';\r\nimport { EquationGenerator } from './equationGenerator';\r\nimport { IGeneratedEquation } from './lettuceEquationGenerator';\r\n\r\nexport interface IEquationGenerator {\r\n\tgetEquation(): IGeneratedEquation;\r\n\tgetClampedStrings(result: IGeneratedEquation): IGeneratedEquation;\r\n\tresolveEquation(): number;\r\n\tisRecommendationClamped(): boolean;\r\n}\r\n\r\nexport enum FertilizationRecommendationFields {\r\n\tSOIL_N = 'SoilN',\r\n\tSOIL_N_THRESHOLD = 'SoilNThreshold',\r\n\tDENSITY = 'Density',\r\n\tN_FERTILIZER_FACTOR = 'NFertilizerFactor',\r\n\tN_MINERAL_TOTAL = 'NMineralTotal',\r\n\tFERTILIZATIONS_PER_MONTH = 'FertilizationsPerMonth'\r\n}\r\n\r\nexport class StrawberryEquationGenerator extends EquationGenerator {\r\n\tprotected _s: StrawberryFertilizationRecommendedSummaryViewModel;\r\n\r\n\tpublic constructor(s: StrawberryFertilizationRecommendedSummaryViewModel,\r\n\t\ttranslateservice: TranslateService) {\r\n\r\n\t\tsuper(s, translateservice);\r\n\t\tthis._s = s;\r\n\t}\r\n\r\n\tprotected _getSoilNRatioGreaterEquation(result: IGeneratedEquation): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[0] = `${this._ts.translate('Fertilizer N Recommendation')} =\r\n\t\t\t((${this._ts.translate('Crop N Uptake')} / ${this._ts.translate('N Fertilizer Factor')}) -\r\n\t\t\t${this._ts.translate('Total Mineralized N')}) / ${this._ts.translate('Fertilizations Per Month')}`;\r\n\r\n\t\tthis.equationResult = ((this._s.NUptakeDifference / this._s.NFertilizerFactor) -\r\n\t\t\tthis._s.NMineralTotal) / this._s.FertilizationsPerMonth - this._s.NAppliedFromWater;\r\n\r\n\t\tresult.equations[0] = `${this.equationResult.toFixed(2)} =\r\n\t\t\t((${this._s.NUptakeDifference.toFixed(2)} / ${this._s.NFertilizerFactor.toFixed(2)}) -\r\n\t\t\t${this._s.NMineralTotal.toFixed(2)}) / ${this._s.FertilizationsPerMonth.toFixed(2)}`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected _getSoilNRatioLessThanEquation(result: IGeneratedEquation): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[0] = `${this._ts.translate('Fertilizer N Recommendation')} =\r\n\t\t\t((${this._ts.translate('Crop N Uptake')} * ${this._ts.translate('N Fertilizer Factor')}) -\r\n\t\t\t${this._ts.translate('Total Mineralized N')}) / ${this._ts.translate('Fertilizations Per Month')}`;\r\n\r\n\t\tthis.equationResult = ((this._s.NUptakeDifference * this._s.NFertilizerFactor) -\r\n\t\t\tthis._s.NMineralTotal) / this._s.FertilizationsPerMonth - this._s.NAppliedFromWater;\r\n\r\n\t\tresult.equations[0] = `${this.equationResult.toFixed(2)} =\r\n\t\t\t((${this._s.NUptakeDifference.toFixed(2)} * ${this._s.NFertilizerFactor.toFixed(2)}) -\r\n\t\t\t${this._s.NMineralTotal.toFixed(2)}) / ${this._s.FertilizationsPerMonth.toFixed(2)}`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected _getNearHarvestEquation(result: IGeneratedEquation): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[0] = `${this._ts.translate('Fertilizer N Recommendation')} =\r\n\t\t\t${this._ts.translate('Crop N Uptake')} / ${this._ts.translate('Fertilizations Per Month')}`;\r\n\r\n\t\tthis.equationResult = this._s.NUptakeDifference / this._s.FertilizationsPerMonth\r\n\t\t\t- this._s.NAppliedFromWater;\r\n\r\n\t\tresult.equations[0] = `${this.equationResult.toFixed(2)} =\r\n\t\t\t${this._s.NUptakeDifference.toFixed(2)} / ${this._s.FertilizationsPerMonth.toFixed(2)}`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected _getPrimaryEquation(result: IGeneratedEquation): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[0] = `${this._ts.translate('Fertilizer N Recommendation')} =\r\n\t\t\t${this._ts.translate('Crop N Uptake')} - ((${this._ts.translate('Soil N')} -\r\n\t\t\t${this._ts.translate('Soil N Threshold')}) -\r\n\t\t\t${this._ts.translate('Total Mineralized N')}) / ${this._ts.translate('Fertilizations Per Month')}`;\r\n\r\n\t\tthis.equationResult = (this._s.NUptakeDifference - (this._s.SoilN - this._s.SoilNThreshold) -\r\n\t\t\tthis._s.NMineralTotal) / this._s.FertilizationsPerMonth - this._s.NAppliedFromWater;\r\n\r\n\t\tresult.equations[0] = `${this.equationResult.toFixed(2)} =\r\n\t\t\t(${this._s.NUptakeDifference.toFixed(2)} - (${this._s.SoilN.toFixed(2)}\r\n\t\t\t- ${this._s.SoilNThreshold.toFixed(2)}) - ${this._s.NMineralTotal.toFixed(2)}) /\r\n\t\t\t${this._s.FertilizationsPerMonth.toFixed(2)}`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic getEquation(): IGeneratedEquation {\r\n\t\tlet result: IGeneratedEquation = {\r\n\t\t\tequationDescriptions: [],\r\n\t\t\tequations: []\r\n\t\t};\r\n\r\n\t\tlet f = FertilizationRecommendationFields;\r\n\r\n\t\t// need this check or switches might fail\r\n\t\tif (!this.isStrawberryRecommendationValid(this._s)) {\r\n\t\t\tthrow new Error('strawberry recommendation summary properties missing');\r\n\t\t}\r\n\r\n\t\tif ((this._s.NUptake / this._s.StrawberryFertilizationInterval) >= this._s.NUptakeThreshold) {\r\n\t\t\tif (this._s.SoilNRatio >= 0) {\r\n\t\t\t\tresult = this._getSoilNRatioGreaterEquation(result);\r\n\t\t\t} else {\r\n\t\t\t\tresult = this._getSoilNRatioLessThanEquation(result);\r\n\t\t\t}\r\n\r\n\t\t\tthis._s.SoilN = null;\r\n\t\t\tthis._s.SoilNThreshold = null;\r\n\t\t} else if (this.isNearHarvest(this._s)) {\r\n\t\t\tresult = this._getNearHarvestEquation(result);\r\n\r\n\t\t\tthis._s.SoilN = null;\r\n\t\t\tthis._s.SoilNThreshold = null;\r\n\t\t\tthis._s.NFertilizerFactor = null;\r\n\t\t\tthis._s.NMineralTotal = null;\r\n\t\t} else {\r\n\t\t\tresult = this._getPrimaryEquation(result);\r\n\t\t\tthis._s.NFertilizerFactor = null;\r\n\t\t}\r\n\r\n\t\tif (this.equationResult < 0) {\r\n\t\t\tthis.getNegativeMessage(result);\r\n\t\t} else if (this.isRecommendationClamped()) {\r\n\t\t\tthis.getClamped(result);\r\n\t\t}\r\n\r\n\t\tresult = this.addNinWater(result);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Method that validates recommendation summary object for strawberries\r\n\t * @param summary\r\n\t * @returns true if valid, else returns false\r\n\t */\r\n\tprotected isStrawberryRecommendationValid(summary: StrawberryFertilizationRecommendedSummaryViewModel): boolean {\r\n\t\tif (summary.NUptake === null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (summary.StrawberryFertilizationInterval === null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (summary.NUptakeThreshold === null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (summary.SoilNRatio === null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (summary.SoilNppm === null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (summary.SoilNThresholdppm === null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (summary.FractionalInterval === null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (summary.HarvestIntervalFraction === null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n}\r\n\r\n\r\n","import { StrawberryFertilizationRecommendedSummaryViewModel } from '../../../../fertilization-event/interfaces';\r\nimport { TranslateService } from '../../../../localization/service';\r\nimport { IGeneratedEquation } from './lettuceEquationGenerator';\r\nimport { FertilizationRecommendationFields, StrawberryEquationGenerator } from './strawberryEquationGenerator';\r\n\r\nexport class TomatoEquationGenerator extends StrawberryEquationGenerator {\r\n\tpublic constructor(s: StrawberryFertilizationRecommendedSummaryViewModel,\r\n\t\ttranslateService: TranslateService) {\r\n\t\tsuper(s, translateService);\r\n\t}\r\n\r\n\tprotected _getSoilNRatioGreaterEquation(result: IGeneratedEquation): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[0] = `${this._ts.translate('Fertilizer N Recommendation')} =\r\n\t\t\t(${this._ts.translate('Crop N Uptake')} / ${this._ts.translate('N Fertilizer Factor')}) -\r\n\t\t\t${this._ts.translate('Total Mineralized N')}`;\r\n\r\n\t\tthis.equationResult = (this._s.NUptakeDifference / this._s.NFertilizerFactor) - this._s.NMineralTotal\r\n\t\t\t- this._s.NAppliedFromWater;\r\n\r\n\t\tresult.equations[0] = `${this.equationResult.toFixed(2)} =\r\n\t\t\t(${this._s.NUptakeDifference.toFixed(2)} / ${this._s.NFertilizerFactor.toFixed(2)}) -\r\n\t\t\t${this._s.NMineralTotal.toFixed(2)}`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected _getSoilNRatioLessThanEquation(result: IGeneratedEquation): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[0] = `${this._ts.translate('Fertilizer N Recommendation')} =\r\n\t\t\t(${this._ts.translate('Crop N Uptake')} * ${this._ts.translate('N Fertilizer Factor')}) -\r\n\t\t\t${this._ts.translate('Total Mineralized N')}`;\r\n\r\n\t\tthis.equationResult = (this._s.NUptakeDifference * this._s.NFertilizerFactor) - this._s.NMineralTotal\r\n\t\t\t- this._s.NAppliedFromWater;\r\n\r\n\t\tresult.equations[0] = `${this.equationResult.toFixed(2)} = (${this._s.NUptakeDifference.toFixed(2)}\r\n\t\t* ${this._s.NFertilizerFactor.toFixed(2)}) - ${this._s.NMineralTotal.toFixed(2)}`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected _getNearHarvestEquation(result: IGeneratedEquation): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[0] = `${this._ts.translate('Fertilizer N Recommendation')} = ${this._ts.translate('Crop N Uptake')}`;\r\n\t\tthis.equationResult = this._s.NUptakeDifference - this._s.NAppliedFromWater;\r\n\t\tresult.equations[0] = `${this.equationResult.toFixed(2)} = this._s.NUptakeDifference.toFixed(2)`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected _getPrimaryEquation(result: IGeneratedEquation): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[0] = `${this._ts.translate('Fertilizer N Recommendation')} =\r\n\t\t\t${this._ts.translate('Crop N Uptake')} - (${this._ts.translate('Soil N')} -\r\n\t\t\t${this._ts.translate('Soil N Threshold')}) - ${this._ts.translate('Total Mineralized N')}`;\r\n\r\n\t\tthis.equationResult = this._s.NUptakeDifference - (this._s.SoilN\r\n\t\t\t- this._s.SoilNThreshold) - this._s.NMineralTotal - this._s.NAppliedFromWater;\r\n\r\n\t\tresult.equations[0] = `${this.equationResult.toFixed(2)} =\r\n\t\t\t${this._s.NUptakeDifference.toFixed(2)} - (${this._s.SoilN.toFixed(2)}\r\n\t\t\t- ${this._s.SoilNThreshold.toFixed(2)}) - ${this._s.NMineralTotal.toFixed(2)}`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic getEquation(): IGeneratedEquation {\r\n\t\tlet result: IGeneratedEquation = {\r\n\t\t\tequationDescriptions: [],\r\n\t\t\tequations: []\r\n\t\t};\r\n\r\n\t\tlet f = FertilizationRecommendationFields;\r\n\r\n\t\t// need this check or switches might fail\r\n\t\tif (!this.isStrawberryRecommendationValid(this._s)) {\r\n\t\t\tthrow new Error('tomato recommendation summary properties missing');\r\n\t\t}\r\n\r\n\t\tif ((this._s.NUptake / this._s.StrawberryFertilizationInterval) >= this._s.NUptakeThreshold) {\r\n\r\n\t\t\tif (this._s.SoilNRatio >= 0) {\r\n\t\t\t\tresult = this._getSoilNRatioGreaterEquation(result);\r\n\t\t\t} else {\r\n\t\t\t\tresult = this._getSoilNRatioLessThanEquation(result);\r\n\t\t\t}\r\n\r\n\t\t\tthis._s.SoilN = null;\r\n\t\t\tthis._s.SoilNThreshold = null;\r\n\t\t\tthis._s.FertilizationsPerMonth = null;\r\n\t\t} else if (this.isNearHarvest(this._s)) {\r\n\t\t\tresult = this._getNearHarvestEquation(result);\r\n\t\t\tthis._s.SoilN = null;\r\n\t\t\tthis._s.SoilNThreshold = null;\r\n\t\t\tthis._s.NFertilizerFactor = null;\r\n\t\t\tthis._s.NMineralTotal = null;\r\n\t\t} else {\r\n\t\t\tresult = this._getPrimaryEquation(result);\r\n\t\t\tthis._s.NFertilizerFactor = null;\r\n\t\t}\r\n\r\n\t\tif (this.equationResult < 0) {\r\n\t\t\tresult = this.getNegativeMessage(result);\r\n\t\t} else if (this.isRecommendationClamped()) {\r\n\t\t\tresult = this.getClamped(result);\r\n\t\t}\r\n\r\n\t\tresult = this.addNinWater(result);\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { AlmondRecommendationSummaryModel } from '../../../../fertilization-event/interfaces';\r\nimport { TranslateService } from '../../../../localization/service';\r\nimport { EquationGenerator } from './equationGenerator';\r\nimport { IGeneratedEquation } from './lettuceEquationGenerator';\r\n\r\nexport class TreeEquationGenerator extends EquationGenerator {\r\n\tprotected _s: AlmondRecommendationSummaryModel;\r\n\r\n\tpublic constructor(s: AlmondRecommendationSummaryModel,\r\n\t\ttranslateService: TranslateService) {\r\n\t\tsuper(s, translateService);\r\n\t\tthis._s = s;\r\n\t}\r\n\r\n\tprotected _getPrimaryEquation(result: IGeneratedEquation): IGeneratedEquation {\r\n\t\tresult.equationDescriptions[1] = `${this._ts.translate('Recommendation')} =\r\n\t\t\t${this._ts.translate('Crop N Uptake')} - ${this._ts.translate('Total Mineralized N')}`;\r\n\r\n\t\tthis.equationResult = this._s.NUptakeDifference - this._s.NMineralTotal\r\n\t\t\t- this._s.NAppliedFromWater;\r\n\r\n\t\tresult.equations[1] = `${this.equationResult.toFixed(2)} = ${this._s.NUptakeDifference.toFixed(2)} -\r\n\t\t\t\t${this._s.NMineralTotal.toFixed(2)}`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic getEquation(): IGeneratedEquation {\r\n\t\tlet result: IGeneratedEquation = {\r\n\t\t\tequationDescriptions: [],\r\n\t\t\tequations: []\r\n\t\t};\r\n\r\n\t\tresult.equationDescriptions[0] = `${this._ts.translate('Seasonal N Recommendation')} =\r\n\t\t\t(${this._ts.translate('Seasonal Crop N Demand')} - ${this._ts.translate('N Soil Amendments')}) * 100 /\r\n\t\t\t${this._ts.translate('Fertilizer N Use Efficiency')}`;\r\n\r\n\t\tresult.equations[0] = `${this._s.MaxUptake.toFixed(2)} = (${this._s.TotalCropNDemand.toFixed(2)} -\r\n            ${this._s.NSoilAmendments.toFixed(2)}) * 100 / ${this._s.UseEfficiency.toFixed(2)}`;\r\n\r\n\t\tif (this._s.MaxUptake < 0) {\r\n\t\t\tresult.equations[1] = this._ts.translate('Negative Season N Rec Warning Text') + '.';\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tresult = this._getPrimaryEquation(result);\r\n\r\n\t\tif (this.equationResult < 0) {\r\n\t\t\tthis.getNegativeMessage(result, 2);\r\n\t\t} else if (this.isRecommendationClamped()) {\r\n\t\t\tresult = this.getClamped(result, 2);\r\n\t\t}\r\n\r\n\t\tresult = this.addNinWater(result, 1);\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\nimport { FertilizationRecommendedSummaryViewModel, StrawberryFertilizationRecommendedSummaryViewModel, IFertilizationEvent,\r\n\tAlmondRecommendationSummaryModel,\r\n\tLettuceFertilizationRecommendedSummaryViewModel,\r\n\tTomatoFertilizationRecommendedSummaryViewModel} from '../../../fertilization-event/interfaces';\r\n\r\nimport { IGeneratedEquation, LettuceEquationGenerator } from './equation-generators/lettuceEquationGenerator';\r\nimport { StrawberryEquationGenerator } from './equation-generators/strawberryEquationGenerator';\r\nimport { TomatoEquationGenerator } from './equation-generators/tomatoEquationGenerator';\r\nimport { TreeEquationGenerator } from './equation-generators/treeEquationGenerator';\r\nimport { EquationGenerator } from './equation-generators/equationGenerator';\r\nimport { TranslateService } from '../../../localization/service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'fertilizer-recommendation',\r\n\ttemplate: ``\r\n})\r\n\r\nexport class FertilizationRecommendationComponent {\r\n\t/**\r\n\t * Used to display detailed information inside the hover panel template\r\n\t */\r\n\tpublic recommendationSummary: FertilizationRecommendedSummaryViewModel | StrawberryFertilizationRecommendedSummaryViewModel\r\n\t\t| AlmondRecommendationSummaryModel;\r\n\r\n\tpublic equationDescriptions: string[];\r\n\tpublic equations: string[];\r\n\r\n\tconstructor(\r\n\t\tprivate _translateservice: TranslateService\r\n\t) {\r\n\t\tthis.equationDescriptions = [];\r\n\t\tthis.equations = [];\r\n\t}\r\n\r\n\t/**\r\n     * Fertilization event popup calls this function directly. The component is instantiated as a child component\r\n\t * using ViewChild\r\n     *\r\n     * This is a top level function.\r\n     *\r\n     * @param recommendationDetails\r\n     */\r\n\tpublic render(recommendationDetails: FertilizationRecommendedSummaryViewModel |\r\n\t\tStrawberryFertilizationRecommendedSummaryViewModel\r\n\t\t| AlmondRecommendationSummaryModel): void {\r\n\r\n\t\tlet lettuce: LettuceFertilizationRecommendedSummaryViewModel;\r\n\t\tlet strawberry: StrawberryFertilizationRecommendedSummaryViewModel;\r\n\t\tlet trees: AlmondRecommendationSummaryModel;\r\n\t\tlet tomato: TomatoFertilizationRecommendedSummaryViewModel;\r\n\t\tlet generator: EquationGenerator;\r\n\t\tlet generatedEquations: IGeneratedEquation;\r\n\r\n\t\tif (!recommendationDetails) {\r\n\t\t\tthrow new Error('recommendation details are missing');\r\n\t\t}\r\n\r\n\t\tlettuce = recommendationDetails as LettuceFertilizationRecommendedSummaryViewModel;\r\n\t\tstrawberry = recommendationDetails as StrawberryFertilizationRecommendedSummaryViewModel;\r\n\t\ttrees = recommendationDetails as AlmondRecommendationSummaryModel;\r\n\t\ttomato = recommendationDetails as TomatoFertilizationRecommendedSummaryViewModel;\r\n\r\n\t\tthis.recommendationSummary = recommendationDetails;\r\n\r\n\t\tif (strawberry.StrawberryFertilizationInterval) {\r\n\t\t\tif (strawberry.FertilizationsPerMonth > 0) {\r\n\t\t\t\tgenerator = new StrawberryEquationGenerator(strawberry, this._translateservice);\r\n\t\t\t} else {\r\n\t\t\t\tgenerator = new TomatoEquationGenerator(tomato, this._translateservice);\r\n\t\t\t}\r\n\t\t} else if (trees.NSoilAmendments !== undefined) {\r\n\t\t\tgenerator = new TreeEquationGenerator(trees, this._translateservice);\r\n\t\t} else {\r\n\t\t\tgenerator = new LettuceEquationGenerator(lettuce, this._translateservice);\r\n\t\t}\r\n\r\n\t\tgeneratedEquations = generator.getEquation();\r\n\r\n\t\tthis.equationDescriptions = generatedEquations.equationDescriptions;\r\n\t\tthis.equations = generatedEquations.equations;\r\n\t}\r\n\r\n\tpublic clearFertilizerRecommendationSummary(): void {\r\n\t\tthis.recommendationSummary = null;\r\n\t\tthis.equationDescriptions = []\r\n\t\tthis.equations = [];\r\n\t}\r\n}\r\n","<ng-container *ngIf=\"recommendationSummary\">\r\n\r\n\t<!-- Parameters List Section -->\r\n\t<!-- totalCropNDemand (trees) -->\r\n    <div class=\"bk-modal__dropdown-row\"\r\n        *ngIf=\"recommendationSummary.TotalCropNDemand !== undefined\">\r\n        <span class=\"bk-recommendation__label bk-bold\">\r\n            {{'Seasonal Crop N Demand' | translate }}\r\n            <info-icon matTooltip=\"{{'TotalCropNDemand Text' | translate}}\"></info-icon>\r\n        </span>\r\n        <span class=\"bk-recommendation__data\">\r\n            {{recommendationSummary.TotalCropNDemand | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n        </span>\r\n    </div>\r\n\r\n\t<!-- N Soil Ammendments (trees) -->\r\n    <div class=\"bk-modal__dropdown-row\"\r\n        *ngIf=\"recommendationSummary.NSoilAmendments !== undefined\">\r\n        <span class=\"bk-recommendation__label bk-bold\">\r\n            {{'N Soil Amendments' | translate }}\r\n            <mat-icon class=\"bk-info-icon\"\r\n                matTooltip=\"{{'Manure' | translate }}: {{recommendationSummary.ManureN}} lbs N/acre, {{'Compost' | translate}}: \r\n                {{recommendationSummary.CompostN}} lbs N/acre, {{'Cover Crop' | translate}}: \r\n                {{recommendationSummary.CoverCropN}} lbs N/acre\"\r\n                [matTooltipPosition]=\"'above'\" >\r\n                info_outline\r\n            </mat-icon>\r\n        </span>\r\n        <span class=\"bk-recommendation__data\">\r\n            {{recommendationSummary.NSoilAmendments | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n        </span>\r\n    </div>\r\n\r\n\t<!-- Usen Efficiency (trees)-->\r\n    <div class=\"bk-modal__dropdown-row\"\r\n        *ngIf=\"recommendationSummary.UseEfficiency !== undefined\">\r\n        <span class=\"bk-recommendation__label bk-bold\">\r\n            {{'Fertilizer N Use Efficiency' | translate }}\r\n            <info-icon matTooltip=\"{{'Use Efficiency Text' | translate}}\"></info-icon>\r\n        </span>\r\n        <span class=\"bk-recommendation__data\">\r\n            {{recommendationSummary.UseEfficiency | number: '1.2-2'}} %\r\n        </span>\r\n    </div>\r\n\r\n\t<!-- Future N Uptake -->\r\n    <div class=\"bk-modal__dropdown-row\"\r\n        *ngIf=\"recommendationSummary.NUptakeDifference != null\">\r\n        <span class=\"bk-recommendation__label bk-bold\">\r\n            {{'Crop N Uptake' | translate }}\r\n            <info-icon matTooltip=\"{{'Crop N Uptake Text' | translate}}\"></info-icon>\r\n        </span>\r\n        <span class=\"bk-recommendation__data\">\r\n            {{recommendationSummary.NUptakeDifference | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n        </span>\r\n    </div>\r\n\r\n\t<!-- N Fertilizer Factor (strawberry) -->\r\n    <div class=\"bk-modal__dropdown-row\"\r\n        *ngIf=\"recommendationSummary.NFertilizerFactor != null\">\r\n        <span class=\"bk-recommendation__label bk-bold\">\r\n            {{'N Fertilizer Factor' | translate }}\r\n            <info-icon [title]=\"'N Fertilizer Factor Text'\"></info-icon>\r\n        </span>\r\n        <span class=\"bk-recommendation__data\">\r\n            {{recommendationSummary.NFertilizerFactor | number: '1.2-2'}}\r\n        </span>\r\n    </div>\r\n\r\n\t<!-- Soil N-->\r\n    <div class=\"bk-modal__dropdown-row\"\r\n        *ngIf=\"recommendationSummary.SoilN != null\">\r\n        <span class=\"bk-recommendation__label bk-bold\">\r\n            {{'Soil N' | translate }}\r\n            <info-icon [title]=\"'Soil N Text'\"></info-icon>\r\n        </span>\r\n        <span class=\"bk-recommendation__data\">\r\n            {{recommendationSummary.SoilN | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n        </span>\r\n        <span *ngIf=\"recommendationSummary.SoilNppm !== null\"\r\n            class=\"bk-recommendation__sub-data\">\r\n            ({{ recommendationSummary.SoilNppm | number: '1.2-2' }} ppm N)\r\n        </span>\r\n    </div>\r\n\r\n\t<!-- Soil N Threshold -->\r\n    <div class=\"bk-modal__dropdown-row\"\r\n        *ngIf=\"recommendationSummary.SoilNThreshold != null\">\r\n        <span class=\"bk-recommendation__label bk-bold\">\r\n            {{'Soil N Threshold' | translate }}\r\n            <info-icon [title]=\"'Soil N Threshold Text'\"></info-icon>\r\n        </span>\r\n        <span class=\"bk-recommendation__data\">\r\n            {{recommendationSummary.SoilNThreshold | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n        </span>\r\n        <span *ngIf=\"recommendationSummary.SoilNThresholdppm !== null\"\r\n            class=\"bk-recommendation__sub-data\">\r\n            ({{ recommendationSummary.SoilNThresholdppm | number: '1.2-2' }} ppm N)\r\n        </span>\r\n    </div>\r\n\r\n\t<!-- Soil Density -->\r\n    <div class=\"bk-modal__dropdown-row\"\r\n        *ngIf=\"recommendationSummary.Density > 0\">\r\n        <span class=\"bk-recommendation__label bk-bold\">\r\n            {{'Soil Bulk Density' | translate }}\r\n            <info-icon [title]=\"'Soil Bulk Density Text'\"></info-icon>\r\n        </span>\r\n        <span class=\"bk-recommendation__data\">\r\n            {{recommendationSummary.Density | number: '1.2-2'}} g/cc\r\n        </span>\r\n    </div>\r\n\r\n\t<!-- N Mineral Total -->\r\n    <div class=\"bk-modal__dropdown-row\"\r\n        *ngIf=\"recommendationSummary.NMineralTotal != null\">\r\n        <span class=\"bk-recommendation__label bk-bold\">\r\n            {{'Total Mineralized N' | translate }}\r\n            <info-icon [title]=\"'Total Mineralized N Text'\"></info-icon>\r\n        </span>\r\n        <span class=\"bk-recommendation__data\">\r\n            {{recommendationSummary.NMineralTotal | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n        </span>\r\n    </div>\r\n\r\n\t<!-- Fertilizations per month -->\r\n    <div class=\"bk-modal__dropdown-row\"\r\n        *ngIf=\"recommendationSummary.FertilizationsPerMonth != null\">\r\n        <span class=\"bk-recommendation__label bk-bold\">\r\n            {{'Fertilizations Per Month' | translate }}\r\n            <info-icon [title]=\"'Fertilizations Per Month Text'\"></info-icon>\r\n        </span>\r\n        <span class=\"bk-recommendation__data\">\r\n            {{recommendationSummary.FertilizationsPerMonth | number: '1.2-2'}}\r\n        </span>\r\n    </div>\r\n\r\n\t<!-- N in water -->\r\n    <div class=\"bk-modal__dropdown-row bk-modal__dropdown-row--n-contribution\"\r\n        *ngIf=\"recommendationSummary.NAppliedFromWater > 0\">\r\n        <span class=\"bk-recommendation__label bk-bold\">\r\n            {{'Water N Contribution' | translate }}\r\n            <info-icon [title]=\"'Water N Contribution Text'\"></info-icon>\r\n        </span>\r\n        <span class=\"bk-recommendation__data\">\r\n            {{ recommendationSummary.NAppliedFromWater | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n        </span>\r\n        <span class=\"bk-recommendation__sub-data\">\r\n            ({{ nInWater }} \r\n            <ng-container *ngIf=\"isFormulationTypeDry\">\r\n                {{'lbs' | translate }}/{{'acre' | translate }}\r\n            </ng-container>\r\n            <ng-container *ngIf=\"!isFormulationTypeDry\">\r\n                {{'gal' | translate }}/{{'acre' | translate }}\r\n            </ng-container>)\r\n        </span>\r\n    </div>\r\n\r\n\t<!-- Equations Section -->\r\n    <div class=\"bk-modal__dropdown\">\r\n        {{equationDescriptions[0]}}\r\n    </div>\r\n    <div class=\"bk-modal__dropdown bk-bold\">\r\n        {{equations[0]}}\r\n    </div>\r\n    <div *ngIf=\"equationDescriptions[1] !== undefined\"\r\n        class=\"bk-modal__dropdown\"\r\n        [innerHTML]=\"equationDescriptions[1]\">\r\n    </div>\r\n    <div *ngIf=\"equations[1] !== undefined\" class=\"bk-modal__dropdown bk-bold\">\r\n        {{equations[1]}}\r\n    </div>\r\n    <div *ngIf=\"equationDescriptions[2] !== undefined\"\r\n        class=\"bk-modal__dropdown\"\r\n        [innerHTML]=\"equationDescriptions[2]\">\r\n    </div>\r\n        \r\n</ng-container>","import { Component, Input } from '@angular/core';\r\nimport { FertilizationRecommendationComponent } from './fertilization-recommendation';\r\nimport { TranslateService } from '../../../localization/service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'fertilization-recommendation-summary',\r\n\ttemplateUrl: 'recommendation-summary.html'\r\n})\r\n\r\nexport class FertilizationRecommendationSummaryComponent extends FertilizationRecommendationComponent {\r\n\t@Input()\r\n\tnInWater: number;\r\n\r\n\tconstructor(\r\n\t\tprivate _translateService: TranslateService\r\n\t) {\r\n\t\tsuper(_translateService);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\t\r\n\t<h4 mat-dialog-title>\r\n\t\t{{ 'Send Feedback' | translate }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<textarea\r\n\t\t\tclass='bk-feedback__textarea'\r\n\t\t\t[(ngModel)]='description'\r\n\t\t\tplaceholder=\"{{ 'Tell us what you think' | translate }}!\">\r\n\t\t</textarea>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button (click)=\"cancel()\" mat-button\r\n\t\t\tclass=\"bk-button--medium bk-dialog__button--secondary bk-button--text-only\">\r\n\t\t\t{{ 'Cancel' | translate }}\r\n\t\t</button>\r\n\r\n\t\t<button\r\n\t\t\t[disabled]=\"!description\"\r\n\t\t\t(click)=\"send()\"\r\n\t\t\tmat-button\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t\t{{ 'Send' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { FeedbackService } from './service';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { eNotificationTypes } from '../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'feedback',\r\n\ttemplateUrl: 'feedback.html'\r\n})\r\n\r\nexport class FeedbackComponent implements OnInit {\r\n\r\n\tpublic description: string;\r\n\r\n\tconstructor(\r\n\t\tpublic dialogRef: MatDialogRef<FeedbackComponent>,\r\n\t\tpublic notificationService: NotificationService,\r\n\t\tpublic service: FeedbackService\r\n\t) {\r\n\t\t// disable click outside\r\n\t\tthis.dialogRef.disableClose = true;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n\r\n\tpublic send(): void {\r\n\r\n\t\t// validate ET value before posting...\r\n\r\n\t\tif (!this.description) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.service.send(this.description).then(() => {\r\n\t\t\tthis.dialogRef.close();\r\n\r\n\t\t\tthis.notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\tmessage: 'Your feedback was sent successfully.'\r\n\t\t\t});\r\n\r\n\t\t});\r\n\t}\r\n\r\n\tpublic cancel(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ModelService } from '../../services/model.service';\r\n\r\n@Injectable()\r\nexport class FeedbackService extends ModelService {\r\n\r\n\tprivate urls = {\r\n\t\tsend: '/v2/feedback/send.json',\r\n\t};\r\n\r\n\tpublic send(description: string): Promise<void> {\r\n\t\tlet params: {\r\n\t\t\tDescription: string\r\n\t\t};\r\n\r\n\t\tparams = {\r\n\t\t\tDescription: description\r\n\t\t};\r\n\r\n\t\treturn this.post(this.urls.send,\r\n\t\t\t(): void => {\r\n\t\t}, params);\r\n\t}\r\n}\r\n","import { ValidateService } from '../../services/validate.service';\r\nimport { CalculateService } from '../../services/calculate.service';\r\n\r\nimport { IRawFertilizationEvent, IFertilizationRecommendation, FertilizationEventEditViewModel, IFertilizationEvent }\r\n\tfrom './interfaces';\r\n\r\nimport { ICropStage } from '../../models/crop-stage/interfaces';\r\nimport { IFormSoilSample } from '../soil-sample-event/interfaces';\r\nimport { IFormFertilizer } from '../ranch-settings/modals/fertilizer/interfaces';\r\nimport { eFertilizerFormulationTypes } from '../../interfaces/constants';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\n\r\nexport class FertilizationEvent implements IFertilizationEvent {\r\n\r\n\tpublic FertilizerApplied: number;\r\n\tpublic FertilizerName: string;\r\n\tpublic FormulationType: string;\r\n\tpublic Id: number;\r\n\tpublic LastUpdatedUser: string;\r\n\tpublic NApplied: number;\r\n\tpublic NPercentage: number;\r\n\tpublic IsFormulationTypeDry: boolean;\r\n\tpublic LbsPerGallon: number;\r\n\tpublic Recommendation: IFertilizationRecommendation;\r\n\tpublic SoilSampleEventDate: Date;\r\n\tpublic Metainfo: string;\r\n\tpublic DaysToNextFertilization: number;\r\n\tpublic FertilizationsPerMonth: number;\r\n\tpublic EventDate: Date;\r\n\tpublic NAppliedFromWater: number;\r\n\tpublic IrrigationMethodId: number;\r\n\tpublic IrrigationEventDate: Date;\r\n\tpublic IrrigationAmount: number;\r\n\tpublic UseWells: boolean;\r\n\tpublic PPMTotal: number;\r\n\tpublic IrrigationRecommendation: number;\r\n\tpublic ratio: number;\r\n\tpublic NutrientPercentages: number[];\r\n\tpublic YieldTarget?: number;\r\n\tpublic DateOnly?: boolean;\r\n\r\n\t// raw model properties from combined events list\r\n\tpublic CropStage: ICropStage;\r\n\tpublic SoilNitrate: number;\r\n\tpublic NUptake: number;\r\n\tpublic FormulationTypeId: number;\r\n\r\n\t// View properties\r\n\tpublic DisplayAmount: number;\r\n\tpublic DisplayFertilizationUnit: number;\r\n\tpublic DisplayLbsNPerAcre: number;\r\n\r\n\t// fertilization event form properties\r\n\tpublic CommodityTypeId: number;\r\n\tpublic CropStageId: number;\r\n\tpublic CropStages: ICropStage[];\r\n\tpublic Fertilizers: IFormFertilizer[];\r\n\tpublic SoilSamples: IFormSoilSample[];\r\n\tpublic FertilizerId: number;\r\n\tpublic startDate: string;\r\n\tpublic endDate: string;\r\n\tpublic FertilizationRecommendationLbsPerAcre: number;\r\n\tpublic NFertilizationRecommended: number;\r\n\tpublic lastIrrigationMethod: number;\r\n\tpublic managerNRecommendation: number;\r\n\tpublic ManagerFertilizerAmount: number;\r\n\tpublic ShowDetails: boolean; // virtual, used in showing calculation details in event table\r\n\r\n\t// temporary fix\r\n\tpublic EndDate?: string; // remove this later - doesn't exist in JSON stream\r\n\tpublic HarvestDate?: string; // remove this later\r\n\tpublic StartDate?: string; // remove this later\r\n\tpublic LastUpdated?: string; // last updated meta\r\n\r\n\tpublic static convertNToFertilizerAmount(lbsN: number, fe: IFertilizationEvent): number {\r\n\t\tlet result: number;\r\n\t\tlet calc: number;\r\n\r\n\t\tresult = 0;\r\n\r\n\t\tif (!ValidateService.isValidNumber(lbsN)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (lbsN === -1) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (!ValidateService.isValidNumber(fe.NPercentage) || (fe.IsFormulationTypeDry === false\r\n\t\t\t&& !ValidateService.isValidNumber(fe.LbsPerGallon))) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (fe.NPercentage === 0) {\r\n\t\t\tcalc = 0;\r\n\t\t} else if (fe.IsFormulationTypeDry || fe.FormulationType === 'Dry') {\r\n\t\t\tcalc = 100 / fe.NPercentage;\r\n\t\t} else if (fe.LbsPerGallon * fe.NPercentage / 100 === 0) {\r\n\t\t\tcalc = 1;\r\n\t\t} else {\r\n\t\t\tcalc = 1 / (fe.LbsPerGallon * fe.NPercentage / 100);\r\n\t\t}\r\n\r\n\t\tif (fe.NPercentage > 0) {\r\n\t\t\tresult = lbsN * calc;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * This method returns fertilizer unit instead of N\r\n\t *\r\n\t * @param event\r\n\t * @param past\r\n\t * @param calculateService\r\n\t */\r\n\tpublic static getFertilizerUnit(event: IFertilizationEvent): number {\r\n\r\n\t\tif (!event || event.Recommendation == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (event.FertilizerApplied !== null) {\r\n\t\t\treturn event.FertilizerApplied;\r\n\t\t}\r\n\r\n\t\tif (event.Recommendation.managerFertilizerAmount !== null) {\r\n\t\t\treturn event.Recommendation.managerFertilizerAmount;\r\n\t\t}\r\n\r\n\t\tif (event.Recommendation.manager !== null) { // if we have N amount, we convert\r\n\t\t\treturn FertilizationEvent.convertNToFertilizerAmount(event.Recommendation.manager, event);\r\n\t\t}\r\n\r\n\t\tif (event.Recommendation.cropManage !== null) {\r\n\t\t\tif (event.NPercentage > 0) {\r\n\t\t\t\treturn FertilizationEvent.convertNToFertilizerAmount(event.Recommendation.cropManage, event);\r\n\t\t\t} else {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t}\r\n\r\n\t// for getting the lbs of a given nutrient. if fertilizer is dry, need lbsPerGallon\r\n\tpublic static getNutrientAmount(percentage: number, fertlizerAmount: number, lbsPerGallon = 1): number {\r\n\t\tlet nutrientAmount: number = (percentage / 100) * fertlizerAmount * lbsPerGallon;\r\n\r\n\t\tif (!nutrientAmount) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\treturn ValidateService.truncateDecimals(nutrientAmount, 2);\r\n\t}\r\n\r\n\t/**\r\n\t * Used to display nutrients for alfalfa, in event table\r\n\t *\r\n\t * @param fertilizationEvent\r\n\t * @param fertilizerAmount\r\n\t * @param nutrientIndex\r\n\t */\r\n\tpublic static getFertilizerNutrientAmount(fertilizationEvent: FertilizationEvent,\r\n\t\tfertilizerAmount: number, nutrientIndex: number): number {\r\n\r\n\t\tlet percentage: number;\r\n\t\tlet formulationType: eFertilizerFormulationTypes;\r\n\t\tlet lbsPerGallon: number;\r\n\r\n\t\tif (!fertilizationEvent) {\r\n\t\t\tthrow new Error('Fertilization event doesn\\'t exist');\r\n\t\t}\r\n\r\n\t\tif (!ValidateService.isValidNumber(nutrientIndex)) {\r\n\t\t\tthrow new Error('NutrientIndex is not a number');\r\n\t\t}\r\n\r\n\t\tif (!fertilizationEvent.NutrientPercentages) {\r\n\t\t\tthrow new Error('NurientPercentaages is empty');\r\n\t\t}\r\n\r\n\t\tpercentage = fertilizationEvent.NutrientPercentages[nutrientIndex];\r\n\t\tformulationType = fertilizationEvent.FormulationTypeId;\r\n\t\tlbsPerGallon = fertilizationEvent.LbsPerGallon;\r\n\r\n\t\tif (!ValidateService.isValidNumber(percentage)) {\r\n\t\t\tthrow new Error('percentage is not a valid number');\r\n\t\t}\r\n\r\n\t\tif (!ValidateService.isValidNumber(fertilizerAmount)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (formulationType === eFertilizerFormulationTypes.WET && ValidateService.isValidNumber(lbsPerGallon)) {\r\n\t\t\treturn FertilizationEvent.getNutrientAmount(percentage, fertilizerAmount, lbsPerGallon);\r\n\t\t}\r\n\r\n\t\treturn FertilizationEvent.getNutrientAmount(percentage, fertilizerAmount);\r\n\t}\r\n\r\n\tpublic static getNextFertilizationDate(startDate: Date, fertilizationsPerMonth: number, daysToNextFertilization: number): Date {\r\n\t\tlet offset: number;\r\n\t\tlet DAYS_IN_MONTH = 30;\r\n\t\tlet result: Date;\r\n\r\n\t\tif (!startDate) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = new Date(startDate);\r\n\r\n\t\tif (fertilizationsPerMonth > 0) {\r\n\t\t\toffset = Math.round(DAYS_IN_MONTH / fertilizationsPerMonth);\r\n\t\t} else if (daysToNextFertilization > 0) {\r\n\t\t\toffset = daysToNextFertilization;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult.setDate(result.getDate() + offset);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static convertAmounttoLbsN(fertilizerAmount: number, NPercentage: number,\r\n\t\tisFormulationTypeDry: boolean, lbsPerGallon: number): number {\r\n\t\tlet lbsN: number;\r\n\t\tlet calc: number;\r\n\t\tlet inverse: number;\r\n\r\n\t\tlbsN = 0;\r\n\r\n\t\tif (!ValidateService.isValidNumber(fertilizerAmount)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (fertilizerAmount === -1) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (!ValidateService.isValidNumber(NPercentage) || (isFormulationTypeDry === false\r\n\t\t\t&& !ValidateService.isValidNumber(lbsPerGallon))) {\r\n\t\t\tthrow new Error('toLbsN - some of the fertlizer values are not valid');\r\n\t\t}\r\n\r\n\t\tif (NPercentage === 0) {\r\n\t\t\tcalc = 0;\r\n\t\t\tinverse = 0;\r\n\t\t} else {\r\n\t\t\tif (isFormulationTypeDry) {\r\n\t\t\t\tcalc = 100 / NPercentage;\r\n\t\t\t} else if (lbsPerGallon * NPercentage / 100 === 0) {\r\n\t\t\t\tcalc = 1;\r\n\t\t\t} else {\r\n\t\t\t\tcalc = 1 / (lbsPerGallon * NPercentage / 100);\r\n\t\t\t}\r\n\r\n\t\t\tinverse = 1 / calc;\r\n\t\t}\r\n\r\n\t\tif (NPercentage > 0) {\r\n\t\t\tlbsN = fertilizerAmount * inverse;\r\n\t\t}\r\n\r\n\t\treturn lbsN;\r\n\t}\r\n\r\n\tconstructor(eventDate?: Date) {\r\n\t\tif (eventDate) {\r\n\t\t\tthis.EventDate = eventDate;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic convert(source: IRawFertilizationEvent, eventDate: Date): void {\r\n\r\n\t\tthis.Metainfo = source.Metainfo;\r\n\t\tthis.CropStage = source.CropStage;\r\n\t\tthis.SoilNitrate = source.SoilNitrate;\r\n\t\tthis.Id = source.Id;\r\n\t\tthis.FertilizerApplied = source.FertilizerApplied;\r\n\t\tthis.FertilizerName = source.FertilizerName; // bad construct\r\n\t\tthis.LbsPerGallon = source.LbsPerGallon;\r\n\t\tthis.NApplied = source.NApplied;\r\n\t\tthis.NPercentage = source.NPercentage;\r\n\t\tthis.NUptake = source.NUptake;\r\n\t\tthis.FormulationType = source.FormulationType; // should be Formulation\r\n\t\tthis.FormulationTypeId = source.FormulationTypeId; // should be formulation\r\n\t\tthis.SoilSampleEventDate = DateUtility.DotNetToDate(source.SoilSampleEventDate); // doesn't belong in here\r\n\t\tthis.NAppliedFromWater = source.NAppliedFromWater;\r\n\t\tthis.Recommendation = source.Recommendation;\r\n\t\tthis.LastUpdatedUser = source.LastUpdatedUser;\r\n\t\tthis.EventDate = eventDate;\r\n\t\tthis.IsFormulationTypeDry = this.FormulationType === 'Dry';\r\n\t\tthis.NutrientPercentages = source.NutrientPercentages;\r\n\r\n\t\tthis.DisplayAmount = FertilizationEvent.getFertilizerUnit(this);\r\n\t\tthis.DisplayFertilizationUnit = this.DisplayAmount;\r\n\t\tthis.DisplayLbsNPerAcre = this.convertFertilizerAmountToLbsN(this.DisplayAmount);\r\n\t}\r\n\r\n\tpublic convertFertilizerAmountToLbsN(fertilizerAmount: number): number {\r\n\t\tlet lbsN: number;\r\n\t\tlet calc: number;\r\n\t\tlet inverse: number;\r\n\r\n\t\tlbsN = 0;\r\n\r\n\t\tif (!ValidateService.isValidNumber(fertilizerAmount)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (fertilizerAmount === -1) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (!ValidateService.isValidNumber(this.NPercentage) || (this.IsFormulationTypeDry === false\r\n\t\t\t&& !ValidateService.isValidNumber(this.LbsPerGallon))) {\r\n\t\t\tthrow new Error('toLbsN - some of the fertlizer values are not valid');\r\n\t\t}\r\n\r\n\t\tif (this.NPercentage === 0) {\r\n\t\t\tcalc = 0;\r\n\t\t\tinverse = 0;\r\n\t\t} else {\r\n\t\t\tif (this.IsFormulationTypeDry || this.FormulationType === 'Dry') {\r\n\t\t\t\tcalc = 100 / this.NPercentage;\r\n\t\t\t} else if (this.LbsPerGallon * this.NPercentage / 100 === 0) {\r\n\t\t\t\tcalc = 1;\r\n\t\t\t} else {\r\n\t\t\t\tcalc = 1 / (this.LbsPerGallon * this.NPercentage / 100);\r\n\t\t\t}\r\n\r\n\t\t\tinverse = 1 / calc;\r\n\t\t}\r\n\r\n\t\tif (this.NPercentage > 0) {\r\n\t\t\tlbsN = fertilizerAmount * inverse;\r\n\t\t}\r\n\r\n\t\treturn lbsN;\r\n\t}\r\n\r\n\tpublic parseForm(m: FertilizationEventEditViewModel): void {\r\n\t\tif (!m) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.CommodityTypeId = m.CommodityTypeId;\r\n\t\tthis.CropStages = m.CropStages;\r\n\t\tthis.Fertilizers = m.Fertilizers;\r\n\r\n\t\tthis.SoilSamples = new Array();\r\n\r\n\t\tfor (let soilSample of m.SoilSamples) {\r\n\t\t\tthis.SoilSamples.push({\r\n\t\t\t\tId: soilSample.Id,\r\n\t\t\t\tDate: DateUtility.DotNetToDate(soilSample.Date),\r\n\t\t\t\tName: soilSample.Name\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.DaysToNextFertilization = m.DaysToNextFertilization;\r\n\t\tthis.startDate = m.startDate;\r\n\t\tthis.endDate = m.endDate;\r\n\t\tthis.LastUpdated = m.LastUpdated;\r\n\r\n\t\tthis.EventDate = m.EventDate ?\r\n\t\t\tDateUtility.DotNetToDate(m.EventDate) : new Date();\r\n\r\n\t\tthis.CropStageId = ValidateService.isValidNumber(m.CropStageId) ?\r\n\t\t\tm.CropStageId : 0;\r\n\r\n\t\tthis.FertilizerId = ValidateService.isValidNumber(m.FertilizerId) ?\r\n\t\t\tm.FertilizerId : 0;\r\n\r\n\t\tthis.FertilizationsPerMonth = ValidateService.isValidNumber(m.FertilizationsPerMonth) ?\r\n\t\t\tm.FertilizationsPerMonth : null;\r\n\r\n\t\tthis.NPercentage = ValidateService.isValidNumber(m.NPercentage) ?\r\n\t\t\tm.NPercentage : null;\r\n\r\n\t\tthis.LbsPerGallon = ValidateService.isValidNumber(m.LbsPerGallon) ?\r\n\t\t\tm.LbsPerGallon : null;\r\n\r\n\t\tthis.IsFormulationTypeDry = m.IsFormulationTypeDry !== null && m.IsFormulationTypeDry !== undefined ?\r\n\t\t\tm.IsFormulationTypeDry : null;\r\n\r\n\t\tif (ValidateService.isValidNumber(m.NFertilizationRecommended)) {\r\n\t\t\tthis.NFertilizationRecommended = m.NFertilizationRecommended;\r\n\t\t\tthis.FertilizationRecommendationLbsPerAcre = FertilizationEvent.convertNToFertilizerAmount(this.NFertilizationRecommended, this);\r\n\t\t} else {\r\n\t\t\tthis.NFertilizationRecommended = null;\r\n\t\t\tthis.FertilizationRecommendationLbsPerAcre = null;\r\n\t\t}\r\n\r\n\t\tif (this.NPercentage === 0 && m.ManagerFertilizerAmount) {\r\n\t\t\t// case for 0N based fertilizer, where we still want to display manager amount\r\n\t\t\tthis.managerNRecommendation = 0;\r\n\t\t} else if (ValidateService.isValidNumber(m.managerNRecommendation)) {\r\n\t\t\tthis.managerNRecommendation = m.managerNRecommendation;\r\n\t\t\tthis.ManagerFertilizerAmount = m.ManagerFertilizerAmount;\r\n\t\t} else {\r\n\t\t\tthis.managerNRecommendation = null;\r\n\t\t}\r\n\r\n\t\tthis.lastIrrigationMethod = ValidateService.isValidNumber(m.lastIrrigationMethod) ?\r\n\t\t\tm.lastIrrigationMethod : null;\r\n\r\n\t\tthis.SoilSampleEventDate = m.SoilSampleEventDate ?\r\n\t\t\tDateUtility.DotNetToDate(m.SoilSampleEventDate) : null;\r\n\r\n\r\n\r\n\t\tthis.NApplied = ValidateService.isValidNumber(m.NApplied) ?\r\n\t\t\tm.NApplied : null;\r\n\r\n\t\tthis.FertilizerApplied = ValidateService.isValidNumber(m.FertilizerApplied) ?\r\n\t\t\tm.FertilizerApplied : null;\r\n\r\n\t\t// N Applied from water values\r\n\t\tthis.IrrigationAmount = ValidateService.isValidNumber(m.IrrigationAmount) ?\r\n\t\t\tm.IrrigationAmount : null;\r\n\r\n\t\tthis.IrrigationEventDate = m.IrrigationEventDate ?\r\n\t\t\tDateUtility.DotNetToDate(m.IrrigationEventDate) : null;\r\n\r\n\t\tthis.IrrigationMethodId = ValidateService.isValidNumber(m.IrrigationMethodId) ?\r\n\t\t\tm.IrrigationMethodId : null;\r\n\r\n\t\tthis.IrrigationRecommendation = ValidateService.isValidNumber(m.IrrigationRecommendation) ?\r\n\t\t\tm.IrrigationRecommendation : null;\r\n\r\n\t\tthis.NAppliedFromWater = ValidateService.isValidNumber(m.NAppliedFromWater) ?\r\n\t\t\tm.NAppliedFromWater : null;\r\n\r\n\t\tthis.ratio = ValidateService.isValidNumber(m.ratio) ?\r\n\t\t\tm.ratio : null;\r\n\r\n\t\tthis.PPMTotal = ValidateService.isValidNumber(m.PPMTotal) ?\r\n\t\t\tm.PPMTotal : null;\r\n\r\n\t\tthis.UseWells = m.UseWells;\r\n\t\tthis.YieldTarget = m.YieldTarget;\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\r\n    <button type=\"button\"\r\n        class=\"bk-dialog__close\"\r\n        (click)=\"onClose()\">\r\n\r\n        &times;\r\n    </button>\r\n    \r\n    <h4 mat-dialog-title>\r\n        {{ (eventId ? 'Add' : 'Edit') | translate }} {{'Fertilization Event' | translate }}\r\n    </h4>\r\n\r\n    <div mat-dialog-content\r\n        *ngIf=\"isLoaded === false\">\r\n    \r\n        <div class=\"bk-loader__container\">\r\n            <div class=\"bk-loader\">{{'Loading' | translate }}...</div>\r\n        </div>\r\n    </div>\r\n\r\n    <div mat-dialog-content\r\n        *ngIf=\"isLoaded && form\">\r\n\r\n        <form [formGroup]=\"form\" class=\"bk-form\">\r\n            <mat-form-field appearance=\"fill\"\r\n                class='mat-form-field--one-line mat-form-field--short'>\r\n                <mat-label>{{ 'Event Date' | translate }}</mat-label>\r\n                <input matInput [matDatepicker]=\"picker\"\r\n                    [max]=\"maxDate\"\r\n                    size=\"10\"\r\n                    required\r\n                    formControlName=\"EventDate\">\r\n                <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n                <mat-datepicker #picker></mat-datepicker>\r\n                <mat-error *ngIf=\"f.EventDate.invalid && (f.EventDate.dirty || f.EventDate.touched)\">\r\n                    {{'Planting Event Date Error Text' | translate }}\r\n                </mat-error>\r\n            </mat-form-field>\r\n\r\n            <!-- Fertilizer Detail -->\r\n\r\n            <div class=\"bk-modal__dropdown-section\">\r\n                <a *ngIf=\"f.FertilizerId.value > 0\"\r\n                    href=\"javascript:void(0);\"\r\n                    class=\"bk-modal__dropdown-link\"\r\n                    [popper]=\"fertilizerDetail\"\r\n                    [popperTrigger]=\"'click'\"\r\n                    [popperPlacement]=\"'top'\"\r\n                    [popperTimeoutAfterShow]=\"5000\"\r\n                    >\r\n                    {{'Fertilizer Details' | translate }}\r\n                </a>\r\n            </div>\r\n\r\n            <mat-form-field appearance=\"fill\"\r\n                class=\"mat-form-field--one-line mat-form-field--short\">\r\n                <mat-label>\r\n                    {{'Fertilizer Type' | translate }}\r\n                </mat-label>\r\n                <mat-select formControlName=\"FertilizerId\"\r\n                    required>\r\n                    <mat-option *ngFor=\"let fertilizer of fertilizers\"\r\n                        [value]=\"fertilizer.Id\">\r\n                        {{fertilizer.Name}}\r\n                    </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"f.FertilizerId.invalid && (f.FertilizerId.dirty ||\r\n                    f.FertilizerId.touched)\">\r\n                    {{'This field is required.' | translate }}\r\n                </mat-error>\r\n            </mat-form-field>\r\n\r\n            <ng-container *ngIf=\"isFertilizationsPerMonth && isNDependent\">\r\n                <mat-form-field appearance=\"fill\"\r\n                    class=\"mat-form-field--one-line mat-form-field--short\">\r\n                    <mat-label>\r\n                        {{'Fertilizations Per Month' | translate }}\r\n                    </mat-label>\r\n                    <input matInput\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        required\r\n                        name=\"FertilizationsPerMonth\"\r\n                        formControlName=\"FertilizationsPerMonth\"/>\r\n                    <mat-error *ngIf=\"f.FertilizationsPerMonth.invalid &&\r\n                        (f.FertilizationsPerMonth.dirty || f.FertilizationsPerMonth.touched)\">\r\n                        {{'Fertilizations per Month must be a number between 1 and 10' | translate }}\r\n                    </mat-error>\r\n                </mat-form-field>\r\n            </ng-container>\r\n\r\n            <ng-container *ngIf=\"!isFertilizationsPerMonth && isNDependent\">\r\n                <mat-form-field appearance=\"fill\"\r\n                    class=\"mat-form-field--one-line mat-form-field--short\">\r\n                    <mat-label>\r\n                        {{'Days To Next Fertilization' | translate }}\r\n                    </mat-label>\r\n                    <input matInput\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        required\r\n                        name=\"DaysToNextFertilization\"\r\n                        formControlName=\"DaysToNextFertilization\"/>\r\n                    <mat-error *ngIf=\"f.DaysToNextFertilization.invalid &&\r\n                        (f.DaysToNextFertilization.dirty || f.DaysToNextFertilization.touched)\">\r\n                        {{'Not a valid number' | translate }}\r\n                    </mat-error>\r\n                </mat-form-field>\r\n            </ng-container>\r\n\r\n            <!--\r\n            <mat-form-field appearance=\"fill\"\r\n                class=\"mat-form-field--one-line mat-form-field--w3\">\r\n                <mat-label>\r\n                    {{'Crop Stage' | translate }}\r\n                </mat-label>\r\n                <mat-select formControlName=\"CropStageId\">\r\n                    <mat-option *ngFor=\"let stage of cropStages\"\r\n                        [value]=\"stage.Id\">\r\n                        {{stage.Name}}\r\n                    </mat-option>\r\n                </mat-select>\r\n            </mat-form-field>\r\n            -->\r\n\r\n            <!-- Soil Sample Dropdown -->\r\n\r\n            <ng-container *ngIf=\"!isTree && isNDependent\">\r\n                <!--\r\n                    trees use initial tissue samples for N calculation, so doesn't use soil samples\r\n                    alfalfa do not use N, so soil samples are not useful\r\n                -->\r\n                <mat-form-field appearance=\"fill\"\r\n                    class=\"mat-form-field--one-line mat-form-field--short\"\r\n                    hintLabel=\"{{ 'Choose the soil sample date used to calculate this recommendation' | translate }}\">\r\n                    <mat-label>\r\n                        {{'Soil Sample' | translate }}\r\n                    </mat-label>\r\n                    <mat-select formControlName=\"soilSampleEventId\"\r\n                        required>\r\n                        <mat-option [value]=\"-2\">\r\n                            {{'No Soil Sample' | translate}}\r\n                        </mat-option> <!-- \"null\" is a string, not null -->\r\n                        <mat-option [value]=\"-1\">\r\n                            {{'New Soil Sample' | translate}}\r\n                        </mat-option>\r\n                        <mat-option *ngFor=\"let sample of soilSamples\"\r\n                            [value]=\"sample.Id\">\r\n                            {{sample.Name}}\r\n                        </mat-option>\r\n                    </mat-select>\r\n                </mat-form-field>\r\n            </ng-container>\r\n\r\n            <!--NEW SOIL SAMPLE ADD SECTION-->\r\n\r\n            <ng-container *ngIf=\"f.soilSampleEventId.value === SOIL_SAMPLE_DROPDOWN_NEW\">\r\n                <soil-sample-ui [plantingId]=\"plantingId\"\r\n                    [eventDate]=\"f.EventDate.value\"\r\n                    [cropStageId]=\"f.CropStageId.value\"\r\n                    (onSoilSampleAdded)=\"onSoilSampleUpdated($event)\">\r\n                </soil-sample-ui>\r\n            </ng-container>\r\n\r\n            <!-- N Dependent crop recommendation section -->\r\n\r\n            <ng-container *ngIf=\"isNDependent && f.soilSampleEventId.value !== SOIL_SAMPLE_DROPDOWN_NEW\">\r\n                <div *ngIf=\"!firstStep\"\r\n                    class=\"bk-recommendations\">\r\n\r\n                    <ng-container *ngIf=\"!NContribution.UIVisible\">\r\n                        <!-- Unit Toggle -->\r\n\r\n                        <div class=\"bk-form-group\">\r\n                            <h4 class=\"bk-recommendations__title\">\r\n                                {{'Recommendation' | translate }}\r\n                            </h4>\r\n                            <div class=\"bk-button-set bk-button-set--right\r\n                                bk-button-set_event--right\">\r\n                                <button class=\"bk-button bk-button-set__button\r\n                                    bk-unit-menu__button bk-button--gray-icon\"\r\n                                    type=\"button\"\r\n                                    [ngClass]=\"{'bk-button-set__button--selected':\r\n                                        units === 'lbsNPerAcre'}\"\r\n                                    (click)=\"toggleToLbsNPerAcre()\">\r\n                                    {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                                </button>\r\n\r\n                                <button class=\"bk-button bk-button-set__button\r\n                                    bk-unit-menu__button bk-button--gray-icon\"\r\n                                    type=\"button\"\r\n                                    [ngClass]=\"{'bk-button-set__button--selected':\r\n                                        units == 'fertilizerUnit'}\"\r\n                                    (click)=\"toggleToFertUnits()\">\r\n                                    {{'Fertilizer Unit' | translate }}\r\n                                </button>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <!-- recommendation -->\r\n\r\n                        <div *ngIf=\"f.soilSampleEventId.value !== SOIL_SAMPLE_DROPDOWN_NEW\"\r\n                            id=\"fertilizationRecommendationsContainer\"\r\n                            class=\"bk-modal__clearfix\">\r\n\r\n                            <ng-container *ngIf=\"f.NPercentage.value === 0 || (form && form.invalid)\">\r\n                                <div class=\"bk-modal__recommendation\">\r\n                                    {{ 'N/A' | translate }}\r\n                                </div>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"f.NPercentage.value > 0 && form && form.valid\r\n                                && units === 'fertilizerUnit'\">\r\n                                <div class=\"bk-modal__recommendation\">\r\n                                    {{FertilizationRecommendationLbsPerAcre | number: '1.2-2'}} \r\n                                    <span *ngIf=\"f.IsFormulationTypeDry.value\"\r\n                                        class=\"bk-modal__recommendation--unit\">\r\n                                        {{'lbs' | translate }}/{{'acre' | translate }}\r\n                                    </span>\r\n                                    <span *ngIf=\"!f.IsFormulationTypeDry.value\"\r\n                                        class=\"bk-modal__recommendation--unit\">\r\n                                        {{'gal' | translate }}/{{'acre' | translate }}\r\n                                    </span>\r\n                                </div>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"f.NPercentage.value > 0 && form && form.valid &&\r\n                                units === 'lbsNPerAcre'\">\r\n                                <div class=\"bk-modal__recommendation\">\r\n                                    {{ NFertilizationRecommended | number: '1.2-2'}} \r\n                                    <span class=\"bk-modal__recommendation--unit\">\r\n                                        {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                                    </span>\r\n                                </div>\r\n                            </ng-container>\r\n\r\n                            <ng-container *ngIf=\"f.NPercentage.value > 0 && form && form.valid\">\r\n                                <a href=\"javascript:void(0);\"\r\n                                    class=\"bk-modal__dropdown-link bk-link--show-recommendation-summary\"\r\n                                    (click)=\"showRecommendationSummary()\">\r\n                                    {{'Recommendation Summary' | translate }}\r\n\r\n                                    <i *ngIf=\"!recommendationSummaryVisible\"\r\n                                        class=\"fa fa-angle-down bk-modal__dropdown-link-icon\">\r\n                                    </i>\r\n\r\n                                    <i *ngIf=\"recommendationSummaryVisible\"\r\n                                        class=\"fa fa-angle-up bk-modal__dropdown-link-icon\">\r\n                                    </i>\r\n                                </a>\r\n                                <div id=\"fertilizationRecommendationSummary\"\r\n                                    class=\"bk-modal__dropdown\"\r\n                                    [style.display]=\"recommendationSummaryVisible ? 'initial' : 'none'\" >\r\n                                    <fertilization-recommendation-summary\r\n                                        [nInWater]=\"getNAppliedFromWaterInFertilizerUnits()\">\r\n                                    </fertilization-recommendation-summary>\r\n                                </div>\r\n                            </ng-container>\r\n                        </div>\r\n                    \r\n                        <!-- N CONTRIBUTION SECTION -->\r\n\r\n                        <!-- display N Contribution button only if NAppliedFromWater isn't calculated yet, ranch has wells,\r\n                                and event is associated with a soil sample -->\r\n\r\n                        <button *ngIf=\"(loading.nContribution || f.NAppliedFromWater.value === null\r\n                            || NContribution.UIVisible)\r\n                            && f.soilSampleEventId.value !== SOIL_SAMPLE_DROPDOWN_NEW\"\r\n                            class=\"bk-button bk-n-contribution-ui__display-button\"\r\n                            type=\"button\"\r\n                            (click)=\"displayNContributionUI()\"\r\n                            [disabled]=\"NContribution.UIVisible || loading.nContribution || form.invalid\">\r\n                            {{ 'Include N Contribution From Water in Recommendation' | translate}}\r\n                        </button>\r\n\r\n                        <div class=\"bk-n-contribution-ui__details\" \r\n                                *ngIf=\"!loading.isInitial && !loading.nContribution && !NContribution.UIVisible &&\r\n                                f.NAppliedFromWater.value !== null && f.soilSampleEventId.value !== SOIL_SAMPLE_DROPDOWN_NEW\">\r\n\r\n                            <div class=\"bk-n-contribution-ui__n-applied\">\r\n                                {{ 'N Contribution From Water' | translate }}: \r\n                                <span class=\"bk-n-contribution-ui__n-applied--value\">\r\n                                    <ng-container *ngIf=\"units === 'lbsNPerAcre'\">\r\n                                        {{ f.NAppliedFromWater.value | number: '1.0-2'}} lbs N/{{'acre' | translate}}\r\n                                    </ng-container>\r\n                                    <ng-container *ngIf=\"units === 'fertilizerUnit'\">\r\n                                        {{getNAppliedFromWaterInFertilizerUnits() | number: '1.0-2'}} \r\n                                        <span *ngIf=\"f.IsFormulationTypeDry.value\">\r\n                                            {{'lbs' | translate }}/{{'acre' | translate }}\r\n                                        </span>\r\n                                        <span *ngIf=\"!f.IsFormulationTypeDry.value\">\r\n                                            {{'gal' | translate }}/{{'acre' | translate }}\r\n                                        </span>\r\n                                    </ng-container>\r\n                                </span>\r\n                                <i class=\"bk-n-contribution-ui__tooltip-icon bk-n-contribution-ui__tooltip-icon--edit fa fa-info-circle\"\r\n                                    [popper]=\"nContributionEditPopper\" \r\n                                    [popperTrigger]=\"'click'\"\r\n                                    [popperPlacement]=\"'top'\"\r\n                                    [popperTimeoutAfterShow]=\"10000\">\r\n                                </i>\r\n                            </div>\r\n                            <div class=\"bk-n-contribution-ui__n-applied--buttons\">\r\n                                <a (click)=\"editNContribution($event)\">\r\n                                    {{ 'Edit' | translate }}\r\n                                </a>\r\n                                <a (click)=\"clearNContribution($event)\">\r\n                                    {{ 'Clear' | translate }}\r\n                                </a>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div class=\"bk-n-contribution-ui\"\r\n                            #nContributionLoader>\r\n                            <div class=\"bk-n-contribution-ui__loader\" >\r\n                                <div class=\"bk-loader\">\r\n                                    {{'Loading' | translate }}...\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </ng-container>\r\n\r\n                    <div class=\"bk-n-contribution-ui\" #nContributionUI>\r\n                        <form [formGroup]=\"nContributionForm\">\r\n                            <h4 class=\"bk-new-soil-sample__title\">\r\n                                {{'N Contribution from Water' | translate}}\r\n                            </h4>\r\n                            <mat-form-field appearance=\"fill\"\r\n                                class=\"mat-form-field--half-width\">\r\n                                <mat-label>\r\n                                    {{'Expected Irrigation Method' | translate }}\r\n                                </mat-label>\r\n                                <mat-select formControlName=\"IrrigationMethodId\">\r\n                                    <mat-option *ngFor=\"let irrigationMethod of this.irrigationMethods\"\r\n                                        [value]=\"irrigationMethod.Id\">\r\n                                        {{irrigationMethod.Name}}\r\n                                    </mat-option>\r\n                                </mat-select>\r\n                            </mat-form-field>\r\n\r\n                            <div class=\"bk-n-contribution-ui__irrigation--loader\" #nContributionIrrigationLoader>\r\n                                <div class=\"bk-n-contribution-ui__loader\">\r\n                                    <div class=\"bk-loader\">\r\n                                        {{'Loading' | translate }}...\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div class=\"bk-n-contribution-ui__irrigation--container\" #nContributionIrrigation>\r\n\r\n                                <div class=\"bk-modal__radio-buttons bk-n-contribution-ui__radio-buttons\">\r\n                                    <mat-radio-group aria-label=\"\"\r\n                                        name=\"UseWells\"\r\n                                        formControlName=\"UseWells\">\r\n\r\n                                        <mat-radio-button [value]=\"true\"\r\n                                            (click)=\"calculateNContribution(true);\"\r\n                                            name=\"UseWells\">\r\n                                            <span *ngIf=\"fn.UseWells.value && fn.wells.value.length > 1\">\r\n                                                {{'Use Avg. Water Source PPM' | translate}}\r\n                                            </span>\r\n                                            <span *ngIf=\"fn.UseWells.value && fn.wells.value.length === 1\">\r\n                                                {{'Use Water Source PPM'}} ({{ NContribution.calculatedPPM | number: '1.0-2'}} ppm}\r\n                                            </span>\r\n                                        </mat-radio-button>\r\n\r\n                                        <mat-radio-button [value]=\"false\"\r\n                                            class=\"mat-radio-button--left-margin\"\r\n                                            (click)=\"calculateNContribution(true);\"\r\n                                            name=\"UseWells\">\r\n                                            {{'Enter PPM Manually' | translate}}\r\n                                        </mat-radio-button>\r\n                                    </mat-radio-group>\r\n                                </div>\r\n\r\n                                <ng-container *ngIf=\"fn.UseWells.value && fn.wells.value.length > 1\">\r\n                                    <label class=\"bk-n-contribution-ui__label\">\r\n                                        {{ 'Blending of Water from Various Water Sources' | translate }}\r\n                                    </label>\r\n\r\n                                    <div *ngIf=\"!fn.wells.value.length === 0\"\r\n                                        class=\"bk-n-contribution-ui__invalid-text bk-n-contribution-ui__invalid-text--no-wells\">\r\n                                        {{ 'There are no water sources associated with this Planting' | translate }}\r\n                                    </div>\r\n\r\n                                    <table *ngIf=\"fn.wells.value.length\"\r\n                                        class=\"bk-n-contribution-ui__table\">\r\n                                        <thead class=\"bk-n-contribution-ui__table-head\">\r\n                                            <tr>\r\n                                                <th class=\"bk-n-contribution-ui__table-head--border bk-n-contribution-ui__table-column--well\">\r\n                                                    {{ 'Water Source' | translate }}\r\n                                                </th>\r\n                                                <th class=\"bk-n-contribution-ui__table-head--border bk-n-contribution-ui__table-column--ppm\">\r\n                                                    {{ 'N Concentration' | translate }}\r\n                                                </th>\r\n                                                <th class=\"bk-n-contribution-ui__table-head--border bk-n-contribution-ui__table-column--percentage\">\r\n                                                    {{ '% Used for Planting' | translate }}\r\n                                                </th>\r\n                                                <th class=\"bk-n-contribution-ui__table-column--error\"></th>\r\n                                            </tr>\r\n                                        </thead>\r\n                                        <tbody class=\"bk-n-contribution-ui__table-body\">\r\n                                            <tr *ngFor=\"let well of fn.wells.controls; let i = index\">\r\n                                                <td class=\"bk-n-contribution-ui__table-body--border\">\r\n                                                    {{well.get('Name').value}}\r\n                                                </td>\r\n                                                <td class=\"bk-n-contribution-ui__table-body--border\">\r\n                                                    {{well.get('NitrogenPPM').value}} ppm\r\n                                                </td>\r\n                                                <td class=\"bk-n-contribution-ui__table-body--border\">\r\n                                                    <mat-form-field appearance=\"fill\"\r\n                                                        class=\"mat-form-field--remove-label-space\">\r\n                                                        <input matInput\r\n                                                            class=\"mat-input-element--text-align-right\"\r\n                                                            type=\"number\"\r\n                                                            step=\"0.01\"\r\n                                                            [formControl]=\"fn.wells.controls[i].get('Percentage')\"\r\n                                                            (blur)=\"calculateNContribution(true)\"/>\r\n                                                        <span matSuffix class=\"mat-form-field-suffix--padded\">%</span>\r\n                                                    </mat-form-field>\r\n                                                </td>\r\n                                                <td class=\"bk-n-contribution-ui__table-error\">\r\n                                                </td>\r\n                                            </tr>\r\n                                            <tr class=\"bk-n-contribution-ui__table-footer\">\r\n                                                <td class=\"bk-n-contribution-ui__table-footer--avg-text\">\r\n                                                    {{ 'Average N Concentration' | translate }}\r\n                                                </td>\r\n                                                <td>\r\n                                                    <span *ngIf=\"NContribution.calculatedPPM || NContribution.calculatedPPM === 0\">\r\n                                                        {{NContribution.calculatedPPM | number: '1.0-2'}} ppm\r\n                                                    </span>\r\n                                                    <span *ngIf=\"!NContribution.calculatedPPM && NContribution.calculatedPPM !== 0\">\r\n                                                        N/A ppm\r\n                                                    </span>\r\n                                                </td>\r\n                                                <td>\r\n                                                    {{ totalWellPercentage }}%\r\n                                                </td>\r\n                                                <td class=\"bk-n-contribution-ui__table-error\">\r\n                                                    <i *ngIf=\"totalWellPercentage !== 100\"\r\n                                                        class=\"bk-n-contribution-ui__table-error--icon-invalid fa fa-times\">\r\n                                                    </i>\r\n                                                    <i *ngIf=\"totalWellPercentage === 100\"\r\n                                                        class=\"bk-n-contribution-ui__table-error--icon-valid fa fa-check\"></i>\r\n                                                    <span *ngIf=\"totalWellPercentage !== 100\"\r\n                                                        class=\"bk-n-contribution-ui__table-error--text\">\r\n                                                        {{'Percentages must total 100' | translate}}.\r\n                                                        {{ 'You must'}} <ng-container *ngIf=\"totalWellPercentage < 100\">{{'add' | translate }} <b>{{ 100 - totalWellPercentage}}%</b></ng-container>\r\n                                                        <ng-container *ngIf=\"totalWellPercentage > 100\">{{'subtract' | translate}} <b>{{ totalWellPercentage - 100 }}%</b></ng-container>\r\n                                                    </span>\r\n                                                </td>\r\n                                            </tr>\r\n                                        </tbody>\r\n                                    </table>\r\n                                </ng-container>\r\n\r\n                                <ng-container *ngIf=\"!fn.UseWells.value\">\r\n                                    <mat-form-field appearance=\"fill\">\r\n                                        <mat-label>\r\n                                            {{ 'Water N Concentration' | translate }}:\r\n                                        </mat-label>\r\n                                        <input matInput\r\n                                            type=\"number\"\r\n                                            step=\"0.01\"\r\n                                            min=\"0\"\r\n                                            name=\"PPMTotal\"\r\n                                            formControlName=\"PPMTotal\"\r\n                                            (ngModelChange)=\"calculateNContribution(true)\"/>\r\n                                        <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                                            {{'ppm' | translate}}\r\n                                        </span>\r\n                                    </mat-form-field>\r\n                                </ng-container>\r\n\r\n                                <div class=\"bk-n-contribution-ui__well--divider\">\r\n                                </div>\r\n\r\n                                <div class=\"bk-n-contribution-ui__row\">\r\n                                    <div class=\"bk-n-contribution-ui__rec-irrigation\">\r\n                                        <label class=\"bk-n-contribution-ui__label\">\r\n                                            {{ 'Recommended Irrigation Amount' | translate }}\r\n                                        </label>\r\n                                        <div class=\"bk-n-contribution-ui__value--container\">\r\n                                            <div class=\"bk-n-contribution-ui__value\">\r\n                                                <ng-container *ngIf=\"irrigationUnit === 1\">\r\n                                                    {{f.IrrigationRecommendation.value | number: '1.0-2'}}\r\n                                                </ng-container>\r\n\r\n                                                <ng-container *ngIf=\"irrigationUnit === 2\">\r\n                                                    {{NContribution.recommendationHours}}\r\n                                                </ng-container>\r\n                                            </div>\r\n                                            <div *ngIf=\"irrigationUnit === 1\"\r\n                                                class=\"bk-n-contribution-ui__unit\">\r\n                                                {{'Inches' | translate}}\r\n                                            </div>\r\n                                            <div *ngIf=\"irrigationUnit === 2\"\r\n                                                class=\"bk-n-contribution-ui__unit\">\r\n                                                {{'hours' | translate}}\r\n                                            </div>\r\n                                            <i [popper]=\"recommendedIrrigationPopper\"\r\n                                                [popperTrigger]=\"'click'\"\r\n                                                [popperPlacement]=\"'top'\"\r\n                                                [popperTimeoutAfterShow]=\"10000\"\r\n                                                class=\"bk-n-contribution-ui__tooltip-icon fa fa-info-circle\"></i>\r\n                                        </div>\r\n                                    </div>\r\n                                    <div class=\"bk-button-set bk-n-contribution-ui__button-set\">\r\n                                        <button class=\"bk-button bk-button-set__button bk-unit-menu__button bk-button--gray-icon\"\r\n                                            [ngClass]=\"{'bk-button-set__button--selected': irrigationUnit === 1}\"\r\n                                            type=\"button\"\r\n                                            (click)=\"setIrrigationUnit(1)\">\r\n                                            {{'Inches' | translate }}\r\n                                        </button>\r\n                                        <button class=\"bk-button bk-button-set__button bk-unit-menu__button bk-button--gray-icon\"\r\n                                            [ngClass]=\"{'bk-button-set__button--selected': irrigationUnit === 2}\"\r\n                                            type=\"button\"\r\n                                            (click)=\"setIrrigationUnit(2)\">\r\n                                            {{'Hours' | translate }}\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n\r\n                                <div class=\"bk-n-contribution-ui__well--divider\"></div>\r\n\r\n                                <div class=\"bk-n-contribution-ui__row\">\r\n                                    <div class=\"bk-n-contribution-ui__rec-irrigation\">\r\n                                        <mat-form-field appearance=\"fill\"> \r\n                                            <mat-label>\r\n                                                {{ 'Calculate Contribution for' | translate }}:\r\n                                            </mat-label>\r\n                                            \r\n                                            <input matInput *ngIf=\"irrigationUnit === irrigationUnits.INCHES\"\r\n                                                class=\"bk-modal__field bk-n-contribution-ui__input--short\"\r\n                                                type=\"number\"\r\n                                                step=\"0.01\"min=\"0\" \r\n                                                formControlName=\"IrrigationAmount\"/>\r\n\r\n                                            <input matInput *ngIf=\"irrigationUnit === irrigationUnits.HOURS\"\r\n                                                class=\"bk-modal__field bk-n-contribution-ui__input--short\"\r\n                                                type=\"number\"\r\n                                                step=\"0.1\"\r\n                                                min=\"0\" \r\n                                                formControlName=\"irrigationAmountHours\"/>\r\n\r\n                                            <span matSuffix>\r\n                                                <span class=\"bk-n-contribution-ui__unit\"\r\n                                                    *ngIf=\"irrigationUnit === irrigationUnits.INCHES\">\r\n                                                    {{'Inches' | translate}}\r\n                                                </span>\r\n                                                <span class=\"bk-n-contribution-ui__unit\"\r\n                                                    *ngIf=\"irrigationUnit === irrigationUnits.HOURS\">\r\n                                                    {{'hours' | translate}}\r\n                                                </span>\r\n                                            </span>\r\n                                            <mat-error *ngIf=\"fn.IrrigationAmount.invalid && (fn.IrrigationAmount.dirty ||\r\n                                                fn.IrrigationAmount.touched)\">\r\n                                                {{'Irrigation amount cannot be empty' | translate}}\r\n                                            </mat-error>\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n\r\n                                <div class=\"bk-n-contribution-ui__well--divider\"></div>\r\n\r\n                                <label class=\"bk-n-contribution-ui__label\">\r\n                                    {{ 'N Contribution From Water' | translate }}\r\n                                </label>\r\n                                <div class=\"bk-n-contribution-ui__value--container\">\r\n                                    <div class=\"bk-n-contribution-ui__value\"\r\n                                        *ngIf=\"units === 'lbsNPerAcre'\">\r\n                                        {{f.NAppliedFromWater.value | number: '1.0-2'}}\r\n                                    </div>\r\n                                    <div class=\"bk-n-contribution-ui__value\"\r\n                                        *ngIf=\"units === 'fertilizerUnit'\">\r\n                                        {{getNAppliedFromWaterInFertilizerUnits() | number: '1.0-2'}}\r\n                                    </div>\r\n                                    <div class=\"bk-n-contribution-ui__unit\"\r\n                                        *ngIf=\"units === 'lbsNPerAcre'\">\r\n                                        lbs N/{{'acre' | translate}}\r\n                                    </div>\r\n                                    <div class=\"bk-n-contribution-ui__unit\"\r\n                                        *ngIf=\"units === 'fertilizerUnit'\">\r\n                                        <span *ngIf=\"f.IsFormulationTypeDry.value\">\r\n                                            {{'lbs' | translate }}/{{'acre' | translate }}\r\n                                        </span>\r\n                                        <span *ngIf=\"!f.IsFormulationTypeDry.value\">\r\n                                            {{'gal' | translate }}/{{'acre' | translate }}\r\n                                        </span>\r\n                                    </div>\r\n                                    <i [popper]=\"nContributionPopper\"\r\n                                        [popperTrigger]=\"'click'\"\r\n                                        [popperPlacement]=\"'top'\"\r\n                                        [popperTimeoutAfterShow]=\"5000\"\r\n                                        class=\"bk-n-contribution-ui__tooltip-icon fa fa-info-circle\">\r\n                                    </i>\r\n                                </div>\r\n                            </div>\r\n                        </form>\r\n                    </div>\r\n\r\n                    <!-- end n contribution section -->\r\n                </div>\r\n            </ng-container>\r\n\r\n            <div *ngIf='warnings.indexOf(warningTypes.ZERO_LBS_PER_GALLON) > -1 ||\r\n                    (!firstStep && warnings.indexOf(warningTypes.NO_YIELD) > -1)'\r\n                class=\"bk-modal__warning-section bk-clearfix\"\r\n                [ngClass]=\"{ 'bk-model__warning-section--remove-margin' : !eventId}\">\r\n                <div *ngIf=\"warnings.indexOf(warningTypes.NO_YIELD) > -1\"\r\n                    class=\"bk-modal__warning-section__subsection\">\r\n                    <h3>\r\n                        {{ 'Missing Fertilization Information' | translate}}\r\n                    </h3>\r\n\r\n                    {{ 'Missing yield warning' | translate }}\r\n                </div>\r\n                <div *ngIf=\"warnings.indexOf(warningTypes.ZERO_LBS_PER_GALLON) > -1\"\r\n                    class=\"bk-modal__warning-section__subsection\">\r\n                    <h3>\r\n                        {{ 'Wet Fertilizer Error' | translate}}\r\n                    </h3>\r\n\r\n                    {{ 'If Lbs Per Gallon for a wet fertilizer is zero, CropManage will not be able'\r\n                    + ' to convert lbs N/acre to lbs/gallon. You can correct this in Ranch Settings.' | translate }}\r\n                </div>\r\n            </div>\r\n\r\n            <!-- Alfalfa recommendation section -->\r\n\r\n            <ng-container *ngIf=\"!isNDependent && !firstStep\">\r\n\r\n                 <!-- code is identical -->\r\n                <mat-form-field appearance=\"fill\"\r\n                    class=\"mat-form-field--short mat-form-field--two-wide__left\">\r\n                    <mat-label>\r\n                        {{'Manager Amount' | translate }}\r\n                    </mat-label>\r\n                    <input matInput\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"ManagerFertilizerAmount\" \r\n                        (change)=\"getLbsNPerAcre()\"/>\r\n                    <span matSuffix>\r\n                        <span *ngIf=\"f.IsFormulationTypeDry.value\"\r\n                            class=\"bk-modal__field-unit\">\r\n                            {{'lbs' | translate }}/{{'acre' | translate }}\r\n                        </span>\r\n                        <span *ngIf=\"!f.IsFormulationTypeDry.value\"\r\n                            class=\"bk-modal__field-unit\">\r\n                            {{'gal' | translate }}/{{'acre' | translate }}\r\n                        </span>\r\n                    </span>\r\n                    <mat-hint align=\"start\"><strong>{{ 'Enter the amount recommended by a manager' | translate }}</strong> </mat-hint>\r\n                    <mat-error *ngIf=\"f.ManagerFertilizerAmount.invalid &&\r\n                        (f.ManagerFertilizerAmount.dirty ||\r\n                        f.ManagerFertilizerAmount.touched)\">\r\n                        {{'Not a valid number' | translate }}\r\n                    </mat-error>\r\n                </mat-form-field>\r\n                <mat-form-field appearance=\"fill\"\r\n                    class=\"mat-form-field--short mat-form-field--two-wide__right\">\r\n                    <mat-label>\r\n                        {{'Amount Applied' | translate}}\r\n                    </mat-label>\r\n                    <input matInput\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        name=\"FertilizerApplied\"\r\n                        formControlName=\"FertilizerApplied\"\r\n                        (change)=\"getLbsNPerAcre()\"/>\r\n                    <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                        <ng-container *ngIf=\"f.IsFormulationTypeDry.value\">\r\n                            {{'lbs' | translate }}/{{'acre' | translate }}\r\n                        </ng-container>\r\n                        <ng-container *ngIf=\"!f.IsFormulationTypeDry.value\">\r\n                            {{'gal' | translate }}/{{'acre' | translate }}\r\n                        </ng-container>\r\n                    </span>\r\n                    <mat-hint align=\"start\"><strong>{{ 'Enter the amount that was actually applied' | translate }}</strong> </mat-hint>\r\n                    <mat-error *ngIf=\"f.FertilizerApplied.invalid &&\r\n                        (f.FertilizerApplied.dirty ||\r\n                        f.FertilizerApplied.touched)\"\r\n                        class=\"bk-invalid-text\">\r\n\r\n                        {{'Not a valid number' | translate }}\r\n                    </mat-error>\r\n                </mat-form-field>\r\n            </ng-container>\r\n\r\n            <div *ngIf=\"!NContribution.UIVisible && isNDependent &&\r\n                f.soilSampleEventId.value !== SOIL_SAMPLE_DROPDOWN_NEW && !firstStep\">\r\n                <ng-container *ngIf=\"units === 'fertilizerUnit'\">\r\n                    <mat-form-field appearance=\"fill\"\r\n                        class=\"mat-form-field--short mat-form-field--two-wide__left\">\r\n                        <mat-label>\r\n                            {{'Manager Amount' | translate }}\r\n                        </mat-label>\r\n                        <input matInput\r\n                            type=\"number\"\r\n                            step=\"0.01\"\r\n                            formControlName=\"ManagerFertilizerAmount\"\r\n                            (change)=\"getLbsNPerAcre()\"/>\r\n                        \r\n                        <span matSuffix *ngIf=\"f.IsFormulationTypeDry.value\" \r\n                            class=\"mat-form-field-suffix--padded\">\r\n                            {{'lbs' | translate }}/{{'acre' | translate }}\r\n                        </span>\r\n                            \r\n                        <span matSuffix\r\n                            *ngIf=\"!f.IsFormulationTypeDry.value\"\r\n                            class=\"mat-form-field-suffix--padded\">\r\n                            {{'gal' | translate }}/{{'acre' | translate }}\r\n                        </span>\r\n                        \r\n                        <mat-hint align=\"start\"><strong>{{ 'Enter the amount recommended by a manager' | translate }}</strong> </mat-hint>\r\n                        <mat-error *ngIf=\"f.ManagerFertilizerAmount.invalid &&\r\n                            (f.ManagerFertilizerAmount.dirty ||\r\n                            f.ManagerFertilizerAmount.touched)\">\r\n\r\n                            {{'Not a valid number' | translate }}\r\n                        </mat-error>\r\n                    </mat-form-field>\r\n                </ng-container>\r\n\r\n                <ng-container *ngIf=\"units === 'lbsNPerAcre'\">\r\n                    <mat-form-field appearance=\"fill\"\r\n                        class=\"mat-form-field--short mat-form-field--two-wide__left\">\r\n                        <mat-label>\r\n                            {{'Manager Amount' | translate }}\r\n                        </mat-label>\r\n                        <input matInput\r\n                            type=\"number\"\r\n                            step=\"0.01\"\r\n                            formControlName=\"managerNRecommendation\"\r\n                            (change)=\"getFertilizerUnits()\"/>\r\n                        <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                            {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                        </span>\r\n\r\n                        <mat-hint align=\"start\"><strong>{{ 'Enter the amount recommended by a manager' | translate }}</strong> </mat-hint>\r\n                        <mat-error *ngIf=\"f.managerNRecommendation.invalid &&\r\n                            (f.managerNRecommendation.dirty ||\r\n                            f.managerNRecommendation.touched)\"\r\n                            class=\"bk-invalid-text\">\r\n                            {{'Not a valid number' | translate }}\r\n                        </mat-error>\r\n                    </mat-form-field>\r\n                </ng-container>\r\n\r\n                <ng-container *ngIf=\"units === 'fertilizerUnit'\">\r\n                    <mat-form-field appearance=\"fill\"\r\n                        class=\"mat-form-field--short mat-form-field--two-wide__right\">\r\n                        <mat-label>\r\n                            {{'Fertilizer Applied' | translate }}\r\n                        </mat-label>\r\n                        <input matInput\r\n                            type=\"number\"\r\n                            step=\"0.01\"\r\n                            name=\"FertilizerApplied\"\r\n                            formControlName=\"FertilizerApplied\"\r\n                            (change)=\"getLbsNPerAcre()\"/>\r\n                        <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                            <span *ngIf=\"f.IsFormulationTypeDry.value\">\r\n                                {{'lbs' | translate }}/{{'acre' | translate }}\r\n                            </span>\r\n                            <span *ngIf=\"!f.IsFormulationTypeDry.value\">\r\n                                {{'gal' | translate }}/{{'acre' | translate }}\r\n                            </span>\r\n                        </span>\r\n                        <mat-hint align=\"start\"><strong>{{ 'Enter the amount that was actually applied' | translate }}</strong> </mat-hint>\r\n                        <mat-error *ngIf=\"f.FertilizerApplied.invalid &&\r\n                            (f.FertilizerApplied.dirty ||\r\n                            f.FertilizerApplied.touched)\"\r\n                            class=\"bk-invalid-text\">\r\n                \r\n                            {{'Not a valid number' | translate }}\r\n                        </mat-error>\r\n                    </mat-form-field>\r\n                </ng-container>\r\n                <ng-container *ngIf=\"units === 'lbsNPerAcre'\">\r\n                    <mat-form-field appearance=\"fill\"\r\n                        class=\"mat-form-field--short mat-form-field--two-wide__right\">\r\n                        <mat-label>\r\n                            {{'Fertilizer N Applied' | translate}}\r\n                        </mat-label>\r\n                        <input matInput\r\n                            type=\"number\"\r\n                            step=\"0.01\"\r\n                            name=\"NApplied\"\r\n                            formControlName=\"NApplied\"\r\n                            (change)=\"getFertilizerUnits()\"/>\r\n                        <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                            {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                        </span>\r\n                        <mat-error *ngIf=\"f.NApplied.invalid &&\r\n                            (f.NApplied.dirty ||\r\n                            f.NApplied.touched)\"\r\n                            class=\"bk-invalid-text\">\r\n\r\n                            {{'Not a valid number' | translate }}\r\n                        </mat-error>\r\n                    </mat-form-field>\r\n                </ng-container>\r\n            </div>\r\n\r\n            <span *ngIf='lastUpdated && !NContribution.UIVisible'\r\n                class='bk-modal__last-updated-meta bk-clearfix'>\r\n                {{ 'Last updated by' | translate }} {{lastUpdated}}\r\n            </span>\r\n            <br>\r\n        </form>\r\n    </div>\r\n\r\n    <!-- footer -->\r\n\r\n    <div mat-dialog-actions\r\n        align=\"end\">\r\n\r\n        <ng-container *ngIf=\"!NContribution.UIVisible\">\r\n\r\n            <button [disabled]=\"(f && f.soilSampleEventId.value ===\r\n                SOIL_SAMPLE_DROPDOWN_NEW) || (form && form.invalid)\"\r\n                class=\"bk-button__delete\"\r\n                *ngIf=\"eventId\"\r\n                type=\"button\"\r\n                (click)=\"onDeleteConfirmationOpen($event)\">\r\n\r\n                {{'Delete' | translate }}\r\n            </button>\r\n\r\n            <button mat-button\r\n                [disabled]=\"(f && f.soilSampleEventId.value ===\r\n                SOIL_SAMPLE_DROPDOWN_NEW)\"\r\n                class=\"bk-button bk-button--medium bk-button--text-only\"\r\n                type=\"button\"\r\n                (click)=\"onClose()\">\r\n\r\n                {{'Cancel' | translate }}\r\n            </button>\r\n\r\n            <button mat-button\r\n                [disabled]=\"form && form.invalid\"\r\n                class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n                *ngIf=\"!eventId && firstStep\"\r\n                type=\"button\"\r\n                (click)=\"nextStep()\">\r\n\r\n                {{'Calculate Recommendation' | translate }}\r\n            </button>\r\n\r\n            <button mat-button\r\n                [disabled]=\"form && form.invalid\"\r\n                class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n                *ngIf=\"!eventId && !firstStep\"\r\n                type=\"button\"\r\n                (click)=\"create()\">\r\n\r\n                {{(isSaving ? 'Creating' : 'Create') | translate }}\r\n                <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n            </button>\r\n\r\n            <button mat-button\r\n                [disabled]=\"(f && f.soilSampleEventId.value ===\r\n                SOIL_SAMPLE_DROPDOWN_NEW) ||\r\n                NContribution.UIVisible || (form && form.invalid)\"\r\n                class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n                *ngIf=\"eventId\"\r\n                type=\"button\"\r\n                (click)=\"update()\">\r\n\r\n                {{(isSaving ? 'Saving' : 'Save') | translate }}\r\n                <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n            </button>\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"NContribution.UIVisible\">\r\n            <button mat-button\r\n                class=\"bk-button bk-button--medium bk-button--text-only\"\r\n                type=\"button\"\r\n                (click)=\"cancelIncludingNContribution($event)\">\r\n                {{'Cancel' | translate }}\r\n            </button>\r\n\r\n            <button mat-button\r\n                class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n                [disabled]=\"nContributionForm.invalid\"\r\n                type=\"button\"\r\n                (click)=\"updateRecommendationWithNContribution($event)\">\r\n                {{'Update Recommendation With N Contribution' | translate }}\r\n            </button>\r\n        </ng-container>\r\n    </div>\r\n</div>\r\n\r\n<popper-content #recommendedIrrigationPopper>\r\n    <div class=\"bk-popper\">\r\n        <div class=\"bk-popper__header\">\r\n            {{ 'Recommended Irrigation Amount' | translate }}:\r\n        </div>\r\n        <div class=\"bk-popper__subheader\">\r\n            <span>\r\n                {{ 'From' }} {{ (f && f.EventDate.value) | date:'shortDate' }} \r\n            </span>\r\n            <span>\r\n                {{ 'to' | translate }} {{ NContribution.nextFertilizationDate | date:'shortDate' }} \r\n                ({{ 'next planned fertilization' | translate }})\r\n            </span>\r\n        </div>\r\n        <table class=\"bk-popper__table\">\r\n            <tr>\r\n                <td class=\"bk-popper__column-1\">\r\n                    {{ 'Recommended Irrigation Amount' | translate }}:\r\n                </td>\r\n                <td class=\"bk-popper__column-2\">\r\n                    <ng-container *ngIf=\"irrigationUnit === irrigationUnits.INCHES\">\r\n                        {{ (f && f.IrrigationRecommendation.value) | number: '1.0-2' }} {{ 'Inches' | translate }}\r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"irrigationUnit === irrigationUnits.HOURS\">\r\n                        {{ NContribution.recommendationHours }} {{ 'Hours' | translate }}\r\n                    </ng-container>\r\n                </td>\r\n            </tr>\r\n        </table>\r\n    </div>\r\n</popper-content>\r\n\r\n<popper-content #fertilizerDetail>\r\n    <div class=\"bk-popper\">\r\n        <div class=\"bk-popper__header\">\r\n            {{ f && f.FertilizerName.value }} \r\n        </div>\r\n        <table class=\"bk-popper__table\">\r\n            <tr>\r\n                <td class=\"bk-popper__column-1a\">\r\n                    {{'Formulation' | translate }}:\r\n                </td>\r\n                <td class=\"bk-popper__column-2a\">\r\n                    {{ f && f.IsFormulationTypeDry.value ? 'Dry' : 'Wet'}}\r\n                </td>\r\n            </tr>\r\n            <tr>\r\n                <td class=\"bk-popper__column-1a\">\r\n                    {{'Nitrogen' | translate }}:\r\n                </td>\r\n                <td class=\"bk-popper__column-2a\">\r\n                    {{ f && f.NPercentage.value}}%\r\n                </td>\r\n            </tr>\r\n            <tr>\r\n                <td class=\"bk-popper__column-1a\">\r\n                    {{'Other Nutrients' | translate }}:\r\n                </td>\r\n                <td class=\"bk-popper__column-2a\">\r\n                    {{ f && f.FertilizerOtherNutrients.value}}\r\n                </td>\r\n            </tr>\r\n        </table>\r\n    </div>\r\n</popper-content>\r\n\r\n<popper-content #nContributionPopper>\r\n    <div class=\"bk-popper\">\r\n        <div class=\"bk-popper__header\">\r\n            {{ 'N Contribution From Water' | translate }}:\r\n        </div>\r\n        <table class=\"bk-popper__table\">\r\n            <tr>\r\n                <td class=\"bk-popper__column-1\">\r\n                    {{ 'Expected Irrigation Amount' | translate }}:\r\n                </td>\r\n                <td class=\"bk-popper__column-2\">\r\n                    <ng-container *ngIf=\"irrigationUnit === 1 && fn && fn.IrrigationAmount\">\r\n                        {{ fn.IrrigationAmount.value | number: '1.0-2' }} {{ 'Inches' | translate }}\r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"irrigationUnit === 2 && fn && fn.irrigationAmountHours\">\r\n                        {{ fn.irrigationAmountHours.value }} {{ 'Hours' | translate }}\r\n                    </ng-container>\r\n                </td>\r\n            </tr>\r\n            <tr>\r\n                <td class=\"bk-popper__column-1\">\r\n                    {{ 'Avg Water N Concentration' | translate }}:\r\n                </td>\r\n                <td class=\"bk-popper__column-2\">\r\n                    <ng-container *ngIf=\"fn && !fn.UseWells.value\">\r\n                        {{ (fn && fn.PPMTotal.value) | number: '1.0-2' }} ppm\r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"fn && fn.UseWells.value\">\r\n                        {{ NContribution.calculatedPPM | number: '1.0-2' }} ppm\r\n                    </ng-container>\r\n                </td>\r\n            </tr>\r\n            <tr>\r\n                <td class=\"bk-popper__column-1\">\r\n                    {{ 'Total N Contribution From Water' | translate }}:\r\n                </td>\r\n                <td class=\"bk-popper__column-2\">\r\n                    <ng-container *ngIf=\"units === 'lbsNPerAcre'\">\r\n                        {{ (f && f.NAppliedFromWater.value) | number: '1.0-2' }} lbs N/{{'acre' | translate}}\r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"units === 'fertilizerUnit'\">\r\n                        {{getNAppliedFromWaterInFertilizerUnits() | number: '1.0-2'}}\r\n                        <span *ngIf=\"f && f.IsFormulationTypeDry.value\">\r\n                            {{'lbs' | translate }}/{{'acre' | translate }}\r\n                        </span>\r\n                        <span *ngIf=\"f && !f.IsFormulationTypeDry.value\">\r\n                            {{'gal' | translate }}/{{'acre' | translate }}\r\n                        </span>\r\n                    </ng-container>\r\n                </td>\r\n            </tr>\r\n        </table>\r\n    </div>\r\n</popper-content>\r\n\r\n<popper-content #nContributionEditPopper>\r\n    <div class=\"bk-popper\">\r\n        {{ 'The N contribution from water is calculated from the equation: lbs N/acre = inches of applied water x concentration of nitrateN in water (ppm) x 0.227.' | translate }}\r\n    </div>\r\n</popper-content>","import { Component, EventEmitter, Output, ViewChild, DoCheck, ChangeDetectorRef, ElementRef, OnInit, Inject, Renderer2, OnDestroy }\r\n\tfrom '@angular/core';\r\nimport { of, Subject } from 'rxjs';\r\nimport * as jQuery from 'jquery';\r\nimport * as moment from 'moment';\r\n\r\nimport { PlantingService } from '../planting-settings/service';\r\nimport { SoilSampleEventService } from '../soil-sample-event/service';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { CalculateService } from '../../services/calculate.service';\r\nimport { FertilizationEventService } from './service';\r\nimport { IrrigationService } from '../irrigation-event/service';\r\nimport { FertilizationEventWellService } from '../../models/fertilization-event-well/service';\r\n\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { KeyboardUtility } from '../../classes/keyboardUtility';\r\nimport { FertilizationEvent } from './fertilizationEvent';\r\n\r\nimport { IEventPostResponseJSON } from '../../models/event/interfaces';\r\nimport { IFertilizationEvent, IFertilizerProperties, ISoilSampleEmitted } from './interfaces';\r\nimport { IWell } from '../../models/planting-well/well.interface';\r\nimport { IIrrigationMethod } from '../../models/irrigation-method/interfaces';\r\nimport { IIrrigationRecommendedNContribution, IIrrigationEventEditResponse, IIrrigationObject } from '../irrigation-event/interfaces';\r\n\r\nimport { eIrrigationMethods, eIrrigationUnit, eCommodityTypes,\r\n\teFertilizerFormulationTypes,\r\n\teNotificationTypes,\r\n\tEventsType} from '../../interfaces/constants';\r\n\r\nimport { IrrigationEvent } from '../irrigation-event/irrigationEvent';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { ICropStage } from '../../models/crop-stage/interfaces';\r\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { IFormSoilSample } from '../soil-sample-event/interfaces';\r\nimport { FertilizerModelService } from '../ranch-settings/modals/fertilizer/service';\r\nimport { CropType } from '../../models/crop-type/cropType';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { FormBuilder, Validators, ValidatorFn } from '@angular/forms';\r\nimport { IFormFertilizer } from '../ranch-settings/modals/fertilizer/interfaces';\r\nimport { BOKA } from '../../classes/number';\r\nimport { FormValidation } from '../../classes/formValidation';\r\nimport { BaseDialog } from '../shared/dialogs/base-dialog';\r\nimport { SharedUpdateService } from '../shared/dialogs/update.service';\r\nimport { FertilizationRecommendationSummaryComponent } from '../events/table/fertilization-hover-panel/recommendation-summary';\r\n\r\nexport type FertilizationDialogFields = 'Id' | 'EventDate' | 'FertilizerId' |\r\n\t'FertilizationsPerMonth' | 'DaysToNextFertilization' | 'CropStageId'\r\n\t| 'soilSampleEventId' | 'SoilSampleEventDate' | 'ManagerFertilizerAmount' |\r\n\t'managerNRecommendation' | 'FertilizerApplied'\r\n\t| 'NApplied' | 'FormulationTypeId' | 'IsFormulationTypeDry' | 'FertilizerName'\r\n\t| 'FertilizerOtherNutrients'\r\n\t| 'LbsPerGallon' | 'NAppliedFromWater' | 'IrrigationEventDate'\r\n\t| 'NPercentage' | 'IrrigationRecommendation';\r\n\r\nexport type SoilSampleFields = 'SoilMoistureId' | 'SampleDepth' | 'SampleTypeId' |\r\n\t'Nitrogen' | 'CropStageId' | 'EventDate';\r\n\r\nexport type NContributionFields = 'UseWells' | 'wells' | 'PPMTotal' | 'IrrigationAmount'\r\n\t| 'IrrigationMethodId' | 'irrigationAmountHours' | 'Ratio' | 'wells';\r\n\r\nexport enum FertilizationEventWarningTypes {\r\n\tNO_YIELD = 1,\r\n\tZERO_LBS_PER_GALLON\r\n};\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'fertilization-event',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: [ 'main.scss']\r\n})\r\n\r\nexport class FertilizationEventDialog extends BaseDialog implements OnInit, OnDestroy {\r\n\t@ViewChild(FertilizationRecommendationSummaryComponent, { static: false })\r\n\t\tprivate recommendationSummary: FertilizationRecommendationSummaryComponent;\r\n\r\n\t@ViewChild('nContributionUI', { static: false }) nContributionUI: ElementRef;\r\n\t@ViewChild('nContributionLoader', { static: false }) nContributionLoader: ElementRef;\r\n\t@ViewChild('nContributionIrrigationLoader', { static: false }) nContributionIrrigationLoader: ElementRef;\r\n\t@ViewChild('nContributionIrrigation', { static: false }) nContributionIrrigation: ElementRef;\r\n\r\n\t@Output()\r\n\tcloseModal: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n\tprivate _dateDefault: Date;\r\n\tpublic fertilizerDetail: IFertilizerProperties;\r\n\tpublic isFuture = false;\r\n\tpublic isFertilizationsPerMonth: boolean;\r\n\tpublic eventId: number;\r\n\tpublic isTree: boolean;\r\n\tprivate YieldTarget: number;\r\n\tprivate plantingId: number = null;\r\n\tprivate _harvestDate: Date;\r\n\tpublic recommendationSummaryVisible = false;\r\n\tpublic firstStep = true; // used to display the dialog form in two steps during creation\r\n\tprivate _isAlive = true; // track component lifecycle\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\tpublic soilSamples: IFormSoilSample[];\r\n\tpublic cropStages: ICropStage[];\r\n\tpublic fertilizers: IFormFertilizer[];\r\n\r\n\tpublic NContribution = {\r\n\t\tUIVisible: false,\r\n\t\tcalculatedPPM: 0,\r\n\t\trecommendationHours: null as number,\r\n\t\tnextFertilizationDate: null as Date,\r\n\t}\r\n\r\n\tpublic totalWellPercentage: number;\r\n\r\n\tpublic loading = {\r\n\t\tnContribution: false,\r\n\t\tirrigationRecommendation: false,\r\n\t\tisInitial: false\r\n\t}\r\n\r\n\tpublic irrigationMethods: IIrrigationMethod[] = null;\r\n\tpublic irrigationUnits = eIrrigationUnit;\r\n\tprivate initialDataPull = false;\r\n\r\n\tpublic readonly UNIT_LB_PER_ACRE = 'lbsNPerAcre';\r\n\tpublic readonly UNIT_GAL_PER_ACRE = 'fertilizerUnit';\r\n\tpublic readonly SOIL_SAMPLE_DROPDOWN_NEW = -1;\r\n\tpublic readonly NO_SOIL_SAMPLE = -2;\r\n\tpublic units: string = this.UNIT_GAL_PER_ACRE;\r\n\tpublic isSaving = false; // button loadeer\r\n\r\n\t\t// is in the future\r\n\tpublic isLoaded = false;\r\n\tpublic didUserMakeChanges = false;\r\n\tprivate _originalDate: Date;\r\n\r\n\t// used to restore values to the original values if user cancels out on changes\r\n\tprivate originalNContributionProperties: {\r\n\t\tNAppliedFromWater: number,\r\n\t\tIrrigationAmount: number,\r\n\t\tIrrigationMethodId: number,\r\n\t\tUseWells: boolean,\r\n\t\tPPMTotal: number,\r\n\t\tRatio: number\r\n\t};\r\n\r\n\tpublic maxDate: Date;\r\n\tprivate _commodityTypeId: number;\r\n\tpublic FertilizationRecommendationLbsPerAcre: number;\r\n\tpublic NFertilizationRecommended: number;\r\n\tpublic lastUpdated: string;\r\n\r\n\tprivate currentWells: IWell[] = null;\r\n\tpublic irrigationUnit: eIrrigationUnit = eIrrigationUnit.HOURS;\r\n\tpublic isNDependent: boolean;\r\n\tpublic warnings: FertilizationEventWarningTypes[] = new Array();\r\n\t\t// these are warnings that do not invalidate the form, so we should manage them separately\r\n\tpublic warningTypes = FertilizationEventWarningTypes;\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\t/*fertilization event modal validation*/\r\n\r\n\tpublic nContributionForm: FormGroup;\r\n\r\n\tprivate _isNContributionCached: boolean;\r\n\r\n\tpublic get f(): { [key in FertilizationDialogFields]: AbstractControl } {\r\n\t\tif (!this.form) {\r\n\t\t\treturn null\r\n\t\t};\r\n\r\n\t\treturn this.form.controls as { [key in FertilizationDialogFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fn(): { [key in NContributionFields]: AbstractControl } {\r\n\t\tif (!this.nContributionForm) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn this.nContributionForm.controls as { [key in NContributionFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate calculateService: CalculateService,\r\n\t\tprivate changeDetectorRef: ChangeDetectorRef,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: {\r\n\t\t\tplantingId: number, id?: number, dateDefault?: Date\r\n\t\t},\r\n\t\tprivate dialog: MatDialog,\r\n\t\tprivate dialogRef: MatDialogRef<FertilizationEventDialog>,\r\n\t\tprivate fertilizationEventService: FertilizationEventService,\r\n\t\tprivate fertilizationEventWellService: FertilizationEventWellService,\r\n\t\tprivate fertilizerService: FertilizerModelService,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate irrigationEventService: IrrigationService,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate plantingService: PlantingService,\r\n\t\tprivate ranchService: RanchService,\r\n\t\tprivate render: Renderer2,\r\n\t\tprivate soilSampleEventService: SoilSampleEventService,\r\n\t\tprivate sharedUpdateService: SharedUpdateService,\r\n\t\tprivate updateService: UpdateService,\r\n\t) {\r\n\t\tsuper(dialog, dialogRef, sharedUpdateService);\r\n\r\n\t\tif (this.data) {\r\n\t\t\tthis.eventId = this.data.id;\r\n\t\t\tthis.plantingId = this.data.plantingId;\r\n\t\t\tthis._dateDefault = this.data.dateDefault;\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._clear();\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis._deleteConfirmationData = { // set up default message\r\n\t\t\tobjectName: 'Fertilization Event',\r\n\t\t\tspecificName: null,\r\n\t\t\tadditionalMessage: 'Are you sure you want to delete this event?'\r\n\t\t};\r\n\r\n\t\tthis.isNDependent = this.ranchService.getIsNDependent(this.plantingId);\r\n\r\n\t\tif (this.eventId) {\r\n\t\t\tthis.firstStep = false;\r\n\t\t\tthis._getEditModel(this.eventId).then(() => {\r\n\t\t\t\tif (!this.form) {\r\n\t\t\t\t\tthrow new Error('fertilization event dialog failed to load');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.isLoaded = true;\r\n\t\t\t\tthis.warnings = this._shouldShowWarning();\r\n\t\t\t\tthis.isTree = CropType.isTree(this._commodityTypeId);\r\n\t\t\t\tthis.isFuture = DateUtility.isFuture(this.f.EventDate.value);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.firstStep = true;\r\n\t\t\tthis._getAddModel().then(() => {\r\n\t\t\t\tthis.isLoaded = true;\r\n\t\t\t\tthis.warnings = this._shouldShowWarning();\r\n\t\t\t\tthis.isTree = CropType.isTree(this._commodityTypeId);\r\n\t\t\t\tthis.isFuture = DateUtility.isFuture(this.f.EventDate.value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsuper.ngOnInit();\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis._isAlive = false;\r\n\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic calculateNContribution(updateNApplied = false): void {\r\n\r\n\t\tlet ppm: number;\r\n\t\tlet nApplied: number;\r\n\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.fn.UseWells.value) {\r\n\t\t\tthis.NContribution.calculatedPPM = this.calculateService.calculateAveragePPM(this.fn.wells.value);\r\n\t\t\tppm = this.NContribution.calculatedPPM;\r\n\t\t} else {\r\n\t\t\tppm = this.fn.PPMTotal.valid ? this.fn.PPMTotal.value : 0;\r\n\t\t}\r\n\r\n\t\tif (updateNApplied) {\r\n\t\t\tnApplied = this.calculateService.calculateNApplied(this.fn.IrrigationAmount.value, ppm);\r\n\r\n\t\t\tthis.f.NAppliedFromWater.setValue(\r\n\t\t\t\tBOKA.NumberUtil.roundToDecimalPlaces(nApplied, 2)\r\n\t\t\t); // update NApplied\r\n\r\n\t\t\tthis._updateRecommendation(); // delayed\r\n\t\t}\r\n\r\n\t\t// possibly ping for recommendation again here.. but that may be too intensive?\r\n\t\t// (which is where having this on a separate screen would help)\r\n\t}\r\n\r\n\tpublic cancelIncludingNContribution(e?: MouseEvent): void {\r\n\t\tif (e) {\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\tthis._hideNContributionUI();\r\n\r\n\t\tthis.NContribution.UIVisible = false;\r\n\t\tthis.NContribution.calculatedPPM = 0;\r\n\t\tthis.f.IrrigationRecommendation.setValue(null);\r\n\t\tthis.NContribution.recommendationHours = null;\r\n\t\tthis.fn.irrigationAmountHours.setValue(null, { emitEvent: false });\r\n\t\tthis.irrigationUnit = eIrrigationUnit.HOURS;\r\n\r\n\t\tif (this.originalNContributionProperties) {\r\n\t\t\tthis.f.NAppliedFromWater.setValue(this.originalNContributionProperties.NAppliedFromWater);\r\n\r\n\t\t\tthis.fn.IrrigationAmount.setValue(this.originalNContributionProperties.IrrigationAmount,\r\n\t\t\t\t{ emitEvent: false });\r\n\r\n\t\t\tthis.fn.IrrigationMethodId.setValue(this.originalNContributionProperties.IrrigationMethodId);\r\n\t\t\tthis.fn.UseWells.setValue(this.originalNContributionProperties.UseWells);\r\n\t\t\tthis.fn.PPMTotal.setValue(this.originalNContributionProperties.PPMTotal);\r\n\t\t\tthis.fn.Ratio.setValue(this.originalNContributionProperties.Ratio);\r\n\t\t} else {\r\n\t\t\tthis.f.NAppliedFromWater.setValue(null);\r\n\t\t\tthis.fn.IrrigationAmount.setValue(null, { emitEvent: false });\r\n\t\t}\r\n\r\n\t\tthis._updateRecommendation();\r\n\t}\r\n\r\n\t/**\r\n\t * Called to clear N Contribution setting\r\n\t * @param\r\n\t */\r\n\tpublic clearNContribution(e?: MouseEvent): void {\r\n\t\tlet event: IFertilizationEvent;\r\n\r\n\t\tif (e) {\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\t// make a call to the backend AND clear internal values\r\n\t\t// after clearing, user should see the Add N Contribution button\r\n\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// clear internal values\r\n\r\n\t\tthis.NContribution.UIVisible = false;\r\n\t\tthis.fn.UseWells.setValue(true);\r\n\t\tthis.fn.PPMTotal.setValue(0);\r\n\t\tthis.NContribution.calculatedPPM = 0;\r\n\t\tthis.f.IrrigationRecommendation.setValue(null);\r\n\t\tthis.NContribution.recommendationHours = null;\r\n\t\tthis.fn.IrrigationAmount.setValue(null);\r\n\t\tthis.fn.IrrigationMethodId.setValue(null);\r\n\t\tthis.fn.Ratio.setValue(null);\r\n\t\tthis.NContribution.nextFertilizationDate = null;\r\n\r\n\t\t// save N Contribution water values\r\n\t\tthis.f.IrrigationEventDate.setValue(null);\r\n\t\tthis.fn.IrrigationMethodId.setValue(null);\r\n\t\tthis.f.NAppliedFromWater.setValue(null);\r\n\t\tthis.fn.PPMTotal.setValue(null);\r\n\r\n\t\tthis.fertilizationEventWellService.syncFertilizationEventWells(this.eventId);\r\n\r\n\t\tthis.currentWells = null;\r\n\t\tthis._isNContributionCached = false;\r\n\t\tthis.irrigationUnit = eIrrigationUnit.HOURS;\r\n\r\n\t\tevent = this.form.value as IFertilizationEvent;\r\n\r\n\t\ttry {\r\n\t\t\tthis.fertilizationEventService.update(this.eventId, event,\r\n\t\t\tthis.plantingId)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.fertilizationEventService.getNRecommendation(this.plantingId, event)\r\n\t\t\t\t.then((res) => {\r\n\r\n\t\t\t\t\tif (!res) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.FertilizationRecommendationLbsPerAcre = BOKA.NumberUtil.\r\n\t\t\t\t\tconvertToFloat(FertilizationEvent.convertNToFertilizerAmount(res.NFertilizationRecommended, event), 2);\r\n\r\n\t\t\t\t\tthis.NFertilizationRecommended = BOKA.NumberUtil.convertToFloat(res.NFertilizationRecommended, 2);\r\n\r\n\t\t\t\t\tif (this.recommendationSummaryVisible) { // if recommendation summary is open, update that too\r\n\t\t\t\t\t\tthis.f.Id.setValue(this.eventId);\r\n\t\t\t\t\t\tthis._convertSoilSampleEventDate();\r\n\r\n\t\t\t\t\t\tthis.fertilizationEventService.getRecommendationSummary(this.plantingId,\r\n\t\t\t\t\t\tevent as IFertilizationEvent)\r\n\t\t\t\t\t\t.then(summary => {\r\n\t\t\t\t\t\t\tif (!this.recommendationSummary || !summary) {\r\n\t\t\t\t\t\t\t\treturn\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis.recommendationSummary.render(summary);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t} catch (e) {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\tmessage: e\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic close(): void { // overrides parent definition\r\n\t\tthis.updateService.setEventDialogClosed(); // reopen event table\r\n\t\tsuper.close();\r\n\t}\r\n\r\n\tpublic create(): void {\r\n\t\tlet fe: IFertilizationEvent;\r\n\r\n\t\tif (!this.form || this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfe = this.form.value;\r\n\r\n\t\tif (this.f.NAppliedFromWater.value !== null) {\r\n\t\t\t// save irrigation event date if N applied from water is set.\r\n\t\t\t// otherwise don't commit to a date here\r\n\t\t\tfe.IrrigationEventDate = fe.EventDate;\r\n\t\t}\r\n\r\n\t\tfe.IrrigationMethodId = this.fn.IrrigationMethodId.value;\r\n\t\tfe.UseWells = this.fn.UseWells.value;\r\n\t\tfe.PPMTotal = this.fn.PPMTotal.value;\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.fertilizationEventService.create(this.plantingId, fe)\r\n\t\t\t.then((res: IEventPostResponseJSON) => {\r\n\r\n\t\t\t\tthis.isSaving = false;\r\n\r\n\t\t\t\tif (!res || !res.Events || res.Events.length === 0) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._updateEventsList(res);\r\n\t\t\t\tthis.eventId = res.Id;\r\n\t\t\t\tthis.updateService.setRanchSettingsUpdated('fertilizers');\r\n\t\t\t\tthis.updateService.setEventDialogClosed(); // tell event table to re-display\r\n\t\t\t\tthis.close();\r\n\r\n\t\t\t\tif (this.fn.wells && (this.fn.wells as FormArray).length) {\r\n\t\t\t\t\tthis.fertilizationEventWellService.saveAllFertilizationWells(this.fn.wells.value as IWell[], this.eventId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tprotected delete(): void {\r\n\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.fertilizationEventService.delete(this.eventId)\r\n\t\t\t.then(res => {\r\n\t\t\t\tthis.isSaving = false;\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\t\tmessage: 'Fertilization event failed to delete. Reload the page and try again.'\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.ranchService.plantings.deleteEventInPlantings(this.f.EventDate.value,\r\n\t\t\t\t\tthis.plantingId,\r\n\t\t\t\t\tEventsType.FERTILIZER, this.eventId, res.ActiveEvents);\r\n\r\n\t\t\t\tthis.updateService.setPlantingsUpdated(this.updateService.currentRanchId, new Date());\r\n\t\t\t\tthis.close();\r\n\t\t\t\tthis.sharedUpdateService.deleteComplete();\r\n\t\t\t\tthis.updateService.setEventDialogClosed(); // tell event table to re-display\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * If this.wells exist, show it.. else create this.wells array, then display\r\n\t * @param e\r\n\t */\r\n\tpublic displayNContributionUI(isVisible = true): void {\r\n\t\tthis.loading.nContribution = isVisible;\r\n\r\n\t\tif (this.loading.nContribution) {\r\n\t\t\tthis._showNContributionLoader();\r\n\t\t\tthis.f.soilSampleEventId.disable({ emitEvent: false});\r\n\t\t}\r\n\r\n\t\tlet promises = {\r\n\t\t\trecommendation: null as Promise<IIrrigationRecommendedNContribution>,\r\n\t\t\twells: null as Promise<IWell[]>,\r\n\t\t\tirrigationMethods: null as Promise<IIrrigationMethod[]>\r\n\t\t};\r\n\r\n\t\t// if editing, check if following values exist and are valid\r\n\t\tif (this.originalNContributionProperties) {\r\n\t\t\tthis.fn.IrrigationAmount.setValue(this.originalNContributionProperties.IrrigationAmount);\r\n\t\t\tthis.fn.IrrigationMethodId.setValue(this.originalNContributionProperties.IrrigationMethodId);\r\n\t\t\tthis.fn.UseWells.setValue(this.originalNContributionProperties.UseWells);\r\n\t\t\tthis.fn.PPMTotal.setValue(this.originalNContributionProperties.PPMTotal);\r\n\t\t\tthis.fn.Ratio.setValue(this.originalNContributionProperties.Ratio);\r\n\t\t}\r\n\r\n\t\tif (this.f.IrrigationRecommendation.value !== null &&\r\n\t\t\tthis.fn.IrrigationMethodId.valid) { // display cached recommendation if possible\r\n\t\t\t// on fertilization edit, we construct N contribution object from data in the event\r\n\t\t\t// initially, C# sends ratio = 0\r\n\t\t\tpromises.recommendation = of({\r\n\t\t\t\tirrigationAmountRecommended: this.f.IrrigationRecommendation.value,\r\n\t\t\t\tLastIrrigationMethod: this.fn.IrrigationMethodId.value,\r\n\t\t\t\tSuccess: true,\r\n\t\t\t\tratio: this.fn.Ratio.value\r\n\t\t\t}).toPromise();\r\n\r\n\t\t\tthis.NContribution.recommendationHours = this._getIrrigationInHours(\r\n\t\t\t\tthis.f.IrrigationRecommendation.value, this.fn.Ratio.value,\r\n\t\t\t\tthis.fn.IrrigationMethodId.value);\r\n\t\t} else {\r\n\r\n\t\t\tpromises.recommendation = this.irrigationEventService.getNContributionRecommendation(this.plantingId,\r\n\t\t\t\tthis.f.EventDate.value, this.fn.IrrigationMethodId.value, this.f.DaysToNextFertilization.value,\r\n\t\t\t\tthis.f.FertilizationsPerMonth.value);\r\n\t\t}\r\n\r\n\t\tif (this.eventId) {\r\n\t\t\tpromises.wells = this.fertilizationEventWellService.getFertilizationEventWells(this.eventId);\r\n\t\t} else {\r\n\t\t\tpromises.wells = this.fertilizationEventWellService.listByPlantingId(this.plantingId);\r\n\t\t}\r\n\r\n\t\tpromises.irrigationMethods = this.plantingService.\r\n\t\t\tgetIrrigationMethods(this.plantingId);\r\n\r\n\t\tPromise.all([promises.recommendation, promises.wells, promises.irrigationMethods]).\r\n\t\t\tthen(([recommendation, wells, irrigationMethods]) => {\r\n\r\n\t\t\t\tthis.irrigationMethods = irrigationMethods;\r\n\r\n\t\t\t\tif (!recommendation) {\r\n\t\t\t\t\tthrow new Error('Empty irrigation recommendation response from server');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.f.NAppliedFromWater.value === null) {\r\n\t\t\t\t\tthis.fn.IrrigationMethodId.setValue(recommendation.LastIrrigationMethod);\r\n\t\t\t\t\tthis.fn.Ratio.setValue(recommendation.ratio);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.fn.IrrigationMethodId.invalid) {\r\n\t\t\t\t\tswitch (recommendation.LastIrrigationMethod) {\r\n\t\t\t\t\t\tcase eIrrigationMethods.SPRINKLER:\r\n\t\t\t\t\t\tcase eIrrigationMethods.DRIP:\r\n\t\t\t\t\t\tcase eIrrigationMethods.GERMINATION_SPRINKLER:\r\n\t\t\t\t\t\t\tthis.fn.IrrigationMethodId.setValue(recommendation.LastIrrigationMethod);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tthis.fn.IrrigationMethodId.setValue(eIrrigationMethods.SPRINKLER);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!wells || wells.length === 0) { // no wells are associated with this event - so create wells association\r\n\t\t\t\t\tthis.fertilizationEventWellService.listByPlantingId(this.plantingId).then((wellsNew) => {\r\n\t\t\t\t\t\t// code block repeats twice - needed since the first if block is on a delay\r\n\t\t\t\t\t\tif (this.currentWells && this.currentWells.length) {\r\n\t\t\t\t\t\t\tthis._initializeWells(this.currentWells);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis._initializeWells(wellsNew);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.f.IrrigationRecommendation.setValue(recommendation.irrigationAmountRecommended);\r\n\r\n\t\t\t\t\t\tif (this.fn.IrrigationAmount.invalid) {\r\n\t\t\t\t\t\t\tthis.fn.IrrigationAmount.setValue(recommendation.irrigationAmountRecommended);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.fn.Ratio.setValue(recommendation.ratio);\r\n\r\n\t\t\t\t\t\tthis.NContribution.recommendationHours =\r\n\t\t\t\t\t\t\tthis._getIrrigationInHours(this.f.IrrigationRecommendation.value,\r\n\t\t\t\t\t\t\t\tthis.fn.Ratio.value, this.fn.IrrigationMethodId.value);\r\n\r\n\t\t\t\t\t\tthis.fn.irrigationAmountHours.setValue(\r\n\t\t\t\t\t\t\tthis.fn.IrrigationAmount.valid ? this._getIrrigationInHours(\r\n\t\t\t\t\t\t\t\tthis.fn.IrrigationAmount.value, this.fn.Ratio.value,\r\n\t\t\t\t\t\t\t\tthis.fn.IrrigationMethodId.value) : null\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tthis.NContribution.nextFertilizationDate = FertilizationEvent.getNextFertilizationDate(\r\n\t\t\t\t\t\t\tthis.f.EventDate.value,\r\n\t\t\t\t\t\t\tthis.f.FertilizationsPerMonth.value, this.f.DaysToNextFertilization.value);\r\n\r\n\t\t\t\t\t\tthis.calculateNContribution(isVisible);\r\n\t\t\t\t\t\tthis.NContribution.UIVisible = isVisible;\r\n\r\n\t\t\t\t\t\tthis.loading.isInitial = false;\r\n\r\n\t\t\t\t\t\tif (this.loading.nContribution) {\r\n\t\t\t\t\t\t\tthis._hideNContributionLoader();\r\n\t\t\t\t\t\t\tthis.loading.nContribution = false;\r\n\t\t\t\t\t\t\tthis.f.soilSampleEventId.enable({ emitEvent: false});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (this.NContribution.UIVisible) {\r\n\t\t\t\t\t\t\tthis._showNContributionUI();\r\n\t\t\t\t\t\t\t// Modal.resize();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (this.currentWells && this.currentWells.length) {\r\n\t\t\t\t\t\tthis._initializeWells(this.currentWells);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis._initializeWells(wells);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.f.IrrigationRecommendation.setValue(recommendation.irrigationAmountRecommended,\r\n\t\t\t\t\t\t{ emitEvent: false});\r\n\r\n\t\t\t\t\tif (this.fn.IrrigationAmount.invalid) {\r\n\t\t\t\t\t\tthis.fn.IrrigationAmount.setValue(recommendation.irrigationAmountRecommended,\r\n\t\t\t\t\t\t{ emitEvent: false });\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.fn.Ratio.setValue(recommendation.ratio);\r\n\r\n\t\t\t\t\tthis.NContribution.recommendationHours = this._getIrrigationInHours(\r\n\t\t\t\t\t\tthis.f.IrrigationRecommendation.value, this.fn.Ratio.value,\r\n\t\t\t\t\t\tthis.fn.IrrigationMethodId.value);\r\n\r\n\t\t\t\t\tthis.fn.irrigationAmountHours.setValue(this._getIrrigationInHours(\r\n\t\t\t\t\t\tthis.fn.IrrigationAmount.value,\r\n\t\t\t\t\t\tthis.fn.Ratio.value,\r\n\t\t\t\t\t\tthis.fn.IrrigationMethodId.value),\r\n\t\t\t\t\t\t{ emitEvent: false });\r\n\r\n\t\t\t\t\tthis.NContribution.nextFertilizationDate = FertilizationEvent.getNextFertilizationDate(\r\n\t\t\t\t\t\tthis.f.EventDate.value,\r\n\t\t\t\t\t\tthis.f.FertilizationsPerMonth.value,\r\n\t\t\t\t\t\tthis.f.DaysToNextFertilization.value);\r\n\r\n\t\t\t\t\tthis.calculateNContribution(isVisible);\r\n\r\n\t\t\t\t\tthis.NContribution.UIVisible = isVisible;\r\n\r\n\t\t\t\t\tthis.loading.isInitial = false;\r\n\r\n\t\t\t\t\tif (this.loading.nContribution) {\r\n\t\t\t\t\t\tthis._hideNContributionLoader();\r\n\t\t\t\t\t\tthis.loading.nContribution = false;\r\n\t\t\t\t\t\tthis.f.soilSampleEventId.enable({ emitEvent: false});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (this.NContribution.UIVisible) {\r\n\t\t\t\t\t\tthis._showNContributionUI();\r\n\t\t\t\t\t\t// Modal.resize();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic editNContribution(e?: MouseEvent): void {\r\n\t\tif (e) {\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\tif (!this._isNContributionCached) {\r\n\t\t\tthis.originalNContributionProperties = {\r\n\t\t\t\tNAppliedFromWater: this.f.NAppliedFromWater.value,\r\n\t\t\t\tIrrigationAmount: this.fn.IrrigationAmount.value,\r\n\t\t\t\tIrrigationMethodId: this.fn.IrrigationMethodId.value,\r\n\t\t\t\tUseWells: this.fn.UseWells.value,\r\n\t\t\t\tPPMTotal: this.fn.PPMTotal.value,\r\n\t\t\t\tRatio: this.fn.Ratio.value\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tthis.displayNContributionUI();\r\n\t}\r\n\r\n\t/**\r\n     * converts manager and applied N values to fertilizer units\r\n     * refresh validation\r\n     */\r\n\tpublic getFertilizerUnits(): void {\r\n\r\n\t\tif (this.f.managerNRecommendation.value !== null) {\r\n\t\t\tthis.f.ManagerFertilizerAmount.setValue(\r\n\t\t\t\tBOKA.NumberUtil.convertToFloat(FertilizationEvent.convertNToFertilizerAmount(\r\n\t\t\t\t\tthis.f.managerNRecommendation.value, this.form.value as IFertilizationEvent), 2)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (this.f.NApplied.value !== null) {\r\n\t\t\tthis.f.FertilizerApplied.setValue(\r\n\t\t\t\tBOKA.NumberUtil.convertToFloat(FertilizationEvent.convertNToFertilizerAmount(\r\n\t\t\t\t\tthis.f.NApplied.value, this.form.value as IFertilizationEvent), 2)\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getLbsNPerAcre(): void {\r\n\t\t// this code is redundant - reads as if managerRec is validated twice, though that's not what's happening\r\n\t\t// validate method is bastardized\r\n\t\t// validation code should be in fertilizationEvent class.\r\n\r\n\t\tif (this.f.ManagerFertilizerAmount.value !== null) {\r\n\t\t\tthis.f.managerNRecommendation.setValue(\r\n\t\t\t\tBOKA.NumberUtil.convertToFloat(FertilizationEvent.convertAmounttoLbsN(\r\n\t\t\t\t\tthis.f.ManagerFertilizerAmount.value, this.f.NPercentage.value,\r\n\t\t\t\t\tthis.f.IsFormulationTypeDry.value, this.f.LbsPerGallon.value\r\n\t\t\t\t), 2)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (this.f.FertilizerApplied.value !== null) {\r\n\t\t\tthis.f.NApplied.setValue(\r\n\t\t\t\tBOKA.NumberUtil.convertToFloat(FertilizationEvent.convertAmounttoLbsN(\r\n\t\t\t\t\tthis.f.FertilizerApplied.value,\r\n\t\t\t\t\tthis.f.NPercentage.value,\r\n\t\t\t\t\tthis.f.IsFormulationTypeDry.value, this.f.LbsPerGallon.value\r\n\t\t\t\t), 2)\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getNAppliedFromWaterInFertilizerUnits(): number {\r\n\t\tif (!this.f) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn BOKA.NumberUtil.roundToDecimalPlaces(FertilizationEvent.convertNToFertilizerAmount(\r\n\t\t\tthis.f.NAppliedFromWater.value, this.form.value as IFertilizationEvent), 2);\r\n\t}\r\n\r\n\tpublic nextStep() {\r\n\t\tthis.firstStep = false;\r\n\t}\r\n\r\n\tpublic onSoilSampleUpdated(data: ISoilSampleEmitted): void {\r\n\t\tthis.f.soilSampleEventId.enable({emitEvent: false});\r\n\t\tthis.f.EventDate.enable({emitEvent: false});\r\n\t\tthis.f.CropStageId.enable({emitEvent: false});\r\n\t\tthis.f.FertilizerId.enable({emitEvent: false});\r\n\t\tthis.f.FertilizationsPerMonth.enable({emitEvent: false});\r\n\t\tthis.f.DaysToNextFertilization.enable({emitEvent: false});\r\n\r\n\t\tthis.f.soilSampleEventId.setValue(data.Id);\r\n\t\tthis.f.SoilSampleEventDate.setValue(data.EventDate);\r\n\r\n\t\tif (data.Response) { // added\r\n\t\t\tthis._refreshSoilSamples();\r\n\t\t\tthis._updateEventsList(data.Response);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic preventNonNumbers(e: KeyboardEvent): void {\r\n\t\tKeyboardUtility.preventNonNumbers(e, true);\r\n\t}\r\n\r\n\tpublic setIrrigationUnit(unit: eIrrigationUnit): void {\r\n\t\tthis.irrigationUnit = unit;\r\n\t}\r\n\r\n\tpublic showRecommendationSummary(): void {\r\n\t\tif (!this.recommendationSummaryVisible) {\r\n\t\t\tthis.fertilizationEventService.getRecommendationSummary(this.plantingId,\r\n\t\t\t\tthis.form.value as IFertilizationEvent)\r\n\t\t\t\t.then(res => {\r\n\t\t\t\t\tif (!this._isAlive) {\r\n\t\t\t\t\t\t//\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.recommendationSummaryVisible = true;\r\n\t\t\t\t\t// force Angular to update view to make sure that recommendationSummary component is present in the DOM after flipping ngIf\r\n\t\t\t\t\tthis.changeDetectorRef.detectChanges();\r\n\r\n\t\t\t\t\tif (!this.recommendationSummary) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.recommendationSummary.render(res);\r\n\t\t\t\t\tthis._displayRecommendationSummary();\r\n\t\t\t\t})\r\n\t\t} else {\r\n\t\t\tthis.recommendationSummary.clearFertilizerRecommendationSummary();\r\n\t\t\tthis.recommendationSummaryVisible = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleToFertUnits(): void {\r\n\t\tthis.units = 'fertilizerUnit'\r\n\t}\r\n\r\n\tpublic toggleToLbsNPerAcre(): void {\r\n\t\tthis.units = 'lbsNPerAcre'\r\n\t}\r\n\r\n\tpublic update(): void {\r\n\r\n\t\tlet fe: IFertilizationEvent;\r\n\r\n\t\tthis._convertSoilSampleEventDate();\r\n\r\n\t\tfe = this.form.value as IFertilizationEvent;\r\n\r\n\t\tif (this.f.NAppliedFromWater.value !== null) {\r\n\t\t\t// save irrigation event date if N applied from water is set.\r\n\t\t\t// otherwise don't commit to a date here\r\n\t\t\tfe.IrrigationEventDate = fe.EventDate;\r\n\t\t}\r\n\r\n\t\tfe.IrrigationRecommendation = this.f.IrrigationRecommendation.value;\r\n\t\tfe.IrrigationMethodId = this.fn.IrrigationMethodId.value;\r\n\t\tfe.UseWells = this.fn.UseWells.value;\r\n\t\tfe.PPMTotal = this.fn.PPMTotal.value;\r\n\r\n\t\tif (this.fn.wells && (this.fn.wells as FormArray).length) {\r\n\t\t\tthis.fertilizationEventWellService.saveAllFertilizationWells(this.fn.wells.value as IWell[],\r\n\t\t\t\tthis.eventId);\r\n\t\t}\r\n\r\n\t\tif (this.isFuture) { // if event is in the future, applied value should be wiped\r\n\t\t\t// update applied values here so user isn't heavily penalized for toggling event date\r\n\t\t\tthis.f.FertilizerApplied.setValue(null);\r\n\t\t\tthis.f.NApplied.setValue(null);\r\n\t\t}\r\n\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\ttry {\r\n\t\t\tthis.fertilizationEventService.update(this.eventId, fe, this.plantingId)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tthis.isSaving = false;\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tres.updateServices(EventsType.FERTILIZER, this._originalDate,\r\n\t\t\t\t\tthis.plantingId, this.ranchService, this.updateService);\r\n\r\n\t\t\t\tthis.updateService.setEventDialogClosed(); // tell event table to re-display\r\n\t\t\t\tthis.close();\r\n\t\t\t\tthis.updateService.setRanchSettingsUpdated('fertilizers');\r\n\t\t\t});\r\n\t\t} catch (e) {\r\n\t\t\tthis.isSaving = false;\r\n\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\tmessage: e\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic updateRecommendationWithNContribution(e?: MouseEvent): void {\r\n\t\tif (e) {\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\tthis._hideNContributionUI();\r\n\r\n\t\tthis.NContribution.UIVisible = false;\r\n\r\n\t\tthis._isNContributionCached = true;\r\n\r\n\t\tthis.originalNContributionProperties = {\r\n\t\t\tNAppliedFromWater: this.f.NAppliedFromWater.value,\r\n\t\t\tIrrigationAmount: this.fn.IrrigationAmount.value,\r\n\t\t\tIrrigationMethodId: this.fn.IrrigationMethodId.value,\r\n\t\t\tUseWells: this.fn.UseWells.value,\r\n\t\t\tPPMTotal: this.fn.PPMTotal.value,\r\n\t\t\tRatio: this.fn.Ratio.value\r\n\t\t};\r\n\r\n\t\tthis.currentWells = this.fn.wells.value;\r\n\t}\r\n\r\n\tprivate _calculateTotalWellPercentage(): void {\r\n\t\tlet result = 0;\r\n\r\n\t\tfor (let well of ((this.fn.wells as FormArray).controls as FormGroup[])) {\r\n\t\t\tresult += well.get('Percentage').value;\r\n\t\t}\r\n\r\n\t\tthis.totalWellPercentage = result;\r\n\t}\r\n\r\n\tprivate _clear(): void {\r\n\t\tthis.fertilizerDetail = null;\r\n\t\tthis.isFuture = false;\r\n\t\tthis.isFertilizationsPerMonth = false;\r\n\t\tthis.recommendationSummaryVisible = false;\r\n\r\n\t\tthis.NContribution = {\r\n\t\t\tUIVisible: false,\r\n\t\t\tcalculatedPPM: 0,\r\n\t\t\trecommendationHours: null,\r\n\t\t\tnextFertilizationDate: null,\r\n\t\t}\r\n\r\n\t\tthis.currentWells = null;\r\n\t\tthis._isNContributionCached = false;\r\n\t\tthis.irrigationUnit = eIrrigationUnit.HOURS;\r\n\r\n\t\tthis.loading = {\r\n\t\t\tnContribution: false,\r\n\t\t\tirrigationRecommendation: false,\r\n\t\t\tisInitial: false\r\n\t\t};\r\n\r\n\t\tthis.totalWellPercentage = null;\r\n\t\tthis.units = this.UNIT_GAL_PER_ACRE;\r\n\t\tthis.initialDataPull = false;\r\n\t\tthis.isNDependent = null;\r\n\t}\r\n\r\n\tprivate _convertSoilSampleEventDate(): void {\r\n\t\tif (this.f.soilSampleEventId.value === this.NO_SOIL_SAMPLE ||\r\n\t\t\tthis.f.soilSampleEventId.value === this.SOIL_SAMPLE_DROPDOWN_NEW) {\r\n\r\n\t\t\tthis.f.SoilSampleEventDate.setValue(null);\r\n\t\t} else {\r\n\t\t\tlet se: IFormSoilSample;\r\n\r\n\t\t\tif (!this.soilSamples || this.soilSamples.length === 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tse = this.soilSamples.filter(x => x.Id === this.f.soilSampleEventId.value)[0];\r\n\r\n\t\t\tif (!se) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.f.SoilSampleEventDate.setValue(se.Date);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _displayRecommendations(): void {\r\n\t\tjQuery('#fertilizationRecommendationsContainer').css({ 'display': 'initial' });\r\n\t}\r\n\r\n\tprivate _displayRecommendationSummary(): void {\r\n\t\tjQuery('#fertilizationRecommendationSummary').css({ 'display': 'initial' });\r\n\t}\r\n\r\n\tprivate _updateRecommendation(): void {\r\n\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._convertSoilSampleEventDate();\r\n\r\n\t\tif (!this.isNDependent) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.fertilizationEventService.getNRecommendation(this.plantingId,\r\n\t\t\tthis.form.value as IFertilizationEvent)\r\n\t\t\t.then((res) => {\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.f.NAppliedFromWater.value === null) {\r\n\t\t\t\t\tthis.f.IrrigationEventDate.setValue(res.PreviousIrrigationEventDate);\r\n\t\t\t\t\tthis.fn.Ratio.setValue(res.IrrigationUnitConversionRatio);\r\n\t\t\t\t\tthis.fn.IrrigationMethodId.setValue(res.LastIrrigationMethodId);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.FertilizationRecommendationLbsPerAcre =\r\n\t\t\t\t\tBOKA.NumberUtil.convertToFloat(FertilizationEvent.convertNToFertilizerAmount(\r\n\t\t\t\t\t\tres.NFertilizationRecommended, this.form.value as IFertilizationEvent), 2);\r\n\r\n\t\t\t\t// convert to string so don't inadvertently trigger event change warning\r\n\t\t\t\tthis.NFertilizationRecommended = BOKA.NumberUtil.convertToFloat(res.NFertilizationRecommended, 2);\r\n\r\n\t\t\t\tif (!this.recommendationSummaryVisible) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.f.Id.setValue(this.eventId);\r\n\t\t\t\tthis._convertSoilSampleEventDate();\r\n\r\n\t\t\t\tthis.fertilizationEventService.getRecommendationSummary(this.plantingId,\r\n\t\t\t\t\tthis.form.value as IFertilizationEvent)\r\n\t\t\t\t\t.then(summary => {\r\n\t\t\t\t\t\tif (!this.recommendationSummary) {\r\n\t\t\t\t\t\t\treturn\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.recommendationSummary.render(summary);\r\n\t\t\t\t\t});\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _getAddModel(): Promise<void> {\r\n\t\treturn this.fertilizationEventService.getCreateForm(this.plantingId)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\treturn of(null).toPromise();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.YieldTarget = res.YieldTarget;\r\n\t\t\t\tthis._commodityTypeId = res.CommodityTypeId;\r\n\t\t\t\tthis.cropStages = res.CropStages;\r\n\t\t\t\tthis.fertilizers = res.Fertilizers;\r\n\t\t\t\tthis._harvestDate = DateUtility.DotNetToDate(res.endDate);\r\n\r\n\t\t\t\tif (this._dateDefault) {\r\n\t\t\t\t\tres.EventDate = this._dateDefault;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tres.EventDate = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.isFertilizationsPerMonth = this._isFertilizationsPerMonth(this._commodityTypeId);\r\n\t\t\t\tthis._initializeForm(res);\r\n\r\n\t\t\t\tthis.isLoaded = true;\r\n\t\t\t\t// Modal.resize();\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _configureDeleteConfirmationText(): void {\r\n\t\tthis._deleteConfirmationData = {\r\n\t\t\tobjectName: 'Fertilization Event',\r\n\t\t\tspecificName: null,\r\n\t\t\tadditionalMessage: 'Are you sure you want to delete this fertilization event dated '\r\n\t\t\t+ (this.f.EventDate.value as Date).toDateString() + '?'\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Get Fertilization Event (calls /Edit)\r\n\t * @param id\r\n\t */\r\n\tprivate _getEditModel(id: number): Promise<void> {\r\n\r\n\t\tthis.initialDataPull = true;\r\n\r\n\t\treturn this.fertilizationEventService.getEditModel(id)\r\n\t\t\t.then((res: FertilizationEvent) => {\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\t\tmessage: 'Fertilization event failed to load. Try again.'\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._originalDate = res.EventDate;\r\n\t\t\t\tthis.soilSamples = res.SoilSamples.filter(x => DateUtility.isOnOrBefore(x.Date, res.EventDate));\r\n\t\t\t\tthis.cropStages = res.CropStages;\r\n\t\t\t\tthis.fertilizers = res.Fertilizers;\r\n\t\t\t\tthis.lastUpdated = res.LastUpdated;\r\n\t\t\t\tthis._commodityTypeId = res.CommodityTypeId;\r\n\t\t\t\tthis.NFertilizationRecommended = res.NFertilizationRecommended;\r\n\t\t\t\tthis.FertilizationRecommendationLbsPerAcre = res.FertilizationRecommendationLbsPerAcre;\r\n\t\t\t\tthis._harvestDate = DateUtility.DotNetToDate(res.endDate);\r\n\t\t\t\tres.Id = id;\r\n\t\t\t\tthis.YieldTarget = res.YieldTarget;\r\n\t\t\t\tthis.isFertilizationsPerMonth = this._isFertilizationsPerMonth(this._commodityTypeId);\r\n\t\t\t\tthis._initializeForm(res);\r\n\r\n\t\t\t\tthis._configureDeleteConfirmationText();\r\n\r\n\t\t\t\tif (this.f.IrrigationRecommendation.valid) { // used cached value if available\r\n\t\t\t\t\tthis.NContribution.recommendationHours = this._getIrrigationInHours(\r\n\t\t\t\t\t\tthis.f.IrrigationRecommendation.value, this.fn.Ratio.value,\r\n\t\t\t\t\t\tthis.fn.IrrigationMethodId.value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.f.NAppliedFromWater.value === null) {\r\n\t\t\t\t\tthis.NContribution.UIVisible = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loading.isInitial = true;\r\n\t\t\t\t\tthis.displayNContributionUI(false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._getFertlizerProperties(this.f.FertilizerId.value)\r\n\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\tthis.isLoaded = true;\r\n\t\t\t\t\t});\r\n\t\t\t})\r\n\t}\r\n\r\n\tprivate _isFertilizationsPerMonth(commodityTypeId: number): boolean {\r\n\t\tif (this._commodityTypeId === eCommodityTypes.STRAWBERRY ||\r\n\t\t\tthis._commodityTypeId === eCommodityTypes.CANEBERRY) {\r\n\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n     * This method is called after getting JSON from server, and converts N into fertilizer amount.\r\n     * In case of alfalfa and 0N based fertilizers, we want to circumvent the conversion.\r\n     *\r\n     * @param id fertilizer ID\r\n     */\r\n\tprivate _getFertlizerProperties(id: number): Promise<void> {\r\n\r\n\t\treturn this.fertilizerService.getProperties(id)\r\n\t\t.then((res) => {\r\n\t\t\tif (!res) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.f.FertilizerName.setValue(res.Name);\r\n\t\t\tthis.f.FertilizerOtherNutrients.setValue(res.OtherNutrients);\r\n\t\t\tthis.f.IsFormulationTypeDry.setValue(res.IsFormulationTypeDry);\r\n\t\t\tthis.f.NPercentage.setValue(res.NPercentage);\r\n\t\t\tthis.f.LbsPerGallon.setValue(res.LbsPerGallon);\r\n\r\n\t\t\tthis.warnings = this._shouldShowWarning();\r\n\r\n\t\t\tthis._getLbsPerAcreUnits();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getIrrigationInHours(inches: number, ratio: number, methodId: number): number {\r\n\t\tlet irrigationEvent: IIrrigationEventEditResponse;\r\n\r\n\t\tif (!ratio) {\r\n\t\t\t// assume this.NContribution always exists\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tirrigationEvent = IrrigationEvent.getEmptyEditResponse();\r\n\r\n\t\tirrigationEvent.Ratio = ratio;\r\n\r\n\t\tirrigationEvent.IrrigationMethodId = methodId;\r\n\t\tirrigationEvent.SprinklerApplicationRate = ratio;\r\n\t\tirrigationEvent.DripApplicationRate = ratio;\r\n\t\tirrigationEvent.MicroSprinklerApplicationRate = ratio;\r\n\r\n\t\treturn BOKA.NumberUtil.roundToDecimalPlaces(this.calculateService.\r\n\t\t\tirrigationConvertToTime(inches, irrigationEvent), 2);\r\n\t}\r\n\r\n\tprivate _getIrrigationInInches(hours: number, ratio: number, methodId: number): number {\r\n\t\tif (!ratio) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet irrigationObject: IIrrigationObject = {\r\n\t\t\tIrrigationMethodId: methodId,\r\n\t\t\tSprinklerApplicationRate: ratio,\r\n\t\t\tDripApplicationRate: ratio,\r\n\t\t\tMicroSprinklerApplicationRate: ratio\r\n\t\t}\r\n\r\n\t\treturn BOKA.NumberUtil.roundToDecimalPlaces(this.calculateService.\r\n\t\t\tirrigationConvertToInches(hours, irrigationObject), 4);\r\n\t}\r\n\r\n\tprivate _getLbsPerAcreUnits(): void {\r\n\t\tif (this.f.managerNRecommendation !== null && this.f.NPercentage.value !== 0\r\n\t\t\t&& !this.initialDataPull && this.f.ManagerFertilizerAmount.invalid) {\r\n\r\n\t\t\tthis.f.ManagerFertilizerAmount.setValue(\r\n\t\t\t\tBOKA.NumberUtil.convertToFloat(FertilizationEvent.\r\n\t\t\t\t\tconvertNToFertilizerAmount(this.f.managerNRecommendation.value,\r\n\t\t\t\t\tthis.form.value as IFertilizationEvent), 2)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tthis.FertilizationRecommendationLbsPerAcre = BOKA.NumberUtil.convertToFloat(FertilizationEvent.\r\n\t\t\tconvertNToFertilizerAmount(this.NFertilizationRecommended as number,\r\n\t\t\t\tthis.form.value as IFertilizationEvent), 2)\r\n\r\n\t\tif (this.f.NApplied.value === null) {\r\n\t\t\tthis.initialDataPull = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.initialDataPull && this.f.FertilizerApplied.valid) {\r\n\t\t\tthis.initialDataPull = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.f.FertilizerApplied.setValue(\r\n\t\t\tBOKA.NumberUtil.convertToFloat(FertilizationEvent.convertNToFertilizerAmount(\r\n\t\t\t\tthis.f.NApplied.value, this.form.value as IFertilizationEvent), 2)\r\n\t\t);\r\n\r\n\t\tthis.initialDataPull = false;\r\n\t}\r\n\r\n\tprivate _hideNContributionIrrigation(): void {\r\n\t\tif (this.nContributionIrrigation) {\r\n\t\t\tjQuery(this.nContributionIrrigation.nativeElement).slideUp('medium');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _hideNContributionIrrigationLoader(): void {\r\n\t\tif (this.nContributionLoader) {\r\n\t\t\tjQuery(this.nContributionIrrigationLoader.nativeElement).slideUp('medium');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _hideNContributionLoader(): void {\r\n\t\tif (this.nContributionLoader) {\r\n\t\t\tjQuery(this.nContributionLoader.nativeElement).slideUp('medium');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _hideNContributionUI(): void {\r\n\t\tif (this.nContributionUI) {\r\n\t\t\tjQuery(this.nContributionUI.nativeElement).slideUp('medium');\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param m model\r\n\t */\r\n\tprivate _initializeForm(m: FertilizationEvent): void {\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tId: [m.Id],\r\n\t\t\tEventDate: [m.EventDate, [Validators.required,\r\n\t\t\t\tFormValidation.maxDateValidator(this._harvestDate)]],\r\n\t\t\tFertilizerId: [ m.FertilizerId,\r\n\t\t\t\t[Validators.required, Validators.min(1)]],\r\n\r\n\t\t\tFertilizationsPerMonth: [m.FertilizationsPerMonth, {\r\n\t\t\t\t\tvalidators: [ Validators.min(1), Validators.max(10), FormValidation.integerValidator]}],\r\n\r\n\t\t\tDaysToNextFertilization: [m.DaysToNextFertilization, {\r\n\t\t\t\tvalidators: [ Validators.min(1), FormValidation.integerValidator]} ],\r\n\r\n\t\t\tCropStageId: [m.CropStageId ? m.CropStageId : null], // optional\r\n\t\t\tsoilSampleEventId: [-2, [Validators.required]],\r\n\t\t\tSoilSampleEventDate: [m.SoilSampleEventDate],\r\n\t\t\tManagerFertilizerAmount: [m.ManagerFertilizerAmount],\r\n\t\t\tmanagerNRecommendation: [m.managerNRecommendation],\r\n\t\t\tFertilizerApplied: [m.FertilizerApplied],\r\n\t\t\tNApplied: [m.NApplied],\r\n\t\t\tLbsPerGallon: [m.LbsPerGallon],\r\n\t\t\tFertilizerName: [null],\r\n\t\t\tFertilizerOtherNutrients: [null],\r\n\t\t\tFormulationTypeId: [m.FormulationTypeId],\r\n\t\t\tIsFormulationTypeDry: [m.IsFormulationTypeDry],\r\n\t\t\tNAppliedFromWater: [m.NAppliedFromWater],\r\n\t\t\tNPercentage: [m.NPercentage],\r\n\t\t\tIrrigationRecommendation: [m.IrrigationRecommendation],\r\n\t\t\tIrrigationEventDate: [m.IrrigationEventDate],\r\n\t\t});\r\n\r\n\t\tthis.maxDate = moment(this._harvestDate).subtract(1, 'days').toDate();\r\n\r\n\t\tif (this.eventId) {\r\n\t\t\tthis.f.Id.setValidators(Validators.required);\r\n\t\t}\r\n\r\n\r\n\t\tif (this.isNDependent) {\r\n\t\t\tif (this.isFertilizationsPerMonth) {\r\n\t\t\t\tthis.f.FertilizationsPerMonth.setValidators([Validators.required, Validators.min(0.0000001),\r\n\t\t\t\t\tValidators.max(10), FormValidation.integerValidator()]);\r\n\r\n\t\t\t\tthis.f.DaysToNextFertilization.clearValidators();\r\n\t\t\t\tthis.f.DaysToNextFertilization.updateValueAndValidity();\r\n\t\t\t} else {\r\n\t\t\t\tthis.f.DaysToNextFertilization.setValidators([Validators.required, Validators.min(1),\r\n\t\t\t\t\tFormValidation.integerValidator()]);\r\n\r\n\t\t\t\tthis.f.FertilizationsPerMonth.clearValidators();\r\n\t\t\t\tthis.f.FertilizationsPerMonth.updateValueAndValidity();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.f.FertilizationsPerMonth.clearValidators();\r\n\t\t\tthis.f.DaysToNextFertilization.clearValidators();\r\n\t\t}\r\n\r\n\t\tif (this.f.Id.value) {\r\n\t\t\tthis.form.markAsDirty();\r\n\t\t}\r\n\r\n\t\tif (this.soilSamples) {\r\n\t\t\tlet soilSample: IFormSoilSample;\r\n\r\n\t\t\tsoilSample = this.soilSamples.filter(x =>\r\n\t\t\t\tDateUtility.areEqualDates(x.Date, this.f.SoilSampleEventDate.value))[0];\r\n\r\n\t\t\tif (soilSample) {\r\n\t\t\t\tthis.f.soilSampleEventId.setValue(soilSample.Id, { emitEvent: false });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._valueChanges();\r\n\t\tthis._initializeNContributionForm(m);\r\n\t}\r\n\r\n\tprivate _initializeNContributionForm(m: FertilizationEvent): void {\r\n\t\tthis.nContributionForm = this._fb.group({\r\n\t\t\tIrrigationMethodId: [m.IrrigationMethodId ? m.IrrigationMethodId :\r\n\t\t\t\tm.lastIrrigationMethod ?\r\n\t\t\t\tm.lastIrrigationMethod : eIrrigationMethods.SPRINKLER,\r\n\t\t\t\t[Validators.required, Validators.min(1)]],\r\n\t\t\tUseWells: [m.UseWells !== null ? m.UseWells : true, Validators.required],\r\n\t\t\twells: this._fb.array([]),\r\n\t\t\tPPMTotal: [m.PPMTotal ? m.PPMTotal : 0], // see validation in updateValidatorsOnUseWellChange\r\n\t\t\tIrrigationAmount: [m.IrrigationAmount,\r\n\t\t\t\t[Validators.min(0.00000001), Validators.required]],\r\n\t\t\tirrigationAmountHours: [this._getIrrigationInHours(\r\n\t\t\t\tm.IrrigationAmount, m.ratio, m.IrrigationMethodId),\r\n\t\t\t\t[Validators.min(0.00000001), Validators.required]],\r\n\t\t\tRatio: [m.ratio ? m.ratio : 0, Validators.min(0)] // used to convert from inches to hours\r\n\t\t});\r\n\r\n\t\tthis._updateValidatorsOnUseWellChange();\r\n\t\tthis._onNContributionValueChanges();\r\n\t}\r\n\r\n\tprivate _initializeWells(wells: IWell[]): void {\r\n\t\tlet total = 0;\r\n\t\tlet temp: FormArray;\r\n\r\n\t\tif (!wells || wells.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttemp = this._fb.array([]);\r\n\r\n\t\tfor (let well of wells) {\r\n\t\t\tlet g: FormGroup;\r\n\r\n\t\t\tg = this._fb.group({\r\n\t\t\t\tId: [well.Id, Validators.required],\r\n\t\t\t\tWellId: [well.WellId, Validators.required],\r\n\t\t\t\tPercentage: [well.Percentage, Validators.required],\r\n\t\t\t\tName: [well.Name, Validators.required],\r\n\t\t\t\tNitrogenPPM: [well.NitrogenPPM, Validators.required]\r\n\t\t\t});\r\n\r\n\t\t\tg.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\t\tthis._calculateTotalWellPercentage();\r\n\t\t\t});\r\n\r\n\t\t\ttemp.push(g);\r\n\r\n\t\t\ttotal += well.Percentage;\r\n\t\t}\r\n\r\n\t\tthis.fn.wells = temp;\r\n\t\tthis.totalWellPercentage = total;\r\n\r\n\t\tif (this.fn.wells.value.length === 1) {\r\n\t\t\t(this.fn.wells as FormArray).controls[0].get('Percentage').setValue(100);\r\n\t\t\tthis.totalWellPercentage = 100;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _onDateChanged(): void {\r\n\t\tif (this.NContribution.UIVisible === true) {\r\n\t\t\tthis._updateNContributionRecommendation();\r\n\t\t}\r\n\r\n\t\tthis._refreshSoilSamples().then(() => { // refresh soil sample list based on date\r\n\t\t\tthis._updateRecommendation();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _onNContributionValueChanges(): void {\r\n\t\tthis.fn.IrrigationMethodId.valueChanges.subscribe(() => {\r\n\t\t\tthis._updateNContributionRecommendation();\r\n\t\t});\r\n\r\n\t\tthis.fn.UseWells.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._updateValidatorsOnUseWellChange();\r\n\t\t});\r\n\r\n\t\tthis.fn.IrrigationAmount.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tlet hours: number = this._getIrrigationInHours(\r\n\t\t\t\tthis.fn.IrrigationAmount.value,\r\n\t\t\t\tthis.fn.Ratio.value, this.fn.IrrigationMethodId.value);\r\n\r\n\t\t\tthis.fn.irrigationAmountHours.setValue(hours, { emitEvent: false });\r\n\t\t\tthis.calculateNContribution(true)\r\n\t\t});\r\n\r\n\t\tthis.fn.irrigationAmountHours.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tlet inches: number = this._getIrrigationInInches(\r\n\t\t\t\tthis.fn.irrigationAmountHours.value,\r\n\t\t\t\tthis.fn.Ratio.value, this.fn.IrrigationMethodId.value);\r\n\r\n\t\t\tthis.fn.IrrigationAmount.setValue(inches, { emitEvent: false });\r\n\r\n\t\t\tthis.calculateNContribution(true);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _refreshSoilSamples(): Promise<void> {\r\n\t\treturn this.soilSampleEventService.getListForPlanting(this.plantingId)\r\n\t\t\t.then(res => {\r\n\r\n\t\t\t\tif (!res || res.length === 0) {\r\n\t\t\t\t\t// in some cases, there will be no soil samples available for\r\n\t\t\t\t\t// a fertilization event\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.soilSamples = res.filter(x => DateUtility.isOnOrBefore(x.Date,\r\n\t\t\t\t\tthis.f.EventDate.value));\r\n\r\n\t\t\t\tfor (let soilSample of this.soilSamples) {\r\n\t\t\t\t\tif (soilSample.Id === this.f.soilSampleEventId.value) {\r\n\t\t\t\t\t\tthis._selectSoilSample();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _resetNConributionView(): void {\r\n\t\tif (!this.nContributionUI || !this.nContributionLoader || !this.nContributionIrrigationLoader\r\n\t\t\t|| !this.nContributionIrrigation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.NContribution.UIVisible) {\r\n\t\t\tif (this.loading.nContribution) {\r\n\t\t\t\tthis.render.setStyle(this.nContributionLoader.nativeElement, 'display', 'block');\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.render.setStyle(this.nContributionUI.nativeElement, 'display', 'block');\r\n\r\n\t\t\tif (this.loading.irrigationRecommendation) {\r\n\t\t\t\tthis.render.setStyle(this.nContributionIrrigationLoader.nativeElement, 'display', 'block');\r\n\t\t\t\tthis.render.setStyle(this.nContributionIrrigation.nativeElement, 'display', 'none');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Triggers when user touches Soil Sample dropdown\r\n\tprivate _selectSoilSample(): void {\r\n\r\n\t\tif (this.f.soilSampleEventId.value === this.SOIL_SAMPLE_DROPDOWN_NEW) {\r\n\t\t\tif (this.NContribution.UIVisible) {\r\n\t\t\t\tthis.cancelIncludingNContribution();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis._updateRecommendation();\r\n\t\t\t// for iPad, need to manually force Angular to recheck in order to ensure recommendation area is rendered\r\n\t\t\tthis.changeDetectorRef.detectChanges();\r\n\t\t\tthis._displayRecommendations();\r\n\t\t}\r\n\r\n\t\tthis._getLbsPerAcreUnits();\r\n\t}\r\n\r\n\tprivate _shouldShowWarning(): FertilizationEventWarningTypes[] {\r\n\t\tlet result: number[] = new Array();\r\n\r\n\t\tif (!this.form) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tif (!this.YieldTarget && this.isTree) {\r\n\t\t\tresult.push(FertilizationEventWarningTypes.NO_YIELD);\r\n\t\t}\r\n\r\n\t\tif ((this.f.FormulationTypeId.value === eFertilizerFormulationTypes.WET\r\n\t\t\t|| this.f.IsFormulationTypeDry.value === false) &&\r\n\t\t\tthis.f.LbsPerGallon.value === 0) {\r\n\r\n\t\t\tresult.push(FertilizationEventWarningTypes.ZERO_LBS_PER_GALLON);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _showNContributionIrrigation(): void {\r\n\t\tif (this.nContributionIrrigation) {\r\n\t\t\tjQuery(this.nContributionIrrigation.nativeElement).slideDown('medium');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _showNContributionIrrigationLoader(): void {\r\n\t\tif (this.nContributionLoader) {\r\n\t\t\tjQuery(this.nContributionIrrigationLoader.nativeElement).slideDown('medium');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _showNContributionLoader(): void {\r\n\t\tif (this.nContributionLoader) {\r\n\t\t\tjQuery(this.nContributionLoader.nativeElement).slideDown('medium');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _showNContributionUI(): void {\r\n\t\tif (this.nContributionUI) {\r\n\t\t\tjQuery(this.nContributionUI.nativeElement).slideDown('medium');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _totalPercentageMustEqualValue(): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet total = 0;\r\n\r\n\t\t\tfor (let well of ((control as FormArray).controls as FormGroup[])) {\r\n\t\t\t\ttotal += well.get('Percentage').value;\r\n\t\t\t}\r\n\r\n\t\t\tif (total < 0) {\r\n\t\t\t\treturn { 'totalPercentageTooLow': true };\r\n\t\t\t} else if (total > 100) {\r\n\t\t\t\treturn { 'totalPercentageTooHigh': true }\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _updateEventsList(res: IEventPostResponseJSON): void {\r\n\t\tlet eventGroup: EventGroup;\r\n\r\n\t\tif (!res || !res.Events || res.Events.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\teventGroup = new EventGroup();\r\n\t\teventGroup.convert(res.Events[0], DateUtility.DotNetToDate(res.WetDate));\r\n\t\teventGroup.Id = res.Id;\r\n\t\teventGroup.ActiveEvents = res.ActiveEvents;\r\n\r\n\t\tthis.ranchService.plantings.addEventToPlantings(eventGroup,\r\n\t\t\tthis.plantingId);\r\n\r\n\t\t// update event table and event snapshot...\r\n\t\tthis.updateService.setPlantingsUpdated(this.updateService.currentRanchId, new Date());\r\n\t}\r\n\r\n\t/**\r\n\t * Method is called when:\r\n\t *\r\n\t * 1) user changes the fertilization event date\r\n\t * 2) user changes irrigation method (why? should only update unit conversion)\r\n\t * 3) user updates fertilizations per month (why? how does that change the N\r\n\t * contribution recommendation?)\r\n\t *\r\n\t * @param $methodId Can be either string or number, since it's coming from a dropdown\r\n\t */\r\n\tprivate _updateNContributionRecommendation() {\r\n\t\tif (!this.NContribution.UIVisible) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.loading.irrigationRecommendation = true;\r\n\r\n\t\tthis.NContribution.nextFertilizationDate = FertilizationEvent.getNextFertilizationDate(\r\n\t\t\tthis.f.EventDate.value,\r\n\t\t\tthis.f.FertilizationsPerMonth.value, this.f.DaysToNextFertilization.value);\r\n\r\n\t\tthis.irrigationEventService.getNContributionRecommendation(this.plantingId,\r\n\t\t\tthis.f.EventDate.value, this.fn.IrrigationMethodId.value,\r\n\t\t\tthis.f.DaysToNextFertilization.value,\r\n\t\t\tthis.f.FertilizationsPerMonth.value).then((response) => {\r\n\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\tthrow new Error('response is empty');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.fn.Ratio.setValue(response.ratio);\r\n\t\t\t\tthis.f.IrrigationRecommendation.setValue(response.irrigationAmountRecommended);\r\n\r\n\t\t\t\tthis.NContribution.recommendationHours = this._getIrrigationInHours(\r\n\t\t\t\t\tthis.f.IrrigationRecommendation.value, this.fn.Ratio.value,\r\n\t\t\t\t\tthis.fn.IrrigationMethodId.value);\r\n\r\n\t\t\t\tthis.fn.IrrigationAmount.setValue(this.f.IrrigationRecommendation.value);\r\n\r\n\t\t\t\tthis.calculateNContribution();\r\n\t\t\t\tthis.loading.irrigationRecommendation = false;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _updateValidatorsOnUseWellChange(): void {\r\n\t\tif (this.fn.UseWells.value === false) {\r\n\t\t\tthis.fn.PPMTotal.setValidators([\r\n\t\t\t\tValidators.required,\r\n\t\t\t\tValidators.min(0)\r\n\t\t\t]);\r\n\r\n\t\t\tthis.fn.wells.setValidators(this._totalPercentageMustEqualValue);\r\n\t\t} else {\r\n\t\t\tthis.fn.PPMTotal.setValidators([\r\n\t\t\t\tValidators.min(0)\r\n\t\t\t]);\r\n\r\n\t\t\tthis.fn.wells.setValidators([\r\n\t\t\t\tValidators.required,\r\n\t\t\t\tthis._totalPercentageMustEqualValue\r\n\t\t\t]);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _valueChanges(): void {\r\n\t\tthis.f.EventDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.isFuture = DateUtility.isFuture(this.f.EventDate.value);\r\n\t\t\tthis._onDateChanged();\r\n\t\t});\r\n\r\n\t\tthis.f.FertilizerId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.fertilizerDetail = null;\r\n\r\n\t\t\tif (this.f.FertilizerId.valid) {\r\n\t\t\t\tthis._getFertlizerProperties(this.f.FertilizerId.value).then(() => {\r\n\t\t\t\t\tthis._updateRecommendation();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.f.FertilizationsPerMonth.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.form.updateValueAndValidity({emitEvent: false, onlySelf: true});\r\n\r\n\t\t\tif (this.f.FertilizationsPerMonth.valid) {\r\n\t\t\t\tthis._updateRecommendation();\r\n\t\t\t\tthis._updateNContributionRecommendation();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.f.DaysToNextFertilization.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\r\n\t\t\tthis.form.updateValueAndValidity({emitEvent: false, onlySelf: true});\r\n\r\n\t\t\tif (this.f.DaysToNextFertilization.valid) {\r\n\t\t\t\tthis._updateRecommendation();\r\n\t\t\t\tthis._updateNContributionRecommendation();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.f.soilSampleEventId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (this.f.soilSampleEventId.value === this.SOIL_SAMPLE_DROPDOWN_NEW) {\r\n\t\t\t\tthis.f.EventDate.disable({emitEvent: false});\r\n\t\t\t\tthis.f.soilSampleEventId.disable({emitEvent: false});\r\n\t\t\t\tthis.f.CropStageId.disable({emitEvent: false});\r\n\t\t\t\tthis.f.FertilizationsPerMonth.disable({emitEvent: false});\r\n\t\t\t\tthis.f.DaysToNextFertilization.disable({emitEvent: false});\r\n\t\t\t\tthis.f.FertilizerId.disable({emitEvent: false })\r\n\t\t\t} else {\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis._selectSoilSample();\r\n\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\n\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { FertilizationEvent } from './fertilizationEvent';\r\n\r\nimport { ModelService } from '../../services/model.service';\r\n\r\nimport { FertilizationEventEditViewModel, IFertilizationEvent, IFertilizationEventGetRecommendationModel,\r\n\tIFertilizationEventGetRecommendationModelJSON,\r\n\tFertilizationRecommendedSummaryViewModel,\r\n\tAlmondRecommendationSummaryModel,\r\n\tStrawberryFertilizationRecommendedSummaryViewModel,\r\n\tIFertilizationEventSeasonalNUptakeJSON,\r\n\tIFertilizationEventGetSeasonalNUptakeModel,\r\n\tIFertilizationEventService} from './interfaces';\r\n\r\nimport { IEventPostResponseJSON } from '../../models/event/interfaces';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { CMError } from '../../interfaces/interfaces';\r\nimport { EventResponse } from '../../models/event/eventResponse';\r\n\r\n@Injectable()\r\nexport class FertilizationEventService extends ModelService implements IFertilizationEventService {\r\n\r\n\tprivate _urls = {\r\n\t\tcreateForm: (plantingId: number) => `/v2/plantings/${plantingId}/fertilization-events/form.json`,\r\n\t\tcreate: (plantingId: number) => `/v0/plantings/${plantingId}/fertilization-events.json`,\r\n\t\tfertilizationEvent: (id: number) => `/v2/fertilization-events/${id}.json`,\r\n\t\trecommendation: {\r\n\t\t\tsummary: (plantingId: number) =>  `/v2/plantings/${plantingId}/fertilization-events/recommendation-summary.json`,\r\n\t\t\tamount: (plantingId: number) =>  `/v3/plantings/${plantingId}/fertilization-recommendation.json`,\r\n\t\t\t// amount: (id: number) => `/v2/fertilization-events/${id}/recommendation.json`,\r\n\t\t\tseasonalUptake: `/v2/fertilization-events/seasonal-n-uptake.json` // almond specific\r\n\t\t}\r\n\t};\r\n\r\n\tpublic getCreateForm(plantingId: number): Promise<FertilizationEvent> {\r\n\r\n\t\tif (!plantingId) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.get(this._urls.createForm(plantingId),\r\n\t\t\t(data: FertilizationEventEditViewModel): FertilizationEvent => {\r\n\t\t\t\tlet fertilizationEvent: FertilizationEvent;\r\n\r\n\t\t\t\tfertilizationEvent = new FertilizationEvent();\r\n\t\t\t\tfertilizationEvent.parseForm(data);\r\n\r\n\t\t\t\treturn fertilizationEvent;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tpublic getRecommendationSummary(plantingId: number, fertilizationEvent: IFertilizationEvent):\r\n\t\tPromise<FertilizationRecommendedSummaryViewModel\r\n\t\t| AlmondRecommendationSummaryModel | StrawberryFertilizationRecommendedSummaryViewModel> {\r\n\r\n\t\tlet params: {\r\n\t\t\tDaystoNextFertilization: number,\r\n\t\t\tFertilizationsPerMonth: number,\r\n\t\t\tSoilSampleEventDate: Date,\r\n\t\t\tEventDate: Date,\r\n\t\t\tNAppliedFromWater: number,\r\n\t\t\tEventId?: number,\r\n\t\t};\r\n\r\n\t\tif (!fertilizationEvent) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tparams = {\r\n\t\t\tDaystoNextFertilization: fertilizationEvent.DaysToNextFertilization,\r\n\t\t\tFertilizationsPerMonth: fertilizationEvent.FertilizationsPerMonth,\r\n\t\t\tSoilSampleEventDate: fertilizationEvent.SoilSampleEventDate,\r\n\t\t\tEventDate: DateUtility.ConvertToUTC(fertilizationEvent.EventDate),\r\n\t\t\tNAppliedFromWater: fertilizationEvent.NAppliedFromWater,\r\n\t\t\tEventId: fertilizationEvent.Id,\r\n\t\t};\r\n\r\n\t\treturn this.post(this._urls.recommendation.summary(plantingId), (data: FertilizationRecommendedSummaryViewModel\r\n\t\t\t| AlmondRecommendationSummaryModel | StrawberryFertilizationRecommendedSummaryViewModel | CMError):\r\n\t\t\t\tFertilizationRecommendedSummaryViewModel | AlmondRecommendationSummaryModel\r\n\t\t\t\t| StrawberryFertilizationRecommendedSummaryViewModel | CMError => {\r\n\r\n\t\t\tlet error: CMError;\r\n\r\n\t\t\tif (!data) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\terror = data as CMError;\r\n\r\n\t\t\tif (error.message) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\t\t}, params);\r\n\t}\r\n\r\n\tpublic getEditModel(id: number): Promise<FertilizationEvent> {\r\n\r\n\t\treturn this.get(this._urls.fertilizationEvent(id), (data: FertilizationEventEditViewModel): FertilizationEvent => {\r\n\t\t\tlet fertilizationEvent: FertilizationEvent;\r\n\r\n\t\t\tfertilizationEvent = new FertilizationEvent();\r\n\t\t\tfertilizationEvent.parseForm(data);\r\n\r\n\t\t\treturn fertilizationEvent;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic create(plantingId: number, event: IFertilizationEvent): Promise<IEventPostResponseJSON> {\r\n\t\tlet fe: IFertilizationEvent;\r\n\r\n\t\tlet params: {\r\n\t\t\tFertilizationEvent: IFertilizationEvent,\r\n\t\t\tManagerNRecommendation: number,\r\n\t\t\tManagerFertilizationAmount: number,\r\n\t\t\tPlantingId: number,\r\n\t\t};\r\n\r\n\t\tfe = jQuery.extend(true, {}, event); // avoid modifying the original object, since it can be reused in\r\n\t\t// cases where the popup doesn't close on save, e.g. when clicking \"clear\" in N Contribution Water\r\n\r\n\t\tfe.EventDate = DateUtility.ConvertToUTC(fe.EventDate);\r\n\t\tfe.IrrigationEventDate = DateUtility.ConvertToUTC(fe.IrrigationEventDate);\r\n\t\tfe.SoilSampleEventDate = DateUtility.ConvertToUTC(fe.SoilSampleEventDate);\r\n\r\n\t\tparams = {\r\n\t\t\tFertilizationEvent: fe,\r\n\t\t\tManagerNRecommendation: event.managerNRecommendation,\r\n\t\t\tManagerFertilizationAmount: event.ManagerFertilizerAmount,\r\n\t\t\tPlantingId: plantingId,\r\n\t\t}\r\n\r\n\t\treturn this.post(this._urls.create(plantingId), (data: IEventPostResponseJSON): IEventPostResponseJSON => {\r\n\t\t\t\treturn data;\r\n\t\t\t}, params\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Gets seasonal N uptake calculated values for almonds in planting settings\r\n\t * @param params\r\n\t */\r\n\tpublic getSeasonalNUptake(params: IFertilizationEventGetSeasonalNUptakeModel):\r\n\t\tPromise<IFertilizationEventSeasonalNUptakeJSON> {\r\n\r\n\t\treturn this.post(this._urls.recommendation.seasonalUptake, (data: IFertilizationEventSeasonalNUptakeJSON):\r\n\t\t\tIFertilizationEventSeasonalNUptakeJSON => {\r\n\r\n\t\t\treturn data;\r\n\t\t\t}, params\r\n\t\t);\r\n\t}\r\n\r\n\tpublic update(id: number, event: IFertilizationEvent, plantingId: number): Promise<EventResponse> {\r\n\r\n\t\tlet fe: IFertilizationEvent;\r\n\r\n\t\tlet params: {\r\n\t\t\tFertilizationEvent: IFertilizationEvent,\r\n\t\t\tManagerNRecommendation: number,\r\n\t\t\tManagerFertilizationAmount: number,\r\n\t\t\tPlantingId: number,\r\n\t\t}\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfe = jQuery.extend(true, {}, event); // avoid modifying the original object, since it can be reused in\r\n\t\t// cases where the popup doesn't close on save, e.g. when clicking \"clear\" in N Contribution Water\r\n\r\n\t\tparams = {\r\n\t\t\tFertilizationEvent: fe,\r\n\t\t\tManagerNRecommendation: event.managerNRecommendation,\r\n\t\t\tManagerFertilizationAmount: event.ManagerFertilizerAmount,\r\n\t\t\tPlantingId: plantingId,\r\n\t\t}\r\n\r\n\t\tparams.FertilizationEvent.EventDate = DateUtility.ConvertToUTC(fe.EventDate);\r\n\t\tparams.FertilizationEvent.IrrigationEventDate = DateUtility.ConvertToUTC(fe.IrrigationEventDate);\r\n\t\tparams.FertilizationEvent.SoilSampleEventDate = DateUtility.ConvertToUTC(fe.SoilSampleEventDate);\r\n\r\n\t\treturn this.put(this._urls.fertilizationEvent(id), (data: IEventPostResponseJSON | CMError ):\r\n\t\t\tEventResponse => {\r\n\r\n\t\t\tlet error: CMError;\r\n\t\t\tlet result: EventResponse;\r\n\r\n\t\t\tif (!data) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\terror = data as CMError;\r\n\t\t\tresult = new EventResponse(data as IEventPostResponseJSON);\r\n\r\n\t\t\tif (error.message) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\r\n\t\t}, params);\r\n\t}\r\n\r\n\tpublic delete(id: number): Promise<IEventPostResponseJSON> {\r\n\r\n\t\treturn this.deleteItem(this._urls.fertilizationEvent(id), (data: IEventPostResponseJSON): IEventPostResponseJSON => {\r\n\t\t\treturn data;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getNRecommendation(plantingId: number, event: IFertilizationEvent):\r\n\t\tPromise<IFertilizationEventGetRecommendationModel> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tparams = new HttpParams();\r\n\r\n\t\tif (event.SoilSampleEventDate) {\r\n\t\t\tparams = params.set('soilSampleEventDate', DateUtility.ConvertToUTC(event.SoilSampleEventDate).toISOString());\r\n\t\t}\r\n\r\n\t\tif (event.DaysToNextFertilization || event.DaysToNextFertilization === 0) {\r\n\t\t\tparams = params.set('daysToNextFertilization', event.DaysToNextFertilization.toString());\r\n\t\t}\r\n\r\n\t\tif (event.FertilizationsPerMonth || event.FertilizationsPerMonth === 0) {\r\n\t\t\tparams = params.set('fertilizationsPerMonth', event.FertilizationsPerMonth.toString());\r\n\t\t}\r\n\r\n\t\tif (event.NAppliedFromWater || event.NAppliedFromWater === 0) {\r\n\t\t\tparams = params.set('nInWater', event.NAppliedFromWater.toString());\r\n\t\t}\r\n\r\n\t\tif (event.EventDate) {\r\n\t\t\tparams = params.set('eventDate', DateUtility.ConvertToUTC(event.EventDate).toISOString());\r\n\t\t}\r\n\r\n\t\tif (event.Id) {\r\n\t\t\tparams = params.set('eventId', event.Id.toString());\r\n\t\t}\r\n\r\n\t\treturn this.get(\r\n\t\t\tthis._urls.recommendation.amount(plantingId),\r\n\t\t\t(r: IFertilizationEventGetRecommendationModelJSON): IFertilizationEventGetRecommendationModel => {\r\n\t\t\t\tlet result: IFertilizationEventGetRecommendationModel;\r\n\r\n\t\t\t\tresult = {\r\n\t\t\t\t\tPreviousIrrigationEventDate: DateUtility.DotNetToDate(r.PreviousIrrigationEventDate),\r\n\t\t\t\t\tNFertilizationRecommended: r.NFertilizationRecommended,\r\n\t\t\t\t\tSuccess: r.Success,\r\n\t\t\t\t\tLastIrrigationMethodId: r.LastIrrigationMethodId,\r\n\t\t\t\t\tIrrigationUnitConversionRatio: r.IrrigationUnitConversionRatio\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (event.NAppliedFromWater === null) {\r\n\t\t\t\t\tevent.ratio = r.IrrigationUnitConversionRatio;\r\n\t\t\t\t\tevent.IrrigationMethodId = r.LastIrrigationMethodId;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\t\t\tparams\r\n\t\t);\r\n\t}\r\n}\r\n","\r\n<form *ngIf=\"soilSampleForm\" [formGroup]=\"soilSampleForm\">\r\n\t<div class=\"bk-modal-section__new-soil-sample\">\r\n\t\t<h4 class=\"bk-new-soil-sample__title\">\r\n\t\t\t{{'New Soil Sample' | translate}}\r\n\t\t</h4>\r\n\t\t<mat-form-field appearance=\"fill\"\r\n\t\t\tclass='mat-form-field--one-line mat-form-field--short'>\r\n\t\t\t<mat-label>{{ 'Event Date' | translate }}</mat-label>\r\n\t\t\t<input matInput [matDatepicker]=\"picker\"\r\n\t\t\t\trequired\r\n\t\t\t\tformControlName=\"EventDate\">\r\n\t\t\t<mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n\t\t\t<mat-datepicker #picker></mat-datepicker>\r\n\t\t\t<mat-error *ngIf=\"fs.EventDate.invalid && (fs.EventDate.dirty ||\r\n\t\t\t\tfs.EventDate.touched)\">\r\n\t\t\t\t{{'Soil sample event date must be on or before\r\n\t\t\t\tfertilization event date' | translate }}\r\n\t\t\t</mat-error>\r\n\t\t</mat-form-field>\r\n\r\n\t\t<label class=\"bk-modal__label\">\r\n\t\t\t{{'Soil Moisture' | translate }}\r\n\t\t</label>\r\n\t\t<mat-radio-group\r\n\t\t\taria-label=\"\"\r\n\t\t\tname=\"soilMoisture\"\r\n\t\t\tformControlName=\"SoilMoistureId\">\r\n\r\n\t\t\t<mat-radio-button [value]=\"1\"\r\n\t\t\t\tname=\"soilMoisture\">\r\n\t\t\t\t{{'Dry' | translate}}\r\n\t\t\t</mat-radio-button>\r\n\t\t\t<mat-radio-button class=\"mat-radio-button--left-margin\"\r\n\t\t\t\t[value]=\"2\"\r\n\t\t\t\tname=\"soilMoisture\">\r\n\t\t\t\t{{'Moist' | translate}}\r\n\t\t\t</mat-radio-button>\r\n\t\t</mat-radio-group>\r\n\r\n\t\t<p>Soil sample depth defaults to 0 to 1 feet when you create\r\n\t\t\tan soil sample event using this interface.\r\n\t\t</p>\r\n\r\n\t\t<ng-container *ngIf=\"!soilSampleEventDateIsFuture\">\r\n\t\t\t<mat-form-field appearance=\"fill\"\r\n\t\t\t\tclass=\"mat-form-field--one-line mat-form-field--short\"\r\n\t\t\t\thintLabel=\"{{'Strip Nitrate Value' | translate}}\">\r\n\t\t\t\t<mat-label>\r\n\t\t\t\t\t{{'Sample Reading' | translate}}\r\n\t\t\t\t</mat-label>\r\n\t\t\t\t<input matInput\r\n\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\tstep=\"0.01\"\r\n\t\t\t\t\trequired\r\n\t\t\t\t\tname=\"Nitrogen\"\r\n\t\t\t\t\tformControlName=\"Nitrogen\"/>\r\n\t\t\t\t<span matSuffix class=\"mat-form-field-suffix--padded\">\r\n\t\t\t\t\t{{'ppm' | translate}}\r\n\t\t\t\t</span>\r\n\t\t\t</mat-form-field>\r\n\t\t</ng-container>\r\n\r\n\t\t<div class=\"bk-modal-section__footer\">\r\n\t\t\t<button class=\"bk-button bk-button--medium bk-button--gray-outline bk-button--margin-right\"\r\n\t\t\t\t(click)=\"cancelAddingSoilSample($event)\">\r\n\t\t\t\t{{'Cancel' | translate }}\r\n\t\t\t</button>\r\n\t\t\t<button class=\"bk-button bk-button--medium\"\r\n\t\t\t\t(click)=\"addSoilSample()\"\r\n\t\t\t\t[disabled]=\"soilSampleForm.invalid\">\r\n\t\t\t\t{{'Add' | translate}}\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n</form>","import { Component, Input, OnInit, Output, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { FormBuilder, ValidatorFn, Validators } from '@angular/forms';\r\nimport { IEventPostResponseJSON } from '../../models/event/interfaces';\r\nimport { IRawSoilSample } from '../soil-sample-event/interfaces';\r\nimport { SoilSampleEventService } from '../soil-sample-event/service';\r\nimport * as moment from 'moment';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { eSampleTypeIds } from '../../interfaces/constants';\r\nimport { eSoilMoistures, eSoilSampleDepths } from '../soil-sample-event/main';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ISoilSampleEmitted } from './interfaces';\r\nimport { Subject } from 'rxjs';\r\n\r\nexport type SoilSampleFields = 'SoilMoistureId' | 'SampleDepth' | 'SampleTypeId' |\r\n\t'Nitrogen' | 'CropStageId' | 'EventDate';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'soil-sample-ui',\r\n\ttemplateUrl: 'soil-sample.html',\r\n\tstyleUrls: [ 'soil-sample.scss' ]\r\n})\r\n\r\nexport class FertilizationSoilSampleComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic soilSampleEventDateIsFuture: boolean; // true if soil sample event date\r\n\tpublic soilSampleForm: FormGroup;\r\n\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tprivate readonly NO_SOIL_SAMPLE = -2;\r\n\r\n\t@Input() public eventDate: Date;\r\n\t@Input() public cropStageId: number;\r\n\t@Input() public plantingId: number;\r\n\r\n\t@Output() public onSoilSampleAdded: EventEmitter<ISoilSampleEmitted> = new EventEmitter<ISoilSampleEmitted>();\r\n\r\n\tpublic get fs(): { [key in SoilSampleFields]: AbstractControl } {\r\n\t\tif (!this.soilSampleForm) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn this.soilSampleForm.controls as { [key in SoilSampleFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate soilSampleEventService: SoilSampleEventService\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._initializeSoilSampleForm(this.eventDate, this.cropStageId);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic addSoilSample(): void {\r\n\r\n\t\tthis.soilSampleEventService.createForFertilizationEvent(this.plantingId, this.soilSampleForm.value)\r\n\t\t.then((response: IEventPostResponseJSON) => {\r\n\t\t\tif (!response) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (response.Events && response.Events.length > 0 && response.Events[0]) {\r\n\t\t\t\tlet firstSample: IRawSoilSample;\r\n\r\n\t\t\t\tfirstSample = this._findFirstSoilSampleFromList(response.Events[0].SoilSamples);\r\n\r\n\t\t\t\tthis.onSoilSampleAdded.emit({\r\n\t\t\t\t\tId: firstSample.Id,\r\n\t\t\t\t\tEventDate: this.fs.EventDate.value,\r\n\t\t\t\t\tResponse: response\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic cancelAddingSoilSample(e: MouseEvent): void {\r\n\t\tif (!this.fs) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.onSoilSampleAdded.emit({\r\n\t\t\tId: this.NO_SOIL_SAMPLE,\r\n\t\t\tEventDate: new Date(),\r\n\t\t\tResponse: null\r\n\t\t});\r\n\r\n\t\t// this.fs.SampleDepth.setValue(1);\r\n\t\t// this.fs.SoilMoistureId.setValue(eSoilMoistures.MOIST);\r\n\t\t// this.fs.Nitrogen.setValue(null);\r\n\t\t// this.soilSampleForm.markAsUntouched();\r\n\r\n\t\tif (e !== null) {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _findFirstSoilSampleFromList(soilSamples: IRawSoilSample[]): IRawSoilSample {\r\n\r\n\t\tlet sortedSamples: IRawSoilSample[];\r\n\r\n\t\tif (!soilSamples || soilSamples.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t// sort soil samples by Id\r\n\t\tsortedSamples = soilSamples.sort((a, b): number => {\r\n\t\t\tif (a.Id < b.Id) {\r\n\t\t\t\treturn -1;\r\n\t\t\t} else if (a.Id > b.Id) {\r\n\t\t\t\treturn 1;\r\n\t\t\t} else {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\treturn sortedSamples[0];\r\n\t}\r\n\r\n\tprivate _nitrogenRequiredIfNotFuture(eventDateIsFuture: boolean): void {\r\n\t\tif (eventDateIsFuture) {\r\n\t\t\tthis.fs.Nitrogen.clearValidators();\r\n\t\t\tthis.fs.Nitrogen.updateValueAndValidity();\r\n\t\t} else {\r\n\t\t\tthis.fs.Nitrogen.setValidators(Validators.required);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _initializeSoilSampleForm(eventDate: Date, cropStageId: number): void {\r\n\t\tthis.soilSampleForm = this._fb.group({\r\n\t\t\tEventDate: [eventDate, [Validators.required,\r\n\t\t\t\tthis._soilSampleDateValidator(eventDate)]],\r\n\t\t\tSampleTypeId: [eSampleTypeIds.QUICK_NITRATE_STRIP, Validators.required],\r\n\t\t\tSampleDepth: [eSoilSampleDepths.FEET_ONE, Validators.required],\r\n\t\t\tNitrogen: [null],\r\n\t\t\tSoilMoistureId: [eSoilMoistures.MOIST, Validators.required],\r\n\t\t\tCropStageId: [cropStageId]\r\n\t\t});\r\n\r\n\t\tthis.soilSampleEventDateIsFuture = DateUtility.isFuture(this.fs.EventDate.value);\r\n\t\tthis._nitrogenRequiredIfNotFuture(this.soilSampleEventDateIsFuture);\r\n\r\n\t\tthis.fs.EventDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.soilSampleEventDateIsFuture = DateUtility.isFuture(this.fs.EventDate.value);\r\n\t\t\tthis._nitrogenRequiredIfNotFuture(this.soilSampleEventDateIsFuture);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _soilSampleDateValidator(eventDate: Date): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (!eventDate) {\r\n\t\t\t\tvalid = true;\r\n\t\t\t} else {\r\n\t\t\t\tvalid = control.value ? moment(eventDate).isSameOrAfter(control.value) : false;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'dateOnOrAfterFertilizationEventDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n}\r\n","<table class=\"bk-event__table bk-flowmeter\">\r\n\t<thead>\r\n\t\t<tr>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Date and Time' | translate }}</td>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Average Flow Rate' | translate }} ({{'gpm' | translate }})</td>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Cumulative Gallons' | translate }}</td>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Applied Flowmeter Water' | translate }} ({{'in' | translate }})</td>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Application Rate' | translate }} ({{'in/hr' | translate }})</td>\r\n\t\t</tr>\r\n\t</thead>\r\n\t<tbody>\r\n\t\t<tr *ngFor=\"let data of flowmeterData\">\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.DateAndTime}}</td>\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.AvgFlow || data.AvgFlow}}</td>\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.Gallons || data.Gallons}}</td>\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.Applied || data.Applied}}</td>\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.AppRate || data.AppRate}}</td>\r\n\t\t</tr>\r\n\t</tbody>\r\n</table>","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { IFlowWateringViewModel } from '../interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'flowmeter-details-table',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class FlowmeterDetailsTableComponent implements OnInit, OnChanges {\r\n\t@Input()\r\n\tpublic flowmeterData: IFlowWateringViewModel[];\r\n\r\n\tconstructor() { }\r\n\r\n\tngOnInit(): void {\r\n\r\n\t}\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t}\r\n}\r\n\r\n","import { ValidateService } from '../../services/validate.service';\r\n\r\nimport { IIrrigationEvent } from '../irrigation-event/interfaces';\r\nimport { IFlowMeterChartModel } from './interfaces';\r\nimport { FlowmeterService } from './service';\r\nimport { HighChartsService } from '../../classes/highCharts.service';\r\nimport { ElementRef } from '@angular/core';\r\nimport { IHighChartCustomSeries } from '../available-water-chart/interfaces';\r\n\r\n/// <reference path=\"@types/jquery/index.d.ts\"/>\r\n/// <reference path=\"jquery.plot.d.ts\"/>\r\n\r\nexport interface FlowmeterCache {\r\n\tsummary: IFlowMeterChartModel[],\r\n\tdetails: IFlowMeterChartModel[]\r\n};\r\n\r\nexport enum chartTypes {\r\n\tsummary = 1,\r\n\tdetail\r\n};\r\n\r\nexport enum highChartGraphTypes {\r\n\tline = 'line',\r\n\tcolumn = 'column'\r\n}\r\n\r\nexport class FlowMeter {\r\n\r\n\t// public isSummary = true; // true by default\r\n\tpublic chartType = chartTypes.summary;\r\n\r\n\tpublic static getFlowmeterWaterApplied(irrigationEvent: IIrrigationEvent, decimals = 2): number {\r\n\t\tlet gallons: number;\r\n\t\tlet area: number;\r\n\r\n\t\tif (!irrigationEvent || !irrigationEvent.FlowMeterGallons) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tgallons = irrigationEvent.FlowMeterGallons ? irrigationEvent.FlowMeterGallons : null;\r\n\r\n\t\tarea = irrigationEvent.FlowMeterArea ? irrigationEvent.FlowMeterArea : null;\r\n\r\n\t\tif (!gallons || !area) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn ValidateService.roundToDecimalPlaces(((gallons * 0.0000368265993) / area), decimals);\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _flowmeterService: FlowmeterService,\r\n\t\tchartType: chartTypes = chartTypes.summary) {\r\n\r\n\t\tthis.chartType = chartType;\r\n\t}\r\n\r\n\tprivate _convertToGraphData(records: IFlowMeterChartModel, graphyType: highChartGraphTypes =\r\n\t\thighChartGraphTypes.column): Highcharts.IndividualSeriesOptions[] {\r\n\r\n\t\tlet result: Highcharts.IndividualSeriesOptions[];\r\n\r\n\t\tlet temp: {\r\n\t\t\tdata: IHighChartCustomSeries\r\n\t\t};\r\n\r\n\t\tresult = [];\r\n\r\n\t\tif (!records || !records.Data || records.Data.length === 0) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\ttemp = {\r\n\t\t\tdata: {\r\n\t\t\t\tname: 'GPM',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttype: graphyType,\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueSuffix: '',\r\n\t\t\t\t\tvalueDecimals: 0\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < records.Data.length; i++) {\r\n\t\t\tlet item: [number, number];\r\n\r\n\t\t\titem = [Date.parse(records.Data[i][0]), records.Data[i][1]];\r\n\r\n\t\t\tif (records.Data[i][1] > 0) {\r\n\t\t\t\ttemp.data.data.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult.push(temp.data);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _onDateReceived(series: IFlowMeterChartModel, container: ElementRef, graphyType: highChartGraphTypes): void {\r\n\r\n\t\tlet chartData: Highcharts.IndividualSeriesOptions[];\r\n\r\n\t\tchartData = this._convertToGraphData(series, graphyType);\r\n\r\n\t\tHighChartsService.drawGraph(container, chartData,\r\n\t\t\t[{\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: 'gpm'\r\n\t\t\t\t}\r\n\t\t\t}]\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * For summary, use plantingId, else use WateringId. For Detail view, startDate and EndDate are optional\r\n\t *\r\n\t * @param id\r\n\t * @param $dom\r\n\t * @param StartDate\r\n\t * @param EndDate\r\n\t */\r\n\tpublic Initialize(id: number, container: ElementRef, startDate?: Date, endDate?: Date): Promise<void> {\r\n\r\n\t\tswitch (this.chartType) {\r\n\r\n\t\t\tcase chartTypes.summary:\r\n\r\n\t\t\t\treturn this._flowmeterService.getChart(id).then((response) => {\r\n\t\t\t\t\tthis._onDateReceived(response, container, highChartGraphTypes.column);\r\n\t\t\t\t});\r\n\r\n\t\t\tcase chartTypes.detail:\r\n\r\n\t\t\t\treturn this._flowmeterService.getFlowWateringDetail(id).then((response) => {\r\n\t\t\t\t\tthis._onDateReceived(response, container, highChartGraphTypes.line);\r\n\t\t\t\t});\r\n\t\t}\r\n\t};\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { RainfallChartUpdateService } from '../rainfall-chart/rainfall-chart.update.service';\r\n\r\n@Injectable()\r\nexport class FlowmeterChartUpdateService extends RainfallChartUpdateService {\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\r\n    <button type=\"button\"\r\n        class=\"bk-dialog__close\"\r\n        (click)=\"cancel()\">\r\n\r\n        &times;\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>\r\n        {{ 'Flowmeter Settings' | translate }}\r\n    </h4>\r\n\r\n    <div at-dialog-content>\r\n\t\t<form *ngIf=\"form\"\r\n\t\t\t[formGroup]=\"form\">\r\n\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'File Name' | translate }} ({{'Optional' | translate}})\r\n\t\t\t</label>\r\n\t\t\t<input class=\"bk-modal__field bk-input--full\"\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tformControlName=\"FlowMeterFileName\"/>\r\n\t\t\t<div *ngIf=\"f.FlowMeterFileName.invalid && (f.FlowMeterFileName.dirty\r\n\t\t\t\t|| f.FlowMeterFileName.touched)\"\r\n\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t<span *ngIf=\"f.FlowMeterFileName.errors.required\">\r\n\t\t\t\t\t{{ 'Flowmeter filename is required' | translate}}.\r\n\t\t\t\t</span>\r\n\t\t\t\t<span *ngIf=\"f.FlowMeterFileName.errors.fileDoesNotExist\">\r\n\t\t\t\t\t{{'Flowmeter filename not found on remote server' | translate }}.\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"bk-modal__field-help\">\r\n\t\t\t\t{{'Flow Meter File Text' | translate}}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<div *ngIf=\"requiredMethods.sprinkler\" \r\n\t\t\t\t\tclass=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Sprinkler Flowmeter Area' | translate }} \r\n\t\t\t\t\t\t<info-icon [title]=\"'Sprinkler Flowmeter Area Help Text'\"></info-icon>\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tstep=\"0.01\"\r\n\t\t\t\t\t\tformControlName=\"FlowMeterArea\"/>\r\n\t\t\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t\t\t{{'acres' | translate}}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"f.FlowMeterArea.invalid && (f.FlowMeterArea.dirty || f.FlowMeterArea.touched)\"\r\n\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t{{'Sprinkler Flowmeter Area must be between 0.01 and 999.99.' | translate }}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Applied Water Threshold for Sprinkler Flowmeter' | translate }} \r\n\t\t\t\t\t\t<info-icon [title]=\"'Applied Water Threshold for Sprinkler Flowmeter Help Text'\"></info-icon>\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tstep=\"0.01\"\r\n\t\t\t\t\t\tformControlName=\"FlowMeterThresholdSprinkler\"/>\r\n\t\t\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t\t\t{{'inches' | translate}}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"f.FlowMeterThresholdSprinkler.invalid && (f.FlowMeterThresholdSprinkler.dirty\r\n\t\t\t\t\t\t|| f.FlowMeterThresholdSprinkler.touched)\"\r\n\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t{{'Number must be between 0.01 and 9.99.' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div *ngIf=\"requiredMethods.drip\"\r\n\t\t\t\t\tclass=\"bk-modal__right-two-col\">\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Drip Flowmeter Area' | translate }} \r\n\t\t\t\t\t\t<info-icon [title]=\"'Drip Flowmeter Area Help Text'\"></info-icon>\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n\t\t\t\t\t\ttype=\"number\" step=\"0.01\"\r\n\t\t\t\t\t\tformControlName=\"DripFlowMeterArea\"/>\r\n\t\t\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t\t\t{{'acres' | translate}}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"f.DripFlowMeterArea.invalid && (f.DripFlowMeterArea.dirty\r\n\t\t\t\t\t\t|| f.DripFlowMeterArea.touched)\"\r\n\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t{{'Drip Flowmeter Area must be between 0.01 and 999.99.' | translate }}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Applied Water Threshold for Drip Flowmeter' | translate }} \r\n\t\t\t\t\t\t<info-icon [title]=\"'Applied Water Threshold for Drip Flowmeter Help Text'\"></info-icon>\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n\t\t\t\t\t\ttype=\"number\" step=\"0.01\"\r\n\t\t\t\t\t\tformControlName=\"FlowMeterThresholdDrip\"/>\r\n\t\t\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t\t\t{{'inches' | translate}}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"f.FlowMeterThresholdDrip.invalid && (f.FlowMeterThresholdDrip.dirty\r\n\t\t\t\t\t\t|| f.FlowMeterThresholdDrip.touched)\"\r\n\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t{{'Drip Flowmeter Threshold must be between 0.01 and 999.99.' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t\r\n\t\t\t\t<div *ngIf='requiredMethods.microSprinkler'\r\n\t\t\t\t\tclass=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Micro Sprinkler Flowmeter Area' | translate }} \r\n\t\t\t\t\t\t<info-icon [title]=\"'Micro Sprinkler Flowmeter Area Help Text'\"></info-icon>\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n\t\t\t\t\t\ttype=\"number\" step=\"0.01\"\r\n\t\t\t\t\t\tformControlName=\"MicroSprinklerFlowMeterArea\"/>\r\n\t\t\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t\t\t{{'acres' | translate}}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"f.MicroSprinklerFlowMeterArea.invalid && (f.MicroSprinklerFlowMeterArea.dirty\r\n\t\t\t\t\t\t|| f.MicroSprinklerFlowMeterArea.touched)\"\r\n\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t{{'Micro Sprinkler Flowmeter Area must be between 0.01 and 999.99.' | translate }}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t\t\t{{'Applied Water Threshold for Micro Sprinkler Flowmeter' | translate }} \r\n\t\t\t\t\t\t<info-icon [title]=\"'Micro Applied Water Threshold for Sprinkler Flowmeter Help Text'\"></info-icon>\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tstep=\"0.01\"\r\n\t\t\t\t\t\tformControlName=\"FlowMeterThresholdMicroSprinkler\"/>\r\n\t\t\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t\t\t{{'inches' | translate}}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"f.FlowMeterThresholdMicroSprinkler.invalid &&\r\n\t\t\t\t\t\t(f.FlowMeterThresholdMicroSprinkler.dirty\r\n\t\t\t\t\t\t|| f.FlowMeterThresholdMicroSprinkler.touched)\"\r\n\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t{{'Number must be between 0.01 and 9.99.' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Initial Irrigation Method' | translate }}\r\n\t\t\t</label>\r\n\t\t\t<ng-container *ngIf=\"irrigationMethodOptions.length === 1\">\r\n\t\t\t\t{{ irrigationMethodOptions[0].Text | translate }}\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container *ngIf=\"irrigationMethodOptions.length > 1\">\r\n\t\t\t\t<p>\r\n\t\t\t\t\t{{'Initial Irrigation Method Explanation' | translate}}\r\n\t\t\t\t</p>\r\n\t\t\t\t<mat-form-field  appearance=\"outline\"\r\n\t\t\t\t\tclass=\"cm-outline-input mat-form-field--one-line mat-form-field--short\">\r\n\t\t\t\t\t<mat-select\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t\tformControlName=\"FlowmeterIrrigationMethodId\">\r\n\r\n\t\t\t\t\t\t<mat-option *ngFor=\"let option of irrigationMethodOptions\"\r\n\t\t\t\t\t\t\t[value]=\"option.Id\">\r\n\t\t\t\t\t\t\t{{ option.Text | translate }}\r\n\t\t\t\t\t\t</mat-option>\r\n\r\n\t\t\t\t\t</mat-select>\r\n\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t</ng-container>\r\n\t\t</form>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\" class=\"bk-clearfix\">\r\n\r\n        <button mat-button\r\n\t\t\tclass=\"bk-button bk-button--medium bk-button--text-only\r\n\t\t\t\tbk-dialog__button--secondary\"\r\n            (click)=\"cancel()\">\r\n            {{ 'Cancel' | translate }}\r\n        </button>\r\n\r\n\t\t<button mat-button\r\n\t\t\t[disabled]=\"!form || form.invalid\"\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"save()\">\r\n            {{ (isSaving ? 'Saving' : 'Save') | translate }}\r\n            <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n        </button>\r\n    </div>\r\n</div>","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { from, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { FormBuilder, Validators, ValidatorFn, FormGroup, AsyncValidatorFn } from '@angular/forms';\r\nimport { trigger, transition, style, animate } from '@angular/animations';\r\nimport { FlowmeterChartUpdateService } from './flowmeter-chart.update.service';\r\nimport { FlowmeterSettings } from './interfaces';\r\nimport { FlowmeterService } from './service';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { eIrrigationMethods, eNotificationTypes } from '../../interfaces/constants';\r\n\r\nexport type FlowmeterSettingFields = 'FlowMeterFileName' | 'FlowMeterArea' |\r\n\t'FlowMeterThresholdSprinkler' |'DripFlowMeterArea' | 'FlowMeterThresholdDrip' |\r\n\t'MicroSprinklerFlowMeterArea' | 'FlowMeterThresholdMicroSprinkler';\r\n\r\nexport interface IFlowmeterMethodSetting {\r\n\tarea: AbstractControl,\r\n\tthreshold: AbstractControl\r\n};\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'flowmeter-settings',\r\n\ttemplateUrl: 'flowmeter-settings.html',\r\n\tanimations: [\r\n\t\ttrigger('slideInOut', [ // animation for showing/hiding Cover UI\r\n\t\t\ttransition(':enter', [\r\n\t\t\t\tstyle({ 'height': '0px', opacity: 0 }),\r\n\t\t\t\tanimate('2000ms ease-in-out', style({ 'height': '*', opacity: 1 }))\r\n\t\t\t]),\r\n\t\t\ttransition(':leave', [\r\n\t\t\t\tanimate('2000ms ease-in-out', style({ 'height': '0px', opacity: 0 }))\r\n\t\t\t])\r\n\t\t])\r\n\t]\r\n})\r\n\r\nexport class FlowmeterSettingsComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic IRRIGATION_METHODS = eIrrigationMethods;\r\n\tpublic isLoaded = false;\r\n\tpublic isSaving = false;\r\n\r\n\tpublic requiredMethods: {\r\n\t\tsprinkler: boolean,\r\n\t\tdrip: boolean,\r\n\t\tmicroSprinkler: boolean\r\n\t};\r\n\r\n\tpublic irrigationMethodOptions: {\r\n\t\tText: string,\r\n\t\tId: number\r\n\t}[];\r\n\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tpublic form: FormGroup;\r\n\tpublic isTree: boolean;\r\n\tprivate _plantingId: number;\r\n\tprivate _settings: FlowmeterSettings;\r\n\r\n\tpublic get f(): { [key in FlowmeterSettingFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in FlowmeterSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tpublic dialogRef: MatDialogRef<FlowmeterSettingsComponent>,\r\n\t\tprivate _flowmeterService: FlowmeterService,\r\n\t\tprivate _flowmeterChartUpdateService: FlowmeterChartUpdateService,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { lotPlantingId: number },\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._plantingId = this._data.lotPlantingId;\r\n\r\n\t\t// custom click outside behavior\r\n\t\tthis.dialogRef.disableClose = true;\r\n\r\n\t\tthis.dialogRef.backdropClick().pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._close();\r\n\t\t});\r\n\r\n\t\tthis._flowmeterService.getSettings(this._plantingId).then((response) => {\r\n\t\t\tif (!response) {\r\n\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\tmessage: 'Flow meter settings for this planting could not be retrieved'\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthrow new Error('flowmeter settings could not be retrieved');\r\n\t\t\t}\r\n\r\n\t\t\tthis._settings = response;\r\n\t\t\tthis.isTree = this._settings.IsTree;\r\n\r\n\t\t\tthis._initializeIrrigationMethods();\r\n\t\t\tthis._initializeForm(this._settings);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _initializeIrrigationMethods(): void {\r\n\t\tthis.irrigationMethodOptions = [];\r\n\r\n\t\tthis.requiredMethods = {\r\n\t\t\tsprinkler: false,\r\n\t\t\tdrip: false,\r\n\t\t\tmicroSprinkler: false\r\n\t\t};\r\n\r\n\t\tif (this._settings.CustomIrrigationMethods.find(x => x === eIrrigationMethods.SPRINKLER)) {\r\n\t\t\tthis.irrigationMethodOptions.push({ Text: 'Sprinkler', Id: eIrrigationMethods.SPRINKLER });\r\n\t\t\tthis.requiredMethods.sprinkler = true;\r\n\t\t}\r\n\r\n\t\tif (this._settings.CustomIrrigationMethods.find(x => x === eIrrigationMethods.DRIP)) {\r\n\t\t\tthis.irrigationMethodOptions.push({ Text: 'Drip', Id: eIrrigationMethods.DRIP });\r\n\t\t\tthis.requiredMethods.drip = true;\r\n\t\t}\r\n\r\n\t\tif (this._settings.CustomIrrigationMethods.find(x => x === eIrrigationMethods.MICRO_SPRINKLER)) {\r\n\t\t\tthis.irrigationMethodOptions.push({ Text: 'Micro Sprinkler', Id: eIrrigationMethods.MICRO_SPRINKLER });\r\n\t\t\tthis.requiredMethods.microSprinkler = true;\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic cancel(): void {\r\n\t\tthis._close();\r\n\t}\r\n\r\n\tprivate _close(): void {\r\n\t\tthis.dialogRef.close();\r\n\t\tthis._flowmeterChartUpdateService.dialogClosed();\r\n\t}\r\n\r\n\tpublic save(): void {\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tObject.assign(this._settings, this.form.value);\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._flowmeterService.saveSettings(this._plantingId, this._settings).then(() => {\r\n\t\t\tthis.isSaving = false;\r\n\t\t\tthis._close();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _initializeForm(settings: FlowmeterSettings): void {\r\n\r\n\t\tlet validators: {\r\n\t\t\tarea: ValidatorFn[],\r\n\t\t\tthreshold: ValidatorFn[]\r\n\t\t};\r\n\r\n\t\tlet flowmeterIrrigationMethodId: number;\r\n\r\n\t\tif (settings.FlowmeterIrrigationMethodId) {\r\n\t\t\tflowmeterIrrigationMethodId = settings.FlowmeterIrrigationMethodId;\r\n\t\t} else if (this.irrigationMethodOptions.length === 1) {\r\n\t\t\tflowmeterIrrigationMethodId = this.irrigationMethodOptions[0].Id;\r\n\t\t} else {\r\n\t\t\tflowmeterIrrigationMethodId = null;\r\n\t\t}\r\n\r\n\t\tvalidators = {\r\n\t\t\tthreshold: [Validators.min(0.01), Validators.max(999.99)],\r\n\t\t\tarea: [Validators.min(0.01), Validators.max(999.99)]\r\n\t\t};\r\n\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tFlowMeterFileName: [settings.FlowMeterFileName, {updateOn: 'blur'}],\r\n\t\t\tFlowMeterArea: [settings.FlowMeterArea, this.requiredMethods.sprinkler ? validators.area : null],\r\n\t\t\tFlowMeterThresholdSprinkler: [settings.FlowMeterThresholdSprinkler,\r\n\t\t\t\tthis.requiredMethods.sprinkler ? validators.threshold : null],\r\n\t\t\tDripFlowMeterArea: [settings.DripFlowMeterArea,\r\n\t\t\t\tthis.requiredMethods.drip ? validators.area : null],\r\n\t\t\tFlowMeterThresholdDrip: [settings.FlowMeterThresholdDrip,\r\n\t\t\t\tthis.requiredMethods.drip ? validators.threshold : null],\r\n\t\t\tMicroSprinklerFlowMeterArea: [settings.MicroSprinklerFlowMeterArea,\r\n\t\t\t\tthis.requiredMethods.microSprinkler ? validators.area : null],\r\n\t\t\tFlowMeterThresholdMicroSprinkler: [settings.FlowMeterThresholdMicroSprinkler,\r\n\t\t\t\tthis.requiredMethods.microSprinkler ? validators.threshold : null],\r\n\t\t\tFlowmeterIrrigationMethodId: [flowmeterIrrigationMethodId, Validators.required ]\r\n\t\t});\r\n\r\n\t\tthis.f.FlowMeterFileName.setValidators(Validators.required);\r\n\t\tthis.f.FlowMeterFileName.setAsyncValidators(this._validateFileName());\r\n\t}\r\n\r\n\tprivate _validateFileName(): AsyncValidatorFn {\r\n\t\treturn (control: AbstractControl): Observable<{[key: string]: any} | null> => {\r\n\r\n\t\t\treturn from(this._flowmeterService.isFilenameValid(control.value).then((resp) => {\r\n\t\t\t\treturn resp ? null : {'fileDoesNotExist': {value: control.value}};\r\n\t\t\t}));\r\n\t\t};\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\r\n    <button type=\"button\"\r\n        class=\"bk-dialog__close\"\r\n        (click)=\"close()\">\r\n        <span>&times;</span>\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>\r\n        {{plantingName}} -\r\n        <span *ngIf=\"this.flowmeter.chartType === chartTypes.summary\">\r\n            {{'Flowmeter Data' | translate }}\r\n        </span>\r\n        <span *ngIf=\"this.flowmeter.chartType === chartTypes.detail\">\r\n            {{'Flowmeter Data Details' | translate }}\r\n        </span>\r\n    </h4>\r\n\r\n    <div mat-dialog-content\r\n        class=\"bk-modal__flowmeter-body\">\r\n\r\n        <div class=\"flot-chart dashboard-chart\"\r\n            [class.bk-flowmeter__loader-container]=\"loadingGraph\">\r\n\r\n            <div class=\"bk-chart\" #highchartsContainer></div>\r\n\r\n            <div class=\"flot-chart-content\"\r\n                id=\"flot-dashboard-chart\"\r\n                #hiddenHandle\r\n                [hidden]=\"loadingGraph\">\r\n            </div>\r\n\r\n            <div class=\"bk-loader\"\r\n                *ngIf=\"loadingGraph\">\r\n                {{'Loading' | translate }}...\r\n            </div>\r\n        </div>\r\n\r\n        <button class=\"bk-button bk-flowmeter__button\"\r\n            *ngIf=\"this.flowmeter.chartType === chartTypes.detail\"\r\n            (click)=\"goBackToSummary()\">\r\n\r\n            <i class=\"fa fa-arrow-left bk-flowmeter__icon\"\r\n                aria-hidden=\"true\">\r\n            </i>\r\n            Back to Summary\r\n        </button>\r\n\r\n        <ng-container *ngIf=\"this.flowmeter.chartType === chartTypes.summary\">\r\n            <flowmeter-summary-table\r\n                (detailLoaded)=\"loadFlowmeterDetails($event)\"\r\n                [flowmeterData]=\"flowmeterSummary\">\r\n            </flowmeter-summary-table>\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"this.flowmeter.chartType !== chartTypes.summary\">\r\n            <flowmeter-details-table\r\n                [flowmeterData]=\"flowmeterData\">\r\n            </flowmeter-details-table>\r\n        </ng-container>\r\n    </div>\r\n    <div mat-dialog-actions align=\"end\">\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"openSettings()\">\r\n            {{ 'Settings' | translate }}\r\n        </button>\r\n    </div>\r\n</div>\r\n\r\n<ng-container *ngIf=\"plantingId\">\r\n    <input type=\"hidden\" id=\"plantingId\" [(ngModel)]=\"plantingId\" />\r\n    <input type=\"hidden\" id=\"startDate\" [(ngModel)]=\"startDate\" />\r\n    <input type=\"hidden\" id=\"endDate\" [(ngModel)]=\"endDate\" />\r\n</ng-container>\r\n","import { Component, ViewChild, OnInit, EventEmitter, Output, ElementRef, Inject, AfterViewInit, OnDestroy } from '@angular/core';\r\n\r\nimport { FlowMeter, chartTypes } from './flowMeter';\r\nimport { FlowmeterService } from './service';\r\nimport { CMError } from '../../interfaces/interfaces';\r\nimport { IFlowWateringViewModel, IFlowmeterSummaryViewModel } from './interfaces';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { FlowmeterSettingsComponent } from './flowmeter-settings';\r\nimport { FlowmeterChartUpdateService } from './flowmeter-chart.update.service';\r\n\r\ndeclare var $: JQueryStatic;\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'flowmeter-data',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class FlowmeterChartDialog implements OnInit, AfterViewInit, OnDestroy {\r\n\t@ViewChild('highchartsContainer', { static: false }) private _highchartsContainer: ElementRef;\r\n\t@ViewChild('hiddenHandle', { static: false }) public hiddenHandle: ElementRef;\r\n\t// used to grab the DOM to send it to Flots - can't just use IDs because there are multiple DOMs with the same ID\r\n\r\n\t@Output()\r\n\tonModalClosed: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n\t@Output()\r\n\tonModalOpened: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n\t// used to hide the graph from view until data is loaded\r\n\tpublic loadingGraph = true;\r\n\r\n\tpublic plantingId: number;\r\n\tpublic plantingName: string;\r\n\tpublic startDate: Date;\r\n\tpublic endDate: Date;\r\n\tpublic flowmeterData: IFlowWateringViewModel[] = new Array();\r\n\tpublic flowmeterSummary: IFlowmeterSummaryViewModel[];\r\n\tpublic flowmeter: FlowMeter;\r\n\r\n\tpublic chartTypes = chartTypes;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<FlowmeterChartDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { plantingId: number, plantingName: string, startDate: Date,\r\n\t\t\tendDate: Date, chartType: chartTypes },\r\n\t\tprivate flowmeterService: FlowmeterService,\r\n\t\tprivate flowmeterChartUpdateService: FlowmeterChartUpdateService) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.flowmeter = new FlowMeter(this.flowmeterService);\r\n\r\n\t\tif (this._data) {\r\n\t\t\tthis.plantingId = this._data.plantingId;\r\n\t\t\tthis.plantingName = this._data.plantingName;\r\n\t\t\tthis.startDate = this._data.startDate;\r\n\t\t\tthis.endDate = this._data.endDate;\r\n\t\t\tthis.flowmeter.chartType = this._data.chartType;\r\n\t\t}\r\n\r\n\t\tthis._dialogRef.backdropClick()\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(() => { // custom click outside\r\n\r\n\t\t\tthis._close();\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\t/**\r\n\t * We reference hiddenHandle after view init since its not loaded in ngOnInit\r\n\t */\r\n\tpublic ngAfterViewInit(): void {\r\n\r\n\t\tthis.loadSummary(this.plantingId);\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis._close();\r\n\t}\r\n\r\n\tprivate _close(): void {\r\n\t\tthis._dialogRef.close();\r\n\t\tthis.flowmeterChartUpdateService.dialogClosed();\r\n\t}\r\n\r\n\tpublic openSettings(): void {\r\n\t\tthis._dialogRef.close();\r\n\r\n\t\tthis._dialog.open(FlowmeterSettingsComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\twidth: '695px',\r\n\t\t\tdata: {\r\n\t\t\t\tlotPlantingId: this.plantingId,\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic loadSummary(plantingId: number): void {\r\n\r\n\t\tif (!this.hiddenHandle) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.flowmeter) {\r\n\t\t\tthrow new Error('flowmeter object not loaded');\r\n\t\t}\r\n\r\n\t\tif (!plantingId) {\r\n\t\t\tthrow new Error('plantingId is null');\r\n\t\t}\r\n\r\n\t\tthis.flowmeter.chartType = chartTypes.summary;\r\n\r\n\t\tthis._refreshGraph(plantingId);\r\n\t\tthis._getFlowmeterSummary(plantingId);\r\n\t}\r\n\r\n\t/**\r\n\t * Called by child view FlowmeterSummaryTableComponent - triggered when user clicks on a table row\r\n\t *\r\n\t * @param flowWateringId\r\n\t */\r\n\tpublic loadFlowmeterDetails(flowWateringId: number) {\r\n\r\n\t\tif (!this.hiddenHandle) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.flowmeter.chartType = chartTypes.detail;\r\n\t\tthis._refreshGraph(flowWateringId);\r\n\r\n\t\tthis._getFlowmeterDetail(flowWateringId);\r\n\t}\r\n\r\n\tpublic goBackToSummary() {\r\n\t\tthis.loadSummary(this.plantingId);\r\n\t}\r\n\r\n\t/**\r\n\t * Get flow data associated with a specific flow watering record\r\n\t *\r\n\t * @param flowWateringId\r\n\t */\r\n\tprivate _getFlowmeterDetail(flowWateringId: number): void {\r\n\r\n\t\tthis.flowmeterService.getFlowmeterDetail(flowWateringId)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tlet error: CMError;\r\n\t\t\t\tlet data: IFlowWateringViewModel[];\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\terror = res as CMError;\r\n\r\n\t\t\t\tif (error.message) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdata = res as IFlowWateringViewModel[];\r\n\r\n\t\t\t\tthis.flowmeterData = data;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _getFlowmeterSummary(id: number): void {\r\n\r\n\t\tthis.flowmeterService.getFlowmeterSummary(id)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tlet error: CMError;\r\n\t\t\t\tlet response: IFlowmeterSummaryViewModel[];\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\terror = res as CMError;\r\n\t\t\t\tresponse = res as IFlowmeterSummaryViewModel[];\r\n\r\n\t\t\t\tif (error.message) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.flowmeterSummary = response;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * @param id Warning: id can be either planting ID or flow watering ID\r\n\t * @param $dom\r\n\t */\r\n\tprivate _refreshGraph(id: number): void {\r\n\t\tthis.loadingGraph = true;\r\n\r\n\t\tthis.flowmeter.Initialize(id, this._highchartsContainer)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.loadingGraph = false;\r\n\t\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { ModelService } from '../../services/model.service';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { IFlowWateringViewModel, IFlowMeterChartModel,\r\n\tIFlowMeterPlantingListViewModel, IFlowmeterSummaryViewModel, FlowmeterSettings } from './interfaces';\r\nimport { CMError, SuccessResponse } from '../../interfaces/interfaces';\r\nimport { FlowmeterCache } from './flowMeter';\r\nimport { HttpService, HttpServicePostOptions } from '../../services/http.service';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { of } from 'rxjs';\r\nimport * as moment from 'moment';\r\nimport { IFlowMeterTableRow } from '../../modules/flowmeter/interfaces';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { ObjectUtility } from '../../classes/objectUtility';\r\n\r\n\r\n@Injectable()\r\nexport class FlowmeterService extends ModelService {\r\n\r\n\tprivate _urls = {\r\n\t\tsettings: {\r\n\t\t\tget: (plantingId: number) => `/v0/plantings/${plantingId}/flowmeter/settings.json`,\r\n\t\t\tupdate: (plantingId: number) => `/v0/plantings/${plantingId}/flowmeter/settings.json`\r\n\t\t},\r\n\t\tsummary: (plantingId: number) => `/v2/plantings/${plantingId}/flow-data/summary.json`,\r\n\t\tdetail: (flowWateringId: number) => `/v2/flow-data/${flowWateringId}.json`,\r\n\t\tchart: (plantingId: number) => `/v2/plantings/${plantingId}/flow-data/chart.json`,\r\n\t\tflowWatering: (flowWateringId: number) => `/v2/flow-waterings/${flowWateringId}.json`,\r\n\t\tfiles: `/v2/flow-data/files.json`,\r\n\t\timport: (plantingId: number) => `/v2/plantings/${plantingId}/flow-data/import.json`,\r\n\t\tisFilenameValid: `/v0/flow-data/is-filename-valid.json`,\r\n\t};\r\n\r\n\tprivate _cache: FlowmeterCache;\r\n\r\n\tconstructor(\r\n\t\tprivate _httpService: HttpService,\r\n\t\tprivate _validateService: ValidateService) {\r\n\r\n\t\tsuper(_httpService, _validateService);\r\n\r\n\t\tthis._cache = {\r\n\t\t\tsummary: null,\r\n\t\t\tdetails: new Array()\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Gets flowmeter graph data\r\n\t * @param plantingId\r\n\t */\r\n\tpublic getChart(plantingId: number): Promise<IFlowMeterChartModel> {\r\n\r\n\t\treturn this.get(this._urls.chart(plantingId),\r\n\t\t\t(json: IFlowMeterChartModel) => {\r\n\t\t\t\tif (!this._cache.summary) {\r\n\t\t\t\t\tthis._cache.summary = new Array();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._cache.summary[plantingId] = jQuery.extend(true, {}, json);\r\n\r\n\t\t\t\treturn json\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Get flow water detail data\r\n\t * @param flowWateringId\r\n\t */\r\n\tpublic getFlowWateringDetail(flowWateringId: number): Promise<IFlowMeterChartModel> {\r\n\r\n\t\tif (this._cache.details && this._cache.details[flowWateringId]) {\r\n\t\t\treturn of(this._cache.details[flowWateringId]).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.get(this._urls.flowWatering(flowWateringId),\r\n\t\t(json: IFlowMeterChartModel): IFlowMeterChartModel => {\r\n\r\n\t\t\tif (!this._cache.details) {\r\n\t\t\t\tthis._cache.details = new Array();\r\n\t\t\t}\r\n\r\n\t\t\tthis._cache.details[flowWateringId] = ObjectUtility.copy(json);\r\n\r\n\t\t\treturn json\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getFlowmeterSummary(plantingId: number): Promise<IFlowmeterSummaryViewModel[] | CMError> {\r\n\r\n\t\treturn this.get(this._urls.summary(plantingId), (data: IFlowmeterSummaryViewModel[] | CMError):\r\n\t\t\tIFlowmeterSummaryViewModel[] | CMError  => {\r\n\r\n\t\t\tif (data) {\r\n\t\t\t\treturn data;\r\n\t\t\t} else {\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tpublic getFlowmeterDetail(id: number): Promise<IFlowWateringViewModel[] | CMError> {\r\n\r\n\t\treturn this.get(this._urls.detail(id), (data: IFlowWateringViewModel[]): IFlowWateringViewModel[] => {\r\n\t\t\tif (data) {\r\n\t\t\t\treturn data;\r\n\t\t\t} else {\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getFiles(): Promise<IFlowMeterTableRow[]> {\r\n\t\treturn this.get(this._urls.files, (models: IFlowMeterPlantingListViewModel[]): IFlowMeterTableRow[] => {\r\n\t\t\tlet results: IFlowMeterTableRow[];\r\n\r\n\t\t\tresults = [];\r\n\r\n\t\t\tfor (let model of models) {\r\n\t\t\t\tresults.push({\r\n\t\t\t\t\tId: model.Id,\r\n\t\t\t\t\tRanchName: model.RanchName,\r\n\t\t\t\t\tPlantingName: model.PlantingName,\r\n\t\t\t\t\tHarvestDate: DateUtility.DotNetToDate(model.HarvestDate),\r\n\t\t\t\t\tFileName: model.FileName\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn results;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic import(plantingId: number, shouldImportAll: boolean): Promise<CMError | SuccessResponse> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this._urls.import(plantingId),\r\n\t\t\tbody: {\r\n\t\t\t\tShouldImportAll: shouldImportAll\r\n\t\t\t},\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true,\r\n\t\t}\r\n\r\n\t\treturn this.httpService.put(options);\r\n\t}\r\n\r\n\t/**\r\n\t * Check to see if the flowmeter file exists\r\n\t * @param fileName flowmeter file name\r\n\t * @returns true if the flowmeter file exists\r\n\t */\r\n\tpublic isFilenameValid(fileName: string): Promise<boolean> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams().set('fileName', '' + fileName);\r\n\r\n\t\treturn this.get(this._urls.isFilenameValid, (data: boolean): boolean => {\r\n\t\t\treturn data;\r\n\t\t}, params);\r\n\t}\r\n\r\n\t/**\r\n\t * Get flowmeter configuration settings\r\n\t * @param plantingId\r\n\t */\r\n\tpublic getSettings(plantingId: number): Promise<FlowmeterSettings> {\r\n\t\treturn this.get(\r\n\t\t\tthis._urls.settings.get(plantingId),\r\n\t\t\t(json: FlowmeterSettings) => {\r\n\t\t\t\treturn json\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Update planting with flowmeter settings\r\n\t * @param plantingId\r\n\t * @param settings\r\n\t * @returns\r\n\t */\r\n\tpublic saveSettings(plantingId: number, settings: FlowmeterSettings): Promise<void> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this._urls.settings.update(plantingId),\r\n\t\t\tbody: settings,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: false,\r\n\t\t}\r\n\r\n\t\treturn this.httpService.put(options);\r\n\t}\r\n}\r\n","<table class=\"bk-event__table bk-flowmeter\">\r\n\t<thead>\r\n\t\t<tr>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Start' | translate }}</td>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'End' | translate }}</td>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Average Flow Rate' | translate }} ({{'gpm' | translate }})</td>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Gallons' | translate }}</td>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Time' | translate }}</td>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Applied Flowmeter Water' | translate }} ({{'in' | translate }})</td>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Application Rate' | translate }} ({{'in/hr' | translate }})</td>\r\n\t\t\t<td class=\"bk-event-table__header bk-flowmeter__header\">{{'Flowmeter Area' | translate }} ({{'acres' | translate }})</td>\r\n\t\t</tr>\r\n\t</thead>\r\n\t<tbody>\r\n\t\t<tr class=\"bk-event-table__row\" *ngFor=\"let data of flowmeterData\" (click)=\"loadDetails(data.Id)\">\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.StartDate}}</td>\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.EndDate}}</td>\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.AvgFlow}}</td>\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.Gallons}}</td>\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.Time}}</td>\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.Applied}}</td>\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.AppRate}}</td>\r\n\t\t\t<td class=\"bk-event-table__cell bk-flowmeter__cell\">{{data.SprinklerArea > 0 ? data.SprinklerArea : 'N/A'}}</td>\r\n\t\t</tr>\r\n\t</tbody>\r\n</table>","import { Component, Input, Output, OnInit, OnChanges, SimpleChanges, EventEmitter } from '@angular/core';\r\nimport { IFlowmeterSummaryViewModel } from '../interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'flowmeter-summary-table',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class FlowmeterSummaryTableComponent implements OnInit {\r\n\t@Input()\r\n\tpublic flowmeterData: IFlowmeterSummaryViewModel[];\r\n\r\n\t@Output()\r\n\tdetailLoaded: EventEmitter<number> = new EventEmitter();\r\n\r\n\tconstructor() { }\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n\r\n\tpublic loadDetails(flowWateringId: number) {\r\n\t\tthis.detailLoaded.emit(flowWateringId);\r\n\t}\r\n}\r\n\r\n","<div *ngIf=\"isAuthenticated === false\" \r\n\tclass=\"bk-splash-header\">\r\n\r\n\t<img class=\"bk-splash-logo\"\r\n\t\talt=\"CropManage\"\r\n\t\t(click)=\"onClickHomePage()\"\r\n\t\tsrc=\"assets/images/logos/cropmanage-logo-white.png\" width=\"211\" height=\"39\"/>\r\n\t<a class=\"bk-splash-login\"\r\n\t\trouterLink=\"/login\">\r\n\t\tLogin\r\n\t</a>\r\n\t<a class=\"bk-splash-register-button\"\r\n\t\trouterLink=\"/register\">\r\n\t\tSign Up\r\n\t</a>\r\n</div>\r\n\r\n<div *ngIf=\"isAuthenticated\"\r\n\tclass=\"global-header bk-header\">\r\n\r\n\t<button class=\"bk-button bk-header__menu-icon\"\r\n\t\tmat-button [matMenuTriggerFor]=\"mainMenu\">\r\n\t\t<i class=\"fa fa-bars cm-main-menu-icon\" aria-hidden=\"true\"></i>{{'Menu' | translate }}\r\n\t</button>\r\n\t<mat-menu #mainMenu=\"matMenu\">\r\n\t\t<main-menu></main-menu>\r\n\t</mat-menu>\r\n\t<!-- logo -->\r\n\t<div class=\"app-title bk-header__logo\" (click)=\"goToDashboard()\">\r\n\t\t<img alt=\"CropManage\" src=\"assets/images/logos/cropmanage-logo-white.png\" />\r\n\t</div>\r\n\r\n\t<div id=\"bk-menu--mobile\">\r\n\t\t<button mat-button [matMenuTriggerFor]=\"matMenuMobile\">\r\n\t\t\t<mat-icon aria-hidden=\"false\" aria-label=\"menu\">more_vert</mat-icon>\r\n\t\t</button>\r\n\t\t<mat-menu #matMenuMobile=\"matMenu\">\r\n\t\t\t<button mat-menu-item\r\n\t\t\t\t[matMenuTriggerFor]=\"supportMobile\">\r\n\t\t\t\t<mat-icon aria-hidden=\"false\" aria-label=\"Contact Support\">help</mat-icon>\r\n\t\t\t\t{{ 'Support' | translate }}\r\n\t\t\t</button>\r\n\t\t\t<button mat-menu-item\r\n\t\t\t\t[matMenuTriggerFor]=\"languagesMobile\">\r\n\t\t\t\t<mat-icon aria-hidden=\"false\" aria-label=\"Language\">language</mat-icon>\r\n\t\t\t\t{{ languageName }}\r\n\t\t\t</button>\r\n\t\t</mat-menu>\r\n\r\n\t\t<mat-menu #supportMobile=\"matMenu\">\r\n\t\t\t<button mat-menu-item\r\n\t\t\t\t(click)=\"openTechnicalSupport()\">\r\n\t\t\t\t<mat-icon aria-hidden=\"false\" aria-label=\"Contact Support\">help</mat-icon>\r\n\t\t\t\t<span>{{ 'Technical Support' | translate }}</span>\r\n\t\t\t</button>\r\n\t\t\t<button mat-menu-item\r\n\t\t\t\t(click)=\"openFeedbackDialog()\">\r\n\t\t\t\t<mat-icon aria-hidden=\"false\" aria-label=\"Contact Support\">feedback</mat-icon>\r\n\t\t\t\t{{ 'Send Feedback' | translate }}</button>\r\n\t\t\t<button mat-menu-item\r\n\t\t\t\t(click)=\"openHelpDocumentation()\">\r\n\t\t\t\t<mat-icon aria-hidden=\"false\" aria-label=\"Contact Support\">library_books</mat-icon>\r\n\t\t\t\t{{ 'Help Documentation' | translate }}\r\n\t\t\t</button>\r\n\t\t</mat-menu>\r\n\r\n\t\t<mat-menu #languagesMobile=\"matMenu\">\r\n\t\t\t<button mat-menu-item *ngFor=\"let languageCode of languageCodes\"\r\n\t\t\t\t(click)=\"setLanguage(languageCode.Id)\">\r\n\t\t\t\t{{languageCode.Language | translate}}\r\n\t\t\t</button>\r\n\t\t</mat-menu>\r\n\t</div>\r\n\r\n\t<!-- horizontal menu -->\r\n\t<div class=\"bk-header__name-language-menu\" *ngIf=\"user && languageCodes\">\r\n\t\t<div class=\"bk-header__name\">\r\n\t\t\t<span class=\"bk-header__icon cm-icon--with-text\">\r\n\t\t\t\t<mat-icon aria-hidden=\"false\" aria-label=\"Account\">account_circle</mat-icon>\r\n\t\t\t</span>\r\n\t\t\t<span *ngIf=\"user\">\r\n\t\t\t\t{{user.FirstName}} {{user.LastName}}\r\n\t\t\t</span>\r\n\t\t</div>\r\n\t\t<div class=\"bk-header__support\">\r\n\t\t\t<button mat-button [matMenuTriggerFor]=\"menu\">\r\n\t\t\t\t<mat-icon class=\"cm-icon--with-text\"\r\n\t\t\t\t\taria-hidden=\"false\"\r\n\t\t\t\t\taria-label=\"Help\">help_outline\r\n\t\t\t\t</mat-icon>\r\n\t\t\t\t<span class=\"cm-global-nav__support--desktop\">{{ 'Support' | translate }}</span>\r\n\t\t\t</button>\r\n\t\t\t<mat-menu #menu=\"matMenu\">\r\n\t\t\t\t<button mat-menu-item\r\n\t\t\t\t\t(click)=\"openTechnicalSupport()\">\r\n\t\t\t\t\t<mat-icon aria-hidden=\"false\" aria-label=\"Contact Support\">help</mat-icon>\r\n\t\t\t\t\t<span>{{ 'Technical Support' | translate }}</span>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button mat-menu-item\r\n\t\t\t\t\t(click)=\"openFeedbackDialog()\">\r\n\t\t\t\t\t<mat-icon aria-hidden=\"false\" aria-label=\"Contact Support\">feedback</mat-icon>\r\n\t\t\t\t\t{{ 'Send Feedback' | translate }}</button>\r\n\t\t\t\t<button mat-menu-item\r\n\t\t\t\t\t(click)=\"openHelpDocumentation()\">\r\n\t\t\t\t\t<mat-icon aria-hidden=\"false\" aria-label=\"Contact Support\">library_books</mat-icon>\r\n\t\t\t\t\t{{ 'Help Documentation' | translate }}\r\n\t\t\t\t</button>\r\n\t\t\t</mat-menu>\r\n\t\t</div>\r\n\t\t<div class=\"language-select bk-header__language\">\r\n\t\t\t<span class=\"bk-header__icon cm-icon--with-select\">\r\n\t\t\t\t<mat-icon aria-hidden=\"false\" aria-label=\"Language\">language</mat-icon>\r\n\t\t\t</span>\r\n\t\t\t<select class=\"bk-select--white-text cm-global-nav__localization--desktop\"\r\n\t\t\t\tid=\"languageSelect\"\r\n\t\t\t\t[(ngModel)]=\"translateService.currentLanguageId\">\r\n\t\t\t\t<option *ngFor=\"let languageCode of languageCodes\"\r\n\t\t\t\t\t[ngValue]=\"languageCode.Id\">{{languageCode.Language | translate}}\r\n\t\t\t\t</option>\r\n\t\t\t</select>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n","import { Component, OnInit, ViewChild, OnDestroy } from '@angular/core';\r\nimport { MainMenuComponent } from '../main-menu/main-menu.component';\r\nimport { Router } from '@angular/router';\r\nimport { TokenService } from '../../services/token.service';\r\n\r\nimport { UserService } from '../../models/user/service';\r\nimport { PersistentDatabase } from '../../services/persistent-database';\r\nimport { TranslateService } from '../localization/service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { ICurrentUser } from '../../models/user/interfaces';\r\nimport { LanguageCode } from '../localization/interfaces';\r\nimport { Location } from '@angular/common';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FeedbackComponent } from '../feedback/feedback';\r\nimport { SupportComponent } from '../support/support';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'global-header',\r\n\ttemplateUrl: `global-header.component.html`,\r\n\tstyleUrls: ['global-header.component.scss']\r\n})\r\n\r\nexport class GlobalHeaderComponent implements OnInit, OnDestroy {\r\n\t@ViewChild(MainMenuComponent, { static: true }) public mainMenuComponent: MainMenuComponent;\r\n\r\n\tpublic isAuthenticated: boolean;\r\n\tpublic user: ICurrentUser;\r\n\tpublic languageCodes: LanguageCode[];\r\n\tpublic languageName: string; // name of active language\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tpublic translateService: TranslateService,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _location: Location,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate _userService: UserService,\r\n\t\tprivate _persistentDatabase: PersistentDatabase,\r\n\t\tprivate _updateService: UpdateService\r\n\t) { }\r\n\r\n\tngOnInit() {\r\n\t\tlet publicUrls: string[];\r\n\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tpublicUrls = ['', '/login'];\r\n\r\n\t\tthis.isAuthenticated = this._tokenService.isAuthenticated();\r\n\r\n\t\tthis._router.events\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\t// if user is in public area, don't show app area navigation\r\n\t\t\tif (publicUrls.indexOf(this._location.path()) !== -1) {\r\n\t\t\t\tthis.isAuthenticated = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.isAuthenticated = this._tokenService.isAuthenticated();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._updateService.authToken$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.isAuthenticated = this._tokenService.isAuthenticated();\r\n\r\n\t\t\tif (this.isAuthenticated) {\r\n\t\t\t\tthis._getLocalization().then(res => {\r\n\t\t\t\t\tthis._getCurrentUser(res);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._persistentDatabase.isGlobalNotificationVisible = this._persistentDatabase.GlobalNotificationIsVisible();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (this.isAuthenticated === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._getLocalization().then(res => {\r\n\t\t\tthis._getCurrentUser(res);\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tprivate _getLocalization(): Promise<LanguageCode[]> {\r\n\t\treturn this.translateService.loadLanguages()\r\n\t\t.then(res => {\r\n\t\t\tthis.languageCodes = res;\r\n\t\t\tthis.translateService.loadTranslations();\r\n\t\t\treturn res;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openMenu(): void {\r\n\t\tthis.mainMenuComponent.open();\r\n\t}\r\n\r\n\tpublic onClickHomePage(): void {\r\n\t\tthis._router.navigate(['']);\r\n\t}\r\n\t// Clicking on the header logo takes you back to the dashboard, for now, since there\r\n\t// until we have a better alternative\r\n\tpublic goToDashboard(): void {\r\n\t\tthis._router.navigate(['MyDashboard']);\r\n\t}\r\n\r\n\tprivate _getCurrentUser(languageCodes: LanguageCode[]): void {\r\n\t\tthis._userService.getCurrentUser()\r\n\t\t.then(res => {\r\n\t\t\tif (!res) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!languageCodes || languageCodes.length === 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.user = res\r\n\t\t\tthis._persistentDatabase.user = res;\r\n\t\t\tthis.translateService.currentLanguageId = this.user.LanguageCodeId;\r\n\t\t\tthis.languageName = languageCodes.find(x => x.Id === this.translateService.currentLanguageId).Language;\r\n\t\t\tthis._updateService.setCurrentRanchUserAsReceived(res);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openHelpDocumentation(): void {\r\n\t\twindow.open('https://help.cropmanage.ucanr.edu/tutorials/', '_blank');\r\n\t}\r\n\r\n\tpublic openFeedbackDialog(): void {\r\n\r\n\t\tthis._dialog.open(FeedbackComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic setLanguage(id: number): void {\r\n\t\tthis.translateService.currentLanguageId = id;\r\n\t\tthis.languageName = this.languageCodes.find(x => x.Id === this.translateService.currentLanguageId).Language;\r\n\t}\r\n\r\n\tpublic openTechnicalSupport(): void {\r\n\t\tthis._dialog.open(SupportComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t});\r\n\t}\r\n}\r\n","<admin-nav></admin-nav>\r\n<div class=\"bk-admin__page\">\r\n\t<div class=\"bk-form__header\">\r\n\t\t<h5 class=\"bk-text--gray\">\r\n\t\t\tGlobal Settings\r\n\t\t</h5>\r\n\t</div>\r\n\t<form *ngIf=\"form\" [formGroup]=\"form\" class=\"bk-form\">\r\n\t\t<mat-form-field appearance=\"fill\"\r\n\t\t\tclass=\"mat-form-field--short\">\r\n\t\t\t<mat-label>\r\n\t\t\t\tREW Control\r\n\t\t\t</mat-label>\r\n\t\t\t<input matInput\r\n\t\t\t\tclass=\"mat-input-element--text-align-right\"\r\n\t\t\t\ttype=\"number\"\r\n\t\t\t\tstep=\"0.01\"\r\n\t\t\t\tname=\"REWControl\"\r\n\t\t\t\tformControlName=\"REWControl\"/>\r\n\t\t</mat-form-field>\r\n\r\n\t\t<mat-form-field appearance=\"fill\"\r\n\t\t\tclass=\"mat-form-field--short\">\r\n\t\t\t<mat-label>\r\n\t\t\t\tTEW Control\r\n\t\t\t</mat-label>\r\n\t\t\t<input matInput\r\n\t\t\t\tclass=\"mat-input-element--text-align-right\"\r\n\t\t\t\ttype=\"number\"\r\n\t\t\t\tstep=\"0.01\"\r\n\t\t\t\tname=\"TEWControl\"\r\n\t\t\t\tformControlName=\"TEWControl\"/>\r\n\t\t</mat-form-field>\r\n\t\t<button mat-raised-button color=\"primary\"\r\n\t\t\t(click)=\"save()\">Save</button>\r\n\t</form>\r\n</div>\r\n","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { TokenService } from '../../services/token.service';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { GlobalSettingsService } from './global-settings.service';\r\nimport { GlobalSettings } from './interfaces';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { eNotificationTypes } from '../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'global-settings',\r\n\ttemplateUrl: 'global-settings.component.html',\r\n\tstyleUrls: ['global-settings.scss']\r\n})\r\n\r\nexport class GlobalSettingsComponent implements OnInit, OnDestroy {\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tpublic form: FormGroup;\r\n\r\n\tconstructor(\r\n\t\tprivate _router: Router,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _service: GlobalSettingsService,\r\n\t\tprivate _tokenService: TokenService) {\r\n\r\n\t\tif (this._tokenService.isAuthenticated() === false) {\r\n\t\t\tthis._router.navigate(['login']);\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis._service.get().then((response) => {\r\n\t\t\tif (!response) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._initializeForm(response);\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tprivate _initializeForm(model: GlobalSettings): void {\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tREWControl: [model.REWControl, [Validators.required, Validators.min(0), Validators.max(1)]],\r\n\t\t\tTEWControl: [model.TEWControl, [Validators.required, Validators.min(0), Validators.max(1)]],\r\n\t\t});\r\n\t}\r\n\r\n\tpublic save(): void {\r\n\t\tthis._service.update(this.form.value as GlobalSettings).then(() => {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\tmessage: 'Global settings were successfully saved'\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CMErrors, SuccessResponse } from '../../interfaces/interfaces';\r\nimport { HttpService, HttpServicePostOptions, HttpServiceGetOptions } from '../../services/http.service';\r\nimport { GlobalSettings, IGlobalSettingsService } from './interfaces';\r\n\r\n@Injectable()\r\nexport class GlobalSettingsService implements IGlobalSettingsService {\r\n\r\n\tprivate _urls = {\r\n\t\tget: '/v2/global-settings.json',\r\n\t\tupdate: '/v2/global-settings.json'\r\n\t}\r\n\r\n\tconstructor(private _httpService: HttpService,\r\n\t) { }\r\n\r\n\tpublic update(model: GlobalSettings): Promise<void> {\r\n\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\tbody: model,\r\n\t\t\turl: this._urls.update,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: SuccessResponse | CMErrors): void => {\r\n\t\t\t\tlet successResponse = response as SuccessResponse;\r\n\t\t\t\tlet errors = response as CMErrors;\r\n\r\n\t\t\t\tif (successResponse.Message) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if (errors.errors) {\r\n\t\t\t\t\t///\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this._httpService.put(options);\r\n\t}\r\n\r\n\tpublic get(): Promise<GlobalSettings> {\r\n\t\tlet options: HttpServiceGetOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this._urls.get,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: GlobalSettings): GlobalSettings => {\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this._httpService.get(options);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-ignore-schedule-dialog\" (clickOutside)=\"close($event)\">\r\n    <button type=\"button\" class=\"bk-dialog__close\" (click)=\"close()\">\r\n        <span>&times;</span>\r\n    </button>\r\n\r\n    <h4 mat-dialog-title *ngIf=\"!ignoreSchedule.Id\" > {{ 'Add Weather Station Ignore Schedule' | translate }} </h4>\r\n    <h4 mat-dialog-title *ngIf=\"ignoreSchedule.Id && view !== ignoreScheduleViewsEnum.DELETECONFIRMATION\"> {{ 'Edit Weather Station Ignore Schedule' | translate }} </h4>\r\n    <h4 mat-dialog-title *ngIf=\"ignoreSchedule.Id && view === ignoreScheduleViewsEnum.DELETECONFIRMATION\"> {{ 'Delete Weather Station Ignore Schedule' | translate }} </h4>\r\n\r\n    <div mat-dialog-content *ngIf=\"weatherStations && view === ignoreScheduleViewsEnum.FORM\">\r\n        <form #ignoreScheduleForm=\"ngForm\">\r\n            <label class=\"bk-dialog__form--label\">{{ 'Weather Station' | translate }}</label>\r\n            <select class=\"bk-dialog__form--input\" [(ngModel)]=\"ignoreSchedule.StationId\" required name=\"stationId\"\r\n                    #stationId=\"ngModel\" [ngClass]=\"{'bk-input-invalid' : (showErrors || stationId.dirty) && stationId.errors }\">\r\n                <option *ngFor=\"let weatherStation of weatherStations\" [ngValue]=\"weatherStation.Id\">{{weatherStation.Name}}</option>\r\n            </select>\r\n            <div class=\"bk-dialog__form--invalid-text bk-dialog__form--invalid-text-station-select\" *ngIf=\"(showErrors || stationId.dirty) && stationId.errors\">\r\n                {{ 'Please select a' | translate }} {{ 'Weather Station' | translate}}\r\n            </div>\r\n\r\n            <div class=\"bk-ignore-schedule-dialog__date-range\">\r\n                <div class=\"bk-ignore-schedule-dialog__date-picker\">\r\n                    <label class=\"bk-ignore-schedule-dialog__date-label\">{{'Start Date' | translate}}</label>\r\n                    <my-date-picker #startDatePicker [(ngModel)]=\"startDate\" [options]=\"startDateOptions\" (dateChanged)=\"startDateChanged($event)\"\r\n                                    [ngClass]=\"{'bk-input-invalid--datepicker' : !isDateRangeValid.startDate}\" [ngModelOptions]=\"{standalone: true}\">\r\n                    </my-date-picker>\r\n                    <div class=\"bk-dialog__form--invalid-text\" *ngIf=\"!isDateRangeValid.startDate\">\r\n                        {{ 'Start Date' | translate }} {{ 'must be a date that is less than or equal to the End Date' | translate}}\r\n                    </div>\r\n                </div>\r\n\r\n                <div class=\"bk-ignore-schedule-dialog__date-range--text\">{{ 'to' | translate}}</div>\r\n            \r\n                <div class=\"bk-ignore-schedule-dialog__date-picker\">\r\n                    <label class=\"bk-ignore-schedule-dialog__date-label\">{{'End Date' | translate}}</label>\r\n                    <my-date-picker #endDatePicker [(ngModel)]=\"endDate\" [options]=\"endDateOptions\" (dateChanged)=\"endDateChanged($event)\"\r\n                                    [ngClass]=\"{'bk-input-invalid--datepicker' : !isDateRangeValid.endDate}\" [ngModelOptions]=\"{standalone: true}\">\r\n                    </my-date-picker>\r\n                    <div class=\"bk-dialog__form--invalid-text\" *ngIf=\"!isDateRangeValid.endDate\">\r\n                        {{ 'End Date' | translate }} {{ 'must be a date that is greater than or equal to the Start Date' | translate}}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"bk-dialog__checkbox-options\">\r\n                <input type=\"checkbox\" class=\"bk-dialog__checkbox\" [(ngModel)]=\"ignoreSchedule.IgnoreET\" name=\"IgnoreET\"\r\n                    #IgnoreET=\"ngModel\" (ngModelChange)=\"validateIgnoreOptions()\" \r\n                    [ngClass]=\"{'bk-input-invalid--checkbox' : (showErrors || IgnoreET.dirty || IgnorePrecipitation.dirty) && !areIgnoreOptionsValid}\"/>\r\n                <label class=\"bk-dialog__checkbox--label\">\r\n                    {{ 'Ignore ET' | translate}}\r\n                </label>\r\n\r\n                <input type=\"checkbox\" class=\"bk-dialog__checkbox\" [(ngModel)]=\"ignoreSchedule.IgnorePrecipitation\" name=\"IgnorePrecipitation\"\r\n                    #IgnorePrecipitation=\"ngModel\" (ngModelChange)=\"validateIgnoreOptions()\" \r\n                    [ngClass]=\"{'bk-input-invalid--checkbox' : (showErrors || IgnoreET.dirty || IgnorePrecipitation.dirty) && !areIgnoreOptionsValid }\"/>\r\n                <label class=\"bk-dialog__checkbox--label\">\r\n                    {{ 'Ignore Precipitation' | translate}}\r\n                </label>\r\n            </div>\r\n            <div class=\"bk-dialog__form--invalid-text\" *ngIf=\"(showErrors || IgnoreET.dirty || IgnorePrecipitation.dirty) && !areIgnoreOptionsValid\">\r\n                {{ 'Either ET or Precipitation checkbox must be checked' | translate}}\r\n            </div>\r\n        </form>\r\n    </div>\r\n\r\n    <div mat-dialog-content *ngIf=\"view === ignoreScheduleViewsEnum.DISCARDCHANGES\">\r\n        <div class=\"bk-dialog__paragraph\">\r\n            {{ 'The changes you made were not saved' | translate}}. {{'Discard changes' | translate}}?\r\n        </div>\r\n    </div>\r\n\r\n    <div mat-dialog-content *ngIf=\"view === ignoreScheduleViewsEnum.DELETECONFIRMATION\">\r\n        <div class=\"bk-dialog__paragraph\">\r\n            {{ 'Are you sure you want to delete this Ignore Schedule' | translate}}?\r\n        </div>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\" *ngIf=\"view === ignoreScheduleViewsEnum.FORM\">\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-dialog__button--secondary bk-dialog__button--left\"\r\n            *ngIf=\"ignoreSchedule.Id\" (click)=\"view = ignoreScheduleViewsEnum.DELETECONFIRMATION\">\r\n            {{ 'Delete' | translate }}\r\n        </button>\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-dialog__button--secondary\" (click)=\"close()\">\r\n            {{ 'Cancel' | translate }}\r\n        </button>\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            *ngIf=\"!ignoreSchedule.Id\" (click)=\"add()\">\r\n            {{ 'Add' | translate }}\r\n        </button>\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            *ngIf=\"ignoreSchedule.Id\" (click)=\"save()\">\r\n            {{ 'Save' | translate }}\r\n        </button>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\" *ngIf=\"view === ignoreScheduleViewsEnum.DISCARDCHANGES\">\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-dialog__button--secondary\" (click)=\"view = ignoreScheduleViewsEnum.FORM\">\r\n            {{ 'Keep Editing' | translate }}\r\n        </button>\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"close()\">\r\n            {{ 'Discard' | translate }}\r\n        </button>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\" *ngIf=\"view === ignoreScheduleViewsEnum.DELETECONFIRMATION\">\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-dialog__button--secondary\" (click)=\"view = ignoreScheduleViewsEnum.FORM\">\r\n            {{ 'Cancel' | translate }}\r\n        </button>\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"delete()\">\r\n            {{ 'Delete Ignore Schedule' | translate }}\r\n        </button>\r\n    </div>\r\n</div>","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { IMyDpOptions, IMyDateModel } from 'mydatepicker';\r\n\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { IgnoreSchedulesService } from './service';\r\nimport { WeatherStationsService } from '../../models/weather-station-stats/service';\r\nimport { ObjectUtility } from '../../classes/objectUtility';\r\n\r\nimport { IWeatherStation } from '../weather-stations/interfaces';\r\nimport { iIgnoreSchedule } from './interfaces';\r\nimport { eDialogFormViews } from '../../interfaces/constants';\r\nimport { httpStatusCodes } from '../../interfaces/interfaces';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ignore-schedule-dialog',\r\n\ttemplateUrl: 'ignore-schedule-dialog.html'\r\n})\r\n\r\nexport class IgnoreScheduleDialog implements OnInit, OnDestroy {\r\n\r\n\tpublic ignoreSchedule: iIgnoreSchedule;\r\n\tpublic weatherStations: IWeatherStation[] = new Array();\r\n\tpublic showErrors = false;\r\n\tpublic view: eDialogFormViews = eDialogFormViews.FORM;\r\n\tpublic ignoreScheduleViewsEnum = eDialogFormViews;\r\n\tpublic originalIgnoreSchedule: iIgnoreSchedule;\r\n\tpublic areIgnoreOptionsValid = true;\r\n\r\n\tpublic startDate: { jsdate: Date } = { jsdate: new Date() };\r\n\tpublic endDate: { jsdate: Date } = { jsdate: new Date() };\r\n\tpublic startDateOptions: IMyDpOptions = {\r\n\t\tshowClearDateBtn: false\r\n\t};\r\n\tpublic endDateOptions: IMyDpOptions = {\r\n\t\tshowClearDateBtn: false\r\n\t};\r\n\tpublic isDateRangeValid = {\r\n\t\tstartDate: true as boolean,\r\n\t\tendDate: true as boolean\r\n\t}\r\n\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(public dialogRef: MatDialogRef<IgnoreScheduleDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: iIgnoreSchedule,\r\n\t\tprivate ignoreSchedulesService: IgnoreSchedulesService,\r\n\t\tprivate weatherStationsService: WeatherStationsService,\r\n\t\tprivate updateService: UpdateService) {\r\n\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.weatherStationsService.list().then(response => {\r\n\t\t\tthis.weatherStations = response;\r\n\t\t});\r\n\r\n\t\tthis.updateService.weatherStationsList$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(weatherStations => {\r\n\t\t\t\tthis.weatherStations = weatherStations\r\n\t\t\t});\r\n\r\n\t\tthis.ignoreSchedule = data ? {\r\n\t\t\tId: data.Id,\r\n\t\t\tStationName: data.StationName,\r\n\t\t\tStationId: data.StationId,\r\n\t\t\tStartDate: data.StartDate,\r\n\t\t\tEndDate: data.EndDate,\r\n\t\t\tIgnorePrecipitation: data.IgnorePrecipitation,\r\n\t\t\tIgnoreET: data.IgnoreET\r\n\t\t} : {\r\n\t\t\t\tStationId: null,\r\n\t\t\t\tStartDate: new Date(),\r\n\t\t\t\tEndDate: new Date(),\r\n\t\t\t\tIgnorePrecipitation: false,\r\n\t\t\t\tIgnoreET: false\r\n\t\t\t}\r\n\r\n\t\tthis.startDate.jsdate = this.ignoreSchedule.StartDate;\r\n\t\tthis.endDate.jsdate = this.ignoreSchedule.EndDate;\r\n\r\n\t\tthis.originalIgnoreSchedule = ObjectUtility.copy(this.ignoreSchedule);\r\n\r\n\t\tthis.dialogRef.afterOpen()\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(event => {\r\n\t\t\t$('.bk-ignore-schedule-dialog').closest('.mat-dialog-container').css({ overflow: 'visible' });\r\n\t\t});\r\n\r\n\t\tthis.updateService.closeModalSubscription\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(event => this.dialogRef.close());\r\n\t}\r\n\r\n\tngOnInit() {\r\n\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic close(e?: MouseEvent): void {\r\n\t\tlet element: Element;\r\n\t\tlet classList: DOMTokenList;\r\n\r\n\t\tif (e) {\r\n\t\t\telement = e.target as Element;\r\n\r\n\t\t\tif (element) {\r\n\t\t\t\tclassList = element.classList;\r\n\r\n\t\t\t\tif (classList) {\r\n\t\t\t\t\tif (classList.contains('bk-data-table__title--button-right') ||\r\n\t\t\t\t\t\tclassList.contains('mat-button-wrapper') ||\r\n\t\t\t\t\t\tclassList.contains('bk-button--medium') ||\r\n\t\t\t\t\t\tclassList.contains('bk-data-table__button') ||\r\n\t\t\t\t\t\tclassList.contains('headertodaybtn') ||\r\n\t\t\t\t\t\tclassList.contains('bk-data-table__plus-icon') ||\r\n\t\t\t\t\t\t(element.closest('button') &&\r\n\t\t\t\t\t\t\telement.closest('button').classList &&\r\n\t\t\t\t\t\t\telement.closest('button').classList.contains('headertodaybtn'))\r\n\t\t\t\t\t\t) {\r\n\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.view === eDialogFormViews.DELETECONFIRMATION) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.ignoreSchedule || !this.originalIgnoreSchedule) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.view === eDialogFormViews.DISCARDCHANGES) {\r\n\t\t\tthis.dialogRef.close();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (ObjectUtility.isEqual(this.ignoreSchedule, this.originalIgnoreSchedule)) {\r\n\t\t\tthis.dialogRef.close();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.view = eDialogFormViews.DISCARDCHANGES;\r\n\t}\r\n\r\n\tpublic startDateChanged(date: IMyDateModel): void {\r\n\t\tlet startDate: Date;\r\n\t\tlet endDate: Date;\r\n\r\n\t\t// reset end date validation\r\n\t\tendDate = this.endDate ? this.endDate.jsdate : null;\r\n\t\tthis.isDateRangeValid.endDate = endDate && endDate instanceof Date;\r\n\r\n\t\tif (!date || !date.jsdate) {\r\n\t\t\tthis.isDateRangeValid.startDate = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tstartDate = date.jsdate;\r\n\r\n\t\tthis.isDateRangeValid.startDate = this.isDateRangeValid.endDate ? startDate <= endDate : true;\r\n\r\n\t\tif (this.isDateRangeValid.startDate) {\r\n\t\t\tthis.ignoreSchedule.StartDate = startDate;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic endDateChanged(date: IMyDateModel): void {\r\n\t\tlet startDate: Date;\r\n\t\tlet endDate: Date;\r\n\r\n\t\t// reset start date validation\r\n\t\tstartDate = this.startDate ? this.startDate.jsdate : null;\r\n\t\tthis.isDateRangeValid.startDate = startDate && startDate instanceof Date;\r\n\r\n\t\tif (!date || !date.jsdate) {\r\n\t\t\tthis.isDateRangeValid.endDate = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tendDate = date.jsdate;\r\n\r\n\t\tthis.isDateRangeValid.endDate = this.isDateRangeValid.startDate ? endDate >= startDate : true;\r\n\r\n\t\tif (this.isDateRangeValid.endDate) {\r\n\t\t\tthis.ignoreSchedule.EndDate = endDate;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic validateIgnoreOptions(): void {\r\n\t\tif (!this.ignoreSchedule) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.areIgnoreOptionsValid = this.ignoreSchedule.IgnoreET || this.ignoreSchedule.IgnorePrecipitation;\r\n\t}\r\n\r\n\tpublic add(): void {\r\n\t\tthis.validateIgnoreOptions();\r\n\t\tthis.showErrors = true;\r\n\r\n\t\tif (!this.ignoreSchedule.StationId || !this.isDateRangeValid.startDate || !this.isDateRangeValid.endDate || !this.areIgnoreOptionsValid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.ignoreSchedulesService.create(this.ignoreSchedule)\r\n\t\t\t.then(response => {\r\n\t\t\t\tif (response) {\r\n\t\t\t\t\tresponse.StationName = this.weatherStations.filter(x => x.Id === response.StationId)[0].Name;\r\n\t\t\t\t\tthis.updateService.createIgnoreSchedule(response);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dialogRef.close();\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic save(): void {\r\n\t\tthis.showErrors = true;\r\n\r\n\t\tif (!this.ignoreSchedule.StationId || !this.isDateRangeValid.startDate || !this.isDateRangeValid.endDate || !this.areIgnoreOptionsValid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.ignoreSchedulesService.update(this.ignoreSchedule)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.ignoreSchedule.StationName = this.weatherStations.filter(x => x.Id === this.ignoreSchedule.StationId)[0].Name;\r\n\t\t\t\tthis.updateService.updateIgnoreSchedule(this.ignoreSchedule);\r\n\r\n\t\t\t\tthis.dialogRef.close();\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\t\tthis.ignoreSchedulesService.delete(this.ignoreSchedule.Id)\r\n\t\t\t.then(response => {\r\n\t\t\t\tif (response) {\r\n\t\t\t\t\tthis.updateService.deleteIgnoreSchedule(this.ignoreSchedule);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dialogRef.close();\r\n\t\t\t});\r\n\t}\r\n}\r\n","<admin-nav></admin-nav>\r\n<div class=\"bk-admin__page\">\r\n\r\n    <h5 class=\"bk-text--gray\">{{'Ignore Schedules' | translate }}</h5>\r\n\r\n    <div class=\"bk-data-table bk-data-table__ignore-schedules\">\r\n        <div class=\"bk-data-table__head\">\r\n            <div class=\"bk-data-table__title\">\r\n                {{ 'Weather Station Ignore Schedule' | translate}}\r\n                <button class=\"bk-button bk-data-table__title--button-right\" (click)=\"openDialog()\">\r\n                    <span class=\"bk-data-table__plus-icon\">+</span> {{ 'Add' | translate}}\r\n                </button>\r\n            </div>\r\n\r\n            <div class=\"bk-data-table__search\">\r\n                <label class=\"bk-data-table__search--label\">\r\n                    {{ 'Filter By' | translate }}\r\n                    <input class=\"bk-data-table__search--input\" placeholder=\"Station, Start Date, End Date\" (keyup)=\"applyFilter($event.target.value)\"/>\r\n                </label>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"bk-data-table__content\">\r\n            <mat-table [dataSource]=\"dataSource\" matSort>\r\n\r\n                <ng-container matColumnDef=\"StationName\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Station' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.StationName}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"StartDate\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Start Date' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.StartDate | date: 'shortDate'}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"EndDate\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'End Date' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.EndDate | date: 'shortDate'}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"IgnoreET\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Ignore ET?' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\">{{row.IgnoreET | yesNo}}</mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"IgnorePrecipitation\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Ignore Precipitation?' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\">{{row.IgnorePrecipitation | yesNo}}</mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"Action\">\r\n                    <mat-header-cell *matHeaderCellDef> {{ 'Action' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\">\r\n                        <button class=\"bk-button bk-data-table__button\"\r\n                            (click)=\"openDialog(row)\">\r\n                            {{'Edit' | translate}}\r\n                        </button>\r\n                    </mat-cell>\r\n                </ng-container>\r\n\r\n                <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n                <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\r\n            </mat-table>\r\n\r\n            <div class=\"bk-data-table__empty\" *ngIf=\"!isIgnoreSchedulesEmpty && dataSource && dataSource.filteredData && dataSource.filteredData.length === 0\">\r\n                {{ 'There are no Ignore Schedules matching' | translate }} <span class=\"bk-data-table__empty--filter\">\"{{dataSource.filter}}\"</span>\r\n            </div>\r\n\r\n            <div class=\"bk-data-table__empty\" *ngIf=\"isIgnoreSchedulesEmpty\">\r\n                {{ 'Currently there are no Ignore Schedules' | translate }}\r\n            </div>\r\n\r\n            <mat-paginator [pageSizeOptions]=\"[10, 25]\"></mat-paginator>\r\n        </div>\r\n\r\n    </div>\r\n</div>","import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\n\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { IgnoreSchedulesService } from './service';\r\nimport { IgnoreScheduleDialog } from './ignore-schedule-dialog';\r\n\r\nimport { iIgnoreSchedule } from './interfaces';\r\nimport { Router } from '@angular/router';\r\nimport { TokenService } from '../../services/token.service';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ignore-schedules',\r\n\ttemplateUrl: 'ignore-schedules.component.html'\r\n})\r\n\r\nexport class IgnoreSchedulesComponent implements OnInit, OnDestroy {\r\n\t@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n\t@ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n\tpublic displayedColumns = ['StationName', 'StartDate', 'EndDate', 'IgnoreET', 'IgnorePrecipitation', 'Action'];\r\n\tpublic dataSource: MatTableDataSource<iIgnoreSchedule>;\r\n\tpublic ignoreSchedules: iIgnoreSchedule[];\r\n\tpublic isIgnoreSchedulesEmpty = false;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _router: Router,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate dialog: MatDialog,\r\n\t\tprivate updateService: UpdateService,\r\n\t\tprivate ignoreSchedulesService: IgnoreSchedulesService,\r\n\t\tprivate datePipe: DatePipe) {\r\n\r\n\t\tif (this._tokenService.isAuthenticated() === false) {\r\n\t\t\tthis._router.navigate(['login']);\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.ignoreSchedulesService.list()\r\n\t\t\t.then(response => {\r\n\t\t\t\tthis.ignoreSchedules = response;\r\n\t\t\t\tthis.setDataSource(this.ignoreSchedules);\r\n\t\t\t});\r\n\r\n\t\tthis.sort.sortChange\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\t\twhile (this.paginator.hasPreviousPage()) {\r\n\t\t\t\t\tthis.paginator.previousPage();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tthis.sort.sort({ id: 'StartDate', start: 'desc', disableClear: false });\r\n\r\n\t\tthis.updateService.createdIgnoreSchedule$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(ignoreSchedule => {\r\n\t\t\tif (!ignoreSchedule) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.ignoreSchedules.push(ignoreSchedule);\r\n\t\t\tthis.setDataSource(this.ignoreSchedules);\r\n\t\t});\r\n\r\n\t\tthis.updateService.updatedIgnoreSchedule$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(updatedIgnoreSchedule => {\r\n\t\t\tif (!updatedIgnoreSchedule) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tfor (let ignoreSchedule of this.ignoreSchedules) {\r\n\t\t\t\tif (ignoreSchedule.Id === updatedIgnoreSchedule.Id) {\r\n\t\t\t\t\tignoreSchedule.StationId = updatedIgnoreSchedule.StationId;\r\n\t\t\t\t\tignoreSchedule.StationName = updatedIgnoreSchedule.StationName;\r\n\t\t\t\t\tignoreSchedule.StartDate = updatedIgnoreSchedule.StartDate;\r\n\t\t\t\t\tignoreSchedule.EndDate = updatedIgnoreSchedule.EndDate;\r\n\t\t\t\t\tignoreSchedule.IgnoreET = updatedIgnoreSchedule.IgnoreET;\r\n\t\t\t\t\tignoreSchedule.IgnorePrecipitation = updatedIgnoreSchedule.IgnorePrecipitation;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.setDataSource(this.ignoreSchedules);\r\n\t\t});\r\n\r\n\t\tthis.updateService.deletedIgnoreSchedule$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(ignoreSchedule => {\r\n\t\t\tif (!ignoreSchedule) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.ignoreSchedules = this.ignoreSchedules.filter(x => x.Id !== ignoreSchedule.Id);\r\n\t\t\tthis.setDataSource(this.ignoreSchedules);\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic applyFilter(filterValue: string): void {\r\n\t\tif (!this.dataSource) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (filterValue === null) {\r\n\t\t\tfilterValue = '';\r\n\t\t}\r\n\r\n\t\tfilterValue = filterValue.trim();\r\n\t\tfilterValue = filterValue.toLowerCase();\r\n\t\tthis.dataSource.filter = filterValue;\r\n\t}\r\n\r\n\tpublic openDialog(ignoreShedule?: iIgnoreSchedule): void {\r\n\t\tthis.dialog.open(IgnoreScheduleDialog, {\r\n\t\t\twidth: '460px',\r\n\t\t\tdata: ignoreShedule ? ignoreShedule : null,\r\n\t\t\tdisableClose: true\r\n\t\t});\r\n\t}\r\n\r\n\tprivate setDataSource(ignoreSchedules: iIgnoreSchedule[]): void {\r\n\t\tif (!ignoreSchedules || !ignoreSchedules.length) {\r\n\t\t\tthis.isIgnoreSchedulesEmpty = true;\r\n\t\t} else {\r\n\t\t\tthis.isIgnoreSchedulesEmpty = false;\r\n\t\t}\r\n\r\n\t\tthis.dataSource = new MatTableDataSource(ignoreSchedules);\r\n\t\tthis.dataSource.paginator = this.paginator;\r\n\t\tthis.dataSource.sort = this.sort;\r\n\t\tthis.dataSource.filterPredicate = (data: iIgnoreSchedule, filter: string) => {\r\n\t\t\tlet stationNameFilter: boolean;\r\n\r\n\t\t\tstationNameFilter = data !== null && data.StationName !== null &&\r\n\t\t\t\tdata.StationName.toLowerCase().includes(filter) ? true : false;\r\n\r\n\t\t\treturn stationNameFilter || this.datePipe.transform(data.StartDate, 'shortDate').includes(filter)\r\n\t\t\t\t|| this.datePipe.transform(data.EndDate, 'shortDate').includes(filter);\r\n\t\t}\r\n\t}\r\n}\r\n","import { iUnprocessedIgnoreSchedule, iIgnoreSchedule } from \"./interfaces\";\r\nimport { DateUtility } from \"../../classes/dateUtility\";\r\n\r\nexport class IgnoreSchedule {\r\n    public static convertList(unprocessedIgnoreSchedules: iUnprocessedIgnoreSchedule[]): iIgnoreSchedule[] {\r\n        let ignoreSchedules: iIgnoreSchedule[] = new Array();\r\n        let ignoreSchedule: iIgnoreSchedule;\r\n\r\n        if (!unprocessedIgnoreSchedules) {\r\n            return ignoreSchedules\r\n        }\r\n\r\n        for (let unprocessedIgnoreSchedule of unprocessedIgnoreSchedules) {\r\n            ignoreSchedule = IgnoreSchedule.convertItem(unprocessedIgnoreSchedule);\r\n\r\n            if (ignoreSchedule) {\r\n                ignoreSchedules.push(ignoreSchedule);\r\n            } \r\n        }\r\n\r\n        return ignoreSchedules;\r\n    }\r\n\r\n    public static convertItem(unprocessedIgnoreSchedule: iUnprocessedIgnoreSchedule): iIgnoreSchedule {\r\n        let ignoreSchedule: iIgnoreSchedule;\r\n\r\n        if (!unprocessedIgnoreSchedule) {\r\n            return null;\r\n        }\r\n\r\n        ignoreSchedule = {\r\n            StationId: unprocessedIgnoreSchedule.StationId,\r\n            StartDate: DateUtility.DotNetToDate(unprocessedIgnoreSchedule.StartDate),\r\n            EndDate: DateUtility.DotNetToDate(unprocessedIgnoreSchedule.EndDate),\r\n            IgnorePrecipitation: unprocessedIgnoreSchedule.IgnorePrecipitation,\r\n            IgnoreET: unprocessedIgnoreSchedule.IgnoreET,\r\n            StationName: unprocessedIgnoreSchedule.StationName,\r\n            Id: unprocessedIgnoreSchedule.Id\r\n        }\r\n\r\n        return ignoreSchedule;\r\n    }\r\n}","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { HttpService, HttpServicePostOptions, HttpServiceGetOptions } from '../../services/http.service';\r\n\r\nimport { CMError, SuccessResponse } from '../../interfaces/interfaces';\r\nimport { iIgnoreSchedule, iUnprocessedIgnoreSchedule } from './interfaces';\r\nimport { IgnoreSchedule } from './ingore-schedule';\r\nimport { HttpParams } from '@angular/common/http';\r\n\r\n@Injectable()\r\nexport class IgnoreSchedulesService {\r\n\r\n\tprivate urls = {\r\n\t\tlist: '/v2/ignore-schedules.json',\r\n\t\tcreate: '/v2/ignore-schedules.json',\r\n\t\tupdate: '/v2/ignore-schedules.json',\r\n\t\tdelete: (id: number) => `/v2/ignore-schedules/${id}.json`\r\n\t}\r\n\r\n\tconstructor(private httpService: HttpService) { }\r\n\r\n\tpublic list(): Promise<iIgnoreSchedule[]> {\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this.urls.list,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: iUnprocessedIgnoreSchedule[]): iIgnoreSchedule[] => {\r\n\t\t\t\treturn IgnoreSchedule.convertList(response);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic create(ignoreSchedule: iIgnoreSchedule): Promise<iIgnoreSchedule> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tif (!ignoreSchedule) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: ignoreSchedule,\r\n\t\t\turl: this.urls.create,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: iUnprocessedIgnoreSchedule): iIgnoreSchedule => {\r\n\t\t\t\treturn IgnoreSchedule.convertItem(response);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic update(ignoreSchedule: iIgnoreSchedule): Promise<void> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tif (!ignoreSchedule) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: ignoreSchedule,\r\n\t\t\turl: this.urls.update,\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.put(options);\r\n\t}\r\n\r\n\tpublic delete(id: number): Promise<SuccessResponse> {\r\n\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this.urls.delete(id),\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.delete(options);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\t<h4 mat-dialog-title>\r\n\t\t{{'Delete' | translate }} {{'Watering Event' | translate }}?\r\n\t</h4>\r\n\t\r\n\t<div mat-dialog-content>\r\n\t\t{{'Delete Irrigation Event Text' | translate }}\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions\r\n        align=\"end\">\r\n\r\n\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t(click)=\"cancel($event)\">\r\n\t\t\t{{'Cancel' | translate }}\r\n\t\t</button>\r\n\t\t<button class=\"bk-button bk-button--medium\"\r\n\t\t\t(click)=\"delete()\">\r\n\t\t\t{{ (isSaving ? 'Deleting' : 'Delete') | translate }}\r\n\t\t\t<img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n\t\t</button>\r\n    </div>\r\n</div>","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { IrrigationUpdateService } from './update.service';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { IrrigationService } from './service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'irrigation-delete-confirmation',\r\n\ttemplateUrl: 'delete-confirmation.html',\r\n})\r\n\r\nexport class IrrigationDeleteConfirmationDialog implements OnInit {\r\n\r\n\tpublic isSaving: boolean;\r\n\tprivate _id: number;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialogRef: MatDialogRef<IrrigationDeleteConfirmationDialog>,\r\n\t\tprivate _updateService: IrrigationUpdateService,\r\n\t\tprivate _modelService: IrrigationService,\r\n\t\t@Inject(MAT_DIALOG_DATA) private data: { id: number }\r\n\t) {\r\n\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t\tthis.isSaving = false;\r\n\r\n\t\tif (this.data) {\r\n\t\t\tthis._id = this.data.id;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic cancel($event: MouseEvent): void {\r\n\t\tthis._dialogRef.close();\r\n\t\tthis._updateService.fireConfirmationClosed();\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\t\tthis.isSaving = true;\r\n\r\n\t\t// we make an API call here instead of delegating it to main component\r\n\t\t// because we need to know when API is finished\r\n\t\tthis._modelService.delete(this._id)\r\n\t\t\t.then(response => {\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t\tthis._updateService.fireDeleted(response);\r\n\t\t\t\tthis._dialogRef.close();\r\n\t\t\t});\r\n\t}\r\n}\r\n","<h4 class=\"bk-cut-event__historical-ui--title\">\r\n    {{ 'Historical Irrigation Information Required' | translate }}\r\n</h4>\r\n\r\n<div lass=\"bk-cut-event__historical-ui--form\">\r\n    <form [formGroup]=\"form\" class=\"bk-form\">\r\n        <mat-form-field appearance=\"fill\"\r\n            class='mat-form-field--one-line mat-form-field--short'\r\n            hintLabel=\"{{'Date of Last Irrigation or Complete Saturation' | translate }}\">\r\n            <mat-label>\r\n                Historical Irrigation Date\r\n            </mat-label>\r\n            <input matInput [matDatepicker]=\"picker\"\r\n                formControlName=\"EventDate\"\r\n                required>\r\n            <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n            <mat-datepicker #picker></mat-datepicker>\r\n            <mat-error *ngIf=\"f.EventDate.invalid && (f.EventDate.dirty || f.EventDate.touched)\">\r\n                <ng-container *ngIf=\"f.EventDate.errors.required\">\r\n                    {{ 'Event date is required' | translate }}\r\n                </ng-container>\r\n                <ng-container *ngIf=\"f.EventDate.errors.dateTooEarly\">\r\n                    {{ 'Date must be on or after' | translate }} {{ getMinDateBeforeIrrigationEvent() | date:'shortDate' }},\r\n                    {{ 'which is within 60 days of irrigation date' | translate }}\r\n                </ng-container>\r\n                <ng-container *ngIf=\"f.EventDate.errors.dateTooLate\">\r\n                    {{ 'Historical event date must be before the irrigation date' | translate }} ({{ pf.EventDate.value | date:'shortDate' }})\r\n                </ng-container>\r\n            </mat-error>\r\n        </mat-form-field>\r\n\r\n        <mat-form-field appearance=\"fill\"\r\n            class=\"mat-form-field--one-line mat-form-field--w1\">\r\n            <mat-label>\r\n                {{ 'Irrigation Method' | translate }}\r\n            </mat-label>\r\n            <mat-select required\r\n                formControlName=\"IrrigationMethodId\">\r\n                <mat-option value=\"null\" disabled selected>\r\n                    {{'Please Select' | translate }}\r\n                </mat-option>\r\n                <mat-option *ngFor=\"let method of irrigationMethods\"\r\n                    [value]=\"method.Id\">\r\n                    {{method.Name}}\r\n                </mat-option>\r\n            </mat-select>\r\n            <mat-error *ngIf=\"f.IrrigationMethodId.invalid && (f.IrrigationMethodId.dirty || f.IrrigationMethodId.touched)\">\r\n                {{ 'Irrigation Method is required' | translate }}\r\n            </mat-error>\r\n        </mat-form-field>\r\n    </form>\r\n</div>","import { Component, Input, EventEmitter, Output, OnInit } from '@angular/core';\r\nimport { IIrrigationEventEditResponse, IrrigationEventCreateViewModel } from '../interfaces';\r\nimport { IRRIGATION_RECENCY_DAYS } from '../../../interfaces/constants';\r\nimport { IPlanting } from '../../planting-settings/interfaces';\r\nimport { IrrigationService } from '../service';\r\nimport { EventGroup } from '../../../models/event/event';\r\nimport { RanchService } from '../../ranch-settings/service';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { Subject } from 'rxjs';\r\nimport { DateUtility } from '../../../classes/dateUtility';\r\nimport { FormGroup, AbstractControl, FormBuilder, Validators, ValidatorFn } from '@angular/forms';\r\nimport { IrrigationEventFields } from '../main';\r\nimport { IIrrigationMethod } from '../../../models/irrigation-method/interfaces';\r\nimport { IrrigationEventUpdateParams } from '../irrigationEventUpdateParams';\r\nimport { PlantingRecalculatorService } from '../../planting-recalculate-modal/plantingRecalculatorService';\r\n\r\nexport type HistoricalIrrigationEventFields = 'EventDate' | 'IrrigationMethodId';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'historical-ui',\r\n\ttemplateUrl: 'historical-ui.html',\r\n\tstyleUrls: ['historical-ui.scss']\r\n})\r\n\r\nexport class HistoricalUIComponent implements OnInit {\r\n\r\n\tpublic form: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic historicalEventSaved$: Subject<void>;\r\n\r\n\t@Output()\r\n\tpublic isHistoricalIrrigationDatePickerOpen: EventEmitter<boolean> = new EventEmitter();\r\n\r\n\t@Input()\r\n\tpublic irrigationMethods: IIrrigationMethod[];\r\n\r\n\t@Input()\r\n\tpublic parentForm: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic plantingId: number;\r\n\r\n\t@Input()\r\n\tpublic wetDate: Date;\r\n\r\n\tprivate _isSaving: boolean;\r\n\r\n\tpublic get f(): { [key in HistoricalIrrigationEventFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in HistoricalIrrigationEventFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get pf(): { [key in IrrigationEventFields]: AbstractControl } {\r\n\t\treturn this.parentForm.controls as { [key in IrrigationEventFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate irrigationService: IrrigationService,\r\n\t\tprivate ranchService: RanchService,\r\n\t\tprivate _plantingRecalculateService: PlantingRecalculatorService,\r\n\t\tprivate updateService: UpdateService) { }\r\n\r\n\tngOnInit() {\r\n\t\t// default historical date is one day before event date, so its close to the event\r\n\t\t// date, and valid\r\n\r\n\t\tif (!this.pf || this.pf.EventDate.invalid) {\r\n\t\t\tthrow new Error('this.event.EventDate is invalid');\r\n\t\t}\r\n\r\n\t\tthis._initializeForm(this.pf.EventDate.value);\r\n\t\tthis._isSaving = false;\r\n\t}\r\n\r\n\tpublic getMinDateBeforeIrrigationEvent(): Date {\r\n\t\treturn DateUtility.addDays(this.pf.EventDate.value, -1 * IRRIGATION_RECENCY_DAYS);\r\n\t}\r\n\r\n\tpublic onCalendarToggle(event: number): void {\r\n\t\tthis.isHistoricalIrrigationDatePickerOpen.emit(event === 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Public, called by parent template\r\n\t */\r\n\tpublic save() {\r\n\t\tlet irrigationEvent: IrrigationEventUpdateParams;\r\n\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.plantingId) {\r\n\t\t\tthrow new Error('planting ID is not set');\r\n\t\t}\r\n\r\n\t\tif (!this.wetDate) {\r\n\t\t\tthrow new Error('wetDate is not set');\r\n\t\t}\r\n\r\n\t\tirrigationEvent = new IrrigationEventUpdateParams(null);\r\n\t\tirrigationEvent.setDate(this.f.EventDate.value);\r\n\t\tirrigationEvent.IrrigationMethodId = this.f.IrrigationMethodId.value;\r\n\r\n\t\tif (this._isSaving) { // prevent double submit\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._isSaving = true;\r\n\r\n\t\tthis.irrigationService.create(this.plantingId, irrigationEvent)\r\n\t\t\t.then(res => {\r\n\t\t\t\tlet eventGroup: EventGroup;\r\n\r\n\t\t\t\tthis._isSaving = false;\r\n\r\n\t\t\t\tif (!res || !res.Events || !res.Events[0].Irrigation) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tEventGroup.updateEvents(res.EventGroupsSucceeding, this.plantingId,\r\n\t\t\t\t\tthis.wetDate, this.ranchService);\r\n\r\n\t\t\t\teventGroup = new EventGroup();\r\n\t\t\t\teventGroup.convert(res.Events[0], this.wetDate);\r\n\r\n\t\t\t\teventGroup.Id = res.Id;\r\n\r\n\t\t\t\tthis.ranchService.plantings.addEventToPlantings(eventGroup, this.plantingId);\r\n\t\t\t\tthis.updateService.setPlantingsUpdated(this.updateService.currentRanchId, new Date());\r\n\t\t\t\t// update event snapshot\r\n\t\t\t\tthis.historicalEventSaved$.next();\r\n\t\t\t\tthis._plantingRecalculateService.recalculate(this.plantingId, true);\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates whether EventDate is within IRRIGATION_RECENCY_DAYS\r\n\t * @param eventDate\r\n\t */\r\n\tprivate _eventDateValidator(eventDate: Date): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet daysUntilEventDate: number;\r\n\r\n\t\t\tdaysUntilEventDate = DateUtility.daysBetweenDates(control.value, eventDate);\r\n\r\n\t\t\tif (daysUntilEventDate > IRRIGATION_RECENCY_DAYS) {\r\n\t\t\t\treturn {'dateTooEarly': {value: control.value}};\r\n\t\t\t} else if (daysUntilEventDate < 1) {\r\n\t\t\t\treturn {'dateTooLate': {value: control.value}};\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _initializeForm(eventDate: Date): void {\r\n\t\tlet d: Date;\r\n\r\n\t\td = new Date(eventDate);\r\n\t\td.setDate(d.getDate() - 1); // default to day before parent event date, since\r\n\t\t// we're creating a previous irrigation event\r\n\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tEventDate: [d, [Validators.required, this._eventDateValidator(eventDate)]],\r\n\t\t\tIrrigationMethodId: [null, Validators.required],\r\n\t\t});\r\n\t}\r\n}\r\n","import { IEventGroup, IRawEvent, IEventPostResponseJSON } from '../../models/event/interfaces';\r\nimport { IIrrigationMethod } from '../../models/irrigation-method/interfaces';\r\nimport { EventResponse } from '../../models/event/eventResponse';\r\nimport { IrrigationEventUpdateParams } from './irrigationEventUpdateParams';\r\n\r\nexport interface EvaporationRecordSimple {\r\n\tDate: Date,\r\n\tETo: number,\r\n\tETc: number,\r\n\tRain: number,\r\n\tApplied?: number,\r\n}\r\n\r\nexport interface EvaporationRecordJSON {\r\n\tDate: string,\r\n\tETo: number,\r\n\tETe?: number,\r\n\tETcAdjusted: number,\r\n\tKe?: number,\r\n\tKc: number,\r\n\tKcFinal: number,\r\n\tKs: number,\r\n\tRain: number,\r\n\tApplied?: number,\r\n\tIrrigationMethodId?: number,\r\n\tIrrigationFactor?: number,\r\n}\r\n\r\nexport interface IrrigationRecommendationSimpleModel {\r\n\tEventDate: Date;\r\n\tRecommendedIrrigationAmount: number,\r\n\tAvailableWater: number,\r\n\tAverageCropET: number,\r\n\tAverageRainfall: number,\r\n\tSumET: number,\r\n\tCropCoefficientSum: number,\r\n\tLeechingFactor?: number,\r\n\tDistribution: number,\r\n\tTotalPrecipitation: number,\r\n\tCIMISRainfall: number,\r\n\tDaysSinceLastIrrigation: number,\r\n\tBaseIrrigationAmount: number,\r\n\tAverageCropCoefficient: number,\r\n\tLastIrrigationEventDate: number,\r\n\tCropSensitivity?: number\r\n}\r\n\r\n/**\r\n * Similar to SingleCallIrrigationRecommendationModel but customized to send\r\n * the minimimum amount of data to server\r\n */\r\nexport interface SimpleSingleCallIrrigationRecommendationModel {\r\n\tEventDate: Date,\r\n\tCropTypeId: number,\r\n\tWetDate: Date,\r\n\tHarvestDate: Date,\r\n\tWeatherStationId: number,\r\n\tAgeOfCrop: number,\r\n\tLatitude: number,\r\n\tLongitude: number,\r\n\tSoilProperties: SingleCallSoilTypeModel,\r\n\tIrrigationEvents: SingleCallIrrigationEventModel[]\r\n}\r\n\r\nexport interface SingleCallIrrigationEventModel {\r\n\tEventDate: Date,\r\n\tMethodId: number,\r\n\tApplied: number\r\n}\r\n\r\nexport interface SingleCallSoilTypeModel {\r\n\tSand: number,\r\n\tSilt: number\r\n}\r\n\r\n/**\r\n * Mirror of IrrigationRecommendationSummaryModel\r\n */\r\nexport interface IIrrigationRecommendationSummaryModel {\r\n\tRecommendedIrrigationInterval: number,\r\n\tAvailableWater: number,\r\n\tAverageCropET: number,\r\n\tAverageRainfall?: number,\r\n\tBaseIrrigationAmount: number,\r\n\tAverageCropCoefficient: number,\r\n\tDaysSinceLastIrrigation: number,\r\n\tDistribution: number,\r\n\tRecommendedIrrigationAmount: number,\r\n\tLeechingFactor: number,\r\n\tTotalPrecipitation: number,\r\n\tCIMISRainfall: string,\r\n\tSumET?: number,\r\n\tapplicationRate?: number,\r\n\tCropCoefficientSum?: number,\r\n\tCropSensitivity?: number,\r\n\tRecommendedIrrigationTime?: number,\r\n\tETEvents?: IETEvent[],\r\n\tValidRainEventsCount?: number,\r\n\tWetArea?: number,\r\n\tLastIrrigationEventDate: Date,\r\n\tHasRecentCutEvents?: boolean,\r\n\tHasRecentIrrigationEvent?: boolean,\r\n\tIsImpactedByMacroTunnel?: boolean,\r\n}\r\n\r\nexport interface IIrrigationRecommendationSummaryModelJSON {\r\n\tRecommendedIrrigationInterval: number,\r\n\tAvailableWater: number,\r\n\tAverageCropET: number,\r\n\tAverageRainfall?: number,\r\n\tBaseIrrigationAmount: number,\r\n\tAverageCropCoefficient: number,\r\n\tDaysSinceLastIrrigation: number,\r\n\tDistribution: number,\r\n\tRecommendedIrrigationAmount: number,\r\n\tLeechingFactor: number,\r\n\tTotalPrecipitation: number,\r\n\tCIMISRainfall: string,\r\n\tSumET?: number,\r\n\tapplicationRate?: number,\r\n\tCropCoefficientSum?: number,\r\n\tCropSensitivity?: number,\r\n\tRecommendedIrrigationTime?: number,\r\n\tETEvents?: IETEventJSON[],\r\n\tWetArea?: number,\r\n\tLastIrrigationEventDate: string,\r\n\tHasRecentCutEvents?: boolean,\r\n\tHasRecentIrrigationEvent?: boolean,\r\n\tIsImpactedByMacroTunnel?: boolean,\r\n\tValidRainEventsCount?: number,\r\n}\r\n\r\nexport interface IETEventJSON {\r\n\tET: number,\r\n\tEventDate: string,\r\n\tLastUpdateDate: string,\r\n\tSource: string\r\n}\r\n\r\nexport interface IETEvent {\r\n\tET: number,\r\n\tEventDate: Date,\r\n\tLastUpdateDate: Date,\r\n\tSource: string\r\n}\r\n\r\n/**\r\n* Response object from irrigationRecommendedNContribution call\r\n**/\r\nexport interface IIrrigationRecommendedNContribution {\r\n\tirrigationAmountRecommended: number,\r\n\tLastIrrigationMethod: number,\r\n\tSuccess: boolean,\r\n\tratio: number,\r\n\tPreviousIrrigationEventDate?: Date\r\n}\r\n\r\nexport interface IIrrigationRecommendedNContributionJSON {\r\n\tirrigationAmountRecommended: number,\r\n\tLastIrrigationMethod: number,\r\n\tSuccess: boolean,\r\n\tratio: number,\r\n\tPreviousIrrigationEventDate: string\r\n}\r\n\r\nexport interface IRawIrrigationEvent {\r\n\tMetainfo: string,\r\n\tId: number,\r\n\tIrrigationMethod: string,\r\n\tIrrigationMethodId: number,\r\n\tEventDate: string,\r\n\tRatio?: number,\r\n\tWaterApplied?: number,\r\n\tRainfall?: number,\r\n\tInterval: number,\r\n\tIsOnWetDate: boolean,\r\n\tRecommendationEventId: number,\r\n\r\n\tRecommendedIrrigationInterval?: number,\r\n\tRecommendedIrrigationAmount: number,\r\n\tRecommendedIrrigationTime: number,\r\n\tManagerAmountRecommendation?: number,\r\n\tPlantingId: number,\r\n\r\n\tSprinklerApplicationRate?: number,\r\n\tDripApplicationRate?: number,\r\n\tMicroSprinklerApplicationRate?: number,\r\n\r\n\tLastUpdatedUser: string,\r\n\tHasFlowMeterData: boolean,\r\n\tFlowMeterGallons: number,\r\n\tFlowMeterArea: number,\r\n\r\n\tWetDate?: string,\r\n\tHasRecentCutEvent?: boolean,\r\n\tHasRecentIrrigationEvent?: boolean,\r\n\tContributingRainfall?: number,\r\n\tCustomDeficit?: number\r\n}\r\n\r\nexport interface IIrrigationEvent {\r\n\tId: number,\r\n\tIrrigationMethod: string, // virtual\r\n\tIrrigationMethodId: number,\r\n\tLastUpdatedUser: string,\r\n\tManagerAmountRecommendation: number,\r\n\tPlantingId: number,\r\n\tRatio: number,\r\n\tRecommendedIrrigationAmount: number,\r\n\tRecommendedIrrigationInterval: number,\r\n\tRecommendationEventId?: number,\r\n\tWaterApplied: number,\r\n\tIsRainfall: boolean,\r\n\tMetainfo: string,\r\n\tHasRecentIrrigationEvent: boolean,\r\n\tHasRecentCutEvent: boolean,\r\n\r\n\tEventDate: string, // virtual\r\n\tDisplayAmount?: number, // virtual,\r\n\r\n\t// raw model properties from combined events list\r\n\tRainfall?: number,\r\n\tInterval?: number,\r\n\tIsOnWetDate?: boolean,\r\n\r\n\tRecommendedIrrigationTime?: number,\r\n\tSprinklerApplicationRate?: number\r\n\tDripApplicationRate?: number,\r\n\tMicroSprinklerApplicationRate?: number,\r\n\tHasFlowMeterData?: boolean,\r\n\r\n\t// Below are required for user icon component.\r\n\t// There USED TO BE both flowMeterGallons and FlowMeterGallons (but been unified in the backend)\r\n\t// because one appears attached to plantings and other\r\n\t// is in all events popup.\r\n\r\n\tHasFlowmeterData?: boolean,\r\n\tFlowMeterGallons?: number,\r\n\tFlowMeterArea?: number,\r\n\r\n\tFlowMeterData?: { // virtual - used to figure out which flowmeter area to display, based on irrigation method\r\n\t\tDripArea: number,\r\n\t\tSprinklerArea: number,\r\n\t\tCalculatedArea: number\r\n\t}\r\n\r\n\t// View properties\r\n\tRecommendationInches?: number,\r\n\tRecommendationHours?: number,\r\n\tAppliedInches?: number,\r\n\tAppliedHours?: number,\r\n\tDisplayInches?: number,\r\n\tDisplayHours?: number,\r\n\tShowDetails?: boolean,\r\n\r\n\t// form only properties\r\n\tPlantingStartDate?: string,\r\n\tPlantingEndDate?: string,\r\n\tCustomDeficit?: number,\r\n}\r\n\r\nexport interface IIrrigationEventGetRecency {\r\n\tRecentIrrigationEventExists: boolean,\r\n\tRecentCutEventExists: boolean\r\n}\r\n\r\nexport interface IIrrigationEventForm {\r\n\tId: number,\r\n\tEventDate: Date,\r\n\tIrrigationMethodId: number,\r\n\tPlantingStartDate?: string,\r\n\tPlantingEndDate?: string,\r\n\tTensionFt1?: number,\r\n\tTensionFt2?: number,\r\n\tTensionFt3?: number,\r\n\tTensionFt4?: number,\r\n\tWetArea?: number\r\n}\r\n\r\n/** Base model should be the same as IrrigationEventEditJSON C# */\r\nexport interface IIrrigationEventEditBase {\r\n\tCIMISPrecipitation: string,\r\n\tDripApplicationRate: number,\r\n\tMicroSprinklerApplicationRate: number,\r\n\tSprinklerApplicationRate: number,\r\n\tDripFlowMeterArea: number;\r\n\tFlowMeterArea: number,\r\n\tMicroSprinklerFlowMeterArea: number,\r\n\tFlowMeterGallons: number,\r\n\tHasFlowMeterData: boolean,\r\n\tId: number,\r\n\tIrrigationMethodId: number,\r\n\tIrrigationMethods: IIrrigationMethod[],\r\n\tManagerAmountRecommendation: number,\r\n\tRainfall: number,\r\n\tRatio: number,\r\n\tRecentIrrigationEventExists: boolean,\r\n\tRecentCutEventExists: boolean,\r\n\tRecommendedHours?: number,\r\n\tRecommendedInterval: number,\r\n\tWaterApplied: number,\r\n\tisLastUpdatedUserCropManage: boolean,\r\n\trecalculateFlag: boolean,\r\n\trecalculateReason: boolean,\r\n\tnewRecommendationAmount: number,\r\n\tnewRecommendationTime: number,\r\n}\r\n\r\nexport interface IIrrigationEventEditJSON {\r\n\tCIMISPrecipitation: string,\r\n\tDripApplicationRate: number,\r\n\tMicroSprinklerApplicationRate: number,\r\n\tSprinklerApplicationRate: number,\r\n\tDripFlowMeterArea: number;\r\n\tFlowMeterArea: number,\r\n\tMicroSprinklerFlowMeterArea: number,\r\n\tFlowMeterGallons: number,\r\n\tHasFlowMeterData: boolean,\r\n\tId: number,\r\n\tIrrigationMethodId: number,\r\n\tIrrigationMethods: IIrrigationMethod[],\r\n\tManagerAmountRecommendation: number,\r\n\tManagerAmountRecommendationHours: number,\r\n\tRainfall: number,\r\n\tRatio: number,\r\n\tRecentIrrigationEventExists: boolean,\r\n\tRecentCutEventExists: boolean,\r\n\tRecommendedHours?: number,\r\n\tRecommendedInterval: number,\r\n\tWaterApplied: number,\r\n\tWaterAppliedHours: number,\r\n\tisLastUpdatedUserCropManage: boolean,\r\n\trecalculateFlag: boolean,\r\n\trecalculateReason: boolean,\r\n\tnewRecommendationTime: number,\r\n\tEndDate: string,\r\n\tEventDate: string,\r\n\tInitialDate: string,\r\n\tLastIrrigationEventDate: string,\r\n\tPlantingEndDate: string,\r\n\tPlantingStartDate: string,\r\n\tStartDate: string,\r\n\tRecommendedIrrigationAmount: string,\r\n\tnewRecommendationAmount: number,\r\n\tRecommendationSummary: IIrrigationRecommendationSummaryModelJSON,\r\n\tTensionFt1: number,\r\n\tTensionFt2: number,\r\n\tTensionFt3: number,\r\n\tTensionFt4: number,\r\n\tLastUpdated?: string, // last updated meta\r\n\tCustomDeficit?: number,\r\n\tAverageDeficit: number,\r\n\tDaysSinceLastIrrigation: number,\r\n\tIsCustomDeficitEnabled: boolean,\r\n}\r\n\r\nexport interface IIrrigationEventEditResponse extends IIrrigationEventEditBase {\r\n\tEndDate: Date,\r\n\tEventDate: Date,\r\n\tInitialDate: Date,\r\n\tLastIrrigationEventDate: Date,\r\n\tPlantingEndDate: Date,\r\n\tPlantingStartDate: Date,\r\n\tStartDate: Date,\r\n\tRecommendedIrrigationAmount: number,\r\n\tRecommendationSummary: IIrrigationRecommendationSummaryModel,\r\n\t//\r\n\tHarvestDate?: Date, // temporary fix\r\n\tendDate?: Date, // temporary fix\r\n\tstartDate?: string, // temporary fix\r\n\r\n\tnewRecommendationAmount: number,\r\n\tnewRecommendationTime: number,\r\n\tFlowMeterWaterApplied: number,\r\n\t// virtual\r\n\tFlowMeterCalculatedArea: number,\r\n\tLastUpdated?: string,\r\n\tWaterAppliedHours?: number,\r\n\tManagerAmountRecommendationHours?: number,\r\n\r\n\t// virtual\r\n\tTensionFt1?: number,\r\n\tTensionFt2?: number,\r\n\tTensionFt3?: number,\r\n\tTensionFt4?: number,\r\n\tDateOnly?: boolean,\r\n\tCustomDeficit?: number,\r\n\tAverageDeficit: number,\r\n\tDaysSinceLastIrrigation: number,\r\n\tIsCustomDeficitEnabled: boolean\r\n}\r\n\r\nexport interface IRainfallWeather {\r\n\tMetainfo: string,\r\n\tId: number,\r\n\tRainfall: number\r\n}\r\n\r\nexport interface IIrrigationObject {\r\n\tSprinklerApplicationRate: number,\r\n\tDripApplicationRate: number,\r\n\tMicroSprinklerApplicationRate: number,\r\n\tIrrigationMethodId: number,\r\n}\r\n\r\n/**\r\n * C# model\r\n */\r\n\r\n\r\n/**\r\nexport interface IrrigationEventUpdateParams {\r\n\tEventDate?: Date,\r\n\tIrrigationMethodId: number,\r\n\tManagerAmountRecommendation?: number,\r\n\tManagerAmountRecommendationHours?: number,\r\n\tWaterApplied?: number,\r\n\tWaterAppliedHours?: number\r\n}\r\n**/\r\n\r\n/**\r\n * This is identical to IrrigationEventCreateViewModel in C# which\r\n * is used to create irrigation events\r\n */\r\nexport interface IrrigationEventCreateViewModel {\r\n\tEventDate?: Date,\r\n\tIrrigationMethodId: number,\r\n\tTensionFt1?: number,\r\n\tTensionFt2?: number,\r\n\tTensionFt3?: number,\r\n\tTensionFt4?: number,\r\n\tHasRecentIrrigationEvent?: boolean,\r\n\tHasRecentCutEvent?: boolean,\r\n\tManagerAmountRecommendation?: number,\r\n\tManagerAmountRecommendationHours?: number,\r\n\tWaterApplied?: number,\r\n\tWaterAppliedHours?: number\r\n}\r\n\r\nexport interface IIrrigationEventEditViewModel {\r\n\tEventDate?: Date,\r\n\tIrrigationMethodId: number,\r\n\tTensionFt1?: number,\r\n\tTensionFt2?: number,\r\n\tTensionFt3?: number,\r\n\tTensionFt4?: number,\r\n\tManagerAmountRecommendation?: number,\r\n\tManagerAmountRecommendationHours?: number,\r\n\tRecommendedAmount: number,\r\n\tRecommendedInterval: number,\r\n\tRecommendedTime: number,\r\n\tRainfall: number,\r\n\tWaterApplied?: number,\r\n\tWaterAppliedHours?: number,\r\n\tDateOnly?: boolean\r\n}\r\n\r\nexport interface IIrrigationIntervalRecommendation {\r\n\tinterval: number,\r\n\tdate: Date\r\n}\r\n\r\n/**\r\n * Counterpart to IrrigationRecommendationModel in C#\r\n */\r\nexport interface IIrrigationRecommendationModel {\r\n\tPlantingId: number,\r\n\tEventDate: Date,\r\n\tStartDate?: Date,\r\n\tIrrigationMethodId: number,\r\n\tWetArea?: number\r\n}\r\n\r\nexport interface IAdditionalWaterModel {\r\n\tAverageReferenceET: number,\r\n\tReferenceET: number,\r\n\tAvailableSoilMoisture: number,\r\n\tCanopyCover: number,\r\n\tAvgCanopy: number,\r\n\tCropCoefficient: number,\r\n\tTotalCropET: number,\r\n\tCropStage: string,\r\n\tCummulativeWaterAppliedAndRainfall: number,\r\n\tEventDate: string,\r\n\tIsOnWetDate: boolean,\r\n\tId: number,\r\n\tIrrigationInterval: string,\r\n\tIrrigationMethod: string,\r\n\tRainfall: number,\r\n\tContributingRainfall: number,\r\n\tRatio: number,\r\n\tWaterApplied: number,\r\n\tPlantingId: number\r\n}\r\n\r\nexport interface IAverageDeficit {\r\n\tDeficit: number,\r\n\tDays: number\r\n}\r\n\r\nexport const IRRIGATION_INTERVAL_MAX = 15;\r\n\r\nexport interface IIrrigationEventService {\r\n\tirrigationMethods: IIrrigationMethod[],\r\n\tgetCreateModel(plantingId: number): Promise<IIrrigationEventEditResponse>,\r\n\tgetIrrigationIntervalSummary(id: number): Promise<IIrrigationRecommendationSummaryModel>,\r\n\tgetEditModel(id: number): Promise<IIrrigationEventEditResponse>,\r\n\tcountDuplicatesOnDate(plantingId: number, date: Date): Promise<number>,\r\n\tcreate(plantingId: number, event: IrrigationEventUpdateParams): Promise<IEventPostResponseJSON>,\r\n\tgetAverageDeficit(plantingId: number, targetDate: Date, eventId: number): Promise<IAverageDeficit>,\r\n\tgetRecency(id: number, eventDate: Date, plantingId: number):\r\n\t\tPromise<{ RecentIrrigationEventExists: boolean }>,\r\n\r\n\tgetRecommendationSummary(plantingId: number, eventDate: Date, irrigationMethodId: number,\r\n\t\teventId: number, CustomDeficit: number):\r\n\t\tPromise<IIrrigationRecommendationSummaryModel>\r\n\r\n\tupdate(event: IIrrigationEventEditResponse): Promise<EventResponse>,\r\n\tdelete(id: number): Promise<IEventPostResponseJSON>,\r\n\tgetAdditionalWaterData(id: number): Promise<IAdditionalWaterModel[]>,\r\n\r\n\tgetNContributionRecommendation(fertilizationEventId: number, startDate: Date, irrigationMethodId: number,\r\n\t\tdaysToNextFertilization: number, fertilizationsPerMonth: number):\r\n\t\tPromise<IIrrigationRecommendedNContribution>\r\n\r\n}\r\n","import * as moment from 'moment';\r\n\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\n\r\nimport { IRawIrrigationEvent, IRainfallWeather, IIrrigationEvent, IIrrigationEventEditResponse,\r\n\tIIrrigationIntervalRecommendation, IIrrigationEventEditJSON, IIrrigationRecommendationSummaryModelJSON,\r\n\tIIrrigationRecommendationSummaryModel,\r\n\tIETEvent,\r\n\tIAdditionalWaterModel} from './interfaces';\r\nimport { IEventGroup } from '../../models/event/interfaces';\r\n\r\nimport { eIrrigationMethods, eCommodityTypes,\r\n\tIRRIGATION_RECENCY_DAYS, CUTTING_RECENCY_DAYS } from '../../interfaces/constants';\r\n\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { IFlowmeterSetting } from './main';\r\nimport { TranslateService } from '../localization/service';\r\n\r\nexport enum eHistoricalIrrigationDateValidationStates {\r\n\tVALID = 1,\r\n\tEMPTY,\r\n\tOUT_OF_RANGE,\r\n\tPAST_IRRIGATION_EVENT\r\n}\r\n\r\nexport interface IUnitRatios {\r\n\tratio: number,\r\n\tinverse: number\r\n}\r\n\r\nexport class IrrigationEvent implements IIrrigationEvent {\r\n\r\n\t// for use in the historical irrigation ui\r\n\tpublic static readonly targetTensionValues: { name: string, value: number }[] = [\r\n\t\t{\r\n\t\t\tname: 'Dry',\r\n\t\t\tvalue: 1\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: 'Moderately Moist',\r\n\t\t\tvalue: 2\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: 'Wet/Saturated',\r\n\t\t\tvalue: 3\r\n\t\t}\r\n\t];\r\n\r\n\tpublic Id: number\r\n\tpublic IrrigationMethod: string; // virtual\r\n\tpublic IrrigationMethodId: number;\r\n\tpublic LastUpdatedUser: string;\r\n\tpublic ManagerAmountRecommendation: number;\r\n\tpublic PlantingId: number;\r\n\tpublic Ratio: number;\r\n\tpublic RecommendedIrrigationAmount: number;\r\n\tpublic RecommendedIrrigationInterval: number;\r\n\tpublic WaterApplied: number;\r\n\tpublic IsRainfall: boolean;\r\n\tpublic Metainfo: string;\r\n\r\n\tpublic EventDate: string; // virtual\r\n\tpublic DisplayAmount: number; // virtual,\r\n\r\n\t// raw model properties from combined events list\r\n\tpublic Rainfall: number;\r\n\tpublic Interval: number;\r\n\tpublic IsOnWetDate: boolean;\r\n\tpublic RecommendationEventId: number;\r\n\r\n\tpublic RecommendedIrrigationTime: number;\r\n\tpublic SprinklerApplicationRate: number;\r\n\tpublic DripApplicationRate: number;\r\n\tpublic MicroSprinklerApplicationRate: number;\r\n\tpublic HasFlowMeterData: boolean;\r\n\r\n\tpublic WetDate: Date;\r\n\tpublic HasRecentCutEvent: boolean;\r\n\tpublic HasRecentIrrigationEvent: boolean;\r\n\r\n\t// Below are required for user icon component.\r\n\t// There USED TO BE both flowMeterGallons and FlowMeterGallons (but been unified in the backend)\r\n\t// because one appears attached to plantings and other\r\n\t// is in all events popup.\r\n\tpublic HasFlowmeterData: boolean;\r\n\tpublic FlowMeterGallons: number;\r\n\tpublic FlowMeterArea: number;\r\n\tpublic ContributingRainfall: number;\r\n\tpublic CumulativeRainfall: number; // combination of a day's rainfall and contributing rainfall from prior dates\r\n\tpublic CustomDeficit: number;\r\n\r\n\tpublic FlowMeterData: { // virtual - used to figure out which flowmeter area to display, based on irrigation method\r\n\t\tDripArea: number,\r\n\t\tSprinklerArea: number,\r\n\t\tCalculatedArea: number\r\n\t}\r\n\r\n\t// View properties\r\n\tpublic RecommendationInches: number;\r\n\tpublic RecommendationHours: number;\r\n\tpublic AppliedInches: number;\r\n\tpublic AppliedHours: number;\r\n\tpublic DisplayInches: number;\r\n\tpublic DisplayHours: number;\r\n\tpublic ShowDetails: boolean;\r\n\t// currently undefined structure\r\n\tpublic AdditionalData: IAdditionalWaterModel;\r\n\r\n\tprivate _ts: TranslateService; // used for translation\r\n\r\n\t/**\r\n     * TODO: This method should not take methods. It should just get the ratio.\r\n     * @param method\r\n     * @param sprinklerRate\r\n     * @param dripRate\r\n     * @param microSprinklerRate\r\n     */\r\n\tpublic static getUnitConversionRatio(method: eIrrigationMethods, sprinklerRate: number, dripRate: number,\r\n\t\tmicroSprinklerRate?: number): IUnitRatios {\r\n\r\n\t\tlet ratios: IUnitRatios;\r\n\r\n\t\tratios = {\r\n\t\t\tratio: null,\r\n\t\t\tinverse: null\r\n\t\t};\r\n\r\n\t\tswitch (method) {\r\n\t\t\tcase eIrrigationMethods.SPRINKLER:\r\n\t\t\tcase eIrrigationMethods.GERMINATION_SPRINKLER:\r\n\t\t\t\tratios.ratio = sprinklerRate;\r\n\t\t\t\tbreak;\r\n\t\t\tcase eIrrigationMethods.DRIP:\r\n\t\t\t\tratios.ratio = dripRate;\r\n\t\t\t\tbreak;\r\n\t\t\tcase eIrrigationMethods.MICRO_SPRINKLER:\r\n\t\t\t\tratios.ratio = microSprinklerRate;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tratios.ratio = 1;\r\n\t\t}\r\n\r\n\t\tif (!ratios.ratio) {\r\n\t\t\tratios.ratio = 1;\r\n\t\t\tratios.inverse = 1;\r\n\t\t} else {\r\n\t\t\tratios.inverse = 1 / ratios.ratio;\r\n\t\t}\r\n\r\n\t\treturn ratios;\r\n\t}\r\n\r\n\t/**\r\n\t * TODO: This needs to be combined with calculate.service.ts.. these two methods are creating double points of entry\r\n\t * Actually TRIPLE because of the function below\r\n\t * Use the one with pure parameters and get rid of other versions\r\n\t * @param inches\r\n\t */\r\n\tpublic static convertInchesToHours(inches: number, method: eIrrigationMethods, sprinklerRate: number, dripRate: number,\r\n\t\tmicroSprinklerRate?: number): number {\r\n\t\tlet ratios: IUnitRatios;\r\n\r\n\t\tif (!inches) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tratios = IrrigationEvent.getUnitConversionRatio(method, sprinklerRate, dripRate, microSprinklerRate);\r\n\r\n\t\treturn inches / ratios.ratio;\r\n\t}\r\n\r\n\tpublic static getCropManageRecommendedIrrigationDate(lastIrrigationDate: Date, interval: number): Date {\r\n\r\n\t\tif (!lastIrrigationDate || !ValidateService.isValidNumber(interval)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tinterval = interval < 1 ? 1 : Math.round(interval);\r\n\r\n\t\treturn DateUtility.addDays(lastIrrigationDate, interval);\r\n\t}\r\n\r\n\t// TODO: Get rid of this method\r\n\tpublic static isFloodEvent(IrrigationMethodId: eIrrigationMethods): boolean {\r\n\t\treturn IrrigationMethodId === eIrrigationMethods.FLOOD;\r\n\t}\r\n\r\n\t/**\r\n     * used to show \"recommendation is NA\" warning\r\n     * if there are no applied or manager recommendation values and the cropmanage\r\n\t * recommendation is null (last irrigation event was too long ago)\r\n     * @param event\r\n     */\r\n\tpublic static isIrrigationRecommendationNotGeneratedWarningShown(event: IEventGroup): boolean {\r\n\t\tif (!event || !event.Irrigation) {\r\n\t\t\treturn false; ;\r\n\t\t}\r\n\r\n\t\treturn !ValidateService.isValidNumber(event.Irrigation.WaterApplied) &&\r\n\t\t\t!ValidateService.isValidNumber(event.Irrigation.ManagerAmountRecommendation)\r\n\t\t\t&& !ValidateService.isValidNumber(event.Irrigation.RecommendedIrrigationAmount);\r\n\t}\r\n\r\n\tpublic static isRecommendationNA(event: IrrigationEvent, values: number[]): boolean {\r\n\t\tlet eventDate: Date;\r\n\r\n\t\tif (!event || !values || !values.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\teventDate = DateUtility.DotNetToDate(event.EventDate);\r\n\r\n\t\tif (event.IsRainfall || event.IrrigationMethodId === eIrrigationMethods.RAINFALL // it is rainfall\r\n\t\t\t|| (event.IrrigationMethodId === eIrrigationMethods.GERMINATION_SPRINKLER && event.IsOnWetDate)\r\n\t\t\t// it is germination sprinkler and on wet date\r\n\t\t\t|| !ValidateService.isValidNumber(event.RecommendationEventId) || event.RecommendationEventId <= 0 // recomendation event id is invalid\r\n\t\t\t|| DateUtility.daysBetweenDates(event.WetDate, eventDate) <= 0) { // it is on or before wet date\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfor (let value of values) {\r\n\t\t\tif (ValidateService.isValidNumber(value) && value >= 0) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n     * We simply show or hide leaf based on LastUpdatedUser string, which is empty\r\n     * if system last updated the event. We no longer use the leaf to distinguish between\r\n     * cropManage recommendation or manager\r\n     * @param event\r\n     */\r\n\tpublic static shouldShowLeafIcon(event: IIrrigationEvent): boolean {\r\n\t\tif (!event.LastUpdatedUser) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n     * Return interval and date.\r\n     * WARNING: Also sets last Irrigation event date and recommended interval\r\n     * for the event\r\n     *\r\n     * @param event\r\n     */\r\n\tpublic static getIntervalRecommendation(\r\n\t\tlastIrrigationDate: Date, recommendedInterval: number): IIrrigationIntervalRecommendation {\r\n\r\n\t\tlet result: IIrrigationIntervalRecommendation;\r\n\r\n\t\tresult = {\r\n\t\t\tdate: null,\r\n\t\t\tinterval: null\r\n\t\t};\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tif (lastIrrigationDate === null) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tresult.date = IrrigationEvent.\r\n\t\t\tgetCropManageRecommendedIrrigationDate(lastIrrigationDate,\r\n\t\t\t\trecommendedInterval);\r\n\r\n\t\tresult.interval = DateUtility.daysBetweenDates(lastIrrigationDate,\r\n\t\t\tresult.date);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static getEmptyEditResponse(): IIrrigationEventEditResponse {\r\n\t\tlet result: IIrrigationEventEditResponse;\r\n\r\n\t\tresult = {\r\n\t\t\tAverageDeficit: null,\r\n\t\t\tDaysSinceLastIrrigation: null,\r\n\t\t\tCIMISPrecipitation: null,\r\n\t\t\tDripApplicationRate: null,\r\n\t\t\tMicroSprinklerApplicationRate: null,\r\n\t\t\tDripFlowMeterArea: null,\r\n\t\t\tFlowMeterArea: null,\r\n\t\t\tMicroSprinklerFlowMeterArea: null,\r\n\t\t\tFlowMeterGallons: null,\r\n\t\t\tFlowMeterCalculatedArea: null,\r\n\t\t\tHasFlowMeterData: null,\r\n\t\t\tId: null,\r\n\t\t\tIrrigationMethodId: null,\r\n\t\t\tIrrigationMethods: null,\r\n\t\t\tIsCustomDeficitEnabled: null,\r\n\t\t\tManagerAmountRecommendation: null,\r\n\t\t\tRainfall: null,\r\n\t\t\tRatio: null,\r\n\t\t\tRecentIrrigationEventExists: null,\r\n\t\t\tRecentCutEventExists: null,\r\n\t\t\tRecommendationSummary: null,\r\n\t\t\tRecommendedHours: null,\r\n\t\t\tRecommendedInterval: null,\r\n\t\t\tRecommendedIrrigationAmount: null,\r\n\t\t\tSprinklerApplicationRate: null,\r\n\t\t\tWaterApplied: null,\r\n\t\t\tisLastUpdatedUserCropManage: null,\r\n\t\t\tnewRecommendationAmount: null,\r\n\t\t\tnewRecommendationTime: null,\r\n\t\t\tFlowMeterWaterApplied: null,\r\n\t\t\trecalculateFlag: null,\r\n\t\t\trecalculateReason: null,\r\n\t\t\tEndDate: null,\r\n\t\t\tEventDate: null,\r\n\t\t\tInitialDate: null,\r\n\t\t\tLastIrrigationEventDate: null,\r\n\t\t\tPlantingEndDate: null,\r\n\t\t\tPlantingStartDate: null,\r\n\t\t\tStartDate: null,\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static convertRecommendationSummaryJSON(d: IIrrigationRecommendationSummaryModelJSON): IIrrigationRecommendationSummaryModel {\r\n\t\tlet result: IIrrigationRecommendationSummaryModel;\r\n\r\n\t\tif (!d) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!d) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = {\r\n\t\t\tRecommendedIrrigationAmount: d.RecommendedIrrigationAmount,\r\n\t\t\tRecommendedIrrigationInterval: d.RecommendedIrrigationInterval,\r\n\t\t\tRecommendedIrrigationTime: d.RecommendedIrrigationTime,\r\n\t\t\tAverageRainfall: d.AverageRainfall,\r\n\t\t\tapplicationRate: d.applicationRate,\r\n\t\t\tAvailableWater: d.AvailableWater,\r\n\t\t\tAverageCropET: d.AverageCropET,\r\n\t\t\tAverageCropCoefficient: d.AverageCropCoefficient,\r\n\t\t\tBaseIrrigationAmount: d.BaseIrrigationAmount,\r\n\t\t\tDaysSinceLastIrrigation: d.DaysSinceLastIrrigation,\r\n\t\t\tIsImpactedByMacroTunnel: d.IsImpactedByMacroTunnel,\r\n\t\t\tDistribution: d.Distribution,\r\n\t\t\tLeechingFactor: d.LeechingFactor,\r\n\t\t\tTotalPrecipitation: d.TotalPrecipitation,\r\n\t\t\tCIMISRainfall: d.CIMISRainfall,\r\n\t\t\tSumET: d.SumET,\r\n\t\t\tCropCoefficientSum: d.CropCoefficientSum,\r\n\t\t\tCropSensitivity: d.CropSensitivity,\r\n\t\t\tETEvents: null,\r\n\t\t\tWetArea: d.WetArea,\r\n\t\t\tHasRecentCutEvents: d.HasRecentCutEvents,\r\n\t\t\tHasRecentIrrigationEvent: d.HasRecentIrrigationEvent,\r\n\t\t\tLastIrrigationEventDate: DateUtility.DotNetToDate(d.LastIrrigationEventDate),\r\n\t\t\tValidRainEventsCount: d.ValidRainEventsCount,\r\n\t\t};\r\n\r\n\t\tif (d.ETEvents) {\r\n\t\t\tresult.ETEvents = new Array();\r\n\r\n\t\t\tfor (let etEvent of d.ETEvents) {\r\n\t\t\t\tlet target: IETEvent;\r\n\r\n\t\t\t\ttarget = {\r\n\t\t\t\t\tET: etEvent.ET,\r\n\t\t\t\t\tEventDate: DateUtility.DotNetToDate(etEvent.EventDate),\r\n\t\t\t\t\tLastUpdateDate: DateUtility.DotNetToDate(etEvent.LastUpdateDate),\r\n\t\t\t\t\tSource: etEvent.Source\r\n\t\t\t\t};\r\n\r\n\t\t\t\tresult.ETEvents.push(target);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static convertEditJSONtoResponse(data: IIrrigationEventEditJSON): IIrrigationEventEditResponse {\r\n\t\tlet result: IIrrigationEventEditResponse;\r\n\r\n\t\tresult = {\r\n\t\t\tAverageDeficit: data.AverageDeficit,\r\n\t\t\tDaysSinceLastIrrigation: data.DaysSinceLastIrrigation,\r\n\t\t\tCIMISPrecipitation: data.CIMISPrecipitation,\r\n\t\t\tCustomDeficit: data.CustomDeficit,\r\n\t\t\tDripApplicationRate: data.DripApplicationRate,\r\n\t\t\tDripFlowMeterArea: data.DripFlowMeterArea,\r\n\t\t\tEndDate: DateUtility.DotNetToDate(data.EndDate),\r\n\t\t\tEventDate: DateUtility.DotNetToDate(data.EventDate),\r\n\t\t\tFlowMeterWaterApplied: null,\r\n\t\t\tFlowMeterArea: data.FlowMeterArea,\r\n\t\t\tFlowMeterCalculatedArea: null, // need to be calculated - virtual\r\n\t\t\tFlowMeterGallons: data.FlowMeterGallons,\r\n\t\t\tHasFlowMeterData: data.HasFlowMeterData,\r\n\t\t\tInitialDate: DateUtility.DotNetToDate(data.InitialDate),\r\n\t\t\tIrrigationMethodId: data.IrrigationMethodId,\r\n\t\t\tIrrigationMethods: data.IrrigationMethods,\r\n\t\t\tId: data.Id,\r\n\t\t\tIsCustomDeficitEnabled: data.IsCustomDeficitEnabled,\r\n\t\t\tisLastUpdatedUserCropManage: data.isLastUpdatedUserCropManage,\r\n\t\t\tLastIrrigationEventDate: DateUtility.DotNetToDate(data.LastIrrigationEventDate),\r\n\t\t\tLastUpdated: data.LastUpdated,\r\n\t\t\tManagerAmountRecommendation: data.ManagerAmountRecommendation,\r\n\t\t\tManagerAmountRecommendationHours: data.ManagerAmountRecommendationHours,\r\n\t\t\tMicroSprinklerApplicationRate: data.MicroSprinklerApplicationRate,\r\n\t\t\tMicroSprinklerFlowMeterArea: data.MicroSprinklerFlowMeterArea,\r\n\t\t\tnewRecommendationAmount: null,\r\n\t\t\tnewRecommendationTime: null,\r\n\t\t\tPlantingEndDate: DateUtility.DotNetToDate(data.PlantingEndDate),\r\n\t\t\tPlantingStartDate: DateUtility.DotNetToDate(data.PlantingStartDate),\r\n\t\t\tRainfall: data.Rainfall,\r\n\t\t\tRatio: data.Ratio,\r\n\t\t\trecalculateFlag: data.recalculateFlag,\r\n\t\t\trecalculateReason: data.recalculateReason,\r\n\t\t\tRecentCutEventExists: data.RecentCutEventExists,\r\n\t\t\tRecentIrrigationEventExists: data.RecentIrrigationEventExists,\r\n\t\t\tRecommendationSummary: IrrigationEvent.convertRecommendationSummaryJSON(data.RecommendationSummary),\r\n\t\t\tRecommendedHours: data.RecommendedHours,\r\n\t\t\tRecommendedInterval: data.RecommendedInterval,\r\n\t\t\tRecommendedIrrigationAmount: parseFloat(data.RecommendedIrrigationAmount),\r\n\t\t\tSprinklerApplicationRate: data.SprinklerApplicationRate,\r\n\t\t\tStartDate: DateUtility.DotNetToDate(data.StartDate),\r\n\t\t\tWaterApplied: data.WaterApplied,\r\n\t\t\tWaterAppliedHours: data.WaterAppliedHours,\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static getFlowMeterArea(methodId: number, setting: IFlowmeterSetting): number {\r\n\r\n\t\tlet result: number;\r\n\r\n\t\tif (!setting) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tswitch (methodId) {\r\n\t\t\tcase eIrrigationMethods.DRIP:\r\n\t\t\t\tresult = setting.areas.drip;\r\n\t\t\t\tbreak;\r\n\t\t\tcase eIrrigationMethods.MICRO_SPRINKLER:\r\n\t\t\t\tresult = setting.areas.microSprinkler;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\t// defaults to sprinkler flowmeter area, specified in planting settings\r\n\t\t\t\tresult = setting.areas.default;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Determins if \"missing applied value\" warning should be displayed. If an irrigation\r\n\t * method is not rainfall or germination sprinkler, the event is scheduled for\r\n\t * the past, and if water applied is null, display a warning, even if the\r\n\t * CropManage recommendation is N/A.\r\n\t * @param irrigation\r\n\t * @param past\r\n\t * @returns\r\n\t */\r\n\tpublic static shouldShowAppliedAmountMissingWarning(irrigation: IIrrigationEvent, past: boolean): boolean {\r\n\t\tif (!irrigation) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!past) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (irrigation.WaterApplied !== null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (irrigation.IrrigationMethodId === eIrrigationMethods.RAINFALL ||\r\n\t\t\tirrigation.IrrigationMethodId === eIrrigationMethods.GERMINATION_SPRINKLER) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic constructor(translateService?: TranslateService) {\r\n\t\tthis._ts = translateService;\r\n\t}\r\n\r\n\t/**\r\n     * In event all tab, we show NA if recommendation is invalid AND applied value is null. We ignore manager amount.\r\n     *\r\n     * Used in events snapshot, events table and list.\r\n     * Logic should be 1) is recommendation NA? (Ideally the backend should return -1 when recommendation is not calculated\r\n     * then look at manager recommendation/applied value to resolve)\r\n     *\r\n     * @param event\r\n     */\r\n\tpublic isNA(event: IIrrigationEvent, wetDate: Date): boolean {\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (event.RecommendationInches > 0) {\r\n\t\t\t// if recommendation is non zero, display the recommendation - otherwise\r\n\t\t\t// recommendation not applied icon will display together with N/A and confuse users\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// show N/A if on or before wet date and there are no other values\r\n\t\tif (DateUtility.isOnOrBefore(DateUtility.DotNetToDate(event.EventDate), wetDate)\r\n\t\t\t&& !ValidateService.isValidNumber(event.WaterApplied) &&\r\n\t\t\t!ValidateService.isValidNumber(event.ManagerAmountRecommendation)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (event.DisplayAmount >= 0) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (event.RecommendedIrrigationAmount === -1) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t\t/**\r\n     * Get inches for a \"combined\" field, which may show recommendation or applied value, depending on the situation\r\n     *\r\n     * @param event\r\n     * @param rainfallWeather\r\n     */\r\n\tpublic getDisplayInches(event: IIrrigationEvent, rainfallWeather?: IRainfallWeather): number {\r\n\t\tif (!event) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (event.IrrigationMethodId === eIrrigationMethods.RAINFALL) {\r\n\t\t\treturn rainfallWeather ? rainfallWeather.Rainfall : event.DisplayInches ? event.DisplayInches : 0;\r\n\t\t}\r\n\r\n\t\tif (event.WaterApplied !== null) {\r\n\t\t\treturn event.WaterApplied;\r\n\t\t}\r\n\r\n\t\tif (event.ManagerAmountRecommendation !== null) {\r\n\t\t\treturn event.ManagerAmountRecommendation;\r\n\t\t}\r\n\r\n\t\tif (event.RecommendedIrrigationAmount !== null) {\r\n\t\t\treturn event.RecommendedIrrigationAmount;\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t}\r\n\r\n\t/**\r\n     * Get number of hours to show in a \"combined\" field, where applied, manager, or recommendation hours\r\n     * may show, depending on the situation\r\n     *\r\n     * @param event\r\n     * @param rainfallWeather\r\n     */\r\n\tpublic getDisplayHours(event: IIrrigationEvent): number {\r\n\t\tlet result: number;\r\n\t\tlet displayInches: number; // number to display in the UI, depending on the situation\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (event.RecommendedIrrigationAmount) {\r\n\t\t\tevent.RecommendedIrrigationAmount = ValidateService.roundTo2DecimalPlaces(event.RecommendedIrrigationAmount)\r\n\t\t}\r\n\r\n\t\tdisplayInches = this.getDisplayInches(event);\r\n\r\n\t\tresult = IrrigationEvent.convertInchesToHours(displayInches, event.IrrigationMethodId, event.SprinklerApplicationRate,\r\n\t\t\tevent.DripApplicationRate, event.MicroSprinklerApplicationRate);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic getWarningTextForAllTab(eventGroup: EventGroup, commodityTypeId: number): string {\r\n\t\tlet result: string;\r\n\r\n\t\tresult = '';\r\n\r\n\t\tif (!eventGroup) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tif (!eventGroup.Irrigation) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tif (!eventGroup.EventDate) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tif (IrrigationEvent.shouldShowAppliedAmountMissingWarning(eventGroup.Irrigation, eventGroup.isPast)) {\r\n\t\t\tresult = `${this._ts.translate('Enter an amount in the Water Applied field')}. `;\r\n\t\t}\r\n\r\n\t\tif (eventGroup.isOnOrBeforeWetDate === true) { // we don't need a warning for NA recommendations before planting start date\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tif (eventGroup.Irrigation.IrrigationMethodId === eIrrigationMethods.RAINFALL) { // don't need to worry about rainfall events\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tif (eventGroup.Irrigation.RecommendedIrrigationAmount === -1 &&\r\n\t\t\teventGroup.Irrigation.HasRecentIrrigationEvent === false) {\r\n\r\n\t\t\tresult += this.getWarningTextForIrrigation(eventGroup.EventDate);\r\n\t\t}\r\n\r\n\t\tif (commodityTypeId === eCommodityTypes.ALFALFA &&\r\n\t\t\teventGroup.Irrigation.HasRecentCutEvent === false) {\r\n\r\n\t\t\tresult += this.getWarningTextForCutting(eventGroup.EventDate);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic getWarningTextForCutting(eventDate: Date): string {\r\n\t\tlet result: string;\r\n\t\tlet recencyDate: Date;\r\n\r\n\t\trecencyDate = new Date(eventDate.getTime());\r\n\t\trecencyDate.setDate(recencyDate.getDate() - CUTTING_RECENCY_DAYS);\r\n\r\n\t\tresult = `${this._ts.translate('Please add a cutting event within')}\r\n\t\t\t${CUTTING_RECENCY_DAYS} ${this._ts.translate('days')} (${recencyDate.toLocaleDateString('en-US')})\r\n\t\t\t${this._ts.translate('prior to this event for more accurate recommendation')}. `;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic getWarningTextForIrrigation(eventDate: Date): string {\r\n\t\tlet result: string;\r\n\t\tlet recencyDate: Date;\r\n\r\n\t\tif (!eventDate) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\trecencyDate = new Date(eventDate.getTime());\r\n\t\trecencyDate.setDate(recencyDate.getDate() - IRRIGATION_RECENCY_DAYS);\r\n\r\n\t\tresult = `${this._ts.translate('Please add a recent irrigation event within')}\r\n\t\t\t${IRRIGATION_RECENCY_DAYS} ${this._ts.translate('days')} (${recencyDate.toLocaleDateString('en-US')})\r\n\t\t\t${this._ts.translate('prior to this event to receive a recommendation')}.`;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Used to display a warning icon next to the recommendation in\r\n\t * the irrigation event dialog\r\n\t *\r\n\t * @param isFloodEvent\r\n\t * @param units\r\n\t * @param recentCutEventExists\r\n\t * @param commodityTypeId\r\n\t * @param daysSinceLastIrrigation\r\n\t * @param validRainEventsCount\r\n\t */\r\n\tpublic getWarningTextRecommendation(isFloodEvent: boolean,\r\n\t\tunits: string, recentCutEventExists: boolean, commodityTypeId: number,\r\n\t\tdaysSinceLastIrrigation: number, validRainEventsCount: number, zeroETEventsCount: number, isFuture: boolean): string {\r\n\r\n\t\tlet result = '';\r\n\r\n\t\tif (units === 'inches' || isFloodEvent) {\r\n\t\t\tif (!recentCutEventExists && commodityTypeId === eCommodityTypes.ALFALFA) {\r\n\t\t\t\tresult += `${this._ts.translate('Recommendation is NA or inaccurate due to missing cut events')}.`;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (isFuture) {\r\n\t\t\tresult += `${this._ts.translate('Irrigation recommendations for future dates warning')}`;\r\n\t\t} else if (daysSinceLastIrrigation > validRainEventsCount) {\r\n\t\t\tlet difference: number;\r\n\r\n\t\t\tdifference = daysSinceLastIrrigation - validRainEventsCount;\r\n\r\n\t\t\tif (result) {\r\n\t\t\t\tresult += ' ';\r\n\t\t\t}\r\n\r\n\t\t\tresult += `${this._ts.translate('Recommendation is based on incomplete weather data')}.\r\n\t\t\t\t${difference} ${this._ts.translate('day(s) of rainfall data are missing')}.`;\r\n\t\t}\r\n\r\n\t\tif (zeroETEventsCount > 0) {\r\n\t\t\tresult += `${this._ts.translate('Inaccurate ET warning')}. `;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic convert(rawIrrigationEvent: IRawIrrigationEvent, rainfallWeather: IRainfallWeather, isFuture = true): void {\r\n\r\n\t\tthis.Metainfo = rawIrrigationEvent.Metainfo;\r\n\t\tthis.Id = rawIrrigationEvent.Id;\r\n\t\tthis.IrrigationMethod = rawIrrigationEvent.IrrigationMethod;\r\n\t\tthis.IrrigationMethodId = rawIrrigationEvent.IrrigationMethodId;\r\n\t\tthis.EventDate = rawIrrigationEvent.EventDate;\r\n\t\tthis.Ratio = rawIrrigationEvent.Ratio;\r\n\t\tthis.WaterApplied = rawIrrigationEvent.WaterApplied;\r\n\t\tthis.ContributingRainfall = rawIrrigationEvent.ContributingRainfall;\r\n\t\tif (rawIrrigationEvent.Rainfall !== null && rawIrrigationEvent.Rainfall !== undefined) {\r\n\t\t\tthis.Rainfall = rawIrrigationEvent.Rainfall;\r\n\t\t} else if (rainfallWeather) {\r\n\t\t\tthis.Rainfall = rainfallWeather.Rainfall;\r\n\t\t}\r\n\r\n\t\tthis.CumulativeRainfall = (this.Rainfall ? this.Rainfall : 0) +\r\n\t\t\t(rawIrrigationEvent.ContributingRainfall ? rawIrrigationEvent.ContributingRainfall : 0);\r\n\r\n\t\tthis.Interval = rawIrrigationEvent.Interval;\r\n\t\tthis.IsOnWetDate = rawIrrigationEvent.IsOnWetDate;\r\n\r\n\t\tthis.RecommendationEventId = rawIrrigationEvent.RecommendationEventId;\r\n\r\n\t\tthis.RecommendedIrrigationInterval = rawIrrigationEvent.RecommendedIrrigationInterval;\r\n\t\tthis.RecommendedIrrigationAmount = rawIrrigationEvent.RecommendedIrrigationAmount;\r\n\t\tthis.RecommendedIrrigationTime = rawIrrigationEvent.RecommendedIrrigationTime;\r\n\r\n\t\tthis.ManagerAmountRecommendation = rawIrrigationEvent.ManagerAmountRecommendation;\r\n\t\tthis.PlantingId = rawIrrigationEvent.PlantingId;\r\n\r\n\t\tthis.SprinklerApplicationRate = rawIrrigationEvent.SprinklerApplicationRate;\r\n\t\tthis.DripApplicationRate = rawIrrigationEvent.DripApplicationRate;\r\n\t\tthis.MicroSprinklerApplicationRate = rawIrrigationEvent.MicroSprinklerApplicationRate;\r\n\r\n\t\tthis.LastUpdatedUser = rawIrrigationEvent.LastUpdatedUser;\r\n\t\tthis.HasFlowMeterData = rawIrrigationEvent.HasFlowMeterData;\r\n\t\tthis.FlowMeterGallons = rawIrrigationEvent.FlowMeterGallons;\r\n\t\tthis.FlowMeterArea = rawIrrigationEvent.FlowMeterArea;\r\n\t\tthis.RecommendationInches = 0;\r\n\t\tthis.RecommendationHours = 0;\r\n\t\tthis.AppliedInches = 0;\r\n\t\tthis.AppliedHours = 0;\r\n\t\tthis.IsRainfall = false;\r\n\t\tthis.HasRecentCutEvent = rawIrrigationEvent.HasRecentCutEvent;\r\n\t\tthis.HasRecentIrrigationEvent = rawIrrigationEvent.HasRecentIrrigationEvent;\r\n\t\tthis.CustomDeficit = rawIrrigationEvent.CustomDeficit;\r\n\r\n\t\tthis.WetDate = DateUtility.DotNetToDate(rawIrrigationEvent.WetDate);\r\n\r\n\t\tif (!isFuture) {\r\n\t\t\tthis.AppliedInches = this.WaterApplied; // REFACTOR - appliedInches doesn't need to exit\r\n\r\n\t\t\tthis.AppliedHours = IrrigationEvent.convertInchesToHours(this.AppliedInches, this.IrrigationMethodId,\r\n\t\t\t\tthis.SprinklerApplicationRate, this.DripApplicationRate, this.MicroSprinklerApplicationRate);\r\n\t\t}\r\n\r\n\t\t// do not show manager recommendations in the table\r\n\t\tthis.RecommendationInches = this.RecommendedIrrigationAmount;\r\n\t\tthis.RecommendationHours = this.RecommendedIrrigationTime;\r\n\r\n\t\tif (this.IrrigationMethodId === eIrrigationMethods.RAINFALL) {\r\n\t\t\tthis.IsRainfall = true; // REFACTOR - this property doesn't need to exist\r\n\r\n\t\t\tthis.DisplayAmount = this.CumulativeRainfall; // REFACTOR - get rid of these redundant variables with unclear names\r\n\t\t\tthis.DisplayInches = this.CumulativeRainfall;\r\n\r\n\t\t\tif (rainfallWeather) {\r\n\t\t\t\tthis.DisplayHours = this.CumulativeRainfall;\r\n\t\t\t} else {\r\n\t\t\t\tthis.DisplayHours = this.CumulativeRainfall\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.IsRainfall = false;\r\n\r\n\t\t\tthis.DisplayInches = this.getDisplayInches(this, rainfallWeather);\r\n\t\t\tthis.DisplayAmount = this.DisplayInches;\r\n\t\t\tthis.DisplayHours = this.getDisplayHours(this);\r\n\t\t}\r\n\r\n\t\tthis.ShowDetails = false;\r\n\t}\r\n\r\n\t/**\r\n     * We display hours or inches for flood, depending on whether we're displaying calculated recommendation\r\n     * or not\r\n     */\r\n\tpublic getFloodAmount(): number {\r\n\r\n\t\tif (this.WaterApplied || this.ManagerAmountRecommendation) {\r\n\t\t\treturn this.RecommendationInches;\r\n\t\t} else {\r\n\t\t\treturn this.RecommendationHours;\r\n\t\t}\r\n\t}\r\n}\r\n","import { DateUtility } from '../../classes/dateUtility';\r\nimport { IIrrigationEventEditResponse } from './interfaces';\r\n\r\nexport class IrrigationEventUpdateParams {\r\n\tpublic EventDate?: Date;\r\n\tpublic IrrigationMethodId: number;\r\n\tpublic ManagerAmountRecommendation?: number;\r\n\tpublic ManagerAmountRecommendationHours?: number;\r\n\tpublic WaterApplied?: number;\r\n\tpublic WaterAppliedHours?: number;\r\n\tpublic CustomDeficit?: number;\r\n\tpublic IsCustomDeficitEnabled: boolean;\r\n\r\n\tpublic constructor(e: IIrrigationEventEditResponse) {\r\n\t\tif (!e) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.EventDate = DateUtility.ConvertToUTC(e.EventDate);\r\n\t\tthis.IrrigationMethodId =  e.IrrigationMethodId;\r\n\t\tthis.ManagerAmountRecommendation = e.ManagerAmountRecommendation;\r\n\t\tthis.ManagerAmountRecommendationHours = e.ManagerAmountRecommendationHours;\r\n\t\tthis.WaterApplied = e.WaterApplied;\r\n\t\tthis.WaterAppliedHours = e.WaterAppliedHours;\r\n\t\tthis.CustomDeficit = e.CustomDeficit;\r\n\t\tthis.IsCustomDeficitEnabled = e.IsCustomDeficitEnabled;\r\n\t}\r\n\r\n\tpublic setDate(d: Date): void {\r\n\t\tthis.EventDate = DateUtility.ConvertToUTC(d);\r\n\t}\r\n}\r\n","import { IIrrigationEventEditResponse } from './interfaces';\r\nimport { IrrigationEventUpdateParams } from './irrigationEventUpdateParams';\r\n\r\nexport class IrrigationEventUpdateParamsInternal extends IrrigationEventUpdateParams {\r\n\tRecommendedAmount: number;\r\n\tRecommendedInterval: number;\r\n\tRecommendedTime: number;\r\n\r\n\tpublic constructor(e: IIrrigationEventEditResponse) {\r\n\t\tsuper(e);\r\n\r\n\t\tif (e.RecommendationSummary) {\r\n\t\t\tthis.RecommendedAmount = e.RecommendationSummary.RecommendedIrrigationAmount;\r\n\t\t\tthis.RecommendedInterval = e.RecommendationSummary.RecommendedIrrigationInterval;\r\n\t\t\tthis.RecommendedTime = e.RecommendationSummary.RecommendedIrrigationTime;\r\n\t\t} else {\r\n\t\t\tthis.RecommendedAmount = -1;\r\n\t\t\tthis.RecommendedInterval = -1;\r\n\t\t\tthis.RecommendedTime = -1;\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n    <button type=\"button\"\r\n        *ngIf=\"!loadingData\"\r\n        class=\"bk-dialog__close\"\r\n        (click)=\"initiateCloseModal()\">\r\n\r\n        &times;\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>\r\n        <ng-container *ngIf=\"!eventId\">\r\n            {{'Add' | translate }}\r\n        </ng-container>\r\n        \r\n        <span *ngIf=\"eventId && f && f.IrrigationMethodId.value !== IRRIGATION_METHODS.RAINFALL\">\r\n            {{'Edit' | translate }} {{'Watering Event' | translate }}\r\n        </span>\r\n        <span *ngIf=\"eventId && f && f.IrrigationMethodId.value === IRRIGATION_METHODS.RAINFALL\">\r\n            {{ 'Significant'}} {{'Rainfall Event' | translate }}\r\n        </span>\r\n    </h4>\r\n\r\n    <div mat-dialog-content\r\n        *ngIf=\"loadingData || !form\"\r\n        class=\"cm-spinner-container\">\r\n        \r\n        <mat-spinner></mat-spinner>\r\n    </div>\r\n\r\n    <div mat-dialog-content\r\n        *ngIf=\"!loadingData\"\r\n        [ngClass]=\"{'bk-modal__irrigation--datepicker-open' : datePickerOpen }\">\r\n\r\n        <!-- event date-->\r\n\r\n        <form [formGroup]=form\r\n            class=\"bk-form\">\r\n\r\n            <div *ngIf=\"f.IrrigationMethodId.value === IRRIGATION_METHODS.RAINFALL\">\r\n                <div class=\"cm-dialog__form-section\">\r\n\r\n                    <div class=\"cm-dialog__label\">\r\n                        {{ 'Event Date' | translate }}\r\n                    </div>\r\n                    <div class=\"cm-dialog__text-below-label\">\r\n                        {{ f.EventDate.value | date:'M/d/yyyy'}}\r\n                    </div>\r\n                </div>\r\n\r\n                <div class=\"cm-dialog__form-section\">\r\n                    <div class=\"cm-dialog__label\">\r\n                        {{'Rainfall' | translate }}\r\n                    </div>\r\n                    <div class=\"cm-dialog__text-below-label\">\r\n                        {{CIMISPrecipitation | number: '1.0-2'}} {{'inches' | translate }}\r\n                    </div>\r\n                </div>\r\n                <div *ngIf=\"irrigationRecommendationDetails\"\r\n                    class=\"cm-dialog__form-section\">\r\n\r\n                    <div class=\"cm-dialog__label\">\r\n                        {{'Previous Rainfall' | translate }} <mat-icon class=\"bk-info-icon\" matTooltip=\"{{ 'Previous Rainfall Help Text' | translate }}\">\r\n                            info_outline\r\n                        </mat-icon>\r\n                    </div>\r\n                    <div class=\"cm-dialog__text-below-label\">\r\n                        {{irrigationRecommendationDetails.TotalPrecipitation | number: '1.0-2'}} {{'inches' | translate }}\r\n                    </div>\r\n                </div>\r\n                <div *ngIf=\"irrigationRecommendationDetails\"\r\n                    class=\"cm-dialog__form-section\">\r\n\r\n                    <div class=\"cm-dialog__label\">\r\n                        {{'Total Rainfall' | translate }}\r\n                    </div>\r\n                    <div class=\"cm-dialog__text-below-label--large\">\r\n                        {{irrigationRecommendationDetails.TotalPrecipitation + CIMISPrecipitation | number: '1.0-2'}} {{'inches' | translate }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <mat-form-field *ngIf=\"f.IrrigationMethodId.value !== IRRIGATION_METHODS.RAINFALL\"\r\n                appearance=\"fill\"\r\n                class='mat-form-field--one-line mat-form-field--short'>\r\n                <mat-label>{{ 'Event Date' | translate }}</mat-label>\r\n                <input matInput [matDatepicker]=\"picker\"\r\n                    formControlName=\"EventDate\"\r\n                    required\r\n                    [max]=\"maxDate\">\r\n                <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n                <mat-datepicker #picker></mat-datepicker>\r\n                <mat-error *ngIf=\"f.EventDate.invalid && (f.EventDate.dirty || f.EventDate.touched)\">\r\n                    <span *ngIf=\"f.EventDate.errors.hasDuplicates\">\r\n                        {{ \"There's already another irrigation event scheduled on this date\" | translate }}\r\n                    </span>\r\n                    <span *ngIf=\"!f.EventDate.errors.hasDuplicates\">\r\n                        {{'Planting Event Date Error Text' | translate }}\r\n                    </span>\r\n                </mat-error>\r\n            </mat-form-field>\r\n            <ng-container *ngIf=\"recommendationUpdating\">\r\n                <div class=\"bk-loader__container--small\">\r\n                    <div class=\"bk-loader--small\">\r\n                        {{'Loading' | translate }}...\r\n                    </div>\r\n                </div>\r\n            </ng-container>\r\n\r\n            <!-- irrigation method -->\r\n\r\n            <mat-form-field  *ngIf=\"f.IrrigationMethodId.value !== IRRIGATION_METHODS.RAINFALL\"\r\n                appearance=\"fill\"\r\n                class=\"mat-form-field--one-line mat-form-field--short\">\r\n                <mat-label>{{'Irrigation Method' | translate }}</mat-label>\r\n                <mat-select required\r\n                    formControlName=\"IrrigationMethodId\">\r\n                    <mat-option *ngFor=\"let method of irrigationMethods\"\r\n                        [value]=\"method.Id\">\r\n                        {{method.Name | translate }}\r\n                    </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"f.IrrigationMethodId.invalid && (f.IrrigationMethodId.dirty ||\r\n                f.IrrigationMethodId.touched)\">\r\n                    {{'Cannot be empty. Please select an option.' | translate }}\r\n                </mat-error>\r\n            </mat-form-field>\r\n\r\n            <!-- Deficit UI -->\r\n\r\n            <ng-container *ngIf=\"(isTree || planting.CommodityTypeId == COMMODITY_TYPES.PROCESSING_TOMATO)\r\n                && f.EventDate.value && averageDeficit && averageDeficit.Days > 0 &&\r\n                f.IrrigationMethodId.value !== IRRIGATION_METHODS.RAINFALL\">\r\n             \r\n                <mat-accordion>\r\n                    <mat-expansion-panel>\r\n                        <mat-expansion-panel-header>\r\n                            <mat-panel-title>\r\n                                {{ 'Deficit Irrigation' | translate }} <span class=\"cm-deficit-percentage\">{{ f.IsCustomDeficitEnabled.value && f.CustomDeficit.value !== null ?\r\n                                    f.CustomDeficit.value : averageDeficit.Deficit }}%</span>\r\n                            </mat-panel-title>\r\n                            <mat-panel-description></mat-panel-description>\r\n                        </mat-expansion-panel-header>\r\n                        <div class=\"cm-irrigation-dialog__deficit-ui__text\">\r\n                            {{ 'Based on your planting settings, CropManage will recommend' | translate }}\r\n                            <strong>{{ averageDeficit.Deficit }}%</strong> {{ 'of Crop ET\r\n                            between' | translate }} {{ lastIrrigationEventDate | date:'shortDate' }} {{ 'and' | translate }} {{ f.EventDate.value | date:'shortDate' }}.\r\n                        </div>\r\n        \r\n                        <mat-radio-group\r\n                            name=\"IsCustomDeficitEnabled\"\r\n                            formControlName=\"IsCustomDeficitEnabled\"\r\n                            aria-label=\"\">\r\n        \r\n                            <mat-radio-button\r\n                                [value]=\"false\"\r\n                                name=\"IsCustomDeficitEnabled\">\r\n                                {{ 'Keep Settings' | translate }}\r\n                            </mat-radio-button>\r\n        \r\n                            <mat-radio-button [value]=\"true\"\r\n                                name=\"IsCustomDeficitEnabled\">\r\n                                {{ 'Customize deficit for this irrigation' | translate }}\r\n                            </mat-radio-button>\r\n                        </mat-radio-group>\r\n            \r\n                        <mat-form-field appearance=\"fill\"\r\n                            *ngIf=\"f.IsCustomDeficitEnabled.value\"\r\n                            class=\"mat-form-field--one-line mat-form-field--short cm-irrigation-dialog__deficit-ui__input\">\r\n                            <mat-label>\r\n                                {{ 'Custom Deficit Irrigation' | translate }}\r\n                            </mat-label>\r\n                            <input matInput\r\n                                type=\"number\"\r\n                                step=\"0.01\"\r\n                                name=\"CustomDeficit\"\r\n                                formControlName=\"CustomDeficit\"/>\r\n                            <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                                %\r\n                            </span>\r\n                            <mat-hint align=\"start\"><strong>{{ 'Enter percentage of Crop ET' | translate }}</strong> </mat-hint>\r\n                        </mat-form-field>\r\n                    </mat-expansion-panel>\r\n                </mat-accordion>\r\n                <br>\r\n            </ng-container>\r\n\r\n            <!-- Recommendation in progress.. -->\r\n\r\n            <ng-container *ngIf=\"isFetchingRecommendation\">\r\n                <div class=\"bk-recommendations\">\r\n                    <div>\r\n                        <h3>Please Wait</h3>\r\n                        {{ (f.IrrigationMethodId.value !== IRRIGATION_METHODS.RAINFALL ? 'Calculating irrigation recommendation' \r\n                            : 'Fetching weather data')| translate }}...\r\n                    </div>\r\n                    <div class=\"bk-loader__container\">\r\n                        <div class=\"bk-loader\"></div>\r\n                    </div>\r\n                </div>\r\n            </ng-container>\r\n\r\n            <!--Historical UI (for perennial plantings)-->\r\n\r\n            <div *ngIf=\"isHistoricalUIVisible && !isFetchingRecommendation\"\r\n                class=\"bk-irrigation__historical-ui\" \r\n                [ngClass]=\"{ 'bk-irrigation__historical-ui--datepicker-open' : isHistoricalIrrigationDatePickerOpen }\">\r\n\r\n                    <!-- wrapping this in ngIf here, to automatically destroy the component on hidden, so dates etc\r\n                        can be automatically reinitiallized -->\r\n\r\n                <historical-ui\r\n                    [parentForm]='form'\r\n                    [irrigationMethods]='irrigationMethods'\r\n                    [plantingId]=\"planting.Id\"\r\n                    [wetDate]=\"planting.WetDate\"\r\n                    [historicalEventSaved$]='historicalEventSaved$'\r\n                    (isHistoricalIrrigationDatePickerOpen)=\"onHistoricalCalendarToggle($event)\"></historical-ui>\r\n\r\n            </div>\r\n            \r\n            <!-- Recommendations Section -->\r\n\r\n            <ng-container *ngIf=\"isRecommendationVisible && !isHistoricalUIVisible\">\r\n                <div *ngIf=\"f.IrrigationMethodId.value != IRRIGATION_METHODS.RAINFALL\"\r\n                    class=\"bk-recommendations\">\r\n                    <div class=\"bk-form-group\">\r\n                        <h4 class=\"bk-recommendations__title\">\r\n                            {{'Recommendation' | translate }} \r\n                            <mat-icon class=\"bk-info-icon\" matTooltip=\"{{ 'Irrigation Recommendations Help Text' | translate }}\">\r\n                                info_outline\r\n                            </mat-icon>\r\n                        </h4>\r\n\r\n                        <!-- unit toggle -->\r\n                        <div *ngIf=\"!isFloodEvent\"\r\n                            class=\"bk-button-set bk-button-set--right bk-button-set_event--right\">\r\n\r\n                            <button class=\"bk-button bk-button-set__button\r\n                                bk-unit-menu__button bk-button--gray-icon\"\r\n                                type=\"button\"\r\n                                [ngClass]=\"{'bk-button-set__button--selected': units === 'inches'}\"\r\n                                (click)=\"toggleUnits('inches')\">\r\n                                {{'inches' | translate }}\r\n                            </button>\r\n\r\n                            <button class=\"bk-button bk-button-set__button\r\n                                bk-unit-menu__button bk-button--gray-icon\"\r\n                                [ngClass]=\"{'bk-button-set__button--selected': units === 'hours'}\"\r\n                                type=\"button\"\r\n                                (click)=\"toggleUnits('hours')\">\r\n                                {{'hours' | translate }}\r\n                            </button>\r\n                        </div>\r\n\r\n                    </div>\r\n                    \r\n                    <ng-container *ngIf=\"(units === 'inches' || isFloodEvent) && irrigationRecommendationDetails\">\r\n                        <div class=\"bk-modal__recommendation\">\r\n                            {{recommendation.inches | number: '1.2-2'}} \r\n                            <span class=\"bk-modal__recommendation--unit\">\r\n                                {{'inches' | translate }}\r\n                            </span>\r\n                            <i *ngIf=\"warningTextRecommendation\"\r\n                                class=\"bk-event-recommendation-not-applied-icon fa fa-warning\"\r\n                                matTooltip=\"{{ warningTextRecommendation }}\">\r\n                            </i>       \r\n                        </div>\r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"units === 'hours' && !isFloodEvent && irrigationRecommendationDetails\">\r\n                        <div class=\"bk-modal__recommendation\">\r\n                            {{recommendation.hours | number: '1.0-1'}} <span class=\"bk-modal__recommendation--unit\">\r\n                                {{'hours' | translate }}\r\n                            </span>\r\n                            <i *ngIf=\"warningTextRecommendation\"\r\n                                class=\"bk-event-recommendation-not-applied-icon fa fa-warning\"\r\n                                matTooltip=\"{{ warningTextRecommendation }}\">\r\n                            </i>                          \r\n                        </div>\r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"irrigationRecommendationDetails === null\">\r\n                        <div class=\"bk-modal__recommendation\">\r\n                            {{ 'N/A' | translate }} \r\n                            <mat-icon *ngIf=\"isOnOrBeforeWetDate\"\r\n                                class=\"bk-info-icon bk-info-icon__irrigation-recommendation\"\r\n                                matTooltip=\"{{ 'Irrigation event date is on or before wet date' | translate }}\">\r\n                                info_outline\r\n                            </mat-icon>\r\n                            <i *ngIf=\"!isOnOrBeforeWetDate &&\r\n                                isPerennial &&\r\n                                (!recentIrrigationEventExists || !recentCutEventExists)\"\r\n                                class=\"bk-event-recommendation-not-applied-icon fa fa-warning\"\r\n                                matTooltip=\"{{ 'recommendation is NA or inaccurate due to missing information' | translate }}\">\r\n                            </i>\r\n                        </div>\r\n                    </ng-container>\r\n\r\n                    <a *ngIf=\"irrigationRecommendationDetails\"\r\n                        href=\"javascript:void(0);\" \r\n                        class=\"bk-modal__dropdown-link\"\r\n                        (click)=\"showRecommendationSummary()\">\r\n                        {{'Recommendation Summary' | translate }}\r\n                        <i *ngIf=\"!recommendationSummaryVisible\"\r\n                            class=\"fa fa-angle-down bk-modal__dropdown-link-icon\">\r\n                        </i>\r\n                        <i *ngIf=\"recommendationSummaryVisible\"\r\n                            class=\"fa fa-angle-up bk-modal__dropdown-link-icon\">\r\n                        </i>\r\n                    </a>\r\n                    <div *ngIf=\"recommendationSummaryVisible && irrigationRecommendationDetails\"\r\n                        class=\"cm-recommendation-summary\">\r\n                        <irrigation-recommendation-summary [summary]='irrigationRecommendationDetails'\r\n                            [isPlantingPerennial]=\"isPerennial\">\r\n                        </irrigation-recommendation-summary>\r\n\r\n                        <!-- ET Table -->\r\n\r\n                        <table *ngIf=\"irrigationRecommendationDetails.ETEvents && irrigationRecommendationDetails.ETEvents.length\"\r\n                            class=\"bk-modal__recommendation-summary--et-table\" >\r\n                            <thead>\r\n                                <tr>\r\n                                    <th>{{ 'Date' | translate }}</th>\r\n                                    <th>{{ 'ET' | translate }}</th>\r\n                                    <th>\r\n                                        {{ 'Source' | translate }}\r\n                                        <info-icon matTooltip=\"{{'ET Table Source Details Text' | translate}}\"></info-icon>\r\n                                    </th>\r\n                                    <th>{{ 'Last Modified' | translate }}</th>\r\n                                </tr>\r\n                            </thead>\r\n                            <tbody>\r\n                                <tr *ngFor=\"let etEvent of irrigationRecommendationDetails.ETEvents\">\r\n                                    <td>\r\n                                        {{ etEvent.EventDate | date:'shortDate' }}\r\n                                    </td>\r\n                                    <td>\r\n                                        {{ etEvent.ET | number: '1.0-4'}}\r\n                                    </td>\r\n                                    <td>\r\n                                        <div class=\"bk-modal__recommendation-summary--et-source\">\r\n                                            {{ etEvent.Source }}\r\n                                        </div>\r\n                                    </td>\r\n                                    <td>\r\n                                        {{ etEvent.LastUpdateDate | date:'M/d/yy, h:mm a' }}\r\n                                    </td>\r\n                                </tr>\r\n                                <tr class=\"bk-modal__recommendation-summary--et-totals\">\r\n                                    <td>\r\n                                        {{ 'Total' | translate }}\r\n                                    </td>\r\n                                    <td colspan=\"3\">\r\n                                        {{ irrigationRecommendationDetails.SumET | number: '1.0-4' }}\r\n                                    </td>\r\n                                </tr>\r\n                            </tbody>\r\n                        </table>\r\n                    </div>\r\n                </div>\r\n\r\n                <div *ngIf=\"isWarningSectionVisible || warningTextRecommendation\"\r\n                    class=\"bk-modal__warning-section\">\r\n                    <div *ngIf=\"warningTextRecommendation\">\r\n\r\n                        {{ warningTextRecommendation }}\r\n                        <div *ngIf=\"!recentIrrigationEventExists\">\r\n                            <br>\r\n                        </div>\r\n                    </div>\r\n                    <div *ngIf=\"!recentIrrigationEventExists\"\r\n                        class=\"bk-modal__warning-section__subsection\">\r\n                        <h3>\r\n                            {{ 'Missing Past Irrigation Information' | translate}}\r\n                        </h3>\r\n\r\n                        {{ irrigationEvent.getWarningTextForIrrigation(f.EventDate.value) }}\r\n\r\n                        <a href=\"javascript:void(0);\"\r\n                            class=\"bk-historical-ui__link\" \r\n                            (click)=\"showHistoricalUI()\">\r\n                            {{'Add past irrigation information' | translate}}\r\n                            <i class=\"fa fa-arrow-circle-right fa-fw\"></i>\r\n                        </a>\r\n                    </div>\r\n\r\n                    <div *ngIf=\"!recentCutEventExists && planting.CommodityTypeId === COMMODITY_TYPES.ALFALFA\"\r\n                        class=\"bk-modal__warning-section__subsection\">\r\n                        <h3>\r\n                            {{ 'Missing Recent Cut Event' | translate}}\r\n                        </h3>\r\n\r\n                        {{ irrigationEvent.getWarningTextForCutting(f.EventDate.value) }}\r\n                    </div>\r\n                </div>\r\n\r\n                <div class=\"bk-clearfix\"></div>\r\n                <div *ngIf=\"isRecommendationVisible && f.IrrigationMethodId.value != 2\">\r\n                    <ng-container *ngIf=\"units === 'inches' || isFloodEvent\">\r\n                        <mat-form-field appearance=\"fill\"\r\n                            class=\"mat-form-field--two-wide__left\">\r\n                            <mat-label>{{'Manager Amount' | translate }}</mat-label>\r\n                            <input matInput\r\n                                type=\"number\"\r\n                                step=\"0.01\"\r\n                                name=\"ManagerAmountRecommendation\"\r\n                                formControlName=\"ManagerAmountRecommendation\"\r\n                                (blur)=\"setManagerRec('ManagerAmountRecommendation', f.ManagerAmountRecommendation.value)\"/>\r\n                            <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                                {{'inches' | translate }}\r\n                            </span>\r\n                            <mat-hint align=\"start\"><strong>{{ 'Enter the amount recommended by a manager' | translate }}</strong> </mat-hint>\r\n                            <mat-error *ngIf=\"f.ManagerAmountRecommendation.invalid &&\r\n                                (f.ManagerAmountRecommendation.dirty || f.ManagerAmountRecommendation.touched)\">\r\n                                {{'Not a valid number' | translate }}\r\n                            </mat-error>\r\n                        </mat-form-field>    \r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"units === 'hours'\">\r\n                        <mat-form-field appearance=\"fill\"\r\n                            class=\"mat-form-field--two-wide__left\">\r\n                        <mat-label>{{'Manager Amount' | translate }}</mat-label>\r\n                            <input matInput\r\n                                type=\"number\"\r\n                                step=\"0.01\"\r\n                                name=\"ManagerAmountRecommendationHours\"\r\n                                formControlName=\"ManagerAmountRecommendationHours\"\r\n                                (blur)=\"setManagerRec('ManagerHours',f.ManagerAmountRecommendationHours.value)\"/>\r\n                            <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                                {{'hours' | translate }}\r\n                            </span>\r\n                            <mat-hint align=\"start\"><strong>{{ 'Enter the amount recommended by a manager' | translate }}</strong> </mat-hint>\r\n                            <mat-error *ngIf=\"f.ManagerAmountRecommendationHours.invalid\r\n                                && (f.ManagerAmountRecommendationHours.dirty\r\n                                || f.ManagerAmountRecommendationHours.touched)\">\r\n                                {{'Not a valid number' | translate }}\r\n                            </mat-error>\r\n                        </mat-form-field>\r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"units === 'inches'  || isFloodEvent\">\r\n                        <mat-form-field appearance=\"fill\" class=\"mat-form-field--two-wide__right\">\r\n                            <mat-label>{{'Water Applied' | translate }}</mat-label>\r\n                            <input matInput\r\n                                type=\"number\"\r\n                                step=\"0.01\"\r\n                                name=\"WaterApplied\"\r\n                                formControlName=\"WaterApplied\"\r\n                                (blur)=\"setApplied('WaterApplied', f.WaterApplied.value)\"/>\r\n                            <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                                {{'inches' | translate }}\r\n                            </span>\r\n                            <span matSuffix *ngIf=\"f.WaterAppliedHours.value === null && isFuture === false && eventId\">\r\n                                <i class=\"fa fa-warning cm-error\"\r\n                                    matTooltip=\"Please enter applied water amount for more accurate recommendations\">\r\n                                </i>\r\n                            </span>\r\n                            <mat-hint align=\"start\"><strong>{{ 'Enter the amount that was actually applied' | translate }}</strong> </mat-hint>\r\n                            <mat-error *ngIf=\"f.WaterApplied.invalid && (f.WaterApplied.dirty\r\n                                || f.WaterApplied.touched)\">\r\n                                {{'Not a valid number' | translate }}\r\n                            </mat-error>\r\n                        </mat-form-field>\r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"units === 'hours'\">\r\n                        <mat-form-field appearance=\"fill\"\r\n                            class=\"mat-form-field--two-wide__right\">\r\n                            <mat-label>{{'Water Applied' | translate }}</mat-label>\r\n                            <input matInput\r\n                                type=\"number\"\r\n                                step=\"0.01\"\r\n                                name=\"WaterAppliedHours\"\r\n                                formControlName=\"WaterAppliedHours\"\r\n                                (blur)=\"setApplied('AppliedHours', f.WaterAppliedHours.value)\"/>\r\n                            <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                                {{'hours' | translate }}\r\n                            </span>\r\n                            <span matSuffix *ngIf=\"f.WaterAppliedHours.value === null && isFuture === false && eventId\">\r\n                                <i class=\"fa fa-warning cm-error\"\r\n                                    matTooltip=\"Please enter applied water amount for more accurate recommendations\">\r\n                                </i>\r\n                            </span>\r\n                            <mat-hint align=\"start\"><strong>{{ 'Enter the amount that was actually applied' | translate }}</strong> </mat-hint>\r\n                            <mat-error *ngIf=\"f.WaterAppliedHours.invalid && (f.WaterAppliedHours.dirty\r\n                                || f.WaterAppliedHours.touched)\">\r\n                                {{'Not a valid number' | translate }}\r\n                            </mat-error>\r\n                        </mat-form-field>\r\n                    </ng-container>\r\n                    <div *ngIf=\"flowmeter.hasData\"\r\n                        class=\"bk-clearfix bk-event-flowmeter-data\">\r\n                        <div>\r\n                            {{'Flow Meter Information:' | translate}}\r\n                        </div>\r\n                        <div class=\"bk-event-flowmeter-data--equation\">\r\n                            {{flowmeter.waterApplied}} {{'in' | translate }} = {{flowmeter.gallons}} \r\n                            {{'gals' | translate }} {{ 'over' | translate }} {{flowmeter.calculatedArea}} \r\n                            {{ 'acres' | translate }}\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n\r\n                <span *ngIf='f.Id.value > 0'\r\n                    class='bk-modal__last-updated-meta bk-clearfix'>\r\n                    {{ 'Last updated by' | translate }} {{lastUpdatedString}}\r\n                </span>\r\n            </ng-container>\r\n        </form>\r\n    </div>\r\n    \r\n    <div mat-dialog-actions\r\n        align=\"end\">\r\n        <ng-container *ngIf=\"!isHistoricalUIVisible\">\r\n            <button *ngIf=\"eventId && f && f.IrrigationMethodId.value !== IRRIGATION_METHODS.RAINFALL\"\r\n                [disabled]=\"isFetchingRecommendation\"\r\n                class=\"bk-button__delete\"\r\n                (click)=\"showDelete($event)\">\r\n                {{'Delete' | translate }}\r\n            </button>\r\n\r\n            <button mat-button\r\n                *ngIf=\"f && f.IrrigationMethodId.value !== IRRIGATION_METHODS.RAINFALL\"\r\n                [disabled]=\"isFetchingRecommendation\"\r\n                class=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n                (click)=\"initiateCloseModal()\">\r\n                {{ 'Cancel' | translate }}\r\n            </button>\r\n\r\n            <button mat-button\r\n            *ngIf=\"!eventId && !isRecommendationVisible\"\r\n                class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n                (click)=\"calculateRecommendation()\"\r\n                [disabled]=\"isFetchingRecommendation || (form && !form.valid)\">\r\n                {{'Calculate Recommendation' | translate }}\r\n            </button>\r\n\r\n            <button  mat-button\r\n                *ngIf=\"!eventId && isRecommendationVisible\"\r\n                [disabled]=\"isFetchingRecommendation || (form && !form.valid)\"\r\n                class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n                (click)=\"create()\"> <!-- we're actually updating an existing data here -->\r\n                {{(isSaving ? 'Creating' : 'Create') | translate }}\r\n                <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n            </button>\r\n            <button mat-button\r\n                *ngIf=\"eventId && f && f.IrrigationMethodId.value !== IRRIGATION_METHODS.RAINFALL\"\r\n                [disabled]=\"isFetchingRecommendation || (form && !form.valid)\"\r\n                class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n                (click)=\"update()\">\r\n\r\n                {{ (isSaving ? 'Saving' : 'Save') | translate }}\r\n                <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n            </button>\r\n            <button mat-button\r\n                *ngIf=\"f && f.IrrigationMethodId.value === IRRIGATION_METHODS.RAINFALL\"\r\n                class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n                (click)=\"initiateCloseModal()\">\r\n                {{ 'Close' | translate }}\r\n            </button>\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"isHistoricalUIVisible\">\r\n            <button [disabled]=\"isFetchingRecommendation\"\r\n                class=\"bk-button bk-button--medium bk-button--text-only\"\r\n                (click)=\"cancelHistoricalIrrigation()\">\r\n                {{'Cancel' | translate }}\r\n            </button>\r\n            <button [disabled]=\"isFetchingRecommendation\"\r\n                class=\"bk-button bk-button--medium\"\r\n                (click)=\"saveHistoricalIrrigation()\">\r\n                {{'Next' | translate }}\r\n            </button>\r\n        </ng-container>\r\n    </div>\r\n</div>\r\n","import { Component, ViewChild, OnInit, OnDestroy, Inject, ChangeDetectorRef } from '@angular/core';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { IrrigationEvent, IUnitRatios } from './irrigationEvent';\r\nimport { IrrigationService } from './service';\r\n\r\nimport { IIrrigationRecommendationSummaryModel, IIrrigationEventEditResponse,\r\n\tIIrrigationIntervalRecommendation, IIrrigationEventGetRecency, IRRIGATION_INTERVAL_MAX, IIrrigationEvent, IAverageDeficit, IETEvent }\r\n\tfrom './interfaces';\r\n\r\nimport { IPlanting } from '../planting-settings/interfaces';\r\nimport { IEventGroup, IRawEvent, IEventPostResponseJSON } from '../../models/event/interfaces';\r\nimport { IIrrigationMethod } from '../../models/irrigation-method/interfaces';\r\nimport { eIrrigationMethods, eCommodityTypes, EventsType, eNotificationTypes } from '../../interfaces/constants';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { HistoricalUIComponent } from './historical-ui/historical-ui';\r\nimport { Subject, of, from, timer } from 'rxjs';\r\nimport {  MatDialog, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { CropType } from '../../models/crop-type/cropType';\r\nimport { switchMap, takeUntil } from 'rxjs/operators';\r\nimport { IrrigationDeleteConfirmationDialog } from './delete-confirmation';\r\nimport { IrrigationUpdateService } from './update.service';\r\nimport { SharedKeepDiscardDialog } from '../shared/dialogs/keep-discard-dialog';\r\nimport { SharedUpdateService } from '../shared/dialogs/update.service';\r\nimport { IrrigationEventRecalculateWarningDialog } from './recalculate-warning';\r\nimport { AbstractControl, FormGroup, FormBuilder, Validators, AsyncValidatorFn } from '@angular/forms';\r\nimport * as moment from 'moment';\r\nimport { FormValidation } from '../../classes/formValidation';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { IrrigationEventUpdateParams } from './irrigationEventUpdateParams';\r\nimport { animate, style, transition, trigger } from '@angular/animations';\r\nimport { PlantingRecalculatorService } from '../planting-recalculate-modal/plantingRecalculatorService';\r\nimport { TranslateService } from '../localization/service';\r\nimport { DIALOG_HIDE_CLASS } from '../shared/constants';\r\n\r\nexport type IrrigationEventFields = 'Id' | 'EventDate' | 'IrrigationMethodId' |\r\n\t'ManagerAmountRecommendation' | 'ManagerAmountRecommendationHours' |\r\n\t'WaterApplied' | 'WaterAppliedHours' | 'Rainfall' | 'CustomDeficit' |\r\n\t'IsCustomDeficitEnabled';\r\n\r\nexport enum eIrrigationUnits {\r\n\tINCHES = 'inches',\r\n\tHOURS = 'hours'\r\n}\r\n\r\nexport interface IFlowmeterSetting {\r\n\thasData: boolean,\r\n\tgallons: number,\r\n\tcalculatedArea: number,\r\n\twaterApplied: number,\r\n\tareas: {\r\n\t\tdrip: number,\r\n\t\tmicroSprinkler: number,\r\n\t\tdefault: number\r\n\t}\r\n}\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'irrigation-event',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: [ 'main.scss'],\r\n\tanimations: [\r\n\t\ttrigger('slideInOut', [ // animation for showing/hiding Cover UI\r\n\t\t\ttransition(':enter', [\r\n\t\t\t\tstyle({ 'max-height': '0px', opacity: 0 }),\r\n\t\t\t\tanimate('800ms ease-in-out', style({ 'max-height': '*', opacity: 1 }))\r\n\t\t\t]),\r\n\t\t\ttransition(':leave', [\r\n\t\t\t\tanimate('800ms ease-in-out', style({ 'max-height': '0px', opacity: 0 }))\r\n\t\t\t])\r\n\t\t])\r\n\t]\r\n})\r\n\r\nexport class IrrigationEventComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\r\n\tpublic datePickerOpen = false;\r\n\tprivate _effectedEvents: IEventGroup[] = new Array();\r\n\r\n\tpublic commodityCalculator: number;\r\n\tpublic averageDeficit: IAverageDeficit;\r\n\tpublic historicalEventSaved$: Subject<void> = new Subject<void>();\r\n\tpublic IRRIGATION_METHODS = eIrrigationMethods;\r\n\tpublic irrigationRecommendationDetails: IIrrigationRecommendationSummaryModel;\r\n\tpublic isFetchingRecommendation = false; // used to control view when recommendation is being calculated\r\n\tpublic isFloodEvent: boolean;\r\n\tpublic isFuture = false;\r\n\tpublic isHistoricalIrrigationDatePickerOpen: boolean;\r\n\tpublic isHistoricalUIVisible: boolean;\r\n\tpublic isOnOrBeforeWetDate: boolean;\r\n\tpublic isSaving = false; // flag to display in the UI when the event is being saved\r\n\tpublic isRecommendationVisible = false;\r\n\tpublic isWarningSectionVisible: boolean;\r\n\tpublic irrigationMethods: IIrrigationMethod[];\r\n\r\n\tpublic flowmeter: IFlowmeterSetting;\r\n\tpublic CIMISPrecipitation: number;\r\n\tpublic lastUpdatedString: string;\r\n\r\n\tpublic loadingData = true; // prevent displaying the popup from\r\n\t// showing until all content has loaded - otherwise the popup oddly\r\n\t// morphs in place as more data is loaded\r\n\r\n\tpublic managerInterval: number; // this was previously referenced by the template but is currently\r\n\t\t// not used\r\n\tpublic maxIrrigationInterval = IRRIGATION_INTERVAL_MAX;\r\n\tpublic warningTextRecommendation = ''; // may display next to recommendation #\r\n\r\n\tpublic planting: IPlanting;\r\n\r\n\tpublic plantingId: number;\r\n\tpublic eventId: number;\r\n\tpublic recentCutEventExists: boolean;\r\n\tpublic recentIrrigationEventExists: boolean;\r\n\tpublic isPerennial: boolean;\r\n\tpublic isTree: boolean;\r\n\tpublic recommendationSummaryVisible = false;\r\n\tpublic units = eIrrigationUnits.HOURS;\r\n\tpublic lastIrrigationEventDate: Date;\r\n\tpublic maxDate: Date; // maximum valid date for EventDate\r\n\tpublic irrigationEvent: IrrigationEvent; // used for displaying warning text\r\n\r\n\tpublic recommendation: {\r\n\t\tinches: number,\r\n\t\thours: number\r\n\t};\r\n\r\n\t/// private properties\r\n\r\n\tprivate _amountFieldNames = {\r\n\t\thours: {\r\n\t\t\trecommended: 'RecommendedHours',\r\n\t\t\tmanager: 'ManagerHours',\r\n\t\t\tapplied: 'AppliedHours'\r\n\t\t},\r\n\t\tinches: {\r\n\t\t\tmanager: 'ManagerAmountRecommendation',\r\n\t\t\tapplied: 'WaterApplied',\r\n\t\t\trecommended: 'RecommendedIrrigationAmount'\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _applicationRate: number;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tprivate _dateDefault: Date; // default date set when an event is created from the calendar\r\n\r\n\t@ViewChild(HistoricalUIComponent, { static: false }) private _historicalUIComponent: HistoricalUIComponent;\r\n\r\n\tpublic form: FormGroup;\r\n\r\n\tpublic get f(): { [key in IrrigationEventFields]: AbstractControl } {\r\n\t\treturn this.form ? this.form.controls as { [key in IrrigationEventFields]: AbstractControl } : null;\r\n\t}\r\n\r\n\t//////////////////////////\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: { plantingId: number,\r\n\t\t\tid?: number, dateDefault?: Date },\r\n\t\tprivate _cdr: ChangeDetectorRef,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate dialogRef: MatDialogRef<IrrigationEventComponent>,\r\n\t\tprivate _irrigationService: IrrigationService,\r\n\t\tprivate _irrigationUpdateService: IrrigationUpdateService,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _plantingRecalculateService: PlantingRecalculatorService,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _translateService: TranslateService,\r\n\t\tprivate _validateService: ValidateService\r\n\t\t) {\r\n\t\t\tthis.plantingId = data.plantingId;\r\n\t\t\tthis.eventId = data.id;\r\n\t\t\tthis._dateDefault = data.dateDefault;\r\n\t}\r\n\r\n\tpublic ngOnInit(): void {\r\n\t\tthis._cdr.detectChanges(); // force ngIf to evaluate early so spinner is\r\n\t\t\t// visible during loading\r\n\r\n\t\tthis.irrigationEvent = new IrrigationEvent(this._translateService);\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.CIMISPrecipitation = 0;\r\n\r\n\t\tthis.averageDeficit = {\r\n\t\t\tDays: null,\r\n\t\t\tDeficit: null\r\n\t\t};\r\n\r\n\t\tthis.flowmeter = {\r\n\t\t\thasData: false,\r\n\t\t\tgallons: null,\r\n\t\t\tcalculatedArea: null,\r\n\t\t\twaterApplied: null,\r\n\t\t\tareas: {\r\n\t\t\t\tdefault: null,\r\n\t\t\t\tdrip: null,\r\n\t\t\t\tmicroSprinkler: null\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.recommendation = {\r\n\t\t\tinches: null,\r\n\t\t\thours: null\r\n\t\t}\r\n\r\n\t\tthis._initialize();\r\n\t\tthis.planting = this._ranchService.plantings.getPlantingById(this.plantingId);\r\n\r\n\t\tif (this.planting) {\r\n\t\t\tthis.isPerennial = CropType.isPerennialPlanting(this.planting.CommodityTypeId);\r\n\t\t\tthis.isTree = CropType.isTree(this.planting.CommodityTypeId);\r\n\t\t}\r\n\r\n\t\tif (this.eventId) {\r\n\t\t\tthis.isRecommendationVisible = true;\r\n\r\n\t\t\tthis._getEditModel(this.eventId);\r\n\t\t} else {\r\n\t\t\tthis.isRecommendationVisible = false;\r\n\t\t\tthis._getCreateModel();\r\n\t\t}\r\n\r\n\t\t// ping this when historical event is saved\r\n\t\tthis.historicalEventSaved$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\r\n\t\t\tthis._getRecommendation(); // refresh recommendation\r\n\t\t\tthis.cancelHistoricalIrrigation();\r\n\t\t\tthis.recentIrrigationEventExists = true;\r\n\r\n\t\t\tthis.isWarningSectionVisible = this._isWarningVisible(this.recentIrrigationEventExists,\r\n\t\t\t\tthis.recentCutEventExists);\r\n\t\t});\r\n\r\n\t\tthis._irrigationUpdateService.confirmationClosed$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._show();\r\n\t\t});\r\n\r\n\t\tthis._irrigationUpdateService.deleted$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe((response) => {\r\n\r\n\t\t\tthis._delete(response);\r\n\t\t});\r\n\r\n\t\tthis._irrigationUpdateService.recalculateWarningClosed$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe((event) => {\r\n\r\n\t\t\tthis._confirmIrrigationWarning(event);\r\n\t\t});\r\n\r\n\t\tthis._sharedUpdateService.keep$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe((response) => {\r\n\r\n\t\t\tthis._show();\r\n\t\t});\r\n\r\n\t\tthis._sharedUpdateService.discard$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe((response) => {\r\n\r\n\t\t\tthis.close();\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic calculateRecommendation(): boolean {\r\n\r\n\t\tif (!this.form.valid) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis.isFetchingRecommendation = true;\r\n\r\n\t\tthis._getRecommendation((res: IIrrigationRecommendationSummaryModel) => {\r\n\t\t\tthis.isFetchingRecommendation = false;\r\n\t\t\tthis.isRecommendationVisible = true;\r\n\r\n\t\t\tif (!res) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.recentCutEventExists = res.HasRecentCutEvents;\r\n\t\t\tthis.recentIrrigationEventExists = res.HasRecentIrrigationEvent;\r\n\r\n\t\t\tthis.isWarningSectionVisible = this._isWarningVisible(this.recentIrrigationEventExists,\r\n\t\t\t\tthis.recentCutEventExists);\r\n\r\n\t\t\tthis.warningTextRecommendation = this.irrigationEvent.getWarningTextRecommendation(\r\n\t\t\t\tthis.isFloodEvent, this.units, this.recentCutEventExists,\r\n\t\t\t\tthis.planting.CommodityTypeId,\r\n\t\t\t\tres.DaysSinceLastIrrigation,\r\n\t\t\t\tres.ValidRainEventsCount, this._countZeroETRecords(res.ETEvents), this.isFuture);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic cancelClose(e: MouseEvent): void {\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t}\r\n\r\n\tpublic cancelHistoricalIrrigation(): void {\r\n\t\tthis.isHistoricalUIVisible = false;\r\n\t\tthis.f.EventDate.enable({emitEvent: false});\r\n\t\tthis.f.IrrigationMethodId.enable({emitEvent: false});\r\n\t\tthis.isHistoricalIrrigationDatePickerOpen = null;\r\n\t}\r\n\r\n\t/**\r\n     * Controller for \"Discard Changes\" button\r\n     */\r\n\tpublic close(): void {\r\n\t\tthis.dialogRef.close();\r\n\t\tthis._updateService.setEventDialogClosed(); // tell event table to re-display\r\n\t}\r\n\r\n\tpublic create(): void {\r\n\t\tlet param: IrrigationEventUpdateParams;\r\n\r\n\t\tparam = new IrrigationEventUpdateParams(this.form.value as IIrrigationEventEditResponse);\r\n\r\n\t\tif (this.isSaving) { // prevent multiple submissions\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._irrigationService.create(this.plantingId, param)\r\n\t\t\t.then(res => {\r\n\r\n\t\t\t\tlet eventGroup: EventGroup;\r\n\r\n\t\t\t\tthis.isSaving = false;\r\n\r\n\t\t\t\teventGroup = EventGroup.convertFromJSON(res, this.planting.WetDate,\r\n\t\t\t\t\tthis.planting.Id, this._ranchService);\r\n\r\n\t\t\t\tif (!eventGroup) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.f.Id.setValue(res.Events[0].Irrigation.Id);\r\n\r\n\t\t\t\tthis.recentCutEventExists = res.Events[0].Irrigation.HasRecentCutEvent;\r\n\t\t\t\tthis.recentIrrigationEventExists = res.Events[0].Irrigation.HasRecentIrrigationEvent;\r\n\r\n\t\t\t\tthis.isWarningSectionVisible = this._isWarningVisible(this.recentIrrigationEventExists,\r\n\t\t\t\t\tthis.recentCutEventExists);\r\n\r\n\t\t\t\tthis._confirmIrrigationWarning();\r\n\r\n\t\t\t\tthis._plantingRecalculateService.recalculate(this.plantingId,\r\n\t\t\t\t\ttrue);\r\n\t\t\t});\r\n\t}\r\n\r\n\t/*put everyting related to the closing the modal in here*/\r\n\tpublic initiateCloseModal(): void {\r\n\t\tif (this.form.touched) {\r\n\t\t\tthis._showKeepDiscard();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.close();\r\n\t}\r\n\r\n\tpublic isGerminationEvent(): boolean {\r\n\t\treturn this.f.IrrigationMethodId.value === eIrrigationMethods.GERMINATION_SPRINKLER;\r\n\t}\r\n\r\n\t/**\r\n     * Deal with popup content area height when historical UI calendar is open.\r\n     *\r\n     * If we don't do this, when calendar is open, the bottom of the calendar is truncated behind\r\n     * popup footer\r\n     *\r\n     * @param event\r\n     */\r\n\tpublic onDatePickerToggle(event: number): void {\r\n\t\tif (event === 1) {\r\n\t\t\tthis.datePickerOpen = true;\r\n\t\t} else {\r\n\t\t\tthis.datePickerOpen = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic onHistoricalCalendarToggle($event: boolean) {\r\n\t\tthis.isHistoricalIrrigationDatePickerOpen = $event;\r\n\t}\r\n\r\n\tpublic saveHistoricalIrrigation() {\r\n\t\tthis._historicalUIComponent.save();\r\n\t}\r\n\r\n\tpublic setApplied(field: string, value: number): void {\r\n\r\n\t\tswitch (field) {\r\n\t\t\tcase this._amountFieldNames.hours.applied:\r\n\t\t\t\tthis._updateInches(field, value);\r\n\t\t\t\tbreak;\r\n\t\t\tcase this._amountFieldNames.inches.applied:\r\n\t\t\t\tthis._updateHours(field, value);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n     *\r\n     * @param field the field the value belongs to, not the target field we want to update\r\n     * @param value\r\n     */\r\n\tpublic setManagerRec(field: string, value: number): void {\r\n\r\n\t\tswitch (field) {\r\n\t\t\tcase this._amountFieldNames.hours.manager:\r\n\t\t\t\tthis.f.ManagerAmountRecommendationHours.setValue(value);\r\n\t\t\t\tthis._updateInches(field, value);\r\n\t\t\t\tbreak;\r\n\t\t\tcase this._amountFieldNames.inches.manager:\r\n\t\t\t\tthis.f.ManagerAmountRecommendation.setValue(value);\r\n\t\t\t\tthis._updateHours(field, value);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Display delete confirmation dialog\r\n\t * @param $event\r\n\t */\r\n\tpublic showDelete($event: MouseEvent): void {\r\n\t\tthis._dialog.open(IrrigationDeleteConfirmationDialog, {\r\n\t\t\twidth: '500px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: {\r\n\t\t\t\tid: this.f.Id.value,\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._hide();\r\n\r\n\t\t$event.preventDefault();\r\n\t\t$event.stopPropagation();\r\n\t}\r\n\r\n\tprivate _hide(): void {\r\n\t\tthis.dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\t}\r\n\r\n\tprivate _show(): void {\r\n\t\tthis.dialogRef.removePanelClass(DIALOG_HIDE_CLASS);\r\n\t}\r\n\r\n\tpublic showHistoricalUI() {\r\n\t\tthis.isHistoricalUIVisible = true;\r\n\t\tthis.f.EventDate.disable({emitEvent: false});\r\n\t\tthis.f.IrrigationMethodId.disable({emitEvent: false});\r\n\t}\r\n\r\n\tpublic showRecommendationSummary(): void {\r\n\r\n\t\tif (!this.recommendationSummaryVisible) {\r\n\t\t\tthis.recommendationSummaryVisible = true;\r\n\t\t} else {\r\n\t\t\tthis.recommendationSummaryVisible = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleUnits(units: string): void {\r\n\t\tswitch (units) {\r\n\t\t\tcase eIrrigationUnits.HOURS:\r\n\t\t\t\tthis.units = eIrrigationUnits.HOURS;\r\n\t\t\t\tbreak;\r\n\t\t\tcase eIrrigationUnits.INCHES:\r\n\t\t\t\tthis.units = eIrrigationUnits.INCHES;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic update(): void {\r\n\r\n\t\tlet event: IIrrigationEventEditResponse;\r\n\r\n\t\tif (!this.form.valid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tevent = this.form.value;\r\n\t\tevent.RecommendationSummary = this.irrigationRecommendationDetails;\r\n\r\n\t\tif (event.RecommendationSummary) {\r\n\t\t\tevent.RecommendationSummary.RecommendedIrrigationAmount = this.recommendation.inches;\r\n\t\t}\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\t// prevent this button from getting clicked twice\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._irrigationService.update(event)\r\n\t\t\t.then((res) => {\r\n\r\n\t\t\t\tthis.isSaving = false;\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._checkFollowingEventsEffected(res.SucceedingEventGroupsRaw, this.planting.WetDate);\r\n\t\t\t\tthis._plantingRecalculateService.recalculate(this.plantingId, true);\r\n\t\t\t\tthis.close();\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _checkFollowingEventsEffected(succeedingEventGroups: IRawEvent[], wetDate: Date): void {\r\n\t\tif (succeedingEventGroups === null || succeedingEventGroups.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._effectedEvents = EventGroup.convertAll(succeedingEventGroups, wetDate);\r\n\t\tthis._showIrrigationWarning(this._effectedEvents);\r\n\t}\r\n\r\n\tprivate _checkForFlowmeterData(): void {\r\n\r\n\t\tif (!this.flowmeter.hasData) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (ValidateService.numberIsEmpty(this.flowmeter.gallons)) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.flowmeter.calculatedArea = IrrigationEvent.\r\n\t\t\tgetFlowMeterArea(this.f.IrrigationMethodId.value, this.flowmeter);\r\n\r\n\t\tthis.flowmeter.waterApplied =\r\n\t\t\tthis._validateService.convertToFloat(((this.flowmeter.gallons * 0.0000368265993)\r\n\t\t\t\t/ this.flowmeter.calculatedArea), 2);\r\n\r\n\t\tif (ValidateService.numberIsEmpty(this.f.WaterApplied.value)) {\r\n\t\t\tthis.f.WaterApplied.setValue(this.flowmeter.waterApplied);\r\n\t\t\tthis._updateHours(this._amountFieldNames.inches.applied, this.f.WaterApplied.value);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _initialize(): void {\r\n\t\tthis.isFuture = false;\r\n\t\tthis.recommendationSummaryVisible = false;\r\n\t\tthis.irrigationRecommendationDetails = null;\r\n\t\tthis.isFetchingRecommendation = false;\r\n\r\n\t\tthis._effectedEvents = new Array();\r\n\t\tthis.units = eIrrigationUnits.HOURS;\r\n\t\tthis.loadingData = true;\r\n\t\tthis.isFloodEvent = null;\r\n\t\tthis.isHistoricalUIVisible = null;\r\n\t\tthis.isHistoricalIrrigationDatePickerOpen = null;\r\n\r\n\t\tthis.isWarningSectionVisible = false;\r\n\t\tthis.recentIrrigationEventExists = false;\r\n\t\tthis.recentCutEventExists = false;\r\n\t\tthis.isOnOrBeforeWetDate = false;\r\n\t}\r\n\r\n\tprivate _confirmIrrigationWarning(e?: MouseEvent): void {\r\n\r\n\t\tif (e) {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\tif (this.isHistoricalUIVisible) {\r\n\t\t\tthis.isFetchingRecommendation = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.close();\r\n\t}\r\n\r\n\tprivate _delete(response: IEventPostResponseJSON): void {\r\n\r\n\t\tif (!response) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tEventGroup.updateEvents(response.EventGroupsSucceeding,\r\n\t\t\tthis.plantingId,\r\n\t\t\tthis.planting.WetDate, this._ranchService);\r\n\r\n\t\tthis._checkFollowingEventsEffected(response.EventGroupsSucceeding,\r\n\t\t\tthis.planting.WetDate); // if any events are affected, display warning\r\n\r\n\t\tthis._ranchService.plantings.deleteEventInPlantings(this.f.EventDate.value,\r\n\t\t\tthis.plantingId, EventsType.WATER, null, response.ActiveEvents); // this line hides the warning before it shows\r\n\r\n\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date());\r\n\r\n\t\tthis._plantingRecalculateService.recalculate(this.plantingId, true);\r\n\t\tthis.close();\r\n\t}\r\n\r\n\tprivate _getCreateModel(): void {\r\n\r\n\t\tif (!this.plantingId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._irrigationService.getCreateModel(this.plantingId)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tlet d: Date;\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this._dateDefault) {\r\n\t\t\t\t\tres.EventDate = this._dateDefault;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tres.EventDate = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._initializeForm(res);\r\n\t\t\t\tthis.irrigationMethods = res.IrrigationMethods;\r\n\t\t\t\tthis.loadingData = false;\r\n\t\t\t\tthis._bindValueChanges();\r\n\r\n\t\t\t\tif (this._dateDefault) {\r\n\t\t\t\t\tthis._onDateChanged();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param id\r\n\t * @param isEditMode if true, assume popup is being opened for the first time, in edit mode\r\n\t * if false, assume this is called after event is initially created\r\n\t */\r\n\tprivate _getEditModel(id: number): void {\r\n\t\tthis._irrigationService.getEditModel(id)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tthis._processEditGetResponse(res);\r\n\r\n\t\t\t\tthis.loadingData = false;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _getPreviousIrrigationDate(daysSinceLastIrrigation: number, eventDate: Date): Date {\r\n\t\tlet result: Date;\r\n\r\n\t\tif (!eventDate) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = DateUtility.subtractDays(eventDate, daysSinceLastIrrigation);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Called once during load\r\n\t */\r\n\tprivate _getHoursValues(): void {\r\n\r\n\t\tif (!this.f.WaterAppliedHours.value) {\r\n\t\t\tthis._updateHours(this._amountFieldNames.inches.applied, this.f.WaterApplied.value);\r\n\t\t}\r\n\r\n\t\tif (!this.f.ManagerAmountRecommendationHours.value) {\r\n\t\t\tthis._updateHours(this._amountFieldNames.inches.manager,\r\n\t\t\t\tthis.f.ManagerAmountRecommendation.value);\r\n\t\t}\r\n\r\n\t\tthis._updateHours(this._amountFieldNames.inches.recommended,\r\n\t\t\tthis.recommendation.inches);\r\n\t}\r\n\r\n\tprivate _getRecommendation(callback?: Function): Promise<void> {\r\n\t\tlet intervalRecommendation: IIrrigationIntervalRecommendation;\r\n\t\tlet minimumDelay = 1000; // 1 second minimum delay, to prevent flash\r\n\t\tlet delayExpired = false;\r\n\t\tlet dataReceived = false;\r\n\r\n\t\tif (!this.f) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t} else if (this.f.EventDate.invalid) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tthis.isFetchingRecommendation = true;\r\n\t\tthis.isRecommendationVisible = false;\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tdelayExpired = true;\r\n\r\n\t\t\tif (dataReceived) {\r\n\t\t\t\tthis.isFetchingRecommendation = false;\r\n\t\t\t\tthis.isRecommendationVisible = true;\r\n\t\t\t}\r\n\t\t}, minimumDelay);\r\n\r\n\t\treturn this._irrigationService.getRecommendationSummary(Number(this.plantingId), this.f.EventDate.value,\r\n\t\t\tthis.f.IrrigationMethodId.value, this.f.Id.value, this.f.CustomDeficit.value)\r\n\t\t\t.then(res => {\r\n\t\t\t\tdataReceived = true;\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (delayExpired) {\r\n\t\t\t\t\tthis.isFetchingRecommendation = false;\r\n\t\t\t\t\tthis.isRecommendationVisible = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!res || res.RecommendedIrrigationAmount === -1) {\r\n\t\t\t\t\tthis.irrigationRecommendationDetails = null;\r\n\t\t\t\t\tthis.recommendationSummaryVisible = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.irrigationRecommendationDetails = res;\r\n\t\t\t\t\tthis._setCropManageRecommendation(res.RecommendedIrrigationAmount, res.applicationRate);\r\n\r\n\t\t\t\t\tthis.f.Rainfall.setValue(this._validateService.convertToFloat(res.TotalPrecipitation, 2));\r\n\t\t\t\t\tthis.lastIrrigationEventDate = res.LastIrrigationEventDate;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._applicationRate = res.applicationRate;\r\n\r\n\t\t\t\tintervalRecommendation = IrrigationEvent.getIntervalRecommendation(this.lastIrrigationEventDate,\r\n\t\t\t\t\tres.RecommendedIrrigationInterval);\r\n\r\n\t\t\t\tif (callback) {\r\n\t\t\t\t\tcallback(res);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _initializeForm(model: IIrrigationEventEditResponse): void {\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tId: [model.Id],\r\n\r\n\t\t\tEventDate: [model.EventDate, {\r\n\t\t\t\tvalidators: [ Validators.required,\r\n\t\t\t\t\tFormValidation.maxDateValidator(this.planting ? this.planting.HarvestDate : null)],\r\n\t\t\t\tasyncValidators: [this._duplicateDateValidator()],\r\n\t\t\t\tupdateOn: 'blur'\r\n\t\t\t}],\r\n\t\t\tIrrigationMethodId: [model.IrrigationMethodId, [Validators.required, Validators.min(1)]],\r\n\t\t\tManagerAmountRecommendation: [model.ManagerAmountRecommendation, Validators.min(0)],\r\n\t\t\tManagerAmountRecommendationHours: [model.ManagerAmountRecommendationHours, Validators.min(0)],\r\n\t\t\tWaterApplied: [model.WaterApplied, Validators.min(0)],\r\n\t\t\tWaterAppliedHours: [model.WaterAppliedHours, Validators.min(0)],\r\n\t\t\tRainfall: [model.Rainfall, Validators.min(0)],\r\n\t\t\tIsCustomDeficitEnabled: [model.IsCustomDeficitEnabled ?\r\n\t\t\t\tmodel.IsCustomDeficitEnabled : false],\r\n\t\t\tCustomDeficit: [model.CustomDeficit, {\r\n\t\t\t\tvalidators: [ Validators.min(0), Validators.max(100)],\r\n\t\t\t\tupdateOn: 'blur'\r\n\t\t\t}],\r\n\t\t});\r\n\r\n\t\tif (this.planting) {\r\n\t\t\tthis.maxDate = moment(this.planting.HarvestDate).subtract(1, 'days').toDate();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _duplicateDateValidator(): AsyncValidatorFn {\r\n\t\treturn (control: AbstractControl): Observable<{[key: string]: any} | null> => {\r\n\t\t\treturn timer(300).pipe( // add a debounce to prevent too many requests\r\n\t\t\t\tswitchMap(() => {\r\n\t\t\t\t\treturn from(this._irrigationService.countDuplicatesOnDate(this.planting.Id, control.value).then((count) => {\r\n\t\t\t\t\t\tlet valid: boolean;\r\n\r\n\t\t\t\t\t\tif (this.eventId) {\r\n\t\t\t\t\t\t\tvalid = count > 1 ? false : true;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvalid = count > 0 ? false : true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!valid) {\r\n\t\t\t\t\t\t\tcontrol.markAsTouched();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn valid ? null : {'hasDuplicates': {value: control.value}};\r\n\t\t\t\t\t}));\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _bindValueChanges() {\r\n\t\tthis.f.EventDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._onDateChanged();\r\n\t\t});\r\n\r\n\t\tthis.f.IrrigationMethodId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._selectIrrigationMethod();\r\n\t\t});\r\n\r\n\t\tthis.f.CustomDeficit.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (this.isRecommendationVisible) {\r\n\t\t\t\tthis._getRecommendation();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.f.IsCustomDeficitEnabled.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (this.f.IsCustomDeficitEnabled.value === false) {\r\n\t\t\t\tthis.f.CustomDeficit.setValue(null);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n     * Warning section will display if either 1) recent irrigation event doesn't\r\n     * exist or 2) recent cut event doesn't exist.\r\n     *\r\n     * @param recentIrrigationEventExists\r\n     */\r\n\tprivate _isWarningVisible(recentIrrigationEventExists: boolean, recentCutEventExists: boolean): boolean {\r\n\t\tlet isBeforeWetDate: boolean;\r\n\r\n\t\tif (!this.planting) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.f.IrrigationMethodId.value === eIrrigationMethods.RAINFALL) {\r\n\t\t\t// we don't show warning for rainfall events\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tisBeforeWetDate = DateUtility.isOnOrBefore(this.f.EventDate.value, this.planting.WetDate);\r\n\t\t// this.event.EventDate\r\n\t\tif (isBeforeWetDate) { // we don't care about recommendations before wet date\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!this.isPerennial) {\r\n\t\t\t// we only currently deal with historical events for almonds and alfalfa\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!recentIrrigationEventExists) {\r\n\t\t\treturn true;\r\n\t\t} else if (!recentCutEventExists && this.planting.CommodityTypeId === eCommodityTypes.ALFALFA) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _onDateChanged(): void {\r\n\r\n\t\tthis.isFuture = DateUtility.isFuture(this.f.EventDate.value as Date);\r\n\r\n\t\tif ((this.isTree || this.planting.CommodityTypeId === this.COMMODITY_TYPES.PROCESSING_TOMATO) && this.f.EventDate.value) {\r\n\t\t\tthis._irrigationService.getAverageDeficit(this.plantingId, this.f.EventDate.value, this.f.Id.value).then((resp) => {\r\n\t\t\t\tif (!resp) {\r\n\t\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\t\tmessage: `Failed to fetch deficit information due to bad event date. Please try again.`\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.averageDeficit = resp;\r\n\t\t\t\tthis.lastIrrigationEventDate = this._getPreviousIrrigationDate(this.averageDeficit.Days, this.f.EventDate.value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (!this.isRecommendationVisible) {\r\n\t\t\tthis.isOnOrBeforeWetDate = DateUtility.isOnOrBefore(this.f.EventDate.value, this.planting.WetDate);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._irrigationService.getRecency(this.f.Id.value, this.f.EventDate.value,\r\n\t\t\tthis.planting.Id)\r\n\t\t\t.then((response: IIrrigationEventGetRecency) => {\r\n\r\n\t\t\t\tif (response) {\r\n\t\t\t\t\tthis.recentCutEventExists = response.RecentCutEventExists;\r\n\t\t\t\t\tthis.recentIrrigationEventExists = response.RecentIrrigationEventExists;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// cache values to display appropriate messaging in the view\r\n\t\t\t\tthis.isWarningSectionVisible = this._isWarningVisible(this.recentIrrigationEventExists,\r\n\t\t\t\t\tthis.recentCutEventExists);\r\n\r\n\t\t\t\tthis._getRecommendation();\r\n\t\t\t\tthis.isOnOrBeforeWetDate = DateUtility.isOnOrBefore(this.f.EventDate.value,\r\n\t\t\t\t\tthis.planting.WetDate);\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _processEditGetResponse(res: IIrrigationEventEditResponse): void {\r\n\t\tlet intervalRecommendation: IIrrigationIntervalRecommendation;\r\n\t\tlet ratios: IUnitRatios; // application ratio object\r\n\r\n\t\tif (!res) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._initializeForm(res);\r\n\t\tthis.isFuture = DateUtility.isFuture(this.f.EventDate.value as Date);\r\n\r\n\t\tif (res.IrrigationMethodId === eIrrigationMethods.RAINFALL) {\r\n\t\t\tthis.f.EventDate.disable();\r\n\t\t}\r\n\r\n\t\tthis.form.markAsDirty();\r\n\t\tthis._bindValueChanges();\r\n\r\n\t\tintervalRecommendation = IrrigationEvent.getIntervalRecommendation(res.LastIrrigationEventDate,\r\n\t\t\tres.RecommendedInterval);\r\n\r\n\t\tthis.flowmeter.hasData = res.HasFlowMeterData;\r\n\t\tthis.flowmeter.gallons = res.FlowMeterGallons;\r\n\t\tthis.flowmeter.areas.default = res.FlowMeterArea;\r\n\t\tthis.flowmeter.areas.drip = res.DripFlowMeterArea;\r\n\t\tthis.flowmeter.areas.microSprinkler = res.MicroSprinklerFlowMeterArea;\r\n\t\tthis.lastUpdatedString = res.LastUpdated;\r\n\t\tthis.isFloodEvent = IrrigationEvent.isFloodEvent(this.f.IrrigationMethodId.value);\r\n\r\n\t\tif (this.isFloodEvent) {\r\n\t\t\tthis.units = eIrrigationUnits.INCHES;\r\n\t\t}\r\n\r\n\t\tthis.irrigationMethods = res.IrrigationMethods;\r\n\t\tthis.CIMISPrecipitation = Number(res.CIMISPrecipitation);\r\n\r\n\t\tratios = IrrigationEvent.getUnitConversionRatio(this.f.IrrigationMethodId.value,\r\n\t\t\tres.SprinklerApplicationRate, res.DripApplicationRate, res.MicroSprinklerApplicationRate);\r\n\r\n\t\tthis._applicationRate = ratios.ratio;\r\n\t\tthis.recommendation.inches = res.RecommendedIrrigationAmount;\r\n\t\tthis._getHoursValues();\r\n\t\tthis._checkForFlowmeterData();\r\n\r\n\t\tthis.recentIrrigationEventExists = res.RecentIrrigationEventExists;\r\n\t\tthis.recentCutEventExists = res.RecentCutEventExists;\r\n\r\n\t\tthis.isWarningSectionVisible = this._isWarningVisible(this.recentIrrigationEventExists,\r\n\t\t\tthis.recentCutEventExists);\r\n\r\n\t\tif (!res.RecommendationSummary) {\r\n\t\t\tthis.irrigationRecommendationDetails = null;\r\n\t\t} else {\r\n\t\t\tthis.irrigationRecommendationDetails = res.RecommendationSummary;\r\n\r\n\t\t\tthis.warningTextRecommendation = this.irrigationEvent.getWarningTextRecommendation(\r\n\t\t\t\tthis.isFloodEvent, this.units, this.recentCutEventExists,\r\n\t\t\t\tthis.planting.CommodityTypeId,\r\n\t\t\t\tthis.irrigationRecommendationDetails.DaysSinceLastIrrigation,\r\n\t\t\t\tthis.irrigationRecommendationDetails.ValidRainEventsCount,\r\n\t\t\t\tthis._countZeroETRecords(res.RecommendationSummary.ETEvents), this.isFuture);\r\n\t\t}\r\n\r\n\t\tif (this.planting) {\r\n\t\t\tthis.isOnOrBeforeWetDate = DateUtility.isOnOrBefore(this.f.EventDate.value,\r\n\t\t\t\tthis.planting.WetDate);\r\n\t\t}\r\n\r\n\t\tthis.averageDeficit.Deficit = res.AverageDeficit;\r\n\t\tthis.averageDeficit.Days = res.DaysSinceLastIrrigation;\r\n\t\tthis.lastIrrigationEventDate = this._getPreviousIrrigationDate(this.averageDeficit.Days, this.f.EventDate.value);\r\n\t}\r\n\r\n\tprivate _countZeroETRecords(etEvents: IETEvent[]): number {\r\n\r\n\t\tif (!etEvents || etEvents.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t} else {\r\n\t\t\treturn etEvents.filter(x => x.ET === 0).length;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _selectIrrigationMethod(): void {\r\n\t\tthis._checkForFlowmeterData(); // update flowmeter area based on irrigation method\r\n\r\n\t\tthis.isFloodEvent = IrrigationEvent.isFloodEvent(this.f.IrrigationMethodId.value);\r\n\r\n\t\tif (this.isFloodEvent) {\r\n\t\t\tthis.units = eIrrigationUnits.INCHES;\r\n\t\t}\r\n\r\n\t\tif (!this.planting) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.isRecommendationVisible && this.f.IrrigationMethodId.valid) {\r\n\t\t\tthis._getRecommendation().then(() => {\r\n\r\n\t\t\t\tthis.setManagerRec(this._amountFieldNames.inches.manager,\r\n\t\t\t\t\tthis.f.ManagerAmountRecommendation.value);\r\n\r\n\t\t\t\tthis.setApplied(this._amountFieldNames.inches.applied,\r\n\t\t\t\t\tthis.f.WaterApplied.value);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _showIrrigationWarning(events: IEventGroup[]): void {\r\n\t\tthis._dialog.open(IrrigationEventRecalculateWarningDialog, {\r\n\t\t\twidth: '500px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: {\r\n\t\t\t\teffectedEvents: events,\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._hide();\r\n\t}\r\n\r\n\tprivate _showKeepDiscard(): void {\r\n\t\tthis._dialog.open(SharedKeepDiscardDialog, {\r\n\t\t\twidth: '500px',\r\n\t\t\tdisableClose: true,\r\n\t\t});\r\n\r\n\t\tthis._hide();\r\n\t}\r\n\r\n\tprivate _setCropManageRecommendation(inches: number, applicationRate: number): void {\r\n\t\tthis.recommendation.inches =\r\n\t\t\tthis._validateService.convertToFloat(inches, 2);\r\n\r\n\t\tthis.recommendation.hours = this._validateService.convertToFloat(\r\n\t\t\tthis.recommendation.inches * (1 / applicationRate), 1);\r\n\t}\r\n\r\n\tprivate _updateHours(field: string, inches: number): void {\r\n\t\tlet hours: number = null;\r\n\r\n\t\tinches = ValidateService.numberIsEmpty(inches) ? null : Number(inches);\r\n\r\n\t\tif (!this._applicationRate) {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\tmessage: `Application rate for this irrigation method is invalid. Please update it in\r\n\t\t\t\t\tplanting settings.`\r\n\r\n\t\t\t});\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (inches !== null) {\r\n\t\t\thours = ValidateService.roundToDecimalPlaces(inches / this._applicationRate, 1);\r\n\t\t}\r\n\r\n\t\tswitch (field) {\r\n\t\t\tcase this._amountFieldNames.inches.recommended:\r\n\t\t\t\tthis.recommendation.hours = hours;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase this._amountFieldNames.inches.manager:\r\n\t\t\t\tthis.f.ManagerAmountRecommendationHours.setValue(hours);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase this._amountFieldNames.inches.applied:\r\n\t\t\t\tthis.f.WaterAppliedHours.setValue(hours);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _updateInches(field: string, hours: number): void {\r\n\t\tlet inches: number = null;\r\n\r\n\t\thours = ValidateService.numberIsEmpty(hours) ? null : Number(hours);\r\n\r\n\t\tif (!this._applicationRate) {\r\n\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\tmessage: `Application rate for this irrigation method is invalid. Please update it in\r\n\t\t\t\t\tplanting settings.`\r\n\r\n\t\t\t});\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (hours !== null) {\r\n\t\t\tinches = ValidateService.roundTo2DecimalPlaces(hours * this._applicationRate, 3);\r\n\t\t}\r\n\r\n\t\tswitch (field) {\r\n\t\t\tcase this._amountFieldNames.hours.recommended:\r\n\t\t\t\tthis.recommendation.inches = inches;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase this._amountFieldNames.hours.manager:\r\n\t\t\t\tthis.f.ManagerAmountRecommendation.setValue(inches);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase this._amountFieldNames.hours.applied:\r\n\t\t\t\tthis.f.WaterApplied.setValue(inches);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\t<h4 mat-dialog-title>\r\n        {{'Recommendations Changed' | translate}}\r\n    </h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<div class=\"bk-modal__remove-text\">\r\n            {{'Action has changed the recommendation for the following event(s)' | translate }}:\r\n        </div>\r\n        <table class=\"bk-event-table__affected-events\">\r\n            <tr *ngFor=\"let event of effectedEvents\">\r\n                <td class=\"bk-event-table__affected-events-cell--date\">\r\n                    {{event.EventDate | date:'mediumDate'}}\r\n                </td>\r\n                <td class=\"bk-event-table__affected-events-cell\">\r\n                    <div class=\"bk-planting__event-row__icon bk-button--blue-icon\">\r\n                        <svg-water></svg-water>\r\n                    </div>\r\n                    <span *ngIf=\"event && event.Irrigation\">\r\n                        {{event.Irrigation.IrrigationMethod}}\r\n                    </span>\r\n                </td>\r\n            </tr>\r\n        </table>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button class=\"bk-button bk-button--medium\"\r\n            (click)=\"close($event)\">\r\n            {{ 'Continue' | translate}}\r\n        </button>\r\n\t</div>\r\n</div>\r\n","import { Component, OnInit, Input, Inject } from '@angular/core';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { IEventGroup } from '../../models/event/interfaces';\r\nimport { IrrigationUpdateService } from './update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'irrigation-event-recalculate-warning',\r\n\ttemplateUrl: 'recalculate-warning.html'\r\n})\r\n\r\nexport class IrrigationEventRecalculateWarningDialog implements OnInit {\r\n\r\n\tpublic effectedEvents: IEventGroup[];\r\n\r\n\tconstructor(\r\n\t\tprivate _irrigationUpdateService: IrrigationUpdateService,\r\n\t\tprivate _dialogRef: MatDialogRef<IrrigationEventRecalculateWarningDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { effectedEvents: IEventGroup[] }\r\n\t) { }\r\n\r\n\tngOnInit() {\r\n\t\tif (this._data) {\r\n\t\t\tthis.effectedEvents = this._data.effectedEvents;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic close($event: MouseEvent): void {\r\n\t\tthis._dialogRef.close();\r\n\t\tthis._irrigationUpdateService.fireRecalculateWarningClosed($event);\r\n\t}\r\n}\r\n","<div class=\"bk-modal__dropdown-row\">\r\n\t<span class=\"bk-recommendation__label bk-bold\">\r\n\t\t{{'Average ET' | translate }}\r\n\t\t<info-icon matTooltip=\"{{'Average ET Text' | translate }}\"></info-icon>\r\n\t</span>\r\n\t<span class=\"bk-recommendation__data\">\r\n\t\t{{summary.AverageCropET | number: '1.2-2' | zeroIfEmpty }} {{'in' | translate }}/{{'day' | translate }}\r\n\t</span>\r\n</div>\r\n\r\n<div class=\"bk-modal__dropdown-row\">\r\n\t<span class=\"bk-recommendation__label bk-bold\">\r\n\t\t{{'Average Crop Coefficient' | translate }}\r\n\t\t<info-icon matTooltip=\"{{'Average Crop Coefficient Text' | translate}}\"></info-icon>\r\n\t</span>\r\n\t<span class=\"bk-recommendation__data\">\r\n\t\t{{summary.AverageCropCoefficient | number: '1.0-2' | zeroIfEmpty }}\r\n\t</span>\r\n</div>\r\n\r\n<div class=\"bk-modal__dropdown-row\">\r\n\t<span class=\"bk-recommendation__label bk-bold\">\r\n\t\t{{'Distribution Uniformity' | translate }}\r\n\t\t<info-icon matTooltip=\"{{'Distribution Uniformity Text' | translate}}\"></info-icon>\r\n\t</span>\r\n\t<span class=\"bk-recommendation__data\">\r\n\t\t{{summary.Distribution | number: '1.0-2' | zeroIfEmpty }}%\r\n\t</span>\r\n</div>\r\n\r\n<div class=\"bk-modal__dropdown-row\">\r\n\t<span class=\"bk-recommendation__label bk-bold\">\r\n\t{{'Days Since Last Irrigation' | translate }}\r\n\t\t<info-icon matTooltip=\"{{'Days Since Last Irrigation Text' | translate}}\"></info-icon>\r\n\t</span>\r\n\t<span class=\"bk-recommendation__data\">\r\n\t\t{{summary.DaysSinceLastIrrigation | number: '1.0-0' | zeroIfEmpty }} \r\n\t\t{{ (summary.DaysSinceLastIrrigation > 1 ? 'days' : 'day') | translate }}\r\n\t\t<i *ngIf=\"summary.IsImpactedByMacroTunnel\"\r\n\t\t\tclass=\"bk-event-recommendation-not-applied-icon fa fa-warning\"\r\n\t\t\tmatTooltip=\"{{ 'This number is impacted by macro tunnel usage' | translate }}\"></i>\r\n\t</span>\r\n</div>\r\n\r\n<div class=\"bk-modal__dropdown-row\">\r\n\t<span class=\"bk-recommendation__label bk-bold\">\r\n\t\t{{'Leaching Requirement' | translate }}\r\n\t\t<info-icon matTooltip=\"{{'Leaching Requirement Text' | translate }}\"></info-icon>\r\n\t</span>\r\n\t<span class=\"bk-recommendation__data\">\r\n\t\t{{leechingFactors.percent}}% \r\n\t\t<span *ngIf='leechingFactors.percent > 0'>\r\n\t\t\t({{leechingFactors.decimal | number: '1.1-2'}})\r\n\t\t</span>\r\n\t</span>\r\n</div>\r\n\r\n<div *ngIf=\"summary.CropSensitivity && summary.CropSensitivity !== 1\"\r\n\tclass=\"bk-modal__dropdown-row\">\r\n\r\n\t<span class=\"bk-recommendation__label bk-bold\">\r\n\t\t{{'Crop Sensitivity' | translate }}\r\n\t\t<info-icon matTooltip=\"{{'Crop Sensitivity Help Text' | translate }}\"></info-icon>\r\n\t</span>\r\n\t<span class=\"bk-recommendation__data\">\r\n\t\t{{summary.CropSensitivity | number: '1.1-1' }}\r\n\t</span>\r\n</div>\r\n\r\n<div class=\"bk-modal__dropdown\"\r\n\t[class.bk-modal__dropdow--alt]=\"isPlantingPerennial\">\r\n\t<span class=\"bk-recommendation__label bk-bold\">\r\n\t\t{{'Total Precipitation' | translate }}\r\n\t\t<info-icon matTooltip=\"{{'Total Precipitation Text' | translate}}\"></info-icon>\r\n\t</span>\r\n\t<span class=\"bk-recommendation__data\">\r\n\t\t{{summary.TotalPrecipitation | number: '1.0-2' | zeroIfEmpty }} {{'in' | translate }}\r\n\t</span>\r\n</div>\r\n\r\n<div class=\"bk-modal__dropdown\">\r\n\t{{'Total Crop ET' | translate }} = {{'Total Crop ET Formula' | translate }}\r\n</div>\r\n\r\n<div class=\"bk-modal__dropdown bk-bold\">\r\n\t<span>\r\n\t\t{{totalCropET | number: '1.2-2' | zeroIfEmpty}} in. =  \r\n\t\t{{summary.AverageCropET | number: '1.2-2' | zeroIfEmpty}} x \r\n\t\t{{summary.AverageCropCoefficient | number: '1.2-2' | zeroIfEmpty}} x \r\n\t\t{{summary.DaysSinceLastIrrigation | number: '1.0-0' | zeroIfEmpty}}\r\n\t</span>\r\n</div>\r\n\r\n<ng-container *ngIf=\"totalCropET > summary.TotalPrecipitation\">\r\n\t<ng-container *ngIf='!summary.CropSensitivity || summary.CropSensitivity === 1'>\r\n\t\t<!-- CropSensitivity is a multiplier, so if its 1, it has no effect -->\r\n\t\t<div class=\"bk-modal__dropdown\">\r\n\t\t\t{{'Recommended Irrigation Formula' | translate }}\r\n\t\t</div>\r\n\r\n\t\t<div class=\"bk-modal__dropdown bk-bold\">\r\n\t\t\t{{summary.RecommendedIrrigationAmount | number: '1.2-2' | zeroIfEmpty}} in. = \r\n\t\t\t({{totalCropET | number: '1.2-2' | zeroIfEmpty}} {{'in' | translate }}\r\n\t\t\t- {{summary.TotalPrecipitation | number: '1.2-2' | zeroIfEmpty}} {{'in' | translate }}) x 100 / (\r\n\t\t\t{{summary.Distribution | number: '1.2-2' | zeroIfEmpty}} * (1 - \r\n\t\t\t{{leechingFactors.decimal}}))\r\n\t\t</div>\r\n\t</ng-container>\r\n\t<ng-container *ngIf='summary.CropSensitivity && summary.CropSensitivity !== 1'>\r\n\r\n\t\t<div class=\"bk-modal__dropdown\">\r\n\t\t\t{{'Recommended Irrigation Formula 2' | translate }}\r\n\t\t</div>\r\n\r\n\t\t<div class=\"bk-modal__dropdown bk-bold\">\r\n\t\t\t{{summary.RecommendedIrrigationAmount | number: '1.2-2' | zeroIfEmpty}} in. = \r\n\t\t\t({{totalCropET | number: '1.2-2' | zeroIfEmpty}} {{'in' | translate }}\r\n\t\t\t- {{summary.TotalPrecipitation | number: '1.2-2' | zeroIfEmpty}} {{'in' | translate }}) x 100 / (\r\n\t\t\t{{summary.Distribution | number: '1.2-2' | zeroIfEmpty}}\r\n\t\t\tx {{summary.CropSensitivity | number: '1.1-1'}} x (1 - \r\n\t\t\t{{leechingFactors.decimal}}))\r\n\t\t</div>\r\n\t</ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"summary.TotalPrecipitation >= totalCropET\">\r\n\t<div class=\"bk-modal__dropdown\">\r\n\t\t{{'Rainfall' | translate}}({{summary.TotalPrecipitation | number: '1.2-2' | zeroIfEmpty }} in.)\r\n\t\t> {{ 'Total Crop ET' | translate}}({{totalCropET | number: '1.2-2' | zeroIfEmpty}})\r\n\t</div>\r\n\t<div class=\"bk-modal__dropdown bk-bold\">\r\n\t\tRecommendation is 0 inches because rainfall is greater than ET.\r\n\t</div>\r\n</ng-container>","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { IIrrigationRecommendationSummaryModel } from '../interfaces';\r\nimport { CalculateService } from '../../../services/calculate.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'irrigation-recommendation-summary',\r\n\ttemplateUrl: 'recommendation-summary.html'\r\n})\r\n\r\n// shell dialog for irrigation event component\r\nexport class IrrigationRecommendationSummaryComponent implements OnInit, OnDestroy {\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\t@Input()\r\n\tsummary: IIrrigationRecommendationSummaryModel;\r\n\r\n\t@Input()\r\n\tisPlantingPerennial: boolean;\r\n\r\n\tpublic totalCropET: number;\r\n\r\n\tpublic leechingFactors: {\r\n\t\tdecimal: number,\r\n\t\tpercent: number\r\n\t}\r\n\r\n\tconstructor() {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.leechingFactors = {\r\n\t\t\tdecimal: CalculateService.percentToDecimal(this.summary.LeechingFactor),\r\n\t\t\tpercent: this.summary.LeechingFactor\r\n\t\t}\r\n\r\n\t\tthis.totalCropET = this.getTotalET(this.summary);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tprivate getTotalET(data: IIrrigationRecommendationSummaryModel): number {\r\n\t\tlet result: number;\r\n\r\n\t\tresult = data.AverageCropET * data.AverageCropCoefficient * data.DaysSinceLastIrrigation;\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n\r\nimport { HttpServiceGetOptions, HttpServicePostOptions } from '../../services/http.service';\r\nimport { ModelService } from '../../services/model.service';\r\n\r\nimport { DateUtility } from '../../classes/dateUtility';\r\n\r\nimport { IIrrigationMethod } from '../../models/irrigation-method/interfaces';\r\n\r\nimport {\r\n\tIIrrigationRecommendedNContribution, IIrrigationRecommendationSummaryModel,\r\n\tIIrrigationEventEditResponse,\r\n\tIIrrigationRecommendationSummaryModelJSON,\r\n\tIIrrigationEventEditJSON,\r\n\tIIrrigationRecommendedNContributionJSON,\r\n\tIAdditionalWaterModel,\r\n\tIIrrigationEventService,\r\n\tIAverageDeficit,\r\n\tSimpleSingleCallIrrigationRecommendationModel,\r\n\tEvaporationRecordSimple,\r\n\tEvaporationRecordJSON\r\n} from './interfaces';\r\nimport { IrrigationEvent } from './irrigationEvent';\r\nimport { IEventPostResponseJSON } from '../../models/event/interfaces';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { of } from 'rxjs';\r\nimport { EventResponse } from '../../models/event/eventResponse';\r\nimport { IrrigationEventUpdateParams } from './irrigationEventUpdateParams';\r\nimport { IrrigationEventUpdateParamsInternal } from './irrigationEventUpdateParamsInternal';\r\n\r\n@Injectable()\r\nexport class IrrigationService extends ModelService implements IIrrigationEventService {\r\n\r\n\tprivate urls = {\r\n\t\tcreateForm: (plantingId: number) => `/v2/plantings/${plantingId}/irrigation-events/form.json`,\r\n\t\tcreate: (plantingId: number) => `/v3/plantings/${plantingId}/irrigation-events.json`,\r\n\t\tdelete: (id: number) => `/v2/irrigation-events/${id}.json`,\r\n\t\tedit: (id: number) => `/v3/irrigation-events/${id}/internal.json`,\r\n\t\tupdateDateOnly: (id: number) => `/v3/irrigation-events/${id}/date-only.json`,\r\n\t\tgetRecency: (plantingId: number) => `/v2/plantings/${plantingId}/irrigation-events/recency.json`,\r\n\t\tgetAverageDeficit: (plantingId: number) => `/v0/plantings/${plantingId}/average-deficit.json`,\r\n\t\tcountEventsOnDate: (plantingId: number) => `/v2/plantings/${plantingId}/irrigation-events/count-events-on-date.json`,\r\n\t\tlistByPlantingId: (plantingId: number) => `/v2/plantings/${plantingId}/irrigation-events/details.json`,\r\n\t\tshow: (eventId: number) => `/v2/irrigation-events/${eventId}.json`,\r\n\t\trecommendation: {\r\n\t\t\tseasonET: () => `/v2/season-et.json`,\r\n\t\t\tget: (plantingId: number) =>  `/v2/plantings/${plantingId}/irrigation-events/recommendations.json`,\r\n\t\t\tintervalSummary: (id: number) => `/v2/irrigation-events/${id}/recommendations-interval-summary.json`,\r\n\t\t\tsummary: (plantingId: number) => `/v2/plantings/${plantingId}/irrigation-events/recommendation-summary.json`\r\n\t\t}\r\n\t}\r\n\r\n\tpublic irrigationMethods: IIrrigationMethod[];\r\n\r\n\tpublic getAverageDeficit(plantingId: number, targetDate: Date, eventId?: number): Promise<IAverageDeficit> {\r\n\t\tlet params: HttpParams;\r\n\t\tlet options: HttpServiceGetOptions;\r\n\t\tlet utcDate: Date;\r\n\r\n\t\tutcDate = DateUtility.ConvertToUTC(targetDate);\r\n\r\n\t\tif (!utcDate) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('targetDate', utcDate.toISOString());\r\n\r\n\t\teventId = eventId ? eventId : 0;\r\n\r\n\t\tparams = params.set('eventId', eventId.toString());\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.getAverageDeficit(plantingId),\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic getRecency(id: number, eventDate: Date, plantingId: number): Promise<{ RecentIrrigationEventExists: boolean }> {\r\n\t\tlet options: HttpServiceGetOptions;\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tif (!eventDate || !DateUtility.ConvertToUTC(eventDate)) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tif (!id) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('eventId', id.toString())\r\n\t\t\t.set('eventDate', DateUtility.ConvertToUTC(eventDate).toISOString());\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.getRecency(plantingId),\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\t/**\r\n\t * Method used to prevent accidental creation of multiple irrigation events\r\n\t * on the same date.\r\n\t * @param plantingId\r\n\t * @param date\r\n\t * @returns true if there are other irrigation events on this date. False otherwise\r\n\t */\r\n\tpublic countDuplicatesOnDate(plantingId: number, date: Date): Promise<number> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('targetDate', date.toISOString());\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.countEventsOnDate(plantingId),\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getCreateModel(plantingId: number): Promise<IIrrigationEventEditResponse> {\r\n\r\n\t\treturn this.get(this.urls.createForm(plantingId), (data: IIrrigationEventEditJSON): IIrrigationEventEditResponse => {\r\n\t\t\tif (data && data.IrrigationMethods) {\r\n\t\t\t\tthis.irrigationMethods = data.IrrigationMethods;\r\n\t\t\t}\r\n\r\n\t\t\treturn IrrigationEvent.convertEditJSONtoResponse(data);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getIrrigationIntervalSummary(id: number): Promise<IIrrigationRecommendationSummaryModel> {\r\n\r\n\t\treturn this.get(this.urls.recommendation.intervalSummary(id), (data: IIrrigationRecommendationSummaryModelJSON) => {\r\n\t\t\tlet result: IIrrigationRecommendationSummaryModel;\r\n\r\n\t\t\tresult = IrrigationEvent.convertRecommendationSummaryJSON(data);\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getRecommendationSummary(plantingId: number, eventDate: Date, irrigationMethodId: number,\r\n\t\teventId: number, customDeficit: number):\r\n\t\tPromise<IIrrigationRecommendationSummaryModel> {\r\n\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tif (!irrigationMethodId) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tif (!eventDate || !DateUtility.ConvertToUTC(eventDate)) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('eventDate', DateUtility.ConvertToUTC(eventDate).toISOString())\r\n\t\t\t.set('irrigationMethodId', irrigationMethodId.toString());\r\n\r\n\t\tif (eventId) {\r\n\t\t\tparams = params.set('eventId', eventId.toString());\r\n\t\t}\r\n\r\n\t\tif (customDeficit !== null) {\r\n\t\t\tparams = params.set('customDeficit', customDeficit.toString());\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.recommendation.summary(plantingId),\r\n\t\t\t(data: IIrrigationRecommendationSummaryModelJSON): IIrrigationRecommendationSummaryModel => {\r\n\r\n\t\t\t\tlet result: IIrrigationRecommendationSummaryModel;\r\n\r\n\t\t\t\tresult = IrrigationEvent.convertRecommendationSummaryJSON(data);\r\n\r\n\t\t\t\treturn result;\r\n\r\n\t\t\t}, params\r\n\t\t) as Promise<IIrrigationRecommendationSummaryModel>;\r\n\t}\r\n\r\n\tpublic getEditModel(id: number): Promise<IIrrigationEventEditResponse> {\r\n\r\n\t\treturn this.get(this.urls.show(id),\r\n\t\t\t(data: IIrrigationEventEditJSON): IIrrigationEventEditResponse => {\r\n\r\n\t\t\t\tlet result: IIrrigationEventEditResponse;\r\n\r\n\t\t\t\tresult = IrrigationEvent.convertEditJSONtoResponse(data);\r\n\r\n\t\t\t\tif (result && result.IrrigationMethods) {\r\n\t\t\t\t\tthis.irrigationMethods = result.IrrigationMethods;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn result;\r\n\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tpublic getSeasonET(event: SimpleSingleCallIrrigationRecommendationModel): Promise<EvaporationRecordSimple[]> {\r\n\t\treturn this.post(this.urls.recommendation.seasonET(),\r\n\t\t\t(data: EvaporationRecordJSON[]): EvaporationRecordSimple[] => {\r\n\t\t\t\treturn this._convertEvaporationRecord(data);\r\n\t\t\t}, event);\r\n\t}\r\n\r\n\tprivate _convertEvaporationRecord(records: EvaporationRecordJSON[]): EvaporationRecordSimple[]  {\r\n\t\tlet result: EvaporationRecordSimple[];\r\n\r\n\t\tif (!records || records.length === 0) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tresult = [];\r\n\r\n\t\trecords.forEach(x => {\r\n\t\t\tresult.push({\r\n\t\t\t\tDate: new Date(x.Date),\r\n\t\t\t\tETo: x.ETo,\r\n\t\t\t\tETc: x.ETo * x.Kc,\r\n\t\t\t\tRain: x.Rain,\r\n\t\t\t\tApplied: x.Applied\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t// change for Alfafla\r\n\tpublic create(plantingId: number, event: IrrigationEventUpdateParams): Promise<IEventPostResponseJSON> {\r\n\r\n\t\tif (!event) {\r\n\t\t\tthrow new Error('IrrigationService: Create() - event is empty');\r\n\t\t}\r\n\r\n\t\tif (!event.EventDate) {\r\n\t\t\tthrow new Error('IrrigationService: Create() - event.EventDate is missing');\r\n\t\t}\r\n\r\n\t\treturn this.post(this.urls.create(plantingId),\r\n\t\t\t(data: IEventPostResponseJSON) => {\r\n\t\t\t\treturn data\r\n\t\t\t}, event);\r\n\t}\r\n\r\n\tpublic update(event: IIrrigationEventEditResponse): Promise<EventResponse> {\r\n\r\n\t\tlet params: IrrigationEventUpdateParamsInternal;\r\n\r\n\t\tparams = new IrrigationEventUpdateParamsInternal(event);\r\n\r\n\t\treturn this.put(this.urls.edit(event.Id),\r\n\t\t\t(response: IEventPostResponseJSON): EventResponse => {\r\n\t\t\t\treturn new EventResponse(response);\r\n\t\t\t}, params);\r\n\t}\r\n\r\n\tpublic updateDateOnly(eventId: number, eventDate: Date): Promise<EventResponse> {\r\n\t\tlet params: HttpParams;\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tparams = new HttpParams().set('eventDate', DateUtility.ConvertToUTC(eventDate).toISOString());\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.updateDateOnly(eventId),\r\n\t\t\tparams: params,\r\n\t\t\tbody: null,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: IEventPostResponseJSON): EventResponse => {\r\n\t\t\t\treturn new EventResponse(response);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn this.httpService.put(options);\r\n\t}\r\n\r\n\tpublic delete(id: number): Promise<IEventPostResponseJSON> {\r\n\r\n\t\treturn this.deleteItem(this.urls.delete(id), (data: IEventPostResponseJSON) => {\r\n\t\t\treturn data;\r\n\t\t}, null);\r\n\t}\r\n\r\n\tpublic getAdditionalWaterData(id: number): Promise<IAdditionalWaterModel[]> {\r\n\r\n\t\tif (!id) {\r\n\t\t\tthrow new Error('IrrigationService.getAdditionalWaterData() - id is null');\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.listByPlantingId(id),\r\n\t\t\t(json: IAdditionalWaterModel[]): IAdditionalWaterModel[] => {\r\n\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn new Array();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Alternate irrigation recommendation method, for N Contribution water\r\n\t *\r\n\t * @param fertilizationEventId\r\n\t * @param startDate\r\n\t * @param irrigationMethodId\r\n\t */\r\n\tpublic getNContributionRecommendation(plantingId: number, startDate: Date, irrigationMethodId: number = null,\r\n\t\tdaysToNextFertilization: number = null, fertilizationsPerMonth: number = null): Promise<IIrrigationRecommendedNContribution> {\r\n\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tif (!startDate) {\r\n\t\t\tthrow new Error('startDate is empty');\r\n\t\t}\r\n\r\n\t\tif (!plantingId) {\r\n\t\t\tthrow new Error('plantingId is null');\r\n\t\t}\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('startDate', DateUtility.ConvertToUTC(startDate).toISOString());\r\n\r\n\t\tif (irrigationMethodId) {\r\n\t\t\tparams = params.set('irrigationMethodId', irrigationMethodId.toString());\r\n\t\t}\r\n\r\n\t\tif (daysToNextFertilization) {\r\n\t\t\tparams = params.set('daysToNextFertilization', daysToNextFertilization.toString());\r\n\t\t}\r\n\r\n\t\tif (fertilizationsPerMonth) {\r\n\t\t\tparams = params.set('fertilizationsPerMonth', fertilizationsPerMonth.toString());\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.recommendation.get(plantingId), (r: IIrrigationRecommendedNContributionJSON):\r\n\t\t\tIIrrigationRecommendedNContribution => {\r\n\r\n\t\t\tlet result: IIrrigationRecommendedNContribution;\r\n\r\n\t\t\tif (!r) {\r\n\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\tresult = {\r\n\t\t\t\t\tirrigationAmountRecommended: r.irrigationAmountRecommended,\r\n\t\t\t\t\tLastIrrigationMethod: r.LastIrrigationMethod,\r\n\t\t\t\t\tSuccess: r.Success,\r\n\t\t\t\t\tratio: r.ratio,\r\n\t\t\t\t\tPreviousIrrigationEventDate: DateUtility.DotNetToDate(r.PreviousIrrigationEventDate)\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}, params);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { IEventPostResponse, IEventPostResponseJSON } from '../../models/event/interfaces';\r\n\r\n@Injectable()\r\nexport class IrrigationUpdateService {\r\n\tprivate _confirmationClosed: Subject<null> = new Subject<null>();\r\n\tpublic confirmationClosed$ = this._confirmationClosed.asObservable();\r\n\r\n\tprivate _deleted: Subject<IEventPostResponseJSON> = new Subject<IEventPostResponseJSON>();\r\n\tpublic deleted$ = this._deleted.asObservable();\r\n\r\n\tprivate _recalculateWarningClosed: Subject<MouseEvent> = new Subject<MouseEvent>();\r\n\tpublic recalculateWarningClosed$ = this._recalculateWarningClosed.asObservable();\r\n\r\n\tpublic fireConfirmationClosed() {\r\n\t\tthis._confirmationClosed.next();\r\n\t}\r\n\r\n\tpublic fireDeleted(response: IEventPostResponseJSON) {\r\n\t\tthis._deleted.next(response);\r\n\t}\r\n\r\n\tpublic fireRecalculateWarningClosed(e: MouseEvent) {\r\n\t\tthis._recalculateWarningClosed.next(e);\r\n\t}\r\n}\r\n","import { Subject, Observable } from 'rxjs';\r\n\r\nexport interface ILocalizationDictionary {\r\n\tkeyword?: string;\r\n\tid?: number;\r\n\tlanguageCode: number;\r\n\tword: string\r\n};\r\n\r\nexport interface ILocalizatinDictionaryJSON {\r\n\tId: number,\r\n\tLanguageCode: number,\r\n\tKeyword: string,\r\n\tWord: string\r\n}\r\n\r\nexport interface ITranslation {\r\n\tkeyword: string,\r\n\tediting: boolean,\r\n\ttranslations: {\r\n\t\t[languageCode: number]: ILocalizationDictionary\r\n\t}\r\n}\r\n\r\nexport enum eLanguageCodes {\r\n\tENGLISH = 1,\r\n\tSPANISH,\r\n}\r\n\r\nexport interface LanguageCode {\r\n\tCode: string,\r\n\tId: number,\r\n\tLanguage: string\r\n}\r\n\r\nexport interface ITranslationService {\r\n\tcurrentLanguageId: number;\r\n\tcurrentLanguage$: Observable<number>;\r\n\r\n\tsetCurrentLanguage(language: number): void;\r\n\tloadLanguages(): Promise<LanguageCode[]>;\r\n\tloadTranslations(override: boolean): Promise<ITranslation[]>;\r\n\ttranslate(keyword: string): string;\r\n\taddTranslation(keyword: string, translations: { languageCode: number, word: string }[]): Promise<string>;\r\n\tsaveTranslation(translations: ILocalizationDictionary[]): Promise<void>;\r\n\tgetLanguages(): LanguageCode[];\r\n\tdeleteTranslation(ids: number[]): Promise<void>;\r\n}\r\n","<admin-nav></admin-nav>\r\n<div class=\"bk-admin__tab-container\">\r\n    <h5 class=\"bk-text--gray\">{{'Localization' | translate }}</h5>\r\n\r\n\t<div class=\"bk-nav__button-container bk-flex\">\r\n\r\n\t\t<div class=\"bk-flex-container\">\r\n            <button *ngIf=\"!addingSystemLabel && !editingSystemLabel\"\r\n                (click)=\"addingSystemLabel = true\"\r\n                class=\"bk-button bk-nav__button bk-button--small\">\r\n\r\n\t\t\t\t<span class=\"bk-nav__button-icon\">+</span>\r\n\t\t\t\t<span class=\"bk-nav__button-text\">{{'Add' | translate }} {{'System Label' | translate }}</span>\r\n\t\t\t</button>\r\n\r\n            <button *ngIf=\"addingSystemLabel || editingSystemLabel\"\r\n                class=\"bk-button bk-nav__button bk-button--small\" disabled>\r\n\t\t\t\t<span class=\"bk-nav__button-icon\">+</span>\r\n\t\t\t\t<span class=\"bk-nav__button-text\">{{'Add' | translate }} {{'System Label' | translate }}</span>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t\t<label class=\"bk-data-table__search--label\">\r\n\t\t\tSearch: <input class=\"bk-data-table__search--input\" [(ngModel)]=\"searchQuery\"\r\n\t\t\t\t(ngModelChange)=\"applyFilter()\" type=\"text\" value=\"\" />\r\n\t\t</label>\r\n\t</div>\r\n\r\n\t<!-- table START -->\r\n\r\n    <table class=\"bk-admin__table\">\r\n        <thead>\r\n            <tr>\r\n                <th width=\"30%\">{{'System Label' | translate }}</th>\r\n\t\t\t\t<th width=\"20%\">{{'Action' | translate}}</th>\r\n                <th *ngFor=\"let language of languages\">{{language.Language}}</th>\r\n            </tr>\r\n        </thead>\r\n        <tbody>\r\n            <tr class=\"bk-admin__table__row\" *ngIf=\"addingSystemLabel\">\r\n                <td>\r\n                    <input type=\"text\" [(ngModel)]=\"newSystemLabel.keyword\" />\r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\r\n                    <button class=\"bk-button bk-admin__button bk-button--text-only\"\r\n                        (click)=\"cancelAddingSystemLabel()\">\r\n\t\t\t\t\t\t{{'Cancel' | translate }}\r\n\t\t\t\t\t</button>\r\n\r\n                    <button class=\"bk-button bk-admin__button\"\r\n                        (click)=\"addSystemLabel()\">\r\n\t\t\t\t\t\t{{'Save' | translate }}\r\n\t\t\t\t\t</button>\r\n                </td>\r\n                <td *ngFor=\"let language of languages\">\r\n                    <ng-container *ngIf=\"newSystemLabel.translations[language.Id]\">\r\n                        <input type=\"text\" [(ngModel)]=\"newSystemLabel.translations[language.Id].word\" />\r\n                    </ng-container>\r\n                </td>\r\n            </tr>\r\n            <ng-container *ngFor=\"let entry of translations\">\r\n\r\n                <tr class=\"bk-admin__table__row\" *ngIf=\"!entry.editing\">\r\n                    <td>\r\n                        <span>{{entry.keyword}}</span>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td>\r\n\r\n                        <button class=\"bk-button bk-admin__button bk-button--text-only\"\r\n                            (click)=\"onDelete(entry)\"\r\n\t\t\t\t\t\t\t[disabled]=\"addingSystemLabel || editingSystemLabel\">\r\n\t\t\t\t\t\t\t{{'Delete' | translate }}\r\n\t\t\t\t\t\t</button>\r\n\r\n                        <button class=\"bk-button bk-admin__button\"\r\n                            (click)=\"editSystemLabel(entry)\"\r\n\t\t\t\t\t\t\t[disabled]=\"addingSystemLabel || editingSystemLabel\">\r\n\t\t\t\t\t\t\t{{'Edit' | translate }}\r\n\t\t\t\t\t\t</button>\r\n                    </td>\r\n                    <td *ngFor=\"let language of languages\">\r\n                        <span *ngIf=\"entry.translations[language.Id]\">\r\n\t\t\t\t\t\t\t{{entry.translations[language.Id].word}}\r\n\t\t\t\t\t\t</span>\r\n                    </td>\r\n                </tr>\r\n\r\n                <tr class=\"bk-admin__table__row\" *ngIf=\"entry.editing\">\r\n                    <td>\r\n                        <input type=\"text\" [(ngModel)]=\"newSystemLabel.keyword\" />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td>\r\n\r\n                        <button class=\"bk-button bk-admin__button bk-button--text-only\"\r\n                            (click)=\"cancelEditingSystemLabel(newSystemLabel)\">\r\n\t\t\t\t\t\t\t{{'Cancel' | translate }}\r\n\t\t\t\t\t\t</button>\r\n\r\n                        <button class=\"bk-button bk-admin__button\"\r\n                            (click)=\"saveSystemLabel()\">\r\n\t\t\t\t\t\t\t{{'Save' | translate }}\r\n\t\t\t\t\t\t</button>\r\n                    </td>\r\n\t\t\t\t\t<td *ngFor=\"let language of languages\">\r\n\t\t\t\t\t\t<ng-container *ngIf=\"newSystemLabel.translations[language.Id]\">\r\n\t\t\t\t\t\t\t<input type=\"text\" [(ngModel)]=\"newSystemLabel.translations[language.Id].word\" />\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</td>\r\n                </tr>\r\n            </ng-container>\r\n        </tbody>\r\n    </table>\r\n</div>\r\n","import { Component, OnInit, ViewChild, OnDestroy } from '@angular/core';\r\nimport { TranslateService } from './service';\r\nimport { ModalDirective } from 'ngx-bootstrap';\r\n\r\nimport { ILocalizationDictionary, ITranslation, eLanguageCodes, LanguageCode } from './interfaces';\r\nimport { Router } from '@angular/router';\r\nimport { TokenService } from '../../services/token.service';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { eNotificationTypes } from '../../interfaces/constants';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DeleteConfirmationComponent, DeleteConfirmationSettings } from '../shared/dialogs/delete-confirmation';\r\nimport { SharedUpdateService } from '../shared/dialogs/update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'localization',\r\n\ttemplateUrl: 'localization.component.html'\r\n})\r\n\r\nexport class LocalizationComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic searchQuery: string;\r\n\tpublic languages: LanguageCode[] = new Array();\r\n\tpublic translations: ITranslation[] = new Array(); // partially filtered set\r\n\tpublic translationsPermanent: ITranslation[]; // full set of results\r\n\r\n\tpublic addingSystemLabel = false;\r\n\tpublic editingSystemLabel = false;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tprivate _currentEntry: ITranslation;\r\n\r\n\tpublic newSystemLabel: ITranslation = {\r\n\t\tkeyword: '',\r\n\t\tediting: false,\r\n\t\ttranslations: {}\r\n\t};\r\n\r\n\tconstructor(\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate translateService: TranslateService,\r\n\t\tprivate _updateService: SharedUpdateService\r\n\t\t) {\r\n\r\n\t\tif (this._tokenService.isAuthenticated() === false) {\r\n\t\t\tthis._router.navigate(['login']);\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.translateService.loadLanguages()\r\n\t\t\t.then(res => {\r\n\t\t\t\tthis.languages = res;\r\n\t\t\t\tthis.prepNewSystemLabel(this.languages);\r\n\t\t\t\tthis.getTranslations();\r\n\t\t\t});\r\n\r\n\t\tthis._updateService.delete$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._delete(this._currentEntry);\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic applyFilter() {\r\n\t\tlet result: ITranslation[];\r\n\t\tlet query: string;\r\n\r\n\t\tif (!this.searchQuery) {\r\n\t\t\tquery = '';\r\n\t\t} else {\r\n\t\t\tquery = this.searchQuery.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif (!this.translationsPermanent || this.translationsPermanent.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tresult = this.translationsPermanent.filter(x => x.keyword.toLowerCase().indexOf(query) !== -1\r\n\t\t\t|| (x.translations[eLanguageCodes.ENGLISH] && x.translations[eLanguageCodes.ENGLISH].word &&\r\n\t\t\t\tx.translations[eLanguageCodes.ENGLISH].word.toLowerCase().indexOf(query) !== -1));\r\n\r\n\t\tthis.translations = result;\r\n\t}\r\n\r\n\tprivate getTranslations(override = false): void {\r\n\t\tthis.translateService.loadTranslations(override)\r\n\t\t\t.then(res => {\r\n\t\t\t\tthis.translations = res\r\n\t\t\t\tthis.translationsPermanent = res;\r\n\t\t\t\tthis.applyFilter();\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate prepNewSystemLabel(codes: LanguageCode[]): void {\r\n\r\n\t\tif (!this.newSystemLabel) {\r\n\t\t\tthrow new Error('newSystemLabel is empty');\r\n\t\t}\r\n\r\n\t\tif (!this.newSystemLabel.translations) {\r\n\t\t\tthrow new Error('newSystemLabel.translations is empty');\r\n\t\t}\r\n\r\n\t\tthis.newSystemLabel.keyword = '';\r\n\t\tthis.newSystemLabel.editing = false;\r\n\r\n\t\tif (!codes || codes.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let code of codes) {\r\n\t\t\tthis.newSystemLabel.translations[code.Id] = {\r\n\t\t\t\tkeyword: '',\r\n\t\t\t\tid: -1,\r\n\t\t\t\tlanguageCode: code.Id,\r\n\t\t\t\tword: '',\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate cancelAddingSystemLabel(): void {\r\n\t\tthis.addingSystemLabel = false;\r\n\t\tthis.prepNewSystemLabel(this.languages);\r\n\t}\r\n\r\n\t/**\r\n\t * Method for adding a new label. A different method is called when editing\r\n\t */\r\n\tpublic addSystemLabel(): void {\r\n\t\tlet newTranslations: ILocalizationDictionary[] = new Array();\r\n\r\n\t\tfor (let language of this.languages) {\r\n\t\t\tif (this.newSystemLabel.translations[language.Id]) {\r\n\t\t\t\tnewTranslations.push({\r\n\t\t\t\t\tlanguageCode: language.Id,\r\n\t\t\t\t\tword: this.newSystemLabel.translations[language.Id].word\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.translations.push(this.newSystemLabel);\r\n\r\n\t\tthis.translateService.addTranslation(this.newSystemLabel.keyword, newTranslations)\r\n\t\t\t.then((errors) => {\r\n\t\t\t\tif (errors && errors.length > 0) {\r\n\t\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\t\tmessage: errors\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.getTranslations(true);\r\n\t\t\t});\r\n\r\n\t\tthis.cancelAddingSystemLabel();\r\n\t}\r\n\r\n\t/**\r\n\t * Method for editing system label\r\n\t * @param entry\r\n\t */\r\n\tpublic editSystemLabel(entry: ITranslation) {\r\n\t\tif (!entry) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setNewSystemLabel(entry);\r\n\r\n\t\tif (!this.translations) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let translation of this.translations) {\r\n\r\n\t\t\tif (!translation) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (translation.keyword === entry.keyword) {\r\n\t\t\t\ttranslation.editing = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.editingSystemLabel = true;\r\n\t}\r\n\r\n\t/**\r\n\t * clean label before editing\r\n\t * @param entry\r\n\t */\r\n\tprivate setNewSystemLabel(entry: ITranslation) {\r\n\t\tif (!this.newSystemLabel || !this.newSystemLabel.translations) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!entry || !entry.translations) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.languages) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.newSystemLabel.keyword = entry.keyword;\r\n\r\n\t\tfor (let language of this.languages) {\r\n\r\n\t\t\tif (!language) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.newSystemLabel.translations[language.Id]) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (!entry.translations[language.Id]) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tthis.newSystemLabel.translations[language.Id].keyword = entry.translations[language.Id].keyword;\r\n\t\t\tthis.newSystemLabel.translations[language.Id].id = Number(entry.translations[language.Id].id);\r\n\r\n\t\t\tthis.newSystemLabel.translations[language.Id].languageCode =\r\n\t\t\t\tNumber(entry.translations[language.Id].languageCode);\r\n\r\n\t\t\tif (entry.translations[language.Id].word !== null) {\r\n\t\t\t\tthis.newSystemLabel.translations[language.Id].word = entry.translations[language.Id].word;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate cancelEditingSystemLabel(entry: ITranslation) {\r\n\t\tfor (let translation of this.translations) {\r\n\t\t\tif (translation.keyword === entry.keyword) {\r\n\t\t\t\ttranslation.editing = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.prepNewSystemLabel(this.languages);\r\n\t\tthis.editingSystemLabel = false;\r\n\t}\r\n\r\n\tpublic onDelete(entry: ITranslation): void {\r\n\t\tlet data: DeleteConfirmationSettings;\r\n\r\n\t\tdata = {\r\n\t\t\tobjectName: 'System Label',\r\n\t\t\tspecificName: entry.keyword,\r\n\t\t\tadditionalMessage: 'All translations associated with this label will also be deleted.'\r\n\t\t}\r\n\r\n\t\tthis._currentEntry = entry;\r\n\r\n\t\tthis._dialog.open(DeleteConfirmationComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: data\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _delete(entry: ITranslation): void {\r\n\t\tlet ids: number[] = new Array();\r\n\r\n\t\tfor (let language of this.languages) {\r\n\t\t\tif (!entry.translations[language.Id]) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tids.push(entry.translations[language.Id].id);\r\n\t\t}\r\n\r\n\t\tthis.translateService.deleteTranslation(ids)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis._updateService.deleteComplete();\r\n\t\t\t\tthis.getTranslations(true);\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Method that fires when user clicks \"Save\" during editing\r\n\t **/\r\n\tpublic saveSystemLabel(): void {\r\n\t\tlet updateTranslations: ILocalizationDictionary[] = new Array();\r\n\r\n\t\tfor (let language of this.languages) {\r\n\t\t\tupdateTranslations.push({\r\n\t\t\t\tkeyword: this.newSystemLabel.keyword,\r\n\t\t\t\tid: this.newSystemLabel.translations[language.Id].id,\r\n\t\t\t\tlanguageCode: this.newSystemLabel.translations[language.Id].languageCode,\r\n\t\t\t\tword: this.newSystemLabel.translations[language.Id].word\r\n\t\t\t})\r\n\t\t}\r\n\t\tthis.translateService.saveTranslation(updateTranslations)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.cancelEditingSystemLabel(this.newSystemLabel);\r\n\t\t\t\tthis.getTranslations(true);\r\n\t\t\t})\r\n\t}\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { ILocalizationDictionary, ITranslation, ILocalizatinDictionaryJSON,\r\n\tLanguageCode, ITranslationService, eLanguageCodes } from './interfaces';\r\n\r\nimport { HttpService, HttpServiceGetOptions, HttpServicePostOptions } from '../../services/http.service';\r\nimport { SuccessResponse, CMError } from '../../interfaces/interfaces';\r\nimport { Translation } from './translation.class';\r\nimport { environment } from '../../../environments/environment';\r\n\r\n@Injectable()\r\nexport class TranslateService implements ITranslationService {\r\n\tprivate _languages: LanguageCode[] = new Array();\r\n\tprivate _translations: ILocalizatinDictionaryJSON[] = new Array();\r\n\tpublic currentLanguageId: number;\r\n\tpublic currentLanguageName: string;\r\n\tprivate _languageHashMap: Record<number, Record<string, string>>;\r\n\r\n\tprivate _currentLanguage: Subject<number> = new Subject<number>();\r\n\tpublic currentLanguage$ = this._currentLanguage.asObservable();\r\n\r\n\tprivate _urls = {\r\n\t\tlocalization: {\r\n\t\t\tcreate: '/v2/localized-dictionary.json',\r\n\t\t\tlist: '/v2/localized-dictionary.json',\r\n\t\t\tupdate: '/v2/localized-dictionary.json',\r\n\t\t\tdelete: (id: number) => `/v2/localized-dictionary/${id}.json`\r\n\t\t},\r\n\t\tlanguageCodes: {\r\n\t\t\tget: '/v2/language-codes.json'\r\n\t\t}\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate httpService: HttpService\r\n\t) { }\r\n\r\n\tpublic setCurrentLanguage(language: number): void {\r\n\t\tthis.currentLanguageId = language;\r\n\t\tthis._currentLanguage.next(language);\r\n\t}\r\n\r\n\tpublic loadLanguages(): Promise<LanguageCode[]> {\r\n\r\n\t\tlet options: HttpServiceGetOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this._urls.languageCodes.get,\r\n\t\t\tuseLocalStorage: true,\r\n\t\t\tcallback: (data: LanguageCode[]): LanguageCode[] => {\r\n\t\t\t\tthis._languages = data;\r\n\r\n\t\t\t\treturn data;\r\n\t\t\t},\r\n\t\t\tisWebAPI: true\r\n\t\t};\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic loadTranslations(override = false): Promise<ITranslation[]> {\r\n\r\n\t\tlet options: HttpServiceGetOptions;\r\n\t\tlet useLocalStorage: boolean;\r\n\r\n\t\tuseLocalStorage = override ? false : true;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this._urls.localization.list,\r\n\t\t\tuseLocalStorage: useLocalStorage,\r\n\t\t\tcallback: (res: ILocalizatinDictionaryJSON[]): ITranslation[] => {\r\n\t\t\t\tlet result: {\r\n\t\t\t\t\tlist: ITranslation[],\r\n\t\t\t\t\tmap: Record<number, Record<string, string>>;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tthis._translations = res;\r\n\t\t\t\tresult = Translation.processTranslationsList(this._translations);\r\n\t\t\t\tthis._languageHashMap = result.map;\r\n\r\n\t\t\t\treturn result.list;\r\n\t\t\t},\r\n\t\t\tisWebAPI: true\r\n\t\t};\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\t/**\r\n\t * Notes: Tried conditionally displaying markers using cookies, but checking cookies every run made things\r\n\t * very slow\r\n\t *\r\n\t * @param keyword\r\n\t */\r\n\tpublic translate(keyword: string): string {\r\n\t\tlet result: string;\r\n\r\n\t\tif (!this.currentLanguageId) {\r\n\t\t\t// can't translate\r\n\t\t\treturn keyword;\r\n\t\t}\r\n\r\n\t\tif (!this._languageHashMap || !this._languageHashMap[this.currentLanguageId]) {\r\n\t\t\treturn keyword;\r\n\t\t}\r\n\r\n\t\tresult = this._languageHashMap[this.currentLanguageId][keyword];\r\n\r\n\t\tif (result === undefined) {\r\n\t\t\tif (environment.production === true) {\r\n\t\t\t\tresult = keyword;\r\n\t\t\t} else {\r\n\t\t\t\tresult = '{' + keyword + '}*'; // mark entries that are missing entries in localization dictionary on the grant server\r\n\t\t\t\t\t// only. Hide this on production to reduce visual noise\r\n\t\t\t}\r\n\t\t} else if (result === '') {\r\n\t\t\tresult = keyword;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Method called when creating a new system label\r\n\t * @param keyword\r\n\t * @param translations\r\n\t * @returns number of errors, if any\r\n\t */\r\n\tpublic addTranslation(keyword: string, translations: { languageCode: number, word: string }[]): Promise<string> {\r\n\t\tlet promises: Promise<any>[] = new Array();\r\n\t\tlet errorMessage: string;\r\n\r\n\t\terrorMessage = '';\r\n\r\n\t\tfor (let entry of translations) {\r\n\t\t\tlet body = {\r\n\t\t\t\tLanguageCode: entry.languageCode,\r\n\t\t\t\tKeyword: keyword,\r\n\t\t\t\tWord: entry.word\r\n\t\t\t}\r\n\r\n\t\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\t\toptions = {\r\n\t\t\t\turl: this._urls.localization.create,\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tshouldBypassServerErrorAlert: true,\r\n\t\t\t\tcallback: (response: SuccessResponse | CMError) => {\r\n\r\n\t\t\t\t\tlet error: CMError;\r\n\r\n\t\t\t\t\terror = response as CMError;\r\n\r\n\t\t\t\t\tif (error && error.code) {\r\n\t\t\t\t\t\terrorMessage = error.message;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tbody: body\r\n\t\t\t}\r\n\r\n\t\t\tpromises.push(this.httpService.post(options));\r\n\t\t}\r\n\r\n\t\treturn Promise.all(promises)\r\n\t\t\t.then(() => {\r\n\t\t\t\tsessionStorage.removeItem(this._urls.localization.list);\r\n\t\t\t\treturn errorMessage;\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic saveTranslation(translations: ILocalizationDictionary[]): Promise<void> {\r\n\t\tlet promises: Promise<any>[] = new Array(); // any is inavoidable here\r\n\r\n\t\tfor (let entry of translations) {\r\n\t\t\tlet obj = {\r\n\t\t\t\tId: entry.id,\r\n\t\t\t\tLanguageCode: entry.languageCode,\r\n\t\t\t\tKeyword: entry.keyword,\r\n\t\t\t\tWord: entry.word\r\n\t\t\t}\r\n\r\n\t\t\tpromises.push(this.httpService.put({\r\n\t\t\t\turl: this._urls.localization.update,\r\n\t\t\t\tbody: obj,\r\n\t\t\t\tisWebAPI: true\r\n\t\t\t}));\r\n\t\t}\r\n\r\n\t\treturn Promise.all(promises)\r\n\t\t\t.then(() => {\r\n\t\t\t\tsessionStorage.removeItem(this._urls.localization.list);\r\n\t\t\t\treturn;\r\n\t\t\t} );\r\n\t}\r\n\r\n\tpublic getLanguages(): LanguageCode[] {\r\n\t\treturn this._languages;\r\n\t}\r\n\r\n\tpublic deleteTranslation(ids: number[]): Promise<void> {\r\n\t\tlet promises: Promise<any>[] = new Array();\r\n\r\n\t\tfor (let id of ids) {\r\n\t\t\tpromises.push(this.httpService.delete({\r\n\t\t\t\turl: this._urls.localization.delete(id),\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t}));\r\n\t\t}\r\n\r\n\t\treturn Promise.all(promises)\r\n\t\t\t.then(() => {\r\n\t\t\t\tsessionStorage.removeItem(this._urls.localization.list);\r\n\t\t\t\treturn;\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic getStandardLanguageCode(): string {\r\n\t\tswitch (this.currentLanguageId) {\r\n\t\t\tcase eLanguageCodes.ENGLISH:\r\n\t\t\t\treturn 'en-us';\r\n\t\t\tcase eLanguageCodes.SPANISH:\r\n\t\t\t\treturn'es';\r\n\t\t}\r\n\t}\r\n}\r\n","import { ILocalizatinDictionaryJSON, ITranslation } from './interfaces';\r\n\r\nexport class Translation {\r\n\tpublic static processTranslationsList(data: ILocalizatinDictionaryJSON[]):\r\n\t\t{ list: ITranslation[], map: Record<number, Record<string, string>> } {\r\n\r\n\t\tlet list: ITranslation[];\r\n\t\tlet entries: ILocalizatinDictionaryJSON[];\r\n\r\n\t\tlist = new Array();\r\n\t\tentries = data;\r\n\r\n\t\tfor (let entry of entries) {\r\n\r\n\t\t\tlet newKeyword = true;\r\n\r\n\t\t\tfor (let keyword of list) {\r\n\t\t\t\tif (entry.Keyword === keyword.keyword) {\r\n\t\t\t\t\tnewKeyword = false;\r\n\r\n\t\t\t\t\tkeyword.translations[entry.LanguageCode] = {\r\n\t\t\t\t\t\tkeyword: entry.Keyword,\r\n\t\t\t\t\t\tid: entry.Id,\r\n\t\t\t\t\t\tlanguageCode: entry.LanguageCode,\r\n\t\t\t\t\t\tword: entry.Word\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (newKeyword) {\r\n\t\t\t\tlist.push({\r\n\t\t\t\t\tkeyword: entry.Keyword,\r\n\t\t\t\t\tediting: false,\r\n\t\t\t\t\ttranslations: {}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfor (let keyword of list) {\r\n\t\t\t\t\tif (entry.Keyword === keyword.keyword) {\r\n\t\t\t\t\t\tkeyword.translations[entry.LanguageCode] = {\r\n\t\t\t\t\t\t\tkeyword: entry.Keyword,\r\n\t\t\t\t\t\t\tid: entry.Id,\r\n\t\t\t\t\t\t\tlanguageCode: entry.LanguageCode,\r\n\t\t\t\t\t\t\tword: entry.Word\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn {\r\n\t\t\tlist: list,\r\n\t\t\tmap: Translation.configureMap(data)\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static configureMap(translations: ILocalizatinDictionaryJSON[]): Record<number, Record<string, string>> {\r\n\r\n\t\tlet languageHashMap: Record<number, Record<string, string>> = new Array();\r\n\r\n\t\tif (!translations || translations.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let translation of translations) {\r\n\t\t\tif (!languageHashMap[translation.LanguageCode]) {\r\n\t\t\t\tlanguageHashMap[translation.LanguageCode] = {};\r\n\t\t\t}\r\n\r\n\t\t\tlanguageHashMap[translation.LanguageCode][translation.Keyword] = translation.Word;\r\n\t\t}\r\n\r\n\t\treturn languageHashMap;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { IEventPostResponse, IEventPostResponseJSON } from '../../models/event/interfaces';\r\n\r\n@Injectable()\r\nexport class MainMenuUpdateService {\r\n\r\n\tprivate _userAuthStatusChanged: Subject<null> = new Subject<null>();\r\n\tpublic userAuthStatusChanged$ = this._userAuthStatusChanged.asObservable();\r\n\r\n\tpublic fireAuthStatusChanged() {\r\n\t\tthis._userAuthStatusChanged.next();\r\n\t}\r\n}\r\n","<button mat-menu-item\r\n    [ngClass]=\"{ 'cm-main-menu__item--active': currentPage === NAVIGATION_VIEWS.RANCHES }\"\r\n    (click)=\"navigateToMyRanches()\">\r\n    <span class=\"cm-svg-icon cm-svg-icon--menu-items cm-svg-icon--thick\"\r\n        style=\"top: 5px; position: relative;\">\r\n        <svg-ranch-marker></svg-ranch-marker>\r\n    </span>\r\n    <span>{{'My Ranches' | translate }}</span>\r\n</button>\r\n<button mat-menu-item\r\n    *ngIf=\"user && user.Roles && user.Roles[0] && user.Roles[0].Id == 1\"\r\n    [ngClass]=\"{ 'cm-main-menu__item--active': currentPage === NAVIGATION_VIEWS.LOCALIZATION }\"\r\n    (click)=\"navigateToAdministration()\">\r\n    <mat-icon style=\"margin-top:-3px;\" fontSet=\"material-icons-outlined\">admin_panel_settings</mat-icon>\r\n    {{'Admin' | translate }}\r\n</button>\r\n<button mat-menu-item\r\n    [ngClass]=\"{ 'cm-main-menu__item--active': currentPage === NAVIGATION_VIEWS.PROFILE }\"\r\n    (click)=\"navigateToProfile()\">\r\n    <mat-icon  style=\"margin-top:-3px;\" fontSet=\"material-icons-outlined\">person_outline</mat-icon>\r\n    {{'Profile' | translate }}\r\n</button>\r\n<button mat-menu-item\r\n    (click)=\"logout()\">\r\n    <mat-icon fontSet=\"material-icons-outlined\">logout</mat-icon>\r\n    {{'Log Out' | translate }}\r\n</button>\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item\r\n    (click)=\"openDonationLink()\">\r\n    <mat-icon fontSet=\"material-icons-outlined\">volunteer_activism</mat-icon>\r\n    {{'Donate' | translate }}\r\n</button>\r\n<button mat-menu-item\r\n    (click)=\"openDiscordLink()\">\r\n    <mat-icon fontSet=\"material-icons-outlined\">group</mat-icon>\r\n    {{'Join Our Discord' | translate }}\r\n</button>","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { UserService } from '../../models/user/service';\r\nimport { navigationViews, UpdateService } from '../../services/update.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FeedbackComponent } from '../feedback/feedback';\r\nimport { TokenService } from '../../services/token.service';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ICurrentUser } from '../../models/user/interfaces';\r\nimport { MainMenuUpdateService } from './main-menu-update.service';\r\nimport { GoogleIdentity } from '../public/login/login.component';\r\nimport { DONATE_URL } from '../../services/constants';\r\n\r\ndeclare var google: GoogleIdentity;\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'main-menu',\r\n\ttemplateUrl: 'main-menu.component.html',\r\n\tstyleUrls: ['main-menu.component.scss']\r\n})\r\n\r\nexport class MainMenuComponent implements OnInit, OnDestroy {\r\n\tpublic visible = false;\r\n\tpublic user: ICurrentUser;\r\n\tpublic donationLink = DONATE_URL;\r\n\r\n\tpublic NAVIGATION_VIEWS = navigationViews;\r\n\tpublic currentPage: navigationViews = null;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(private router: Router,\r\n\t\tprivate tokenService: TokenService,\r\n\t\tprivate _userService: UserService,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _mainMenuUpdateService: MainMenuUpdateService,\r\n\t\tprivate _updateService: UpdateService) { }\r\n\r\n\tngOnInit() {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis._updateService.currentRanchUserReceived$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe((res) => {\r\n\r\n\t\t\tthis.user = res;\r\n\t\t});\r\n\r\n\t\tthis._updateService.currentPage$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe((view: navigationViews) => {\r\n\r\n\t\t\tthis.currentPage = view;\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\topen(): void {\r\n\t\tthis.visible = true;\r\n\t}\r\n\r\n\tclose(): void {\r\n\t\tthis.visible = false;\r\n\t}\r\n\r\n\topenDonationLink(): void {\r\n\t\twindow.open(this.donationLink, '_blank');\r\n\t}\r\n\r\n\topenDiscordLink(): void {\r\n\t\twindow.open('https://discord.gg/ZcCGvZuzNv', '_blank')\r\n\t}\r\n\r\n\tnavigateToMyRanches(): void {\r\n\t\tthis.close();\r\n\t\tthis.router.navigate(['MyDashboard']);\r\n\t}\r\n\r\n\tnavigateToAdministration(): void {\r\n\t\tthis.close();\r\n\t\tthis.router.navigate(['Administration']);\r\n\t}\r\n\r\n\tnavigateToProfile(): void {\r\n\t\tthis.close();\r\n\t\tthis.router.navigate(['Profile']);\r\n\t}\r\n\r\n\tlogout(): void {\r\n\t\tthis.close();\r\n\t\tthis._ranchService.clearRanchesCache();\r\n\t\tsessionStorage.removeItem(this._userService.urls.userDetails.getCurrentUser.toLowerCase());\r\n\t\tthis.tokenService.logOff();\r\n\t\tthis._updateService.updateAuthToken(); // update top nav\r\n\t\tthis._mainMenuUpdateService.fireAuthStatusChanged();\r\n\r\n\t\t/**\r\n\t\tif (google) {\r\n\t\t\tgoogle.accounts.id.disableAutoSelect();\r\n\t\t}\r\n\t\t**/\r\n\r\n\t\tthis.router.navigate(['/login']);\r\n\t}\r\n\r\n\tpublic clickOutside(e: MouseEvent): void {\r\n\t\tlet classList: DOMTokenList;\r\n\r\n\t\tif (!e || !e.target) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tclassList = (e != null && e.target != null) ? (e.target as HTMLElement).classList : null;\r\n\r\n\t\tif (classList.contains('bk-header__menu-icon') || classList.contains('fa-bars')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.visible) {\r\n\t\t\tthis.visible = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic openFeedbackDialog(): void {\r\n\t\tthis.visible = false; // hide main menu\r\n\r\n\t\tthis._dialog.open(FeedbackComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { eNotificationTypes } from '../../interfaces/constants';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { IPlanting } from '../planting-settings/interfaces';\r\nimport { PlantingService } from '../planting-settings/service';\r\nimport { RanchService } from '../ranch-settings/service';\r\n\r\n@Injectable()\r\nexport class PlantingRecalculatorService {\r\n\tpublic constructor(\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _plantingService: PlantingService,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _updateService: UpdateService\r\n\t\t) {\r\n\t}\r\n\r\n\tpublic recalculate(plantingId: number, irrigationOnly = false, fertilizationOnly = false) {\r\n\t\tthis._plantingService.recalculatePlanting(plantingId, irrigationOnly, fertilizationOnly).then((res) => {\r\n\t\t\tthis.processEventStream(res, plantingId);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic processEventStream(res: IPlanting, plantingId: number) {\r\n\t\tif (!res || !res.Events) {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\tmessage: 'The planting recalculation failed'\r\n\t\t\t});\r\n\r\n\t\t\treturn;\r\n\t\t} else {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\tmessage: 'The planting was successfully recalculated'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._ranchService.plantings.replacePlantingEvents(res.Events, plantingId);\r\n\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date()); // update views if needed\r\n\t}\r\n}\r\n","import { DateUtility } from '../../classes/dateUtility';\r\nimport { ISoilLayer } from '../../models/soil-type/interfaces';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { ICropSettingsForm, IPlantingSettingsForm } from './planting-settings-form.interfaces';\r\nimport { PlantingParamsInternal } from './plantingParam.interfaces';\r\n\r\nexport class PlantingSettingsFormConverter {\r\n\r\n\t/**\r\n\t * Used by planting settings to convert the planting settings form to\r\n\t * data\r\n\t * @param planting planting form\r\n\t * @param soilType soilType\r\n\t */\r\n\tpublic static convert(planting: IPlantingSettingsForm, soilLayers: ISoilLayer[]): PlantingParamsInternal {\r\n\r\n\t\tlet result: PlantingParamsInternal;\r\n\t\tlet cropType: ICropSettingsForm;\r\n\r\n\t\tresult = {\r\n\t\t\tName: planting.Name,\r\n\t\t\tWetDate: DateUtility.ConvertToUTC(planting.WetDate),\r\n\t\t\tHarvestDate: DateUtility.ConvertToUTC(planting.HarvestDate),\r\n\t\t\tLotId: planting.LotId,\r\n\t\t\tCoordinates: planting.Coordinates,\r\n\t\t\tCropTypeModel: null,\r\n\t\t\tAcres: planting.Acres,\r\n\t\t\tSoilLayers: soilLayers,\r\n\t\t\tIrrigationSettings: {\r\n\t\t\t\tIrrigationMethods: [],\r\n\t\t\t\tControlPoints: [],\r\n\t\t\t\tDeficitType: planting.DeficitType,\r\n\t\t\t\tApplicationRates: {\r\n\t\t\t\t\tDrip: planting.DripApplicationRate,\r\n\t\t\t\t\tSprinkler: planting.SprinklerApplicationRate,\r\n\t\t\t\t\tMicroSprinkler: planting.MicroSprinklerApplicationRate\r\n\t\t\t\t},\r\n\t\t\t\tDistributionUniformities: {\r\n\t\t\t\t\tDrip: planting.DripDistUniformPct,\r\n\t\t\t\t\tSprinkler: planting.SprinklerDistUniformityPct,\r\n\t\t\t\t\tFlood: planting.FloodDistUniformityPct,\r\n\t\t\t\t\tMicroSprinkler: planting.MicroSprinklerDistUniformityPct,\r\n\t\t\t\t\tGerminationSprinkler: planting.GerminationSprinklerPct,\r\n\t\t\t\t},\r\n\t\t\t\tLeechingFactor: planting.LeechingFactorPct,\r\n\t\t\t},\r\n\t\t\tCalculatorSettings: planting.CalculatorSettings,\r\n\t\t\tAdvancedSettings: {\r\n\t\t\t\tObstructionDepth: ValidateService.truncateDecimals(planting.ObstructionDepth, 1),\r\n\t\t\t\tPreviousCropDays: planting.CropSettings.PrevCropDays,\r\n\t\t\t\tPreviousCropTypeId: planting.CropSettings.PreviousCropTypeId\r\n\t\t\t},\r\n\t\t\tMacroTunnelSettings: {\r\n\t\t\t\tIsEnabled: planting.MacroTunnelSettings.isEnabled,\r\n\t\t\t\tIsFullSeason: planting.MacroTunnelSettings.isFullSeason,\r\n\r\n\t\t\t\tStartDate: planting.MacroTunnelSettings.startDate ?\r\n\t\t\t\t\tDateUtility.ConvertToUTC(planting.MacroTunnelSettings.startDate) : null,\r\n\r\n\t\t\t\tEndDate: planting.MacroTunnelSettings.endDate ?\r\n\t\t\t\t\tDateUtility.ConvertToUTC(planting.MacroTunnelSettings.endDate) : null\r\n\t\t\t},\r\n\t\t\tStressSettings: {\r\n\t\t\t\tIsEnabled: planting.CropSettings.IsStressEnabled,\r\n\t\t\t\tStartDate: DateUtility.ConvertToUTC(planting.CropSettings.StressStartDate),\r\n\t\t\t\tEndDate:  DateUtility.ConvertToUTC(planting.CropSettings.StressEndDate)\r\n\t\t\t},\r\n\t\t\tPerennialCropSettings: {\r\n\t\t\t\tCropAge: planting.AgeOfCrop,\r\n\t\t\t\tYieldTarget: planting.CropSettings.NCalculator.YieldTarget,\r\n\t\t\t\tYieldActual: planting.YieldActual,\r\n\t\t\t\tIsHighVigor: planting.IsHighVigor,\r\n\t\t\t\tIsCoverCropEnabled: planting.CropSettings.IsCoverCropEnabled,\r\n\t\t\t\tLeafSenesceDate: DateUtility.ConvertToUTC(planting.CropSettings.LeafSenesceDate)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (planting.IrrigationMethods && planting.IrrigationMethods.length > 0) {\r\n\t\t\tplanting.IrrigationMethods.forEach((e) => {\r\n\t\t\t\tresult.IrrigationSettings.IrrigationMethods.push(e.IrrigationMethodId);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (planting.ControlPoints && planting.ControlPoints.length > 0) {\r\n\t\t\tplanting.ControlPoints.forEach((e) => {\r\n\t\t\t\tresult.IrrigationSettings.ControlPoints.push(e);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tcropType = planting.CropSettings;\r\n\r\n\t\tresult.CropTypeModel = {\r\n\t\t\tDefaultCropTypeId: cropType.DefaultCropTypeId,\r\n\t\t\tIrrigationSettings: {\r\n\t\t\t\tCanopy: {\r\n\t\t\t\t\tA: cropType.CanopyA,\r\n\t\t\t\t\tB: cropType.CanopyB,\r\n\t\t\t\t\tC: cropType.CanopyC,\r\n\t\t\t\t\tD: cropType.CanopyD,\r\n\t\t\t\t\tE: cropType.CanopyE,\r\n\t\t\t\t\tF: cropType.CanopyF,\r\n\t\t\t\t\tGMax: cropType.CanopyGMax,\r\n\t\t\t\t\tIntercept: cropType.CanopyIntercept,\r\n\t\t\t\t\tMaxFraction: cropType.CanopyMaxFraction,\r\n\t\t\t\t\tMin: cropType.CanopyMin,\r\n\t\t\t\t\tBasalKC: cropType.BasalKC,\r\n\t\t\t\t\tEarlyFruit: cropType.EarlyFruit,\r\n\t\t\t\t\tPerennialCanopies: cropType.PerennialCanopies\r\n\t\t\t\t},\r\n\t\t\t\tSensitivity: cropType.CropSensitivity,\r\n\t\t\t\tStressLevel: {\r\n\t\t\t\t\tStart: cropType.WaterStressStart,\r\n\t\t\t\t\tEnd: cropType.WaterStressEnd\r\n\t\t\t\t},\r\n\t\t\t\tKcCover: {\r\n\t\t\t\t\tQuad: cropType.Kccov_quad,\r\n\t\t\t\t\tSlope: cropType.Kccov_slope,\r\n\t\t\t\t\tIntercept: cropType.Kccov_int,\r\n\t\t\t\t\tDensityFactor: cropType.CovDensityFactor\r\n\t\t\t\t},\r\n\t\t\t\tWetAreas: {\r\n\t\t\t\t\tDrip: cropType.WetAreaDrip,\r\n\t\t\t\t\tMicroSprinkler: cropType.WetAreaMicroSprinkler\r\n\t\t\t\t},\r\n\t\t\t\tTargetTensions: [\r\n\t\t\t\t\tcropType.TargetTension1, cropType.TargetTension2,\r\n\t\t\t\t\tcropType.TargetTension3, cropType.TargetTension4\r\n\t\t\t\t],\r\n\t\t\t\tSeasonalKCs: cropType.SeasonalKCs\r\n\t\t\t},\r\n\t\t\tFertilizationSettings: {\r\n\t\t\t\tNUptake: {\r\n\t\t\t\t\tFertA: cropType.FertA,\r\n\t\t\t\t\tFertB: cropType.FertB,\r\n\t\t\t\t\tFertYo: cropType.FertYo,\r\n\t\t\t\t\tMaxUptake: cropType.MaxUptake,\r\n\t\t\t\t\tNUptakeThreshold: cropType.NUptakeThreshold,\r\n\t\t\t\t\tUptakeFactor: cropType.UptakeFactor,\r\n\t\t\t\t\tNFertilizerAdjustment: cropType.NFertilizerAdjustment,\r\n\t\t\t\t\tUseEfficiency: cropType.FertilizerUseEfficiency,\r\n\t\t\t\t\tSummerLeafN: {\r\n\t\t\t\t\t\tInadequate: cropType.InadequateSummerLeafN,\r\n\t\t\t\t\t\tExcessive: cropType.ExcessiveSummerLeafN\r\n\t\t\t\t\t},\r\n\t\t\t\t\tNCredits: {\r\n\t\t\t\t\t\tManure: cropType.NCalculator.ManureN,\r\n\t\t\t\t\t\tCompost: cropType.NCalculator.CompostN,\r\n\t\t\t\t\t\tCoverCrop: cropType.NCalculator.CoverCropN\r\n\t\t\t\t\t},\r\n\t\t\t\t\tTreeCoefficients: {\r\n\t\t\t\t\t\tIntercept: cropType.TreeInterceptCoefficient,\r\n\t\t\t\t\t\tLeafN: cropType.TreeLeafNCoefficient,\r\n\t\t\t\t\t\tIlr4: cropType.TreeIlr4Coefficient,\r\n\t\t\t\t\t\tIlr8: cropType.TreeIlr8Coefficient,\r\n\t\t\t\t\t\tIlrProduct: cropType.TreeIlrProductCoefficient\r\n\t\t\t\t\t},\r\n\t\t\t\t\tTreeNutrientThresholds: cropType.NCalculator.TreeNutrientThresholds,\r\n\t\t\t\t\tVegetativeNDemands: cropType.VegetativeNDemands\r\n\t\t\t\t},\r\n\t\t\t\tMineralization: {\r\n\t\t\t\t\tRate: cropType.CropMineralizationRate,\r\n\t\t\t\t\tPrevCropK: cropType.PrevCropK\r\n\t\t\t\t},\r\n\t\t\t\tSoilN: {\r\n\t\t\t\t\tBase: cropType.SoilNThreshold,\r\n\t\t\t\t\tMid: cropType.SoilNThresholdMid,\r\n\t\t\t\t\tLate: cropType.SoilNThresholdLate,\r\n\t\t\t\t\tFraction: cropType.SoilNThresholdFraction,\r\n\t\t\t\t\tFractionMid: cropType.SoilNThresholdFractionMid\r\n\t\t\t\t},\r\n\t\t\t\tHarvestIntervalFraction: cropType.HarvestIntervalFraction,\r\n\t\t\t\tMaxNRec: cropType.MaxNRec,\r\n\t\t\t\tSoilNRatio: {\r\n\t\t\t\t\tA: cropType.SoilNRatioA,\r\n\t\t\t\t\tB: cropType.SoilNRatioB,\r\n\t\t\t\t\tC: cropType.SoilNRatioC\r\n\t\t\t\t},\r\n\t\t\t\tNFactor: {\r\n\t\t\t\t\tA: cropType.NFertilizerFactorA,\r\n\t\t\t\t\tB: cropType.NFertilizerFactorB,\r\n\t\t\t\t\tC: cropType.NFertilizerFactorC,\r\n\t\t\t\t\tD: cropType.NFertilizerFactorD\r\n\t\t\t\t},\r\n\t\t\t\tStrawberryFertilizationInterval: cropType.StrawberryFertilizationInterval\r\n\t\t\t},\r\n\t\t\tRootDepth: {\r\n\t\t\t\tGermDays: cropType.GermDays,\r\n\t\t\t\tMaxDays: cropType.MaxDays,\r\n\t\t\t\tMax: cropType.MaxRootDepth,\r\n\t\t\t\tMin: cropType.MinRootDepth,\r\n\t\t\t\tThreshold: cropType.RootDepthThreshold,\r\n\t\t\t\tPerennialRootDepths: cropType.PerennialRootDepths\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import {\r\n\tIPlanting, IPlantingJSON,\r\n\tIPlantingsViewModel, IPlantingSettingsCalculatorSettings\r\n} from './interfaces';\r\nimport { ICropType, ICropTypeViewModel } from '../../models/crop-type/interfaces';\r\nimport { IRanchLot } from '../ranch-settings/modals/lot/interfaces';\r\nimport { eCalculators } from '../../interfaces/constants';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { eCommodityTypeCalculators, ICommodityType } from '../../models/commodity-type/interfaces';\r\nimport { IRawEvent } from '../../models/event/interfaces';\r\nimport { PersistentDatabase } from '../../services/persistent-database';\r\n\r\nexport class Planting implements IPlanting {\r\n\r\n\tpublic Id: number;\r\n\tpublic Name: string;\r\n\tpublic CommodityTypeId: number;\r\n\tpublic CropType: ICropType;\r\n\tpublic Events: EventGroup[];\r\n\tpublic HarvestDate: Date;\r\n\tpublic WetDate: Date;\r\n\tpublic RanchLot: IRanchLot;\r\n\tpublic HasFlowMeterFileName: boolean;\r\n\tpublic HasSoilMoistureFileName: boolean;\r\n\tpublic CommodityTypeCalculator: string;\r\n\r\n\t// virtual\r\n\r\n\tpublic collapsed?: boolean;\r\n\tpublic displayMenu?: boolean; // RENAME\r\n\tpublic Favorite?: boolean;\r\n\tpublic FavoriteId?: number;\r\n\r\n\t/**\r\n     * picks the \"calculator\" for fertilizer. Currently, the code is confusing\r\n     * We should use calculator external ID here instead\r\n     * or label \"calculator\" fertilization calculator\r\n     *\r\n     * @param calculatorInterface\r\n     */\r\n\tpublic static getCalculator(calculatorInterface: string): number {\r\n\r\n\t\tlet result: number;\r\n\r\n\t\tif (!calculatorInterface) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tswitch (calculatorInterface) {\r\n\t\t\tcase eCommodityTypeCalculators.processingTomato:\r\n\t\t\t\tresult = eCalculators.TOMATO;\r\n\t\t\t\tbreak;\r\n\t\t\tcase eCommodityTypeCalculators.strawberry:\r\n\t\t\tcase eCommodityTypeCalculators.caneberry:\r\n\t\t\t\tresult = eCalculators.STRAWBERRY;\r\n\t\t\t\tbreak;\r\n\t\t\tcase eCommodityTypeCalculators.almond:\r\n\t\t\t\tresult = eCalculators.ALMOND;\r\n\t\t\t\tbreak;\r\n\t\t\tcase eCommodityTypeCalculators.alfalfa:\r\n\t\t\t\tresult = eCalculators.ALFALFA;\r\n\t\t\t\tbreak;\r\n\t\t\tcase eCommodityTypeCalculators.pistachio:\r\n\t\t\t\tresult = eCalculators.PISTACHIO;\r\n\t\t\t\tbreak;\r\n\t\t\tcase eCommodityTypeCalculators.walnut:\r\n\t\t\t\tresult = eCalculators.WALNUT;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tresult = eCalculators.LETTUCE;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * given a planting object, return a commodity type interface string\r\n     * @param planting\r\n     */\r\n\tpublic static getCalculatorInterface(commodityTypeId: number, commodityTypes: ICommodityType[]): string {\r\n\t\tlet commodityType: ICommodityType;\r\n\r\n\t\tif (!commodityTypeId) {\r\n\t\t\tthrow new Error('commodityTypeId is empty');\r\n\t\t}\r\n\r\n\t\tif (!commodityTypes) {\r\n\t\t\tthrow new Error('commodity types array is empty');\r\n\t\t}\r\n\r\n\t\tcommodityType = commodityTypes.find(x => x.Id === commodityTypeId);\r\n\r\n\t\tif (!commodityType) {\r\n\t\t\tthrow new Error('commodity type not found in array');\r\n\t\t} else {\r\n\t\t\treturn commodityType.CommodityTypeCalculator;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static convertPlantingsViewModel(planting: IPlantingsViewModel): IPlanting {\r\n\t\tlet result: IPlanting;\r\n\r\n\t\tresult = Planting.convert(planting);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static convertPlantingJSON(planting: IPlantingJSON): IPlanting {\r\n\t\tlet result: IPlanting;\r\n\r\n\t\tresult = Planting.convert(planting);\r\n\r\n\t\tresult.CommodityTypeCalculator = planting.CommodityTypeCalculator;\r\n\t\tresult.CropType = planting.CropType;\r\n\r\n\t\tif (planting.Events) {\r\n\t\t\tplanting.Events = EventGroup.removeHiddenEvents(planting.Events);\r\n\t\t\tresult.Events = EventGroup.convertAll(planting.Events, result.WetDate);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static convert(planting: IPlantingsViewModel | IPlantingJSON): IPlanting {\r\n\t\tlet result: IPlanting\r\n\r\n\t\tif (!planting) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = {\r\n\t\t\tHarvestDate: DateUtility.DotNetToDate(planting.HarvestDate),\r\n\t\t\tWetDate: DateUtility.DotNetToDate(planting.WetDate),\r\n\t\t\tId: planting.Id,\r\n\t\t\tName: planting.Name,\r\n\t\t\tCommodityTypeId: planting.CommodityTypeId,\r\n\t\t\tCommodityTypeName: planting.CommodityTypeName,\r\n\t\t\tCropType: null,\r\n\t\t\tCommodityTypeCalculator: null,\r\n\t\t\tEvents: new Array(),\r\n\t\t\tRanchLot: planting.RanchLot,\r\n\t\t\tHasFlowMeterFileName: planting.HasFlowMeterFileName,\r\n\t\t\tHasSoilMoistureFileName: planting.HasSoilMoistureFileName,\r\n\t\t\tFavorite: planting.Favorite != null ? planting.Favorite : false,\r\n\t\t\tFavoriteId: planting.FavoriteId != null ? planting.FavoriteId : null,\r\n\t\t\tIsNDependent: planting.IsNDependent,\r\n\t\t\tIsSlideInOpen: false,\r\n\t\t\tActiveEvents: planting.ActiveEvents,\r\n\t\t\tActiveEventDates: Planting.convertActiveEventString(planting.ActiveEvents),\r\n\t\t}\r\n\r\n\t\tresult.Counts = {\r\n\t\t\tupcomingEvents: Planting.getUpcomingEventCount(result.ActiveEventDates)\r\n\t\t};\r\n\r\n\t\tresult.WetDateString = DateUtility.formatDate(result.WetDate);\r\n\t\tresult.HarvestDateString = DateUtility.formatDate(result.HarvestDate);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static getUpcomingEventCount(dates: Date[]): number {\r\n\t\tlet result = 0;\r\n\t\tlet today: Date = new Date(); // today\r\n\r\n\t\tif (!dates || dates.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tfor (let date of dates) {\r\n\t\t\tif (DateUtility.isTodayOrFuture(date)) {\r\n\t\t\t\tresult++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static convertActiveEventString(s: string): Date[] {\r\n\t\tlet result: Date[];\r\n\t\tlet strings: string[];\r\n\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = new Array();\r\n\r\n\t\tstrings = s.split(',');\r\n\r\n\t\tfor (let str of strings) {\r\n\t\t\tresult.push(new Date(str));\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * A method that calculates the default value for harvest date based\r\n\t * on wet date\r\n\t * @param daysToEndDate\r\n\t * @param wetDate\r\n\t * @param isPerennial\r\n\t * @returns\r\n\t */\r\n\tpublic static setHarvestDateFromDaysToEndDate(daysToEndDate: number,\r\n\t\twetDate: Date, isPerennial: boolean): Date {\r\n\r\n\t\t// Setting new harvest date because wet date has changed and\r\n\t\t// daysToEndDate is greater than 0\r\n\t\tlet result: Date;\r\n\t\tlet wetDateYear: number;\r\n\r\n\t\tif (!daysToEndDate || daysToEndDate <= 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (wetDate === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = new Date(wetDate.getTime());\r\n\t\twetDateYear = wetDate.getFullYear();\r\n\t\tresult.setDate(result.getDate() + daysToEndDate);\r\n\r\n\t\tif (isPerennial && result.getFullYear() > wetDateYear) {\r\n\t\t\t// prevent harvest date to cross over into next year\r\n\t\t\tresult = new Date(wetDateYear, 11, 31);\r\n\t\t}\r\n\r\n\t\treturn new Date(result.getTime());\r\n\t}\r\n\r\n\t/**\r\n     * Given percentage, harvest date, and wet date, calculate leaf senesce date\r\n     * @param wetDate\r\n     * @param harvestDate\r\n     * @param percentage\r\n     */\r\n\tpublic static convertPercentageIntoDate(wetDate: Date, harvestDate: Date,\r\n\t\tpercentage: number): Date {\r\n\r\n\t\tlet result: Date;\r\n\t\tlet daysOfSeason: number;\r\n\t\tlet offset: number;\r\n\r\n\t\tif (!wetDate) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = new Date(wetDate.setHours(0, 0, 0, 0));\r\n\t\tdaysOfSeason = DateUtility.daysBetweenDates(wetDate, harvestDate);\r\n\t\toffset = Math.floor(daysOfSeason * percentage);\r\n\t\tresult.setDate(result.getDate() + offset);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n     * Given leaf senesce date, wet date, and harvest date, recalculate percentage\r\n     * @param wetDate\r\n     * @param harvestDate\r\n     * @param date\r\n     */\r\n\tpublic static convertDateIntoPercentage(wetDate: Date, harvestDate: Date,\r\n\t\tdate: Date): number {\r\n\t\tlet result, daysOfSeason: number;\r\n\r\n\t\tdaysOfSeason = DateUtility.daysBetweenDates(wetDate, harvestDate);\r\n\r\n\t\tresult = DateUtility.daysBetweenDates(wetDate, date) /\r\n\t\t\tdaysOfSeason\r\n\r\n\t\tresult = parseFloat(result.toFixed(4));\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static processAllEvents(response: { Events: IRawEvent[], WetDate: string }, persistentDatabase: PersistentDatabase): EventGroup[] {\r\n\t\tlet result: EventGroup[];\r\n\t\tlet wetDate: Date;\r\n\r\n\t\tif (!response || !response.Events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\twetDate = DateUtility.DotNetToDate(response.WetDate);\r\n\r\n\t\tif (persistentDatabase) {\r\n\t\t\t// cache wet date to calculate on or before check on irrigation events\r\n\t\t\tpersistentDatabase.wetDate = wetDate;\r\n\t\t}\r\n\r\n\t\tresult = EventGroup.convertAll(response.Events, wetDate);\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static prepareCalculatorSettings(settings: IPlantingSettingsCalculatorSettings):\r\n\t\tIPlantingSettingsCalculatorSettings {\r\n\r\n\t\tif (!settings) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (settings.DripApplicationRate) {\r\n\t\t\tsettings.DripApplicationRate.RowSpacing = Math.round(settings.DripApplicationRate.RowSpacing);\r\n\t\t\tsettings.DripApplicationRate.InRowTreeSpacing = Math.round(settings.DripApplicationRate.InRowTreeSpacing);\r\n\t\t\tsettings.DripApplicationRate.TreesPerAcre = Math.round(settings.DripApplicationRate.TreesPerAcre);\r\n\t\t}\r\n\r\n\t\tif (settings.MicroSprinklerSetting) {\r\n\t\t\tsettings.MicroSprinklerSetting.MicroSprinklersPerTree =\r\n\t\t\t\tMath.round(settings.MicroSprinklerSetting.MicroSprinklersPerTree);\r\n\t\t}\r\n\r\n\t\treturn settings;\r\n\t}\r\n\r\n\tconstructor() { }\r\n}\r\n","import {\r\n\tIPlantingAdvancedEdit, IPlantingBasicInfoViewModel,\r\n\tIPlantingMetaDataViewModel, IPlantingSettingsViewModel, IPlantingCreateViewModel,\r\n\tIPlantingSettingsCalculatorSettings, IPlantingAdvancedViewModel, IPlantingSettingsViewModelJSON, IPlantingBasicInfoViewModelJSON, IPlanting\r\n} from './interfaces';\r\n\r\nimport { ICropTypeViewModel, IVegetativeNDemand,\r\n\tIPerennialCanopy } from '../../models/crop-type/interfaces';\r\nimport { CombinedSoilProperties } from '../../models/soil-type/interfaces';\r\nimport { eCalculators } from '../../interfaces/constants';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { Planting } from './planting';\r\nimport { ISelectOptions } from '../../interfaces/abstract';\r\nimport { TranslateService } from '../localization/service';\r\nimport { TranslatePipe } from '../../pipes/translate.pipe';\r\n\r\nexport class PlantingAdvancedEdit implements IPlantingAdvancedEdit {\r\n\tpublic Id: number;\r\n\tpublic PlantingBasicInfoViewModel: IPlantingBasicInfoViewModel;\r\n\tpublic Metadata: IPlantingMetaDataViewModel;\r\n\tpublic PlantingSettingsViewModel: IPlantingSettingsViewModel;\r\n\tpublic CropTypeViewModel: ICropTypeViewModel;\r\n\tpublic SoilProperties: CombinedSoilProperties;\r\n\tpublic calculator: eCalculators;\r\n\tpublic HasFlowMeterFileName: boolean;\r\n\tpublic CalculatorSettings?: IPlantingSettingsCalculatorSettings;\r\n\r\n\tpublic static getPerennialCanopy(age: number, perennialCanopies: IPerennialCanopy[]): IPerennialCanopy {\r\n\t\tlet result: IPerennialCanopy;\r\n\r\n\t\tif (!perennialCanopies || perennialCanopies.length === 0) {\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (age === null || age === undefined) { // 0 is valid\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (age === 0) {\r\n\t\t\tresult = perennialCanopies.find(x => x.Age === age);\r\n\t\t} else {\r\n\t\t\tlet ar = perennialCanopies.filter(x => x.Age <= age).sort((a, b) => {\r\n\t\t\t\treturn b.Age - a.Age;\r\n\t\t\t});\r\n\r\n\t\t\tresult = ar[0];\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static generateAgeOfCropDropdown(maxAge: number, translateService: TranslateService): ISelectOptions[] {\r\n\t\tlet result: ISelectOptions[];\r\n\r\n\t\tresult = [];\r\n\r\n\t\tfor (let i = 0; i <= maxAge; i++) {\r\n\t\t\tlet option: ISelectOptions;\r\n\r\n\t\t\toption = {\r\n\t\t\t\tkey: i,\r\n\t\t\t\tvalue: null\r\n\t\t\t};\r\n\r\n\t\t\tif (i === 0) {\r\n\t\t\t\toption.value = '1 ' + translateService.translate('year');\r\n\t\t\t} else if (i < maxAge) {\r\n\t\t\t\toption.value = (i + 1) + ' ' + translateService.translate('years');\r\n\t\t\t} else {\r\n\t\t\t\toption.value = (i + 1) + '+ ' + translateService.translate('years');\r\n\t\t\t}\r\n\r\n\t\t\tresult.push(option);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static getVegetativeNDemand(age: number, vegetativeDemands: IVegetativeNDemand[]): IVegetativeNDemand {\r\n\t\tlet result: IVegetativeNDemand;\r\n\r\n\t\tif (age === null || age === undefined) { // 0 is valid\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!vegetativeDemands) {\r\n\t\t\tthrow new Error('vegetativeDemands array is empty');\r\n\t\t}\r\n\r\n\t\tresult = vegetativeDemands.filter(x => age + 1 >= x.YearMin\r\n\t\t\t&& age + 1 <= x.YearMax)[0];\r\n\r\n\t\tif (!result) {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tpublic constructor() {\r\n\t}\r\n\r\n\tpublic initializeWithCreateViewModel(json: IPlantingCreateViewModel): void {\r\n\r\n\t\tif (!json) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.PlantingBasicInfoViewModel) {\r\n\t\t\tthis.PlantingBasicInfoViewModel = <IPlantingBasicInfoViewModel>{};\r\n\t\t}\r\n\r\n\t\tthis.PlantingBasicInfoViewModel.PlantingName = '';\r\n\t\tthis.PlantingBasicInfoViewModel.WetDate = null;\r\n\t\tthis.PlantingBasicInfoViewModel.HarvestDate = null;\r\n\t\tthis.PlantingBasicInfoViewModel.Year = json.Year;\r\n\r\n\t\tif (!this.PlantingSettingsViewModel) {\r\n\t\t\tthis.PlantingSettingsViewModel = <IPlantingSettingsViewModel>{};\r\n\t\t}\r\n\r\n\t\tthis.PlantingSettingsViewModel.Acres = 0;\r\n\t\tthis.PlantingSettingsViewModel.DripApplicationRate = json.DripApplicationRate;\r\n\t\tthis.PlantingSettingsViewModel.DripDistUniformPct = json.DripDistUniformPct;\r\n\t\tthis.PlantingSettingsViewModel.DripFlowMeterArea = json.DripFlowMeterArea;\r\n\t\tthis.PlantingSettingsViewModel.FlowMeterArea = json.FlowMeterArea;\r\n\t\tthis.PlantingSettingsViewModel.FlowMeterThresholdSprinkler = json.FlowMeterThresholdSprinkler;\r\n\t\tthis.PlantingSettingsViewModel.FlowMeterThresholdDrip = json.FlowMeterThresholdDrip;\r\n\t\tthis.PlantingSettingsViewModel.GerminationSprinklerPct = json.GerminationSprinklerPct;\r\n\t\tthis.PlantingSettingsViewModel.LeechingFactorPct = json.LeechingFactorPct;\r\n\t\tthis.PlantingSettingsViewModel.SprinklerApplicationRate = json.SprinklerApplicationRate;\r\n\t\tthis.PlantingSettingsViewModel.SprinklerDistUniformityPct = json.SprinklerDistUniformityPct;\r\n\t\tthis.PlantingSettingsViewModel.MicroSprinklerApplicationRate = json.MicroSprinklerApplicationRate;\r\n\t\tthis.PlantingSettingsViewModel.MicroSprinklerDistUniformityPct = json.MicroSprinklerDistUniformityPct;\r\n\t\tthis.PlantingSettingsViewModel.FloodDistUniformityPct = json.FloodDistUniformityPct,\r\n\t\t\tthis.PlantingSettingsViewModel.PrevCropDays = json.PreviousCropDayInterval;\r\n\t\tthis.PlantingSettingsViewModel.IsCoverCropEnabled = true; // enable cover crop to enabled by default\r\n\t\tthis.PlantingSettingsViewModel.IsSpatialEnabled = json.IsSpatialEnabled\r\n\t\tif (!this.Metadata) {\r\n\t\t\tthis.Metadata = <IPlantingMetaDataViewModel>{};\r\n\t\t}\r\n\r\n\t\tthis.Metadata.Lots = json.Lots;\r\n\t\tthis.Metadata.CommodityTypes = json.CommodityTypes;\r\n\t\tthis.Metadata.CropTypes = new Array();\r\n\t\tthis.Metadata.RanchName = json.RanchName;\r\n\t\tthis.Metadata.RanchGuid = json.RanchId;\r\n\t\tthis.Metadata.PrevCropTypes = json.PrevCropTypes;\r\n\r\n\t\tif (!this.CropTypeViewModel) {\r\n\t\t\tthis.CropTypeViewModel = <ICropTypeViewModel>{};\r\n\t\t}\r\n\r\n\t\tthis.CalculatorSettings = {\r\n\t\t\tCompostN: {\r\n\t\t\t\tId: null,\r\n\t\t\t\tLotPlantingId: null,\r\n\t\t\t\tAmount: null,\r\n\t\t\t\tN: null,\r\n\t\t\t\tApplicationMethod: null\r\n\t\t\t},\r\n\t\t\tManureN: {\r\n\t\t\t\tId: null,\r\n\t\t\t\tLotPlantingId: null,\r\n\t\t\t\tTypePriorYear: null,\r\n\t\t\t\tRatePriorYear: null,\r\n\t\t\t\tTypeTwoYearsAgo: null,\r\n\t\t\t\tRateTwoYearsAgo: null,\r\n\t\t\t},\r\n\t\t\tMicroSprinklerSetting: {\r\n\t\t\t\tId: null,\r\n\t\t\t\tLotPlantingId: null,\r\n\t\t\t\tInRowTreeSpacing: null,\r\n\t\t\t\tBetweenRowTreeSpacing: null,\r\n\t\t\t\tMicroSprinklersPerTree: null,\r\n\t\t\t\tUseFlowRate: null,\r\n\t\t\t\tFlowRate: null,\r\n\t\t\t\tMicroSprinklerId: null,\r\n\t\t\t},\r\n\t\t\tCoverCrop: {\r\n\t\t\t\tId: null,\r\n\t\t\t\tLotPlantingId: null,\r\n\t\t\t\tLegumeCoverCropStand: null,\r\n\t\t\t\tIncorporationMethod: null\r\n\t\t\t},\r\n\t\t\tDripApplicationRate: {\r\n\t\t\t\tId: null,\r\n\t\t\t\tLotPlantingId: null,\r\n\t\t\t\tBedWidth: null,\r\n\t\t\t\tDripLinesPerBed: null,\r\n\t\t\t\tTapeDischargeRate: null,\r\n\t\t\t},\r\n\t\t\tSprinklerApplicationRate: {\r\n\t\t\t\tId: null,\r\n\t\t\t\tLotPlantingId: null,\r\n\t\t\t\tType: null,\r\n\t\t\t\tNozzleDiameter: null,\r\n\t\t\t\tNozzlePressure: null,\r\n\t\t\t\tHeadSpacing: null,\r\n\t\t\t\tPipeSpacing: null\r\n\t\t\t},\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n     * Creates an empty shell, used for unit tests\r\n     */\r\n\tpublic createBlank(): void {\r\n\t\tthis.PlantingBasicInfoViewModel = <IPlantingBasicInfoViewModel>{};\r\n\t\tthis.PlantingBasicInfoViewModel.PlantingName = '';\r\n\t\tthis.PlantingBasicInfoViewModel.WetDate = new Date();\r\n\t\tthis.PlantingBasicInfoViewModel.HarvestDate = new Date();\r\n\t\tthis.PlantingBasicInfoViewModel.Year = null;\r\n\r\n\t\tthis.PlantingSettingsViewModel = <IPlantingSettingsViewModel>{};\r\n\r\n\t\tthis.PlantingSettingsViewModel.Acres = 0;\r\n\t\tthis.PlantingSettingsViewModel.DripApplicationRate = 2;\r\n\t\tthis.PlantingSettingsViewModel.DripDistUniformPct = 4;\r\n\t\tthis.PlantingSettingsViewModel.DripFlowMeterArea = 4;\r\n\t\tthis.PlantingSettingsViewModel.FlowMeterArea = 4;\r\n\t\tthis.PlantingSettingsViewModel.FlowMeterThresholdSprinkler = 3;\r\n\t\tthis.PlantingSettingsViewModel.FlowMeterThresholdDrip = 3;\r\n\t\tthis.PlantingSettingsViewModel.GerminationSprinklerPct = 3;\r\n\t\tthis.PlantingSettingsViewModel.LeechingFactorPct = 3;\r\n\t\tthis.PlantingSettingsViewModel.SprinklerApplicationRate = 1;\r\n\t\tthis.PlantingSettingsViewModel.SprinklerDistUniformityPct = 1;\r\n\t\tthis.PlantingSettingsViewModel.MicroSprinklerApplicationRate = 1;\r\n\t\tthis.PlantingSettingsViewModel.MicroSprinklerDistUniformityPct = 1;\r\n\t\tthis.PlantingSettingsViewModel.PrevCropDays = 200;\r\n\t\tthis.PlantingSettingsViewModel.IsCoverCropEnabled = true; // enable cover crop to enabled by default\r\n\r\n\t\tthis.Metadata = <IPlantingMetaDataViewModel>{};\r\n\r\n\t\tthis.Metadata.Lots = null;\r\n\t\tthis.Metadata.CommodityTypes = null;\r\n\t\tthis.Metadata.CropTypes = null;\r\n\t\tthis.Metadata.RanchName = null;\r\n\t\tthis.Metadata.RanchGuid = null;\r\n\t\tthis.CropTypeViewModel = <ICropTypeViewModel>{};\r\n\t}\r\n\r\n\tpublic initializeWithPlantingAdvancedViewModel(data: IPlantingAdvancedViewModel) {\r\n\t\tlet settingsModel: IPlantingSettingsViewModelJSON;\r\n\t\tlet basicModel: IPlantingBasicInfoViewModelJSON;\r\n\r\n\t\tif (!data) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!data.PlantingSettingsViewModel || !data.PlantingBasicInfoViewModel ||\r\n\t\t\t!data.CropTypeViewModel || !data.Metadata) {\r\n\t\t\tthrow new Error('getEditModel() - planting data is empty');\r\n\t\t}\r\n\r\n\t\tthis.Id = data.Id;\r\n\t\tthis.CalculatorSettings = data.CalculatorSettings;\r\n\t\tthis.SoilProperties = data.SoilProperties;\r\n\r\n\t\tsettingsModel = data.PlantingSettingsViewModel;\r\n\t\tbasicModel = data.PlantingBasicInfoViewModel;\r\n\r\n\t\tthis.PlantingSettingsViewModel = {\r\n\t\t\tFlowMeterFileName: settingsModel.FlowMeterFileName,\r\n\t\t\tSoilMoistureFileName: settingsModel.SoilMoistureFileName,\r\n\t\t\tObstructionDepth: settingsModel.ObstructionDepth,\r\n\t\t\tAcres: settingsModel.Acres,\r\n\t\t\tCoordinates: settingsModel.Coordinates,\r\n\t\t\tPrevCropDays: settingsModel.PrevCropDays,\r\n\t\t\tDripApplicationRate: settingsModel.DripApplicationRate,\r\n\t\t\tDripDistUniformPct: settingsModel.DripDistUniformPct,\r\n\t\t\tFloodDistUniformityPct: settingsModel.FloodDistUniformityPct,\r\n\t\t\tDripFlowMeterArea: settingsModel.DripFlowMeterArea,\r\n\t\t\tIrrigationMethods: settingsModel.IrrigationMethods,\r\n\t\t\tDeficitType: settingsModel.DeficitType,\r\n\t\t\tControlPoints: settingsModel.ControlPoints,\r\n\t\t\tLeechingFactorPct: settingsModel.LeechingFactorPct,\r\n\t\t\tGerminationSprinklerPct: settingsModel.GerminationSprinklerPct,\r\n\t\t\tMicroSprinklerFlowMeterArea: settingsModel.MicroSprinklerFlowMeterArea,\r\n\t\t\tFlowMeterArea: settingsModel.FlowMeterArea,\r\n\t\t\tSprinklerApplicationRate: settingsModel.SprinklerApplicationRate,\r\n\t\t\tSprinklerDistUniformityPct: settingsModel.SprinklerDistUniformityPct,\r\n\t\t\tMicroSprinklerDistUniformityPct: settingsModel.MicroSprinklerDistUniformityPct,\r\n\t\t\tMicroSprinklerApplicationRate: settingsModel.MicroSprinklerApplicationRate,\r\n\t\t\tPreviousCropTypeId: settingsModel.PreviousCropTypeId,\r\n\t\t\tFlowMeterThresholdSprinkler: settingsModel.FlowMeterThresholdSprinkler,\r\n\t\t\tFlowMeterThresholdMicroSprinkler: settingsModel.FlowMeterThresholdMicroSprinkler,\r\n\t\t\tFlowMeterThresholdDrip: settingsModel.FlowMeterThresholdDrip,\r\n\t\t\tIsCoverCropEnabled: settingsModel.IsCoverCropEnabled,\r\n\t\t\tYieldTarget: settingsModel.YieldTarget,\r\n\t\t\tYieldActual: settingsModel.YieldActual,\r\n\t\t\tCommodityTypeYieldUnitId: settingsModel.CommodityTypeYieldUnitId,\r\n\t\t\tIsHighVigor: settingsModel.IsHighVigor === true ? true : false, // high vigor defaults to hgih\r\n\t\t\tLeafSenesceDate: DateUtility.DotNetToDate(settingsModel.LeafSenesceDate),\r\n\t\t\tStressStartDate:  DateUtility.DotNetToDate(settingsModel.StressStartDate),\r\n\t\t\tStressEndDate: DateUtility.DotNetToDate(settingsModel.StressEndDate),\r\n\t\t\tIsMacroTunnelEnabled: settingsModel.IsMacroTunnelEnabled,\r\n\t\t\tIsMacroTunnelFullSeason: settingsModel.IsMacroTunnelFullSeason,\r\n\t\t\tMacroTunnelStartDate: DateUtility.DotNetToDate(settingsModel.MacroTunnelStartDate),\r\n\t\t\tMacroTunnelEndDate: DateUtility.DotNetToDate(settingsModel.MacroTunnelEndDate),\r\n\t\t\tIsStressEnabled: settingsModel.IsStressEnabled,\r\n\t\t\tIsSpatialEnabled: settingsModel.IsSpatialEnabled\r\n\t\t};\r\n\r\n\t\tthis.PlantingBasicInfoViewModel = {\r\n\t\t\tPlantingName: basicModel.PlantingName,\r\n\t\t\tYear: null,\r\n\t\t\tHarvestDate: DateUtility.DotNetToDate(basicModel.HarvestDate),\r\n\t\t\tWetDate: DateUtility.DotNetToDate(basicModel.WetDate),\r\n\t\t\tLotId: basicModel.LotId,\r\n\t\t\tLotName: basicModel.LotName,\r\n\t\t\tCommodityTypeId: data.Metadata.CommodityTypeId,\r\n\t\t\tCropTypeId: basicModel.CropTypeId,\r\n\t\t\tAgeOfCrop: basicModel.AgeOfCrop\r\n\t\t}\r\n\r\n\t\tthis.SoilProperties = data.SoilProperties;\r\n\r\n\t\tthis.CropTypeViewModel = data.CropTypeViewModel;\r\n\t\tthis.CropTypeViewModel.DaysToEndDate = (data.CropTypeViewModel.DaysToEndDate ? data.CropTypeViewModel.DaysToEndDate : 0);\r\n\t\tthis.CropTypeViewModel.Name = data.Metadata.ActiveCropType ? data.Metadata.ActiveCropType.Name : null;\r\n\t\tthis.CropTypeViewModel.CommodityTypeId = this.PlantingBasicInfoViewModel.CommodityTypeId;\r\n\r\n\t\tif (this.CropTypeViewModel.SeasonalKCs && this.CropTypeViewModel.SeasonalKCs.length) {\r\n\t\t\tthis.CropTypeViewModel.SeasonalKCs = this.CropTypeViewModel.SeasonalKCs.filter(x => x.Month > 0 && x.Month < 13);\r\n\t\t}\r\n\r\n\t\tthis.Metadata = data.Metadata;\r\n\t\tthis.calculator = Planting.getCalculator(\r\n\t\t\tPlanting.getCalculatorInterface(this.CropTypeViewModel.CommodityTypeId, this.Metadata.CommodityTypes));\r\n\r\n\t\treturn this;\r\n\t}\r\n}\r\n","import { ValidatorFn } from '@angular/forms';\r\nimport { Coordinates } from '../../classes/Coordinates';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { eCommodityTypes } from '../../interfaces/constants';\r\nimport * as moment from 'moment';\r\nimport { ICropType } from '../../models/crop-type/interfaces';\r\n\r\nexport class PlantingSettingsValidator {\r\n\r\n\tpublic static arrayMustContainItem(fr: FormArray): ValidatorFn\t {\r\n\t\treturn (): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = fr.controls.length > 0;\r\n\r\n\t\t\treturn valid ? null : {'arrayMustContainItem': {value: fr.controls.length }};\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Obstruction depth field is required if user enabled the UI\r\n\t * @param fg\r\n\t * @returns\r\n\t */\r\n\tpublic static requiredIfObstructionUIEnabled(fg: FormGroup): ValidatorFn\t {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet required: boolean;\r\n\r\n\t\t\trequired = fg.get('ShowObstructionDepth').value;\r\n\r\n\t\t\tvalid = !required || control.value ? true : false;\r\n\r\n\t\t\treturn valid ? null : {'requiredIfObstructionUIEnabled': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static mustBeAnInteger(): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = !control.value || Number.isInteger(control.value);\r\n\r\n\t\t\treturn valid ? null : {'mustBeAnInteger': {value: control.value}};\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Field is required if perennial commodity type and not caneberry,\r\n\t * which is year specific\r\n\t * @param fg\r\n\t * @returns\r\n\t */\r\n\tpublic static requiredIfNonCaneberryPerennials(fg: FormGroup): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet required: boolean;\r\n\t\t\tlet isPerennial: boolean;\r\n\t\t\tlet commodityTypeId: number;\r\n\r\n\t\t\tisPerennial = fg.get('CropSettings').get('IsPerennial').value;\r\n\t\t\tcommodityTypeId = fg.get('CommodityTypeId').value;\r\n\r\n\t\t\trequired = isPerennial && commodityTypeId !== eCommodityTypes.CANEBERRY\r\n\t\t\t\t? true : false;\r\n\r\n\t\t\tvalid = !required || control.value ? true : false;\r\n\r\n\t\t\treturn valid ? null : {'requiredForPerennials': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * For trees, the wet date and harvest date must not fall on different years.\r\n\t * Note: Add this to either the wet date or harvest date but not both\r\n\t * @param fg\r\n\t * @returns\r\n\t */\r\n\tpublic static mustBeOnSameYearAsHarvestDate(fg: FormGroup): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet isTree: boolean;\r\n\r\n\t\t\tisTree = fg.get('CropSettings').get('IsTree').value;\r\n\r\n\t\t\tif (!isTree) {\r\n\t\t\t\tvalid = true;\r\n\t\t\t} else {\r\n\t\t\t\tvalid = DateUtility.areSameYear(fg.get('WetDate').value,\r\n\t\t\t\t\tfg.get('HarvestDate').value);\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'wetDateNotSameYearAsHarvestDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static coordinatesContainLatLng(): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet coordinates: Coordinates;\r\n\r\n\t\t\tcoordinates = new Coordinates(control.value);\r\n\r\n\t\t\tvalid = (coordinates.lat && coordinates.lng) ? true : false;\r\n\r\n\t\t\treturn valid ? null : {'invalidCoordinates': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Wetdate must be before harvest date.\r\n\t * This validates wet date\r\n\t * @param fg\r\n\t * @returns\r\n\t */\r\n\r\n\tpublic static mustBeBeforeHarvestDate(fg: FormGroup): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = moment(fg.get('HarvestDate').value).isAfter(control.value);\r\n\r\n\t\t\treturn valid ? null : {'endDateOnOrAfterHarvestDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static mustBeAfterWetDate(fg: FormGroup): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = moment(fg.get('WetDate').value).isSameOrBefore(control.value);\r\n\r\n\t\t\treturn valid ? null : {'mustBeAfterWetDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Validates a crop type's defaultCropTypeId to make sure that the crop type\r\n\t * is a valid choice in the planting settings crop type dropdown\r\n\t * @param cropTypes\r\n\t * @returns\r\n\t */\r\n\tpublic static mustBeValidDefaultCropTypeId(cropTypes: ICropType[]): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = !control.value ||\r\n\t\t\t\t(cropTypes && cropTypes.find(x => x.Id === control.value)) ? true : false;\r\n\r\n\t\t\treturn valid ? null : {'validDefaultCropTypeId': {value: control.value}};\r\n\t\t};\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\n\r\nimport { HttpService, HttpServicePostOptions } from '../../services/http.service';\r\n\r\nimport { UpdateService } from '../../services/update.service'\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { EventUtility } from '../../models/event/eventUtility';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { PlantingAdvancedEdit } from './plantingAdvancedEdit';\r\n\r\nimport { CMError, SuccessResponse } from '../../interfaces/interfaces';\r\n\r\nimport { IPlantingAdvancedEdit, IPlantingCreateViewModel, ILotPlantingWithEventsJSON, IPlanting, IPlantingJSON,\r\n\tRainfallDataViewModelJSON,\r\n\tRainfallDataViewModel,\r\n\tRainfallDataByMonth,\r\n\tIPlantingAdvancedViewModel,\r\n\tIPlantingService,\r\n\tCustomSaturationSettings,\r\n\tRecalculationType} from './interfaces';\r\nimport { IIrrigationMethod } from '../../models/irrigation-method/interfaces';\r\n\r\nimport { IRawEvent } from '../../models/event/interfaces';\r\n\r\nimport { EventsType } from '../../interfaces/constants';\r\nimport { PersistentDatabase } from '../../services/persistent-database';\r\nimport { Planting } from './planting';\r\nimport { RainWeatherEventPostModel, WeatherEventViewModel } from '../et-chart/interface';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { IAdditionalWaterModel } from '../irrigation-event/interfaces';\r\nimport { IAppliedWaterChartDataSet } from '../applied-water-chart/interfaces';\r\nimport { IAvailableWaterJSON, IAvailableWater } from '../available-water-chart/interfaces';\r\nimport { AppliedFertilizerChartDataSet } from '../applied-fertilizer-chart/interfaces';\r\nimport { PlantingParamsInternal } from './plantingParam.interfaces';\r\nimport { PlantingSettingsFormConverter } from './PlantingSettingsFormConverter';\r\nimport { IPlantingSettingsForm } from './planting-settings-form.interfaces';\r\nimport { ISoilLayer } from '../../models/soil-type/interfaces';\r\n\r\n@Injectable()\r\nexport class PlantingService implements IPlantingService {\r\n\r\n\tprivate urls = { // refactoring start\r\n\t\tIrrigationMethod: {\r\n\t\t\tlistNContribution: (plantingId: number) => `/v2/plantings/${plantingId}/irrigation-methods/list-n-contribution.json`\r\n\t\t},\r\n\t\tLotPlanting: {\r\n\t\t\tsave: `/v2/plantings.json`,\r\n\t\t\tupdate: (plantingId: number) => `/v0/plantings/${plantingId}.json`,\r\n\t\t\tcreate: (ranchGuid: string) => `/v0/ranches/${ranchGuid}/plantings.json`,\r\n\t\t\tgetCreateForm: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/plantings/form.json`,\r\n\t\t\tdelete: (id: number) => `/v2/plantings/${id}.json`,\r\n\t\t\tadvancedEdit: (id: number) => `/v2/plantings/${id}.json`,\r\n\t\t\trecalculate: (id: number) => `/v2/plantings/${id}/calculation.json`,\r\n\t\t\tisWetDateValid: (lotPlantingId: number) => `/v2/plantings/${lotPlantingId}/wet-date-status.json`,\r\n\t\t\tslideInPanel: (lotPlantingId: number) => `/v2/plantings/${lotPlantingId}/slide-in-panel.json`,\r\n\t\t\tappliedWaterChart: (lotPlantingId: number) => `/v2/plantings/${lotPlantingId}/applied-water-chart.json`,\r\n\t\t\tappliedFertilizerChart: (lotPlantingId: number) => `/v2/plantings/${lotPlantingId}/applied-fertilizer-chart.json`,\r\n\t\t\tisLocationValid: `/v2/is-location-valid.json`,\r\n\t\t\trainfall: {\r\n\t\t\t\tlist: (id: number) => `/v2/plantings/${id}/rainfall.json`,\r\n\t\t\t\tbyMonth: (plantingId: number) => `/v2/plantings/${plantingId}/rainfall/monthly.json`,\r\n\t\t\t\tupdate: (plantingId: number) => `/v2/plantings/${plantingId}/rainfall.json`,\r\n\t\t\t\treset: (plantingId: number) => `/v2/plantings/${plantingId}/rainfall/reset.json`\r\n\t\t\t},\r\n\t\t\tavailableWater: {\r\n\t\t\t\tgetChart: (lotPlantingId: number) => `/v2/plantings/${lotPlantingId}/available-water-chart.json`,\r\n\t\t\t\trefresh: (lotPlantingId: number) => `/v2/plantings/${lotPlantingId}/available-water-chart.json`,\r\n\r\n\t\t\t\tgetCustomSaturationSettings: (lotPlantingId: number) =>\r\n\t\t\t\t`/v2/plantings/${lotPlantingId}/available-water-chart/custom-saturation-settings.json`,\r\n\t\t\t}\r\n\t\t},\r\n\t\tDashboard: {\r\n\t\t\tgetAllEventsUrl: (plantingId: number) => `/v2/plantings/${plantingId}/events.json`\r\n\t\t}\r\n\t};\r\n\r\n\t/* Other Methods */\r\n\r\n\t// event table sorting\r\n\r\n\t/**\r\n\t * For each tab in the event table, maintains the active column being sorted\r\n\t */\r\n\tpublic sortField: Map<string, string>;\r\n\r\n\t/**\r\n\t * For each tab, maintains the sort order (ascending / descending)\r\n\t */\r\n\tpublic sortDescending: Map<string, boolean>;\r\n\r\n\tpublic units = {\r\n\t\twater: 'hours',\r\n\t\tfertilizer: 'fertilizerUnit',\r\n\t\tsoilSamples: 'ppmNitrate-N'\r\n\t};\r\n\r\n\tpublic irrigationMethods: IIrrigationMethod[];\r\n\r\n\tconstructor(\r\n\t\tprivate updateService: UpdateService,\r\n\t\tprivate httpService: HttpService,\r\n\t\tprivate persistentDatabase: PersistentDatabase\r\n\t) {\r\n\t\tthis.sortField = new Map<string, string>();\r\n\t\tthis.sortDescending = new Map<string, boolean>();\r\n\r\n\t\tthis.resetEventTableSorting();\r\n\t}\r\n\r\n\tpublic resetEventTableSorting() {\r\n\t\tconst EVENT_DATE_STRING = 'EventDateString';\r\n\r\n\t\tthis.sortField.set('All', EVENT_DATE_STRING);\r\n\t\tthis.sortField.set('Water', EVENT_DATE_STRING);\r\n\t\tthis.sortField.set('Fertilizer', EVENT_DATE_STRING);\r\n\t\tthis.sortField.set('SoilSamples', EVENT_DATE_STRING);\r\n\t\tthis.sortField.set('Cutting', EVENT_DATE_STRING);\r\n\t\tthis.sortField.set('TissueSamples', EVENT_DATE_STRING);\r\n\r\n\t\tthis.sortDescending.set('All', false);\r\n\t\tthis.sortDescending.set('Water', false);\r\n\t\tthis.sortDescending.set('Fertilizer', false);\r\n\t\tthis.sortDescending.set('SoilSamples', false);\r\n\t\tthis.sortDescending.set('Cutting', false);\r\n\t\tthis.sortDescending.set('TissueSamples', false);\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param tabName\r\n\t * @param columnName\r\n\t * @param eventsType event table's active tab\r\n\t */\r\n\tpublic sort(tabName: string, columnName: string, eventsType: EventsType): void {\r\n\t\tlet eventTypeName: string;\r\n\r\n\t\teventTypeName = EventUtility.getStringFromEventsType(eventsType);\r\n\r\n\t\tif (tabName === eventTypeName && columnName === this.sortField.get(tabName)) {\r\n\t\t\tthis.sortDescending.set(tabName, !this.sortDescending.get(tabName));\r\n\t\t} else {\r\n\t\t\tthis.sortDescending.set(tabName, false);\r\n\t\t}\r\n\r\n\t\tthis.sortField.set(tabName, columnName);\r\n\t}\r\n\r\n\tpublic sortColumn(type: string): string {\r\n\t\treturn this.sortDescending.get(type)  ? '-' + this.sortField.get(type) : this.sortField.get(type);\r\n\t}\r\n\r\n\tprivate get(url: string, callback: Function, params?: HttpParams): Promise<any> {\r\n\t\tif (params) {\r\n\t\t\treturn this.httpService.get({\r\n\t\t\t\turl: url.toLocaleLowerCase(),\r\n\t\t\t\tsearchParams: params,\r\n\t\t\t\tcallback: callback,\r\n\t\t\t\tisWebAPI: true\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\treturn this.httpService.get({\r\n\t\t\t\turl: url.toLocaleLowerCase(),\r\n\t\t\t\tsearchParams: null,\r\n\t\t\t\tcallback: callback,\r\n\t\t\t\tisWebAPI: true\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate post(url: string, callback: Function, params: any): Promise<any> {\r\n\t\treturn this.httpService\r\n\t\t\t.post({\r\n\t\t\t\turl: url.toLocaleLowerCase(),\r\n\t\t\t\tbody: params,\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tcallback: callback\r\n\t\t\t});\r\n\t}\r\n\r\n\t/* Planting Methods */\r\n\r\n\tpublic getAppliedFertilizerChart(lotPlantingId: number): Promise<AppliedFertilizerChartDataSet> {\r\n\r\n\t\tif (!lotPlantingId) {\r\n\t\t\tthrow new Error('LotPlantingId is empty');\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.LotPlanting.appliedFertilizerChart(lotPlantingId),\r\n\t\t(data: AppliedFertilizerChartDataSet): AppliedFertilizerChartDataSet => {\r\n\r\n\t\t\treturn data;\r\n\t\t})\r\n\t}\r\n\r\n\tpublic getAppliedWaterChart(lotPlantingId: number): Promise<IAppliedWaterChartDataSet> {\r\n\r\n\t\tif (!lotPlantingId) {\r\n\t\t\tthrow new Error('LotPlantingId is empty');\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.LotPlanting.appliedWaterChart(lotPlantingId),\r\n\t\t(data: IAppliedWaterChartDataSet): IAppliedWaterChartDataSet => {\r\n\r\n\t\t\treturn data;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * refresh the available water chart using a new saturation start date\r\n\t * and initial saturation\r\n\t * @param lotPlantingId\r\n\t * @param startDate\r\n\t * @param initialSaturation\r\n\t * @returns\r\n\t * @throws Error if startDate is empty\r\n\t */\r\n\tpublic refreshAvailableWaterChart(lotPlantingId: number, startDate: Date,\r\n\t\tinitialSaturation: number): Promise<SuccessResponse> {\r\n\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tif (!startDate) {\r\n\t\t\tthrow new Error('startDate empty');\r\n\t\t}\r\n\r\n\t\tparams = new HttpParams().set('startDate', startDate.toLocaleDateString())\r\n\t\t\t.set('initialSaturation', (initialSaturation / 100).toString());\r\n\r\n\t\treturn this.httpService.put({\r\n\t\t\turl: this.urls.LotPlanting.availableWater.refresh(lotPlantingId),\r\n\t\t\tbody: null,\r\n\t\t\tparams: params,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: SuccessResponse) => {\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getCustomSaturationSettings(lotPlantingId: number): Promise<CustomSaturationSettings> {\r\n\t\tif (!lotPlantingId) {\r\n\t\t\tthrow new Error('LotPlantingId is empty');\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.LotPlanting.availableWater.getCustomSaturationSettings(lotPlantingId),\r\n\t\t(response: CustomSaturationSettings): CustomSaturationSettings => {\r\n\t\t\treturn response;\r\n\t\t})\r\n\t}\r\n\r\n\tpublic getAvailableWaterChart(lotPlantingId: number): Promise<IAvailableWater[]> {\r\n\r\n\t\tif (!lotPlantingId) {\r\n\t\t\tthrow new Error('LotPlantingId is empty');\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.LotPlanting.availableWater.getChart(lotPlantingId),\r\n\t\t(records: IAvailableWaterJSON[]): IAvailableWater[] => {\r\n\t\t\tlet result: IAvailableWater[];\r\n\r\n\t\t\tresult = [];\r\n\r\n\t\t\tfor (let record of records) {\r\n\t\t\t\tresult.push({\r\n\t\t\t\t\tId: record.Id,\r\n\t\t\t\t\tLotPlantingId: record.LotPlantingId,\r\n\t\t\t\t\tDate: DateUtility.DotNetToDate(record.Date),\r\n\t\t\t\t\tCalculated: record.Calculated,\r\n\t\t\t\t\tPotential: record.Potential,\r\n\t\t\t\t\tETc: record.ETc,\r\n\t\t\t\t\tKc: record.Kc,\r\n\t\t\t\t\tRainfall: record.Rainfall,\r\n\t\t\t\t\tWaterApplied: record.WaterApplied,\r\n\t\t\t\t\tRootDepth: record.RootDepth,\r\n\t\t\t\t\tPotentialPAW: record.PotentialPAW,\r\n\t\t\t\t\tETe: record.ETe,\r\n\t\t\t\t\tETo: record.ETo,\r\n\t\t\t\t\tKcMax: record.KcMax,\r\n\t\t\t\t\tKs: record.Ks,\r\n\t\t\t\t\tDr: record.Dr\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t})\r\n\t}\r\n\r\n\tpublic getSlideInPanel(lotPlantingId: number): Promise<IPlanting> {\r\n\r\n\t\tif (!lotPlantingId) {\r\n\t\t\tthrow new Error('LotPlantingId is empty');\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.LotPlanting.slideInPanel(lotPlantingId), (data: IPlantingJSON): IPlanting => {\r\n\t\t\tlet result: IPlanting;\r\n\r\n\t\t\tresult = Planting.convertPlantingJSON(data);\r\n\t\t\treturn result;\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n     * TODO: Instead of returning a restructured object, rewrite C# to return the same data structure as advancedEdit (GET)\r\n     */\r\n\tpublic getAddPlantingData(): Promise<IPlantingAdvancedEdit> {\r\n\r\n\t\treturn this.get(this.urls.LotPlanting.getCreateForm(this.updateService.currentRanchId),\r\n\t\t(data: IPlantingCreateViewModel): IPlantingAdvancedEdit => {\r\n\t\t\tlet result: PlantingAdvancedEdit;\r\n\r\n\t\t\tresult = new PlantingAdvancedEdit();\r\n\t\t\tresult.initializeWithCreateViewModel(data);\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic isLocationValid(lat: number, lng: number, isSpatialEnabled: boolean): Promise<string | CMError> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tif (!lat || !lng) {\r\n\t\t\tlet emptyError: CMError;\r\n\r\n\t\t\temptyError = {\r\n\t\t\t\tcode: 400,\r\n\t\t\t\tmessage: 'Coordinates are invalid'\r\n\t\t\t}\r\n\r\n\t\t\treturn of(emptyError).toPromise();\r\n\t\t}\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('lat', lat.toString())\r\n\t\t\t.set('lng', lng.toString())\r\n\t\t\t.set('isSpatialEnabled', isSpatialEnabled ? 'true' : 'false');\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.LotPlanting.isLocationValid,\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true,\r\n\t\t\tcallback: (data: SuccessResponse | CMError): string | CMError => {\r\n\t\t\t\tlet success: SuccessResponse;\r\n\t\t\t\tlet error: CMError;\r\n\r\n\t\t\t\terror = data as CMError;\r\n\t\t\t\tsuccess = data as SuccessResponse;\r\n\r\n\t\t\t\tif (!data) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t} else if (error.code) {\r\n\t\t\t\t\treturn error;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn success.Message;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic isWetDateValid(lotPlantingId: number, wetDate: Date): Promise<boolean> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tif (!lotPlantingId || !wetDate) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('wetDate', wetDate.toLocaleDateString());\r\n\r\n\t\treturn this.get(this.urls.LotPlanting.isWetDateValid(lotPlantingId), (data: boolean): boolean => {\r\n\t\t\treturn data;\r\n\t\t}, params);\r\n\t}\r\n\r\n\t// get a list of irrigation methods//////\r\n\tpublic getIrrigationMethods(plantingId: number): Promise<IIrrigationMethod[]> {\r\n\r\n\t\tif (!plantingId) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tif (this.irrigationMethods) {\r\n\t\t\treturn of(this.irrigationMethods).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.IrrigationMethod.listNContribution(plantingId), (response: IIrrigationMethod[]) => {\r\n\t\t\tif (!response) {\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\tthis.irrigationMethods = response;\r\n\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic create(planting: IPlantingSettingsForm, soilLayers: ISoilLayer[]): Promise<ILotPlantingWithEventsJSON | CMError> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\t\tlet body: PlantingParamsInternal;\r\n\r\n\t\tbody = PlantingSettingsFormConverter.convert(planting, soilLayers);\r\n\r\n\t\toptions = {\r\n\t\t\tbody: body,\r\n\t\t\turl: this.urls.LotPlanting.create(this.updateService.currentRanchId),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: this._processAddPlantingData,\r\n\t\t\tshouldBypassServerErrorAlert: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic update(planting: IPlantingSettingsForm, soilLayers: ISoilLayer[]): Promise<ILotPlantingWithEventsJSON | CMError> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\t\tlet body: PlantingParamsInternal;\r\n\r\n\t\tbody = PlantingSettingsFormConverter.convert(planting, soilLayers);\r\n\r\n\t\toptions = {\r\n\t\t\tbody: body,\r\n\t\t\turl: this.urls.LotPlanting.update(planting.Id),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: this._processAddPlantingData,\r\n\t\t\tshouldBypassServerErrorAlert: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.put(options);\r\n\t}\r\n\r\n\tprivate _processAddPlantingData(response: ILotPlantingWithEventsJSON | CMError): ILotPlantingWithEventsJSON | CMError {\r\n\t\tlet error: CMError;\r\n\r\n\t\tif (!response) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\terror = response as CMError;\r\n\r\n\t\tif (error.message) {\r\n\t\t\treturn error;\r\n\t\t}\r\n\r\n\t\treturn response as ILotPlantingWithEventsJSON;\r\n\t}\r\n\r\n\tpublic getEditModel(id: number): Promise<PlantingAdvancedEdit> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\treturn this.get(this.urls.LotPlanting.advancedEdit(id),\r\n\t\t\t(data: IPlantingAdvancedViewModel): PlantingAdvancedEdit => {\r\n\t\t\t\tlet result: PlantingAdvancedEdit;\r\n\r\n\t\t\t\tresult = new PlantingAdvancedEdit();\r\n\t\t\t\tresult.initializeWithPlantingAdvancedViewModel(data);\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}, params\r\n\t\t);\r\n\t}\r\n\r\n\tpublic deletePlanting(id: number): Promise<SuccessResponse> {\r\n\t\treturn this.httpService.delete({\r\n\t\t\turl: this.urls.LotPlanting.delete(id),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: this._processDeletePlanting\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _processDeletePlanting(data: SuccessResponse): SuccessResponse {\r\n\t\treturn data;\r\n\t}\r\n\r\n\tpublic recalculatePlanting(plantingId: number, irrigationOnly = false, fertilizationOnly = false): Promise<IPlanting> {\r\n\r\n\t\tlet body: RecalculationType;\r\n\r\n\t\tbody = {\r\n\t\t\tIrrigationOnly: irrigationOnly,\r\n\t\t\tFertilizationOnly: fertilizationOnly\r\n\t\t};\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.put({\r\n\t\t\t\turl: this.urls.LotPlanting.recalculate(plantingId),\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tbody: body,\r\n\r\n\t\t\t\tcallback: (response: IPlantingJSON) => {\r\n\t\t\t\t\tlet result: IPlanting;\r\n\r\n\t\t\t\t\tresult = Planting.convertPlantingJSON(response);\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\t/*\r\n     * Other Methods\r\n     */\r\n\tpublic getAllEvents(plantingId: number): Promise<EventGroup[]> {\r\n\r\n\t\tif (!plantingId) {\r\n\t\t\tthrow new Error('PlantingService.getallEvents() - plantingId is null');\r\n\t\t}\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.get({\r\n\t\t\t\turl: this.urls.Dashboard.getAllEventsUrl(plantingId),\r\n\t\t\t\tisWebAPI: true,\r\n\r\n\t\t\t\tcallback: (response: { Events: IRawEvent[], WetDate: string }) => {\r\n\t\t\t\t\treturn Planting.processAllEvents(response, this.persistentDatabase);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic combineAdditionalDataWithAllEvents(events: EventGroup[],\r\n\t\tadditionalIrrigationData: IAdditionalWaterModel[]): EventGroup[] {\r\n\r\n\t\tif (!additionalIrrigationData) {\r\n\t\t\treturn events;\r\n\t\t}\r\n\r\n\t\tif (!events || events.length === 0) {\r\n\t\t\treturn new Array();\r\n\t\t}\r\n\r\n\t\tif (!additionalIrrigationData || additionalIrrigationData.length === 0) {\r\n\t\t\treturn events;\r\n\t\t}\r\n\r\n\t\tfor (let event of events) {\r\n\t\t\tif (!event.Irrigation) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tfor (let additionalIrrigation of additionalIrrigationData) {\r\n\t\t\t\tif (event.Irrigation.Id === additionalIrrigation.Id) {\r\n\t\t\t\t\tevent.Irrigation.AdditionalData = additionalIrrigation;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t}\r\n\r\n\tpublic async getRainfallData(id: number): Promise<RainfallDataViewModel> {\r\n\t\tlet response: RainfallDataViewModel;\r\n\r\n\t\tresponse = await this.get(this.urls.LotPlanting.rainfall.list(id), this.processRainfallData);\r\n\r\n\t\treturn response;\r\n\t}\r\n\r\n\tpublic processRainfallData(json: RainfallDataViewModelJSON): RainfallDataViewModel {\r\n\r\n\t\tlet result: RainfallDataViewModel;\r\n\r\n\t\tif (!json) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tresult = {\r\n\t\t\tAveragedDataMode: json.AveragedDataMode,\r\n\t\t\tEndDate: DateUtility.DotNetToDate(json.EndDate),\r\n\t\t\tStartDate: DateUtility.DotNetToDate(json.StartDate),\r\n\t\t\tPlantingId: json.PlantingId,\r\n\t\t\tWeatherStations: json.WeatherStations,\r\n\t\t\tRainfallModel: null,\r\n\t\t};\r\n\r\n\t\tif (json.RainfallModel && json.RainfallModel.length > 0 &&\r\n\t\t\tjson.RainfallModel[0] !== null) {\r\n\r\n\t\t\tresult.RainfallModel = [\r\n\t\t\t\t{\r\n\t\t\t\t\tEventDate: DateUtility.DotNetToDate(json.RainfallModel[0].EventDate),\r\n\t\t\t\t\tRainfallAmount: json.RainfallModel[0].RainfallAmount,\r\n\t\t\t\t\tET: json.RainfallModel[0].ET\r\n\t\t\t\t}\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic getRainfallDataByMonth(id: number, month: number, year: number): Promise<RainfallDataByMonth[]> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tif (!id || id === null || id === undefined) {\r\n\t\t\tthrow new Error('id is missing');\r\n\t\t}\r\n\r\n\t\tif (!month || month === null || month === undefined) {\r\n\t\t\tthrow new Error('month is missing');\r\n\t\t}\r\n\r\n\t\tif (!year || year === null || year === undefined) {\r\n\t\t\tthrow new Error('year is missing');\r\n\t\t}\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('month', '' + month)\r\n\t\t\t.set('year', '' + year);\r\n\r\n\t\treturn this.get(this.urls.LotPlanting.rainfall.byMonth(id), this.processRainfallDataByMonth, params);\r\n\t}\r\n\r\n\tprivate processRainfallDataByMonth(data: string[][]): RainfallDataByMonth[] {\r\n\t\tlet processedData: RainfallDataByMonth[] = new Array();\r\n\r\n\t\tfor (let dataItem of data) {\r\n\t\t\tlet date: string;\r\n\t\t\tlet rainfall: string;\r\n\t\t\tlet weatherStationsRainfall: string[] = new Array();\r\n\r\n\t\t\tfor (let i in dataItem) {\r\n\t\t\t\tif (i === '0') {\r\n\t\t\t\t\tdate = dataItem[i];\r\n\t\t\t\t} else if (i === '1') {\r\n\t\t\t\t\trainfall = dataItem[i];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tweatherStationsRainfall.push(dataItem[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tprocessedData.push({\r\n\t\t\t\tDate: date,\r\n\t\t\t\tRainfallAmount: Number(rainfall),\r\n\t\t\t\tisFuture: null,\r\n\t\t\t\tRainfallDate: null,\r\n\t\t\t\tRainfall: rainfall,\r\n\t\t\t\tWeatherStationsRainfall: weatherStationsRainfall\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn processedData;\r\n\t}\r\n\r\n\tpublic updateRainfall(id: number, rainfallRecord: RainWeatherEventPostModel): Promise<IPlanting> {\r\n\r\n\t\treturn this.httpService.put({\r\n\t\t\turl: this.urls.LotPlanting.rainfall.update(id),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: this.processUpdateRainfall,\r\n\t\t\tbody: rainfallRecord\r\n\t\t});\r\n\t}\r\n\r\n\tprivate processUpdateRainfall(data: IPlantingJSON): IPlanting {\r\n\t\tlet result: IPlanting;\r\n\r\n\t\tresult = Planting.convertPlantingJSON(data);\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic async resetRainfall(id: number, month: number, year: number): Promise<IPlanting> {\r\n\t\tlet params: {\r\n\t\t\tMonth: number,\r\n\t\t\tYear: number\r\n\t\t};\r\n\r\n\t\tlet response: IPlantingJSON;\r\n\t\tlet result: IPlanting;\r\n\r\n\t\tparams = {\r\n\t\t\tMonth: month,\r\n\t\t\tYear: year\r\n\t\t}\r\n\r\n\t\tresponse = await this.post(this.urls.LotPlanting.rainfall.reset(id), null, params);\r\n\t\tresult = Planting.convertPlantingJSON(response);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic toggleUnits(type: string, value: string) {\r\n\t\tif (type === 'Water') {\r\n\t\t\tthis.units.water = value;\r\n\t\t} else if (type === 'Fertilizer') {\r\n\t\t\tthis.units.fertilizer = value;\r\n\t\t} else if (type === 'SoilSamples') {\r\n\t\t\tthis.units.soilSamples = value;\r\n\t\t}\r\n\t}\r\n}\r\n","import { DateUtility } from '../../classes/dateUtility';\r\nimport { EventUtility } from '../../models/event/eventUtility';\r\nimport { BOKA } from '../../classes/array';\r\nimport * as jQuery from 'jquery';\r\n\r\nimport { PlantingsArray } from '../../interfaces/interfaces';\r\nimport { IPlantingAdvancedEdit, IPlanting, ILotPlantingWithEventsJSON } from '../planting-settings/interfaces';\r\nimport { IEventGroup } from '../../models/event/interfaces';\r\nimport { ILotEdit } from '../ranch-settings/modals/lot/interfaces';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { Planting } from '../planting-settings/planting';\r\nimport { ICommodityType } from '../../models/commodity-type/interfaces';\r\nimport { EventsType } from '../../interfaces/constants';\r\n\r\n/**\r\n * A set of plantings, used to maintain data on the client side\r\n */\r\nexport class Plantings implements PlantingsArray {\r\n\r\n\tpublic active: IPlanting[];\r\n\tpublic favorites: IPlanting[];\r\n\tpublic all: IPlanting[];\r\n\r\n\tpublic static idExistsInEvent(event: IEventGroup, id: number): boolean {\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!id) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (event.Fertilization && event.Fertilization.length > 0) {\r\n\t\t\tfor (let fertilizationEvent of event.Fertilization) {\r\n\t\t\t\tif (fertilizationEvent.Id === id) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (event.Irrigation && event.Irrigation.Id === id) {\r\n\t\t\treturn true;\r\n\t\t} else if (event.SoilSamples) {\r\n\t\t\tfor (let soilSample of event.SoilSamples) {\r\n\t\t\t\tif (soilSample.Id === id) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (event.CutEvent && event.CutEvent.Id === id) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tconstructor() { }\r\n\r\n\t// Update service mostly takes care of favoriting, except it doesn't update the favorites array,\r\n\t// which we do here\r\n\tpublic favorite(plantingId: number): void {\r\n\r\n\t\tlet planting: IPlanting;\r\n\r\n\t\tplanting = this.getPlantingById(plantingId);\r\n\r\n\t\tif (!planting) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.favorites || this.favorites.filter(x => x.Id === plantingId)[0]) {\r\n\t\t\t// item exists in favorites\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.favorites.push(planting);\r\n\t\tthis.sortPlantingsByName();\r\n\t}\r\n\r\n\tpublic unfavorite(plantingId: number) {\r\n\r\n\t\tthis.favorites = this._removePlanting(this.favorites, plantingId);\r\n\t\t// removal shouldn't require resorting\r\n\t}\r\n\r\n\tpublic addEventToPlantings(event: EventGroup, plantingId: number, eventId?: number): void {\r\n\t\tthis.addEvent(this.all, event, plantingId, eventId);\r\n\t\tthis.addEvent(this.favorites, event, plantingId, eventId);\r\n\t\tthis.addEvent(this.active, event, plantingId, eventId);\r\n\t}\r\n\r\n\tpublic addEventGroups(eventGroups: EventGroup[], plantingId: number): void {\r\n\t\tif (!eventGroups || eventGroups.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let eventGroup of eventGroups) {\r\n\t\t\tthis.addEventToPlantings(eventGroup, plantingId);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic replacePlantingEvents(events: EventGroup[], plantingId: number) {\r\n\t\tthis.replaceEvents(this.all, events, plantingId);\r\n\t\tthis.replaceEvents(this.favorites, events, plantingId);\r\n\t\tthis.replaceEvents(this.active, events, plantingId);\r\n\t}\r\n\r\n\t/**\r\n\t * Given an eventGroup, \"update\" current eventGroup with the new eventGroup. Used\r\n\t * when updating an eventGroup for a single date.\r\n\t * @param event\r\n\t * @param plantingId\r\n\t */\r\n\tpublic updatePlantingEvents(event: IEventGroup, plantingId: number): void {\r\n\t\tif (!event || EventUtility.hasNoEvents(event)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.updateEvent(this.all, event, plantingId);\r\n\t\tthis.updateEvent(this.favorites, event, plantingId);\r\n\t\tthis.updateEvent(this.active, event, plantingId);\r\n\t}\r\n\r\n\t/**\r\n\t * Batch update multiple event groups in a planting\r\n\t * @param eventGroups\r\n\t * @param plantingId\r\n\t */\r\n\tpublic updateEventGroups(eventGroups: IEventGroup[], plantingId: number): void {\r\n\t\tif (!eventGroups || eventGroups.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let eventGroup of eventGroups) {\r\n\t\t\tthis.updatePlantingEvents(eventGroup, plantingId);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic deleteEventInPlantings(eventDate: Date, plantingId: number,\r\n\t\teventType: EventsType, eventId: number = null, activeEvents: string = null): void {\r\n\r\n\t\tthis.deleteEvent(this.all, eventDate, plantingId, eventType, eventId, activeEvents);\r\n\t\tthis.deleteEvent(this.favorites, eventDate, plantingId, eventType, eventId, activeEvents);\r\n\t\tthis.deleteEvent(this.active, eventDate, plantingId, eventType, eventId, activeEvents);\r\n\t}\r\n\r\n\tpublic add(data: ILotPlantingWithEventsJSON) {\r\n\t\tlet planting: IPlanting;\r\n\r\n\t\tif (!data) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tplanting = this.convertData(data);\r\n\r\n\t\tif (this.active && this.isActive(planting)) {\r\n\t\t\tthis.active.push(planting);\r\n\t\t}\r\n\r\n\t\tif (this.all) {\r\n\t\t\tthis.all.push(planting);\r\n\t\t}\r\n\r\n\t\t// we don't push new items to favorites, because it hasn't been favorited\r\n\r\n\t\tthis.sortPlantingsByName();\r\n\t}\r\n\r\n\t/**\r\n\t * Update all planting arrays with new planting data.\r\n\t * @param planting updated planting\r\n\t * @returns void\r\n\t */\r\n\tpublic edit(planting: IPlanting): void {\r\n\t\tthis._updatePlantings(this.active, planting);\r\n\t\tthis._updatePlantings(this.all, planting);\r\n\t\tthis._updatePlantings(this.favorites, planting);\r\n\r\n\t\tif (this.all) {\r\n\t\t\tthis.active = this.getCurrentPlantings(this.all); // filter out past/future plantings from active plantings\r\n\t\t}\r\n\r\n\t\tthis.sortPlantingsByName();\r\n\t}\r\n\r\n\tpublic delete(id: number) {\r\n\r\n\t\tthis.active = this._removePlanting(this.active, id);\r\n\t\tthis.favorites = this._removePlanting(this.favorites, id);\r\n\t\tthis.all = this._removePlanting(this.all, id);\r\n\r\n\t\t// deleting an item shouldn't require resorting\r\n\t}\r\n\r\n\t/**\r\n\t * Update lot name in plantings array\r\n\t * @param lot\r\n\t */\r\n\tpublic updateLotNamesInPlantings(lot: ILotEdit) {\r\n\r\n\t\tthis.updateLotNames(this.active, lot);\r\n\t\tthis.updateLotNames(this.favorites, lot);\r\n\t\tthis.updateLotNames(this.all, lot);\r\n\t}\r\n\r\n\t/**\r\n\t * Given All plantings, get \"active\" plantings using date.\r\n\t */\r\n\tpublic getCurrentPlantings(plantings: IPlanting[]) { // filter out \"not active\" plantings for alfalfa...\r\n\r\n\t\tlet firstOfYear: Date;\r\n\r\n\t\tfirstOfYear = new Date(new Date().getFullYear(), 0, 1);\r\n\r\n\t\treturn plantings.filter(x => x.HarvestDate >= firstOfYear);\r\n\t}\r\n\r\n\t/**\r\n\t * Removes a planting from a planting array\r\n\t * Returns a new plantings array without the specified planting\r\n\t * @param ar plantings\r\n\t * @param plantingId\r\n\t * @returns new array\r\n\t */\r\n\tprivate _removePlanting(ar: IPlanting[], plantingId: number): IPlanting[] {\r\n\t\tif (ar && ar.length !== undefined) {\r\n\t\t\treturn ar.filter(x => x.Id !== plantingId);\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * This method updates a planting array with new planting data. Use this\r\n\t * method when updating a planting.\r\n\t * @param ar planting array cache\r\n\t * @param planting updated planting object\r\n\t * @returns void\r\n\t */\r\n\tprivate _updatePlantings(ar: IPlanting[], planting: IPlanting): void {\r\n\t\tlet plantingTarget: IPlanting;\r\n\r\n\t\tif (!ar || ar.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!planting) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tplantingTarget = ar.filter(x => x.Id === planting.Id)[0];\r\n\r\n\t\tif (!plantingTarget) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._updateIPlanting(planting, plantingTarget);\r\n\r\n\t\tif (!this.isActive(plantingTarget)) {\r\n\t\t\tar = this._removePlanting(ar, plantingTarget.Id);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * This method updates an IPlanting object with an IPlantingAdvancedEdit\r\n\t * planting object.\r\n\t * @param source IPlantingAdvancedEdit object\r\n\t * @param target IPlanting object\r\n\t * @returns void\r\n\t */\r\n\tprivate _updateIPlanting(source: IPlanting,\r\n\t\ttarget: IPlanting): void {\r\n\r\n\r\n\t\tif (!source || !target) {\r\n\t\t\tthrow new Error('source or target missing');\r\n\t\t}\r\n\r\n\t\tif (!target.RanchLot || !source.RanchLot) {\r\n\t\t\tthrow new Error('RanchLot object is empty');\r\n\t\t}\r\n\r\n\t\tif (target.CropType && source.CropType) {\r\n\t\t\ttarget.CropType.Id = source.CropType.Id;\r\n\t\t\ttarget.CropType.Name = source.CropType.Name;\r\n\t\t}\r\n\r\n\t\ttarget.Name = source.Name;\r\n\t\ttarget.HarvestDate = source.HarvestDate;\r\n\t\ttarget.WetDate = source.WetDate;\r\n\t\ttarget.RanchLot.Id = source.RanchLot.Id;\r\n\t\ttarget.RanchLot.Name = source.RanchLot.Name;\r\n\t\ttarget.CommodityTypeId = source.CommodityTypeId;\r\n\t\ttarget.CommodityTypeName = source.CommodityTypeName;\r\n\t\ttarget.HasFlowMeterFileName = source.HasFlowMeterFileName;\r\n\t\ttarget.HasSoilMoistureFileName = source.HasSoilMoistureFileName;\r\n\t\ttarget.CommodityTypeName = source.CommodityTypeName;\r\n\r\n\t\tif (source.Events) {\r\n\t\t\ttarget.Events = source.Events;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic convertData(data: ILotPlantingWithEventsJSON): IPlanting {\r\n\r\n\t\tlet result: IPlanting;\r\n\t\tlet wetDate: Date;\r\n\r\n\t\tif (!data) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\twetDate = DateUtility.DotNetToDate(data.WetDate);\r\n\r\n\t\tresult = { // ceate a clean planting data object\r\n\t\t\tId: data.Id,\r\n\t\t\tName: data.Name,\r\n\t\t\tCommodityTypeId: data.CommodityTypeId,\r\n\t\t\tCommodityTypeName: data.CommodityTypeName,\r\n\t\t\tCommodityTypeCalculator: data.CommodityTypeCalculator,\r\n\t\t\tCropType: data.CropType,\r\n\t\t\tEvents: EventGroup.convertAll(data.Events, wetDate),\r\n\t\t\tHarvestDate: DateUtility.DotNetToDate(data.HarvestDate),\r\n\t\t\tWetDate: wetDate,\r\n\t\t\tRanchLot: data.RanchLot,\r\n\t\t\tHasFlowMeterFileName: data.HasFlowMeterFileName,\r\n\t\t\tHasSoilMoistureFileName: data.HasSoilMoistureFileName\r\n\t\t};\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate sortPlantingsByName() {\r\n\r\n\t\tBOKA.Array.sortByName(this.active, 'Name');\r\n\t\tBOKA.Array.sortByName(this.favorites, 'Name');\r\n\t\tBOKA.Array.sortByName(this.all, 'Name');\r\n\t}\r\n\r\n\tprivate findEventInPlantingByDate(planting: IPlanting, eventDate: Date): EventGroup {\r\n\t\tlet result: EventGroup;\r\n\r\n\t\tif (!planting || !planting.Events) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = planting.Events.filter(x => DateUtility.areEqualDates(x.EventDate, eventDate))[0];\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Each eventGroup contains arrays of fertilization, soil sample, and tissue\r\n\t * sample events.\r\n\t *\r\n\t * @param planting\r\n\t * @param eventId\r\n\t */\r\n\tprivate findEventById(planting: IPlanting, eventId: number): EventGroup {\r\n\t\tlet result: EventGroup;\r\n\r\n\t\tif (!planting || !planting.Events || planting.Events.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = planting.Events.filter(x => (x.Irrigation && x.Irrigation.Id === eventId) ||\r\n\t\t\t(x.Fertilization && x.Fertilization.filter(f => f.Id === eventId).length > 0) ||\r\n\t\t\t(x.SoilSamples && x.SoilSamples.filter(s => s.Id === eventId).length > 0) ||\r\n\t\t\t(x.CutEvent && x.CutEvent.Id === eventId) ||\r\n\t\t\t(x.TissueSamples && x.TissueSamples.filter(t => t.Id === eventId).length > 0))[0];\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate removeEventFromPlanting(planting: IPlanting, eventDate: Date): void {\r\n\t\tif (!planting || !planting.Events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tplanting.Events = planting.Events.filter(x => DateUtility.areEqualDates(x.EventDate, eventDate) === false);\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param ar\r\n\t * @param event\r\n\t * @param plantingId\r\n\t * @param eventType\r\n\t * @param eventId - optional, used for deleting soil sample events, where there can be multiple\r\n\t * events per date\r\n\t */\r\n\tprivate deleteEvent(ar: IPlanting[], eventDate: Date, plantingId: number,\r\n\t\teventType: EventsType, eventId?: number, activeEvents?: string): void {\r\n\r\n\t\tlet plantingTarget: IPlanting;\r\n\t\tlet eventTarget: IEventGroup;\r\n\r\n\t\tif (!ar || ar.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tplantingTarget = ar.filter(x => x.Id === plantingId)[0];\r\n\r\n\t\tif (!plantingTarget) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tplantingTarget.ActiveEventDates = Planting.convertActiveEventString(activeEvents);\r\n\r\n\t\tplantingTarget.Counts = {\r\n\t\t\tupcomingEvents: Planting.getUpcomingEventCount(plantingTarget.ActiveEventDates)\r\n\t\t};\r\n\r\n\t\tif (!plantingTarget.Events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\teventTarget = this.findEventInPlantingByDate(plantingTarget, eventDate);\r\n\r\n\t\tif (!eventTarget) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tswitch (eventType) {\r\n\t\t\tcase EventsType.FERTILIZER:\r\n\t\t\t\tif (!eventTarget.Fertilization || eventTarget.Fertilization.length === 0) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!eventId) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (let index in eventTarget.Fertilization) {\r\n\t\t\t\t\tif (eventTarget.Fertilization[index].Id === eventId) {\r\n\t\t\t\t\t\teventTarget.Fertilization.splice(parseInt(index, 10), 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.WATER:\r\n\t\t\t\teventTarget.Irrigation = null;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.SOILSAMPLES:\r\n\r\n\t\t\t\tif (!eventTarget.SoilSamples) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!eventId) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (let index in eventTarget.SoilSamples) {\r\n\t\t\t\t\tif (eventTarget.SoilSamples[index].Id === eventId) {\r\n\t\t\t\t\t\teventTarget.SoilSamples.splice(parseInt(index, 10), 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.TISSUE_SAMPLE:\r\n\r\n\t\t\t\tif (!eventTarget.TissueSamples) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!eventId) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (let index in eventTarget.TissueSamples) {\r\n\t\t\t\t\tif (eventTarget.TissueSamples[index].Id === eventId) {\r\n\t\t\t\t\t\teventTarget.TissueSamples.splice(parseInt(index, 10), 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.CUTTING:\r\n\t\t\t\teventTarget.CutEvent = null;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif (!eventTarget.Irrigation) {\r\n\t\t\teventTarget.RainfallWeather = null;\r\n\t\t}\r\n\r\n\t\tthis._updateSucceedingCutEvent(plantingTarget, eventTarget.EventDate);\r\n\r\n\t\t// If all \"sub events\" are empty, delete the event from the array\r\n\r\n\t\tif (!eventTarget.Fertilization && !eventTarget.Irrigation && !eventTarget.RainfallWeather &&\r\n\t\t\t(!eventTarget.SoilSamples || eventTarget.SoilSamples.length === 0) && !eventTarget.CutEvent) {\r\n\r\n\t\t\tthis.removeEventFromPlanting(plantingTarget, eventDate);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Update succeeding cut event's cut interval, if any\r\n\t *\r\n\t * if an event is deleted, we need to look for older cut events\r\n\t *\r\n\t * @param planting\r\n\t * @param event\r\n\t */\r\n\tprivate _updateSucceedingCutEvent(planting: IPlanting, eventDate: Date): void {\r\n\t\tlet futureEvents, previousEvents: EventGroup[];\r\n\t\tlet futureEvent: EventGroup;\r\n\t\tlet previousEvent: EventGroup;\r\n\r\n\t\tif (!planting || !planting.Events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfutureEvents = planting.Events.filter(x => x.CutEvent &&\r\n\t\t\tDateUtility.getDifference(eventDate, x.EventDate) < 0);\r\n\r\n\t\tif (!futureEvents || futureEvents.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (futureEvents.length === 1) {\r\n\t\t\tfutureEvent = futureEvents[0];\r\n\t\t} else {\r\n\t\t\tfutureEvent = futureEvents.sort((a, b) => {\r\n\t\t\t\tlet x, y:  number;\r\n\r\n\t\t\t\tx = a.EventDate.getTime();\r\n\t\t\t\ty = b.EventDate.getTime();\r\n\r\n\t\t\t\tif (x > y) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t} else if (x < y) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn 0\r\n\t\t\t\t}\r\n\t\t\t})[0];\r\n\t\t}\r\n\r\n\t\tpreviousEvents = planting.Events.filter(x => x.CutEvent && DateUtility.getDifference(futureEvent.EventDate, x.EventDate) > 0);\r\n\r\n\t\tif (!previousEvents || previousEvents.length === 0) {\r\n\t\t\t// does this need a wet date?\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (previousEvents.length > 1) {\r\n\t\t\tpreviousEvent = previousEvents.sort((a, b) => {\r\n\t\t\t\tlet x, y:  number;\r\n\r\n\t\t\t\tx = a.EventDate.getTime();\r\n\t\t\t\ty = b.EventDate.getTime();\r\n\r\n\t\t\t\tif (x > y) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t} else if (x < y) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn 0\r\n\t\t\t\t}\r\n\t\t\t})[0];\r\n\t\t} else {\r\n\t\t\tpreviousEvent = previousEvents[0];\r\n\t\t}\r\n\r\n\t\tfutureEvent.CutEvent.CutInterval = DateUtility.getDifferenceInDays(futureEvent.EventDate, previousEvent.EventDate);\r\n\t}\r\n\r\n\tprivate addEvent(ar: IPlanting[], event: EventGroup, plantingId: number, eventId?: number): void {\r\n\t\tlet plantingTarget: IPlanting;\r\n\t\tlet eventTarget: EventGroup;\r\n\t\tlet eventOriginal: IEventGroup;\r\n\r\n\t\tif (!ar || ar === null || ar === undefined || ar.length === 0) {\r\n\t\t\t/* There are no plantings in this particular array,\r\n               therefore an event cannot be added. */\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tplantingTarget = ar.filter(x => x.Id === plantingId)[0];\r\n\r\n\t\tif (!plantingTarget) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t/** Update upcoming event counts in plantings view */\r\n\t\tplantingTarget.ActiveEventDates = Planting.convertActiveEventString(event.ActiveEvents);\r\n\r\n\t\tplantingTarget.Counts = {\r\n\t\t\tupcomingEvents: Planting.getUpcomingEventCount(plantingTarget.ActiveEventDates)\r\n\t\t};\r\n\r\n\t\tif (eventId) {\r\n\t\t\teventOriginal = this.findEventById(plantingTarget, eventId);\r\n\t\t} else {\r\n\t\t\teventOriginal = null;\r\n\t\t}\r\n\r\n\t\t/** If event is moved to a different date, we need to remove the event\r\n\t\t * from the original eventGroup\r\n\t\t */\r\n\t\tif (event.eventType && eventId && eventOriginal &&\r\n\t\t\tDateUtility.areEqualDates(event.EventDate, eventOriginal.EventDate) === false) {\r\n\r\n\t\t\t/* if date changed, remove the old event on former date */\r\n\t\t\tswitch (event.eventType) {\r\n\t\t\t\tcase EventsType.SOILSAMPLES:\r\n\t\t\t\t\tif (!eventId) {\r\n\t\t\t\t\t\teventId = event.SoilSamples[0].Id;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\teventOriginal.SoilSamples = eventOriginal.SoilSamples.filter(x => x.Id !== eventId);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase EventsType.WATER:\r\n\t\t\t\t\teventOriginal.Irrigation = null;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase EventsType.FERTILIZER:\r\n\t\t\t\t\tif (!eventId) {\r\n\t\t\t\t\t\teventId = event.Fertilization[0].Id;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\teventOriginal.Fertilization = eventOriginal.Fertilization.filter(x => x.Id !== eventId);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase EventsType.TISSUE_SAMPLE:\r\n\t\t\t\t\tif (!eventId) {\r\n\t\t\t\t\t\teventId = event.SoilSamples[0].Id;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\teventOriginal.TissueSamples = eventOriginal.TissueSamples.filter(x => x.Id !== eventId);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase EventsType.CUTTING:\r\n\t\t\t\t\teventOriginal.CutEvent = null;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t/**\r\n\t\t\t * If the resulting eventGroup is empty, remove the eventGroup from the events array\r\n\t\t\t */\r\n\t\t\tif (EventUtility.hasNoEvents(eventOriginal)) {\r\n\t\t\t\tthis.removeEventFromPlanting(plantingTarget, eventOriginal.EventDate);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Find target eventGroup by date. In plantings view, there should be a\r\n\t\t * single eventGroup for a single date\r\n\t\t */\r\n\t\teventTarget = this.findEventInPlantingByDate(plantingTarget, event.EventDate);\r\n\r\n\t\tif (eventTarget) { // update event\r\n\t\t\teventTarget = jQuery.extend(true, eventTarget, event); // do a deep copy of data without messing with pointers\r\n\t\t} else { // add event\r\n\t\t\tplantingTarget.Events.push(event);\r\n\t\t}\r\n\r\n\t\tthis._updateSucceedingCutEvent(plantingTarget, event.EventDate);\r\n\t}\r\n\r\n\t// given a list of events, replace a plantings current event \"stream\" with the new list of events\r\n\t// used primarily when recalculating plantings, which can impact multiple events\r\n\tprivate replaceEvents(plantings: IPlanting[], events: EventGroup[], plantingId: number): void {\r\n\r\n\t\tlet plantingTarget: IPlanting;\r\n\r\n\t\tif (!plantings || plantings.length === 0) {\r\n\t\t\t// valid result - sometimes there isn't going to be a match\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tplantingTarget = plantings.filter(x => x.Id === plantingId)[0];\r\n\r\n\t\tif (!plantingTarget) {\r\n\t\t\t// no match found\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tplantingTarget.Events = events;\r\n\t}\r\n\r\n\tprivate updateEvent(ar: IPlanting[], event: IEventGroup, plantingId: number): void {\r\n\r\n\t\tlet plantingTarget: IPlanting;\r\n\t\tlet eventTarget: IEventGroup;\r\n\r\n\t\tif (!ar || ar.length === 0) {\r\n\t\t\t/* There are no plantings in this particular array,\r\n               therefore there are no events to be updated. */\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tplantingTarget = ar.filter(x => x.Id === plantingId)[0];\r\n\r\n\t\tif (!plantingTarget) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\teventTarget = this.findEventInPlantingByDate(plantingTarget, event.EventDate);\r\n\r\n\t\tif (!eventTarget) {\r\n\t\t\t// valid, depending on which planting array we're looking at - some may not be loaded\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\teventTarget = jQuery.extend(true, eventTarget, event); // will this be enough? may need to copy over data\r\n\t}\r\n\r\n\t/**\r\n\t * Given a lot, update lot name in planting array\r\n\t * @param ar\r\n\t * @param plantingId\r\n\t * @param lot\r\n\t */\r\n\tprivate updateLotNames(plantings: IPlanting[], lot: ILotEdit) {\r\n\r\n\t\tif (!plantings || plantings.length === 0) {\r\n\t\t\t// valid error - in some cases, favorites or all plantings won't exist\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!lot) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let planting of plantings) {\r\n\r\n\t\t\tif (!planting.RanchLot) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (planting.RanchLot.Id === lot.Id) {\r\n\t\t\t\tplanting.RanchLot.Name = lot.Name;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate isActive(planting: IPlanting): boolean {\r\n\t\tlet now: number;\r\n\t\tlet endDate: number;\r\n\t\tlet firstOfYear: Date;\r\n\r\n\t\tif (!planting || !planting.WetDate || !planting.HarvestDate) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfirstOfYear = new Date(new Date().getFullYear(), 0, 1);\r\n\t\tnow = firstOfYear.setHours(0, 0, 0, 0);\r\n\t\tendDate = new Date(planting.HarvestDate).setHours(0, 0, 0, 0);\r\n\r\n\t\treturn now <= endDate;\r\n\t}\r\n\r\n\tpublic getPlantingById(plantingId: number): IPlanting {\r\n\r\n\t\tlet result: IPlanting;\r\n\r\n\t\tif (!plantingId) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (this.all && this.all.length > 0) {\r\n\t\t\tresult = this.all.filter(x => x.Id === plantingId)[0];\r\n\t\t}\r\n\r\n\t\t// should only enter below if plantings.all has not been loaded\r\n\t\t// code is AJAX delay dependent\r\n\r\n\t\tif (!result && this.active) {\r\n\t\t\tresult = this.active.filter(x => x.Id === plantingId)[0];\r\n\t\t}\r\n\r\n\t\tif (!result && this.favorites) {\r\n\t\t\tresult = this.favorites.filter(x => x.Id === plantingId)[0];\r\n\t\t}\r\n\r\n\t\tif (!result) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n    <h4 mat-dialog-title>\r\n        {{'Disconnect Your Account From CASP' | translate }}\r\n    </h4>\r\n    <div mat-dialog-content class=\"modal-body bk-modal__body bk-planting-modal__body bk-modal__body--white bk-modal__scroll-area\">\r\n        <p>\r\n            Are you sure you want to disconnect your account from your CASP account?\r\n            Your CASP account will no longer be kept up to date with CropManage, and\r\n            reconnecting later on may be difficult. Disconnecting from CASP will not affect CropManage data that\r\n            was imported into CASP.\r\n        </p>\r\n    </div>\r\n    <div mat-dialog-actions align=\"end\">\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"disconnect()\">\r\n            {{'Disconnect my Account from CASP' | translate }}\r\n        </button>\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"close()\">\r\n            {{'Nevermind' | translate }}\r\n        </button>\r\n    </div>\r\n</div>\r\n\r\n    ","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { CaspService } from '../casp-dialog/casp.service';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { eNotificationTypes } from '../../interfaces/constants';\r\nimport { ProfileUpdateService } from './profile.update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'casp-confirmation-dialog',\r\n\ttemplateUrl: 'casp-disconnect-confirmation-dialog.html'\r\n})\r\n\r\nexport class CaspDisconnectConfirmationDialog implements OnInit {\r\n\r\n\tconstructor(\r\n\t\tpublic dialogRef: MatDialogRef<CaspDisconnectConfirmationDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: {},\r\n\t\tprivate _caspService: CaspService,\r\n\t\tprivate _updateService: ProfileUpdateService,\r\n\t\tprivate _notificationService: NotificationService) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n\r\n\tpublic disconnect(): void {\r\n\t\t//\r\n\t\tthis._caspService.disable().then(response => {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\tmessage: 'Your account was successfully disconnected from CASP'\r\n\t\t\t});\r\n\r\n\t\t\tthis.dialogRef.close();\r\n\t\t\tthis._updateService.updateCaspState();\r\n\t\t});\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n}\r\n","<div class=\"bk-profile__tab-container\" id=\"changePassword\">\r\n    <h5 class=\"bk-text--gray\">{{'Change Password' | translate }}</h5>\r\n\r\n    <div *ngIf=\"savePasswordSuccess === true\"\r\n        class=\"bk-alert--success\">\r\n        <i class=\"fa fa-check\"></i>\r\n        {{'Your Password was successfully updated' | translate }}\r\n        <span (click)=\"savePasswordSuccess = null\" class=\"bk-alert__close\">&times;</span>\r\n    </div>\r\n    <div *ngIf=\"savePasswordSuccess === false\"\r\n        class=\"bk-alert--failed\">\r\n        <i class=\"fa fa-times\"></i>\r\n        {{errorMessage}}\r\n        <span (click)=\"savePasswordSuccess = null\"\r\n        class=\"bk-alert__close\">&times;</span>\r\n    </div>\r\n\r\n    <form>\r\n        <div class=\"bk-profile__form\">\r\n            <input class=\"bk-hidden\" type=\"text\" name=\"username\" autocomplete=\"username\" value=\"username\"/><!-- optionally hidden username field, to suppress warning-->\r\n            <div class=\"bk-modal__body bk-modal__body--white\">\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Current Password' | translate }}\r\n                </label>\r\n\r\n                <input class=\"bk-modal__field bk-input--full\"\r\n                    type=\"password\"\r\n                    name=\"OldPassword\"\r\n                    autocomplete=\"current-password\"\r\n                    [ngClass]=\"{'bk-input-invalid' : !formValid.currentPassword}\"\r\n                    [(ngModel)]=\"changePasswordObject.OldPassword\"\r\n                    (ngModelChange)=\"validateCurrentPassword(changePasswordObject.OldPassword)\"/>\r\n\r\n                <div *ngIf=\"!formValid.currentPassword\"\r\n                    class=\"bk-invalid-text\">\r\n                    {{'The current password does not match our records' | translate }}\r\n                </div>\r\n\r\n                <label class=\"bk-modal__label\">\r\n                    {{'New Password' | translate }}\r\n                </label>\r\n\r\n                <input class=\"bk-modal__field bk-input--full\"\r\n                    type=\"password\"\r\n                    name=\"NewPassword\"\r\n                    autocomplete=\"new-password\"\r\n                    [ngClass]=\"{'bk-input-invalid' : !formValid.newPassword}\"\r\n                    [(ngModel)]=\"changePasswordObject.NewPassword\"\r\n                    (ngModelChange)=\"validateNewPassword(changePasswordObject.NewPassword)\"/>\r\n        \r\n                <div *ngIf=\"!formValid.currentPassword\"\r\n                    class=\"bk-invalid-text\">\r\n                    {{'New password invalid' | translate }}\r\n                </div>\r\n\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Confirm New Password' | translate }}\r\n                </label>\r\n\r\n                <input class=\"bk-modal__field bk-input--full\"\r\n                    type=\"password\"\r\n                    name=\"ConfirmPassword\"\r\n                    autocomplete=\"new-password\"\r\n                    [ngClass]=\"{'bk-input-invalid' : !formValid.confirmPassword}\"\r\n                    [(ngModel)]=\"changePasswordObject.ConfirmPassword\"\r\n                    (ngModelChange)=\"validateConfirmPassword(changePasswordObject.ConfirmPassword)\">\r\n\r\n                <div *ngIf=\"!formValid.confirmPassword\"\r\n                    class=\"bk-invalid-text\">\r\n                    {{'Passwords do not match' | translate }}\r\n                </div>\r\n            </div>\r\n            <div class=\"modal-footer bk-modal__footer\">\r\n                <button [disabled]=\"changePasswordInvalid()\"\r\n                    class=\"bk-button bk-button--medium\"\r\n                    (click)=\"changePassword()\">\r\n                    {{'Change Password' | translate }}\r\n                </button>\r\n            </div>\r\n        </div>\r\n    </form>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { UserService } from '../../models/user/service';\r\nimport { IChangePassword } from './interfaces';\r\nimport { CMError, SuccessResponse } from '../../interfaces/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'change-password',\r\n\ttemplateUrl: 'change-password.html',\r\n\tstyleUrls: [ 'profile.scss']\r\n})\r\n\r\nexport class ChangePasswordComponent implements OnInit {\r\n\r\n\tpublic savePasswordSuccess: boolean = null;\r\n\tpublic errorMessage: string;\r\n\r\n\tpublic changePasswordObject: IChangePassword = {\r\n\t\tOldPassword: '',\r\n\t\tNewPassword: '',\r\n\t\tConfirmPassword: '',\r\n\t};\r\n\r\n\tpublic formValid = {\r\n\t\tcurrentPassword: true,\r\n\t\tnewPassword: true,\r\n\t\tconfirmPassword: true\r\n\t}\r\n\r\n\tprivate formStarted = {\r\n\t\tcurrentPassword: false,\r\n\t\tnewPasssword: false,\r\n\t\tconfirmPassword: false\r\n\t}\r\n\r\n\tconstructor(private updateService: UpdateService, private validateService: ValidateService, private userService: UserService) { }\r\n\r\n\tngOnInit(): void {\r\n\r\n\t}\r\n\r\n\t/*user information validation*/\r\n\r\n\tpublic validateCurrentPassword(currentPassword: string) {\r\n\t\tthis.formStarted.currentPassword = true;\r\n\t\tthis.formValid.currentPassword = this.validateService.validateNotEmptyString(currentPassword);\r\n\t}\r\n\r\n\tpublic validateNewPassword(newPassword: string) {\r\n\t\tthis.formStarted.newPasssword = true;\r\n\t\tthis.formValid.newPassword = this.validateService.validateNotEmptyString(newPassword);\r\n\t}\r\n\r\n\tpublic validateConfirmPassword(confirmPassword: string) {\r\n\t\tthis.formStarted.confirmPassword = true;\r\n\r\n\t\tthis.formValid.confirmPassword = this.validateService.validateNotEmptyString(confirmPassword)\r\n\t\t\t&& this.changePasswordObject.NewPassword === confirmPassword;\r\n\t}\r\n\r\n\tpublic changePasswordInvalid(): boolean {\r\n\t\tif (!this.formStarted.confirmPassword || !this.formStarted.currentPassword\r\n\t\t\t|| !this.formStarted.newPasssword) {\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (!this.formValid.confirmPassword || !this.formValid.currentPassword\r\n\t\t\t|| !this.formValid.newPassword) {\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic changePassword(): void {\r\n\t\tthis.userService.changePassword(this.changePasswordObject)\r\n\t\t\t.then((res: CMError | SuccessResponse) => {\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet success: SuccessResponse;\r\n\t\t\t\tlet error: CMError;\r\n\r\n\t\t\t\tsuccess = res as SuccessResponse;\r\n\t\t\t\terror = res as CMError;\r\n\r\n\t\t\t\tthis.savePasswordSuccess = success.Message ? true : false;\r\n\r\n\t\t\t\tif (this.savePasswordSuccess === false) {\r\n\t\t\t\t\tthis.errorMessage = error.message;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic submit(): void {\r\n\t\tif (this.changePasswordInvalid()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.changePassword();\r\n\t}\r\n}\r\n","<div class=\"bk-profile__container\">\r\n    <profile-nav>\r\n        <profile-tab [tabTitle]=\"'User Information'\">\r\n            <user-information></user-information>\r\n        </profile-tab>\r\n        <profile-tab [tabTitle]=\"'Change Password'\">\r\n            <change-password></change-password>\r\n        </profile-tab>\r\n    </profile-nav>\r\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { navigationViews, UpdateService } from '../../services/update.service';\r\nimport { CookieService } from '../../services/cookie.service';\r\nimport { UserInformationComponent } from './user-information';\r\nimport { ChangePasswordComponent } from './change-password';\r\nimport * as jQuery from 'jquery';\r\nimport { TokenService } from '../../services/token.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'profile',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class ProfileComponent implements OnInit {\r\n\t@ViewChild(UserInformationComponent, { static: true }) private userInformationComponent: UserInformationComponent;\r\n\t@ViewChild(ChangePasswordComponent, { static: true }) private changePasswordComponent: ChangePasswordComponent;\r\n\r\n\tconstructor(\r\n\t\tprivate _router: Router,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate updateService: UpdateService,\r\n\t\tprivate cookieService: CookieService) {\r\n\r\n\t\tif (this._tokenService.isAuthenticated() === false) {\r\n\t\t\tthis._router.navigate(['login']);\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.updateService.setCurrentRanchId(null);\r\n\t\tthis.updateService.setRanchPlantingsPermissions(null);\r\n\t\tthis.cookieService.deleteCurrentRanchCookie();\r\n\t\tthis.updateService.setCurrentPage(navigationViews.PROFILE);\r\n\t\tthis.updateService.clearRanchSettings();\r\n\r\n\t\tlet __this = this;\r\n\t\tjQuery(document).bind('keypress', function (e) {\r\n\t\t\tif (e.which === 13) {\r\n\t\t\t\tif (jQuery('#changePassword').is(':visible')) {\r\n\t\t\t\t\t__this.changePasswordComponent.submit();\r\n\t\t\t\t}\r\n\t\t\t\tif (jQuery('#userInformation').is(':visible')) {\r\n\t\t\t\t\t__this.userInformationComponent.submit();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tjQuery(document).unbind('keypress');\r\n\t}\r\n}\r\n","<div class=\"bk-nav\">\r\n    <div class=\"bk-nav__title-container\">\r\n        <h4 class=\"bk-nav__title\">{{'Profile' | translate }}</h4>\r\n    </div>\r\n    <ul class=\"bk-nav__items\">\r\n        <li [class.bk-nav__item--selected]=\"tab.selected\" class=\"bk-nav__item\" *ngFor=\"let tab of tabs\" (click)=\"selectTab(tab)\">\r\n            {{tab.tabTitle | translate}}\r\n        </li>\r\n    </ul>\r\n</div>\r\n<ng-content></ng-content>\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { NavInterface } from '../../interfaces/nav.interface';\r\nimport { ProfileTabComponent } from '../profile/tab';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'profile-nav',\r\n\ttemplateUrl: 'nav.html'\r\n})\r\n\r\nexport class ProfileNavComponent implements NavInterface {\r\n\ttabs: ProfileTabComponent[] = [];\r\n\r\n\t@Input()\r\n\ttitle: string;\r\n\r\n\tselectTab(tab: ProfileTabComponent): void {\r\n\t\tthis.tabs.map((t) => {\r\n\t\t\tt.selected = false;\r\n\t\t});\r\n\r\n\t\ttab.selected = true;\r\n\t}\r\n\r\n\taddTab(tab: ProfileTabComponent): void {\r\n\t\tif (!this.tabs.length) {\r\n\t\t\ttab.selected = true;\r\n\t\t}\r\n\t\tthis.tabs.push(tab);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class ProfileUpdateService {\r\n\tprivate _caspUpdated: Subject<null> = new Subject<null>();\r\n\tpublic caspUpdated = this._caspUpdated.asObservable();\r\n\r\n\tpublic updateCaspState(): void {\r\n\t\tthis._caspUpdated.next();\r\n\t}\r\n}\r\n","\n        <div class=\"bk-tab__container tab\" [hidden]=\"!selected\">\n            <ng-content></ng-content>\n        </div>\n    ","import { Component, Input, OnInit } from '@angular/core';\r\nimport { TabInterface } from '../../interfaces/tab.interface';\r\nimport { ProfileNavComponent } from './nav';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'profile-tab',\r\n\ttemplate: `\r\n        <div class=\"bk-tab__container tab\" [hidden]=\"!selected\">\r\n            <ng-content></ng-content>\r\n        </div>\r\n    `,\r\n\tstyleUrls: ['../shared/tab/main.css']\r\n})\r\n\r\nexport class ProfileTabComponent implements OnInit, TabInterface {\r\n\t@Input()\r\n\ttabTitle: string;\r\n\r\n\tselected = false;\r\n\r\n\tconstructor(private profileNavComponent: ProfileNavComponent) { }\r\n\r\n\tngOnInit() {\r\n\t\tthis.profileNavComponent.addTab(this);\r\n\t}\r\n\r\n}\r\n","<div class=\"bk-profile__tab-container\" id=\"userInformation\">\r\n    <h5 class=\"bk-text--gray\">{{'User Information' | translate }}</h5>\r\n\r\n    <div *ngIf=\"saveProfileSuccess\" class=\"bk-alert--success\"><i class=\"fa fa-check\"></i>{{'Your Profile was successfully updated' | translate }}<span (click)=\"saveProfileSuccess=false\" class=\"bk-alert__close\">&times;</span></div>\r\n\r\n    <form>\r\n        <div class=\"bk-profile__form\" *ngIf=\"userInfo\">\r\n            <div class=\"bk-modal__body bk-modal__body--white\">\r\n                <label class=\"bk-modal__label\">\r\n                    {{'First Name' | translate }}\r\n                </label>\r\n\r\n                <input class=\"bk-modal__field bk-input--full\"\r\n                    type=\"text\"\r\n                    name=\"FirstName\"\r\n                    [ngClass]=\"{'bk-input-invalid' : !formValid.firstName}\"\r\n                    [(ngModel)]=\"userInfo.FirstName\"\r\n                    (ngModelChange)=\"validateFirstName(userInfo.FirstName)\"/>\r\n\r\n                <div *ngIf=\"!formValid.firstName\"\r\n                    class=\"bk-invalid-text\">\r\n                    {{'First Name cannot be empty' | translate }}\r\n                </div>\r\n\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Last Name' | translate }}\r\n                </label>\r\n\r\n                <input class=\"bk-modal__field bk-input--full\"\r\n                    type=\"text\"\r\n                    name=\"LastName\"\r\n                    [ngClass]=\"{'bk-input-invalid' : !formValid.lastName}\"\r\n                    [(ngModel)]=\"userInfo.LastName\"\r\n                    (ngModelChange)=\"validateLastName(userInfo.LastName)\"/>\r\n\r\n                <div *ngIf=\"!formValid.lastName\"\r\n                    class=\"bk-invalid-text\">\r\n                    {{'Last Name cannot be empty' | translate }}\r\n                </div>\r\n\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Preferred Language' | translate }}\r\n                </label>\r\n\r\n                <select class=\"bk-input--full bk-select--medium bk-modal__field\"\r\n                    name=\"LanguageCodeId\"\r\n                    [(ngModel)]=\"userInfo.LanguageCodeId\">\r\n                    <option *ngFor=\"let language of languages\" [ngValue]=\"language.Id\">{{language.Language}}</option>\r\n                </select>\r\n\r\n                <div class=\"bk-modal__row bk-modal__row--no-border\">\r\n                    <input type=\"checkbox\"\r\n                    class=\"bk-modal__checkbox\"\r\n                    name=\"BETACommoditiesEnabled\"\r\n                    value=\"userInfo.BETACommoditiesEnabled\"\r\n                    [disabled]=\"betaCommodityTypeCount > 0 && userInfo.BETACommoditiesEnabled\"\r\n                    [(ngModel)]=\"userInfo.BETACommoditiesEnabled\"/>\r\n                \r\n                    <span class=\"bk-modal__checkbox__label\">\r\n                        <strong>{{ 'Enable BETA Commodities' | translate }} </strong> - {{ 'BETA Commodities Help Text' | translate }}\r\n                    </span>\r\n                </div>\r\n\r\n                <a class=\"bk-clickable\"\r\n                    *ngIf=\"isCASPEnabled\" \r\n                    (click)=\"disconnectFromCASP()\">\r\n                    {{ 'Disconnect your Account from CASP' | translate }}\r\n                </a>\r\n            </div>\r\n            <div class=\"modal-footer bk-modal__footer\">\r\n                <button [disabled]=\"userInfoInvalid()\"\r\n                    class=\"bk-button bk-button--medium\"\r\n                    (click)=\"updateUserDetails()\">\r\n                    {{'Save' | translate }}\r\n                </button>\r\n            </div>\r\n        </div>\r\n    </form>\r\n</div>","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { UserService } from '../../models/user/service';\r\nimport { TranslateService } from '../localization/service';\r\nimport { ICurrentUser } from '../../models/user/interfaces';\r\nimport { CaspService } from '../casp-dialog/casp.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { CaspDisconnectConfirmationDialog } from './casp-disconnect-confirmation-dialog';\r\nimport { ProfileUpdateService } from './profile.update.service';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { LanguageCode } from '../localization/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'user-information',\r\n\ttemplateUrl: 'user-information.html',\r\n\tstyleUrls: [ 'profile.scss']\r\n})\r\n\r\nexport class UserInformationComponent implements OnInit, OnDestroy {\r\n\tpublic betaCommodityTypeCount: number;\r\n\tpublic languages: LanguageCode[] = new Array();\r\n\tpublic userInfo: ICurrentUser;\r\n\tpublic saveProfileSuccess = false;\r\n\tpublic isCASPEnabled: boolean;\r\n\tpublic isSaving: boolean;\r\n\r\n\tprivate formStarted = {\r\n\t\tfirstName: false,\r\n\t\tlastName: false,\r\n\t}\r\n\r\n\tprivate formValid = {\r\n\t\tfirstName: true,\r\n\t\tlastName: true,\r\n\t}\r\n\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _caspService: CaspService,\r\n\t\tprivate validateService: ValidateService,\r\n\t\tprivate userService: UserService,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _profileUpdateService: ProfileUpdateService,\r\n\t\tprivate translateService: TranslateService) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.isSaving = false;\r\n\t\tthis.getUserInformation();\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis._profileUpdateService.caspUpdated.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\t// if casp is disconnected, this subscription triggers\r\n\t\t\tthis.isCASPEnabled = false;\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tprivate getUserInformation(): void {\r\n\t\tthis.getLanguages()\r\n\t\t.then(response => {\r\n\t\t\tthis.languages = response;\r\n\t\t});\r\n\r\n\t\tthis.userService.getBETACommodityTypeCount().then((resp) => {\r\n\t\t\tthis.betaCommodityTypeCount = resp;\r\n\t\t});\r\n\r\n\t\tthis.userService.getCurrentUser()\r\n\t\t.then((res: ICurrentUser) => {\r\n\t\t\tif (res) {\r\n\t\t\t\tthis.userInfo = res;\r\n\t\t\t\tthis.validateFirstName(this.userInfo.FirstName);\r\n\t\t\t\tthis.validateLastName(this.userInfo.LastName);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._caspService.isEnabled().then(response => {\r\n\t\t\tthis.isCASPEnabled = response;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Display disconnect confirmation dialog\r\n\t */\r\n\tpublic disconnectFromCASP(): void {\r\n\t\tthis._dialog.open(CaspDisconnectConfirmationDialog);\r\n\t}\r\n\r\n\tprivate getLanguages(): Promise<LanguageCode[]> {\r\n\t\treturn this.translateService.loadLanguages();\r\n\t}\r\n\r\n\t/*user information validation*/\r\n\r\n\tprivate validateFirstName(firstName: string) {\r\n\t\tthis.formStarted.firstName = true;\r\n\t\tthis.formValid.firstName = this.validateService.validateNotEmptyString(firstName);\r\n\t}\r\n\r\n\tprivate validateLastName(lastName: string) {\r\n\t\tthis.formStarted.lastName = true;\r\n\t\tthis.formValid.lastName = this.validateService.validateNotEmptyString(lastName);\r\n\t}\r\n\r\n\tprivate userInfoInvalid(): boolean {\r\n\t\tif (!this.formStarted.firstName || !this.formStarted.lastName) {\r\n\t\t\treturn true;\r\n\t\t} else if (!this.formValid.firstName || !this.formValid.lastName) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateUserDetails(): void {\r\n\r\n\t\tif (!this.userInfo) {\r\n\t\t\tthrow new Error('userInfo is empty');\r\n\t\t}\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.userService.updateUserDetails(this.userInfo)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t\tthis.saveProfileSuccess = true;\r\n\t\t\t\tthis.userService.getCurrentUser(true);\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tthis.translateService.setCurrentLanguage(this.userInfo.LanguageCodeId);\r\n\t}\r\n\r\n\tpublic submit(): void {\r\n\t\tif (this.userInfoInvalid()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.updateUserDetails();\r\n\t}\r\n}\r\n\r\n","<div class=\"bk-admin__page\">\r\n\t<button mat-button color=\"primary\"\r\n\t\tclass=\"cm-navigation-button\"\r\n\t\t(click)=\"goBack()\">\r\n\t\t<mat-icon>arrow_backward</mat-icon>\r\n\t\t{{'Go Back' | translate }}\r\n\t</button>\r\n\r\n\t<H2>ET Calculation Results</H2>\r\n\r\n\t<div class=\"cm-summary-table--wrapper\">\r\n\t\t<table class=\"cm-summary-table\">\r\n\t\t\t<tbody>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<label>Start Date</label>\r\n\t\t\t\t\t\t{{ startDate | date }}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<label>End Date</label>\r\n\t\t\t\t\t\t{{ endDate | date }}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colspan=\"2\">\r\n\t\t\t\t\t\t<label>Crop Type</label>\r\n\t\t\t\t\t\t{{ cropTypeName }}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colspan=\"2\">\r\n\t\t\t\t\t\t<label>Weather Station</label>\r\n\t\t\t\t\t\t{{ weatherStationName }}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t</tbody>\r\n\t\t</table>\r\n\t</div>\r\n\r\n\t<div class=\"bk-chart\" #chartContainer></div>\r\n\r\n\t<table>\r\n\t\t<tbody>\r\n\t\t\t<tr>\r\n\t\t\t\t<td>\r\n\t\t\t\t\tTotal Reference ET (in.)\r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t{{ totals.ETo | number:'1.2-2' }}\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td>\r\n\t\t\t\t\tTotal Rain (in.)\r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t{{ totals.Rain | number:'1.2-2' }}\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td>\r\n\t\t\t\t\tTotal Crop ET (in.)\r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<strong>{{ totals.ETc | number:'1.2-2' }}</strong>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t</tbody>\r\n\t</table>\r\n</div>","import { Component, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { DateUtility } from '../../../classes/dateUtility';\r\nimport { IrrigationService } from '../../irrigation-event/service';\r\nimport { EvaporationRecordSimple, SimpleSingleCallIrrigationRecommendationModel } from '../../irrigation-event/interfaces';\r\nimport { IHighChartCustomSeries } from '../../available-water-chart/interfaces';\r\nimport * as Highcharts from 'highcharts';\r\nimport { HighChartsService } from '../../../classes/highCharts.service';\r\nimport { Router } from '@angular/router';\r\nimport { PersistentDatabase } from '../../../services/persistent-database';\r\n\r\nexport interface ETCalculatorResultsInputParams {\r\n\tdata: SimpleSingleCallIrrigationRecommendationModel,\r\n\tCropTypeName: string,\r\n\tWeatherStationName: string,\r\n\tCommodityTypeId: number\r\n}\r\n\r\nexport type ETCalculatorFields = 'AgeOfCrop' | 'CommodityTypeId' | 'CropTypeId' | 'WetDate'\r\n\t| 'HarvestDate' | 'Latitude' | 'Longitude' | 'WeatherStationId';\r\n\r\n@Component({\r\n\tselector: 'et-calculator',\r\n\ttemplateUrl: 'et-calculator-results.component.html',\r\n\tstyleUrls: [ 'et-calculator-results.component.scss']\r\n})\r\n\r\nexport class ETCalculatorResultsComponent implements OnInit, OnDestroy {\r\n\r\n\t@ViewChild('chartContainer', { static: false }) private _chartContainer: ElementRef;\r\n\r\n\tpublic totals: {\r\n\t\tETo: number,\r\n\t\tETc: number,\r\n\t\tRain: number,\r\n\t\tETcRainDiff: number\r\n\t};\r\n\r\n\tpublic cropTypeName: string;\r\n\tpublic weatherStationName: string;\r\n\tpublic startDate: Date;\r\n\tpublic endDate: Date;\r\n\r\n\tprivate _data: SimpleSingleCallIrrigationRecommendationModel;\r\n\tprivate _evapRecords: EvaporationRecordSimple[];\r\n\tprivate _chartData: Highcharts.IndividualSeriesOptions[];\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _irrigationService: IrrigationService,\r\n\t\tprivate _persistentDatabase: PersistentDatabase,\r\n\t\tprivate _router: Router,\r\n\t) {\r\n\t\tthis.totals = {\r\n\t\t\tETc: 0,\r\n\t\t\tETo: 0,\r\n\t\t\tRain: 0,\r\n\t\t\tETcRainDiff: 0\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tlet params: ETCalculatorResultsInputParams;\r\n\r\n\t\tparams = this._persistentDatabase.etCalculatorParams;\r\n\r\n\t\tif (params) {\r\n\t\t\tthis._data = params.data;\r\n\t\t\tthis.cropTypeName = params.CropTypeName;\r\n\t\t\tthis.weatherStationName = params.WeatherStationName;\r\n\t\t\tthis.startDate = this._data.WetDate;\r\n\t\t\tthis.endDate = this._data.HarvestDate;\r\n\t\t\tthis._calculate();\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tprivate _calculate() {\r\n\t\tthis._data.SoilProperties = {\r\n\t\t\tSand: 0,\r\n\t\t\tSilt: 0\r\n\t\t};\r\n\r\n\t\tthis._data.IrrigationEvents = [];\r\n\t\tthis._data.EventDate = this._data.HarvestDate;\r\n\r\n\t\tthis._irrigationService.getSeasonET(this._data).then((response) => {\r\n\t\t\tthis._evapRecords = response;\r\n\t\t\tthis._loadChartData();\r\n\t\t});\r\n\t}\r\n\r\n\tpublic goBack() {\r\n\t\tthis._router.navigate(['et-calculator']);\r\n\t}\r\n\r\n\tprivate _loadChartData() {\r\n\t\tthis._convertToGraphData(this._evapRecords);\r\n\t\tHighChartsService.drawGraph(this._chartContainer, this._chartData);\r\n\t}\r\n\r\n\tprivate _convertToGraphData(records: EvaporationRecordSimple[]) {\r\n\t\tlet temp: {\r\n\t\t\train: IHighChartCustomSeries,\r\n\t\t\tet: IHighChartCustomSeries,\r\n\t\t};\r\n\r\n\t\ttemp = {\r\n\t\t\train: {\r\n\t\t\t\tname: 'Rainfall',\r\n\t\t\t\ttype: 'column',\r\n\t\t\t\tvisible: false,\r\n\t\t\t\tdata: [],\r\n\t\t\t},\r\n\t\t\tet: {\r\n\t\t\t\tname: 'ETc',\r\n\t\t\t\ttype: 'line',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttooltip: {\r\n\t\t\t\t\tvalueDecimals: 4\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t}\r\n\r\n\t\tthis._chartData = [];\r\n\r\n\t\tthis.totals = {\r\n\t\t\tETc: 0,\r\n\t\t\tETo: 0,\r\n\t\t\tRain: 0,\r\n\t\t\tETcRainDiff: 0\r\n\t\t}\r\n\r\n\t\tif (!records || records.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let record of records) {\r\n\t\t\ttemp.rain.data.push([DateUtility.DateToUTC(record.Date),\r\n\t\t\t\trecord.Rain]);\r\n\r\n\t\t\ttemp.et.data.push([DateUtility.DateToUTC(record.Date),\r\n\t\t\t\trecord.ETc]);\r\n\r\n\t\t\tthis.totals.ETc += record.ETc;\r\n\t\t\tthis.totals.ETo += record.ETo;\r\n\t\t\tthis.totals.Rain += record.Rain;\r\n\t\t}\r\n\r\n\t\tthis.totals.ETcRainDiff = this.totals.ETc - this.totals.Rain;\r\n\r\n\t\tthis._chartData.push(temp.rain);\r\n\t\tthis._chartData.push(temp.et);\r\n\t}\r\n}\r\n","<div class=\"bk-admin__page\">\r\n\t<form [formGroup]=form\r\n\t\t*ngIf=\"form\">\r\n\t\t<h2>CropManage ET Calculator</h2>\r\n\r\n\t\t<h4>Crop Information</h4>\r\n\t\t<mat-form-field\r\n\t\t\t*ngIf=\"commodityTypes\" \r\n\t\t\tappearance=\"fill\"\r\n\t\t\tclass=\"mat-form-field--one-line mat-form-field--short\">\r\n\r\n\t\t\t<mat-label>{{'Commodity' | translate }}</mat-label>\r\n\r\n\t\t\t<mat-select required\r\n\t\t\t\tformControlName=\"CommodityTypeId\">\r\n\r\n\t\t\t\t<mat-option *ngFor=\"let commodityType of commodityTypes\"\r\n\t\t\t\t\t[value]=\"commodityType.Id\">\r\n\t\t\t\t\t{{commodityType.Name | translate}}\r\n\t\t\t\t</mat-option>\r\n\r\n\t\t\t</mat-select>\r\n\r\n\t\t\t<mat-error *ngIf=\"f.CommodityTypeId.invalid && (f.CommodityTypeId.dirty || f.CommodityTypeId.touched)\">\r\n\r\n\t\t\t\t{{'Cannot be empty. Please select an option.' | translate }}\r\n\t\t\t</mat-error>\r\n\r\n\t\t</mat-form-field>\r\n\r\n\t\t<mat-form-field\r\n\t\t\t*ngIf=\"cropTypes && cropTypes.length > 0\" \r\n\t\t\tappearance=\"fill\"\r\n\t\t\tclass=\"mat-form-field--one-line mat-form-field--short\">\r\n\r\n\t\t\t<mat-label>{{'CropType' | translate }}</mat-label>\r\n\r\n\t\t\t<mat-select required\r\n\t\t\t\tformControlName=\"CropTypeId\">\r\n\r\n\t\t\t\t<mat-option *ngFor=\"let cropType of cropTypes\"\r\n\t\t\t\t\t[value]=\"cropType.Id\">\r\n\t\t\t\t\t{{ cropType.Name }}\r\n\t\t\t\t</mat-option>\r\n\r\n\t\t\t</mat-select>\r\n\r\n\t\t\t<mat-error *ngIf=\"f.CropTypeId.invalid && (f.CropTypeId.dirty || f.CropTypeId.touched)\">\r\n\t\t\t\t{{'Cannot be empty. Please select an option.' | translate }}\r\n\t\t\t</mat-error>\r\n\r\n\t\t</mat-form-field>\r\n\r\n\t\t<mat-form-field *ngIf=\"isTree\"\r\n\t\t\tappearance=\"fill\"\r\n\t\t\tclass=\"mat-form-field--one-line mat-form-field--short\">\r\n\r\n\t\t\t<mat-label>{{'Age of Crop' | translate }}</mat-label>\r\n\r\n\t\t\t<mat-select\r\n\t\t\t\trequired\r\n\t\t\t\tformControlName=\"AgeOfCrop\">\r\n\r\n\t\t\t\t<mat-option *ngFor=\"let ageOfCropOption of ageOfCropOptions\"\r\n\t\t\t\t\t[value]=\"ageOfCropOption.key\">\r\n\t\t\t\t\t{{ ageOfCropOption.value }}\r\n\t\t\t\t</mat-option>\r\n\r\n\t\t\t</mat-select>\r\n\r\n\t\t\t<mat-error *ngIf=\"f.AgeOfCrop.invalid && (f.AgeOfCrop.dirty || f.AgeOfCrop.touched)\">\r\n\r\n\t\t\t\t{{'Age of crop is required' | translate }}\r\n\t\t\t</mat-error>\r\n\r\n\t\t</mat-form-field>\r\n\r\n\t\t<div class=\"instruction-container\">\r\n\t\t\t<h4>Crop Season Dates</h4>\r\n\t\t\t<p>Enter the start and end dates of the crop's growing season.</p>\r\n\t\t\r\n\t\t\t<ul>\r\n\t\t\t\t<li><b>Date Range:</b> Choose start and end dates\r\n\t\t\t\t\tthat are less than 366 days apart (about one year).</li>\r\n\t\t\t\t<li><b>Select recent dates (max 2 years old):</b> Choose dates that\r\n\t\t\t\t\tare before today but no older than two years ago.</li>\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t\t<mat-form-field appearance=\"fill\"\r\n\t\t\tclass='bk-mat-date-field bk-mat-date-field--first'>\r\n\t\t\t<mat-label>{{ 'Start Date' | translate }}</mat-label>\r\n\t\t\t<input matInput [matDatepicker]=\"wetDatePicker\"\r\n\t\t\t\tformControlName=\"WetDate\"\r\n\t\t\t\trequired\r\n\t\t\t\t[min]=\"wetDateRange.minDate\"\r\n\t\t\t\t[max]=\"wetDateRange.maxDate\">\r\n\t\t\t<mat-datepicker-toggle matSuffix [for]=\"wetDatePicker\"></mat-datepicker-toggle>\r\n\t\t\t<mat-datepicker #wetDatePicker></mat-datepicker>\r\n\t\t\t<mat-error *ngIf=\"f.WetDate.invalid && (f.WetDate.dirty || f.WetDate.touched)\">\r\n\t\t\t\t{{'Planting Event Date Error Text' | translate }}\r\n\t\t\t</mat-error>\r\n\t\t</mat-form-field>\r\n\r\n\t\t<mat-form-field appearance=\"fill\"\r\n\t\t\tclass='bk-mat-date-field'>\r\n\t\t\t<mat-label>{{ 'End Date' | translate }}</mat-label>\r\n\t\t\t<input matInput [matDatepicker]=\"harvestDatePicker\"\r\n\t\t\t\tformControlName=\"HarvestDate\"\r\n\t\t\t\trequired\r\n\t\t\t\t[min]=\"harvestDateRange.minDate\"\r\n\t\t\t\t[max]=\"harvestDateRange.maxDate\">\r\n\t\t\t<mat-datepicker-toggle matSuffix [for]=\"harvestDatePicker\"></mat-datepicker-toggle>\r\n\t\t\t<mat-datepicker #harvestDatePicker></mat-datepicker>\r\n\t\t\t<mat-error *ngIf=\"f.HarvestDate.invalid && (f.HarvestDate.dirty || f.HarvestDate.touched)\">\r\n\t\t\t\t{{'Planting Event Date Error Text' | translate }}\r\n\t\t\t</mat-error>\r\n\t\t</mat-form-field>\r\n\r\n\t\t<h4>Location</h4>\r\n\t\t<p>\r\n\t\t\tClick the location of your planting on the map. CropManage will use your location to get accurate weather and\r\n\t\t\tsoil data used for ET calculation.\r\n\t\t</p>\r\n\t\t<agm-map *ngIf=\"weatherStations && weatherStations.length > 0\"\r\n\t\t\t#map\r\n\t\t\t(mapClick)=\"clickMap($event)\"\r\n\t\t\t(mapReady)=\"mapReady($event)\"\r\n\t\t\t[zoom]=\"10\"\r\n\t\t\t[mapTypeId]=\"'hybrid'\"\r\n\t\t\t[fullscreenControl]=\"true\">\r\n\r\n\t\t\t<agm-marker *ngIf=\"f.Latitude && f.Longitude\"\r\n\t\t\t\t[iconUrl]=\"'../assets/images/icons/-v2.png'\"\r\n\t\t\t\t[latitude]=\"f.Latitude.value\"\r\n\t\t\t\t[longitude]=\"f.Longitude.value\">\r\n\t\t\t</agm-marker>\r\n\r\n\t\t\t<map-control #mapControl></map-control>\r\n\t\t</agm-map>\r\n\r\n\t\t<p *ngIf=\"weatherStations && f.WeatherStationId.value\">\r\n\r\n\t\t\t<strong>Nearest Weather Station: </strong>{{ weatherStations[0].Name }}\r\n\t\t\t<br>\r\n\t\t\t<strong>Distance: </strong> {{ weatherStations[0].Distance * 0.621371 | number:'1.2-2' }} miles\r\n\t\t\t<br>\r\n\t\t</p>\r\n\r\n\t\t<br>\r\n\t\t<button mat-button\r\n\t\t\t[disabled]=\"!form.valid\"\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n\t\t\t(click)=\"calculate()\">\r\n\r\n\t\t\t{{ (isSaving ? 'Calculating' : 'Calculate') | translate }}\r\n\t\t\t<img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n\t\t</button>\r\n\t\t<br>\r\n\t\t<br>\r\n\t</form>\r\n</div>","import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { CommodityService } from '../../../models/commodity-type/service';\r\nimport { ICommodityType } from '../../../models/commodity-type/interfaces';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { FormValidation } from '../../../classes/formValidation';\r\nimport { Coordinates } from '../../../classes/Coordinates';\r\nimport { CropTypeService } from '../../../models/crop-type/service';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ICropTypeListItem } from '../../../models/crop-type/interfaces';\r\nimport { DateUtility } from '../../../classes/dateUtility';\r\nimport { AgmMap } from '@agm/core';\r\nimport { MapControlDirective } from '../../../directives/map-control.directive';\r\nimport { IAgmMapClick } from '../../shared/interfaces';\r\nimport { GeoLocation } from '../../../classes/geolocation.class';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { NotificationService } from '../../../services/notification.service';\r\nimport { eNotificationTypes } from '../../../interfaces/constants';\r\nimport { WeatherStationsService } from '../../../models/weather-station-stats/service';\r\nimport { IMapIcon, IMapIconSize } from '../../ranch-settings/modals/weather-station/interfaces';\r\nimport { IWeatherStationViewModel } from '../../weather-stations/interfaces';\r\nimport { CropType } from '../../../models/crop-type/cropType';\r\nimport { ISelectOptions } from '../../../interfaces/abstract';\r\nimport { PlantingAdvancedEdit } from '../../planting-settings/plantingAdvancedEdit';\r\nimport { TranslateService } from '../../localization/service';\r\nimport { Router } from '@angular/router';\r\nimport { PersistentDatabase } from '../../../services/persistent-database';\r\nimport { ETCalculatorResultsInputParams } from './et-calculator-results.component';\r\n\r\nexport type ETCalculatorFields = 'AgeOfCrop' | 'CommodityTypeId' | 'CropTypeId' | 'WetDate'\r\n\t| 'HarvestDate' | 'Latitude' | 'Longitude' | 'WeatherStationId';\r\n\r\n@Component({\r\n\tselector: 'et-calculator',\r\n\ttemplateUrl: 'et-calculator.component.html',\r\n\tstyleUrls: [ 'et-calculator.component.scss']\r\n})\r\n\r\nexport class ETCalculatorComponent implements OnInit, OnDestroy {\r\n\r\n\t@ViewChild(AgmMap, { static: false }) public map: AgmMap;\r\n\t@ViewChild(MapControlDirective, { static: false }) private mapControl: MapControlDirective;\r\n\r\n\tpublic commodityTypes: ICommodityType[];\r\n\tpublic cropTypes: ICropTypeListItem[];\r\n\tpublic weatherStations: IWeatherStationViewModel[];\r\n\tpublic coordinatesUser: Coordinates; // used to store user coodinates\r\n\tpublic mapZoom: number;\r\n\tpublic ageOfCropOptions: ISelectOptions[];\r\n\tprivate DEFAULT_COORDINATE = '37.020714, -119.445638';\r\n\r\n\tpublic icons: {\r\n\t\tselected: IMapIcon,\r\n\t\tunselected: IMapIcon\r\n\t}\r\n\r\n\tpublic wetDateRange: {\r\n\t\tminDate: Date,\r\n\t\tmaxDate: Date\r\n\t}\r\n\r\n\tpublic harvestDateRange: {\r\n\t\tminDate: Date,\r\n\t\tmaxDate: Date\r\n\t}\r\n\r\n\tpublic form: FormGroup;\r\n\r\n\tpublic get f(): { [key in ETCalculatorFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in ETCalculatorFields]: AbstractControl };\r\n\t}\r\n\r\n\tprivate isTree: boolean;\r\n\tprivate MAX_DATE_RANGE = 365;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _commodictyService: CommodityService,\r\n\t\tprivate _cropTypeService: CropTypeService,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _persistentDatabase: PersistentDatabase,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _translateService: TranslateService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _weatherStationsService: WeatherStationsService,\r\n\t) {\r\n\t\tlet iconDimensions: IMapIconSize;\r\n\r\n\t\ticonDimensions = {\r\n\t\t\theight: 50,\r\n\t\t\twidth: 80\r\n\t\t};\r\n\r\n\t\tthis.wetDateRange = {\r\n\t\t\tminDate: null,\r\n\t\t\tmaxDate: DateUtility.subtractDays(new Date(), 1)\r\n\t\t};\r\n\r\n\t\tthis.harvestDateRange = {\r\n\t\t\tminDate: null,\r\n\t\t\tmaxDate: null\r\n\t\t};\r\n\r\n\t\tthis.icons = {\r\n\t\t\tselected: {\r\n\t\t\t\turl: '../assets/images/icons/map_marker-weather_station-selected.png',\r\n\t\t\t\tscaledSize: iconDimensions\r\n\t\t\t},\r\n\t\t\tunselected: {\r\n\t\t\t\turl: '../assets/images/icons/map_marker-weather_station.png',\r\n\t\t\t\tscaledSize: iconDimensions\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.weatherStations = [];\r\n\t\tthis.isTree = false;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._initializeForm();\r\n\r\n\t\tthis._getWeatherstations().then(() => {\r\n\t\t\tthis._getUserLocation().then(() => {\r\n\t\t\t\tthis._loadPersistentData();\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis._commodictyService.list().then((response) => {\r\n\t\t\tthis.commodityTypes = response;\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic calculate() {\r\n\t\tthis._persistentDatabase.etCalculatorParams = {\r\n\t\t\tdata: this.form.value,\r\n\t\t\tCropTypeName: this.getCropTypeName(),\r\n\t\t\tWeatherStationName: this.weatherStations[0].Name,\r\n\t\t\tCommodityTypeId: this.f.CommodityTypeId.value\r\n\t\t};\r\n\r\n\t\tthis._router.navigate(['et-calculator-results']);\r\n\t}\r\n\r\n\tpublic mapReady() {\r\n\t\tthis._centerMap(this.coordinatesUser);\r\n\t}\r\n\r\n\tpublic clickMap(event: IAgmMapClick) {\r\n\t\tif (!this.weatherStations || this.weatherStations.length === 0) {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\tmessage: `Please wait until weather stations data have loaded.`\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.f.Latitude.setValue(event.coords.lat);\r\n\t\tthis.f.Longitude.setValue(event.coords.lng);\r\n\r\n\t\tthis._sortStationsByDistance();\r\n\t\tthis.f.WeatherStationId.setValue(this.weatherStations[0].Id);\r\n\t}\r\n\r\n\tpublic getCropTypeName(): string {\r\n\t\tif (!this.cropTypes || this.cropTypes.length === 0 || !this.f.CropTypeId.value) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\treturn this.cropTypes.find(x => x.Id === this.f.CropTypeId.value).Name;\r\n\t}\r\n\r\n\tprivate _loadPersistentData() {\r\n\t\tlet params: ETCalculatorResultsInputParams;\r\n\r\n\t\tif (!this._persistentDatabase.etCalculatorParams) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tparams = this._persistentDatabase.etCalculatorParams;\r\n\r\n\t\tthis.f.AgeOfCrop.setValue(params.data.AgeOfCrop);\r\n\t\tthis.f.CommodityTypeId.setValue(params.CommodityTypeId);\r\n\t\tthis.f.CropTypeId.setValue(params.data.CropTypeId);\r\n\t\tthis.f.HarvestDate.setValue(params.data.HarvestDate);\r\n\t\tthis.f.WetDate.setValue(params.data.WetDate);\r\n\t\tthis.f.WeatherStationId.setValue(params.data.WeatherStationId);\r\n\t\tthis.f.Latitude.setValue(params.data.Latitude);\r\n\t\tthis.f.Longitude.setValue(params.data.Longitude);\r\n\r\n\t\tthis._sortStationsByDistance();\r\n\t\tthis.f.WeatherStationId.setValue(this.weatherStations[0].Id);\r\n\r\n\t\tlet coords: Coordinates;\r\n\r\n\t\tcoords = new Coordinates(this.f.Latitude.value + ',' + this.f.Longitude.value);\r\n\t\tthis._centerMap(coords);\r\n\t}\r\n\r\n\tprivate _sortStationsByDistance() {\r\n\t\tthis.weatherStations.forEach(e => {\r\n\t\t\te.Distance = this._calculateDistance(e.Lat, e.Lng, this.f.Latitude.value, this.f.Longitude.value);\r\n\t\t});\r\n\r\n\t\tthis.weatherStations.sort(function (a, b) {\r\n\t\t\treturn a.Distance - b.Distance;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getRad(x: number): number {\r\n\t\treturn x * Math.PI / 180;\r\n\t}\r\n\r\n\tprivate _calculateDistance(lat1: number, lon1: number, lat2: number, lon2: number) {\r\n\t\tlet result: number;\r\n\r\n\t\tconst EARTH_RADIUS = 6371; // km\r\n\t\tconst dLat = this._getRad(lat2 - lat1);\r\n\t\tconst dLon = this._getRad(lon2 - lon1);\r\n\t\tconst a = Math.sin(dLat / 2) * Math.sin(dLat / 2)\r\n\t\t\t+ Math.cos(this._getRad(lat1)) * Math.cos(this._getRad(lat2))\r\n\t\t\t* Math.sin(dLon / 2) * Math.sin(dLon / 2);\r\n\r\n\t\tconst c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n\t\tresult = EARTH_RADIUS * c;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _getWeatherstations(): Promise<void> {\r\n\t\treturn this._weatherStationsService.listAll(true).then((stations) => {\r\n\t\t\tthis.weatherStations = stations;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getUserLocation(): Promise<void> {\r\n\t\treturn GeoLocation.getCoordinates().then(position => {\r\n\t\t\tif (!position.coords.latitude || !position.coords.longitude) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._updateService.setCurrentLocation(Number(position.coords.latitude),\r\n\t\t\t\tNumber(position.coords.longitude));\r\n\r\n\t\t\tthis.coordinatesUser = new Coordinates(this._updateService.currentLocation.lat\r\n\t\t\t\t+ ',' + this._updateService.currentLocation.lng);\r\n\r\n\t\t\tthis.mapZoom = 10;\r\n\t\t\tthis._centerMap(this.coordinatesUser);\r\n\t\t}).catch((reason: any) => {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.MESSAGE,\r\n\t\t\t\tmessage: `Granting permission to share location with\r\n\t\t\t\t\tCropManage will center the map at your location`\r\n\t\t\t});\r\n\r\n\t\t\tthis.coordinatesUser = new Coordinates(this.DEFAULT_COORDINATE);\r\n\t\t\tthis.mapZoom = 10;\r\n\t\t\tthis._centerMap(this.coordinatesUser);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _initializeForm() {\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tAgeOfCrop: [ null, [Validators.required]],\r\n\t\t\tCommodityTypeId: [null, [Validators.required, FormValidation.greaterThanValidator(0)]],\r\n\t\t\tCropTypeId: [null, [Validators.required, FormValidation.isDate, FormValidation.greaterThanValidator(0)]],\r\n\t\t\tWetDate: [null, [Validators.required]],\r\n\t\t\tHarvestDate: [null],\r\n\t\t\tLatitude: [null, [Validators.required]],\r\n\t\t\tLongitude: [null, [Validators.required]],\r\n\t\t\tWeatherStationId: [null, [Validators.required]]\r\n\t\t});\r\n\r\n\t\tthis.f.HarvestDate.setValidators([Validators.required,\r\n\t\t\tFormValidation.isDate,\r\n\t\t\tFormValidation.mustBeAfterDate(this.f.WetDate),\r\n\t\t\tFormValidation.mustBeWithinDateRange(this.f.WetDate, this.MAX_DATE_RANGE)]);\r\n\r\n\t\tthis.f.CommodityTypeId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tlet item: ICommodityType;\r\n\r\n\t\t\titem = this.commodityTypes.find(x => x.Id === this.f.CommodityTypeId.value);\r\n\t\t\tthis.isTree = CropType.isTreeByInterface(item.CommodityTypeCalculator);\r\n\r\n\t\t\tif (this.isTree) {\r\n\t\t\t\tthis.f.AgeOfCrop.enable();\r\n\t\t\t} else {\r\n\t\t\t\tthis.f.AgeOfCrop.disable();\r\n\t\t\t}\r\n\r\n\t\t\tthis._cropTypeService.getCropTypesAdmin(false, this.f.CommodityTypeId.value).then((response) => {\r\n\t\t\t\tthis.cropTypes = response;\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.f.CropTypeId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (!this.cropTypes) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.isTree) {\r\n\t\t\t\tlet item: ICropTypeListItem;\r\n\r\n\t\t\t\titem = this.cropTypes.find(x => x.Id === this.f.CropTypeId.value);\r\n\r\n\t\t\t\tthis.ageOfCropOptions = PlantingAdvancedEdit.generateAgeOfCropDropdown(item.MaxAge,\r\n\t\t\t\t\tthis._translateService);\r\n\t\t\t} else {\r\n\t\t\t\tthis.ageOfCropOptions = [];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.f.WetDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.harvestDateRange.minDate = DateUtility.addDays(this.f.WetDate.value, 1); // end date should not cross over start date\r\n\t\t\tthis.harvestDateRange.maxDate = this._getHarvestDateMax(this.f.WetDate.value); // end date should not be out of range\r\n\t\t});\r\n\r\n\t\tthis.f.HarvestDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.wetDateRange.minDate = DateUtility.addDays(this.f.HarvestDate.value, -this.MAX_DATE_RANGE);\r\n\t\t\tthis.wetDateRange.maxDate = DateUtility.addDays(this.f.HarvestDate.value, -1);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getHarvestDateMax(wetDate: Date): Date {\r\n\t\tlet maxDateInRange: Date;\r\n\t\tlet yesterday: Date;\r\n\r\n\t\tyesterday = DateUtility.subtractDays(new Date(), 1);\r\n\t\tmaxDateInRange = DateUtility.addDays(this.f.WetDate.value, this.MAX_DATE_RANGE);\r\n\r\n\t\tif (maxDateInRange < yesterday) {\r\n\t\t\treturn maxDateInRange;\r\n\t\t} else {\r\n\t\t\treturn yesterday;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _centerMap(coordinates: Coordinates): void {\r\n\t\tconst ZOOM_LEVEL = 15;\r\n\r\n\t\tif (!this.mapControl || !this.map || !coordinates) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.map.triggerResize().then(() => {\r\n\t\t\tthis.mapControl.centerMap(coordinates.lat, coordinates.lng);\r\n\t\t\tthis.mapControl.setZoom(ZOOM_LEVEL);\r\n\t\t});\r\n\t}\r\n}\r\n","<div class=\"bk-login__container\">\r\n\t<div class=\"bk-login\">\r\n\t\t<div class=\"bk-login__welcome-box\">\r\n\t\t\t<h4>Forget Password Confirmation</h4>\r\n\t\t\t<p>Please check your email to reset your password.</p>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { LoginService } from '../../../services/login.service';\r\n\r\n@Component({\r\n\tselector: 'app-forget-password-confirmation',\r\n\ttemplateUrl: 'forget-password-confirmation.page.html'\r\n})\r\nexport class ForgetPasswordConfirmationPage implements OnInit {\r\n\r\n\tconstructor(\r\n\t\tprivate _router: Router) { }\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n}\r\n","<div class=\"bk-login__container\">\r\n\t<form class=\"form-horizontal\" method=\"post\">\r\n\t\t<div class=\"bk-modal bk-modal--register\">\r\n\t\t\t<div class=\"bk-modal__header\">\r\n\t\t\t\t<h4 class=\"bk-modal__header-title\">\r\n\t\t\t\t\tReset Password\r\n\t\t\t\t</h4>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-modal__body\">\r\n\t\t\t\t<div class=\"bk-login__new-form\">\r\n\t\t\t\t\t<div *ngIf=\"errorMessage !== ''\"\r\n\t\t\t\t\t\tclass=\"validation-summary-valid bk-login__register--errors\">\r\n\t\t\t\t\t\t<ul>\r\n\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t{{ errorMessage }}\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"bk-login__form-group\">\r\n\t\t\t\t\t\t<label for=\"Email\">Email</label>\r\n\t\t\t\t\t\t<input [(ngModel)]=\"email\"\r\n\t\t\t\t\t\t\tid=\"email\"\r\n\t\t\t\t\t\t\tname=\"email\"\r\n\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\tvalue=\"\">\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<app-recaptcha (recaptchaResponse)='onCaptchaResponse($event)'></app-recaptcha>\r\n\t\t\t\t\t<div class=\"bk-login__form-group\">\r\n\t\t\t\t\t\t<input type=\"submit\"\r\n\t\t\t\t\t\t\t[disabled]='isCaptchaValid === false || !email'\r\n\t\t\t\t\t\t\tclass=\"bk-register__button bk-button--large btn btn-custom\"\r\n\t\t\t\t\t\t\tvalue=\"Reset Password\"\r\n\t\t\t\t\t\t\t(click)=\"submit()\">\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</form>\r\n</div>","import { Component, OnInit, ChangeDetectorRef } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { LoginService } from '../../../services/login.service';\r\nimport { httpStatusCodes, CMError } from '../../../interfaces/interfaces';\r\nimport { IRecaptchaResponse } from '../../../services/interface';\r\n\r\n@Component({\r\n\tselector: 'app-forget-password',\r\n\ttemplateUrl: 'forget-password.page.html'\r\n})\r\nexport class ForgetPasswordPage implements OnInit {\r\n\r\n\tpublic email: string;\r\n\tpublic errorMessage = '';\r\n\tpublic recaptchaKey: string;\r\n\tpublic isCaptchaValid: boolean;\r\n\r\n\tconstructor(\r\n\t\tprivate _loginService: LoginService,\r\n\t\tprivate _changeDetectionRef: ChangeDetectorRef,\r\n\t\tprivate _router: Router) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.isCaptchaValid = false;\r\n\t}\r\n\r\n\tpublic submit() {\r\n\t\tthis._loginService.forgetPassword(this.email).then((response) => {\r\n\t\t\tif (!response) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (response.code === httpStatusCodes.success) {\r\n\t\t\t\tthis._router.navigate(['forgetPasswordConfirmation']);\r\n\t\t\t} else {\r\n\t\t\t\tthis.errorMessage = response.message;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic onCaptchaResponse(response: IRecaptchaResponse): void {\r\n\t\tif (!response) {\r\n\t\t\tthis.isCaptchaValid = false;\r\n\t\t\treturn;\r\n\t\t} else if (response.success) {\r\n\t\t\tthis.isCaptchaValid = true;\r\n\t\t} else {\r\n\t\t\tthis.isCaptchaValid = false;\r\n\t\t}\r\n\r\n\t\tthis._changeDetectionRef.detectChanges();\r\n\t\t// this method is somehow not automatically triggering change detection\r\n\r\n\t}\r\n}\r\n","<div class=\"bk-splash__wrapper\">\r\n\t<div class=\"bk-splash-hero\">\r\n\t\t<div class=\"bk-splash-section__content\">\r\n\t\t\t<h2>Smarter Decisions. Better Yields.</h2>\r\n\t\t\t<div class=\"bk-splash-intro bk-splash-text\">Based on years of in-depth research and field studies conducted by the\r\n\t\t\t\tUniversity of California, CropManage provides real-time recommendations for the most efficient,\r\n\t\t\t\teffective, and sustainable irrigation and fertilization applications possible.</div>\r\n\t\t\t\t<a routerLink=\"/register\" class=\"bk-splash-cta\">Sign Up</a>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"bk-splash-section bk-clearfix\">\r\n\t\t<div class=\"bk-splash-section__content bk-splash-section__content--benefits bk-clearfix\">\r\n\t\t\t<div class=\"bk-splash-section__left bk-border-box\">\r\n\t\t\t\t<h2 class=\"bk-benefits__header\">Benefits to Growers</h2>\r\n\t\t\t\t<div class=\"bk-splash-section__text bk-splash-text\">Based on a few simple inputs, CropManage can provide any level\r\n\t\t\t\t\tof irrigation and fertilization decision support in order to validate or improve your existing\r\n\t\t\t\t\toperation&apos; production&mdash;and increase your overall confidence.</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-splash-section__right bk-splash-section__benefits\">\r\n\t\t\t\t<div class=\"bk-splash-section__benefit bk-border-box\">\r\n\t\t\t\t\t<img alt=\"Water Reduction\" src=\"../assets/images/icons/icon-water-reduction.png\">\r\n\t\t\t\t\t<h3>20% to 40% Reduction in Water and Fertilizer With Same Yields</h3>\r\n\t\t\t\t\t<div class=\"bk-splash-text\">CropManage is ground-truthed in more than 30 field\r\n\t\t\t\t\t\ttrials and has produced consistent, or in many cases, improved crop yields.</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"bk-splash-section__benefit bk-border-box\">\r\n\t\t\t\t\t<img alt=\"Irrigation\" src=\"../assets/images/icons/icon-irrigation.png\" />\r\n\t\t\t\t\t<h3>Supports Irrigation AND Fertilization Recommendations</h3>\r\n\t\t\t\t\t<div class=\"bk-splash-text\">CropManage combines irrigation and fertilization\r\n\t\t\t\t\t\trecommendations that, when used together, significantly improve yields while reducing costs.\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"bk-splash-section__benefit bk-border-box\">\r\n\t\t\t\t\t<img alt=\"Research\" src=\"../assets/images/icons/icon-research.png\" />\r\n\t\t\t\t\t<h3>Steeped in Deep Research</h3>\r\n\t\t\t\t\t<div class=\"bk-splash-text\">CropManage is the result of years of ongoing,\r\n\t\t\t\t\t\tin-depth University of California agricultural research and crop modeling algorithms. </div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"bk-splash-section__benefit bk-border-box\">\r\n\t\t\t\t\t<img alt=\"No Extra Equipment\" src=\"../assets/images/icons/icon-no-extra-equipment.png\" />\r\n\t\t\t\t\t<h3>No Extra Equipment Required</h3>\r\n\t\t\t\t\t<div class=\"bk-splash-text\">CropManage allows growers to leverage their\r\n\t\t\t\t\t\texisting infrastructure and does not require operational changes or purchase/implementation\r\n\t\t\t\t\t\tof new equipment.</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"bk-splash-section bk-splash-section--dark bk-clearfix\">\r\n\t\t<div class=\"bk-splash-section__content bk-splash-section__content--how bk-clearfix\">\r\n\t\t\t<div class=\"bk-splash-section__left bk-splash-section__left--how bk-border-box\">\r\n\t\t\t\t<h2>How It Works</h2>\r\n\t\t\t\t<div class=\"bk-splash-section__text bk-splash-text\">\r\n\t\t\t\t\tCropManage combines a wide variety of data inputs including past and future weather,\r\n\t\t\t\t\tevapotranspiration, satellite imagery, soil physical and chemical properties (texture, bulk\r\n\t\t\t\t\tdensity, nutrients), irrigation system efficiency, and other related variables to generate\r\n\t\t\t\t\taccurate and timely irrigation and fertilization recommendations based on crop-specific models.\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"bk-splash-section__text bk-splash-text\">\r\n\t\t\t\t\tCropManage can be used as a stand-alone, online decision support and operational task management\r\n\t\t\t\t\ttool, or can be integrated into other software applications via API connectivity. Furthermore,\r\n\t\t\t\t\tusers can customize CropManage for the site-specific conditions of their farm or ranch, and the\r\n\t\t\t\t\tapplication can be integrated with infield soil moisture and flowmeter sensors.\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-splash-section__right bk-splash-section__right--how\">\r\n\t\t\t\t<img class=\"bk-how-it-works__image\" src=\"../assets/images/illustrations/how-it-works.png\" />\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"bk-splash-section bk-clearfix\">\r\n\t\t<div class=\"bk-splash-section__content bk-splash-section__content--testimonials bk-clearfix\">\r\n\t\t\t<img class=\"bk-splash-testimonial-photo\" src=\"../assets/images/photos/gabriel-youtsey.png\" />\r\n\t\t\t<div class=\"bk-splash-testimonial-text\">\r\n\t\t\t\t<span class=\"bk-splash-testimonial-text__quote\"></span>I believe CropManage could change how we grow\r\n\t\t\t\tfood in California and the world. It&apos;s a science-backed way to precisely manage and reduce\r\n\t\t\t\twater and fertilizer. It&apos;s a win for farmers, communities, and consumers. This is the\r\n\t\t\t\tUniversity of California turning science into solutions at its finest.<span\r\n\t\t\t\t\tclass=\"bk-splash-testimonial-text__quote--end\"></span>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-splash-testimonial-meta-text\">\r\n\t\t\t\t<div class=\"bk-splash-testimonial-name\">\r\n\t\t\t\t\tGabriel Youtsey\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"bk-splash-text\">\r\n\t\t\t\t\tChief Innovation Officer<br />\r\n\t\t\t\t\tUniversity of California, Agriculture and Natural Resources\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { TokenService } from '../../../services/token.service';\r\nimport { Meta } from '@angular/platform-browser';\r\n\r\n@Component({\r\n\tselector: 'app-home',\r\n\ttemplateUrl: 'home.component.html',\r\n\tstyleUrls: ['./home.component.scss']\r\n})\r\nexport class HomeComponent implements OnInit {\r\n\r\n\tconstructor(\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _meta: Meta\r\n\t) {\r\n\t\t// On home page, redirect to the app dashboard if already logged in\r\n\t\tif (this._tokenService.isAuthenticated()) {\r\n\t\t\tthis._router.navigate(['MyDashboard']);\r\n\t\t}\r\n\r\n\t\tthis._meta.updateTag({ name: 'description',\r\n\t\t\tcontent: 'CropManage is a crop management web application developed ' +\r\n\t\t\t'by UCANR which help farmers manage irrigation and fertilization scheduling.'})\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n}\r\n","<div class=\"bk-login__container\">\r\n\t<div class=\"bk-login\">\r\n\t\t<form lass=\"form-horizontal\">\r\n\t\t\t<div class=\"bk-login__logo\">\r\n\t\t\t\t<img src=\"/assets/images/logos/cropmanage-logo-white.png\">\r\n\t\t\t</div>\r\n\t\t\t<h2>Sign In</h2>\r\n\t\t\t<p class=\"bk-login__new-account-link\">\r\n\t\t\t\tDon't have an account? <a routerLink=\"/register\">Create a New Account</a>\r\n\t\t\t</p>\r\n\t\t\t<div class=\"bk-login__form-group\">\r\n\r\n\t\t\t\t<label for=\"Email\">Email</label>\r\n\t\t\t\t<input [(ngModel)]=\"loginCredentials.username\"\r\n\t\t\t\t\tname=\"username\"\r\n\t\t\t\t\tautocomplete=\"current-username\"\r\n\t\t\t\t\ttype=\"text\"/>\r\n\t\t\t\t<div class=\"bk-login__error-text\">\r\n\t\t\t\t\t<!-- display error here -->\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-login__form-group\">\r\n\t\t\t\t<label for=\"Password\">Password</label>\r\n\t\t\t\t<input [(ngModel)]=\"loginCredentials.password\"\r\n\t\t\t\t\tname=\"password\"\r\n\t\t\t\t\tautocomplete=\"current-password\"\r\n\t\t\t\t\t[type]=\"passwordIsHidden ? 'password' : 'text'\"/>\r\n\t\t\t\t<button mat-icon-button matSuffix\r\n\t\t\t\t\tclass=\"bk-login__show-password\"\r\n\t\t\t\t\t(click)=\"passwordIsHidden = !passwordIsHidden\">\r\n\t\t\t\t\t<mat-icon>\r\n\t\t\t\t\t\t{{passwordIsHidden ? 'visibility_off' : 'visibility'}}\r\n\t\t\t\t\t</mat-icon>\r\n\t\t\t\t</button>\r\n\t\t\t\t<div *ngIf='loginFailed' \r\n\t\t\t\t\tclass=\"bk-login__error-text\">\r\n\t\t\t\t\t<span class=\"field-validation-error bk-text--error\">\r\n\t\t\t\t\t\tThe email address or password is incorrect.\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-login__form-group\">\r\n\t\t\t\t<div class=\"bk-login__checkbox\">\r\n\t\t\t\t\t<input id=\"RememberMe\" name=\"RememberMe\" type=\"checkbox\" value=\"true\"/>\r\n\t\t\t\t\t<input name=\"RememberMe\" type=\"hidden\" value=\"false\">\r\n\t\t\t\t\t<label for=\"RememberMe\">Remember me?</label>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"bk-login__forgot\">\r\n\t\t\t\t\t<a routerLink=\"/forgetPassword\">Forgot password?</a>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<button type=\"submit\"\r\n\t\t\t\tclass=\"bk-button bk-login__button bk-button--large btn btn-custom\"\r\n\t\t\t\t(click)=\"login()\">\r\n\t\t\t\t{{ (isProcessing ? 'Signing In...' : 'Sign In') | translate }}\r\n\t\t\t\t<img class='bk-button__loader' *ngIf='isProcessing' src='/assets/images/loader-20px.gif'/>\r\n\t\t\t</button>\r\n\t\t\t<!--\r\n\t\t\t<div class=\"bk-identity-signin-divider\">\r\n\t\t\t\t<hr>\r\n\t\t\t\t<span>Or</span>\r\n\t\t\t\t<hr>\r\n\t\t\t</div>\r\n\t\t\t<div id=\"googleSignInBtn\"></div>\r\n\t\t\t-->\r\n\t\t</form>\r\n\t</div>\r\n</div>\r\n\t\t\r\n\t\t\r\n","import { Component, OnInit, OnDestroy, AfterViewInit, NgZone } from '@angular/core';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { LoginService } from '../../../services/login.service';\r\nimport { TokenService } from '../../../services/token.service';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { loginTypes } from '../../../services/constants';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { MainMenuUpdateService } from '../../main-menu/main-menu-update.service';\r\nimport { LoginCredentials } from '../../../services/interface';\r\nimport { environment } from '../../../../environments/environment';\r\n\r\n/**\r\n * google identity object is globally accessible\r\n */\r\ndeclare var google: GoogleIdentity;\r\n\r\nexport interface GoogleIdentity {\r\n\taccounts: {\r\n\t\tid: {\r\n\t\t\tinitialize: (p: IdConfiguration) => void,\r\n\t\t\tprompt: () => void,\r\n\t\t\trenderButton: (targetHTML: HTMLElement, buttonConfig: GsiButtonConfiguration) => void,\r\n\t\t\tdisableAutoSelect: () => void\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Google Identity button render options\r\n */\r\nexport interface GsiButtonConfiguration {\r\n\ttype: string, // \"standard\" | \"icon\"\r\n\ttheme: string, // \"outline\" | \"filled_blue\" | \"filled_black\"\r\n\tsize: string, // \"large\" | \"medium\" | \"small\"\r\n\ttext: string, // \"signin_with\" | \"signup_with\" | \"continue_with\" | \"signin\"\r\n\tshape?: string, // \"rectangular\" | \"pill\" | \"circle\" | \"square\"\r\n\tlogo_alignment?: string, // \"left\" | \"center\"\r\n\twidth: string,\r\n\tlocale?: string, // e.g. \"zh_CN\"\r\n}\r\n\r\n/**\r\n * https://developers.google.com/identity/gsi/web/reference/js-reference\r\n * Google Identity Id configuration\r\n */\r\nexport interface IdConfiguration {\r\n\tclient_id: string,\r\n\tauto_select?: boolean, // enables automatic selection\r\n\tcallback: (googleUser: CredentialResponse) => any,\r\n\tlogin_url?: string,\r\n\tnative_callback?: () => any,\r\n\tcancel_on_tap_outside?: boolean,\r\n\tprompt_parent_id?: string,\r\n\tnonce?: string,\r\n\tcontext?: string, // the title and words in the One Tap prompt\r\n\tstate_cookie_domain?: string,\r\n\tux_mode?: string // \"popup\" or \"redirect\"\r\n\tallowed_parent_origin?: string | string[],\r\n\tintermediate_iframe_close_callback?: () => any,\r\n\titp_support?: boolean,\r\n}\r\n\r\nexport interface CredentialResponse {\r\n\tclientId: string,\r\n\tcredential: string,\r\n\tselect_by: string,\r\n}\r\n\r\n@Component({\r\n\tselector: 'app-login',\r\n\ttemplateUrl: 'login.component.html',\r\n\tstyleUrls: [ 'login.component.scss']\r\n})\r\nexport class LoginComponent implements OnInit, OnDestroy, AfterViewInit {\r\n\r\n\tpublic isProcessing = false;\r\n\tpublic isWorkshop = false;\r\n\tpublic passwordIsHidden = true;\r\n\r\n\tpublic loginCredentials: LoginCredentials;\r\n\r\n\tpublic loginFailed = false;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tprivate _isGoogleLoaded = false;\r\n\r\n\tconstructor(\r\n\t\tprivate _router: Router,\r\n\t\tprivate _route: ActivatedRoute,\r\n\t\tprivate _loginService: LoginService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate ngZone: NgZone,\r\n\t\tprivate _mainMenuUpdateService: MainMenuUpdateService,\r\n\t\tprivate _tokenService: TokenService) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis._route.data.pipe(takeUntil(this._subscriptions$)).subscribe(params => {\r\n\t\t\tif (params && params['type'] === loginTypes.WORKSHOP) {\r\n\t\t\t\tthis.isWorkshop = true;\r\n\t\t\t} else {\r\n\t\t\t\tthis.isWorkshop = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.loginCredentials = {\r\n\t\t\tusername: '',\r\n\t\t\tpassword: ''\r\n\t\t}\r\n\t}\r\n\r\n\tngAfterViewInit(): void {\r\n\t\twindow.onload = () => {\r\n\t\t\t// this._initializeGoogleIdentity();\r\n\t\t};\r\n\r\n\t\t// this._initializeGoogleIdentity();\r\n\t}\r\n\r\n\tprivate _initializeGoogleIdentity(): void {\r\n\t\tif (this._isGoogleLoaded) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!google) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._isGoogleLoaded = true;\r\n\r\n\t\tgoogle.accounts.id.initialize({\r\n\t\t\tclient_id: environment.GoogleClientId,\r\n\t\t\tcallback: (response) => this.ngZone.run(() => {\r\n\t\t\t\tthis.loginCredentials.GoogleJWT = response.credential;\r\n\t\t\t\tthis.login();\r\n\t\t\t})\r\n\t\t});\r\n\r\n\t\tgoogle.accounts.id.prompt(); // show one-click prompt\r\n\r\n\t\tgoogle.accounts.id.renderButton(\r\n\t\t\tdocument.getElementById('googleSignInBtn'),\r\n\t\t\t{ type: 'standard', text: 'signin_with', theme: 'outline',\r\n\t\t\tsize: 'medium', width: '320'}\r\n\t\t);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic login(): void {\r\n\t\tthis.isProcessing = true;\r\n\r\n\t\tthis._loginService.login(this.loginCredentials)\r\n\t\t\t.then(response => {\r\n\r\n\t\t\t\tif (!response || !response.token || !response.expires) {\r\n\t\t\t\t\tthis.loginFailed = true;\r\n\t\t\t\t\tthis.isProcessing = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.loginFailed = false;\r\n\t\t\t\tthis._tokenService.setToken(response);\r\n\t\t\t\tthis._updateService.updateAuthToken();\r\n\t\t\t\tthis._mainMenuUpdateService.fireAuthStatusChanged();\r\n\r\n\t\t\t\tif (this.isWorkshop) {\r\n\t\t\t\t\tthis._loginService.addToUCCE().then(() => {\r\n\t\t\t\t\t\tthis.isProcessing = false;\r\n\t\t\t\t\t\tthis.goToRanches();\r\n\t\t\t\t\t})\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.isProcessing = false;\r\n\t\t\t\t\tthis.goToRanches();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate goToRanches() {\r\n\t\tthis._router.navigate(['MyDashboard']);\r\n\t}\r\n}\r\n","<div class=\"bk-admin__page\">\r\n\t<h1>Page Not Found</h1>\r\n\t<p><a routerLink=\"/\">Click here</a> to go to the home page.</p>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'app-page-not-found',\r\n\ttemplateUrl: 'page-not-found.html',\r\n})\r\nexport class PageNotFoundComponent {\r\n}\r\n","<div class=\"bk-admin__page\">\r\n\t<h1>CropManage Privacy Policy</h1>\r\n\r\n\t<p>UC ANR has a long-standing practice of keeping grower information confidential to the fullest extent\r\n\t\tpossible under UC policy and California statute, thereby ensuring the growers' continued cooperation in our\r\n\t\tUC research projects. This is an important issue to researchers throughout the University of California.\r\n\t</p>\r\n\r\n\t<h2>What information do we collect?</h2>\r\n\r\n\t<p>We collect information from you when you register on our site, or enter information regarding your farming\r\n\t\toperation. Specifically this includes your soil tests, watering and fertilization schedules, as well as the\r\n\t\tcoordinates of your fields, and information that you enter about your ranches. When you create a user account,\r\n\t\twe store your name and email address to uniquely identify you in the system. We do not share your email address\r\n\t\twith third parties.\r\n\t</p>\r\n\r\n\t<h2>Google User Data</h2>\r\n\r\n\t<p>We use your full name and Google email address provded by Google to create your CropManage account if you choose\r\n\t\tto register using the Google Identity Service. The email address is used to uniquely identify you in the system,\r\n\t\tand your full name is used to populate your profile and personalize your experience. \r\n\t</p>\r\n\r\n\t<h2>What do we use your information for?</h2>\r\n\r\n\t<p>The information you provide will ONLY be used in the manner necessary to provide you information through this\r\n\t\tsystem and provide decision support on irrigation and fertilizer applications. Your field coordinates are\r\n\t\trequired in order to provide accurate weather information and determining the soil type from a national soil\r\n\t\tdatabase.</p>\r\n\t<p>To the fullest extent allowable under UC policy and California statute your information will not be sold,\r\n\t\texchanged, transferred, or given to any non-UC entity for any reason whatsoever, individually or in aggregate.\r\n\t</p>\r\n\r\n\t<h2>How do we protect your information?</h2>\r\n\r\n\t<p>We implement a variety of security measures to maintain the safety of your personal information when you enter,\r\n\t\tsubmit, or access your personal information.</p>\r\n\r\n\t<p>We use a secure server. All supplied sensitive information is transmitted via Secure Socket Layer (SSL)\r\n\t\ttechnology and then encrypted into our Database to be only accessed by you, or UC personnel authorized with\r\n\t\tspecial access rights to our systems for development purposes.</p>\r\n\r\n\t<p>After deleting your account, your information will be removed completely, and unavailable to any entity including\r\n\t\tUC ANR.</p>\r\n\r\n\t<h2>Do we use cookies?</h2>\r\n\r\n\t<p>We use cookies to help us remember and process the data for your login information. No cookies will contain\r\n\t\tinformation related to your farming practices.</p>\r\n\r\n\t<h2>Do we disclose any information to outside parties?</h2>\r\n\r\n\t<p>We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information.\r\n\t\tHowever, it is possible that we may have to release your information if required by law.</p>\r\n\r\n\t<h2>To remain completely anonymous:</h2>\r\n\t\r\n\t<p>Some users of this software may prefer to remain completely anonymous. In order to ensure your privacy, there are\r\n\t\ttwo steps to take:</p>\r\n\t<ul>\r\n\t\t<li>Use an anonymous email address when registering for this system.</li>\r\n\t\t<li>Do not enter the real name of your farm or fields. Use fictional names instead.</li>\r\n\t</ul>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'app-privacy-policy',\r\n\ttemplateUrl: 'privacy-policy.html',\r\n\tstyleUrls: [ 'privacy-policy.scss' ]\r\n})\r\nexport class PrivacyPolicyComponent implements OnInit {\r\n\r\n\tconstructor() { }\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n}\r\n","<div class=\"bk-captcha\" #recaptcha></div>","import { Component, OnInit, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';\r\nimport { LoginService } from '../../services/login.service';\r\nimport { RecaptchaKey } from '../../services/constants';\r\nimport { IRecaptchaResponse } from '../../services/interface';\r\n\r\ndeclare global {\r\n\tinterface Window {\r\n\t\tgrecaptcha: {\r\n\t\t\trender(nativeElement: any, options: {\r\n\t\t\t\tsitekey: string,\r\n\t\t\t\tcallback(token: string): void\r\n\t\t\t}): void\r\n\t\t},\r\n\t\tgrecaptchaCallback(): void\r\n\t}\r\n}\r\n\r\n@Component({\r\n\tselector: 'app-recaptcha',\r\n\ttemplateUrl: 'recaptcha.component.html'\r\n})\r\nexport class RecaptchaComponent implements OnInit {\r\n\t@ViewChild('recaptcha', { static: true }) recaptchaElement: ElementRef;\r\n\r\n\t@Output()\r\n\tpublic recaptchaResponse = new EventEmitter<IRecaptchaResponse>();\r\n\r\n\tpublic recaptchaKey: string;\r\n\tpublic isCaptchaValid = false;\r\n\r\n\tconstructor(\r\n\t\tprivate _loginService: LoginService) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.recaptchaKey = RecaptchaKey;\r\n\t\tthis.addRecaptchaScript();\r\n\t}\r\n\r\n\tprivate renderReCaptch() {\r\n\t\twindow.grecaptcha.render(this.recaptchaElement.nativeElement, {\r\n\t\t\t'sitekey': this.recaptchaKey,\r\n\t\t\t'callback': (token: string) => {\r\n\t\t\t\t// contact server to validate response\r\n\t\t\t\tthis._loginService.validateRecaptcha(token).then((response) => {\r\n\r\n\t\t\t\t\tlet successResponse: IRecaptchaResponse;\r\n\r\n\t\t\t\t\tif (!response) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tsuccessResponse = response as IRecaptchaResponse;\r\n\r\n\t\t\t\t\tthis.recaptchaResponse.emit(successResponse);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate addRecaptchaScript() {\r\n\t\twindow.grecaptchaCallback = () => {\r\n\t\t\tthis.renderReCaptch();\r\n\t\t}\r\n\r\n\t\t(function (d, s, id, obj) {\r\n\t\t\tlet js, fjs = d.getElementsByTagName(s)[0];\r\n\r\n\t\t\tif (d.getElementById(id)) {\r\n\t\t\t\tobj.renderReCaptch(); return;\r\n\t\t\t}\r\n\r\n\t\t\tjs = d.createElement(s) as HTMLScriptElement;\r\n\t\t\tjs.id = id;\r\n\r\n\t\t\tjs.src = 'https://www.google.com/recaptcha/api.js?onload=grecaptchaCallback&amp;render=explicit';\r\n\t\t\tfjs.parentNode.insertBefore(js, fjs);\r\n\t\t}(document, 'script', 'recaptcha-jssdk', this));\r\n\t}\r\n}\r\n","<div class=\"bk-login__container\">\r\n\t<div class=\"bk-login\">\r\n\t\t<div class=\"bk-login__welcome-box\">\r\n\t\t\t<h4>Confirm Email</h4>\r\n\t\t\t<p>Thank you for confirming your email. Please <a routerLink='/login'>Click here to log in</a></p>\r\n\t\t</div>\r\n\t</div>\r\n</div>","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { LoginService } from '../../../services/login.service';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { CMError } from '../../../interfaces/interfaces';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tselector: 'app-confirm-email',\r\n\ttemplateUrl: 'confirm-email.page.html'\r\n})\r\nexport class ConfirmEmailPage implements OnInit, OnDestroy {\r\n\r\n\tpublic userId: string;\r\n\tpublic code: string;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _loginService: LoginService,\r\n\t\tprivate _titleService: Title,\r\n\t\tprivate _route: ActivatedRoute) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._titleService.setTitle('CropManage | Please Confirm Email');\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis._route.queryParams.pipe(takeUntil(this._subscriptions$)).subscribe((params) => {\r\n\t\t\tif (!params) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.userId = params['userId'];\r\n\t\t\tthis.code = params['code'];\r\n\r\n\t\t\tthis._loginService.confirmEmail(this.userId, this.code).then((response) => {\r\n\t\t\t\t// if error, display error\r\n\t\t\t\tlet error: CMError;\r\n\r\n\t\t\t\terror = response as CMError;\r\n\r\n\t\t\t\tif (error && error.message) {\r\n\t\t\t\t\tconfirm(error.message);\r\n\t\t\t\t\t// display error to the user\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n}\r\n","<div class=\"bk-login__container\">\r\n\t<div class=\"bk-modal bk-modal--register\">\r\n\t\t<div class=\"bk-modal__header\">\r\n\t\t\t<h4 class=\"bk-modal__header-title\">Please Confirm Email</h4>\r\n\t\t</div>\r\n\t\t<div class=\"bk-modal__body\">\r\n\t\t\t<p>\r\n\t\t\t\tCheck your email and confirm your account, you must be confirmed before you can log in.\r\n\t\t\t</p>\r\n\t\t\t<ng-container *ngIf='email && isResendCompleted === false'>\r\n\t\t\t\t<p>To resend a confirmation email, <a class='bk-clickable'\r\n\t\t\t\t\t(click)='resendConfirmation()'>click here</a>\r\n\t\t\t\t</p>\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container *ngIf='email && isResendCompleted === true'>\r\n\t\t\t\t<p>The confirmation email was resent. Please check your email.</p>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t</div>\r\n</div>","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { LoginService } from '../../../services/login.service';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tselector: 'app-must-confirm-email',\r\n\ttemplateUrl: 'must-confirm-email.page.html'\r\n})\r\nexport class MustConfirmEmailPage implements OnInit, OnDestroy {\r\n\r\n\tpublic email: string;\r\n\tpublic isResendCompleted: boolean; // this flag is set to true after user clicks \"resend confirmation\"\r\n\r\n\tprivate _queryKeys = {\r\n\t\temail: 'email'\r\n\t};\r\n\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _loginService: LoginService,\r\n\t\tprivate _titleService: Title,\r\n\t\tprivate _route: ActivatedRoute) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.isResendCompleted = false;\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._titleService.setTitle('CropManage | Please Confirm Email');\r\n\r\n\t\tthis._route.queryParams.pipe(takeUntil(this._subscriptions$)).subscribe((params) => {\r\n\t\t\tif (!params) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (params[this._queryKeys.email]) {\r\n\t\t\t\tthis.email = params[this._queryKeys.email];\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic resendConfirmation(): void {\r\n\t\tthis._loginService.resendConfirmation(this.email).then((response) => {\r\n\t\t\t// tell user that the confirmation was sent...\r\n\t\t\t// the page does NOT refresh\r\n\t\t\tthis.isResendCompleted = true;\r\n\t\t});\r\n\t}\r\n}\r\n","<div class=\"bk-login__container\">\r\n\t<form [formGroup]=\"form\"\r\n\t\tclass=\"form-horizontal\">\r\n\r\n\t\t<div class=\"bk-modal bk-modal--register\">\r\n\t\t\t<div class=\"bk-modal__header\">\r\n\t\t\t\t<h4 class=\"bk-modal__header-title\">Create a New Account</h4>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-modal__body\">\r\n\t\t\t\t<div class=\"bk-login__new-form\">\r\n\t\t\t\t\t<div *ngIf=\"errorMessages\"\r\n\t\t\t\t\t\tclass=\"validation-summary-valid bk-login__register--errors\">\r\n\t\t\t\t\t\t<ul>\r\n\t\t\t\t\t\t\t<li *ngFor=\"let error of errorMessages\">\r\n\t\t\t\t\t\t\t\t{{ error }}\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<table cellspacing=\"0\" class=\"bk-table-for-mat-form\">\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t\t\t<mat-label>First Name</mat-label>\r\n\t\t\t\t\t\t\t\t\t<input matInput\r\n\t\t\t\t\t\t\t\t\t\tname=\"FirstName\"\r\n\t\t\t\t\t\t\t\t\t\tformControlName=\"FirstName\"\r\n\t\t\t\t\t\t\t\t\t\tplaceholder=\"\"\r\n\t\t\t\t\t\t\t\t\t\ttabindex=\"1\"\r\n\t\t\t\t\t\t\t\t\t\tvalue=\"\">\r\n\t\t\t\t\t\t\t\t\t<mat-error *ngIf=\"f.FirstName.invalid && (f.FirstName.dirty || f.FirstName.touched)\">\r\n\t\t\t\t\t\t\t\t\t\t{{ 'First name is required' }}\r\n\t\t\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t\t\t<mat-label>Last Name</mat-label>\r\n\t\t\t\t\t\t\t\t\t<input matInput\r\n\t\t\t\t\t\t\t\t\t\tname=\"LastName\"\r\n\t\t\t\t\t\t\t\t\t\tformControlName=\"LastName\"\r\n\t\t\t\t\t\t\t\t\t\tplaceholder=\"\"\r\n\t\t\t\t\t\t\t\t\t\ttabindex=\"2\"\r\n\t\t\t\t\t\t\t\t\t\tvalue=\"\">\r\n\t\t\t\t\t\t\t\t\t<mat-error *ngIf=\"f.LastName.invalid && (f.LastName.dirty || f.LastName.touched)\">\r\n\t\t\t\t\t\t\t\t\t\t{{ 'Last name is required' }}\r\n\t\t\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</table>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>Email</mat-label>\r\n\t\t\t\t\t\t<input matInput\r\n\t\t\t\t\t\t\tname=\"Email\"\r\n\t\t\t\t\t\t\tformControlName=\"Email\"\r\n\t\t\t\t\t\t\tplaceholder=\"\"\r\n\t\t\t\t\t\t\ttype=\"Email\"\r\n\t\t\t\t\t\t\ttabindex=\"3\"\r\n\t\t\t\t\t\t\tvalue=\"\">\r\n\t\t\t\t\t\t<mat-error *ngIf=\"f.Email.invalid && (f.Email.dirty || f.Email.touched)\">\r\n\t\t\t\t\t\t\t<div *ngIf=\"f.Email.errors.required\">\r\n\t\t\t\t\t\t\t\t{{ 'Email is required' }}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div *ngIf=\"f.Email.errors.noPlusSign\">\r\n\t\t\t\t\t\t\t\t{{ 'Email cannot contain a plus sign.' }}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\r\n\t\t\t\t\t<div class=\"bk-clearfix\"></div>\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>Password</mat-label>\r\n\t\t\t\t\t\t<input matInput\r\n\t\t\t\t\t\t\tname=\"Password\"\r\n\t\t\t\t\t\t\tformControlName=\"Password\"\r\n\t\t\t\t\t\t\ttabindex=\"4\"\r\n\t\t\t\t\t\t\t[type]=\"passwordIsHidden ? 'password' : 'text'\"\r\n\t\t\t\t\t\t\tautocomplete=\"new-password\">\r\n\r\n\t\t\t\t\t\t\t<button mat-icon-button matSuffix (click)=\"passwordIsHidden = !passwordIsHidden\">\r\n\t\t\t\t\t\t\t\t<mat-icon>\r\n\t\t\t\t\t\t\t\t\t{{passwordIsHidden ? 'visibility_off' : 'visibility'}}\r\n\t\t\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"f.Password.invalid && (f.Password.dirty\r\n\t\t\t\t\t\t|| f.Password.touched)\">\r\n\t\t\t\t\t\t\t{{ getPasswordErrorMessage(f.Password) }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t<mat-label>Confirm password</mat-label>\r\n\t\t\t\t\t\t<input matInput\r\n\t\t\t\t\t\t\tname=\"ConfirmPassword\"\r\n\t\t\t\t\t\t\tformControlName=\"ConfirmPassword\"\r\n\t\t\t\t\t\t\ttabindex=\"5\"\r\n\t\t\t\t\t\t\t[type]=\"passwordIsHidden ? 'password' : 'text'\"\r\n\t\t\t\t\t\t\tautocomplete=\"new-password\">\r\n\t\t\t\t\t\t\t<button mat-icon-button matSuffix (click)=\"passwordIsHidden = !passwordIsHidden\">\r\n\t\t\t\t\t\t\t\t<mat-icon>\r\n\t\t\t\t\t\t\t\t\t{{passwordIsHidden ? 'visibility_off' : 'visibility'}}\r\n\t\t\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"f.ConfirmPassword.invalid && (f.ConfirmPassword.dirty ||\r\n\t\t\t\t\t\t\tf.ConfirmPassword.touched)\">\r\n\t\t\t\t\t\t\t{{ getPasswordErrorMessage(f.ConfirmPassword) }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\r\n\t\t\t\t\t<div class=\"bk-login__form-group\">\r\n\t\t\t\t\t\t<button  mat-button\r\n\t\t\t\t\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n\t\t\t\t\t\t\t(click)=\"register()\"> <!-- we're actually updating an existing data here -->\r\n\t\t\t\t\t\t\t{{(isSaving ? 'Creating' : 'Create') | translate }} {{ 'Account' | translate }}\r\n\t\t\t\t\t\t\t<img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!--\r\n\t\t\t\t\t<div class=\"bk-identity-signin-divider\">\r\n\t\t\t\t\t\t<hr>\r\n\t\t\t\t\t\t<span>Or</span>\r\n\t\t\t\t\t\t<hr>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div id=\"googleSignInBtn\"></div>\r\n\t\t\t\t\t -->\r\n\t\t\t\t\t<br>\r\n\t\t\t\t\t<div class=\"bk-login__form-group bk-login__register-text\">\r\n\t\t\t\t\t\tIf you already have an account, please <a routerLink=\"/login\">Sign in</a>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</form>\r\n</div>","import { AfterViewInit, Component, NgZone, OnInit } from '@angular/core';\r\nimport { NavigationExtras, Router } from '@angular/router';\r\nimport { LoginService } from '../../../services/login.service';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { CMError } from '../../../interfaces/interfaces';\r\nimport { LoginCredentials, ResetPasswordResponse } from '../../../services/interface';\r\nimport { NotificationService } from '../../../services/notification.service';\r\nimport { eNotificationTypes } from '../../../interfaces/constants';\r\nimport { FormGroup, AbstractControl, FormBuilder, Validators, ValidatorFn } from '@angular/forms';\r\nimport { FormValidation } from '../../../classes/formValidation';\r\nimport { GoogleIdentity } from '../login/login.component';\r\nimport { environment } from '../../../../environments/environment';\r\nimport { TokenService } from '../../../services/token.service';\r\nimport { MainMenuUpdateService } from '../../main-menu/main-menu-update.service';\r\nimport { UpdateService } from '../../../services/update.service';\r\n\r\nexport type RegistrationFields = 'FirstName' | 'LastName' | 'Email' |\r\n\t'Password' | 'ConfirmPassword';\r\n\r\ndeclare var google: GoogleIdentity;\r\n\r\n@Component({\r\n\tselector: 'app-register',\r\n\ttemplateUrl: 'register.page.html',\r\n\tstyleUrls: ['registration.scss']\r\n})\r\nexport class RegistrationPage implements OnInit, AfterViewInit {\r\n\r\n\tpublic errorMessages: string[];\r\n\tpublic form: FormGroup;\r\n\tpublic isSaving: boolean;\r\n\tpublic passwordIsHidden: boolean;\r\n\tprivate _isGoogleLoaded = false;\r\n\tpublic loginCredentials: LoginCredentials;\r\n\r\n\tpublic get f(): { [key in RegistrationFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in RegistrationFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _loginService: LoginService,\r\n\t\tprivate _titleService: Title,\r\n\t\tprivate _ngZone: NgZone,\r\n\t\tprivate _mainMenuUpdateService: MainMenuUpdateService,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _tokenService: TokenService) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._titleService.setTitle('CropManage | Register');\r\n\t\tthis._initializeForm();\r\n\t\tthis.passwordIsHidden = true;\r\n\r\n\t\tthis.loginCredentials = {\r\n\t\t\tusername: '',\r\n\t\t\tpassword: '',\r\n\t\t\tGoogleJWT: null\r\n\t\t}\r\n\t}\r\n\r\n\tngAfterViewInit(): void {\r\n\t\twindow.onload = () => {\r\n\t\t\t// this._initializeGoogleIdentity();\r\n\t\t};\r\n\r\n\t\t// this._initializeGoogleIdentity();\r\n\t}\r\n\r\n\tprivate _initializeGoogleIdentity(): void {\r\n\t\tif (this._isGoogleLoaded) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!google) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._isGoogleLoaded = true;\r\n\r\n\t\tgoogle.accounts.id.initialize({\r\n\t\t\tclient_id: environment.GoogleClientId,\r\n\t\t\tcontext: 'signup',\r\n\t\t\tcallback: (response) => this._ngZone.run(() => {\r\n\t\t\t\tthis.loginCredentials.GoogleJWT = response.credential;\r\n\t\t\t\tthis._registerViaGoogleIdentity();\r\n\t\t\t})\r\n\t\t});\r\n\r\n\t\tgoogle.accounts.id.prompt(); // show one-click prompt\r\n\r\n\t\tgoogle.accounts.id.renderButton(\r\n\t\t\tdocument.getElementById('googleSignInBtn'),\r\n\t\t\t{ type: 'standard', text: 'signup_with', theme: 'filled_blue',\r\n\t\t\tsize: 'large', width: '390'}\r\n\t\t);\r\n\t}\r\n\r\n\tprivate _initializeForm(): void {\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tFirstName: [null, Validators.required],\r\n\t\t\tLastName: [null, Validators.required],\r\n\t\t\tEmail: [null, [Validators.required, this._emailPlusSignValidator()]],\r\n\t\t\tPassword: [null],\r\n\t\t\tConfirmPassword: [null],\r\n\t\t});\r\n\r\n\t\tthis.f.Password.setValidators([Validators.required, this._mustMatchControl(this.f.ConfirmPassword),\r\n\t\t\tValidators.minLength(7),\r\n\t\t\tthis._passwordValidator()]);\r\n\t\tthis.f.ConfirmPassword.setValidators([Validators.required, this._mustMatchControl(this.f.Password),\r\n\t\t\tValidators.minLength(7), this._passwordValidator()]);\r\n\t}\r\n\r\n\tprivate _mustMatchControl(anotherControl: AbstractControl): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet errorName = 'valuesMustMatch';\r\n\r\n\t\t\tif (!anotherControl.touched) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tvalid = anotherControl.value === control.value ? true : false;\r\n\r\n\t\t\tif (valid) {\r\n\t\t\t\tFormValidation.removeErrorFromContrl(anotherControl, errorName);\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'valuesMustMatch': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Password should have 2 of the following types of characters: Lower\r\n\t * case letters, Upper case letters, Numbers, Punctuation (special characters).\r\n\t */\r\n\tprivate _passwordValidator(): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet features: number;\r\n\t\t\tlet patterns: {\r\n\t\t\t\tlowerCase: RegExp,\r\n\t\t\t\tupperCase: RegExp,\r\n\t\t\t\tnumber: RegExp,\r\n\t\t\t\tcharacters: RegExp\r\n\t\t\t};\r\n\r\n\t\t\tfeatures = 0;\r\n\r\n\t\t\tpatterns = {\r\n\t\t\t\tlowerCase: new RegExp('[a-z]'),\r\n\t\t\t\tupperCase: new RegExp('[A-Z]'),\r\n\t\t\t\tnumber: new RegExp('[0-9]'),\r\n\t\t\t\tcharacters: new RegExp('[^0-9a-zA-Z]')\r\n\t\t\t};\r\n\r\n\t\t\tif (patterns.lowerCase.test(control.value)) {\r\n\t\t\t\tfeatures++;\r\n\t\t\t}\r\n\r\n\t\t\tif (patterns.upperCase.test(control.value)) {\r\n\t\t\t\tfeatures++;\r\n\t\t\t}\r\n\r\n\t\t\tif (patterns.number.test(control.value)) {\r\n\t\t\t\tfeatures++;\r\n\t\t\t}\r\n\r\n\t\t\tif (patterns.characters.test(control.value)) {\r\n\t\t\t\tfeatures++;\r\n\t\t\t}\r\n\r\n\t\t\tvalid = features >= 2 ? true : false;\r\n\r\n\t\t\treturn valid ? null : {'invalidPassword': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _emailPlusSignValidator(): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = control.value && control.value.indexOf('+') !== -1 ? false : true;\r\n\r\n\t\t\treturn valid ? null : {'noPlusSign': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tpublic getPasswordErrorMessage(control: AbstractControl): string {\r\n\t\tlet result: string;\r\n\r\n\t\tif (!control) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = control.errors.required ? 'Password is required' :\r\n\t\t\tcontrol.errors.valuesMustMatch ? 'Password and confirm password must match' :\r\n\t\t\tcontrol.errors.minlength ? 'Password must be at least 7 characters' :\r\n\t\t\tcontrol.errors.invalidPassword ? `Password should have at least 2 types of characters\r\n\t\t\t(lower case, Upper case, Numbers, Punctuation)` : null;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Register via Google Identity\r\n\t */\r\n\tprivate _registerViaGoogleIdentity(): void {\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._loginService.login(this.loginCredentials)\r\n\t\t\t.then(response => {\r\n\r\n\t\t\t\tif (!response || !response.token || !response.expires) {\r\n\t\t\t\t\tthis.isSaving = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._tokenService.setToken(response);\r\n\t\t\t\tthis._updateService.updateAuthToken();\r\n\t\t\t\tthis._mainMenuUpdateService.fireAuthStatusChanged();\r\n\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t\tthis._router.navigate(['MyDashboard']);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tpublic register(): void {\r\n\r\n\t\tif (!this.form.valid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._loginService.register(this.f.FirstName.value,\r\n\t\t\tthis.f.LastName.value, this.f.Email.value,\r\n\t\t\tthis.f.Email.value, this.f.Password.value,\r\n\t\t\tthis.f.ConfirmPassword.value).then((response) => {\r\n\r\n\t\t\tlet error: CMError;\r\n\t\t\tlet validResponse: ResetPasswordResponse;\r\n\r\n\t\t\tthis.isSaving = false;\r\n\t\t\tvalidResponse = response as ResetPasswordResponse;\r\n\t\t\terror = response as CMError;\r\n\r\n\t\t\tif (error.message) {\r\n\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\tmessage: error.message\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (validResponse.ErrorMessages && validResponse.ErrorMessages.length > 0) {\r\n\t\t\t\tthis.errorMessages = validResponse.ErrorMessages;\r\n\t\t\t} else {\r\n\t\t\t\tlet navigationExtras: NavigationExtras = {\r\n\t\t\t\t\tqueryParams: {\r\n\t\t\t\t\t\t'email': this.f.Email.value,\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tthis._router.navigate(['mustConfirmEmail'], navigationExtras);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","<div class=\"bk-login__container\">\r\n\t<div class=\"bk-login\">\r\n\t\t<div class=\"bk-login__welcome-box\">\r\n\t\t\t<h4>Password Reset Confirmation</h4>\r\n\t\t\t<p>Your password has been reset. Please <a routerLink=\"/login\">click here to login.</a></p>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { LoginService } from '../../../services/login.service';\r\nimport { Title } from '@angular/platform-browser';\r\n\r\n@Component({\r\n\tselector: 'app-reset-password-confirmation',\r\n\ttemplateUrl: 'reset-password-confirmation.page.html'\r\n})\r\nexport class ResetPasswordConfirmationPage implements OnInit {\r\n\r\n\tconstructor(\r\n\t\tprivate _titleService: Title,\r\n\t\tprivate _router: Router) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._titleService.setTitle('CropManage - Reset Password Confirmation');\r\n\t}\r\n\r\n\r\n}\r\n","<div class=\"bk-login__container\">\r\n\t<form class=\"form-horizontal\">\r\n\t\t<div class=\"bk-modal bk-modal--register\">\r\n\t\t\t<div class=\"bk-modal__header\">\r\n\t\t\t\t<h4 class=\"bk-modal__header-title\">Reset Password</h4>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-modal__body\">\r\n\t\t\t\t<div class=\"bk-login__new-form\">\r\n\t\t\t\t\t<div class=\"bk-login__form-group\">\r\n\t\t\t\t\t\t<label>Email</label>\r\n\t\t\t\t\t\t<input type=\"text\" name=\"email\" [(ngModel)]=\"email\"/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"bk-login__form-group\">\r\n\t\t\t\t\t\t<label>Password</label>\r\n\t\t\t\t\t\t<input type=\"password\" name=\"password\" [(ngModel)]=\"password\"/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"bk-login__form-group\">\r\n\t\t\t\t\t\t<label>Confirm Password</label>\r\n\t\t\t\t\t\t<input type=\"password\" name=\"confirmPassword\" [(ngModel)]=\"confirmPassword\"/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"bk-login__form-group\">\r\n\t\t\t\t\t\t<input type=\"submit\"\r\n\t\t\t\t\t\t\t(click)=\"resetPassword()\"\r\n\t\t\t\t\t\t\tclass=\"bk-register__button bk-button--large btn btn-custom\"\r\n\t\t\t\t\t\t\tvalue=\"Reset\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>    \r\n\t</form>\r\n</div>","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { LoginService } from '../../../services/login.service';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { CMError } from '../../../interfaces/interfaces';\r\nimport { ResetPasswordResponse } from '../../../services/interface';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tselector: 'app-reset-password',\r\n\ttemplateUrl: 'reset-password.page.html'\r\n})\r\nexport class ResetPasswordPage implements OnInit, OnDestroy {\r\n\r\n\tpublic email: string;\r\n\tpublic password: string;\r\n\tpublic confirmPassword: string;\r\n\tpublic userId: string;\r\n\tpublic code: string;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _loginService: LoginService,\r\n\t\tprivate _titleService: Title,\r\n\t\tprivate _route: ActivatedRoute,\r\n\t\tprivate _router: Router) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._titleService.setTitle('CropManage: Reset Password');\r\n\r\n\t\tthis._route.queryParams.pipe(takeUntil(this._subscriptions$)).subscribe((params) => {\r\n\t\t\tif (!params) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.userId = params['userId'];\r\n\t\t\tthis.code = params['code'];\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic resetPassword(): void {\r\n\t\tthis._loginService.resetPassword(this.email, this.password, this.confirmPassword,\r\n\t\tthis.code).then((response) => {\r\n\t\t\tlet error: CMError;\r\n\t\t\tlet validResponse: ResetPasswordResponse;\r\n\r\n\t\t\tif (!response) {\r\n\t\t\t\tthrow new Error('empty response');\r\n\t\t\t}\r\n\r\n\t\t\terror = response as CMError;\r\n\t\t\tvalidResponse = response as ResetPasswordResponse;\r\n\r\n\t\t\tif (error.message) {\r\n\t\t\t\t// display http error message\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (validResponse.ErrorMessages && validResponse.ErrorMessages.length > 0) {\r\n\t\t\t\t// display errors\r\n\t\t\t} else {\r\n\t\t\t\tthis._router.navigate(['resetPasswordConfirmation']);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate validateForm(): void {\r\n\t\t// do complex validation here. Null validation can be done automatically\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class RainfallChartUpdateService {\r\n\tprotected onClose: Subject<void> = new Subject<void>();\r\n\tpublic onClose$: Observable<void> = this.onClose.asObservable();\r\n\r\n\tpublic dialogClosed(): void {\r\n\t\tthis.onClose.next();\r\n\t}\r\n}\r\n","import { IIdNamePair } from '../../interfaces/abstract';\r\nimport { ISoilLayer, ISoilWebProperties } from '../../models/soil-type/interfaces';\r\nimport { CMError, SuccessResponse } from '../../interfaces/interfaces';\r\nimport { IPlanting, ILotPlantingFavoritesJSON } from '../planting-settings/interfaces';\r\nimport { IRanchLotModel, ILotEdit } from './modals/lot/interfaces';\r\nimport { IWell } from '../../models/planting-well/well.interface';\r\n\r\nexport interface IUserSearchResult {\r\n\tName: string,\r\n\tUserId: string\r\n}\r\n\r\nexport interface IRanchFeatureEmptyPermissions {\r\n\tFeatureId: number,\r\n\tFeatureName: string,\r\n\tPermissionId: number\r\n}\r\n\r\nexport interface IRanchPermissionTypes {\r\n\tPermissionId: number,\r\n\tPermissionName: string\r\n}\r\n\r\nexport interface IRanchUserPermissionWithWebAPIViewModel {\r\n\tSite: IRanchFeatureEmptyPermissions[],\r\n\tWebAPIAccess: boolean,\r\n\tranchGuid: string,\r\n}\r\n\r\nexport interface IRanch {\r\n\tId: number,\r\n\tName: string,\r\n\tCoordinates?: string,\r\n\tAcres?: number,\r\n\r\n\tRanch_External_GUID?: string,\r\n\r\n\tRanchId?: string,\r\n\tCreatedByFullName?: string,\r\n\tRanchAccessState?: number,\r\n\tUserAccessState?: number,\r\n\tActivePlantings?: number\r\n\r\n\t// virtual\r\n\tFavorite?: boolean,\r\n\tFavoriteId?: number,\r\n\tRanchOwnerFullName?: string,\r\n\tWeatherAPI_Id?: number,\r\n}\r\n\r\n/**\r\n * C# model\r\n */\r\nexport interface RanchUpdateParams {\r\n\tName: string,\r\n\tAcres: string,\r\n\tCoordinates: string\r\n}\r\n\r\n/**\r\n * C# model\r\n */\r\nexport interface RanchCreateResponse {\r\n\tId: number,\r\n\tGuid: string,\r\n\tWeatherAPI_Id?: number\r\n}\r\n\r\n/**\r\n * C# model\r\n */\r\nexport interface RanchUpdateCIMISParams {\r\n\tUseSpatialCIMIS: boolean,\r\n\tUseCIMISAverageMode: boolean\r\n}\r\n\r\n/**\r\n * C# model\r\n */\r\nexport interface IRanchBasicInfoViewModel {\r\n\tRanchName: string,\r\n\tAcres: number,\r\n\tCoordinates: string,\r\n\tRanchOwner: string,\r\n\tRanchOwnerFullName: string,\r\n\tRanchOwnerEmail: string,\r\n\tUseSpatialCIMIS: boolean,\r\n\tUseCIMISAverageMode: boolean,\r\n\tIsPrivate: boolean,\r\n\tSpatialETAvailable: boolean,\r\n\tWeatherAPI_Id: number\r\n}\r\n\r\nexport interface IRanchPermissions {\r\n\tHasActivePlantings: boolean,\r\n\tRanchExternalGuid: string,\r\n\tRanchName: string,\r\n\tUserCanDataExport: boolean,\r\n\tUserCanEditFertilizationEvent: boolean,\r\n\tUserCanEditIrrigationEvent: boolean,\r\n\tUserCanEditPlanting: boolean,\r\n\tUserCanEditRanch: boolean,\r\n\tUserCanEditSoilSampleEvent: boolean,\r\n\tUserIsRanchOwner: boolean\r\n}\r\n\r\nexport interface ISuccessResponse {\r\n\tMessage: string\r\n}\r\n\r\n/**\r\n * Angular version of C# RanchUserListItem\r\n */\r\nexport interface IRanchUserListItem {\r\n\tEmail: string,\r\n\tIsOwner: boolean,\r\n\tRole: string,\r\n\tUserId: string,\r\n\tUserFullName: string\r\n}\r\n\r\nexport interface ICIMISOptions {\r\n\tUseSpatialCIMIS: boolean,\r\n\tUseCIMISAverageMode: boolean\r\n}\r\n\r\nexport interface IRanchSettingsValidationStates {\r\n\tMembers: boolean,\r\n\tLots: boolean,\r\n\tFertilizers: boolean,\r\n\tWeatherStations: boolean,\r\n\tWells: boolean,\r\n\tCommodityTypes: boolean,\r\n\tValid: boolean,\r\n\tMissingValues: string[]\r\n}\r\n\r\nexport interface IRanchFavoritesPostResponse {\r\n\tId: number,\r\n\tRanchId: number,\r\n\tUserId: string,\r\n\tRanch: IRanch\r\n}\r\n\r\nexport interface ISubjectFavoriteResponse {\r\n\tranchId: number,\r\n\tfavoriteId: number,\r\n\tranch: IRanch\r\n}\r\n\r\nexport const eRanchSettingNames = {\r\n\tusers: 'users',\r\n\tlots: 'lots',\r\n\twells: 'wells',\r\n\tfertilizers: 'fertilizers',\r\n\tweatherStations: 'weatherStations',\r\n\tcommodityTypes: 'commodityTypes'\r\n};\r\n\r\n/**\r\n * Angular version of the C# RanchLotEdit interface\r\n * used for LotEdit call\r\n */\r\nexport interface IRanchLotEditJSON {\r\n\tCoordinates: string,\r\n\tModel: IRanchLotEditViewModel\r\n\tSoilWebProperties: ISoilWebProperties\r\n}\r\n\r\nexport interface IRanchLotEditViewModel {\r\n\tRanchLotViewModel: IRanchLotViewModel,\r\n\tSoilLayers: ISoilLayer[],\r\n}\r\n\r\nexport interface IRanchLotViewModel {\r\n\tName: string,\r\n\tAcres: number,\r\n\tCoordinates: string,\r\n\tObstructionDepth: number,\r\n}\r\n\r\n/**\r\n * Copy of CropManage.Common.Models.JSON.RanchLot\r\n */\r\nexport interface IRanchLotJSONModel {\r\n\tId: number,\r\n\tName: string,\r\n\tRanchId: number,\r\n\tAcres: number,\r\n\tObstructionDepth: number,\r\n\tCreateDT: string,\r\n\tLastUpdateDT: string,\r\n\tDeleted: boolean\r\n\r\n\t// calculated\r\n\r\n\tCoordinates: string,\r\n\r\n\t// added in JS\r\n\r\n\tSelected?: boolean,\r\n\tDisabled?: boolean,\r\n}\r\n\r\nexport interface IActiveStation {\r\n\tId: number,\r\n\tActive: boolean\r\n}\r\n\r\nexport interface IWeatherStationCurrentModel {\r\n\tId: number,\r\n\tExternal_Id: string,\r\n\tName: string,\r\n\tDistance: number,\r\n\tNearestCity: string,\r\n\tCounty: string,\r\n\tPriority: number,\r\n\tActiveStation: IActiveStation\r\n}\r\n\r\nexport interface IWeatherStationModel {\r\n\tId: number,\r\n\tExternal_Id: string,\r\n\tName: string,\r\n\tLat: string,\r\n\tLng: string,\r\n\tDistance: number,\r\n\tNearestCity: string,\r\n\tCounty: string\r\n}\r\n\r\nexport interface IMarkerCollection {\r\n\tRanchLocation: IMarker,\r\n\tStations: IMarker[]\r\n}\r\n\r\nexport interface MarkerCollection {\r\n\tRanchLocation: Marker,\r\n\tStations: Marker[]\r\n}\r\n\r\nexport interface IMarker {\r\n\tId: number,\r\n\tExternal_Id: string,\r\n\tLongitude: number,\r\n\tLatitude: number,\r\n\tSelected: boolean,\r\n\tName: string,\r\n\tDistance: number,\r\n\tNearestCity: string,\r\n\tCounty: string,\r\n\tisCurrent?: boolean\r\n}\r\n\r\nexport interface Marker {\r\n\tId: number,\r\n\tExternal_Id: string,\r\n\tLongitude: number,\r\n\tLatitude: number,\r\n\tName: string,\r\n\tDistance: number,\r\n\tNearestCity: string,\r\n\tCounty: string,\r\n\tSelected: boolean,\r\n}\r\n\r\nexport interface IPermissionsService {\r\n\tgetRanchPlantingsPermissions(id: string): Promise<IRanchPermissions>,\r\n\tgetRanchMemberPermissions(userId: string): Promise<IRanchUserPermissionWithWebAPIViewModel | CMError>,\r\n\teditRanchMemberPermissions(userId: string, permissions: IRanchFeatureEmptyPermissions[]): Promise<ISuccessResponse>,\r\n\tgetRanchPermissionTypes(): IRanchPermissionTypes[],\r\n\tgetRanchFeatureDefaultPermissions(): IRanchFeatureEmptyPermissions[],\r\n\tgetRanchFeatureEmptyPermissions(): IRanchFeatureEmptyPermissions[],\r\n}\r\n\r\nexport interface IUserRanchesViewModel {\r\n\tId: number,\r\n\tRanch_External_GUID: string,\r\n\tName: string,\r\n\tActivePlantings: number,\r\n\tUserIsRanchOwner: boolean,\r\n\tUserCanEditRanch: boolean,\r\n\tUserCanEditPlanting: boolean,\r\n\tUserCanExportData: boolean,\r\n\tCreatedByUserId: string,\r\n\tCreatedByFullName: string,\r\n\tRanchOwnerId: string,\r\n\tRanchOwnerFullName: string\r\n}\r\n\r\nexport interface IRanchFavoritesJSON {\r\n\tId: number,\r\n\tRanchId: number,\r\n\tUserId: string,\r\n\tRanch: IRanchJSON\r\n}\r\n\r\nexport interface IRanchJSON {\r\n\tId: number,\r\n\tName: string,\r\n\tRanch_External_GUID: string,\r\n\tRanchAccessState: number,\r\n\tUserAccessState: number,\r\n\tActivePlantings?: number,\r\n\tCreatedByFullName: string,\r\n\tRanchOwnerId: string,\r\n\tRanchOwnerFullName: string\r\n}\r\n\r\nexport interface RanchExistsModel {\r\n\tName?: string,\r\n\tExists: boolean\r\n}\r\n\r\nexport interface IRanchService {\r\n\tcurrentRanchLots: IRanchLotJSONModel[],\r\n\tupdateActivePlantingCount(): void,\r\n\tgetMyRanches(): Promise<IRanch[]>,\r\n\tclearRanchesCache(): void,\r\n\taddRanchToFavoritesList(ranchFavorite: ISubjectFavoriteResponse): void,\r\n\tgetFavoriteRanches(override: boolean): Promise<IRanch[]>,\r\n\tgetMissingSettings(ranchGUID: string): Promise<IRanchSettingsValidationStates>,\r\n\texists(ranchGUID: string): Promise<RanchExistsModel>,\r\n\tgetExcelYears(ranchGUID: string): Promise<number[]>,\r\n\taddRanchToFavorites(ranchId: number): Promise<IRanchFavoritesPostResponse>,\r\n\tremoveRanchFromFavorites(favoriteId: number): Promise<CMError>,\r\n\tgetActivePlantings(id: string): Promise<IPlanting[]>,\r\n\tgetActivePlantingsWithFavorites(id: string, override: boolean): Promise<IPlanting[]>,\r\n\tgetAllPlantings(ranchGuid: string): Promise<IPlanting[]>,\r\n\tgetAllPlantingsWithFavorites(id: string, override: boolean): Promise<IPlanting[]>,\r\n\tgetFavoritePlantings(id: string, override?: boolean): Promise<IPlanting[]>,\r\n\tfindRanchByGuid(ranches: IRanch[], guid: string): IRanch,\r\n\taddPlantingToFavorties(id: number): Promise<ILotPlantingFavoritesJSON>,\r\n\tremovePlantingFromFavorites(id: number): Promise<void>,\r\n\tgetCreateRanchData(): IRanchBasicInfoViewModel,\r\n\tcreateRanch(data: RanchUpdateParams): Promise<RanchCreateResponse>,\r\n\tdeleteRanch(ranchId: string): Promise<SuccessResponse>,\r\n\tgetRanchBasicInfo(): Promise<IRanchBasicInfoViewModel>,\r\n\tgetRanchUsers(): Promise<IRanchUserListItem[]>,\r\n\tgetRanchLots(): Promise<IRanchLotModel[]>,\r\n\tgetRanchWells(): Promise<IWell[]>,\r\n\tgetAddRanchMembersList(): Promise<IUserSearchResult[]>,\r\n\taddRanchMember(id: string): Promise<void>,\r\n\tdeleteRanchUser(userId: string, ranchGuid?: string, shouldPermissionProtect?: boolean): Promise<ISuccessResponse | CMError>,\r\n\tgetAddRanchLotData(): Promise<ILotEdit>,\r\n\tgetEditRanchLotData(id: number): Promise<ILotEdit>,\r\n\teditRanchBasicInfo(basicInfo: RanchUpdateParams): Promise<IRanchJSON>,\r\n\tupdateCIMISOptions(p: RanchUpdateCIMISParams): Promise<void>,\r\n\taddRanchLot(lot: ILotEdit): Promise<IRanchLotUpdateModel>,\r\n\teditRanchLot(lot: ILotEdit): Promise<IRanchLotUpdateModel>,\r\n\tdeleteRanchLot(lotId: number): Promise<Object>,\r\n\tgetRanchWellEditData(id: number): Promise<Object>,\r\n\taddRanchWell(well: IRanchWellViewModel): Promise<void>,\r\n\teditRanchWell(id: number, well: IRanchWellViewModel): Promise<void>,\r\n\tdeleteRanchWell(id: number): Promise<void>,\r\n\tgetBasicRanchLots(id: string): Promise<IRanchLotJSONModel[]>,\r\n\tgetLotsMinimal(ranchGuid: string, year?: number): Promise<IIdNamePair[]>,\r\n\tisUsed(ranchLotId: number, ranchGuid: string): Promise<boolean>,\r\n\texportDataToExcel(name: string, year?: number, lotId?: number): Promise<boolean>,\r\n\tgetIsNDependent(plantingId: number): boolean,\r\n\tgetCalculatorInterface(plantingId: number): string,\r\n\tgetGerminationDate(plantingId: number): string | Date,\r\n\tisPlantingPerennial(plantingId: number): boolean,\r\n\tplantingHasFloodEvents(plantingId: number): boolean,\r\n}\r\n\r\nexport interface IRanchLotUpdateModel {\r\n\tLot: IRanchLotJSON\r\n}\r\n\r\nexport interface IRanchLotBasic {\r\n\tId: number,\r\n\tName: string\r\n}\r\n\r\nexport interface IRanchLotJSON extends IRanchLotBasic {\r\n\tRanchId: number,\r\n\tAcres: number,\r\n\tObstructionDepth?: number,\r\n\tCreateDT: string,\r\n\tLastUpdateDT: string,\r\n\tDeleted: boolean,\r\n\tCoordinates: string\r\n}\r\n\r\nexport interface IRanchWellViewModel {\r\n\tId: number,\r\n\tName: string,\r\n\tElectricalConductivity: number,\r\n\tNitrogenPPM: number\r\n}\r\n\r\n/**\r\n * C# counterpart\r\n */\r\nexport interface RanchLotBase {\r\n\tName: string,\r\n\tAcres: number,\r\n\tCoordinates: string,\r\n\tObstructionDepth?: number\r\n}\r\n\r\n/**\r\n * C# counterpart\r\n */\r\nexport interface RanchLotInternalUpdateModel extends RanchLotBase {\r\n\tSoilLayers: ISoilLayer[]\r\n}\r\n","<div class=\"bk-dialog\">\r\n    <div *ngIf=\"!loadingData\">\r\n\r\n        <button type=\"button\"\r\n            class=\"bk-dialog__close\"\r\n            (click)=\"close()\">\r\n\r\n            &times;\r\n        </button>\r\n\r\n        <h4 mat-dialog-title>\r\n            {{'Weather Data Options' | translate }}\r\n        </h4>\r\n \r\n        <div mat-dialog-content>\r\n            <ng-container *ngIf=\"SpatialETAvailable\">\r\n                <h4>\r\n                    {{'Weather Data Source' | translate }}\r\n                </h4>\r\n\r\n                <p>{{'ET Option Intro' | translate}}</p>\r\n                <!-- CropManage retrieves ET data from either weather stations or \r\n                spatial CIMIS (using coordinates associated with a planting). -->\r\n                    \r\n                <div class=\"bk-modal__radio-buttons bk-modal__margin-correction\">\r\n                    <mat-radio-group aria-label=\"\"\r\n                        name=\"UseSpatialCIMIS\"\r\n                        [(ngModel)]=\"cimisOptions.UseSpatialCIMIS\">\r\n                        \r\n                        <mat-radio-button [value]=\"false\"\r\n                            name=\"UseSpatialCIMIS\">\r\n                            <strong>{{'Weather Station' | translate}}</strong>\r\n                        </mat-radio-button>\r\n                        <!-- Weather Station: get ET data using weather stations.-->\r\n                        <p class=\"mat-radio-label-paragraph\">\r\n                            {{'CIMIS ET Options Text 2' | translate}}\r\n                        </p>\r\n\r\n                        <mat-radio-button [value]=\"true\" name=\"UseSpatialCIMIS\">\r\n                            <strong>{{'Spatial Model' | translate}}</strong>\r\n                        </mat-radio-button>\r\n                        <!-- Spatial Model: Get ET data using spatial model. Recommended if weather stations are more than 25 miles away. Note\r\n                        that currently this method can be significantly slower than getting data using\r\n                        weather stations. -->\r\n                        <p class=\"mat-radio-label-paragraph\">\r\n                            {{'CIMIS ET Options Text 1' | translate}}\r\n                        </p>\r\n                    </mat-radio-group>\r\n                </div>\r\n            </ng-container>\r\n\r\n            <h4>\r\n                {{'Weather Stations Setting' | translate }}\r\n            </h4>\r\n\r\n            <mat-radio-group aria-label=\"\"\r\n                name=\"UseCIMISAverageMode\"\r\n                [(ngModel)]=\"cimisOptions.UseCIMISAverageMode\">\r\n                \r\n                <mat-radio-button [value]=\"false\"\r\n                    name=\"UseCIMISAverageMode\">\r\n                    <strong>{{ 'Sequential Mode' | translate}}</strong>\r\n                </mat-radio-button>\r\n\r\n                <p class=\"mat-radio-label-paragraph\">\r\n                    {{(cimisOptions.UseSpatialCIMIS ?\r\n                        'CIMIS Data Mode Text 1' : 'CIMIS Data Mode Text 1a') | translate}}\r\n                </p>\r\n                    <!-- Sequential Mode: Use ET and rainfall data from the first active\r\n                weather station on my list. Additional weather stations serve as\r\n                backup if data is not available from the primary weather station.-->\r\n\r\n                <mat-radio-button class=\"bk-clearfix\"\r\n                    [value]=\"true\"\r\n                    name=\"UseCIMISAverageMode\">\r\n                    <strong>{{ 'Average Mode' | translate}}</strong>\r\n                </mat-radio-button>\r\n\r\n                <p class=\"mat-radio-label-paragraph\">\r\n                    {{(cimisOptions.UseSpatialCIMIS ?\r\n                        'CIMIS Data Mode Text 2' : 'CIMIS Data Mode Text 2a') | translate}}\r\n                </p>\r\n                <!-- Average Mode: Average ET and rainfall data from all\r\n                weather stations on my list.-->\r\n            </mat-radio-group>\r\n        </div>\r\n        <div mat-dialog-actions align=\"end\">\r\n            <button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n                (click)=\"close()\">\r\n                {{'Cancel' | translate }}\r\n            </button>\r\n            <button class=\"bk-button bk-button--medium\"\r\n                (click)=\"saveCimisOptions()\">\r\n                {{'Save' | translate }}\r\n            </button>\r\n        </div>\r\n    </div>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { RanchService } from '../../service';\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { IRanchBasicInfoViewModel, RanchUpdateCIMISParams } from '../../interfaces';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { NotificationService } from '../../../../services/notification.service';\r\nimport { eNotificationTypes } from '../../../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'cimis-options-modal',\r\n\ttemplateUrl: 'main.html',\r\n})\r\n\r\nexport class CimisOptionsModalComponent implements OnInit {\r\n\r\n\tpublic cimisOptions: RanchUpdateCIMISParams;\r\n\tpublic SpatialETAvailable: boolean;\r\n\tpublic loadingData = true;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialogRef: MatDialogRef<CimisOptionsModalComponent>,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _updateService: UpdateService) {\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t\tthis.clear();\r\n\r\n\t\tthis._ranchService.getRanchBasicInfo()\r\n\t\t\t.then(response => {\r\n\t\t\t\tthis.loadingData = false;\r\n\r\n\t\t\t\tif (!response || response === null || response === undefined) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.cimisOptions = {\r\n\t\t\t\t\tUseCIMISAverageMode: response.UseCIMISAverageMode,\r\n\t\t\t\t\tUseSpatialCIMIS: response.UseSpatialCIMIS,\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.SpatialETAvailable = response.SpatialETAvailable;\r\n\t\t\t})\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tprivate clear() {\r\n\t\tthis.cimisOptions = null;\r\n\t\tthis.loadingData = true;\r\n\t}\r\n\r\n\tpublic saveCimisOptions(): void {\r\n\t\tthis._ranchService.updateCIMISOptions(this.cimisOptions)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis._updateService.setCIMISOptionsUpdated({\r\n\t\t\t\t\tUseSpatialCIMIS: this.cimisOptions.UseSpatialCIMIS,\r\n\t\t\t\t\tUseCIMISAverageMode: this.cimisOptions.UseCIMISAverageMode\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (this.cimisOptions.UseSpatialCIMIS) {\r\n\t\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\t\t\tmessage: 'Spatial ET will be fetched soon from the CIMIS Server in the background. You may not see the weather data immediately.'\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tthis.close();\r\n\t\t\t});\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\r\n    <form #f=\"ngForm\">\r\n\r\n        <button *ngIf=\"view === dialogViews.CREATE\"\r\n            (click)=\"close()\" \r\n            type=\"button\"\r\n            class=\"bk-button bk-dialog__close\">\r\n\r\n            <span>&times;</span>\r\n        </button>\r\n\r\n        <h4 mat-dialog-title>\r\n            {{ 'Add' | translate }} {{ 'Commodity' | translate}}\r\n        </h4>\r\n\r\n        <div mat-dialog-content>\r\n            <ng-container *ngIf=\"view === dialogViews.CREATE\">\r\n                <!-- Commodity Types dropdown -->\r\n                <mat-form-field appearance=\"fill\"\r\n                    class=\"mat-form-field--one-line mat-form-field--short\">\r\n                    <mat-label>\r\n                        {{ 'Commodity' | translate }}\r\n                    </mat-label>\r\n                    <mat-select (ngModelChange)=\"onCommodityTypeSelected($event)\" \r\n                        required\r\n                        name=\"commodityTypeId\"\r\n                        [(ngModel)]=\"commodityTypeId\">\r\n                        <mat-select-trigger *ngIf=\"selectedCommodityType\">\r\n                            {{ selectedCommodityType.Name | translate }} <mat-icon class=\"cm-mat-select-trigger__mat-icon\"\r\n                            *ngIf=\"!selectedCommodityType.IsActive\">construction</mat-icon>\r\n                        </mat-select-trigger>\r\n                        <mat-option [value]=\"null\">\r\n                            {{'Select One' | translate }}\r\n                        </mat-option>\r\n                        <mat-option *ngFor=\"let commodityType of commodityTypes\"\r\n                            [value]=\"commodityType.Id\">\r\n                            {{commodityType.Name | translate }} <mat-icon *ngIf=\"!commodityType.IsActive\">construction</mat-icon>\r\n                        </mat-option>\r\n                    </mat-select>\r\n                </mat-form-field>\r\n\r\n                <!-- Crop Types checkbox group -->\r\n\r\n                <ng-container *ngIf=\"cropTypes && cropTypes.length > 0\">\r\n                    <label>\r\n                        {{ 'Crop Types' | translate }} \r\n                        <info-icon [title]=\"'Crop Types Planting Count Help Text'\"></info-icon>\r\n                    </label>\r\n        \r\n                    <ng-container *ngFor=\"let cropType of cropTypes\">\r\n                        <div class=\"bk-modal__row bk-modal__row--no-border\">\r\n                            <input type=\"checkbox\"\r\n                            class=\"bk-modal__checkbox\"\r\n                            name=\"cropType\"\r\n                            value=\"cropType\"\r\n                            (change)=\"onCropTypeChange()\"\r\n                            [disabled]=\"cropType.PlantingsCount > 0\"\r\n                            [(ngModel)]=\"cropType.IsSelected\" />\r\n                        \r\n                            <span>\r\n                                {{cropType.Name}} \r\n                                <span *ngIf=\"cropType.PlantingsCount > 0\">\r\n                                    ({{cropType.PlantingsCount}})\r\n                                </span>\r\n                            </span>\r\n                        </div>\r\n                    </ng-container>\r\n                </ng-container>\r\n            </ng-container>\r\n\r\n            <ng-container *ngIf=\"view === dialogViews.DISCARD_CHANGES\">\r\n                <div class=\"bk-dialog__paragraph\">\r\n                    {{ 'The changes you made were not saved' | translate}}. \r\n                    {{'Discard changes' | translate}}?\r\n                </div>\r\n            </ng-container>\r\n        </div>\r\n\r\n        <div mat-dialog-actions align=\"end\">\r\n\r\n            <ng-container *ngIf=\"view === dialogViews.CREATE\">\r\n                <button mat-button\r\n                    class=\"bk-button bk-button--medium bk-button--text-only \r\n                        bk-dialog__button--secondary\"\r\n                    (click)=\"close()\">\r\n                    {{ 'Cancel' | translate }}\r\n                </button>\r\n\r\n                <button mat-button\r\n                    class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n                    (click)=\"save()\"\r\n                    [disabled]='!f.form.valid || !isFormValid'>\r\n                    {{ 'Save' | translate }}\r\n                </button>\r\n            </ng-container>\r\n\r\n            <ng-container *ngIf=\"view === dialogViews.DISCARD_CHANGES\">\r\n                <button mat-button\r\n                    class=\"bk-button bk-button--medium bk-button--text-only\r\n                        bk-dialog__button--secondary\"\r\n                    (click)=\"cancelConfirmation()\">\r\n                    {{ 'Keep Editing' | translate }}\r\n                </button>\r\n\r\n                <button mat-button\r\n                    class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n                    (click)=\"discard()\">\r\n                    {{ 'Discard' | translate }}\r\n                </button>\r\n            </ng-container>\r\n        </div>\r\n    </form>\r\n</div>","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { ICommodityTypeDialogInput, ICommodityType } from '../../../../models/commodity-type/interfaces';\r\nimport { CropTypeService } from '../../../../models/crop-type/service';\r\nimport { CommodityService } from '../../../../models/commodity-type/service';\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { eDialogViews } from '../../../../interfaces/abstract';\r\nimport { CommodityTypeDialog } from './dialog';\r\nimport { CommodityType } from '../../../../models/commodity-type/commodityType';\r\nimport { ObjectUtility } from '../../../../classes/objectUtility';\r\nimport { CaspService } from '../../../casp-dialog/casp.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'commodity-type-create-dialog',\r\n\ttemplateUrl: 'create.html',\r\n\tstyleUrls: ['create.scss']\r\n})\r\n\r\nexport class CommodityTypeCreateDialog extends CommodityTypeDialog implements OnInit {\r\n\r\n\tpublic commodityTypes: ICommodityType[];\r\n\tpublic selectedCommodityType: ICommodityType;\r\n\r\n\tconstructor(\r\n\t\tprotected _dialog: MatDialog, // used for CASP dialog\r\n\t\tpublic dialogRef: MatDialogRef<CommodityTypeDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: ICommodityTypeDialogInput,\r\n\t\tprotected cropTypeService: CropTypeService,\r\n\t\tprotected commodityService: CommodityService,\r\n\t\tprotected updateService: UpdateService,\r\n\t\tprotected _caspService: CaspService,\r\n\t) {\r\n\r\n\t\tsuper(_dialog, dialogRef, data, cropTypeService, commodityService, updateService, _caspService);\r\n\t\tthis.commodityTypeId = null; // on create, commodity type is not selected\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.view = eDialogViews.CREATE;\r\n\t\tthis.viewCache = this.view;\r\n\r\n\t\t// get a list of commodity types here\r\n\r\n\t\tthis.commodityService.listAllByRanch(this.ranchGuid).then(data => {\r\n\t\t\tthis.commodityTypes = CommodityType.filterAvailable(data);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n     * Get crop types when user selects a commodity type\r\n     * @param commodityTypeId\r\n     */\r\n\tpublic onCommodityTypeSelected(commodityTypeId: number) {\r\n\t\tif (commodityTypeId === null) {\r\n\t\t\tthis.commodityTypeId = null;\r\n\t\t\tthis.selectedCommodityType = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.commodityTypes) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.commodityTypeId = commodityTypeId;\r\n\t\tthis.selectedCommodityType = this.commodityTypes.find(x => x.Id === commodityTypeId);\r\n\r\n\t\tthis.cropTypeService.getAllByRanch(this.ranchGuid,\r\n\t\t\tthis.commodityTypeId).then(data => {\r\n\r\n\t\t\t\tthis.cropTypes = data;\r\n\t\t\t\tthis.validateCropTypes();\r\n\t\t\t\tthis.cropTypesOriginal = ObjectUtility.copyArray(this.cropTypes);\r\n\t\t\t});\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\r\n    <button *ngIf=\"view === dialogViews.UPDATE\"\r\n        type=\"button\"\r\n        class=\"bk-button bk-dialog__close\"\r\n        (click)=\"close()\">\r\n\r\n        <span>&times;</span>\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>\r\n        <ng-container *ngIf=\"view === dialogViews.DELETE_CONFIRMATION\">\r\n            {{ 'Delete' | translate }}\r\n        </ng-container>\r\n        {{ commodityTypeName | translate }}\r\n    </h4>\r\n\r\n    <div mat-dialog-content>\r\n        <ng-container *ngIf=\"view === dialogViews.UPDATE\">\r\n            <label>{{ 'Crop Types' | translate }} \r\n                <info-icon [title]=\"'Crop Types Planting Count Help Text'\"></info-icon>\r\n            </label>\r\n            \r\n            <ng-container *ngFor=\"let cropType of cropTypes\">\r\n                <div class=\"bk-modal__row bk-modal__row--no-border\">\r\n                    <input type=\"checkbox\"\r\n                    class=\"bk-modal__checkbox\"\r\n                    name=\"cropType\"\r\n                    value=\"cropType\"\r\n                    (change)=\"onCropTypeChange()\"\r\n                    [disabled]=\"cropType.PlantingsCount > 0\"\r\n                    [(ngModel)]=\"cropType.IsSelected\" />\r\n                \r\n                    <span>\r\n                        {{cropType.Name | translate }} \r\n                        <span *ngIf=\"cropType.PlantingsCount > 0\">\r\n                            ({{cropType.PlantingsCount}})\r\n                        </span>\r\n                    </span>\r\n                </div>\r\n            </ng-container>\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"view === dialogViews.DISCARD_CHANGES\">\r\n            <div class=\"bk-dialog__paragraph\">\r\n                {{ 'The changes you made were not saved' | translate}}. {{'Discard changes' | translate}}?\r\n            </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"view === dialogViews.DELETE_CONFIRMATION\">\r\n            <div class=\"bk-dialog__paragraph\">\r\n                {{ 'Are you sure you want to delete this commodity type' | translate}}?\r\n            </div>\r\n        </ng-container>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n\r\n        <ng-container *ngIf=\"view === dialogViews.UPDATE\">\r\n            <button (click)=\"view = dialogViews.DELETE_CONFIRMATION\"\r\n                mat-button\r\n                [disabled]=\"plantingsCount > 0\"\r\n                class=\"bk-button bk-button--medium bk-button--text-only\r\n                bk-dialog__button--secondary bk-button--float-left\">\r\n                {{'Delete' | translate }}\r\n                <i *ngIf=\"plantingsCount > 0\"\r\n                    matTooltip=\"{{'Cannot Delete Commodity Type Warning' | translate }}\"\r\n                    class=\"bk-recommendation__icon fa fa-info-circle\">\r\n                </i>\r\n            </button>\r\n    \r\n            <button (click)=\"close()\"\r\n                mat-button\r\n                class=\"bk-button bk-button--medium bk-button--text-only\r\n                bk-dialog__button--secondary\">\r\n                {{ 'Cancel' | translate }}\r\n            </button>\r\n    \r\n            <button (click)=\"save()\"\r\n                mat-button\r\n                class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n                [disabled]=\"isFormValid === false\">\r\n                {{ 'Save' | translate }}\r\n            </button>\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"view === dialogViews.DISCARD_CHANGES\">\r\n\r\n            <button (click)=\"cancelConfirmation()\"\r\n                mat-button\r\n                class=\"bk-button bk-button--medium bk-button--text-only\r\n                bk-dialog__button--secondary\">\r\n                {{ 'Keep Editing' | translate }}\r\n            </button>\r\n\r\n            <button (click)=\"discard()\"\r\n                mat-button\r\n                class=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n                {{ 'Discard' | translate }}\r\n            </button>\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"view === dialogViews.DELETE_CONFIRMATION\">\r\n            <button (click)=\"cancelConfirmation()\"\r\n                mat-button\r\n                class=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\">\r\n                {{ 'Cancel' | translate }}\r\n            </button>\r\n\r\n            <button (click)=\"delete()\"\r\n                mat-button\r\n                class=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n                {{ 'Delete' | translate }}\r\n            </button>\r\n        </ng-container>\r\n    </div>\r\n</div>","import { Component, Inject, OnInit, ViewChild, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { ICommodityTypesRanchJSON, ICommodityTypeDialogInput } from '../../../../models/commodity-type/interfaces';\r\nimport { ICropType } from '../../../../models/crop-type/interfaces';\r\nimport { CropTypeService } from '../../../../models/crop-type/service';\r\nimport { CommodityService } from '../../../../models/commodity-type/service';\r\nimport { CropType } from '../../../../models/crop-type/cropType';\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { eRanchSettingNames } from '../../interfaces';\r\nimport { eDialogViews } from '../../../../interfaces/abstract';\r\nimport { FormComponent } from '../../../shared/form/form';\r\nimport { ObjectUtility } from '../../../../classes/objectUtility';\r\nimport { eCommodityTypes } from '../../../../interfaces/constants';\r\nimport { CookieService } from '../../../../services/cookie.service';\r\nimport { CASPNotNowCookieName } from '../../../../services/constants';\r\nimport { CaspService } from '../../../casp-dialog/casp.service';\r\nimport { CaspDialogComponent } from '../../../casp-dialog/casp-dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'commodity-type-dialog',\r\n\ttemplateUrl: 'dialog.html'\r\n})\r\n\r\nexport class CommodityTypeDialog extends FormComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic model: ICommodityTypesRanchJSON;\r\n\tpublic commodityTypeId: number;\r\n\tpublic commodityTypeName: string;\r\n\tpublic cropTypes: ICropType[];\r\n\tpublic isSaving: boolean;\r\n\r\n\tprotected ranchGuid: string;\r\n\tprotected plantingsCount: number;\r\n\r\n\tpublic dialogViews = eDialogViews;\r\n\r\n\tpublic view: eDialogViews;\r\n\tpublic viewCache: eDialogViews;\r\n\tpublic isFormValid: boolean;\r\n\r\n\tpublic formErrors = {\r\n\t\t'commodityTypeId': '',\r\n\t};\r\n\r\n\tpublic validationMessages = {\r\n\t\t'commodityTypeId': {\r\n\t\t\t'required': 'commodity type is required.',\r\n\t\t},\r\n\t};\r\n\r\n\tprotected cropTypesOriginal: ICropType[];\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprotected _dialog: MatDialog,\r\n\t\tpublic dialogRef: MatDialogRef<CommodityTypeDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: ICommodityTypeDialogInput,\r\n\t\tprotected cropTypeService: CropTypeService,\r\n\t\tprotected commodityService: CommodityService,\r\n\t\tprotected updateService: UpdateService,\r\n\t\tprotected _caspService: CaspService\r\n\t) {\r\n\r\n\t\tsuper();\r\n\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.ranchGuid = data.ranchGuid;\r\n\t\tthis.commodityTypeId = data.commodityTypeId;\r\n\t\tthis.commodityTypeName = data.commodityTypeName;\r\n\t\tthis.plantingsCount = data.plantingsCount;\r\n\t\tthis.isFormValid = false;\r\n\r\n\t\t// custom click outside behavior\r\n\t\tthis.dialogRef.disableClose = true;\r\n\r\n\t\tthis.dialogRef.backdropClick().pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\t// Close the dialog or show keep/discard\r\n\t\t\tif (ObjectUtility.isEqual(this.cropTypes, this.cropTypesOriginal)) {\r\n\t\t\t\tthis.dialogRef.close();\r\n\t\t\t} else {\r\n\t\t\t\tthis.view = eDialogViews.DISCARD_CHANGES;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.isSaving = false;\r\n\t\tthis.view = eDialogViews.UPDATE;\r\n\t\tthis.viewCache = this.view;\r\n\r\n\t\tthis.cropTypeService.getAllByRanch(this.ranchGuid,\r\n\t\t\tthis.commodityTypeId).then(data => {\r\n\r\n\t\t\t\tthis.cropTypes = data;\r\n\t\t\t\tthis.validateCropTypes();\r\n\r\n\t\t\t\tthis.cropTypesOriginal = ObjectUtility.copyArray(this.cropTypes);\r\n\t\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tif (ObjectUtility.isEqual(this.cropTypes, this.cropTypesOriginal)) {\r\n\t\t\tthis.dialogRef.close();\r\n\t\t} else {\r\n\t\t\tthis.view = eDialogViews.DISCARD_CHANGES;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic discard(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n\r\n\tpublic cancelConfirmation(): void {\r\n\t\tthis.view = this.viewCache;\r\n\t}\r\n\r\n\tpublic save(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\t// assume if user can click the \"save\" button, form is valid\r\n\t\tthis.commodityService.saveByRanch(this.ranchGuid, this.commodityTypeId,\r\n\t\t\tCropType.getIdsFromArray(this.cropTypes)).then(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\r\n\t\t\t\tthis.updateService.setRanchSettingsUpdated(\r\n\t\t\t\t\teRanchSettingNames.commodityTypes);\r\n\r\n\t\t\t\tthis.dialogRef.close();\r\n\r\n\t\t\t\tthis._openCaspDialog();\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.commodityService.deleteByRanch(this.ranchGuid, this.commodityTypeId).then(() => {\r\n\t\t\tthis.isSaving = false;\r\n\r\n\t\t\tthis.updateService.setRanchSettingsUpdated(\r\n\t\t\t\teRanchSettingNames.commodityTypes);\r\n\r\n\t\t\tthis.dialogRef.close();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _openCaspDialog(): void {\r\n\t\tif (this.commodityTypeId !== eCommodityTypes.ALMOND) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (CookieService.get(CASPNotNowCookieName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// check cookies\r\n\r\n\t\tthis._caspService.shouldPrompt(this.updateService.currentRanchId).then(response => {\r\n\r\n\t\t\tif (response === false) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._dialog.open(CaspDialogComponent, {\r\n\t\t\t\tdisableClose: false,\r\n\t\t\t\twidth: '800px',\r\n\t\t\t\tdata: {\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tpublic onCropTypeChange(): void {\r\n\t\tthis.validateCropTypes();\r\n\t}\r\n\r\n\t/**\r\n     * Validate crop types.\r\n     * 1. At least one crop type must be selected\r\n     * 2. A crop type with planting count > 0 should not be deselected\r\n     */\r\n\tprotected validateCropTypes(cropTypeId?: number): void {\r\n\t\tlet count: number;\r\n\t\tlet countAssociated: number;\r\n\r\n\t\tcount = 0;\r\n\t\tcountAssociated = 0;\r\n\r\n\t\tif (!this.cropTypes || this.cropTypes.length === 0) {\r\n\t\t\tthis.isFormValid = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let cropType of this.cropTypes) {\r\n\t\t\tif (cropTypeId && cropType.Id === cropTypeId && cropType.IsSelected === false) {\r\n\t\t\t\tcount++ // (clicked) is triggered before model change happens,\r\n\t\t\t\t// so we catch it here. even if selected, at this point, value would be false\r\n\t\t\t} else if (cropType.IsSelected) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\r\n\t\t\tif (cropType.PlantingsCount > 0 && cropType.IsSelected === false) {\r\n\t\t\t\tcountAssociated++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (count === 0) {\r\n\t\t\tthis.isFormValid = false;\r\n\t\t} else if (countAssociated > 0) {\r\n\t\t\tthis.isFormValid = false;\r\n\t\t} else {\r\n\t\t\tthis.isFormValid = true;\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\r\n\t<button type=\"button\"\r\n        class=\"bk-button bk-dialog__close\"\r\n        (click)=\"cancel()\">\r\n\r\n        &times;\r\n\t</button>\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\t{{ 'Email User'  | translate }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<div class=\"bk-form-group\">\r\n\t\t\t<label class=\"bk-modal__label\"\r\n\t\t\t\tfor=\"cc\">\r\n\t\t\t\t{{'To' | translate}}\r\n\t\t\t</label>\r\n\t\t\t<input disabled\r\n\t\t\t\tclass=\"bk-modal__field bk-input--full\"\r\n\t\t\t\tid=\"cc\"\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\t[(ngModel)]=\"email.recipientName\">\r\n\t\t</div>\r\n\t\t<div class=\"bk-form-group\">\r\n\t\t\t<label class=\"bk-modal__label\"\r\n\t\t\t\tfor=\"subject\">\r\n\t\t\t\t{{'Subject' | translate}}\r\n\t\t\t</label>\r\n\t\t\t<input class=\"bk-modal__field bk-input--full\"\r\n\t\t\t\tid=\"subject\"\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\t[(ngModel)]=\"email.subject\">\r\n\t\t</div>\r\n\t\t<div class=\"bk-form-group\">\r\n\t\t\t<label class=\"bk-modal__label\"\r\n\t\t\t\tfor=\"body\">\r\n\t\t\t\t{{'Message' | translate}}\r\n\t\t\t</label>\r\n\t\t\t<textarea class=\"bk-modal__field bk-input--full\"\r\n\t\t\t\tid=\"body\"\r\n\t\t\t\trows=\"6\"\r\n\t\t\t\t[(ngModel)]=\"email.body\" >\r\n\t\t\t</textarea>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button (click)=\"cancel()\" mat-button\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--secondary bk-button--text-only\">\r\n\t\t\t{{ 'Cancel' | translate }}\r\n\t\t</button>\r\n\r\n\t\t<button\r\n\t\t\t[disabled]=\"isValid() === false\"\r\n\t\t\t(click)=\"send()\"\r\n\t\t\tmat-button\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t\t{{ 'Send' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { NotificationService } from '../../../../services/notification.service';\r\nimport { UserService } from '../../../../models/user/service';\r\nimport { eNotificationTypes } from '../../../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'email-ranch-owner',\r\n\ttemplateUrl: 'email.html'\r\n})\r\n\r\nexport class EmailRanchOwnerDialog implements OnInit {\r\n\r\n\tpublic email: {\r\n\t\tto: string,\r\n\t\trecipientName: string,\r\n\t\tsubject: string,\r\n\t\tbody: string\r\n\t};\r\n\r\n\tpublic recipientName: string;\r\n\r\n\tconstructor(\r\n\t\tpublic dialogRef: MatDialogRef<EmailRanchOwnerDialog>,\r\n\t\tpublic notificationService: NotificationService,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: { to: string, recipientName: string },\r\n\t\tpublic service: UserService\r\n\r\n\t) {\r\n\t\t// disable click outside\r\n\t\tthis.dialogRef.disableClose = true;\r\n\r\n\t\tif (!data) {\r\n\t\t\tthis.email = {\r\n\t\t\t\tto: '',\r\n\t\t\t\trecipientName: '',\r\n\t\t\t\tsubject: '',\r\n\t\t\t\tbody: ''\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.email = {\r\n\t\t\t\tto: data.to,\r\n\t\t\t\trecipientName: data.recipientName,\r\n\t\t\t\tsubject: '',\r\n\t\t\t\tbody: ''\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n\r\n\tpublic isValid(): boolean {\r\n\t\tif (!this.email || !this.email.to || !this.email.subject || !this.email.body) {\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic send(): void {\r\n\t\tthis.service.emailRanchOwner(this.email.to, this.email.subject, this.email.body)\r\n\t\t.then(() => {\r\n\t\t\tthis.dialogRef.close();\r\n\r\n\t\t\tthis.notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\tmessage: 'Your message was sent successfully.'\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tpublic cancel(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n}\r\n","import { FertilizerNutrientViewModel, NutrientJSONModel, RanchFertilizerViewModel, NutrientTotalValidationErrors } from './interfaces';\r\n\r\nexport class Fertilizer {\r\n\tpublic static convertNutrient(nutrients: NutrientJSONModel[]): FertilizerNutrientViewModel[] {\r\n\t\tlet result: FertilizerNutrientViewModel[];\r\n\r\n\t\tresult = new Array();\r\n\r\n\t\tif (!nutrients || nutrients.length === 0) {\r\n\t\t\treturn new Array();\r\n\t\t}\r\n\r\n\t\tfor (let nutrient of nutrients) {\r\n\t\t\tlet item: FertilizerNutrientViewModel;\r\n\r\n\t\t\titem = {\r\n\t\t\t\tName: nutrient.Name,\r\n\t\t\t\tNutrientId: nutrient.Id,\r\n\t\t\t\tInvalid: false,\r\n\t\t\t\tPercentage: nutrient.Percentage\r\n\t\t\t};\r\n\r\n\t\t\tresult.push(item);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Used in fertilizer dialog to display and validate nutrient total percentage\r\n\t */\r\n\tpublic static calculateTotalPercentage(fertilizer: RanchFertilizerViewModel): number {\r\n\r\n\t\tlet result: number;\r\n\r\n\t\tresult = 0;\r\n\r\n\t\tfor (let nutrient of fertilizer.Nutrients) {\r\n\t\t\tresult += nutrient.Percentage;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static validateNutrientTotal(total: number): NutrientTotalValidationErrors {\r\n\t\tif (total > 100) {\r\n\t\t\treturn NutrientTotalValidationErrors.TOTAL_TOO_BIG;\r\n\t\t} else if (total <= 0) {\r\n\t\t\treturn NutrientTotalValidationErrors.TOTAL_NOT_GREATER_THAN_ZERO;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\r\n\t<button type=\"button\"\r\n\t\tclass=\"bk-button bk-dialog__close\"\r\n\t\t(click)=\"close()\">\r\n\r\n\t\t&times;\r\n\t</button>\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\t{{ 'Add' | translate }} {{'Fertilizer(s)' | translate }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<div class=\"fertilizer-container bk-modal__left bk-modal__left-fertilizers\">\r\n\r\n\t\t\t<div class=\"bk-modal__left-fertilizer-options block\">\r\n\r\n\t\t\t\t<!-- radio options -->\r\n\r\n\t\t\t\t<mat-radio-group aria-label=\"\"\r\n\t\t\t\t\tname=\"fertilizerAddChoice\"\r\n\t\t\t\t\t[(ngModel)]=\"chooseFromList\">\r\n\r\n\t\t\t\t\t<span *ngFor=\"let state of addStates\"\r\n\t\t\t\t\t[class.bk-selected]=\"state.value === chooseFromList\"\r\n\t\t\t\t\tclass=\"bk-modal__label bk-modal__left-fertilizer-option\">\r\n\r\n\t\t\t\t\t\t<mat-radio-button [value]=\"state.value\"\r\n\t\t\t\t\t\t[disabled]=\"state.value && areThereFertilizers\"\r\n\t\t\t\t\t\t\tname=\"fertilizerAddChoice\">\r\n\t\t\t\t\t\t\t{{state.display}}\r\n\t\t\t\t\t\t</mat-radio-button>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-radio-group>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<ng-container *ngIf='fertilizers && chooseFromList'>\r\n\t\t\t<fertilizer-list [fertilizers]='fertilizers'>\r\n\t\t\t</fertilizer-list>\r\n\t\t</ng-container>\r\n\t\t<ng-container *ngIf='chooseFromList === false'>\r\n\t\t\t<fertilizer-edit [fertilizer]='fertilizer'\r\n\t\t\t\t(form)='updateFormState($event)'>\r\n\t\t\t</fertilizer-edit>\r\n\t\t</ng-container>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t(click)=\"close()\">\r\n\t\t\t{{'Cancel' | translate }}\r\n\t\t</button>\r\n\r\n\t\t<button class=\"bk-button bk-button--medium\"\r\n\t\t\t*ngIf=\"chooseFromList\"\r\n\t\t\t[disabled]=\"areFertilizersSelected === false\"\r\n\t\t\t(click)=\"addSelectedFertilizers()\">\r\n\t\t\t{{'Add Selected Fertilizer(s)' | translate }}\r\n\t\t</button>\r\n\r\n\t\t<button [disabled]=\"isFormValid === false\"\r\n\t\t\tclass=\"bk-button bk-button--medium\"\r\n\t\t\t*ngIf=\"!chooseFromList\"\r\n\t\t\t(click)=\"create()\">\r\n\t\t\t{{'Add Custom Fertilizer' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnInit, OnChanges, DoCheck } from '@angular/core';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport * as _ from 'underscore';\r\n\r\nimport { FertilizerModelService } from './service';\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { FertilizerBaseDialog } from './fertilizer.dialog.base';\r\nimport { IFertilizer } from './interfaces';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { eFertilizerFormulationTypes } from '../../../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'fertilizer-create-dialog',\r\n\ttemplateUrl: 'fertilizer.create.dialog.html',\r\n\tstyleUrls: ['fertilizer.create.dialog.scss']\r\n})\r\n\r\nexport class FertilizerCreateDialog extends FertilizerBaseDialog implements OnInit, DoCheck {\r\n\r\n\tpublic addStates: { value: boolean, display: string }[];\r\n\tpublic chooseFromList: boolean;\r\n\tpublic fertilizers: IFertilizer[];\r\n\tpublic areFertilizersSelected: boolean;\r\n\tpublic areThereFertilizers: boolean;\r\n\tpublic isFormValid = true;\r\n\tpublic isSaving: boolean;\r\n\tprivate isTouched = false;\r\n\r\n\tconstructor(\r\n\t\tprotected _dialog: MatDialog,\r\n\t\tpublic _dialogRef: MatDialogRef<FertilizerCreateDialog>,\r\n\t\tprivate service: FertilizerModelService,\r\n\t\tprivate updateService: UpdateService,\r\n\t) {\r\n\t\tsuper(_dialog, null);\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.chooseFromList = true;\r\n\t\tthis.areFertilizersSelected = false;\r\n\t\tthis.isSaving = false;\r\n\r\n\t\tthis.addStates = [\r\n\t\t\t{ value: true, display: 'Choose from List' },\r\n\t\t\t{ value: false, display: 'Create a custom fertilizer' }\r\n\t\t];\r\n\r\n\t\tthis._get();\r\n\t}\r\n\r\n\tngDoCheck(): void {\r\n\t\tthis.areFertilizersSelected = this._areFertilizersSelected();\r\n\t\tthis.areThereFertilizers = this._isFertilizerListEmpty();\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\r\n\t\tif (!this.isTouched) {\r\n\t\t\tthis._dialogRef.close();\r\n\t\t} else {\r\n\t\t\tthis._openKeepDiscardDialog();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic addSelectedFertilizers(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.service.addBatch(this.fertilizers.filter(fertilizer => fertilizer.checked).map(fertilizer => fertilizer.Id))\r\n\t\t.then(() => {\r\n\t\t\tthis.isSaving = false;\r\n\t\t\tthis.updateService.setRanchSettingsUpdated('fertilizers');\r\n\t\t\tthis._dialogRef.close();\r\n\t\t});\r\n\t}\r\n\r\n\tpublic create(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.service.add(this.fertilizer)\r\n\t\t.then(() => {\r\n\t\t\tthis.isSaving = false;\r\n\t\t\tthis.updateService.setRanchSettingsUpdated('fertilizers');\r\n\t\t\tthis._dialogRef.close();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Prevent or allow user to save based on form validation.\r\n\t * If user touched the form, ask for keep/discard instead of immediately closing the dialog\r\n\t *\r\n\t * duplicate code\r\n\t */\r\n\tpublic updateFormState(form: FormGroup): void {\r\n\t\tif (!form) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isTouched = form.pristine ? false : true;\r\n\t\tthis.isFormValid = form.invalid ? false : true;\r\n\t}\r\n\r\n\tprivate _isFertilizerListEmpty(): boolean {\r\n\r\n\t\tif (!this.fertilizers || this.fertilizers.length === 0) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _get(): void {\r\n\r\n\t\tthis.service.getCreateModel().then(data => {\r\n\t\t\tthis.fertilizer = data;\r\n\t\t\tthis.fertilizer.FormulationTypeId = eFertilizerFormulationTypes.DRY;\r\n\t\t});\r\n\r\n\t\tthis.service.listAvailable().then((fertilizers: IFertilizer[]) => {\r\n\t\t\tthis.fertilizers = fertilizers;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _areFertilizersSelected(): boolean {\r\n\t\tlet count: number;\r\n\r\n\t\tif (!this.fertilizers || this.fertilizers.length === 0) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tcount = this.fertilizers.filter(x => x.checked === true).length;\r\n\r\n\t\tif (count > 0) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\t{{'Remove' | translate }} {{'Fertilizer' | translate }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<div class=\"bk-modal__remove-text\">\r\n\t\t\t{{'Remove Fertilizer Text 1' | translate }}: <strong>{{ fertilizer.name }}</strong>?\r\n\t\t</div>\r\n\t\t<div class=\"bk-modal__remove-text\">\r\n\t\t\t{{'Remove Fertilizer Text 2' | translate }}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t(click)=\"close()\">\r\n\t\t\t{{'Cancel' | translate }}\r\n\t\t</button>\r\n\t\t<button class=\"bk-button bk-button--medium\"\r\n\t\t\t(click)=\"remove()\">\r\n\t\t\t{{'Remove Fertilizer' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnInit, Input, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { FertilizerModelService } from './service';\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { NotificationService } from '../../../../services/notification.service';\r\nimport { eNotificationTypes } from '../../../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'fertilizer-delete-dialog',\r\n\ttemplateUrl: 'fertilizer.delete.dialog.html'\r\n})\r\n\r\nexport class FertilizerDeleteDialog implements OnInit {\r\n\r\n\tpublic fertilizer: {\r\n\t\tid: number,\r\n\t\tname: string\r\n\t};\r\n\r\n\tpublic isSaving: boolean;\r\n\r\n\tpublic constructor(\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<FertilizerDeleteDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { id: number, name: string },\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate service: FertilizerModelService,\r\n\t\tprivate updateService: UpdateService\r\n\t) {\r\n\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.isSaving = false;\r\n\t\tthis.fertilizer = this._data;\r\n\t}\r\n\r\n\tpublic remove(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.service.delete(this.fertilizer.id)\r\n\t\t.then((errorMessage) => {\r\n\t\t\tthis.isSaving = false;\r\n\r\n\t\t\tif (errorMessage) {\r\n\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\tmessage: errorMessage\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis.updateService.setRanchSettingsUpdated('fertilizers');\r\n\t\t\t}\r\n\r\n\t\t\tthis._dialog.closeAll();\r\n\t\t});\r\n\t}\r\n\r\n\tpublic close() {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","import { RanchFertilizerViewModel, NutrientTotalValidationErrors } from './interfaces';\r\nimport { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { FertilizerDeleteDialog } from './fertilizer.delete.dialog';\r\nimport { Inject } from '@angular/core';\r\nimport { Fertilizer } from './fertilizer.class';\r\nimport { KeepDiscardDialog } from './keep-discard.dialog';\r\n\r\nexport class FertilizerBaseDialog {\r\n\r\n\tprotected id: number;\r\n\tpublic usage: number;\r\n\tpublic fertilizer: RanchFertilizerViewModel;\r\n\r\n\tpublic nutrientTotalPercentage: {\r\n\t\ttotal: number,\r\n\t\tvalidationError: NutrientTotalValidationErrors\r\n\t};\r\n\r\n\tpublic validationErrors = NutrientTotalValidationErrors;\r\n\r\n\tconstructor(\r\n\t\tprotected _dialog: MatDialog,\r\n\t\t@Inject(MAT_DIALOG_DATA) protected _data: { id: number, usage: number }\r\n\t) {\r\n\t\tif (this._data) { // if adding fertilizers or creating a new one, id will not exist\r\n\t\t\tthis.id = this._data.id;\r\n\t\t\tthis.usage = this._data.usage;\r\n\t\t}\r\n\r\n\t\tthis.nutrientTotalPercentage = {\r\n\t\t\ttotal: 0,\r\n\t\t\tvalidationError: null\r\n\t\t};\r\n\t}\r\n\r\n\tprotected _openKeepDiscardDialog(): void {\r\n\t\tthis._dialog.open(KeepDiscardDialog, {\r\n\t\t\twidth: '690px',\r\n\t\t\tdisableClose: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\r\n\t\tif (!this.fertilizer) {\r\n\t\t\tthrow new Error('fertilizer data is empty');\r\n\t\t}\r\n\r\n\t\tif (!this._dialog) {\r\n\t\t\tthrow new Error('FertilizerBaseDialog:delete() - this.dialog is empty');\r\n\t\t}\r\n\r\n\t\tthis._dialog.open(FertilizerDeleteDialog, {\r\n\t\t\twidth: '690px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: {\r\n\t\t\t\tid: this.id,\r\n\t\t\t\tname: this.fertilizer.Name\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected _calculateTotalPercentage(): void {\r\n\t\tthis.nutrientTotalPercentage.total = Fertilizer.calculateTotalPercentage(this.fertilizer);\r\n\r\n\t\tthis.nutrientTotalPercentage.validationError =\r\n\t\t\tFertilizer.validateNutrientTotal(this.nutrientTotalPercentage.total);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\r\n\t<button type=\"button\"\r\n\t\tclass=\"bk-button bk-dialog__close\"\r\n\t\t(click)=\"close()\">\r\n\r\n\t\t&times;\r\n\t</button>\r\n\r\n\t<h4 mat-dialog-title\r\n\t\t*ngIf='fertilizer'>\r\n\t\t{{'Edit' | translate }} {{ fertilizer.Name }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content\r\n\t\t*ngIf='fertilizer'>\r\n\t\t<fertilizer-edit [fertilizer]='fertilizer'\r\n\t\t\t(form)='updateFormState($event)'>\r\n\t\t</fertilizer-edit>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button *ngIf='!usage' \r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--secondary\r\n\t\t\tbk-button--text-only bk-button--float-left\"\r\n\t\t\t(click)=\"delete()\">\r\n\t\t\t{{'Remove Fertilizer' | translate }}\r\n\t\t</button>\r\n\r\n\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t(click)=\"close()\">\r\n\t\t\t{{'Cancel' | translate }}\r\n\t\t</button>\r\n\r\n\t\t<button matt-button\r\n\t\t\t[disabled]=\"isFormValid === false\"\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n\t\t\t(click)=\"save()\">\r\n\t\t\t{{'Save Changes' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { RanchFertilizerViewModel } from './interfaces';\r\nimport { FertilizerBaseDialog } from './fertilizer.dialog.base';\r\nimport { FertilizerModelService } from './service';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { UpdateService } from '../../../../services/update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'fertilizer-edit-dialog',\r\n\ttemplateUrl: 'fertilizer.edit.dialog.html'\r\n})\r\n\r\nexport class FertilizerEditDialog extends FertilizerBaseDialog implements OnInit {\r\n\r\n\tpublic fertilizer: RanchFertilizerViewModel;\r\n\tpublic isFormValid = true;\r\n\tpublic isTouched = false;\r\n\tpublic isSaving: boolean;\r\n\r\n\tpublic constructor(\r\n\t\tprotected _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<FertilizerEditDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) protected _data: { id: number, usage: number },\r\n\t\tprivate service: FertilizerModelService,\r\n\t\tprivate updateService: UpdateService\r\n\t) {\r\n\t\tsuper(_dialog, _data);\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.isSaving = false;\r\n\t\tthis._getEditModel(this.id);\r\n\t}\r\n\r\n\tpublic close() {\r\n\t\tif (!this.isTouched) {\r\n\t\t\tthis._dialogRef.close();\r\n\t\t} else {\r\n\t\t\tthis._openKeepDiscardDialog();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * editRanchFertilzer\r\n\t */\r\n\tpublic save(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.service.update(this.id, this.fertilizer)\r\n\t\t.then(() => {\r\n\t\t\tthis.isSaving = false;\r\n\t\t\tthis.updateService.setRanchSettingsUpdated('fertilizers');\r\n\t\t\tthis._dialogRef.close();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Prevent or allow user to save based on form validation.\r\n\t * If user touched the form, ask for keep/discard instead of immediately closing the dialog\r\n\t */\r\n\tpublic updateFormState(form: FormGroup): void {\r\n\t\tif (!form) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isTouched = form.pristine ? false : true;\r\n\t\tthis.isFormValid = form.invalid ? false : true;\r\n\t}\r\n\r\n\tprivate _getEditModel(id: number): void {\r\n\t\tthis.service.getEditModel(id)\r\n\t\t.then(data => {\r\n\r\n\t\t\tif (!data) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.fertilizer = data;\r\n\t\t});\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\r\n\t<button type=\"button\"\r\n\t\tclass=\"bk-button bk-dialog__close\"\r\n\t\t(click)=\"close()\">\r\n\r\n\t\t&times;\r\n\t</button>\r\n\r\n\t<h4 mat-dialog-title\r\n\t\t*ngIf='fertilizer'>\r\n\t\t{{ fertilizer.Name }} {{ 'Details' | translate }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content\r\n\t\t*ngIf=\"fertilizer\">\r\n\t\t\r\n\t\t<div class=\"cm-dialog__form-section\">\r\n\t\t\t<div class=\"cm-dialog__label\">\r\n\t\t\t\t{{'Fertilizer Name' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<div class=\"cm-dialog__text-below-label--large\">\r\n\t\t\t\t{{fertilizer.Name}}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"cm-dialog__form-section\"\r\n\t\t\t*ngIf='fertilizer.FormulationType'>\r\n\r\n\t\t\t<div class=\"cm-dialog__label\">\r\n\t\t\t\t{{'Formulation' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<div class=\"cm-dialog__text-below-label--large\">\r\n\t\t\t\t{{fertilizer.FormulationType.Name | translate }}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\r\n\t\t<div class=\"cm-dialog__form-section\"\r\n\t\t\t*ngIf='fertilizer.FormulationTypeId === formulationTypes.WET'>\r\n\r\n\t\t\t<div class=\"cm-dialog__label\">\r\n\t\t\t\t{{'Fertilizer Density' | translate }}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"cm-dialog__text-below-label--large\"\r\n\t\t\t\t[ngClass]=\"{'bk-invalid': fertilizer.PoundsPerGallon === 0}\">\r\n\t\t\t\t{{fertilizer.PoundsPerGallon}} {{'lbs' | translate}}/{{'gal' | translate}}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div *ngIf=\"fertilizer.PoundsPerGallon === 0\"\r\n\t\t\t\tclass=\"bk-invalid\">\r\n\t\t\t\t{{'Wet fertilizer lbs/gallon must be greater than zero' | translate }}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t\r\n\t\t<div class=\"cm-nutrients__section\">\r\n\t\t\t<h4 class=\"bk-modal__section-title\">\r\n\t\t\t\t{{'Nutrients' | translate }}\r\n\t\t\t</h4>\r\n\t\t\r\n\t\t\t<div class=\"cm-nutrients-list\">\r\n\t\t\t\t<div class=\"cm-dialog__form-section cm-nutrients-list__col\"\r\n\t\t\t\t\t*ngFor=\"let nutrient of fertilizer.Nutrients\">\r\n\r\n\t\t\t\t\t<div class=\"cm-dialog__label\">\r\n\t\t\t\t\t\t{{nutrient.Name | translate}}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"cm-dialog__text-below-label\">\r\n\t\t\t\t\t\t{{nutrient.Percentage}} %\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\r\n\t\t\t<div [class.bk-text--error]=\"totalInvalid\"\r\n\t\t\t\tclass=\"bk-clearfix\">\r\n\t\t\t\t<span class=\"cm-nutrients__percentage-label\">\r\n\t\t\t\t\t{{'Total Nutrients' | translate }}:\r\n\t\t\t\t</span>\r\n\t\t\t\t<span class=\"cm-nutrients__percentage\">\r\n\t\t\t\t\t{{nutrientTotalPercentage.total}}%\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t\t<div *ngIf=\"nutrientTotalPercentage.validationError === validationErrors.TOTAL_TOO_BIG\"\r\n\t\t\t\tclass=\"bk-invalid-text--nutrient bk-invalid\">\r\n\t\t\t\t{{'Total cannot exceed 100%' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<div *ngIf=\"nutrientTotalPercentage.validationError === validationErrors.TOTAL_NOT_GREATER_THAN_ZERO\"\r\n\t\t\t\tclass=\"bk-invalid-text--nutrient bk-invalid\">\r\n\t\t\t\t{{'Total must be greater than 0%' | translate }}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button *ngIf='!usage'\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--secondary\r\n\t\t\tbk-button--text-only bk-button--float-left\"\r\n\t\t\t(click)=\"delete()\">\r\n\t\t\t{{'Remove Fertilizer' | translate }}\r\n\t\t</button>\r\n\r\n\t\t<button matt-button\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n\t\t\t(click)=\"close()\">\r\n\t\t\t{{'Done' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport * as _ from 'underscore';\r\n\r\nimport { NotificationService } from '../../../../services/notification.service';\r\nimport { FertilizerModelService } from './service';\r\nimport { eFertilizerFormulationTypes } from '../../../../interfaces/constants';\r\nimport { FertilizerBaseDialog } from './fertilizer.dialog.base'\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'fertilizer-view-dialog',\r\n\ttemplateUrl: 'fertilizer.view.dialog.html',\r\n\tstyleUrls: ['fertilizer.view.dialog.scss']\r\n})\r\n\r\n/**\r\n * Usage: View an uneditable, OOTB fertilizer associated with a user's ranch\r\n */\r\nexport class FertilizerViewDialog extends FertilizerBaseDialog implements OnInit {\r\n\r\n\tpublic formulationTypes = eFertilizerFormulationTypes;\r\n\r\n\tconstructor(\r\n\t\tprotected _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<FertilizerViewDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) protected _data: { id: number, usage: number },\r\n\t\tprivate _service: FertilizerModelService,\r\n\t\tprivate _notification: NotificationService\r\n\t) {\r\n\t\tsuper(_dialog, _data);\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\r\n\t\tthis._getViewModel(this.id).then(() => {\r\n\t\t\tthis._calculateTotalPercentage();\r\n\t\t});\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tprivate _getViewModel(fertilizerId: number): Promise<void> {\r\n\t\treturn this._service.view(fertilizerId)\r\n\t\t\t.then(data => {\r\n\t\t\t\tif (!data) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.fertilizer = data;\r\n\t\t\t})\r\n\t\t\t.catch(() => {\r\n\t\t\t\t//\r\n\t\t\t})\r\n\t}\r\n}\r\n","import { IIdNamePair } from '../../../../interfaces/abstract';\r\nimport { IFertilizerProperties } from '../../../fertilization-event/interfaces';\r\n\r\nexport interface IFormFertilizer {\r\n\tId: number,\r\n\tName: String\r\n}\r\n\r\n/**\r\n * References: Ranch setting: fertilizer list,\r\n * \tlistAvailable (OOTB fertilizers not associated with a ranch)\r\n */\r\nexport interface IFertilizer {\r\n\tDescription: string,\r\n\tEditable: boolean,\r\n\tFormulationType: { Id: number, Name: string },\r\n\tId: number,\r\n\tIsPrivate: boolean,\r\n\tLbsPerGallon: number,\r\n\tName: string,\r\n\tOwnerRanchId: number,\r\n\tPercentageN: number,\r\n\tPoundsPerGallons: number,\r\n\tUsage: number, // number of events associated with this fertilizer\r\n\tNutrients: string[],\r\n\t// virtual\r\n\tchecked?: boolean,\r\n}\r\n\r\n/**\r\n * Copy of C# version of the same name\r\n */\r\nexport interface RanchFertilizerViewModel {\r\n\tName: string,\r\n\tFormulationTypeId: number,\r\n\tPoundsPerGallon: number,\r\n\tIsPrivate: boolean,\r\n\tOwnerRanchId: boolean,\r\n\tNutrients: FertilizerNutrientViewModel[]\r\n\r\n\t// virtual\r\n\r\n\tFormulationType: IIdNamePair\r\n}\r\n\r\nexport interface FertilizerViewModel {\r\n\tPageTitle: string,\r\n\tWetFormulationTypeId: number,\r\n\tModel: RanchFertilizerViewModel,\r\n\tFormulationTypes: IIdNamePair[],\r\n\tNutrients: NutrientJSONModel[]\r\n}\r\n\r\nexport interface FertilizerNutrientViewModel {\r\n\tName: string,\r\n\tNutrientId: number,\r\n\tPercentage: number,\r\n\r\n\t// virtual\r\n\r\n\tInvalid: boolean\r\n}\r\n\r\nexport interface NutrientJSONModel {\r\n\tId: number,\r\n\tName: string,\r\n\tName_Alt: string,\r\n\tNutrientTypeId: number,\r\n\tSymbol: string,\r\n\tMeasureUnitTypeId: number,\r\n\tTissueMeasureUnitTypeId?: number,\r\n\tMeasurementUnit: IIdNamePair,\r\n\tPercentage: number,\r\n\tvalue?: number\r\n}\r\n\r\n/** percentage validation errors */\r\nexport enum NutrientTotalValidationErrors {\r\n\tTOTAL_TOO_BIG = 1,\r\n\tTOTAL_NOT_GREATER_THAN_ZERO\r\n}\r\n\r\nexport interface IFertilizerModelService {\r\n\tview(fertilizerId: number): Promise<RanchFertilizerViewModel>,\r\n\tgetEditModel(id: number): Promise<RanchFertilizerViewModel>,\r\n\tgetCreateModel(): Promise<RanchFertilizerViewModel>,\r\n\tadd(fertilizer: RanchFertilizerViewModel): Promise<Object>,\r\n\taddBatch(fertilizers: number[]): Promise<void>,\r\n\tgetByRanchId(ranchId: string): Promise<IFertilizer[]>,\r\n\tupdate(id: number, fertilizer: RanchFertilizerViewModel): Promise<IIdNamePair>,\r\n\tdelete(id: number): Promise<string>,\r\n\tlistAvailable(): Promise<IFertilizer[]>,\r\n\tgetProperties(id: number): Promise<IFertilizerProperties>,\r\n}\r\n","<div class=\"bk-dialog\">\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\t{{'Changes not saved' | translate }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<p>\r\n\t\t\t{{'The changes you made were not saved. Discard changes?' | translate }}\r\n\t\t</p>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t(click)=\"keep()\">\r\n\t\t\t{{'Keep Editing' | translate }}\r\n\t\t</button>\r\n\t\t<button class=\"bk-button bk-button--medium\"\r\n\t\t\t(click)=\"discard()\">\r\n\t\t\t{{'Discard' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnInit, Input, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'keep-discard-dialog',\r\n\ttemplateUrl: 'keep-discard.dialog.html'\r\n})\r\n\r\nexport class KeepDiscardDialog implements OnInit {\r\n\r\n\tpublic constructor(\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<KeepDiscardDialog>,\r\n\t) {\r\n\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n\r\n\tpublic keep(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tpublic discard() {\r\n\t\tthis._dialog.closeAll();\r\n\t}\r\n}\r\n","<div class=\"block bk-modal__right bk-modal__right-fertilizers\">\r\n\t<div class=\"bk-modal__right-fertilizers__form\">\r\n\t\t<form #f=\"ngForm\" *ngIf=\"fertilizer\">\r\n\t\t\t<div class=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n\t\t\t\t<mat-form-field appearance=\"fill\" class=\"mat-form-field--short\">\r\n\t\t\t\t\t<mat-label>\r\n\t\t\t\t\t\t{{'Fertilizer Name' | translate }}\r\n\t\t\t\t\t</mat-label>\r\n\t\t\t\t\t<input matInput\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t\tname=\"Name\"\r\n\t\t\t\t\t\t[(ngModel)]=\"fertilizer.Name\"/>\r\n\t\t\t\t\t<mat-error *ngIf=\"formErrors.Name\">\r\n\t\t\t\t\t\t{{ formErrors.Name | translate }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</mat-form-field>\r\n\r\n\t\t\t\t<mat-form-field appearance=\"fill\"\r\n\t\t\t\t\tclass=\"mat-form-field--one-line mat-form-field--short\">\r\n\t\t\t\t\t<mat-label>\r\n\t\t\t\t\t\t{{'Formulation' | translate }}\r\n\t\t\t\t\t</mat-label>\r\n\t\t\t\t\t<mat-select required\r\n\t\t\t\t\t\tname='formulationTypeId'\r\n\t\t\t\t\t\t[(ngModel)]=\"fertilizer.FormulationTypeId\">\r\n\t\t\t\t\t\t<mat-option [value]=\"1\">\r\n\t\t\t\t\t\t\t{{'Dry' | translate }}\r\n\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t<mat-option [value]=\"2\">\r\n\t\t\t\t\t\t\t{{'Wet' | translate }}\r\n\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t</mat-select>\r\n\t\t\t\t</mat-form-field>\r\n\r\n\t\t\t\t<ng-container *ngIf=\"fertilizer.FormulationTypeId === formulationTypes.WET\">\r\n\t\t\t\t\t<mat-form-field appearance=\"fill\" class=\"mat-form-field--short\">\r\n\t\t\t\t\t\t<input matInput\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tstep=\"0.01\"\r\n\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\tname='PoundsPerGallon'\r\n\t\t\t\t\t\t\t[(ngModel)]=\"fertilizer.PoundsPerGallon\"/>\r\n\t\t\t\t\t\t<span matSuffix class=\"mat-form-field-suffix--padded\">\r\n\t\t\t\t\t\t\t{{'lbs' | translate}}/{{'gal' | translate}}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"formErrors.PoundsPerGallon\">\r\n\t\t\t\t\t\t\t{{ formErrors.PoundsPerGallon | translate }}\r\n\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"bk-modal__section\">\r\n\t\t\t\t<h4 class=\"bk-modal__section-title\">\r\n\t\t\t\t\t{{'Nutrient' | translate }}\r\n\t\t\t\t</h4>\r\n\r\n\t\t\t\t<div class=\"bk-modal__nutrients-group\">\r\n\t\t\t\t\t<div class=\"bk-model__nutrients-item\"\r\n\t\t\t\t\t\t*ngFor=\"let nutrient of fertilizer.Nutrients\">\r\n\r\n\t\t\t\t\t\t<mat-form-field appearance=\"fill\" class=\"mat-form-field--three-wide\">\r\n\t\t\t\t\t\t\t<mat-label>\r\n\t\t\t\t\t\t\t\t{{nutrient.Name}}\r\n\t\t\t\t\t\t\t</mat-label>\r\n\r\n\t\t\t\t\t\t\t<input matInput\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tstep=\"0.01\"\r\n\t\t\t\t\t\t\t\tsize=\"2\"\r\n\t\t\t\t\t\t\t\t[minNumber]=\"0\"\r\n\t\t\t\t\t\t\t\t[maxNumber]=\"100\"\r\n\t\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t\tname=\"Nutrient{{nutrient.NutrientId}}\"\r\n\t\t\t\t\t\t\t\t[(ngModel)]=\"nutrient.Percentage\"/>\r\n\t\t\t\t\t\t\t<span matSuffix class=\"mat-form-field-suffix--padded\">\r\n\t\t\t\t\t\t\t\t%\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<h4 [class.bk-text--error]=\"nutrientTotalPercentage.validationError !== null\"\r\n\t\t\t\t\tclass=\"bk-clearfix\">\r\n\t\t\t\t\t{{'Total Nutrients' | translate }}: {{nutrientTotalPercentage.total}}%\r\n\t\t\t\t</h4>\r\n\r\n\t\t\t\t<div *ngIf=\"nutrientTotalPercentage.validationError === validationErrors.TOTAL_TOO_BIG\"\r\n\t\t\t\t\tclass=\"bk-invalid-text--nutrient bk-invalid\">\r\n\t\t\t\t\t{{'Total cannot exceed 100%' | translate }}\r\n\t\t\t\t</div>\r\n\t\t\t\t<div *ngIf=\"nutrientTotalPercentage.validationError === validationErrors.TOTAL_NOT_GREATER_THAN_ZERO\"\r\n\t\t\t\t\tclass=\"bk-invalid-text--nutrient bk-invalid\">\r\n\t\t\t\t\t{{'Total must be greater than 0%' | translate }}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t</div>\r\n</div>","import { Component, OnInit, Input, EventEmitter, DoCheck, Output } from '@angular/core';\r\nimport { RanchFertilizerViewModel, NutrientTotalValidationErrors } from '../interfaces';\r\nimport { FormComponent } from '../../../../shared/form/form';\r\nimport { eFertilizerFormulationTypes } from '../../../../../interfaces/constants';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Fertilizer } from '../fertilizer.class';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'fertilizer-edit',\r\n\ttemplateUrl: 'edit.html',\r\n\tstyleUrls: ['edit.scss']\r\n})\r\n\r\nexport class FertilizerEditComponent extends FormComponent implements OnInit, DoCheck {\r\n\r\n\t@Input()\r\n\tfertilizer: RanchFertilizerViewModel;\r\n\r\n\t@Output()\r\n\tform: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\r\n\r\n\tpublic formulationTypes = eFertilizerFormulationTypes;\r\n\r\n\tpublic nutrientTotalPercentage: {\r\n\t\ttotal: number,\r\n\t\tvalidationError: NutrientTotalValidationErrors\r\n\t};\r\n\r\n\tpublic validationErrors = NutrientTotalValidationErrors;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.nutrientTotalPercentage = {\r\n\t\t\ttotal: 0,\r\n\t\t\tvalidationError: null\r\n\t\t};\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.formErrors = {\r\n\t\t\t'Name': '',\r\n\t\t\t'PoundsPerGallon': '',\r\n\t\t}\r\n\r\n\t\tthis.validationMessages = {\r\n\t\t\t'Name': {\r\n\t\t\t\t'required': 'field is required.',\r\n\t\t\t},\r\n\t\t\t'PoundsPerGallon': {\r\n\t\t\t\t'required': 'lbs/gallon is required.',\r\n\t\t\t\t'greaterThanNum': 'lbs/gallon must be greater than zero.'\r\n\t\t\t},\r\n\t\t}\r\n\t}\r\n\r\n\tngDoCheck(): void {\r\n\t\tif (!this.nutrientTotalPercentage) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.f) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.nutrientTotalPercentage.total = Fertilizer.calculateTotalPercentage(this.fertilizer);\r\n\r\n\t\tthis.nutrientTotalPercentage.validationError =\r\n\t\t\tFertilizer.validateNutrientTotal(this.nutrientTotalPercentage.total);\r\n\r\n\t\tif (this.nutrientTotalPercentage.validationError) {\r\n\t\t\tthis.f.form.setErrors({'total': false});\r\n\t\t}\r\n\r\n\t\tif (this.f && this.f.form) {\r\n\t\t\tthis.form.emit(this.f.form);\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"block bk-modal__right bk-modal__right-fertilizers\">\r\n\t<h4 *ngIf='fertilizers'\r\n\t\tclass=\"bk-modal__right-header bk-modal__right-header--float-left\">\r\n\r\n\t\t{{fertilizers.length}} {{'Fertilizers' | translate }}\r\n\t</h4>\r\n\r\n\t<mat-form-field appearance=\"fill\" class=\"mat-form-field--short mat-form-field--right\">\r\n\t\t<input matInput\r\n\t\t\tplaceholder=\"{{'Filter By' | translate}}\"\r\n\t\t\ttype=\"text\"\r\n\t\t\tname=\"searchQuery\"\r\n\t\t\t[(ngModel)]=\"searchQuery\"\r\n\t\t\t(ngModelChange)=\"filterFertilizers($event)\"/>\r\n\t\t<mat-icon matSuffix>search</mat-icon>\r\n\t</mat-form-field>\r\n\r\n\t<div class='bk-scroll-area'>\r\n\t\t<table class=\"bk-modal__table bk-fixed-header-table\">\r\n\t\t\t<thead>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<th></th>\r\n\t\t\t\t\t<th>\r\n\t\t\t\t\t\t{{'Name' | translate }}<i class=\"fa fa-triangle-down\"></i>\r\n\t\t\t\t\t</th>\r\n\t\t\t\t\t<th>\r\n\t\t\t\t\t\t{{'Formulation' | translate }}\r\n\t\t\t\t\t</th>\r\n\t\t\t\t\t<th>\r\n\t\t\t\t\t\t{{'Nitrogen' | translate }} %\r\n\t\t\t\t\t</th>\r\n\t\t\t\t\t<th>\r\n\t\t\t\t\t\t{{'Lbs/gal (liquid)' | translate }}\r\n\t\t\t\t\t</th>\r\n\t\t\t\t</tr>\r\n\t\t\t</thead>\r\n\t\t\t<tbody>\r\n\t\t\t\t<tr *ngFor=\"let fertilizer of filteredFertilizers\"\r\n\t\t\t\t\tclass=\"bk-modal__row\" >\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<input type=\"checkbox\"\r\n\t\t\t\t\t\t\tname=\"fertilizer\"\r\n\t\t\t\t\t\t\tvalue=\"fertilizer\"\r\n\t\t\t\t\t\t\t[(ngModel)]=\"fertilizer.checked\" />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t{{fertilizer.Name}}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<span *ngIf=\"fertilizer.FormulationType\">\r\n\t\t\t\t\t\t\t{{fertilizer.FormulationType.Name}}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t{{fertilizer.PercentageN}}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t{{fertilizer.LbsPerGallon}}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t</tbody>\r\n\t\t</table>\r\n\t</div>\r\n</div>","import { Component, OnInit, Input } from '@angular/core';\r\nimport { IFertilizer } from '../interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'fertilizer-list',\r\n\ttemplateUrl: 'fertilizer-list.html',\r\n\tstyleUrls: [ 'fertilizer-list.scss' ]\r\n})\r\n\r\nexport class FertilizerListComponent implements OnInit {\r\n\r\n\t@Input()\r\n\tpublic fertilizers: IFertilizer[];\r\n\r\n\tpublic filteredFertilizers: IFertilizer[];\r\n\tpublic searchQuery: string; // rename\r\n\r\n\tconstructor() {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.filteredFertilizers = this.fertilizers;\r\n\t}\r\n\r\n\tpublic filterFertilizers(query: string): void {\r\n\t\tthis.searchQuery = query;\r\n\r\n\t\tthis.filteredFertilizers = this.fertilizers.filter(fertilizer =>\r\n\t\t\tfertilizer.Name.toLowerCase().includes(this.searchQuery.toLocaleLowerCase()));\r\n\t}\r\n\r\n\tpublic toggleSelectedFertilizer(fertilizer: IFertilizer): void {\r\n\t\tif (!fertilizer) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (fertilizer.checked === undefined || fertilizer.checked === false) {\r\n\t\t\t// assume this is getting checked.\r\n\t\t\tfertilizer.checked = true;\r\n\t\t} else {\r\n\t\t\tfertilizer.checked = false;\r\n\t\t}\r\n\t}\r\n}\r\n","/**\r\n* DB calls related to fertilizer table\r\n*\r\n**/\r\n\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { HttpService } from '../../../../services/http.service';\r\nimport { RanchFertilizerViewModel, FertilizerViewModel, IFertilizer,\r\n\tIFertilizerModelService, FertilizerNutrientViewModel } from './interfaces';\r\nimport { Fertilizer } from './fertilizer.class';\r\nimport { IFertilizerProperties } from '../../../fertilization-event/interfaces';\r\nimport { ModelService } from '../../../../services/model.service';\r\nimport { ValidateService } from '../../../../services/validate.service';\r\nimport { IIdNamePair } from '../../../../interfaces/abstract';\r\nimport { CMError, SuccessResponse } from '../../../../interfaces/interfaces';\r\n\r\n@Injectable()\r\nexport class FertilizerModelService extends ModelService implements IFertilizerModelService {\r\n\r\n\tprivate urls = {\r\n\t\tgetProperties: (id: number) => `/v2/fertilizers/${id}/summary.json`,\r\n\t\tshow: (id: number) => `/v2/fertilizers/${id}.json`,\r\n\t\taddBatch: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/fertilizers/batch.json`,\r\n\t\tcreateForm: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/fertilizers/create-form.json`,\r\n\t\tcreate: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/fertilizers.json`,\r\n\t\tdelete: (ranchGuid: string, id: number) => `/v2/ranches/${ranchGuid}/fertilizers/${id}.json`,\r\n\t\tupdate: (id: number) => `/v2/fertilizers/${id}.json`,\r\n\t\texists: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/fertilizers/exists.json`,\r\n\t\tlistAvailable: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/fertilizers/available.json`,\r\n\t\tlist: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/fertilizers.json`\r\n\t};\r\n\r\n\tconstructor(\r\n\t\tprotected updateService: UpdateService,\r\n\t\tprotected validateService: ValidateService,\r\n\t\tprotected httpService: HttpService) {\r\n\r\n\t\tsuper(httpService, validateService);\r\n\t}\r\n\r\n\tpublic view(fertilizerId: number): Promise<RanchFertilizerViewModel> {\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.get({\r\n\t\t\t\turl: this.urls.show(fertilizerId),\r\n\t\t\t\tcallback: this.processViewFertilizerData,\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic getEditModel(id: number): Promise<RanchFertilizerViewModel> {\r\n\r\n\t\tif (!id) {\r\n\t\t\tthrow new Error('FertilizerModelService:ViewEdit - id is empty');\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.show(id),\r\n\t\t\tcallback: this.processGetFertilizerData,\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getCreateModel(): Promise<RanchFertilizerViewModel> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.createForm(this.updateService.currentRanchId),\r\n\t\t\tcallback: this.processGetFertilizerData,\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic add(fertilizer: RanchFertilizerViewModel): Promise<Object> {\r\n\t\treturn this.httpService\r\n\t\t\t.post({\r\n\t\t\t\turl: this.urls.create(this.updateService.currentRanchId),\r\n\t\t\t\tbody: fertilizer,\r\n\t\t\t\tisWebAPI: true\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic addBatch(fertilizers: number[]): Promise<void> {\r\n\t\treturn this.httpService\r\n\t\t\t.post({\r\n\t\t\t\turl: this.urls.addBatch(this.updateService.currentRanchId),\r\n\t\t\t\tbody: { FertilizerIds: fertilizers },\r\n\t\t\t\tisWebAPI: true\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic getByRanchId(ranchId: string): Promise<IFertilizer[]> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.list(ranchId),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: function (json: IFertilizer[]) {\r\n\r\n\t\t\t\tif (!json) {\r\n\t\t\t\t\treturn new Array();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn json;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic update(id: number, fertilizer: RanchFertilizerViewModel): Promise<IIdNamePair> {\r\n\t\treturn this.httpService\r\n\t\t\t.put({\r\n\t\t\t\turl: this.urls.update(id),\r\n\t\t\t\tbody: fertilizer,\r\n\t\t\t\tisWebAPI: true,\r\n\r\n\t\t\t\tcallback: (response: IIdNamePair | CMError) => {\r\n\t\t\t\t\tlet data: IIdNamePair;\r\n\t\t\t\t\tlet error: CMError;\r\n\r\n\t\t\t\t\tif (!response) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdata = response as IIdNamePair;\r\n\t\t\t\t\terror = response as CMError;\r\n\r\n\t\t\t\t\tif (error && error.code) {\r\n\t\t\t\t\t\tconsole.warn(error.message); // display error message\r\n\t\t\t\t\t\tthis.httpService.handleError(this.urls.update(id), error.message);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic delete(id: number): Promise<string> {\r\n\t\treturn this.httpService\r\n\t\t\t.delete({\r\n\t\t\t\turl: this.urls.delete(this.updateService.currentRanchId, id),\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tshouldBypassServerErrorAlert: true,\r\n\t\t\t\tcallback: (response: SuccessResponse | CMError): string  => {\r\n\r\n\t\t\t\t\tlet error: CMError;\r\n\r\n\t\t\t\t\terror = response as CMError;\r\n\r\n\t\t\t\t\tif (error && error.code) {\r\n\t\t\t\t\t\treturn error.message;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic listAvailable(): Promise<IFertilizer[]> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.listAvailable(this.updateService.currentRanchId),\r\n\t\t\tcallback: this.processAvailableFertilizers,\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * @param id\r\n\t */\r\n\tpublic getProperties(id: number): Promise<IFertilizerProperties> {\r\n\r\n\t\treturn this.get(this.urls.getProperties(id),\r\n\t\t\t(data: IFertilizerProperties): IFertilizerProperties => {\r\n\t\t\treturn data;\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tprivate processAvailableFertilizers(data: IFertilizer[]): IFertilizer[] {\r\n\t\tif (!data || data.length === 0) {\r\n\t\t\treturn new Array();\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tprivate processGetFertilizerData(obj: FertilizerViewModel): RanchFertilizerViewModel {\r\n\t\tlet fertilizerModel: RanchFertilizerViewModel;\r\n\r\n\t\tif (!obj || !obj.Model) {\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfertilizerModel = obj.Model;\r\n\t\tfertilizerModel.Nutrients = fertilizerModel.Nutrients.filter(() =>\r\n\t\t\tfunction (o: FertilizerNutrientViewModel) { // REFACTOR - replace numbers\r\n\t\t\t\t// 2) why are we even checking the ids? Nutrients is not typed\r\n\t\t\t\tlet id = o.NutrientId;\r\n\r\n\t\t\t\treturn id === 1 || id === 2 || id === 3 || id === 11 || id === 4 ||\r\n\t\t\t\t\tid === 5 || id === 6 || id === 8 || id === 7;\r\n\t\t\t});\r\n\r\n\t\tfertilizerModel.IsPrivate = true;\r\n\r\n\t\treturn fertilizerModel;\r\n\t}\r\n\r\n\tprivate processViewFertilizerData(data: FertilizerViewModel): RanchFertilizerViewModel {\r\n\t\tlet result: RanchFertilizerViewModel;\r\n\r\n\t\tif (!data) {\r\n\t\t\tthrow new Error('FertilizerModelService: processViewFertilizerData() - data is empty');\r\n\t\t}\r\n\r\n\t\tresult = data.Model;\r\n\r\n\t\tif (data.Nutrients) {\r\n\r\n\t\t\tresult.Nutrients = Fertilizer.convertNutrient(data.Nutrients);\r\n\t\t}\r\n\r\n\t\tif (data.FormulationTypes) {\r\n\t\t\tresult.FormulationType = data.FormulationTypes.filter(x => x.Id === result.FormulationTypeId)[0];\r\n\t\t} else { // avoid null reference in component template\r\n\t\t\tresult.FormulationType = {\r\n\t\t\t\tId: null,\r\n\t\t\t\tName: null\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","<style>\r\n    agm-map {\r\n        height: 300px;\r\n    }\r\n</style>\r\n<div class=\"bk-dialog bk-dialog__event\">\r\n\r\n    <!-- header -->\r\n    <button type=\"button\"\r\n        class=\"bk-button bk-dialog__close\"\r\n        (click)=\"close()\">\r\n\r\n        <span>&times;</span>\r\n    </button>\r\n\r\n    <h4 *ngIf=\"!inEditMode\"\r\n        mat-dialog-title>\r\n\r\n        {{'Create Ranch' | translate }}\r\n    </h4>\r\n    <h4 *ngIf=\"inEditMode\"\r\n        mat-dialog-title>\r\n\r\n        {{'Edit' | translate }} {{'Ranch Information' | translate }}\r\n    </h4>\r\n\r\n    <!-- body -->\r\n\r\n    <div mat-dialog-content>\r\n        <form [formGroup]=\"form\">\r\n            <div class=\"bk-ranch-dialog-form\">\r\n                <div class=\"left-content-container bk-modal__left\">\r\n\r\n                    <div *ngIf=\"form\">\r\n                        <div *ngIf=\"inEditMode\"\r\n                            class=\"bk-form-group\"\r\n                            style=\"margin-left: 10px;\">\r\n                            <label class=\"bk-modal__label\" style=\"font-size: 11px; margin-bottom:5px;\">\r\n                                {{'Ranch Owner' | translate }}\r\n                            </label>\r\n                            <div>\r\n                                {{RanchOwnerFullName}}\r\n                            </div>\r\n                        </div>\r\n\r\n                        <mat-form-field appearance=\"fill\"\r\n                            class='mat-form-field--one-line mat-form-field--short'>\r\n                            <mat-label for=\"ranch-name\">\r\n                                {{'Ranch Name' | translate }}\r\n                            </mat-label>\r\n                            <input matInput \r\n                                id=\"ranch-name\"\r\n                                formControlName=\"Name\"\r\n                                required\r\n                                type=\"text\">\r\n                            <mat-error *ngIf=\"f.Name.invalid && (f.Name.dirty || f.Name.touched)\">\r\n                                {{'Ranch name cannot be empty' | translate }}\r\n                            </mat-error>\r\n                        </mat-form-field>\r\n\r\n                        <mat-form-field appearance=\"fill\"\r\n                            class='mat-form-field--one-line mat-form-field--short'>\r\n                            <mat-label>\r\n                                {{'Coordinates' | translate }}\r\n                            </mat-label>\r\n                            <input matInput\r\n                                id=\"coordinates\"\r\n                                type=\"text\"\r\n                                formControlName=\"Coordinates\"\r\n                                required>\r\n\r\n                            <mat-error *ngIf=\"f.Coordinates.invalid && (f.Coordinates.dirty || f.Coordinates.touched)\">\r\n                                <span *ngIf=\"f.Coordinates.errors.coordinatesTooLong\">\r\n                                    {{'coordinates should contain 6 or less decimals' | translate }}\r\n                                </span>\r\n                                <span *ngIf=\"f.Coordinates.errors.coordinatesInvalid\">\r\n                                    {{'Invalid coordinates' | translate }}\r\n                                </span>\r\n                            </mat-error>\r\n                            \r\n                        </mat-form-field>\r\n                        <div *ngIf=\"coordinateExplanation\"\r\n                            class=\"bk-clearfix bk-location-warning\">\r\n                            <i class=\"fa fa-warning\"></i>\r\n                            {{ coordinateExplanation }}\r\n                        </div>\r\n\r\n                        <mat-form-field appearance=\"fill\"\r\n                            class='mat-form-field--one-line mat-form-field--short'>\r\n                            <mat-label>\r\n                                {{'Acres' | translate }}\r\n                            </mat-label>\r\n                            <input matInput \r\n                                formControlName=\"Acres\"\r\n                                step=\"0.01\"\r\n                                required\r\n                                type=\"number\">\r\n                            <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                                {{'acres' | translate }}\r\n                            </span>\r\n                            <mat-error *ngIf=\"f.Acres.invalid && (f.Acres.dirty || f.Acres.touched)\">\r\n                                <ng-container *ngIf=\"f.Acres.errors.required\">\r\n                                    {{ 'Field is required' | translate }}\r\n                                </ng-container>\r\n                                <ng-container *ngIf=\"f.Acres.errors.min\">\r\n                                    {{ 'Acres must be greater than zero' | translate }}\r\n                                </ng-container>\r\n                                <ng-container *ngIf=\"f.Acres.errors.max\">\r\n                                    {{'Acres must be less than 10,000' | translate }}\r\n                                </ng-container>\r\n                            </mat-error>\r\n                        </mat-form-field>\r\n                    </div>\r\n                </div>\r\n                <div class=\"bk-modal__right\"\r\n                    [class.bk-modal__shown]=\"!loadingData\">\r\n\r\n                    <div *ngIf=\"!inEditMode\"\r\n                        class=\"bk-modal__right-instructions\">\r\n                        {{'Ranch map instructions' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-modal__right-instructions\">\r\n                        <div class=\"bk-marker bk-marker--ranch\">\r\n                            <svg-ranch-marker></svg-ranch-marker>\r\n                        </div>\r\n                        {{'Ranch' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-modal__map-container map-container\">\r\n                        <agm-map (mapClick)=\"changeCoordinatesMap($event)\"\r\n                            [mapTypeId]=\"'hybrid'\"\r\n                            [fullscreenControl]=\"true\">\r\n                            <agm-marker *ngFor=\"let marker of markers\"\r\n                                [iconUrl]=\"'../assets/images/icons/map_marker-ranch-v2.png'\"\r\n                                [latitude]=\"marker.lat\"\r\n                                [longitude]=\"marker.lng\">\r\n                            </agm-marker>\r\n                            <map-control></map-control>\r\n                        </agm-map>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </form>\r\n    </div>\r\n\r\n    <!-- footer -->\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n        <button *ngIf=\"inEditMode && permissions && permissions.UserIsRanchOwner\"\r\n            class=\"bk-button bk-button--medium bk-button--text-only bk-button--float-left\"  \r\n            (click)=\"onDeleteConfirmationOpen()\">\r\n            {{'Delete' | translate }}\r\n        </button>\r\n\r\n        <button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"onClose()\">\r\n            {{'Cancel' | translate }}\r\n        </button>\r\n\r\n        <button *ngIf=\"!inEditMode\"\r\n            [disabled]=\"!form.valid\"\r\n            class=\"bk-button bk-button--medium\" \r\n            (click)=\"save()\">\r\n            {{(isSaving ? 'Creating' : 'Create') | translate }} {{'Ranch' | translate }}\r\n            <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n        </button>\r\n\r\n        <button *ngIf=\"inEditMode\"\r\n            [disabled]=\"!form.valid\"\r\n            class=\"bk-button bk-button--medium\"\r\n            (click)=\"save()\">\r\n            {{ (isSaving ? 'Saving' : 'Save') | translate }}\r\n            <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n        </button>\r\n    </div>\r\n</div>","import { Component, ViewChild, OnInit, Inject, OnDestroy } from '@angular/core';\r\nimport { RanchService } from '../../service';\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { AgmMap } from '@agm/core';\r\nimport { MapControlDirective } from '../../../../directives/map-control.directive';\r\nimport { Router, NavigationExtras } from '@angular/router';\r\nimport * as _ from 'underscore';\r\n\r\nimport { IRanchPermissions, IRanch } from '../../interfaces';\r\nimport { eModalFormViews } from '../../../../interfaces/constants';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { of, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { GeoLocation } from '../../../../classes/geolocation.class';\r\nimport { ICoordinates, IAgmMapClick, IReactiveFormComponent } from '../../../shared/interfaces';\r\nimport { FormBuilder, FormGroup, AbstractControl, Validators, ValidatorFn } from '@angular/forms';\r\nimport { FormValidation } from '../../../../classes/formValidation';\r\nimport { BOKA } from '../../../../classes/number';\r\nimport { Coordinates } from '../../../../classes/Coordinates';\r\nimport { BaseDialog } from '../../../shared/dialogs/base-dialog';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\nimport { PlantingService } from '../../../planting-settings/service';\r\nimport { CMError } from '../../../../interfaces/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ranch-modal',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: ['main.scss']\r\n})\r\n\r\nexport class RanchDialog extends BaseDialog implements OnInit, OnDestroy, IReactiveFormComponent {\r\n\r\n\t@ViewChild(AgmMap, { static: true }) private map: AgmMap;\r\n\t@ViewChild(MapControlDirective, { static: true }) private mapControl: MapControlDirective;\r\n\r\n\tpublic coordinateExplanation: string;\r\n\tpublic isSaving = false;\r\n\tpublic inEditMode = false;\r\n\tpublic markers: ICoordinates[] = new Array();\r\n\r\n\t// centered on western united states by default\r\n\tprivate readonly defaultMapParams = {\r\n\t\tlat: 37.195 as number,\r\n\t\tlng: -116.486 as number,\r\n\t\tzoom: 5 as number\r\n\t}\r\n\r\n\tprivate lat: number = this.defaultMapParams.lat;\r\n\tprivate lng: number = this.defaultMapParams.lng;\r\n\tprivate zoom: number = this.defaultMapParams.zoom;\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic loadingData = true;\r\n\r\n\tpublic view: eModalFormViews = eModalFormViews.FORM;\r\n\tpublic modalFormViews = eModalFormViews;\r\n\tpublic permissions: IRanchPermissions;\r\n\r\n\tpublic RanchOwnerFullName: string;\r\n\tpublic form: FormGroup;\r\n\tpublic fields = {\r\n\t\tCoordinates: 'Coordinates',\r\n\t\tName: 'Name',\r\n\t\tAcres: 'Acres'\r\n\t}\r\n\r\n\tpublic get f(): { [key: string]: AbstractControl } {\r\n\t\tif (!this.form) {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\treturn this.form.controls;\r\n\t\t}\r\n\t} //\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate dialog: MatDialog,\r\n\t\tprivate dialogref: MatDialogRef<RanchDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { Id: string},\r\n\t\tprivate ranchService: RanchService,\r\n\t\tprivate _plantingService: PlantingService,\r\n\t\tprivate updateService: UpdateService,\r\n\t\tprivate sharedUpdateService: SharedUpdateService,\r\n\t\tprivate router: Router) {\r\n\r\n\t\tsuper(dialog, dialogref, sharedUpdateService);\r\n\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.dialogref.disableClose = true;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.permissions = this.updateService.currentPermissions;\r\n\t\tthis._configureDeleteConfirmationText();\r\n\t\tsuper.ngOnInit();\r\n\r\n\t\tthis.updateService.RanchPlantingsPermissions$.pipe(takeUntil(this._subscriptions$)).subscribe(permissions => {\r\n\t\t\tthis.permissions = permissions;\r\n\t\t});\r\n\r\n\t\tthis._initializeForm();\r\n\r\n\t\tif (!this._data || !this._data.Id) {\r\n\t\t\t// center map to the user's location\r\n\r\n\t\t\tif (this.updateService.currentLocation.lat && !isNaN(this.updateService.currentLocation.lat)\r\n\t\t\t\t&& this.updateService.currentLocation.lng && !isNaN(this.updateService.currentLocation.lng)) {\r\n\r\n\t\t\t\tthis.lat = this.updateService.currentLocation.lat;\r\n\t\t\t\tthis.lng = this.updateService.currentLocation.lng;\r\n\t\t\t\tthis.zoom = 10;\r\n\t\t\t\tthis.inEditMode = false;\r\n\t\t\t\tthis.loadingData = false;\r\n\t\t\t\tthis._resetMap();\r\n\t\t\t} else {\r\n\t\t\t\tGeoLocation.getCoordinates().then(position => {\r\n\t\t\t\t\tif (position.coords.latitude && position.coords.longitude) {\r\n\t\t\t\t\t\tthis.updateService.setCurrentLocation(Number(position.coords.latitude), Number(position.coords.longitude));\r\n\t\t\t\t\t\tthis.lat = this.updateService.currentLocation.lat;\r\n\t\t\t\t\t\tthis.lng = this.updateService.currentLocation.lng;\r\n\t\t\t\t\t\tthis.zoom = 10;\r\n\t\t\t\t\t\tthis.inEditMode = false;\r\n\t\t\t\t\t\tthis.loadingData = false;\r\n\t\t\t\t\t\tthis._resetMap();\r\n\t\t\t\t\t}\r\n\t\t\t\t}).catch((reason: any) => {\r\n\t\t\t\t\t// we need to catch the error triggered by\r\n\t\t\t\t\t// a user not sharing his/her location\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.inEditMode = true;\r\n\t\t\tthis.form.markAsDirty();\r\n\t\t\tthis._getEditRanchData();\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic changeCoordinatesMap(event: IAgmMapClick): void {\r\n\t\tlet lat = BOKA.NumberUtil.truncateDecimal(event.coords.lat);\r\n\t\tlet lng = BOKA.NumberUtil.truncateDecimal(event.coords.lng);\r\n\t\tthis.form.get(this.fields.Coordinates).setValue(lat + ',' + lng);\r\n\t\tthis.form.get(this.fields.Coordinates).markAsTouched();\r\n\t\tthis._placeMarker(lat, lng);\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\t\tthis.ranchService.deleteRanch(this.updateService.currentRanchId)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.sharedUpdateService.deleteComplete();\r\n\t\t\t\tthis.close();\r\n\t\t\t\tthis.router.navigate(['MyDashboard']);\r\n\t\t\t});\r\n\t}\r\n\r\n\tprotected preventClose(): boolean {\r\n\t\treturn this.loadingData;\r\n\t}\r\n\r\n\tpublic save() {\r\n\t\tif (this.inEditMode) {\r\n\t\t\tthis._edit();\r\n\t\t} else {\r\n\t\t\tthis._create();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _changeCoordinatesText(coordinates: string): void {\r\n\r\n\t\tlet coords: Coordinates;\r\n\r\n\t\tcoords = new Coordinates(coordinates);\r\n\r\n\t\tif (coords === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.lat = coords.lat;\r\n\t\tthis.lng = coords.lng;\r\n\r\n\t\tthis._placeMarker(coords.lat, coords.lng);\r\n\t}\r\n\r\n\tprivate _clear() {\r\n\t\tthis.inEditMode = false;\r\n\t\tthis.lat = this.defaultMapParams.lat;\r\n\t\tthis.lng = this.defaultMapParams.lng;\r\n\t\tthis.zoom = this.defaultMapParams.zoom;\r\n\t\tthis.markers = new Array();\r\n\t\tthis.loadingData = true;\r\n\t\tthis.view = eModalFormViews.FORM;\r\n\t}\r\n\r\n\tprivate _configureDeleteConfirmationText(): void {\r\n\t\tthis._deleteConfirmationData = {\r\n\t\t\tobjectName: 'Ranch',\r\n\t\t\tspecificName: null,\r\n\t\t\tadditionalMessage: 'Are you sure you want to delete this ranch?'\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _create(): void {\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.ranchService.createRanch(this.form.value)\r\n\t\t.then((res) => {\r\n\r\n\t\t\tlet ranch: IRanch;\r\n\t\t\t// need to update the backend data when new ranch is created - add to my ranches\r\n\t\t\tthis.isSaving = false;\r\n\r\n\t\t\tif (!res) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tranch = {\r\n\t\t\t\tActivePlantings: 0,\r\n\t\t\t\tCreatedByFullName: null,\r\n\t\t\t\tFavorite: false,\r\n\t\t\t\tFavoriteId: 0,\r\n\t\t\t\tId: res.Id,\r\n\t\t\t\tName: this.form.get(this.fields.Name).value,\r\n\t\t\t\tRanchAccessState: null,\r\n\t\t\t\tRanchId: res.Guid,\r\n\t\t\t\tRanch_External_GUID: res.Guid,\r\n\t\t\t\tUserAccessState: null,\r\n\t\t\t\tWeatherAPI_Id: res.WeatherAPI_Id\r\n\t\t\t};\r\n\r\n\t\t\tif (!this.ranchService.ranches.myRanches) {\r\n\t\t\t\tthis.ranchService.ranches.myRanches = new Array();\r\n\t\t\t}\r\n\r\n\t\t\tthis.ranchService.ranches.myRanches.push(ranch);\r\n\t\t\tthis.ranchService.sortRanchesByName(this.ranchService.ranches.myRanches);\r\n\r\n\t\t\tthis.updateService.setUpdatedRanches('ranch created');\r\n\t\t\tthis.ranchService.currentRanchLots = new Array(); // empty cache from previous ranch\r\n\t\t\tthis.dialogref.close();\r\n\r\n\t\t\tlet navigationExtras: NavigationExtras = {\r\n\t\t\t\tqueryParams: {\r\n\t\t\t\t\t'id': res.Guid,\r\n\t\t\t\t\t'name': this.form.get(this.fields.Name).value\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.updateService.showRanchSettings = true;\r\n\t\t\tthis.router.navigate(['RanchHome'], navigationExtras);\r\n\t\t\tthis._clear();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _edit(): void {\r\n\r\n\t\t// Update the ranches list when ranch is updated - ideally we just copy over data, and ideally we only have\r\n\t\t// one data storage here to check, not two\r\n\r\n\t\tlet ranch: IRanch;\r\n\t\tlet ranchFavorite: IRanch;\r\n\r\n\t\t// update ranch data in the my ranches and favorites cache\r\n\t\tranch = this.ranchService.findRanchByGuid(this.ranchService.ranches.myRanches,\r\n\t\t\tthis.updateService.currentRanchId);\r\n\r\n\t\tif (ranch !== null) {\r\n\t\t\tranch.Name = this.form.get(this.fields.Name).value;\r\n\t\t\tranch.Coordinates = this.form.get(this.fields.Coordinates).value;\r\n\t\t\tranch.Acres = this.form.get(this.fields.Acres).value;\r\n\t\t} else {\r\n\t\t\tranch = {\r\n\t\t\t\tName: this.form.get(this.fields.Name).value,\r\n\t\t\t\tCoordinates: this.form.get(this.fields.Coordinates).value,\r\n\t\t\t\tAcres: this.form.get(this.fields.Acres).value,\r\n\t\t\t\tId: null,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tranchFavorite = this.ranchService.findRanchByGuid(this.ranchService.ranches.favorites,\r\n\t\t\tthis.updateService.currentRanchId);\r\n\r\n\t\tif (ranchFavorite !== null) {\r\n\t\t\tranchFavorite.Name = this.form.get(this.fields.Name).value;\r\n\t\t\tranchFavorite.Coordinates = this.form.get(this.fields.Coordinates).value;\r\n\t\t\tranchFavorite.Acres = this.form.get(this.fields.Acres).value;\r\n\t\t}\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.ranchService.editRanchBasicInfo(this.form.value)\r\n\t\t.then(() => {\r\n\t\t\tthis.ranchService.getRanchBasicInfo().then((res) => {\r\n\t\t\t\tranch.WeatherAPI_Id = res.WeatherAPI_Id;\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t\tthis.updateService.setUpdatedRanches('ranch edited');\r\n\t\t\t\tthis.updateService.setUpdatedRanch(ranch);\r\n\t\t\t\tthis.dialogref.close();\r\n\t\t\t\tthis._clear();\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getEditRanchData(): void {\r\n\t\tthis.ranchService.getRanchBasicInfo()\r\n\t\t\t.then((res) => {\r\n\t\t\t\tlet coords: Coordinates;\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!this.form) {\r\n\t\t\t\t\tthrow new Error('form is empty');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcoords = new Coordinates(res.Coordinates);\r\n\t\t\t\tthis.form.get(this.fields.Name).setValue(res.RanchName);\r\n\t\t\t\tthis.form.get(this.fields.Coordinates).setValue(coords.toString());\r\n\t\t\t\tthis.form.get(this.fields.Acres).setValue(res.Acres);\r\n\t\t\t\tthis.RanchOwnerFullName = res.RanchOwnerFullName;\r\n\r\n\t\t\t\tthis.loadingData = false;\r\n\t\t\t\tthis.zoom = 10;\r\n\t\t\t\tthis._resetMap();\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _initializeForm(): void {\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tCoordinates: [null, { validators: [Validators.required,\r\n\t\t\t\tFormValidation.CoordinateStringIsValid()], updateOn: 'blur'}],\r\n\t\t\tName: [null, Validators.required],\r\n\t\t\tAcres: [null, [Validators.required, Validators.min(0.000001), Validators.max(2147483647)]]\r\n\t\t});\r\n\r\n\t\tthis._bindValueChanges();\r\n\t}\r\n\r\n\tprivate _bindValueChanges(): void {\r\n\t\tthis.form.get('Coordinates').valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (!this.form.get(this.fields.Coordinates).valid) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._inSupportedArea(this._plantingService, false).then((resp) => {\r\n\t\t\t\tthis.coordinateExplanation = resp;\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _inSupportedArea(service: PlantingService, isSpatialEnabled: boolean): Promise<string>  {\r\n\t\tlet coordinates: Coordinates;\r\n\r\n\t\tif (!this.lat || !this.lng) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tcoordinates = new Coordinates(this.form.get('Coordinates').value);\r\n\r\n\t\treturn service.isLocationValid(coordinates.lat, coordinates.lng, isSpatialEnabled).then((resp) => {\r\n\t\t\tif (!resp) {\r\n\t\t\t\t// on initial form load, coordinate values may be blank\r\n\t\t\t\t// throw new Error('coordinates area check returned no response');\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif ((resp as CMError).message) {\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\treturn resp as string;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _placeMarker(lat: number, lng: number) {\r\n\t\tthis.markers = new Array();\r\n\r\n\t\tthis.markers.push({\r\n\t\t\tlat: lat,\r\n\t\t\tlng: lng\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _recenterMap(lat: number, lng: number, zoom: number): void {\r\n\t\tif (!lat || !lng) {\r\n\t\t\tthrow new Error('lat/lng is empty');\r\n\t\t}\r\n\r\n\t\tthis.mapControl.centerMap(lat, lng);\r\n\t\tthis.mapControl.setZoom(zoom);\r\n\t}\r\n\r\n\tprivate _resetMap(): void {\r\n\t\tif (!this.map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.form) {\r\n\t\t\tthrow new Error('form is empty');\r\n\t\t}\r\n\r\n\t\tlet __this = this;\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.map.triggerResize().then(() => {\r\n\t\t\t\tif (this.inEditMode) {\r\n\t\t\t\t\tthis._changeCoordinatesText(this.form.get(this.fields.Coordinates).value);\r\n\t\t\t\t\tthis._recenterMap(this.lat, this.lng, this.zoom);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._recenterMap(this.lat, this.lng, this.zoom);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}, 200);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-modal__large\">\r\n    <button type=\"button\"\r\n        class=\"bk-button bk-dialog__close\"\r\n        (click)=\"close()\">\r\n\r\n        &times;\r\n    </button>\r\n    <h4 mat-dialog-title>\r\n         {{'View' | translate }} {{'Weather Station' | translate }}\r\n    </h4>\r\n\r\n    <div mat-dialog-content>\r\n        <div class=\"weather-station-container\">\r\n            <div class=\"left-content-container bk-modal__left bk-weather-stations-left\r\n\t\t\t\tbk-weather-stations__left--edit-mode\">\r\n\t\t\t\t<div class=\"bk-weather-station\" *ngIf=\"station\">\r\n\t\t\t\t\t<div class=\"bk-weather-station__name bk-bold\">\r\n\t\t\t\t\t\t{{station.Name}} (#{{station.External_Id}})\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"bk-weather-station__name\">\r\n\t\t\t\t\t\t{{station.NearestCity}}, {{station.County}} {{'County' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"bk-weather-station__name\">\r\n\t\t\t\t\t\t{{station.Distance}} {{'miles away' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n            </div>\r\n            <div class=\"bk-modal__right bk-weather-stations-right\">\r\n                <div class=\"bk-modal__right-instructions\">\r\n                    <div class=\"bk-marker bk-marker--ranch\">\r\n                        <svg-ranch-marker></svg-ranch-marker>\r\n                    </div>\r\n                    {{'Ranch Location' | translate }}\r\n                    <div class=\"bk-marker bk-marker--selected\">\r\n                        <svg-station-location></svg-station-location>\r\n                    </div>\r\n                    {{'Weather Station' | translate }}\r\n                </div>\r\n                <div class=\"map-container bk-modal__map-container\" *ngIf=\"station\">\r\n                    <agm-map\r\n                        [latitude]=\"station.Latitude\"\r\n                        [longitude]=\"station.Longitude\"\r\n                        [mapTypeId]=\"'hybrid'\"\r\n                        [fullscreenControl]=\"true\">\r\n\r\n                        <agm-marker *ngIf=\"station\"\r\n                            [iconUrl]=\"getStationMarker(station)\"\r\n                            [latitude]=\"station.Latitude\"\r\n                            [longitude]=\"station.Longitude\"\r\n                            [label]=\"getStationId(station.External_Id)\">\r\n                        </agm-marker>\r\n\r\n                        <agm-marker *ngIf=\"ranchLocation\"\r\n                            [iconUrl]=\"'../assets/images/icons/map_marker-ranch-v2.png'\"\r\n                            [latitude]=\"ranchLocation.Latitude\"\r\n                            [longitude]=\"ranchLocation.Longitude\">\r\n                        </agm-marker>\r\n                        \r\n                        <map-control></map-control>\r\n                    </agm-map>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\r\n\t\t\tbk-button--float-left\"\r\n\t\t\t(click)=\"onDelete()\">\r\n\t\t\t{{'Remove' | translate }} {{'Weather Station' | translate }}\r\n\t\t</button>\r\n\t\t<button class=\"bk-button bk-button--medium\"\r\n\t\t\t(click)=\"close()\">\r\n\t\t\t{{'Close' | translate }}\r\n\t\t</button>\r\n    </div>\r\n</div>","import { Component, ViewChild, OnInit, Inject } from '@angular/core';\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { AgmMap, LatLngBounds } from '@agm/core';\r\n\r\n\r\nimport { MapControlDirective } from '../../../../directives/map-control.directive';\r\nimport { IMarker } from '../../interfaces';\r\nimport { WeatherStationsService } from '../../../../models/weather-station-stats/service';\r\nimport { IMapIconSize, IMapIcon } from './interfaces';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { DeleteConfirmationComponent, DeleteConfirmationSettings } from '../../../shared/dialogs/delete-confirmation';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\nimport { DIALOG_HIDE_CLASS } from '../../../shared/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ranch-weather-station-edit',\r\n\ttemplateUrl: 'edit.html',\r\n\tstyleUrls: ['edit.scss']\r\n})\r\n\r\n/**\r\n * Refactoring notes:\r\n *\r\n * - cleaned up public/private (8/9/2019)\r\n */\r\nexport class WeatherStationEditComponent implements OnInit {\r\n\tprivate _icons: {\r\n\t\tselected: IMapIcon,\r\n\t\tunselected: IMapIcon\r\n\t};\r\n\r\n\tprivate readonly _iconSizes: {\r\n\t\tregular: IMapIconSize,\r\n\t\tsmall: IMapIconSize\r\n\t}\r\n\r\n\t@ViewChild(AgmMap, { static: false }) private _map: AgmMap;\r\n\t@ViewChild(MapControlDirective, { static: false }) private _mapControl: MapControlDirective;\r\n\tprivate readonly _mininumZoomLevel: number = 7;\r\n\tprivate _zoom = 10;\r\n\r\n\tpublic loadingData = true;\r\n\tpublic ranchLocation: IMarker;\r\n\r\n\tpublic station: IMarker;\r\n\tpublic zoomOutWarning = false;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { id: number},\r\n\t\tprivate _dialogRef: MatDialogRef<WeatherStationEditComponent>,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _weatherStationService: WeatherStationsService) {\r\n\r\n\t\tthis._iconSizes = {\r\n\t\t\tregular: {\r\n\t\t\t\theight: 50,\r\n\t\t\t\twidth: 80\r\n\t\t\t},\r\n\t\t\tsmall: {\r\n\t\t\t\theight: 10,\r\n\t\t\t\twidth: 10\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis._icons = {\r\n\t\t\tselected: {\r\n\t\t\t\turl: '../assets/images/icons/map_marker-weather_station-selected.png',\r\n\t\t\t\tscaledSize: this._iconSizes.regular\r\n\t\t\t},\r\n\t\t\tunselected: {\r\n\t\t\t\turl: '../assets/images/icons/map_marker-weather_station.png',\r\n\t\t\t\tscaledSize: this._iconSizes.regular\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic ngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.ranchLocation = null;\r\n\t\tthis.station = null;\r\n\t\tthis._icons.selected.scaledSize = this._iconSizes.regular;\r\n\t\tthis._icons.unselected.scaledSize = this._iconSizes.regular;\r\n\t\tthis.zoomOutWarning = false;\r\n\t\tthis.loadingData = true;\r\n\r\n\t\tif (!this._data || !this._data.id) {\r\n\t\t\tthrow new Error('weather station dialog: station ID missing');\r\n\t\t}\r\n\r\n\t\tthis._getEditWeatherStationData(this._data.id);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tpublic getStationId(stationId: string): string {\r\n\t\tif (this._zoom < this._mininumZoomLevel) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn stationId;\r\n\t}\r\n\r\n\tpublic getStationMarker(): IMapIcon {\r\n\t\tif (this._zoom < this._mininumZoomLevel) {\r\n\t\t\tthis._icons.selected.url = '../assets/images/icons/map_marker-weather_station-selected-small.png';\r\n\t\t\tthis._icons.unselected.url = '../assets/images/icons/map_marker-weather_station-small.png';\r\n\t\t} else {\r\n\t\t\tthis._icons.selected.url = '../assets/images/icons/map_marker-weather_station-selected.png';\r\n\t\t\tthis._icons.unselected.url = '../assets/images/icons/map_marker-weather_station.png';\r\n\t\t}\r\n\r\n\t\treturn this._icons.selected;\r\n\t}\r\n\r\n\tpublic onDelete(): void {\r\n\t\tlet data: DeleteConfirmationSettings;\r\n\r\n\t\tdata = {\r\n\t\t\tobjectName: 'Weather Station',\r\n\t\t\tspecificName: this.station.Name,\r\n\t\t\tadditionalMessage: 'This will remove this weather station from this ranch.'\r\n\t\t}\r\n\r\n\t\tthis.hide();\r\n\t\tthis._dialog.open(DeleteConfirmationComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: data\r\n\t\t});\r\n\r\n\t\tthis._sharedUpdateService.delete$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.delete();\r\n\t\t});\r\n\r\n\t\tthis._sharedUpdateService.cancel$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.show();\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tpublic delete(): void {\r\n\t\tthis._dialog.closeAll(); // close the delete confirmation dialog\r\n\r\n\t\tif (this.station) {\r\n\t\t\tthis._weatherStationService.removeFromRanch(this.station.Id)\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tthis._sharedUpdateService.deleteComplete();\r\n\t\t\t\t\tthis._updateService.setRanchSettingsUpdated('weatherStations');\r\n\t\t\t\t\tthis.close();\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic hide(): void {\r\n\t\tthis._dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\t}\r\n\r\n\tpublic show(): void {\r\n\t\tthis._dialogRef.removePanelClass(DIALOG_HIDE_CLASS);\r\n\t}\r\n\r\n\tprivate _getEditWeatherStationData(id: number) {\r\n\t\tthis._weatherStationService.getDetails(id)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tif (res) {\r\n\t\t\t\t\tthis.station = res.Stations[0]\r\n\t\t\t\t\tthis.ranchLocation = res.RanchLocation\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.loadingData = false;\r\n\t\t\t\tthis._resetMap();\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _recenterMap(lat: number, lng: number, zoom: number): Promise<void> {\r\n\t\tlet promises: Promise<void>[] = new Array();\r\n\r\n\t\tpromises.push(this._mapControl.centerMap(lat, lng));\r\n\t\tpromises.push(this._mapControl.setZoom(zoom));\r\n\r\n\t\treturn Promise.all(promises).then(() => {\r\n\t\t\tthis._setInitialBounds();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _resetMap(): void {\r\n\t\tif (!this._map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet __this = this;\r\n\t\tsetTimeout(function () {\r\n\t\t\t__this._map.triggerResize().then(() => {\r\n\t\t\t\tif (__this.ranchLocation) {\r\n\t\t\t\t\t__this._recenterMap(__this.ranchLocation.Latitude,\r\n\t\t\t\t\t\t__this.ranchLocation.Longitude, __this._zoom);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}, 100);\r\n\t}\r\n\r\n\tprivate _setInitialBounds(): Promise<LatLngBounds> {\r\n\t\treturn this._mapControl.getBounds();\r\n\t}\r\n}\r\n","\n\t\t<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\t\t\t<defs></defs>\n\t\t\t<g id=\"Exports\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n\t\t\t\t<g id=\"icon-map_marker-filled\" fill-rule=\"nonzero\" fill=\"#000000\">\n\t\t\t\t\t<g id=\"Icon-Map_Marker-FILLED\" transform=\"translate(3.000000, 0.000000)\">\n\t\t\t\t\t\t<path d=\"M9.43448276,0.00595862069 C4.05583448,0.00595862069 0,\n\t\t\t\t\t\t4.27431724 0,9.9369931 C0,17.0605241 8.77009655,\n\t\t\t\t\t\t23.4769655 9.14350345,23.7460966 C9.22990345,\n\t\t\t\t\t\t23.8096552 9.33318621,23.8404414 9.43448276,23.8404414 C9.53577931,\n\t\t\t\t\t\t23.8404414 9.63806897,23.8096552 9.72546207,23.7460966 C10.0978759,\n\t\t\t\t\t\t23.4769655 18.8689655,17.0605241 18.8689655,9.9369931 C18.8689655,\n\t\t\t\t\t\t4.27531034 14.813131,0.00595862069 9.43448276,0.00595862069 Z M9.43448276,\n\t\t\t\t\t\t14.9025103 C6.4224,14.9025103 3.97241379,12.451531 3.97241379,\n\t\t\t\t\t\t9.44044138 C3.97241379,6.42835862 6.4224,3.97837241 9.43448276,\n\t\t\t\t\t\t3.97837241 C12.4455724,3.97837241 14.8965517,6.42835862 14.8965517,\n\t\t\t\t\t\t9.44044138 C14.8965517,12.4525241 12.4455724,14.9025103 9.43448276,\n\t\t\t\t\t\t14.9025103 Z\" id=\"Shape\"></path>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t</g>\n\t\t</svg>\n    ","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'svg-station-location',\r\n\ttemplate: `\r\n\t\t<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\"\r\n\t\t\txmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n\t\t\t<defs></defs>\r\n\t\t\t<g id=\"Exports\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n\t\t\t\t<g id=\"icon-map_marker-filled\" fill-rule=\"nonzero\" fill=\"#000000\">\r\n\t\t\t\t\t<g id=\"Icon-Map_Marker-FILLED\" transform=\"translate(3.000000, 0.000000)\">\r\n\t\t\t\t\t\t<path d=\"M9.43448276,0.00595862069 C4.05583448,0.00595862069 0,\r\n\t\t\t\t\t\t4.27431724 0,9.9369931 C0,17.0605241 8.77009655,\r\n\t\t\t\t\t\t23.4769655 9.14350345,23.7460966 C9.22990345,\r\n\t\t\t\t\t\t23.8096552 9.33318621,23.8404414 9.43448276,23.8404414 C9.53577931,\r\n\t\t\t\t\t\t23.8404414 9.63806897,23.8096552 9.72546207,23.7460966 C10.0978759,\r\n\t\t\t\t\t\t23.4769655 18.8689655,17.0605241 18.8689655,9.9369931 C18.8689655,\r\n\t\t\t\t\t\t4.27531034 14.813131,0.00595862069 9.43448276,0.00595862069 Z M9.43448276,\r\n\t\t\t\t\t\t14.9025103 C6.4224,14.9025103 3.97241379,12.451531 3.97241379,\r\n\t\t\t\t\t\t9.44044138 C3.97241379,6.42835862 6.4224,3.97837241 9.43448276,\r\n\t\t\t\t\t\t3.97837241 C12.4455724,3.97837241 14.8965517,6.42835862 14.8965517,\r\n\t\t\t\t\t\t9.44044138 C14.8965517,12.4525241 12.4455724,14.9025103 9.43448276,\r\n\t\t\t\t\t\t14.9025103 Z\" id=\"Shape\"></path>\r\n\t\t\t\t\t</g>\r\n\t\t\t\t</g>\r\n\t\t\t</g>\r\n\t\t</svg>\r\n    `,\r\n})\r\n\r\nexport class SVGStationLocationComponent { }\r\n","<div class=\"bk-dialog bk-modal__large\">\r\n        \r\n    <button type=\"button\"\r\n        class=\"bk-button bk-dialog__close\"\r\n        (click)=\"close()\">\r\n\r\n        &times;\r\n    </button>\r\n    <h4 mat-dialog-title>\r\n        {{'Add' | translate }} {{'Weather Stations' | translate }}\r\n    </h4>\r\n\r\n    <div mat-dialog-content>\r\n        <div class=\"weather-station-container\">\r\n            \r\n            <div class=\"left-content-container bk-modal__left bk-weather-stations-left\">\r\n                <div *ngIf=\"showWeatherStationsList\">\r\n                    <div class=\"bk-warning-text--weather_stations\"\r\n                        *ngIf=\"zoomOutWarning\">\r\n                        {{'Zoom Out Warning Text' | translate }}.\r\n                    </div>\r\n                    <label class=\"bk-weather-station\"\r\n                        *ngFor=\"let station of weatherStations\">\r\n                        <input [checked]=\"station.Selected || station.isCurrent\"\r\n                            class=\"bk-modal__checkbox--left\"\r\n                            type=\"checkbox\"\r\n                            (click)=\"selectStation(station)\"\r\n                            [disabled]=\"station.isCurrent\"\r\n                            [ngClass]=\"{'bk-modal__checkbox--disabled' : station.isCurrent}\"/>\r\n\r\n                        <span class=\"bk-modal__label-text\">\r\n                            <span class=\"bk-bold bk-weather-station__name\">\r\n                                {{station.Name}} (#{{station.External_Id}})\r\n                            </span>\r\n\r\n                            <span>\r\n                                {{station.Distance}} {{'miles' | translate }} - {{station.NearestCity}}, {{station.County}}\r\n                            </span>\r\n                        </span>\r\n                    </label>\r\n                </div>\r\n            </div>\r\n            <div class=\"bk-modal__right bk-weather-stations-right\">\r\n                <div class=\"bk-modal__right-instructions\">\r\n                    {{'Weather Station Instruction Text' | translate }}\r\n                </div>\r\n                <div class=\"bk-modal__right-instructions\">\r\n                    <div class=\"bk-marker bk-marker--ranch\">\r\n                        <svg-ranch-marker></svg-ranch-marker>\r\n                    </div>\r\n                    {{'Ranch Location' | translate }} \r\n                    <div class=\"bk-marker bk-marker--unselected\">\r\n                        <svg-station-location></svg-station-location>\r\n                    </div>\r\n                    {{'Unselected Station' | translate }} \r\n                    <div class=\"bk-marker bk-marker--selected\">\r\n                        <svg-station-location></svg-station-location>\r\n                    </div>\r\n                    {{'Selected Station' | translate }}\r\n                </div>\r\n                <div *ngIf=\"!ranchLocation\"\r\n                    class=\"bk-modal__warning-section\">\r\n\r\n                    <mat-icon>warning</mat-icon>Ranch coordinates are missing. Edit the ranch to\r\n                    update ranch coordinates.\r\n                </div>\r\n                <div class=\"map-container bk-modal__map-container\">\r\n                    <agm-map (boundsChange)=\"resetMapOnboundsChange($event)\"\r\n                        [mapTypeId]=\"'hybrid'\"\r\n                        [fullscreenControl]=\"true\">\r\n\r\n                        <agm-marker *ngFor=\"let station of weatherStations\"\r\n                            [iconUrl]=\"getStationMarker(station)\"\r\n                            [latitude]=\"station.Latitude\"\r\n                            [longitude]=\"station.Longitude\"\r\n                            [label]=\"getStationId(station.External_Id)\"\r\n                            (markerClick)=\"selectStation(station)\">\r\n                        </agm-marker>\r\n\r\n                        <ng-container *ngIf=\"ranchLocation\">\r\n                            <agm-marker\r\n                                [iconUrl]=\"'../assets/images/icons/map_marker-ranch-v2.png'\"\r\n                                [latitude]=\"ranchLocation.Latitude\"\r\n                                [longitude]=\"ranchLocation.Longitude\">\r\n                            </agm-marker>\r\n                        </ng-container>\r\n                        <map-control></map-control>\r\n                    </agm-map>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n        <button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"close()\">\r\n            {{'Cancel' | translate }}\r\n        </button>\r\n        <button class=\"bk-button bk-button--medium\"\r\n            (click)=\"addSelectedStations(weatherStations)\">\r\n            {{'Add' | translate }} {{'Selected Station(s)' | translate }}\r\n        </button>\r\n    </div>\r\n</div>","import { Component, ViewChild, OnInit } from '@angular/core';\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { AgmMap, LatLngBounds, LatLng } from '@agm/core';\r\n\r\n\r\nimport { MapControlDirective } from '../../../../directives/map-control.directive';\r\nimport { IMarkerCollection, IWeatherStationCurrentModel, IMarker } from '../../interfaces';\r\nimport { WeatherStationsService } from '../../../../models/weather-station-stats/service';\r\nimport { IMapIconSize, IMapIcon } from './interfaces';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { SharedKeepDiscardDialog } from '../../../shared/dialogs/keep-discard-dialog';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\nimport { IWeatherStationViewModel } from '../../../weather-stations/interfaces';\r\nimport { DIALOG_HIDE_CLASS } from '../../../shared/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ranch-weather-station-modal',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: ['main.scss']\r\n})\r\n\r\n/**\r\n * Refactoring notes:\r\n *\r\n * - cleaned up public/private (8/9/2019)\r\n */\r\nexport class RanchWeatherStationModalComponent implements OnInit {\r\n\tprivate _icons: {\r\n\t\tselected: IMapIcon,\r\n\t\tunselected: IMapIcon\r\n\t};\r\n\r\n\tprivate readonly _iconSizes: {\r\n\t\tregular: IMapIconSize,\r\n\t\tsmall: IMapIconSize\r\n\t}\r\n\r\n\t@ViewChild(AgmMap, { static: false }) private _map: AgmMap;\r\n\t@ViewChild(MapControlDirective, { static: false }) private _mapControl: MapControlDirective;\r\n\tprivate readonly _mininumZoomLevel: number = 7;\r\n\tprivate _originalStations: IMarker[] = new Array();\r\n\tprivate _userMadeChanges: boolean;\r\n\tprivate _zoom = 10;\r\n\r\n\tpublic isSaving: boolean;\r\n\tpublic loadingData = true;\r\n\tpublic ranchLocation: IMarker = null;\r\n\tpublic showWeatherStationsList = false;\r\n\tpublic weatherStations: IMarker[] = new Array();\r\n\tpublic zoomOutWarning = false;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\r\n\tconstructor(\r\n\t\tprivate _dialogRef: MatDialogRef<RanchWeatherStationModalComponent>,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t\tprivate _weatherStationService: WeatherStationsService) {\r\n\r\n\t\tthis._iconSizes = {\r\n\t\t\tregular: {\r\n\t\t\t\theight: 50,\r\n\t\t\t\twidth: 80\r\n\t\t\t},\r\n\t\t\tsmall: {\r\n\t\t\t\theight: 10,\r\n\t\t\t\twidth: 10\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis._icons = {\r\n\t\t\tselected: {\r\n\t\t\t\turl: '../assets/images/icons/map_marker-weather_station-selected.png',\r\n\t\t\t\tscaledSize: this._iconSizes.regular\r\n\t\t\t},\r\n\t\t\tunselected: {\r\n\t\t\t\turl: '../assets/images/icons/map_marker-weather_station.png',\r\n\t\t\t\tscaledSize: this._iconSizes.regular\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic ngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.isSaving = false;\r\n\r\n\t\tthis._clear();\r\n\t\tthis._getAddWeatherStationData();\r\n\r\n\t\tthis._sharedUpdateService.keep$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\r\n\t\t\tthis._show();\r\n\t\t});\r\n\r\n\t\tthis._sharedUpdateService.discard$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\r\n\t\t\tthis._dialogRef.close();\r\n\t\t})\r\n\r\n\t\tthis._dialogRef.backdropClick()\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe((e: MouseEvent) => {\r\n\t\t\tthis.close();\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tprivate _show(): void {\r\n\t\tthis._dialogRef.removePanelClass(DIALOG_HIDE_CLASS);\r\n\t}\r\n\r\n\tprivate _hide(): void {\r\n\t\tthis._dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\t}\r\n\r\n\tpublic addSelectedStations(stations: IMarker[]): void {\r\n\t\tstations = stations.filter(data => data.Selected);\r\n\r\n\t\tif (!stations.length) {\r\n\t\t\tthis._dialogRef.close();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._weatherStationService.addStationsToRanch(stations)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t\tthis._updateService.setRanchSettingsUpdated('weatherStations');\r\n\t\t\t\tthis._dialogRef.close();\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tif (this._userMadeChanges) {\r\n\t\t\tthis._dialog.open(SharedKeepDiscardDialog, {\r\n\t\t\t\twidth: '500px',\r\n\t\t\t\tdisableClose: true,\r\n\t\t\t});\r\n\r\n\t\t\tthis._hide();\r\n\t\t} else {\r\n\t\t\tthis._dialogRef.close();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getStationId(stationId: string): string {\r\n\t\tif (this._zoom < this._mininumZoomLevel) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn stationId;\r\n\t}\r\n\r\n\tpublic getStationMarker(station: IMarker): IMapIcon {\r\n\t\tif (this._zoom < this._mininumZoomLevel) {\r\n\t\t\tthis._icons.selected.url = '../assets/images/icons/map_marker-weather_station-selected-small.png';\r\n\t\t\tthis._icons.unselected.url = '../assets/images/icons/map_marker-weather_station-small.png';\r\n\t\t} else {\r\n\t\t\tthis._icons.selected.url = '../assets/images/icons/map_marker-weather_station-selected.png';\r\n\t\t\tthis._icons.unselected.url = '../assets/images/icons/map_marker-weather_station.png';\r\n\t\t}\r\n\r\n\t\tif (station.Selected || station.isCurrent) {\r\n\t\t\treturn this._icons.selected;\r\n\t\t} else {\r\n\t\t\treturn this._icons.unselected;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic removeWeatherStation(): void {\r\n\t\tif (this.weatherStations[0]) {\r\n\t\t\tthis._weatherStationService.removeFromRanch(this.weatherStations[0].Id)\r\n\t\t\t\t.then(res => {\r\n\t\t\t\t\tthis._updateService.setRanchSettingsUpdated('weatherStations');\r\n\t\t\t\t\tthis._dialogRef.close();\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic resetMapOnboundsChange(bounds: LatLngBounds): void {\r\n\t\tthis._mapControl.getZoom().then(res => {\r\n\t\t\tlet zoom = Number(res);\r\n\r\n\t\t\tif (zoom !== this._zoom && this.showWeatherStationsList) {\r\n\t\t\t\tthis._zoom = zoom;\r\n\t\t\t\tthis._scaleMarkerIconSizes(this._zoom);\r\n\t\t\t}\r\n\r\n\t\t\tthis._setWeatherStations(bounds);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic selectStation(selectedStation: IMarker): void {\r\n\t\tif (!selectedStation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (selectedStation.isCurrent) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let station of this.weatherStations) {\r\n\t\t\tif (station.Id === selectedStation.Id) {\r\n\t\t\t\tstation.Selected = !station.Selected;\r\n\t\t\t\tthis._userMadeChanges = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (let station of this._originalStations) {\r\n\t\t\tif (station.Id === selectedStation.Id) {\r\n\t\t\t\tstation.Selected = !station.Selected;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected preventClose(e?: MouseEvent): boolean {\r\n\t\treturn this.loadingData;\r\n\t}\r\n\r\n\tprivate _clear(): void {\r\n\t\tthis.weatherStations = new Array();\r\n\t\tthis.ranchLocation = null;\r\n\t\tthis._originalStations = new Array();\r\n\t\tthis._userMadeChanges = false;\r\n\t\tthis._zoom = 10;\r\n\t\tthis.showWeatherStationsList = false;\r\n\t\tthis._icons.selected.scaledSize = this._iconSizes.regular;\r\n\t\tthis._icons.unselected.scaledSize = this._iconSizes.regular;\r\n\t\tthis.zoomOutWarning = false;\r\n\t\tthis.loadingData = true;\r\n\t}\r\n\r\n\tprivate _getAddWeatherStationData(): void {\r\n\t\tthis._processAddWeatherStationData().then(() => {\r\n\t\t\tthis.weatherStations = this._sortStationsByDistanceFromRanch(this.weatherStations);\r\n\t\t\tthis._originalStations = this._sortStationsByDistanceFromRanch(this._originalStations);\r\n\t\t\tthis.loadingData = false;\r\n\t\t\tthis._resetMap();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _processAddWeatherStationData(): Promise<void> {\r\n\t\tlet promises: {\r\n\t\t\tranchStations: Promise<IMarkerCollection>,\r\n\t\t\tlistAll: Promise<IWeatherStationViewModel[]>,\r\n\t\t\tcurrentModels: Promise<IWeatherStationCurrentModel[]>\r\n\t\t};\r\n\r\n\t\tpromises = {\r\n\t\t\tranchStations: this._weatherStationService.listRanchStations(),\r\n\t\t\tlistAll: this._weatherStationService.listAll(),\r\n\t\t\tcurrentModels: this._weatherStationService.getRanchWeatherStations()\r\n\t\t\t\t// getRanchWeatherStations() data is only used to tag the big list with a ranch association... its a needless call\r\n\t\t};\r\n\r\n\t\treturn Promise.all([promises.ranchStations, promises.listAll, promises.currentModels]).\r\n\t\t\tthen((res: [IMarkerCollection, IWeatherStationViewModel[], IWeatherStationCurrentModel[]]) => {\r\n\r\n\t\t\tlet allStations: IMarkerCollection; // contains ranch location and a list of all stations\r\n\t\t\tlet associatedStations: IWeatherStationCurrentModel[]; // stations  already associated with the ranch\r\n\r\n\t\t\tallStations = this._weatherStationService.combineStationArrays(res[0], res[1]);\r\n\t\t\tassociatedStations = res[2];\r\n\r\n\t\t\tthis.ranchLocation = allStations.RanchLocation;\r\n\r\n\t\t\tfor (let station of allStations.Stations) {\r\n\t\t\t\tstation.isCurrent = false;\r\n\r\n\t\t\t\tfor (let currentStation of associatedStations) {\r\n\t\t\t\t\tif (station.Id === currentStation.Id) {\r\n\t\t\t\t\t\tstation.isCurrent = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!station.isCurrent) { // ignore stations already associated with the ranch\r\n\t\t\t\t\tthis.weatherStations.push(station);\r\n\t\t\t\t\tthis._originalStations.push(station);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _recenterMap(lat: number, lng: number, zoom: number): Promise<void> {\r\n\t\tlet promises: Promise<void>[] = new Array();\r\n\t\tpromises.push(this._mapControl.centerMap(lat, lng));\r\n\t\tpromises.push(this._mapControl.setZoom(zoom));\r\n\r\n\t\treturn Promise.all(promises).then(() => {\r\n\t\t\tthis._setInitialBounds().then(() => {\r\n\t\t\t\tthis.showWeatherStationsList = true;\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _resetMap(): void {\r\n\t\tif (!this._map || !this.ranchLocation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._map.triggerResize().then(() => {\r\n\t\t\tthis._recenterMap(this.ranchLocation.Latitude, this.ranchLocation.Longitude, this._zoom);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _scaleMarkerIconSizes(zoom: number): void {\r\n\t\tlet scaledSize: {\r\n\t\t\theight: number,\r\n\t\t\twidth: number\r\n\t\t} = this._iconSizes.regular;\r\n\r\n\t\tif (zoom < 10 && zoom >= this._mininumZoomLevel) {\r\n\t\t\tscaledSize = {\r\n\t\t\t\theight: this._iconSizes.regular.height * ((zoom - 5) / 5),\r\n\t\t\t\twidth: this._iconSizes.regular.width * ((zoom - 5) / 5)\r\n\t\t\t}\r\n\t\t} else if (zoom < this._mininumZoomLevel) {\r\n\t\t\tscaledSize = this._iconSizes.small;\r\n\t\t}\r\n\r\n\t\tthis._icons.selected.scaledSize = scaledSize;\r\n\t\tthis._icons.unselected.scaledSize = scaledSize;\r\n\t}\r\n\r\n\tprivate _setInitialBounds(): Promise<void> {\r\n\t\treturn this._mapControl.getBounds()\r\n\t\t\t.then(bounds => {\r\n\t\t\t\tthis.resetMapOnboundsChange(bounds);\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _setWeatherStations(bounds: LatLngBounds): void {\r\n\t\tlet filteredStations: IMarker[];\r\n\t\tlet stationsWithinBounds: IMarker[];\r\n\t\tlet ne: LatLng;\r\n\t\tlet sw: LatLng;\r\n\r\n\t\tthis.zoomOutWarning = false;\r\n\r\n\t\tfilteredStations = new Array();\r\n\t\tstationsWithinBounds = new Array();\r\n\r\n\t\tif (!bounds) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tne = bounds.getNorthEast();\r\n\t\tsw = bounds.getSouthWest();\r\n\r\n\t\tif (!ne || !sw) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let station of this._originalStations) {\r\n\r\n\t\t\tif (station.Latitude >= sw.lat() && station.Latitude <= ne.lat() &&\r\n\t\t\t\tstation.Longitude >= sw.lng() && station.Longitude <= ne.lng()) {\r\n\r\n\t\t\t\tstationsWithinBounds.push(station);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!stationsWithinBounds || stationsWithinBounds.length === 0) {\r\n\t\t\tthis.zoomOutWarning = true;\r\n\r\n\t\t\tfilteredStations = this._originalStations\r\n\t\t\t\t.filter(data => data.Selected);\r\n\t\t} else {\r\n\t\t\tfilteredStations = this._originalStations\r\n\t\t\t\t.filter(data => data.Selected ||\r\n\t\t\t\t\t(data.Latitude >= sw.lat() && data.Latitude <= ne.lat() && // NE latitude is bigger than SW\r\n\t\t\t\t\t\tdata.Longitude >= sw.lng() && data.Longitude <= ne.lng())); // NE long is bigger than SW (because they're negative numbers)\r\n\t\t}\r\n\r\n\t\tthis.weatherStations = new Array();\r\n\r\n\t\tfor (let station of filteredStations) {\r\n\t\t\tlet copy: IMarker;\r\n\r\n\t\t\tcopy = jQuery.extend(true, {}, station);\r\n\t\t\tthis.weatherStations.push(copy);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _sortStationsByDistanceFromRanch(stations: IMarker[]): IMarker[] {\r\n\t\tif (!stations) {\r\n\t\t\treturn new Array();\r\n\t\t}\r\n\r\n\t\tstations.sort(function (a, b) {\r\n\t\t\treturn a.Distance - b.Distance;\r\n\t\t});\r\n\r\n\t\treturn stations;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { IPermissionsService } from './interfaces';\r\n\r\n\r\nimport { IRanchPermissions, ISuccessResponse, IRanchFeatureEmptyPermissions,\r\n\tIRanchPermissionTypes, IRanchUserPermissionWithWebAPIViewModel } from './interfaces';\r\n\r\nimport { CMError } from '../../interfaces/interfaces';\r\n\r\n@Injectable()\r\nexport class PermissionsService implements IPermissionsService {\r\n\r\n\tprivate ranchPermissionTypes: IRanchPermissionTypes[] = [\r\n\t\t{\r\n\t\t\t'PermissionId': 1,\r\n\t\t\t'PermissionName': 'No Access'\r\n\t\t},\r\n\t\t{\r\n\t\t\t'PermissionId': 2,\r\n\t\t\t'PermissionName': 'View Only'\r\n\t\t},\r\n\t\t{\r\n\t\t\t'PermissionId': 3,\r\n\t\t\t'PermissionName': 'Edit'\r\n\t\t}\r\n\t];\r\n\r\n\tprivate ranchFeatureDefaultPermissions: IRanchFeatureEmptyPermissions[] = [\r\n\t\t{\r\n\t\t\t'FeatureId': 1,\r\n\t\t\t'FeatureName': 'Ranch',\r\n\t\t\t'PermissionId': 2\r\n\t\t},\r\n\t\t{\r\n\t\t\t'FeatureId': 2,\r\n\t\t\t'FeatureName': 'Planting',\r\n\t\t\t'PermissionId': 3\r\n\t\t},\r\n\t\t{\r\n\t\t\t'FeatureId': 3,\r\n\t\t\t'FeatureName': 'Soil Sample',\r\n\t\t\t'PermissionId': 3\r\n\t\t},\r\n\t\t{\r\n\t\t\t'FeatureId': 4,\r\n\t\t\t'FeatureName': 'Fertilization',\r\n\t\t\t'PermissionId': 3\r\n\t\t},\r\n\t\t{\r\n\t\t\t'FeatureId': 5,\r\n\t\t\t'FeatureName': 'Irrigation',\r\n\t\t\t'PermissionId': 3\r\n\t\t},\r\n\t\t{\r\n\t\t\t'FeatureId': 6,\r\n\t\t\t'FeatureName': 'Data Export',\r\n\t\t\t'PermissionId': 1\r\n\t\t}\r\n\t];\r\n\r\n\r\n\tprivate ranchFeatureEmptyPermissions: IRanchFeatureEmptyPermissions[] = [\r\n\t\t{\r\n\t\t\t'FeatureId': 1,\r\n\t\t\t'FeatureName': 'Ranch',\r\n\t\t\t'PermissionId': null\r\n\t\t},\r\n\t\t{\r\n\t\t\t'FeatureId': 2,\r\n\t\t\t'FeatureName': 'Planting',\r\n\t\t\t'PermissionId': null\r\n\t\t},\r\n\t\t{\r\n\t\t\t'FeatureId': 3,\r\n\t\t\t'FeatureName': 'Soil Sample',\r\n\t\t\t'PermissionId': null\r\n\t\t},\r\n\t\t{\r\n\t\t\t'FeatureId': 4,\r\n\t\t\t'FeatureName': 'Fertilization',\r\n\t\t\t'PermissionId': null\r\n\t\t},\r\n\t\t{\r\n\t\t\t'FeatureId': 5,\r\n\t\t\t'FeatureName': 'Irrigation',\r\n\t\t\t'PermissionId': null\r\n\t\t},\r\n\t\t{\r\n\t\t\t'FeatureId': 6,\r\n\t\t\t'FeatureName': 'Data Export',\r\n\t\t\t'PermissionId': null\r\n\t\t}\r\n\t];\r\n\r\n\tprivate urls = {\r\n\t\tranchPlantingPermissions: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/permissions.json`,\r\n\t\tranchMemberPermissions: {\r\n\t\t\tshow: (ranchGuid: string, userId: string) => `/v2/ranches/${ranchGuid}/users/${userId}/permissions.json`,\r\n\t\t\tshowAdminOnly: (ranchGuid: string, userId: string) => `/v0/ranches/${ranchGuid}/users/${userId}/permissions.json`,\r\n\t\t\tupdate: (ranchGuid: string, userId: string) => `/v2/ranches/${ranchGuid}/users/${userId}/permissions.json`,\r\n\t\t\tupdateAdminOnly: (ranchGuid: string, userId: string) => `/v0/ranches/${ranchGuid}/users/${userId}/permissions.json`,\r\n\t\t}\r\n\t};\r\n\r\n\tconstructor(private updateService: UpdateService, private httpService: HttpService) { }\r\n\r\n\tpublic getRanchPlantingsPermissions(id: string): Promise<IRanchPermissions> {\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.ranchPlantingPermissions(id),\r\n\t\t\tcallback: function (json: IRanchPermissions) {\r\n\t\t\t\treturn json;\r\n\t\t\t},\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getRanchMemberPermissions(userId: string, ranchGuid?: string,\r\n\t\tshouldPermissionProtect = true): Promise<IRanchUserPermissionWithWebAPIViewModel | CMError> {\r\n\t\tranchGuid = ranchGuid ? ranchGuid : this.updateService.currentRanchId;\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: shouldPermissionProtect ? this.urls.ranchMemberPermissions.show(ranchGuid, userId) :\r\n\t\t\t\tthis.urls.ranchMemberPermissions.showAdminOnly(ranchGuid, userId),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: function (json: IRanchUserPermissionWithWebAPIViewModel) {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\treturn Promise.resolve(json);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn {};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic editRanchMemberPermissions(userId: string, permissions: IRanchFeatureEmptyPermissions[],\r\n\t\tranchGuid?: string, adminOnly = false): Promise<ISuccessResponse> {\r\n\r\n\t\tranchGuid = ranchGuid ? ranchGuid : this.updateService.currentRanchId;\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.put({\r\n\t\t\t\turl: adminOnly ?\r\n\t\t\t\t\tthis.urls.ranchMemberPermissions.updateAdminOnly(ranchGuid, userId) :\r\n\t\t\t\t\tthis.urls.ranchMemberPermissions.update(ranchGuid, userId),\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tbody: { 'Site': permissions, 'WebAPIAccess': false },\r\n\t\t\t\tcallback: (response: ISuccessResponse) => { return response }\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic getRanchPermissionTypes(): IRanchPermissionTypes[] {\r\n\t\treturn this.ranchPermissionTypes;\r\n\t}\r\n\r\n\tpublic getRanchFeatureDefaultPermissions(): IRanchFeatureEmptyPermissions[] {\r\n\t\treturn this.ranchFeatureDefaultPermissions;\r\n\t}\r\n\r\n\tpublic getRanchFeatureEmptyPermissions(): IRanchFeatureEmptyPermissions[] {\r\n\t\treturn this.ranchFeatureEmptyPermissions;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport * as moment from 'moment';\r\nimport * as fileSaver from 'file-saver';\r\nimport { of } from 'rxjs';\r\n\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { HttpService } from '../../services/http.service';\r\n\r\nimport { Plantings } from '../plantings/plantings';\r\nimport { CropType } from '../../models/crop-type/cropType';\r\n\r\nimport { IRanchesArray, CMError, SuccessResponse, CMErrors } from '../../interfaces/interfaces';\r\nimport { IPlanting, ILotPlantingFavoritesJSON, IPlantingsViewModel } from '../planting-settings/interfaces';\r\nimport { ILotEdit, IRanchLotModel, RanchLotJSON } from './modals/lot/interfaces';\r\nimport { IWell } from '../../models/planting-well/well.interface';\r\nimport { IRanch, IRanchBasicInfoViewModel, IRanchSettingsValidationStates, IRanchFavoritesPostResponse,\r\n\tISubjectFavoriteResponse, IRanchLotEditJSON, IRanchLotJSONModel, IRanchUserListItem,\r\n\tISuccessResponse,\r\n\tIUserSearchResult, IRanchService, IUserRanchesViewModel, IRanchFavoritesJSON, IRanchJSON,\r\n\tIRanchLotUpdateModel, IRanchWellViewModel, RanchExistsModel, RanchUpdateParams,\r\n\tRanchUpdateCIMISParams, RanchCreateResponse, RanchLotInternalUpdateModel } from './interfaces';\r\n\r\nimport { eCommodityTypes } from '../../interfaces/constants';\r\nimport { Planting } from '../planting-settings/planting';\r\nimport { IIdNamePair } from '../../interfaces/abstract';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { TokenService } from '../../services/token.service';\r\nimport { Token } from '../../services/interface';\r\nimport { environment } from '../../../environments/environment';\r\nimport { ReleaseVersion } from '../../services/constants';\r\nimport { ISortable } from '../../classes/array';\r\n\r\nexport class RanchFavoritesModel {\r\n\tpublic Id: number;\r\n\tpublic Ranch: RanchModel;\r\n\tpublic RanchId: number;\r\n\tpublic UserID: string;\r\n}\r\n\r\nexport class RanchModel {\r\n\tpublic ActivePlantings: number;\r\n\tpublic CreatedByFullName: string;\r\n\tpublic Id: number;\r\n\tpublic Name: string;\r\n\tpublic RanchAccessState: number;\r\n\tpublic Ranch_External_GUID: string;\r\n\tpublic UserAccessState: number;\r\n}\r\n\r\n@Injectable()\r\nexport class RanchService implements IRanchService {\r\n\r\n\tprivate urls = {\r\n\t\tRanch: {\r\n\t\t\tcreate: `/v3/ranches.json`,\r\n\t\t\tget: (ranchGuid: string) => `/v2/ranches/${ranchGuid}.json`,\r\n\t\t\tbasicFormAdminOnly: (ranchGuid: string) => `/v0/ranches/${ranchGuid}.json`,\r\n\t\t\tupdate: (ranchGuid: string) => `/v3/ranches/${ranchGuid}.json`,\r\n\t\t\tupdateCIMISOptions: (ranchGuid: string) => `/v3/ranches/${ranchGuid}/cimis-options.json`,\r\n\t\t\tdelete: (ranchGuid: string) => `/v2/ranches/${ranchGuid}.json`,\r\n\t\t\texcelOutput: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/excel.json`,\r\n\t\t\texcelYears: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/years.json`,\r\n\t\t\tmissingSettings: (ranchGUID: string) => `/v2/ranches/${ranchGUID}/missing-settings.json`,\r\n\t\t\texists: `/v2/ranches/exists.json`,\r\n\r\n\t\t\tuser: {\r\n\t\t\t\tlist: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/users.json`,\r\n\t\t\t\tsearch:  (ranchGuid: string) => `/v2/ranches/${ranchGuid}/users/search.json`,\r\n\t\t\t\tcreate: (ranchGuid: string, userId: string) => `/v2/ranches/${ranchGuid}/users/${userId}.json`,\r\n\t\t\t\tdelete: (ranchGuid: string, userIdTarget: string) => `/v2/ranches/${ranchGuid}/users/${userIdTarget}.json`,\r\n\t\t\t\tdeleteAdminOnly: (ranchGuid: string, userIdTarget: string) => `/v0/ranches/${ranchGuid}/users/${userIdTarget}.json`,\r\n\t\t\t},\r\n\t\t\tlots: {\r\n\t\t\t\tlist: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/lots/extended.json`,\r\n\t\t\t\tcreateForm: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/lots/form.json`,\r\n\t\t\t\tcreate: (ranchGuid: string) => `/v0/ranches/${ranchGuid}/lots.json`,\r\n\t\t\t\tshow: (lotId: number) => `/v2/lots/${lotId}.json`,\r\n\t\t\t\tupdate: (lotId: number) => `/v0/lots/${lotId}.json`,\r\n\t\t\t\tdelete: (lotId: number) => `/v2/lots/${lotId}.json`,\r\n\t\t\t},\r\n\t\t\twell: {\r\n\t\t\t\tlist: (id: string) => `/v2/ranches/${id}/ranch-wells.json`,\r\n\t\t\t\tupdate: (ranchGuid: string, wellId: number) => `/v2/ranches/${ranchGuid}/wells/${wellId}.json`,\r\n\t\t\t\teditForm: (wellId: number) => `/v2/wells/${wellId}.json`,\r\n\t\t\t\tcreate: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/wells.json`,\r\n\t\t\t\tdelete: (ranchGuid: string, wellId: number) => `/v2/ranches/${ranchGuid}/wells/${wellId}.json`\r\n\t\t\t},\r\n\t\t},\r\n\t\tDashboard: {\r\n\t\t\tranchesForCurrentUser: '/v2/ranches.json',\r\n\t\t\tgetPlantings: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/plantings.json`,\r\n\t\t},\r\n\t\tRanchFavorite: {\r\n\t\t\tlist: '/v2/ranch-favorites.json',\r\n\t\t\tsave: (ranchId: number) => `/v2/ranches/${ranchId}/favorites.json`,\r\n\t\t\tdelete: (favoriteId: number) => `/v2/ranch-favorites/${favoriteId}.json`,\r\n\t\t},\r\n\t\tLotPlantingFavorites: {\r\n\t\t\tget: (ranchGUID: string) => `/v2/ranches/${ranchGUID}/plantings/favorites.json`,\r\n\t\t\tsave: (lotPlantingId: number) => `/v2/plantings/${lotPlantingId}/favorites.json`,\r\n\t\t\tdelete: (favoriteId: number) => `/v2/planting-favorites/${favoriteId}.json`,\r\n\t\t},\r\n\t\tRanchLot: {\r\n\t\t\tlist: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/lots.json`,\r\n\t\t\tlistMinimal: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/lots/minimal.json`,\r\n\t\t\tisUsed: (ranchGuid: string, ranchLotId: number) => `/v2/ranches/${ranchGuid}/lots/${ranchLotId}/is-used.json`,\r\n\t\t},\r\n\t};\r\n\r\n\tpublic ranches: IRanchesArray = { // storing a cache of ranches at a global level to prevent resetting data\r\n\t\tmyRanches: new Array() as IRanch[],\r\n\t\tfavorites: new Array() as IRanch[],\r\n\t\tpublic: new Array() as IRanch[],\r\n\t\tloaded: {\r\n\t\t\tmyRanches: false,\r\n\t\t\tfavorites: false,\r\n\t\t\tpublic: false\r\n\t\t}\r\n\t};\r\n\r\n\tpublic wells: IWell[]; // global cache\r\n\r\n\tpublic plantings = new Plantings();\r\n\r\n\tpublic currentRanchLots: IRanchLotJSONModel[] = new Array();\r\n\r\n\tconstructor(private updateService: UpdateService,\r\n\t\tprivate httpService: HttpService,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate http: HttpClient) {\r\n\t}\r\n\r\n\tpublic getMyRanches(): Promise<IRanch[]> {\r\n\t\tlet promises: Promise<IRanch[]>[] = new Array();\r\n\r\n\t\tif (this.ranches.myRanches.length > 0) {\r\n\t\t\treturn of(this.ranches.myRanches).toPromise();\r\n\t\t}\r\n\r\n\t\tpromises.push(this._getRanchesForCurrentUser());\r\n\t\tpromises.push(this.getFavoriteRanches()); // need this to mark favorites\r\n\r\n\t\treturn Promise.all(promises)\r\n\t\t\t.then((response) => this._combineWithFavoritesData(response[0], response[1]));\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Clear ranches cache - called when logging out\r\n\t */\r\n\tpublic clearRanchesCache(): void {\r\n\t\tthis.ranches =  {\r\n\t\t\tmyRanches: new Array(),\r\n\t\t\tfavorites: new Array(),\r\n\t\t\tpublic: new Array(),\r\n\t\t\tloaded: {\r\n\t\t\t\tmyRanches: false,\r\n\t\t\t\tfavorites: false,\r\n\t\t\t\tpublic: false\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _getRanchesForCurrentUser(): Promise<IRanch[]> {\r\n\r\n\t\tif (this.ranches.loaded.myRanches === true) {\r\n\t\t\treturn of(this.ranches.myRanches).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Dashboard.ranchesForCurrentUser,\r\n\t\t\tsearchParams: null,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (json: IUserRanchesViewModel[]): IRanch[] => {\r\n\t\t\t\tthis.ranches.loaded.myRanches = true;\r\n\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn new Array();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n\r\n\tpublic sortRanchesByName(ar: ISortable[], callback?: Function) {\r\n\r\n\t\tar.sort(function (a: ISortable, b: ISortable) {\r\n\t\t\tif (callback) {\r\n\t\t\t\treturn callback(a.Name, b.Name);\r\n\t\t\t} else {\r\n\t\t\t\treturn a.Name.toLowerCase() > b.Name.toLowerCase() ? 1 : a.Name.toLowerCase() < b.Name.toLowerCase() ? -1 : 0;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn ar;\r\n\t}\r\n\r\n\t// Add ranch to the favorites ranch list, so we can avoid fetching data\r\n\t// @ranchFavorite - a translation of ranchFavorite JSON, received from /save call, containing ranch data\r\n\tpublic addRanchToFavoritesList(ranchFavorite: ISubjectFavoriteResponse): void {\r\n\r\n\t\tif (!ranchFavorite || !ranchFavorite.ranch) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tranchFavorite.ranch.Favorite = true;\r\n\t\tranchFavorite.ranch.FavoriteId = ranchFavorite.favoriteId;\r\n\r\n\t\tthis.ranches.favorites.push(ranchFavorite.ranch);\r\n\t\tthis.sortRanchesByName(this.ranches.favorites);\r\n\t}\r\n\r\n\tpublic getFavoriteRanches(override = false): Promise<IRanch[]> {\r\n\r\n\t\tif (this.ranches.loaded.favorites === true && override === false) {\r\n\t\t\treturn of(this.ranches.favorites).toPromise();\r\n\t\t\t// return new Observable().toPromise().then(() => (this.ranches.favorites));\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.RanchFavorite.list,\r\n\t\t\tsearchParams: null,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (ranchFavorites: IRanchFavoritesJSON[]): IRanch[] => {\r\n\t\t\t\tlet result: IRanch[];\r\n\r\n\t\t\t\tresult = [];\r\n\r\n\t\t\t\tthis.ranches.loaded.favorites = true;\r\n\r\n\t\t\t\tif (!ranchFavorites || ranchFavorites.length === 0) {\r\n\t\t\t\t\treturn new Array();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (let ranchFavorite of ranchFavorites) {\r\n\t\t\t\t\tlet item: IRanch;\r\n\r\n\t\t\t\t\titem = {\r\n\t\t\t\t\t\tId: ranchFavorite.RanchId,\r\n\t\t\t\t\t\tName: ranchFavorite.Ranch.Name,\r\n\t\t\t\t\t\tFavorite: true,\r\n\t\t\t\t\t\tFavoriteId: ranchFavorite.Id,\r\n\t\t\t\t\t\tActivePlantings: ranchFavorite.Ranch.ActivePlantings,\r\n\t\t\t\t\t\tCreatedByFullName: ranchFavorite.Ranch.CreatedByFullName,\r\n\t\t\t\t\t\tRanchAccessState: ranchFavorite.Ranch.RanchAccessState,\r\n\t\t\t\t\t\tRanch_External_GUID: ranchFavorite.Ranch.Ranch_External_GUID,\r\n\t\t\t\t\t\tUserAccessState: ranchFavorite.Ranch.UserAccessState,\r\n\t\t\t\t\t\tRanchOwnerFullName: ranchFavorite.Ranch.RanchOwnerFullName\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tresult.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.ranches.favorites = result;\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getMissingSettings(ranchGUID: string): Promise<IRanchSettingsValidationStates> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Ranch.missingSettings(ranchGUID),\r\n\t\t\tcallback: (r: IRanchSettingsValidationStates) => {\r\n\t\t\t\treturn r;\r\n\t\t\t},\r\n\t\t\tisWebAPI: true,\r\n\t\t})\r\n\t}\r\n\r\n\tpublic exists(ranchGUID: string): Promise<RanchExistsModel> {\r\n\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams().set('ranchGuid', ranchGUID);\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Ranch.exists,\r\n\t\t\tsearchParams: params,\r\n\t\t\tcallback: (r: RanchExistsModel): RanchExistsModel => {\r\n\t\t\t\treturn r;\r\n\t\t\t},\r\n\t\t\tisWebAPI: true\r\n\t\t})\r\n\t}\r\n\r\n\tpublic getExcelYears(ranchGUID: string): Promise<number[]> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Ranch.excelYears(ranchGUID),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: (r: number[]) => {\r\n\t\t\t\treturn r;\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tprivate _combineWithFavoritesData(ranches: IRanch[], favorites: IRanch[]): IRanch[] {\r\n\r\n\t\tif (!ranches || ranches.length === 0) {\r\n\t\t\treturn new Array();\r\n\t\t}\r\n\r\n\t\tfor (let ranch of ranches) {\r\n\t\t\tlet favorite: IRanch;\r\n\r\n\t\t\tfavorite = favorites.find(x => x.Id === ranch.Id);\r\n\r\n\t\t\tif (!favorite) {\r\n\t\t\t\tranch.Favorite = false;\r\n\t\t\t\tranch.FavoriteId = null;\r\n\t\t\t} else {\r\n\t\t\t\tranch.Favorite = true;\r\n\t\t\t\tranch.FavoriteId = favorite.FavoriteId;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ranches;\r\n\t}\r\n\r\n\tpublic addRanchToFavorites(ranchId: number): Promise<IRanchFavoritesPostResponse> {\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.post({\r\n\t\t\t\turl: this.urls.RanchFavorite.save(ranchId),\r\n\t\t\t\tbody: null,\r\n\t\t\t\tisWebAPI: true\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic removeRanchFromFavorites(favoriteId: number): Promise<CMError> {\r\n\t\treturn this.httpService\r\n\t\t\t.delete({\r\n\t\t\t\turl: this.urls.RanchFavorite.delete(favoriteId),\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic getActivePlantings(id: string): Promise<IPlanting[]> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Dashboard.getPlantings(id),\r\n\t\t\tcallback: (plantings: IPlantingsViewModel[]) => {\r\n\t\t\t\tif (!plantings || !plantings.length) {\r\n\t\t\t\t\treturn new Array();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn this.processPlantings(plantings);\r\n\t\t\t},\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getActivePlantingsWithFavorites(id: string, override = false): Promise<IPlanting[]> {\r\n\r\n\t\tlet promises: Promise<IPlanting[]>[];\r\n\r\n\t\tif (this.plantings.active && this.plantings.active.length > 0 && override === false) {\r\n\t\t\treturn of(this.plantings.active).toPromise();\r\n\t\t}\r\n\r\n\t\tpromises = new Array();\r\n\t\tpromises.push(this.getActivePlantings(id));\r\n\t\tpromises.push(this.getFavoritePlantings(id, true));\r\n\r\n\t\treturn Promise.all(promises)\r\n\t\t\t.then((response: IPlanting[][]) => this.combineWithFavoritePlantings(response[0], response[1]));\r\n\t}\r\n\r\n\tprivate processPlantings(plantings: IPlantingsViewModel[]): IPlanting[] {\r\n\t\tlet result: IPlanting[];\r\n\r\n\t\tresult = new Array();\r\n\r\n\t\tif (!plantings || plantings.length === 0) {\r\n\t\t\treturn new Array();\r\n\t\t}\r\n\r\n\t\tfor (let planting of plantings) {\r\n\t\t\tlet item: IPlanting;\r\n\r\n\t\t\ttry {\r\n\t\t\t\titem = Planting.convertPlantingsViewModel(planting);\r\n\t\t\t} catch (error) {\r\n\t\t\t\t// suppress errors\r\n\t\t\t}\r\n\r\n\r\n\t\t\tresult.push(item);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic getAllPlantings(ranchGuid: string): Promise<IPlanting[]> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams().set('active', 'false');\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Dashboard.getPlantings(ranchGuid),\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: (data: IPlantingsViewModel[]) => {\r\n\t\t\t\treturn this.processPlantings(data);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n     *\r\n     * @param id\r\n     * @param override\r\n     */\r\n\tpublic getAllPlantingsWithFavorites(id: string, override = false): Promise<IPlanting[]> {\r\n\r\n\t\tlet promises: Promise<IPlanting[]>[];\r\n\r\n\t\tif (this.plantings.all && this.plantings.all.length > 0 && override === false) {\r\n\t\t\treturn of(this.plantings.all).toPromise();\r\n\t\t}\r\n\r\n\t\tpromises = new Array();\r\n\t\tpromises.push(this.getAllPlantings(id));\r\n\t\tpromises.push(this.getFavoritePlantings(id, false));\r\n\r\n\t\treturn Promise.all(promises)\r\n\t\t\t.then((response: IPlanting[][]) => this.combineWithFavoritePlantings(response[0], response[1]));\r\n\t}\r\n\r\n\t/*\r\n     *\r\n     * ++++++++++ FAVORITE PLANTINGS STUFF ++++++++++++\r\n     *\r\n     */\r\n\r\n\tpublic getFavoritePlantings(id: string, override?: boolean): Promise<IPlanting[]> {\r\n\r\n\t\tif (override === false) {\r\n\t\t\tif (this.plantings.favorites && this.plantings.favorites.length > 0) {\r\n\t\t\t\treturn of(this.plantings.favorites).toPromise();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.LotPlantingFavorites.get(id),\r\n\t\t\tcallback: (favorites: ILotPlantingFavoritesJSON[]): IPlanting[] => {\r\n\t\t\t\tlet result: IPlanting[];\r\n\r\n\t\t\t\tresult = new Array();\r\n\r\n\t\t\t\tfor (let favorite of favorites) {\r\n\t\t\t\t\tlet item: IPlanting;\r\n\r\n\t\t\t\t\titem = Planting.convertPlantingJSON(favorite.LotPlanting);\r\n\t\t\t\t\titem.Favorite = true;\r\n\t\t\t\t\titem.FavoriteId = favorite.Id;\r\n\t\t\t\t\titem.Id = favorite.LotPlantingId;\r\n\r\n\t\t\t\t\tresult.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic findRanchByGuid(ranches: IRanch[], guid: string): IRanch {\r\n\r\n\t\tif (!ranches) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfor (let ranch of ranches) {\r\n\t\t\tif (ranch.Ranch_External_GUID === guid) {\r\n\t\t\t\treturn ranch;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tprivate combineWithFavoritePlantings(plantings: IPlanting[], favorites: IPlanting[]): IPlanting[] {\r\n\r\n\t\tif (!plantings) {\r\n\t\t\treturn new Array();\r\n\t\t}\r\n\r\n\t\tfor (let planting of plantings) {\r\n\t\t\tplanting.Favorite = false;\r\n\t\t\tplanting.FavoriteId = null;\r\n\r\n\t\t\tif (!favorites || favorites.length === 0) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tfor (let favorite of favorites) {\r\n\t\t\t\tif (favorite.Id === planting.Id) {\r\n\t\t\t\t\tplanting.Favorite = true;\r\n\t\t\t\t\tplanting.FavoriteId = favorite.FavoriteId;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn plantings;\r\n\t}\r\n\r\n\tpublic addPlantingToFavorties(id: number): Promise<ILotPlantingFavoritesJSON> {\r\n\t\tlet params = {\r\n\t\t\tlotPlantingId: id\r\n\t\t}\r\n\t\treturn this.httpService\r\n\t\t\t.post({\r\n\t\t\t\turl: this.urls.LotPlantingFavorites.save(id),\r\n\t\t\t\tbody: params,\r\n\t\t\t\tisWebAPI: true\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic removePlantingFromFavorites(id: number): Promise<void> {\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.delete({\r\n\t\t\t\turl: this.urls.LotPlantingFavorites.delete(id),\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tcallback: () => { return; }\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * update currently active ranch's active planting count\r\n\t */\r\n\tpublic updateActivePlantingCount(): void {\r\n\t\tlet ranch: IRanch;\r\n\r\n\t\tif (!this.ranches || !this.ranches.myRanches || this.ranches.myRanches.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tranch = this.ranches.myRanches.find(x => x.Ranch_External_GUID ===\r\n\t\t\tthis.updateService.currentRanchId);\r\n\r\n\t\tif (!ranch) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tranch.ActivePlantings = this.plantings.active.length;\r\n\t}\r\n\t/*\r\n     * +++ END FAVORITE PLANTINGS STUFF +++\r\n     */\r\n\r\n\r\n\tpublic getCreateRanchData(): IRanchBasicInfoViewModel {\r\n\t\tlet result: IRanchBasicInfoViewModel;\r\n\r\n\t\tresult = {\r\n\t\t\tRanchName: null,\r\n\t\t\tAcres: null,\r\n\t\t\tCoordinates: null,\r\n\t\t\tRanchOwner: null,\r\n\t\t\tRanchOwnerFullName: null,\r\n\t\t\tRanchOwnerEmail: null,\r\n\t\t\tUseSpatialCIMIS: null,\r\n\t\t\tUseCIMISAverageMode: null,\r\n\t\t\tIsPrivate: true,\r\n\t\t\tSpatialETAvailable: true,\r\n\t\t\tWeatherAPI_Id: null\r\n\t\t};\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic createRanch(data: RanchUpdateParams): Promise<RanchCreateResponse> {\r\n\t\treturn this.httpService\r\n\t\t\t.post({\r\n\t\t\t\turl: this.urls.Ranch.create,\r\n\t\t\t\tbody: data,\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic deleteRanch(ranchId: string): Promise<SuccessResponse> {\r\n\t\tif (!ranchId) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.delete({\r\n\t\t\t\turl: this.urls.Ranch.delete(ranchId),\r\n\t\t\t\tisWebAPI: true,\r\n\r\n\t\t\t\tcallback: (json: SuccessResponse): SuccessResponse => {\r\n\t\t\t\t\tif (!json) {\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.removeFromRanches(ranchId);\r\n\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic removeFromRanches(ranchId: string): void {\r\n\t\tif (!this.ranches) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.ranches.myRanches && this.ranches.myRanches.length > 0) {\r\n\t\t\tthis.ranches.myRanches = this.ranches.myRanches.filter(x => x.Ranch_External_GUID !== ranchId);\r\n\t\t}\r\n\r\n\t\tif (this.ranches.favorites && this.ranches.favorites.length > 0) {\r\n\t\t\tthis.ranches.favorites = this.ranches.favorites.filter(x => x.Ranch_External_GUID !== ranchId);\r\n\t\t}\r\n\r\n\t\tif (this.ranches.public && this.ranches.public.length > 0) {\r\n\t\t\tthis.ranches.public = this.ranches.public.filter(x => x.Ranch_External_GUID !== ranchId);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param ranchGuid\r\n\t * @param shouldPermissionProtect This field is used in the admin section\r\n\t * @returns\r\n\t */\r\n\tpublic getRanchBasicInfo(ranchGuid?: string, shouldPermissionProtect = true): Promise<IRanchBasicInfoViewModel> {//\r\n\r\n\t\tranchGuid = ranchGuid ? ranchGuid : this.updateService.currentRanchId;\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: shouldPermissionProtect ? this.urls.Ranch.get(ranchGuid) :\r\n\t\t\t\tthis.urls.Ranch.basicFormAdminOnly(ranchGuid),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: function (json: IRanchBasicInfoViewModel) {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn {};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic updateCIMISOptions(p: RanchUpdateCIMISParams): Promise<void> {\r\n\t\treturn this.httpService\r\n\t\t.put({\r\n\t\t\turl: this.urls.Ranch.updateCIMISOptions(this.updateService.currentRanchId),\r\n\t\t\tbody: p,\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic editRanchBasicInfo(basicInfo: RanchUpdateParams): Promise<IRanchJSON> {\r\n\t\treturn this.httpService\r\n\t\t\t.put({\r\n\t\t\t\turl: this.urls.Ranch.update(this.updateService.currentRanchId),\r\n\t\t\t\tbody: basicInfo,\r\n\t\t\t\tisWebAPI: true\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic getRanchUsers(ranchGuid?: string): Promise<IRanchUserListItem[]> {\r\n\t\tranchGuid = ranchGuid ? ranchGuid : this.updateService.currentRanchId;\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Ranch.user.list(ranchGuid),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: function (json: { data: IRanchUserListItem[] }) {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn new Array();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tpublic getRanchLots(): Promise<IRanchLotModel[]> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Ranch.lots.list(this.updateService.currentRanchId),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: function (json: IRanchLotModel[]) {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn new Array();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getRanchWells(): Promise<IWell[]> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Ranch.well.list(this.updateService.currentRanchId),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (json: IWell[]) => {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\tthis.wells = json;\r\n\t\t\t\t\treturn this.wells;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn new Array();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * This method returns all the users in the system instead of actually searching...\r\n\t */\r\n\tpublic getAddRanchMembersList(ranchGuid?: string): Promise<IUserSearchResult[]> {\r\n\t\tranchGuid = ranchGuid ? ranchGuid : this.updateService.currentRanchId;\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.get({\r\n\t\t\t\turl: this.urls.Ranch.user.search(ranchGuid),\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tcallback: (response: IUserSearchResult[]) => {\r\n\t\t\t\t\treturn response\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic addRanchMember(id: string, ranchGuid?: string): Promise<void> {\r\n\t\tranchGuid = ranchGuid ? ranchGuid : this.updateService.currentRanchId;\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.post({\r\n\t\t\t\turl: this.urls.Ranch.user.create(ranchGuid, id),\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tbody: null\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic deleteRanchUser(userId: string, ranchGuid?: string, shouldPermissionProtect = true): Promise<ISuccessResponse | CMError> {\r\n\t\tranchGuid = ranchGuid ? ranchGuid : this.updateService.currentRanchId;\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.delete({\r\n\t\t\t\turl: shouldPermissionProtect ? this.urls.Ranch.user.delete(ranchGuid, userId) :\r\n\t\t\t\t\tthis.urls.Ranch.user.deleteAdminOnly(ranchGuid, userId),\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tcallback: (response: ISuccessResponse | CMError) => { return response },\r\n\t\t\t\tshouldBypassServerErrorAlert: true\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic getAddRanchLotData(): Promise<ILotEdit> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Ranch.lots.createForm(this.updateService.currentRanchId),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: (json: IRanchLotEditJSON) => {\r\n\t\t\t\tlet result: ILotEdit;\r\n\r\n\t\t\t\tif (!json) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult = {\r\n\t\t\t\t\tName: null,\r\n\t\t\t\t\tAcres: 0,\r\n\t\t\t\t\tCoordinates: json.Coordinates,\r\n\t\t\t\t\tObstructionDepth: null,\r\n\t\t\t\t\tSoilLayers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tDepth: 1,\r\n\t\t\t\t\t\t\tSand: null,\r\n\t\t\t\t\t\t\tSilt: null,\r\n\t\t\t\t\t\t\tOrganic: null,\r\n\t\t\t\t\t\t\tDensity: null,\r\n\t\t\t\t\t\t\tTension: null,\r\n\t\t\t\t\t\t\tMineralization: null,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tDepth: 2,\r\n\t\t\t\t\t\t\tSand: null,\r\n\t\t\t\t\t\t\tSilt: null,\r\n\t\t\t\t\t\t\tOrganic: null,\r\n\t\t\t\t\t\t\tDensity: null,\r\n\t\t\t\t\t\t\tTension: null,\r\n\t\t\t\t\t\t\tMineralization: null,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tDepth: 3,\r\n\t\t\t\t\t\t\tSand: null,\r\n\t\t\t\t\t\t\tSilt: null,\r\n\t\t\t\t\t\t\tOrganic: null,\r\n\t\t\t\t\t\t\tDensity: null,\r\n\t\t\t\t\t\t\tTension: null,\r\n\t\t\t\t\t\t\tMineralization: null,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tDepth: 4,\r\n\t\t\t\t\t\t\tSand: null,\r\n\t\t\t\t\t\t\tSilt: null,\r\n\t\t\t\t\t\t\tOrganic: null,\r\n\t\t\t\t\t\t\tDensity: null,\r\n\t\t\t\t\t\t\tTension: null,\r\n\t\t\t\t\t\t\tMineralization: null,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getEditRanchLotData(id: number): Promise<ILotEdit> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Ranch.lots.show(id),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: (json: IRanchLotEditJSON) => {\r\n\t\t\t\tlet result: ILotEdit;\r\n\r\n\t\t\t\tif (!json) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t\tlet data = json;\r\n\r\n\t\t\t\tresult = {\r\n\t\t\t\t\tName: data.Model.RanchLotViewModel.Name,\r\n\t\t\t\t\tAcres: data.Model.RanchLotViewModel.Acres,\r\n\t\t\t\t\tCoordinates: data.Model.RanchLotViewModel.Coordinates,\r\n\t\t\t\t\tObstructionDepth: data.Model.RanchLotViewModel.ObstructionDepth,\r\n\t\t\t\t\tSoilLayers: data.Model.SoilLayers,\r\n\t\t\t\t\tSoilWebProperties: data.SoilWebProperties\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic addRanchLot(lot: ILotEdit): Promise<IRanchLotUpdateModel> {\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.post({\r\n\t\t\t\turl: this.urls.Ranch.lots.create(this.updateService.currentRanchId),\r\n\t\t\t\tbody: lot,\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tcallback: (response: IRanchLotUpdateModel | CMError): IRanchLotUpdateModel => {\r\n\t\t\t\t\tif (!response) {\r\n\t\t\t\t\t\tthrow new Error('response is empty');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet error: CMError;\r\n\r\n\t\t\t\t\terror = response as CMError;\r\n\r\n\t\t\t\t\tif (error.message) {\r\n\t\t\t\t\t\tthrow new Error(error.message);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn response as IRanchLotUpdateModel;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic editRanchLot(lot: ILotEdit): Promise<IRanchLotUpdateModel> {\r\n\r\n\t\tlet body: RanchLotInternalUpdateModel;\r\n\r\n\t\tbody = {\r\n\t\t\tName: lot.Name,\r\n\t\t\tAcres: lot.Acres,\r\n\t\t\tCoordinates: lot.Coordinates,\r\n\t\t\tObstructionDepth: lot.ObstructionDepth,\r\n\t\t\tSoilLayers: lot.SoilLayers\r\n\t\t}\r\n\r\n\t\tif (!body.SoilLayers) {\r\n\t\t\tthrow new Error('SoilLayers is null');\r\n\t\t}\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.put({\r\n\t\t\t\turl: this.urls.Ranch.lots.update(lot.Id),\r\n\t\t\t\tbody: body,\r\n\t\t\t\tisWebAPI: true,\r\n\r\n\t\t\t\tcallback: (response: IRanchLotUpdateModel | CMError): IRanchLotUpdateModel => {\r\n\t\t\t\t\tif (!response) {\r\n\t\t\t\t\t\tthrow new Error('response is empty');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet error: CMError;\r\n\r\n\t\t\t\t\terror = response as CMError;\r\n\r\n\t\t\t\t\tif (error.message) {\r\n\t\t\t\t\t\tthrow new Error(error.message);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn response as IRanchLotUpdateModel;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic deleteRanchLot(lotId: number): Promise<Object> {\r\n\t\treturn this.httpService\r\n\t\t\t.delete({\r\n\t\t\t\turl: this.urls.Ranch.lots.delete(lotId),\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tcallback: (response: ISuccessResponse) => { return response }\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic getRanchWellEditData(id: number): Promise<IRanchWellViewModel> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.Ranch.well.editForm(id),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: function (json: IRanchWellViewModel): IRanchWellViewModel {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic addRanchWell(well: IRanchWellViewModel): Promise<void> {\r\n\t\treturn this.httpService\r\n\t\t\t.post({\r\n\t\t\t\turl: this.urls.Ranch.well.create(this.updateService.currentRanchId),\r\n\t\t\t\tbody: well,\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tcallback: (): void => { return; }\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic editRanchWell(id: number, well: IRanchWellViewModel): Promise<void> {\r\n\t\treturn this.httpService\r\n\t\t\t.put({\r\n\t\t\t\turl: this.urls.Ranch.well.update(this.updateService.currentRanchId, id),\r\n\t\t\t\tbody: well,\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tcallback: (): void => { return; }\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic deleteRanchWell(id: number): Promise<void> {\r\n\t\treturn this.httpService\r\n\t\t\t.delete({\r\n\t\t\t\turl: this.urls.Ranch.well.delete(this.updateService.currentRanchId, id),\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tcallback: (): void => { return; }\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic getBasicRanchLots(id: string): Promise<IRanchLotJSONModel[]> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.RanchLot.list(id),\r\n\t\t\tcallback: (json: IRanchLotJSONModel[]) => {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\tthis.currentRanchLots = json;\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn {};\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getLotsMinimal(ranchGuid: string, year?: number): Promise<IIdNamePair[]> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams();\r\n\r\n\t\tif (year) {\r\n\t\t\tparams = new HttpParams().set('year', year.toString());\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.RanchLot.listMinimal(ranchGuid),\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: function (json: IIdNamePair[]) {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn Array();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic isUsed(ranchLotId: number, ranchGuid: string): Promise<boolean> {\r\n\r\n\t\tif (!ranchLotId) {\r\n\t\t\tthrow new Error('ranchLotId can\\'t be empty');\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.RanchLot.isUsed(ranchGuid, ranchLotId),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: function (json: boolean) {\r\n\t\t\t\treturn json;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic exportDataToExcel(name: string, year?: number, lotId?: number): Promise<boolean> {\r\n\t\tlet headers: HttpHeaders;\r\n\t\tlet token: Token;\r\n\r\n\t\tlet body: {\r\n\t\t\tYear: number,\r\n\t\t\tLotId: number,\r\n\t\t};\r\n\r\n\t\tbody = {\r\n\t\t\tYear: year,\r\n\t\t\tLotId: lotId,\r\n\t\t};\r\n\r\n\t\ttoken = this._tokenService.getToken();\r\n\r\n\t\theaders = new HttpHeaders({\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t\t'Accept': 'applicaton/zip',\r\n\t\t\t'Authorization': 'Bearer ' + token.token,\r\n\t\t\t'X-Client-Version': ReleaseVersion\r\n\t\t});\r\n\r\n\t\treturn this.http\r\n\t\t\t.post(environment.APIEndpoint + this.urls.Ranch.excelOutput(this.updateService.currentRanchId),\r\n\t\t\t\tbody,\r\n\t\t\t\t{\r\n\t\t\t\t\theaders: headers,\r\n\t\t\t\t\tresponseType: 'blob'\r\n\t\t\t\t})\r\n\t\t\t.toPromise()\r\n\t\t\t.then(response => {\r\n\t\t\t\treturn this._handleExportDataToExcelResponse(response, name);\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _handleExportDataToExcelResponse(response: Blob, name: string): boolean {\r\n\t\tlet fileBlob, blob: Blob;\r\n\t\tlet now: moment.Moment;\r\n\t\tlet filename: string;\r\n\r\n\t\tif (this.updateService.cancelRanchDataExport) {\r\n\t\t\tthis.updateService.cancelRanchDataExport = false;\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfileBlob = response;\r\n\r\n\t\tblob = new Blob([fileBlob], {\r\n\t\t\ttype: 'application/zip'\r\n\t\t})\r\n\r\n\t\tnow = moment();\r\n\r\n\t\tfilename = 'RanchExport- ' + name + ' ' + (now.month() + 1) + '_' +\r\n\t\t\tnow.date() + '_' + now.year() + '_' + now.hour() + '_' + now.minute() + '.zip';\r\n\r\n\t\tfileSaver.saveAs(blob, filename);\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/*\r\n     * Commodities available\r\n     */\r\n\r\n\tpublic getIsNDependent(plantingId: number): boolean {\r\n\t\tlet planting: IPlanting;\r\n\r\n\t\tplanting = this.plantings.getPlantingById(plantingId);\r\n\r\n\t\tif (!planting) {\r\n\t\t\treturn true; // default to true\r\n\t\t}\r\n\r\n\t\tif (planting.CropType) {\r\n\t\t\treturn planting.CropType.IsNDependent;\r\n\t\t} else if (planting.IsNDependent === undefined) {\r\n\t\t\tthrow new Error('planting.IsNDependent is undefined');\r\n\t\t} else {\r\n\t\t\treturn planting.IsNDependent;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getCalculatorInterface(plantingId: number): string {\r\n\t\tlet planting: IPlanting;\r\n\r\n\t\tplanting = this.plantings.getPlantingById(plantingId);\r\n\r\n\t\tif (!planting) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn planting.CommodityTypeCalculator;\r\n\t}\r\n\r\n\tpublic getGerminationDate(plantingId: number): Date {\r\n\t\tlet planting: IPlanting;\r\n\r\n\t\tplanting = this.plantings.getPlantingById(plantingId);\r\n\r\n\t\tif (!planting) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn planting.WetDate;\r\n\t}\r\n\r\n\tpublic getHarvestDate(plantingId: number): Date {\r\n\t\tlet planting: IPlanting;\r\n\r\n\t\tplanting = this.plantings.getPlantingById(plantingId);\r\n\r\n\t\tif (!planting) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn planting.HarvestDate;\r\n\t}\r\n\r\n\tpublic isPlantingPerennial(plantingId: number): boolean {\r\n\t\tlet planting: IPlanting;\r\n\r\n\t\tplanting = this.plantings.getPlantingById(plantingId);\r\n\r\n\t\tif (!planting) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn CropType.isPerennialPlanting(planting.CommodityTypeId);\r\n\t}\r\n\r\n\tpublic plantingHasFloodEvents(plantingId: number): boolean {\r\n\t\tlet planting: IPlanting;\r\n\t\tlet commodityType: eCommodityTypes;\r\n\r\n\t\tplanting = this.plantings.getPlantingById(plantingId);\r\n\r\n\t\tif (!planting) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tcommodityType = planting.CommodityTypeId;\r\n\r\n\t\treturn CropType.hasFloodEvents(commodityType);\r\n\t}\r\n}\r\n","<h1 mat-dialog-title>Server Error</h1>\r\n<div mat-dialog-content>\r\n    <p>{{message}}</p>\r\n</div>\r\n<div mat-dialog-actions>\r\n    <button mat-button\r\n        class=\"bk-button\"\r\n        (click)=\"close()\">Continue</button>\r\n</div>\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'http-error-dialog',\r\n\ttemplateUrl: 'http-error-dialog.html'\r\n})\r\n\r\nexport class HttpErrorDialog {\r\n\r\n\tpublic message: string;\r\n\r\n\tconstructor(public dialogRef: MatDialogRef<HttpErrorDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: { errorMessage: string }) {\r\n\r\n\t\tif (data) {\r\n\t\t\tthis.message = data.errorMessage;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n}\r\n","// constants shared across various components\r\n\r\nexport const DIALOG_HIDE_CLASS = 'bk-dialog--hidden';\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { DeleteConfirmationComponent, DeleteConfirmationSettings } from './delete-confirmation';\r\nimport { SharedKeepDiscardDialog } from './keep-discard-dialog';\r\nimport { SharedUpdateService } from './update.service';\r\nimport { DIALOG_HIDE_CLASS } from '../constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'base-dialog',\r\n\ttemplate: ''\r\n})\r\n\r\nexport class BaseDialog implements OnInit, OnDestroy {\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\tprotected _deleteConfirmationData: DeleteConfirmationSettings;\r\n\tpublic form: FormGroup;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialog: MatDialog, // used to open other dialogs\r\n\t\tprivate _dialogRef: MatDialogRef<BaseDialog>,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService) {\r\n\t}\r\n\r\n\t/**\r\n\t * Call super.ngOnInit() in child ngOnInit() to trigger this\r\n\t * it will not automatically be triggered\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tthis._bindKeepDiscardSubscriptions();\r\n\r\n\t\t// custom click outside handling\r\n\t\tthis._dialogRef.backdropClick().pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.onClose();\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\t/**\r\n\t * Method that's triggered when user tries to close the parent dialog.\r\n\t * If changes are detected, we ask the user to confirm discarding changes\r\n\t */\r\n\tpublic onClose(): void {\r\n\t\tif (this.form && this.form.touched) {\r\n\t\t\tthis._dialog.open(SharedKeepDiscardDialog, {\r\n\t\t\t\twidth: '500px',\r\n\t\t\t\tdisableClose: true,\r\n\t\t\t});\r\n\r\n\t\t\tthis._hide();\r\n\t\t} else {\r\n\t\t\tthis.close();\r\n\t\t}\r\n\t}\r\n\r\n\t/***\r\n\t * Method visible in the template for opening\r\n\t * the confirmation dialog\r\n\t */\r\n\tpublic onDeleteConfirmationOpen(): void {\r\n\r\n\t\tif (!this._deleteConfirmationData) {\r\n\t\t\tthrow new Error('delete confirmation data is not configured');\r\n\t\t}\r\n\r\n\t\tthis._hide();\r\n\r\n\t\tthis._dialog.open(DeleteConfirmationComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: this._deleteConfirmationData\r\n\t\t});\r\n\r\n\t\tthis._sharedUpdateService.delete$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.delete();\r\n\t\t});\r\n\r\n\t\tthis._sharedUpdateService.cancel$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._show();\r\n\t\t});\r\n\t}\r\n\r\n\t/***\r\n\t * Close the dialog. Need to be accessible to child templates to avoid\r\n\t * a compilation error\r\n\t */\r\n\tpublic close(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\t/***\r\n\t * Delete implementation, should be specified by parent class\r\n\t */\r\n\tprotected delete(): void {} // override\r\n\r\n\t/***\r\n\t * Sets up subscriptions for keep/discard events\r\n\t */\r\n\tprivate _bindKeepDiscardSubscriptions(): void {\r\n\t\tthis._sharedUpdateService.keep$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\r\n\t\t\tthis._show();\r\n\t\t});\r\n\r\n\t\tthis._sharedUpdateService.discard$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.close();\r\n\t\t})\r\n\t}\r\n\t/***\r\n\t * Hide the parent dialog while child dialogs are open\r\n\t */\r\n\tprivate _hide(): void {\r\n\t\tthis._dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\t}\r\n\r\n\t/***\r\n\t * Show the parent dialog, after closing the child dialog\r\n\t */\r\n\tprivate _show(): void {\r\n\t\tthis._dialogRef.removePanelClass(DIALOG_HIDE_CLASS);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\r\n\t<h4 mat-dialog-title>\r\n\t\t{{'Delete' | translate }} {{ objectName }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<p>\r\n\t\t\t<span *ngIf=\"specificName\">\r\n\t\t\t\t{{'Are you sure you want to delete' | translate }}: <strong>{{ specificName }}</strong>?\r\n\t\t\t</span>\r\n\t\t\t<span *ngIf=\"additionalMessage\">\r\n\t\t\t\t{{ additionalMessage }} <!-- this text should be pre-translated-->\r\n\t\t\t</span>\r\n\t\t</p>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t(click)=\"close()\">\r\n\t\t\t{{'Cancel' | translate }}\r\n\t\t</button>\r\n\t\t<button class=\"bk-button bk-button--medium\"\r\n\t\t\t(click)=\"delete()\">\r\n\t\t\t{{ (isBusy ? 'Deleting' : 'Delete') | translate }} {{ objectName | translate }}\r\n            <img class='bk-button__loader' *ngIf='isBusy' src='/assets/images/loader-20px.gif'/>\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { SharedUpdateService } from './update.service';\r\n\r\nexport interface DeleteConfirmationSettings {\r\n\tobjectName: string,\r\n\tspecificName: string,\r\n\tadditionalMessage: string,\r\n}\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'delete-confirmation-dialog',\r\n\ttemplateUrl: 'delete-confirmation.html',\r\n\tstyleUrls: [ 'delete-confirmation.scss' ]\r\n})\r\n\r\n/**\r\n * Generic component used to display delete confirmation dialogs\r\n */\r\nexport class DeleteConfirmationComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic additionalMessage: string;\r\n\tpublic isBusy: boolean;\r\n\tpublic objectName: string;\r\n\tpublic specificName: string;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic constructor(\r\n\t\tprivate _dialogRef: MatDialogRef<DeleteConfirmationComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: DeleteConfirmationSettings,\r\n\t\tprivate _updateService: SharedUpdateService,\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tif (this._data) {\r\n\t\t\tthis.objectName = this._data.objectName;\r\n\t\t\tthis.specificName = this._data.specificName;\r\n\t\t\tthis.additionalMessage = this._data.additionalMessage;\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\t\tif (this.isBusy) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isBusy = true;\r\n\t\tthis._updateService.delete();\r\n\r\n\t\tthis._updateService.deleteComplete$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.isBusy = false;\r\n\t\t\tthis._dialogRef.close();\r\n\t\t})\r\n\t}\r\n\r\n\tpublic close() {\r\n\t\tthis._updateService.cancel();\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\t<h4 mat-dialog-title>\r\n\t\t{{'Changes not saved' | translate }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<p>\r\n\t\t\t{{'The changes you made were not saved. Discard changes?' | translate }}\r\n\t\t</p>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n\t\t\t(click)=\"keep($event)\">\r\n\t\t\t{{'Keep Editing' | translate }}\r\n\t\t</button>\r\n\t\t<button class=\"bk-button bk-button--medium\"\r\n\t\t\t(click)=\"discard($event)\">\r\n\t\t\t{{'Discard' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>\r\n","import { Component, OnInit, Input, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { SharedUpdateService } from './update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'shared-keep-discard-dialog',\r\n\ttemplateUrl: 'keep-discard-dialog.html'\r\n})\r\n\r\nexport class SharedKeepDiscardDialog implements OnInit {\r\n\r\n\tpublic constructor(\r\n\t\tprivate _updateService: SharedUpdateService,\r\n\t\tprivate _dialogRef: MatDialogRef<SharedKeepDiscardDialog>,\r\n\t) {\r\n\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n\r\n\tpublic keep($event: MouseEvent): void {\r\n\t\t$event.stopPropagation();\r\n\t\t$event.preventDefault();\r\n\r\n\t\tthis._dialogRef.close();\r\n\t\tthis._updateService.keep();\r\n\t}\r\n\r\n\tpublic discard($event: MouseEvent) {\r\n\t\t$event.stopPropagation();\r\n\t\t$event.preventDefault();\r\n\r\n\t\tthis._dialogRef.close();\r\n\t\tthis._updateService.discard();\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class SharedUpdateService {\r\n\tprivate _keep: Subject<null> = new Subject<null>();\r\n\tpublic keep$ = this._keep.asObservable();\r\n\r\n\tprivate _discard: Subject<null> = new Subject<null>();\r\n\tpublic discard$ = this._discard.asObservable();\r\n\r\n\tprivate _delete: Subject<null> = new Subject<null>();\r\n\tpublic delete$ = this._delete.asObservable();\r\n\r\n\tprivate _deleteComplete: Subject<null> = new Subject<null>();\r\n\tpublic deleteComplete$ = this._deleteComplete.asObservable();\r\n\r\n\tprivate _cancel: Subject<null> = new Subject<null>();\r\n\tpublic cancel$ = this._cancel.asObservable();\r\n\r\n\tpublic keep() {\r\n\t\tthis._keep.next();\r\n\t}\r\n\r\n\tpublic discard() {\r\n\t\tthis._discard.next();\r\n\t}\r\n\r\n\tpublic delete() {\r\n\t\tthis._delete.next();\r\n\t}\r\n\r\n\tpublic deleteComplete() {\r\n\t\tthis._deleteComplete.next();\r\n\t}\r\n\r\n\tpublic cancel() {\r\n\t\tthis._cancel.next();\r\n\t}\r\n}\r\n","import { ViewChild, OnDestroy } from '@angular/core';\r\nimport { NgForm, AbstractControl, FormGroup } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nexport class FormComponent implements OnDestroy {\r\n\r\n\tpublic f: NgForm;\r\n\t@ViewChild('f', { static: false}) currentForm: NgForm;\r\n\r\n\tpublic isDirtyOnLoad = false; // set this to true when editing a form instead of populating for the first time\r\n\tpublic formErrors: any;\r\n\tpublic validationMessages: any;\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor() {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tngAfterViewChecked() {\r\n\t\tthis.formChanged();\r\n\t}\r\n\r\n\tformChanged() {\r\n\r\n\t\tif (this.currentForm === this.f) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.f = this.currentForm;\r\n\r\n\t\tif (this.f) {\r\n\t\t\tthis.f.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(data => this.onValueChanged(data));\r\n\t\t}\r\n\t}\r\n\r\n\tonValueChanged(data?: any) {\r\n\r\n\t\tif (!this.f) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst form: FormGroup = this.f.form;\r\n\r\n\t\tObject.keys(this.formErrors).forEach(field => {\r\n\t\t\t// clear previous error message (if any)\r\n\r\n\t\t\tthis.formErrors[field] = '';\r\n\t\t\tconst control: AbstractControl = form.get(field);\r\n\r\n\t\t\tif (!control) {\r\n\t\t\t\t// do nothing\r\n\t\t\t} else if ((this.isDirtyOnLoad === false && control.dirty && !control.valid) ||\r\n\t\t\t\t(this.isDirtyOnLoad === true && !control.valid)) {\r\n\r\n\t\t\t\tconst messages = this.validationMessages[field];\r\n\r\n\t\t\t\tObject.keys(control.errors).forEach(key => {\r\n\t\t\t\t\tthis.formErrors[field] += messages[key] + ' ';\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tonSubmit() { // display erros on submit\r\n\t\tif (!this.f) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst form = this.f.form;\r\n\r\n\t\tObject.keys(this.formErrors).forEach(field => {\r\n\t\t\t// clear previous error message (if any)\r\n\t\t\tthis.formErrors[field] = '';\r\n\t\t\tconst control = form.get(field);\r\n\r\n\t\t\tif (control && !control.valid) {\r\n\t\t\t\tcontrol.markAsTouched();\r\n\t\t\t\tconst messages = this.validationMessages[field];\r\n\r\n\t\t\t\tObject.keys(control.errors).forEach(key => {\r\n\t\t\t\t\tthis.formErrors[field] += messages[key] + ' ';\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","import { HighChartsService } from '../../classes/highCharts.service';\r\n\r\nlet highChartExportOptions: IExportingOptions;\r\n\r\n/**\r\n * Extending HighCharts.ExportingOptions to add options\r\n * not in the type definition but is officially supported,\r\n * like CSV export options, which needs to be non-empty\r\n * for the CSV export to work\r\n */\r\nexport interface IExportingOptions extends Highcharts.ExportingOptions {\r\n\tcsv?: {\r\n\t\tcolumnHeaderFormatter?: null,\r\n\t\tdateFormat?: string,\r\n\t\tdecimalPoint?: any,\r\n\t\titemDelimiter?: any,\r\n\t\tlineDelimiter?: string\r\n\t}\r\n}\r\n\r\nhighChartExportOptions = {\r\n\tcsv: {\r\n\t\titemDelimiter: ',',\r\n\t\tlineDelimiter: '\\n'\r\n\t},\r\n\tbuttons: {\r\n\t\tcontextButton: {\r\n\t\t\tmenuItems: [\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: 'Export to PDF',\r\n\t\t\t\t\tonclick: function() {\r\n\t\t\t\t\t\tthis.exportChart({\r\n\t\t\t\t\t\t\twidth: null,\r\n\t\t\t\t\t\t\ttype: 'application/pdf'\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: 'Print your chart',\r\n\t\t\t\t\tonclick: function() {\r\n\t\t\t\t\t\tthis.print();\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\ttext: 'Export to CSV',\r\n\t\t\t\t\tonclick: function() {\r\n\t\t\t\t\t\tthis.downloadCSV();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport default highChartExportOptions;\r\n","<mat-icon class=\"bk-info-icon\"\r\n    matTooltip=\"{{title | translate}}\"\r\n    [matTooltipPosition]=\"'above'\" >info_outline</mat-icon>","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'info-icon',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class InfoIconComponent {\r\n\t@Input()\r\n\tpublic title: string;\r\n}\r\n","<div *ngIf=\"type === notificationTypeEnum.MESSAGE\" class=\"bk-notification__message\">\r\n    {{ messsage }}\r\n</div>\r\n<div *ngIf=\"type === notificationTypeEnum.ERROR\" class=\"bk-notification__message bk-notification__error\">\r\n    <mat-icon>error_outline</mat-icon> {{ message }}\r\n</div>\r\n<div *ngIf=\"type === notificationTypeEnum.UPDATE\" class=\"bk-notification__message bk-notification__update\">\r\n    <mat-icon>cached</mat-icon> {{ message }}\r\n</div>\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MatSnackBarRef, MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\r\n\r\nimport { INotificationParams } from '../../../interfaces/interfaces';\r\nimport { eNotificationTypes } from '../../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'notification',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class NotificationComponent {\r\n\r\n\tpublic notificationTypeEnum = eNotificationTypes;\r\n\tpublic message: string;\r\n\tpublic type: eNotificationTypes;\r\n\r\n\tconstructor(private snackBarRef: MatSnackBarRef<NotificationComponent>,\r\n\t\t@Inject(MAT_SNACK_BAR_DATA) public data: INotificationParams) {\r\n\r\n\t\tif (!data) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.message = data.message;\r\n\t\tthis.type = data.type;\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis.snackBarRef.dismiss();\r\n\t}\r\n}\r\n","\r\n<button [hidden]=\"isSliderVisible\"\r\n    class=\"bk-button bk-slider-button\"\r\n    [disabled]=\"sliderDisabled\"\r\n    (click)=\"showSlider()\">\r\n    <i class=\"fa fa-sort-up bk-slider-button__icon--up\"></i>\r\n    <i class=\"fa fa-sort-down bk-slider-button__icon--down\"></i>\r\n</button>\r\n\r\n<div [hidden]=\"!isSliderVisible\" class=\"bk-slider\" (clickOutside)=\"hideSlider()\">\r\n    <div class=\"bk-slider__max\">{{ sliderMax }}</div>\r\n\r\n    <div class=\"bk-slider__wrapper\">\r\n        <mat-slider #mySlider\r\n            class=\"bk-slider__input\"\r\n            [(ngModel)]=\"sliderValue\"\r\n            [vertical]=\"true\"\r\n            [step]=\"step\"\r\n            [min]=\"sliderMin\"\r\n            [max]=\"sliderMax\"\r\n            (mouseup)=\"handleSliderMouseUp($event)\"\r\n            (input)=\"sliderChanged(mySlider.value)\">\r\n        </mat-slider>\r\n    </div>\r\n\r\n    <div class=\"bk-slider__min\">{{ sliderMin }}</div>\r\n</div>","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\n\r\nimport { ValidateService } from '../../../services/validate.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'slider-button',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class SliderButtonComponent {\r\n\r\n\t@Input()\r\n\tpublic sliderValue: number;\r\n\r\n\t@Input()\r\n\tpublic sliderMin: number;\r\n\r\n\t@Input()\r\n\tpublic sliderMax: number;\r\n\r\n\t@Input()\r\n\tpublic sliderDecimals: number;\r\n\r\n\t@Input()\r\n\tpublic sliderDisabled: boolean;\r\n\r\n\t@Input()\r\n\tpublic step: number;\r\n\r\n\t@Output()\r\n\tpublic sliderValueChanged: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n\t@Output()\r\n\tpublic onSliderMouseUp: EventEmitter<JQueryEventObject> = new EventEmitter<JQueryEventObject>();\r\n\r\n\tpublic isSliderVisible: boolean;\r\n\r\n\tprivate showingSlider: boolean;\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.isSliderVisible = false;\r\n\t\tthis.showingSlider = false;\r\n\t}\r\n\r\n\tpublic showSlider(): void {\r\n\t\tthis.showingSlider = true;\r\n\r\n\t\tthis.isSliderVisible = true;\r\n\r\n\t\t// $('.mat-slider-thumb').bind('mouseup', this.handleSliderMouseUp.bind(this));\r\n\t}\r\n\r\n\tpublic hideSlider(): void {\r\n\t\tif (!this.isSliderVisible) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.showingSlider) {\r\n\t\t\tthis.showingSlider = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// $('.mat-slider-thumb').unbind('mouseup', this.handleSliderMouseUp);\r\n\r\n\t\tthis.isSliderVisible = false;\r\n\r\n\t\t// this.onSliderMouseUp.emit(null);\r\n\t}\r\n\r\n\t/**\r\n\t * Called by mat slider's input event emitter. Triggered when user touches the slider\r\n\t *\r\n\t * @param e\r\n\t */\r\n\tpublic sliderChanged(e: number) {\r\n\r\n\t\tif (!e || !ValidateService.isValidNumber(e)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (ValidateService.isValidNumber(this.sliderDecimals)) {\r\n\t\t\te = ValidateService.roundToDecimalPlaces(e, this.sliderDecimals);\r\n\t\t}\r\n\r\n\t\tthis.sliderValueChanged.emit(e);\r\n\t}\r\n\r\n\tpublic handleSliderMouseUp(eventObject: JQueryEventObject): void {\r\n\t\teventObject.stopPropagation();\r\n\r\n\t\tif (!this.onSliderMouseUp) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.onSliderMouseUp.emit(eventObject);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\n\r\nimport { HttpService, HttpServicePostOptions, HttpServiceGetOptions } from '../../services/http.service';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { SoilMoisture } from './soilMoisture';\r\n\r\nimport {\r\n\tISoilMoistureFile, ISoilMoistureHeader, ISoilMoistureHeaderStrings,\r\n\tISoilMoistureSeries, ISoilMoistureGraphSeries, ISoilMoistureTab\r\n} from './soilMoisture.interface';\r\n\r\nimport { CMError, httpStatusCodes, SuccessResponse } from '../../interfaces/interfaces';\r\nimport { eSoilMoistureImportErrors } from '../../interfaces/constants';\r\nimport { SoilMoistureFileViewModel, ISoilMoistureHeaderViewModel } from './interfaces';\r\nimport { IFlowMeterPlantingListViewModel } from '../flowmeter-graph/interfaces';\r\nimport { SoilMoistureSeriesConverter } from './soilMoistureSeriesConverter';\r\n\r\n@Injectable()\r\nexport class SoilMoistureService {\r\n\r\n\tprivate urls = {\r\n\t\tlist: '/v2/soil-moisture-files.json',\r\n\t\theaders: {\r\n\t\t\tget: (plantingId: number) => `/v2/plantings/${plantingId}/soil-moisture-headers.json`,\r\n\t\t\tupdate: `/v2/soil-moisture-headers.json`,\r\n\t\t},\r\n\t\tfile: {\r\n\t\t\tget: (plantingId: number) => `/v2/plantings/${plantingId}/soil-moisture-files.json`,\r\n\t\t\tlink: `/v2/soil-moisture-files/link.json`,\r\n\t\t\tupdate: '/v2/soil-moisture-files.json',\r\n\t\t\tsave: `/v2/soil-moisture-filename.json`,\r\n\t\t},\r\n\t\tdata: {\r\n\t\t\tget: (plantingId: number) => `/v2/plantings/${plantingId}/soil-moisture-data.json`\r\n\t\t}\r\n\t}\r\n\r\n\tconstructor(private httpService: HttpService) { }\r\n\r\n\tpublic list(): Promise<ISoilMoistureFile[]> {\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this.urls.list,\r\n\t\t\tcallback: this._processSoilMoistureList,\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic getHeaders(plantingId: number): Promise<ISoilMoistureHeader[]> {\r\n\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this.urls.headers.get(plantingId),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true,\r\n\t\t\tcallback: this.processSoilMoistureHeaders\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic getFile(plantingId: number): Promise<ISoilMoistureFile> {\r\n\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this.urls.file.get(plantingId),\r\n\t\t\tisWebAPI: true,\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic linkFile(plantingId: number, fileName: string, updateHeaders: boolean):\r\n\t\tPromise<ISoilMoistureHeader[] | CMError> {\r\n\r\n\t\tlet options: HttpServicePostOptions;\r\n\t\tlet body: SoilMoistureFileViewModel;\r\n\r\n\t\tif (fileName && typeof fileName === 'string') {\r\n\t\t\tfileName = fileName.trim();\r\n\t\t}\r\n\r\n\t\tbody = {\r\n\t\t\tPlantingId: plantingId,\r\n\t\t\tFilename: fileName,\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: body,\r\n\t\t\turl: this.urls.file.link,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true,\r\n\r\n\t\t\tcallback: (response: CMError | ISoilMoistureHeader[]) => {\r\n\t\t\t\tlet error: CMError;\r\n\r\n\t\t\t\terror = response as CMError;\r\n\r\n\t\t\t\tif (error && error.code && error.code === httpStatusCodes.continue) {\r\n\t\t\t\t\terror.code = this.getImportError(error);\r\n\t\t\t\t\treturn error;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn this.processSoilMoistureHeaders(response as ISoilMoistureHeader[]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic updateFile(plantingId: number, fileName: string): Promise<CMError> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\t\tlet body: SoilMoistureFileViewModel;\r\n\r\n\t\tif (fileName && typeof fileName === 'string') {\r\n\t\t\tfileName = fileName.trim();\r\n\t\t}\r\n\r\n\t\tbody = {\r\n\t\t\tPlantingId: plantingId,\r\n\t\t\tFilename: fileName\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: body,\r\n\t\t\turl: this.urls.file.update,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true,\r\n\r\n\t\t\tcallback: (response: CMError) => {\r\n\t\t\t\tif (response && response.code === httpStatusCodes.continue) {\r\n\t\t\t\t\tresponse.code = this.getImportError(response);\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic saveHeaders(plantingId: number, fileName: string, headers: ISoilMoistureHeader[]): Promise<void> {\r\n\t\tlet promises: Promise<Object>[] = new Array();\r\n\r\n\t\tif (fileName && typeof fileName === 'string') {\r\n\t\t\tfileName = fileName.trim();\r\n\t\t}\r\n\r\n\t\tpromises.push(this.saveFile(plantingId, fileName));\r\n\t\tpromises.push(this.updateHeaders(plantingId, fileName, headers));\r\n\r\n\t\treturn Promise.all(promises)\r\n\t\t\t.then(() => {\r\n\t\t\t\treturn;\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic saveFile(plantingId: number, fileName: string): Promise<CMError> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\t\tlet body: SoilMoistureFileViewModel;\r\n\r\n\t\tif (!plantingId || !fileName) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tbody = {\r\n\t\t\tPlantingId: plantingId,\r\n\t\t\tFilename: fileName\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: body,\r\n\t\t\turl: this.urls.file.save,\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.put(options);\r\n\t}\r\n\r\n\tpublic updateHeaders(plantingId: number, fileName: string, headers: ISoilMoistureHeader[]): Promise<CMError | SuccessResponse> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\t\tlet body: ISoilMoistureHeaderViewModel;\r\n\t\tlet headerStrings: ISoilMoistureHeaderStrings;\r\n\r\n\t\tif (!plantingId || !headers) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\theaderStrings = this.stringifyHeaders(headers);\r\n\r\n\t\tbody = {\r\n\t\t\tPlantingId: plantingId,\r\n\t\t\tFileName: fileName,\r\n\t\t\tName: headerStrings.nameString,\r\n\t\t\tDepth: headerStrings.depthString,\r\n\t\t\tType: headerStrings.typeString,\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: body,\r\n\t\t\turl: this.urls.headers.update,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: SuccessResponse | CMError): SuccessResponse | CMError => {\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.put(options);\r\n\t}\r\n\r\n\tpublic getData(plantingId: number): Promise<ISoilMoistureGraphSeries[]> {\r\n\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this.urls.data.get(plantingId),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true,\r\n\r\n\t\t\tcallback: (response: ISoilMoistureSeries[]) => {\r\n\t\t\t\tlet converter: SoilMoistureSeriesConverter;\r\n\r\n\t\t\t\tconverter = new SoilMoistureSeriesConverter(response);\r\n\t\t\t\treturn converter.getGraphSeries();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tprivate _processSoilMoistureList(list: IFlowMeterPlantingListViewModel[]): ISoilMoistureFile[] {\r\n\t\tlet soilMoistureFiles: ISoilMoistureFile[] = new Array();\r\n\r\n\t\tif (!list || !list.length) {\r\n\t\t\treturn soilMoistureFiles;\r\n\t\t}\r\n\r\n\t\tfor (let item of list) {\r\n\t\t\tlet harvestDate: string = DateUtility.dotNetToMMDDYYYY(item.HarvestDate);\r\n\t\t\tlet lastUpdateDate: string = DateUtility.dotNetToMMDDYYYY(item.LastUpdateDate);\r\n\r\n\t\t\tsoilMoistureFiles.push({\r\n\t\t\t\tRanchName: item.RanchName,\r\n\t\t\t\tPlantingName: item.PlantingName,\r\n\t\t\t\tPlantingId: item.PlantingId,\r\n\t\t\t\tHarvestDate: harvestDate ? harvestDate : 'n/a',\r\n\t\t\t\tFileName: item.FileName,\r\n\t\t\t\tLastUpdateDate: lastUpdateDate ? lastUpdateDate : 'n/a',\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// sort by ranch initially\r\n\t\tsoilMoistureFiles = soilMoistureFiles.sort((a: ISoilMoistureFile, b: ISoilMoistureFile) => {\r\n\t\t\tlet ranchA = a.RanchName.toLowerCase();\r\n\t\t\tlet ranchB = b.RanchName.toLocaleLowerCase();\r\n\t\t\treturn (ranchA < ranchB) ? -1 : (ranchA > ranchB) ? 1 : 0;\r\n\t\t})\r\n\r\n\t\treturn soilMoistureFiles;\r\n\t}\r\n\r\n\tprivate processSoilMoistureHeaders(headers: ISoilMoistureHeader[]): ISoilMoistureHeader[] {\r\n\t\tif (!headers || !headers.length) {\r\n\t\t\treturn new Array();\r\n\t\t}\r\n\r\n\t\tfor (let header of headers) {\r\n\t\t\tif (header.SensorName === 'record num' || (header.Depth === '0' &&\r\n\t\t\t\theader.DataType === '0') || header.DataType.toLowerCase().indexOf('volt') >= 0) {\r\n\r\n\t\t\t\theader.isDisplayed = false;\r\n\t\t\t} else {\r\n\t\t\t\theader.isDisplayed = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (!header.SensorName || header.SensorName === '') {\r\n\t\t\t\theader.SensorName = null;\r\n\t\t\t}\r\n\r\n\t\t\tif (!header.Depth || header.Depth === '') {\r\n\t\t\t\theader.Depth = null;\r\n\t\t\t}\r\n\r\n\t\t\tif (!header.DataType || header.DataType === '') {\r\n\t\t\t\theader.DataType = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn headers;\r\n\t}\r\n\r\n\tprivate stringifyHeaders(headers: ISoilMoistureHeader[]): ISoilMoistureHeaderStrings {\r\n\t\tlet nameString = '';\r\n\t\tlet depthString = '';\r\n\t\tlet typeString = '';\r\n\r\n\t\tfor (let header of headers) {\r\n\t\t\tif (nameString === '') {\r\n\t\t\t\tnameString = nameString + '\"' + header.SensorName + '\"';\r\n\t\t\t} else {\r\n\t\t\t\tnameString = nameString + ',\"' + header.SensorName + '\"';\r\n\t\t\t}\r\n\r\n\t\t\tif (depthString === '') {\r\n\t\t\t\tdepthString = depthString + '\"' + header.Depth + '\"';\r\n\t\t\t} else {\r\n\t\t\t\tdepthString = depthString + ',\"' + header.Depth + '\"';\r\n\t\t\t}\r\n\r\n\t\t\tif (typeString === '') {\r\n\t\t\t\ttypeString = typeString + '\"' + header.DataType + '\"';\r\n\t\t\t} else {\r\n\t\t\t\ttypeString = typeString + ',\"' + header.DataType + '\"';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tnameString: nameString,\r\n\t\t\tdepthString: depthString,\r\n\t\t\ttypeString: typeString\r\n\t\t} as ISoilMoistureHeaderStrings;\r\n\t}\r\n\r\n\tprivate getImportError(response: CMError): eSoilMoistureImportErrors {\r\n\t\tif (!response || !response.message) {\r\n\t\t\treturn eSoilMoistureImportErrors.GENERIC;\r\n\t\t}\r\n\r\n\t\tif (response.message.toLowerCase().indexOf('invalid date') >= 0) {\r\n\t\t\treturn eSoilMoistureImportErrors.DATE;\r\n\t\t} else if (response.message.toLowerCase().indexOf('number of columns') >= 0) {\r\n\t\t\treturn eSoilMoistureImportErrors.COLUMNS;\r\n\t\t} else if (response.message.toLowerCase().indexOf('file could not be found') >= 0) {\r\n\t\t\treturn eSoilMoistureImportErrors.NOTFOUND;\r\n\t\t} else if (response.message.toLowerCase().indexOf('content is empty') >= 0) {\r\n\t\t\treturn eSoilMoistureImportErrors.EMPTY;\r\n\t\t} else {\r\n\t\t\treturn eSoilMoistureImportErrors.GENERIC;\r\n\t\t}\r\n\t}\r\n\t\t}\r\n","<div class=\"bk-dialog\">\r\n    <button type=\"button\"\r\n        class=\"bk-button bk-dialog__close\"\r\n        (click)=\"close()\">\r\n\r\n        <span>&times;</span>\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>\r\n         {{ 'Soil Sensor Data' | translate }} - {{ plantingName }}\r\n    </h4>\r\n\r\n    <div *ngIf=\"view === eSoilMoistureViews.GRAPH\"\r\n        mat-dialog-content\r\n        [class.bk-soil-moisture-dialog__graph-content]=\"view === eSoilMoistureViews.GRAPH\">\r\n        \r\n        <div class=\"bk-soil-moisture-dialog__header--tabs\">\r\n            <div class=\"bk-soil-moisture-dialog__tabs\">\r\n                <div *ngFor=\"let tab of tabs\"\r\n                    (click)=\"selectTab(tab.name)\"\r\n                    class=\"bk-soil-moisture-dialog__tab\"\r\n                    [class.bk-soil-moisture-dialog__tab--selected]=\"selectedTab === tab.name\"\r\n                    [class.bk-soil-moisture-dialog__tab--disabled]=\"tab.disabled\">\r\n\r\n                    {{ tab.name | translate}}\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <div *ngIf=\"soilSeries\"\r\n             class=\"bk-soil-moisture-dialog__charts-container\">\r\n            <div class=\"bk-soil-moisture-dialog__charts-head\">\r\n                <div class=\"bk-soil-moisture-dialog__depth-options\">\r\n                    <div class=\"bk-soil-moisture-dialog__depth-options--title\">\r\n                        {{ 'Soil Depth' | translate }}:\r\n                    </div>\r\n\r\n                    <label *ngFor=\"let depthOption of depthOptions\"\r\n                           class=\"bk-soil-moisture-dialog__depth-option\">\r\n\r\n                        <input type=\"checkbox\"\r\n                               [(ngModel)]=\"depthOption.isDisplayed\"\r\n                               (change)=\"filterDepths()\" /> \r\n                        {{ depthOption.name }}<!-- not translating this because it requires a costly code change-->\r\n                    </label>\r\n                </div>\r\n                <div class=\"bk-soil-moisture-dialog__time-options\">\r\n                    <div class=\"bk-soil-moisture-dialog__time-options--title\">\r\n                        {{ 'Timespan' | translate }}:\r\n                    </div>\r\n                    <button class=\"bk-button bk-button--medium bk-dialog__button--time-option\"\r\n                            (click)=\"updateTimeRange(30)\"\r\n                            [class.bk-button--gray]=\"soilTimeRange !== 30\">\r\n                        1{{ 'M' | translate }}\r\n                    </button>\r\n                    <button class=\"bk-button bk-button--medium bk-dialog__button--time-option\"\r\n                            (click)=\"updateTimeRange(90)\"\r\n                            [class.bk-button--gray]=\"soilTimeRange !== 90\">\r\n                        3{{ 'M' | translate }}\r\n                    </button>\r\n                    <button class=\"bk-button bk-button--medium bk-dialog__button--time-option\"\r\n                            (click)=\"updateTimeRange(180)\"\r\n                            [class.bk-button--gray]=\"soilTimeRange !== 180\">\r\n                        6{{ 'M' | translate }}\r\n                    </button>\r\n                    <button class=\"bk-button bk-button--medium bk-dialog__button--time-option\"\r\n                            (click)=\"updateTimeRange(365)\"\r\n                            [class.bk-button--gray]=\"soilTimeRange !== 365\">\r\n                        1{{ 'Y' | translate }}\r\n                    </button>\r\n                    <button class=\"bk-button bk-button--medium bk-dialog__button--time-option\"\r\n                            (click)=\"updateTimeRange(0)\"\r\n                            [class.bk-button--gray]=\"soilTimeRange !== 0\">\r\n                        {{ 'All' | translate }}\r\n                    </button>\r\n                </div>\r\n            </div>\r\n\r\n            <ng-container *ngIf=\"selectedDepth !== null\">\r\n                \r\n                <!-- highcharts container -->\r\n\r\n                <div *ngFor=\"let series of soilSeries\"\r\n                     #chartContainer\r\n                     class=\"bk-soil-moisture-dialog__chart\">\r\n                </div>\r\n            </ng-container>\r\n        </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === eSoilMoistureViews.SETTINGS\"\r\n        mat-dialog-content>\r\n\r\n        <form #soilMoistureForm=\"ngForm\">\r\n\r\n            <div class=\"bk-soil-moisture-dialog__header--large\">\r\n                <i class=\"fa fa-cog\"></i> \r\n                {{ 'Soil Sensor Data Settings' | translate }}\r\n            </div>\r\n\r\n            <div class=\"bk-soil-moisture-dialog__file-name--container\">\r\n                <div class=\"bk-soil-moisture-dialog__file-name\">\r\n                    <label class=\"bk-dialog__label\">\r\n                        {{'Soil Sensor Data File Name' | translate}}\r\n                    </label>\r\n                    <input class=\"bk-dialog__field bk-soil-moisture-dialog__file-name--input\"\r\n                        [(ngModel)]=\"fileName\"\r\n                        name=\"file\"\r\n                        #file=\"ngModel\"\r\n                        required\r\n                        [ngClass]=\"{'bk-input-invalid' : (file && file.invalid && file.dirty) || soilMoistureLinkError}\"\r\n                        (ngModelChange)=\"onSoilMoistureFileNameChange()\" />\r\n\r\n                    <div *ngIf=\"file && file.invalid && file.dirty\"\r\n                        class=\"bk-soil-moisture-dialog__file-name--error\">\r\n                        {{ 'The Soil Sensor Data File Name can not be empty' | translate }}.\r\n                    </div>\r\n\r\n                    <div *ngIf=\"soilMoistureLinkError === eSoilMoistureImportErrors.DATE\"\r\n                        class=\"bk-soil-moisture-dialog__file-name--error\">\r\n                        {{ 'Soil Sensor Data file contains a bad date format' | translate}}.\r\n                        {{ 'We suggest you use the format YYYY-MM-DD' | translate }}.\r\n                    </div>\r\n\r\n                    <div *ngIf=\"soilMoistureLinkError === eSoilMoistureImportErrors.COLUMNS\"\r\n                        class=\"bk-soil-moisture-dialog__file-name--error\">\r\n                        {{ 'Number of columns in Soil Sensor Data file does not match number of columns in the header file' | translate}}.\r\n                        {{ 'Please verify the columns in both files match' | translate }}.\r\n                    </div>\r\n\r\n                    <div *ngIf=\"soilMoistureLinkError === eSoilMoistureImportErrors.NOTFOUND\"\r\n                        class=\"bk-soil-moisture-dialog__file-name--error\" >\r\n                        {{ 'Soil Sensor Data file could not be found' | translate}}.\r\n                        {{ 'Please make sure the file exists on the server and try again' | translate }}.\r\n                    </div>\r\n\r\n                    <div *ngIf=\"soilMoistureLinkError === eSoilMoistureImportErrors.EMPTY\"\r\n                        class=\"bk-soil-moisture-dialog__file-name--error\">\r\n                        {{ 'Content of Soil Sensor Data file is empty' | translate}}.\r\n                        {{ 'Please verify Soil Sensor Data file contains entries' | translate }}.\r\n                    </div>\r\n\r\n                    <div *ngIf=\"soilMoistureLinkError === eSoilMoistureImportErrors.GENERIC\"\r\n                        class=\"bk-soil-moisture-dialog__file-name--error\">\r\n                        {{ 'This URL does not link to a valid data file' | translate }}. \r\n                        {{ 'Please try again' | translate }}.\r\n                    </div>\r\n\r\n                    <div class=\"bk-soil-moisture-dialog__file-name--help\">\r\n                        {{ 'Enter the Soil Sensor Data URL or File Name' | translate }}. \r\n                        {{ 'If unsure, please leave blank' | translate }}.\r\n                    </div>\r\n                </div>\r\n                <div class=\"bk-soil-moisture-dialog__file-name--button\">\r\n                    <button (click)=\"link()\"\r\n                        class=\"bk-button\"\r\n                        [disabled]=\"(file && file.invalid && file.dirty) || fileNameIsUnchanged\">\r\n                        <i class=\"fa fa-link\"></i> {{'Link file' | translate}}\r\n                    </button>\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"bk-soil-moisture-dialog__sub-header\">\r\n                {{ 'Data Mapping' | translate}}\r\n            </div>\r\n\r\n            <div class=\"bk-soil-moisture-dialog__paragraph\">\r\n                {{ 'CropManage can display many types of Soil Sensor Data files' | translate }}.\r\n                {{ 'To ensure your data is displayed correctly' | translate}}, \r\n                <span class=\"bk-soil-moisture-dialog__paragraph--alt\">\r\n                    {{ 'please ensure that CropManage accurately detected your data type' | translate }}.\r\n                </span>\r\n            </div>\r\n\r\n            <div *ngIf=\"headersValid.sensorName && headersValid.sensorDepth && headersValid.sensorType\"\r\n                class=\"bk-soil-moisture-dialog__sensor-header\" >\r\n                {{ 'Detected Sensors' | translate}}\r\n            </div>\r\n\r\n            <ng-container *ngIf=\"!headersValid.sensorName || !headersValid.sensorDepth || !headersValid.sensorType\">\r\n                <div class=\"bk-soil-moisture-dialog__sensor-header bk-soil-moisture-dialog__sensor-header--error\">\r\n                    {{ 'Detected Sensors Errors' | translate}}\r\n                </div>\r\n                <div *ngIf=\"!headersValid.sensorName\"\r\n                    class=\"bk-soil-moisture-dialog__sensor-error\">\r\n                    {{ 'Sensor Name field(s) cannot be empty' | translate }}\r\n                </div>\r\n                <div *ngIf=\"!headersValid.sensorDepth\"\r\n                    class=\"bk-soil-moisture-dialog__sensor-error\">\r\n                    {{ 'Sensor Depth must be set for all sensors' | translate }}\r\n                </div>\r\n                <div *ngIf=\"!headersValid.sensorType\"\r\n                    class=\"bk-soil-moisture-dialog__sensor-error\">\r\n                    {{ 'Sensor Type must be set for all sensors' | translate }}\r\n                </div>\r\n            </ng-container>\r\n\r\n            <table class=\"bk-soil-moisture-dialog__headers-table\">\r\n                <tr class=\"bk-soil-moisture-dialog__headers-table--head\">\r\n                    <th class=\"bk-soil-moisture-dialog__headers-table--name-column\">\r\n                        {{ 'Sensor Name' | translate }}\r\n                    </th>\r\n                    <th class=\"bk-soil-moisture-dialog__headers-table--depth-column\">\r\n                        {{ 'Sensor Depth' | translate }}\r\n                    </th>\r\n                    <th class=\"bk-soil-moisture-dialog__headers-table--type-column\">\r\n                        {{ 'Sensor Type' | translate }}\r\n                    </th>\r\n                </tr>\r\n                <ng-container *ngFor=\"let header of headers; let i = index\">\r\n                    <tr *ngIf=\"header.isDisplayed && !(file && file.invalid && file.dirty)\"\r\n                        class=\"bk-soil-moisture-dialog__headers-table--row\">\r\n                        <td>\r\n                            <input class=\"bk-soil-moisture-dialog__headers-table--name\"\r\n                                [(ngModel)]=\"header.SensorName\" \r\n                                [ngClass]=\"{'bk-input-invalid' : !isNameValid(header.SensorName) }\"\r\n                                [ngModelOptions]=\"{standalone: true}\"\r\n                                (ngModelChange)=\"validateHeaders()\"/>\r\n                        </td>\r\n                        <td>\r\n                            <select class=\"bk-soil-moisture-dialog__headers-table--depth\"\r\n                                [(ngModel)]=\"header.Depth\"\r\n                                [ngClass]=\"{'bk-input-invalid' : !isDepthValid(header.Depth) }\"\r\n                                [ngModelOptions]=\"{standalone: true}\"\r\n                                (ngModelChange)=\"validateHeaders()\" >\r\n\r\n                                <option *ngFor=\"let dropdownItem of depthDropdownItems\"\r\n                                    [ngValue]=\"dropdownItem.value\">\r\n                                    {{ dropdownItem.name }}\r\n                                </option>\r\n                            </select>\r\n                        </td>\r\n                        <td>\r\n                            <select class=\"bk-soil-moisture-dialog__headers-table--type\"\r\n                                [(ngModel)]=\"header.DataType\"\r\n                                [ngClass]=\"{'bk-input-invalid' : !isTypeValid(header.DataType) }\"\r\n                                [ngModelOptions]=\"{standalone: true}\"\r\n                                (ngModelChange)=\"validateHeaders()\" >\r\n\r\n                                <option *ngFor=\"let dropdownItem of typeDropdownItems\"\r\n                                    [ngValue]=\"dropdownItem.value\">\r\n                                    {{ dropdownItem.name }}\r\n                                </option>\r\n                            </select>\r\n                        </td>\r\n                    </tr>\r\n                </ng-container>\r\n            </table>\r\n\r\n            <div *ngIf=\"noHeadersVisible || (file && file.invalid && file.dirty)\"\r\n                class=\"bk-soil-moisture-dialog__empty\">\r\n                {{ 'Please link a Soil Sensor Data File to display sensors' | translate}}\r\n            </div>\r\n\r\n        </form>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === eSoilMoistureViews.CONFIRMATION\"\r\n        mat-dialog-content>\r\n        <div class=\"bk-dialog__close-confirmation\">\r\n            {{'The changes you made were not saved' | translate}}. {{'Discard changes' | translate}}?\r\n        </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === eSoilMoistureViews.GRAPH\"\r\n        mat-dialog-actions\r\n        align=\"end\">\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-dialog__button--secondary\"\r\n            (click)=\"switchView(eSoilMoistureViews.SETTINGS)\">\r\n            <i class=\"fa fa-cog bk-soil-moisture-dialog__settings-icon\"></i> \r\n            {{ 'Settings' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"close()\">\r\n            {{ 'Close' | translate }}\r\n        </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === eSoilMoistureViews.SETTINGS\"\r\n        mat-dialog-actions\r\n        align=\"end\" >\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n            (click)=\"close()\">\r\n            {{ 'Cancel' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            [disabled]=\"!isFormValid()\"\r\n            (click)=\"save()\">\r\n            {{ 'Save' | translate }}\r\n        </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === eSoilMoistureViews.CONFIRMATION\"\r\n        mat-dialog-actions\r\n        align=\"end\">\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n            (click)=\"cancelClose()\">\r\n            {{ 'Keep Editing' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"close()\">\r\n            {{ 'Discard' | translate }}\r\n        </button>\r\n    </div>\r\n</div>\r\n","import { Component, Inject, OnInit, ViewChildren, QueryList, ElementRef, AfterViewInit, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\nimport { SoilMoistureService } from './service';\r\nimport { ObjectUtility } from '../../classes/objectUtility';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { SoilMoisture } from './soilMoisture';\r\nimport { SoilSeriesCharts } from './soilSeriesCharts';\r\n\r\nimport {\r\n\tISoilMoistureDialogParameters, ISoilMoistureHeader, ISoilMoistureDropdownItem,\r\n\tISoilMoistureFormProperties, ISoilMoistureSeries,\r\n\tISoilMoistureGraphSeries, ISoilMoistureTab, ISoilMoistureDepthOption\r\n} from './soilMoisture.interface';\r\n\r\nimport { IHighchartsData } from '../../interfaces/views/highCharts';\r\nimport { CMError } from '../../interfaces/interfaces';\r\n\r\nimport { eSoilMoistureViews, eSoilMoistureImportErrors } from '../../interfaces/constants';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'soil-moisture-dialog',\r\n\ttemplateUrl: 'soil-moisture-dialog.html'\r\n})\r\n\r\nexport class SoilMoistureDialog implements OnInit, AfterViewInit, OnDestroy {\r\n\t@ViewChildren('chartContainer') chartList: QueryList<ElementRef>;\r\n\r\n\tprivate readonly graphViewWidth: string = '1000px';\r\n\tprivate readonly standardViewWidth: string = '690px';\r\n\r\n\tpublic eSoilMoistureViews = eSoilMoistureViews;\r\n\tpublic headers: ISoilMoistureHeader[] = new Array();\r\n\tpublic soilMoisture = new SoilMoisture();\r\n\tpublic depthDropdownItems: ISoilMoistureDropdownItem[] = this.soilMoisture.soilMoistureDepthDropdownItems;\r\n\tpublic typeDropdownItems: ISoilMoistureDropdownItem[] = this.soilMoisture.SoilMoistureTypeDropdownItems;\r\n\tpublic tabs: ISoilMoistureTab[] = SoilMoisture.SoilMoistureTabs;\r\n\tpublic depthOptions: ISoilMoistureDepthOption[] = new Array();\r\n\r\n\tpublic noHeadersVisible = true;\r\n\tpublic fileNameIsUnchanged = true;\r\n\tprivate currentlyLinkedDataFile: string;\r\n\r\n\tpublic headersValid = {\r\n\t\tsensorName: true as boolean,\r\n\t\tsensorDepth: true as boolean,\r\n\t\tsensorType: true as boolean\r\n\t}\r\n\r\n\tpublic view: eSoilMoistureViews;\r\n\tpublic plantingId: number;\r\n\tpublic plantingName: string;\r\n\tpublic fileName: string;\r\n\tpublic hasSoilMoistureFileName: boolean;\r\n\tpublic isSaving: boolean;\r\n\tprivate _evaluatingFile = false;\r\n\tpublic originalFormProperties: ISoilMoistureFormProperties;\r\n\tpublic soilMoistureLinkError: eSoilMoistureImportErrors;\r\n\tpublic eSoilMoistureImportErrors = eSoilMoistureImportErrors;\r\n\tpublic areNewHeaders = false;\r\n\r\n\tprivate soilSeriesChart: SoilSeriesCharts;\r\n\tpublic soilSeries: ISoilMoistureGraphSeries[];\r\n\tpublic selectedTab: string;\r\n\tpublic chartContainers: ElementRef[];\r\n\tpublic soilTimeRange: number;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(public dialogRef: MatDialogRef<SoilMoistureDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: ISoilMoistureDialogParameters,\r\n\t\tprivate soilMoistureService: SoilMoistureService,\r\n\t\tprivate updateService: UpdateService) {\r\n\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tif (!data) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.view = data.view;\r\n\t\tthis.updateDialogWidth();\r\n\t\tthis.plantingId = data.plantingId;\r\n\t\tthis.plantingName = data.plantingName;\r\n\t\tthis.fileName = data.fileName;\r\n\t\tthis.hasSoilMoistureFileName = data.hasSoilMoistureFileName;\r\n\r\n\t\tthis.dialogRef.disableClose = true;\r\n\r\n\t\tthis.dialogRef.backdropClick().pipe(takeUntil(this._subscriptions$)).subscribe(clicked => {\r\n\t\t\tthis.close(true);\r\n\t\t})\r\n\r\n\t\tthis.updateService.closeModalSubscription.pipe(takeUntil(this._subscriptions$)).subscribe(close => {\r\n\t\t\tthis.dialogRef.close();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * displays the graph is view is set to 'graph' and filename exists. If\r\n\t * filename doesn't exist, change view to 'settings' and show settings.\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tthis.soilSeriesChart = new SoilSeriesCharts();\r\n\t\tthis.isSaving = false;\r\n\r\n\t\tif (this.view === eSoilMoistureViews.SETTINGS) {\r\n\t\t\tthis.showSettings();\r\n\t\t}\r\n\r\n\t\tif (this.view === eSoilMoistureViews.GRAPH) {\r\n\t\t\tif (this.fileName || this.hasSoilMoistureFileName) {\r\n\t\t\t\tthis._showGraph();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.view = eSoilMoistureViews.SETTINGS;\r\n\t\t\tthis.updateDialogWidth();\r\n\t\t\tthis.showSettings();\r\n\t\t}\r\n\r\n\t\tthis.dialogRef.afterOpen().pipe(takeUntil(this._subscriptions$)).subscribe(event => {\r\n\t\t\tthis.updateDialogWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tngAfterViewInit(): void {\r\n\t\t// the graph isn't rendered until the chartList.changes() fires\r\n\t\t// the event fires when soilSeries is populated and selectedDepth is not null\r\n\t\tthis.chartList.changes.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.chartContainers = this.chartList.toArray();\r\n\t\t\tthis.setDataForGraphs();\r\n\t\t});\r\n\r\n\t\tthis.updateDialogWidth();\r\n\t}\r\n\r\n\tpublic close(outsideClick?: boolean): void {\r\n\t\tif (this.view === eSoilMoistureViews.SETTINGS) {\r\n\t\t\tif (this.formPropertiesHaveChanged()) {\r\n\t\t\t\tthis.view = eSoilMoistureViews.CONFIRMATION;\r\n\t\t\t\tthis.updateDialogWidth();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.dialogRef.close();\r\n\t\t} else if (this.view === eSoilMoistureViews.GRAPH) {\r\n\t\t\tthis.dialogRef.close();\r\n\t\t} else if (this.view === eSoilMoistureViews.CONFIRMATION) {\r\n\t\t\tif (outsideClick) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.dialogRef.close();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic cancelClose(): void {\r\n\t\tthis.view = eSoilMoistureViews.SETTINGS;\r\n\t\tthis.updateDialogWidth();\r\n\t}\r\n\r\n\tpublic showSettings(): void {\r\n\t\tif (this.fileName) {\r\n\t\t\tthis.getHeaders(this.plantingId)\r\n\t\t\t\t.then(event => { });\r\n\t\t} else if (this.hasSoilMoistureFileName) {\r\n\t\t\tthis.soilMoistureService.getFile(this.plantingId)\r\n\t\t\t\t.then(response => {\r\n\t\t\t\t\tif (!response) {\r\n\t\t\t\t\t\tthis.noHeadersVisible = true;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (response.FileName) {\r\n\t\t\t\t\t\tthis.fileName = response.FileName\r\n\t\t\t\t\t\tthis.getHeaders(this.plantingId)\r\n\t\t\t\t\t\t\t.then(event => { });\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.noHeadersVisible = true;\r\n\t\t\tthis.originalFormProperties = {\r\n\t\t\t\tfileName: this.fileName,\r\n\t\t\t\theaders: this.headers\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _showGraph(): void {\r\n\t\tthis.soilSeries = null;\r\n\t\tthis.selectedTab = null;\r\n\t\tthis.chartContainers = null;\r\n\r\n\t\tfor (let tab of this.tabs) {\r\n\t\t\ttab.disabled = true;\r\n\t\t}\r\n\r\n\t\tthis.soilMoistureService.getData(this.plantingId).then(response => {\r\n\t\t\tif (!response) {\r\n\t\t\t\tthis.switchView(eSoilMoistureViews.SETTINGS);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.soilSeries = response;\r\n\r\n\t\t\tif (this.soilSeries.length > 0) {\r\n\t\t\t\tthis.selectTab(this.soilSeries[0].tabName);\r\n\t\t\t}\r\n\r\n\t\t\tfor (let series of this.soilSeries) {\r\n\t\t\t\tfor (let tab of this.tabs) {\r\n\t\t\t\t\tif (tab.name === series.tabName) {\r\n\t\t\t\t\t\ttab.disabled = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis._pruneTabs();\r\n\r\n\t\t\tthis.setDataForGraphs();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Depending on data, hide irrelevant tabs.\r\n\t */\r\n\tprivate _pruneTabs(): void {\r\n\t\tthis.tabs = this.tabs.filter(obj => this.soilSeries.some(item => item.tabName === obj.name));\r\n\t}\r\n\r\n\t/**\r\n\t * trim out of range values\r\n\t * @param records\r\n\t */\r\n\tprivate _removeOutOfRangeRecords(records: ISoilMoistureGraphSeries[]): ISoilMoistureGraphSeries[] {\r\n\t\tif (!records) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tfor (let record of records) {\r\n\t\t\tlet seriesListLength: number;\r\n\r\n\t\t\tif (!record.seriesList || record.seriesList.length === 0) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tseriesListLength = record.seriesList.length;\r\n\r\n\t\t\tfor (let j = seriesListLength - 1; j >= 0; j--) {\r\n\t\t\t\tlet seriesLength: number;\r\n\t\t\t\tlet series: ISoilMoistureSeries;\r\n\r\n\t\t\t\tseries = record.seriesList[j];\r\n\r\n\t\t\t\tif (!series.Dates || series.Dates.length === 0) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!series.Values || series.Values.length === 0) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tseriesLength = series.Dates.length;\r\n\r\n\t\t\t\tfor (let i = seriesLength - 1; i >= 0; i--) {\r\n\t\t\t\t\tlet val: number;\r\n\t\t\t\t\tlet valid = true;\r\n\r\n\t\t\t\t\tval = Number(series.Values[i]);\r\n\r\n\t\t\t\t\tswitch (record.tabName) {\r\n\t\t\t\t\t\tcase 'Volumetric Moisture':\r\n\r\n\t\t\t\t\t\t\tif (val < 0 || val > 100) {\r\n\t\t\t\t\t\t\t\tvalid = false;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'Tension':\r\n\t\t\t\t\t\t\tif (val < 0 || val > 200) {\r\n\t\t\t\t\t\t\t\tvalid = false;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'Salinity/Electrical Conductivity':\r\n\t\t\t\t\t\t\tif (val < 0 || val > 20) {\r\n\t\t\t\t\t\t\t\tvalid = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!valid) {\r\n\t\t\t\t\t\tseries.Dates.splice(i, 1);\r\n\t\t\t\t\t\tseries.Values.splice(i, 1);\r\n\r\n\t\t\t\t\t\tif (series.Dates.length === 0) {\r\n\t\t\t\t\t\t\trecord.seriesList.splice(j, 1);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn records;\r\n\t}\r\n\r\n\tpublic selectTab(tabName: string): void {\r\n\t\tlet seriesList: ISoilMoistureSeries[];\r\n\t\tlet depthOption: ISoilMoistureDepthOption;\r\n\r\n\t\tif (!tabName) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.depthOptions = new Array();\r\n\t\tthis.selectedTab = tabName;\r\n\r\n\t\tif (this.soilSeries && this.soilSeries.length > 0) {\r\n\t\t\tlet series: ISoilMoistureGraphSeries;\r\n\r\n\t\t\tseries = this.soilSeries.filter(x => x.tabName === this.selectedTab)[0];\r\n\r\n\t\t\tif (series) {\r\n\t\t\t\tseriesList = series.seriesList;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tseriesList = null;\r\n\t\t}\r\n\r\n\t\tif (!seriesList) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// populate a list of depth options, which is a series of checkboxes in the UI\r\n\t\tfor (let series of seriesList) {\r\n\t\t\tdepthOption = this.depthOptions.filter(x => x.name === series.Header.Depth)[0];\r\n\r\n\t\t\tif (!depthOption) {\r\n\t\t\t\tthis.depthOptions.push({\r\n\t\t\t\t\tname: series.Header ? series.Header.Depth : null,\r\n\t\t\t\t\tisDisplayed: true\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setDataForGraphs();\r\n\t}\r\n\r\n\tpublic link(): void {\r\n\t\tlet updateHeaders = true;\r\n\r\n\t\tthis.soilMoistureLinkError = null;\r\n\t\tthis.fileNameIsUnchanged = true;\r\n\t\tthis.currentlyLinkedDataFile = this.fileName;\r\n\r\n\t\t// update headers if filename has changed\r\n\t\tupdateHeaders = this.originalFormProperties\r\n\t\t\t&& this.originalFormProperties.fileName === this.fileName ? false : true;\r\n\r\n\t\tthis._evaluatingFile = true;\r\n\r\n\t\tthis.soilMoistureService.linkFile(this.plantingId, this.fileName, updateHeaders)\r\n\t\t\t.then(response => {\r\n\t\t\t\tlet headersResponse: ISoilMoistureHeader[];\r\n\t\t\t\tlet error: CMError;\r\n\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\terror = response as CMError;\r\n\r\n\t\t\t\tif (error.code) {\r\n\t\t\t\t\tthis.soilMoistureLinkError = error.code;\r\n\t\t\t\t\tthis.noHeadersVisible = true;\r\n\t\t\t\t\tthis.headers = new Array();\r\n\t\t\t\t\tthis._evaluatingFile = false;\r\n\t\t\t\t\tthis.validateHeaders();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\theadersResponse = response as ISoilMoistureHeader[];\r\n\r\n\t\t\t\tif (!headersResponse.length) {\r\n\t\t\t\t\tthis.noHeadersVisible = true;\r\n\t\t\t\t\tthis.headers = new Array();\r\n\t\t\t\t\tthis.validateHeaders();\r\n\t\t\t\t\tthis.soilMoistureLinkError = null;\r\n\t\t\t\t\tthis._evaluatingFile = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.headers = headersResponse;\r\n\r\n\t\t\t\tlet filteredHeaders = this.headers.filter(x => x.isDisplayed);\r\n\t\t\t\tthis.noHeadersVisible = filteredHeaders.length === 0;\r\n\r\n\t\t\t\tthis.areNewHeaders = SoilSeriesCharts.areNewHeaders(this.headers);\r\n\r\n\t\t\t\tthis.validateHeaders();\r\n\t\t\t\tthis._evaluatingFile = false;\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic isNameValid(name: string): boolean {\r\n\t\tif (name) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn this.areNewHeaders && name === null ? true : false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic isDepthValid(depth: string): boolean {\r\n\t\tfor (let item of this.depthDropdownItems) {\r\n\t\t\tif (item.value === depth) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.areNewHeaders && depth === null ? true : false;\r\n\t}\r\n\r\n\tpublic isTypeValid(type: string): boolean {\r\n\t\tfor (let item of this.typeDropdownItems) {\r\n\t\t\tif (item.value === type) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.areNewHeaders && type === null ? true : false;\r\n\t}\r\n\r\n\tpublic validateHeaders(): void {\r\n\r\n\t\tthis.headersValid.sensorDepth = true;\r\n\t\tthis.headersValid.sensorName = true;\r\n\t\tthis.headersValid.sensorType = true;\r\n\r\n\t\tfor (let header of this.headers) {\r\n\t\t\tif (!header.isDisplayed) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.headersValid.sensorName && !this.isNameValid(header.SensorName)) {\r\n\t\t\t\tthis.headersValid.sensorName = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.headersValid.sensorDepth && !this.isDepthValid(header.Depth)) {\r\n\t\t\t\tthis.headersValid.sensorDepth = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.headersValid.sensorType && !this.isTypeValid(header.DataType)) {\r\n\t\t\t\tthis.headersValid.sensorType = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic isFormValid(): boolean {\r\n\t\tif (this.soilMoistureLinkError) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!this.fileName) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this._evaluatingFile === true) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!this.headersValid.sensorDepth || !this.headersValid.sensorName ||\r\n\t\t\t!this.headersValid.sensorType) {\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this.areNewHeaders) {\r\n\t\t\tfor (let header of this.headers) {\r\n\t\t\t\tif (header.SensorName === null || header.Depth === null || header.DataType === null) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.fileNameIsUnchanged\r\n\t\t\t&& this.originalFormProperties\r\n\t\t\t&& this.originalFormProperties.fileName !== this.currentlyLinkedDataFile) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (this.fileNameIsUnchanged && !this.formPropertiesHaveChanged()) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this.currentlyLinkedDataFile !== this.fileName) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic save(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.soilMoistureService.saveHeaders(this.plantingId, this.fileName, this.headers)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\r\n\t\t\t\tif (this.originalFormProperties && this.originalFormProperties.fileName !== this.fileName) {\r\n\t\t\t\t\tthis.updateService.setSoilMoistureFileUpdated(this.plantingId, this.fileName);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.switchView(eSoilMoistureViews.GRAPH);\r\n\t\t\t})\r\n\t}\r\n\r\n\tpublic switchView(view: eSoilMoistureViews): void {\r\n\t\tthis.view = view;\r\n\t\tthis.updateDialogWidth();\r\n\r\n\t\tif (view === eSoilMoistureViews.SETTINGS) {\r\n\t\t\tthis.showSettings();\r\n\t\t}\r\n\r\n\t\tif (view === eSoilMoistureViews.GRAPH) {\r\n\t\t\tthis._showGraph();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic onSoilMoistureFileNameChange(): void {\r\n\t\tthis.soilMoistureLinkError = null\r\n\r\n\t\tif (this.currentlyLinkedDataFile !== this.fileName) {\r\n\t\t\tthis.fileNameIsUnchanged = false;\r\n\t\t} else {\r\n\t\t\tthis.fileNameIsUnchanged = true;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate getHeaders(plantingId: number): Promise<void> {\r\n\t\treturn this.soilMoistureService.getHeaders(plantingId)\r\n\t\t\t.then(response => {\r\n\t\t\t\tif (!response || !(response instanceof Array)) {\r\n\t\t\t\t\tthis.noHeadersVisible = true;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.headers = response;\r\n\r\n\t\t\t\tlet filteredHeaders = this.headers.filter(x => x.isDisplayed);\r\n\t\t\t\tthis.noHeadersVisible = filteredHeaders.length === 0;\r\n\r\n\t\t\t\tthis.originalFormProperties = ObjectUtility.copy({\r\n\t\t\t\t\tfileName: this.fileName,\r\n\t\t\t\t\theaders: this.headers\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.currentlyLinkedDataFile = this.fileName;\r\n\r\n\t\t\t\tthis.areNewHeaders = SoilSeriesCharts.areNewHeaders(this.headers);\r\n\r\n\t\t\t\tthis.validateHeaders();\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate formPropertiesHaveChanged(): boolean {\r\n\t\tlet formProperties: ISoilMoistureFormProperties = {\r\n\t\t\tfileName: this.fileName,\r\n\t\t\theaders: this.headers\r\n\t\t};\r\n\r\n\t\tlet result: boolean;\r\n\r\n\t\tif (!this.originalFormProperties) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tresult = ObjectUtility.AreEqual(this.originalFormProperties, formProperties, null) ? false : true;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic filterDepths(): void {\r\n\t\tthis.setDataForGraphs();\r\n\t}\r\n\r\n\tpublic updateGraphRange(): void {\r\n\t\tthis.setDataForGraphs();\r\n\t}\r\n\r\n\tpublic updateTimeRange(timeRange: number): void {\r\n\t\tthis.soilTimeRange = timeRange;\r\n\t\tthis.setDataForGraphs();\r\n\t}\r\n\r\n\tprivate setDataForGraphs(): void {\r\n\t\tlet chartData: IHighchartsData[];\r\n\t\tlet line: IHighchartsData;\r\n\t\tlet index = 0;\r\n\t\tlet chartParams: { data: IHighchartsData[], unit: string };\r\n\t\tlet selectedGraphSeries: ISoilMoistureGraphSeries;\r\n\t\tlet dataType: string;\r\n\t\tlet seriesList: ISoilMoistureSeries[];\r\n\r\n\t\tif (this.soilTimeRange === undefined) {\r\n\t\t\tthis.soilTimeRange = 30;\r\n\t\t}\r\n\r\n\t\tif (!this.soilSeries || !this.chartContainers || !this.chartContainers.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tselectedGraphSeries = this.soilSeries.filter(x => x.tabName === this.selectedTab)[0];\r\n\r\n\t\tif (!selectedGraphSeries) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tselectedGraphSeries.seriesList = this._sortSeries(selectedGraphSeries.seriesList);\r\n\t\tseriesList = new Array();\r\n\r\n\t\tfor (let series of selectedGraphSeries.seriesList) {\r\n\t\t\t// if a data series' depth matches depth options, add the series to the chart\r\n\t\t\tif (!series.Header) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.depthOptions.filter(x => x.isDisplayed && x.name === series.Header.Depth).length) {\r\n\t\t\t\tseriesList.push(series);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdataType = seriesList && seriesList.length ? seriesList[0].Header.DataType : null;\r\n\t\tchartData = new Array();\r\n\r\n\t\tif (seriesList) {\r\n\r\n\t\t\tfor (let series of seriesList) {\r\n\t\t\t\tline = this.soilSeriesChart\r\n\t\t\t\t\t.convertData(series as ISoilMoistureSeries, this.soilTimeRange);\r\n\r\n\t\t\t\tchartData.push(line);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// set unit to the first data type in the list\r\n\t\tchartParams = { data: chartData, unit: dataType };\r\n\r\n\t\tthis.soilSeriesChart.generateHighchart(this.chartContainers[index].nativeElement, chartParams);\r\n\t}\r\n\r\n\t/**\r\n\t * Sort series by depth, and then by label\r\n\t * @param series\r\n\t * @returns\r\n\t */\r\n\tprivate _sortSeries(series: ISoilMoistureSeries[]): ISoilMoistureSeries[] {\r\n\r\n\t\tif (!series || series.length === 0) {\r\n\t\t\treturn new Array();\r\n\t\t}\r\n\r\n\t\tseries.sort((a, b): number => {\r\n\t\t\tlet result: number;\r\n\r\n\t\t\tif (a.Header.Depth === b.Header.Depth) {\r\n\t\t\t\tresult = a.Header.SensorName > b.Header.SensorName ? 1 : (a.Header.SensorName < b.Header.SensorName ? -1 : 0);\r\n\t\t\t} else {\r\n\t\t\t\tresult = a.Header.Depth > b.Header.Depth ? 1 : (a.Header.Depth < b.Header.Depth ? -1 : 0);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\r\n\t\treturn series;\r\n\t}\r\n\r\n\tprivate updateDialogWidth(): void {\r\n\t\tif (this.view === eSoilMoistureViews.GRAPH) {\r\n\t\t\tthis.dialogRef.updateSize(this.graphViewWidth);\r\n\t\t} else {\r\n\t\t\tthis.dialogRef.updateSize(this.standardViewWidth);\r\n\t\t}\r\n\t}\r\n}\r\n","<admin-nav></admin-nav>\r\n<div class=\"bk-soil-moisture__page--container\">\r\n    \r\n    <h5 class=\"bk-text--gray\">{{'Soil Sensor Data' | translate }}</h5>\r\n\r\n    <div class=\"bk-data-table__update-message\" [class.bk-data-table__update-message--error]=\"soilMoistureUpdateError\" *ngIf=\"plantingBeingUpdated\">\r\n        <i class=\"fa fa-check bk-data-table__update-message--status-icon\" *ngIf=\"!soilMoistureUpdateError\"></i>\r\n        <i class=\"fa fa-exclamation-circle bk-data-table__update-message--status-icon bk-data-table__update-message--status-icon-error\" *ngIf=\"soilMoistureUpdateError\"></i>\r\n\r\n        <span *ngIf=\"!soilMoistureUpdateError\">\r\n            {{ 'Data import job started for' | translate }} \"{{plantingBeingUpdated.name}}\". {{ 'This may take several minutes to complete' | translate }}.\r\n        </span>\r\n\r\n        <span *ngIf=\"soilMoistureUpdateError === eSoilMoistureImportErrors.DATE\">\r\n            {{ 'Soil Sensor Data file for' | translate }} \"{{plantingBeingUpdated.name}}\" {{ 'contains a date format' | translate}}. \r\n            {{ 'We suggest you use the format YYYY-MM-DD' | translate }}.\r\n        </span>\r\n\r\n        <span *ngIf=\"soilMoistureUpdateError === eSoilMoistureImportErrors.COLUMNS\">\r\n            {{ 'Number of columns in Soil Sensor Data file for' | translate }} \"{{plantingBeingUpdated.name}}\" {{ 'does not match number of columns in the header file' | translate}}. \r\n            {{ 'Please verify the columns in both files match' | translate }}.\r\n        </span>\r\n\r\n        <span *ngIf=\"soilMoistureUpdateError === eSoilMoistureImportErrors.NOTFOUND\">\r\n            {{ 'Soil Sensor Data file for' | translate }} \"{{plantingBeingUpdated.name}}\" {{ 'could not be found' | translate}}. \r\n            {{ 'Please make sure the file exists on the server and try again' | translate }}.\r\n        </span>\r\n\r\n        <span *ngIf=\"soilMoistureUpdateError === eSoilMoistureImportErrors.EMPTY\">\r\n            {{ 'Content of Soil Sensor Data file for' | translate }} \"{{plantingBeingUpdated.name}}\" {{ 'is empty' | translate}}. \r\n            {{ 'Please verify Soil Sensor Data file contains entries' | translate }}.\r\n        </span>\r\n\r\n        <span *ngIf=\"soilMoistureUpdateError === eSoilMoistureImportErrors.GENERIC\">\r\n            {{ 'There was an error updating' | translate }} \"{{plantingBeingUpdated.name}}\" {{ 'Soil Sensor Data' | translate}}. \r\n            {{ 'Check the' | translate }} <a class=\"bk-data-table__update-message--link\" href=\"javascript:void(0)\"\r\n                                             (click)=\"openSoilMoistureDialog(eSoilMoistureViews.SETTINGS, plantingBeingUpdated.id, plantingBeingUpdated.name, null, true)\">\r\n                {{ 'Planting Soil Sensor Data Settings' | translate}}\r\n            </a>\r\n        </span>\r\n\r\n        <i class=\"fa fa-times-circle bk-data-table__update-message--close\" (click)=\"clearSoilMoistureUpdateMessage()\"></i>\r\n    </div>\r\n\r\n    <div class=\"bk-data-table\">\r\n        <div class=\"bk-data-table__head\">\r\n            <div class=\"bk-data-table__title\">\r\n                {{ 'Active Soil Sensor Data Files' | translate}}\r\n            </div>\r\n            <div class=\"bk-data-table__search\">\r\n                <label class=\"bk-data-table__search--label\">\r\n                    {{ 'Search Soil Sensor Data Files' | translate }}:\r\n                    <input class=\"bk-data-table__search--input\" (keyup)=\"applyFilter($event.target.value)\" placeholder=\"Ranch Name, Planting Name, Date, File URL\" />\r\n                </label>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"bk-data-table__content\">\r\n            <mat-table [dataSource]=\"dataSource\" matSort>\r\n\r\n                <ng-container matColumnDef=\"RanchName\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Ranch' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.RanchName}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"PlantingName\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Planting' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.PlantingName}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"HarvestDate\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Harvest Date' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.HarvestDate}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"FileName\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'File URL' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.FileName}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"LastUpdateDate\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Last Updated' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.LastUpdateDate}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"Action\">\r\n                    <mat-header-cell *matHeaderCellDef> {{ 'Actions' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\" class=\"bk-data-table__cell-overflow\"> \r\n                        <div class=\"bk-split-button__group\">\r\n                            <button type=\"button\"\r\n                                class=\"bk-button bk-split-button__button\"                                         \r\n                                (click)=\"openSoilMoistureDialog(eSoilMoistureViews.GRAPH, row.PlantingId, row.PlantingName, row.FileName, null)\">View</button>\r\n                            <div class=\"bk-split-button__group--dropdown\" ngbDropdown role=\"group\">\r\n                                <button class=\"bk-button bk-split-button__dropdown-toggle\"\r\n                                    ngbDropdownToggle></button>\r\n                                <div class=\"bk-split-button__dropdown-menu\" ngbDropdownMenu>\r\n                                    <button class=\"bk-button bk-split-button__dropdown-menu-item\" \r\n                                        (click)=\"updateSoilMoistureData(row.PlantingId, row.PlantingName, row.FileName)\">\r\n                                        <i class=\"fa fa-arrow-circle-o-down\"></i> {{ 'Update' | translate }}\r\n                                    </button>\r\n                                    <button class=\"bk-button bk-split-button__dropdown-menu-item\" \r\n                                        (click)=\"openSoilMoistureDialog(eSoilMoistureViews.SETTINGS, row.PlantingId, row.PlantingName, row.FileName, null)\">\r\n                                        <i class=\"fa fa-cog\"></i> {{ 'Settings' | translate }}\r\n                                    </button>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </mat-cell>\r\n                </ng-container>\r\n\r\n                <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n                <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\r\n\r\n            </mat-table>\r\n\r\n            <div class=\"bk-data-table__empty\" *ngIf=\"dataSource && dataSource.filteredData && dataSource.filteredData.length === 0\"> \r\n                {{ 'There are no Active Soil Sensor Data Files matching' | translate }} <span class=\"bk-data-table__empty--filter\">\"{{dataSource.filter}}\"</span>\r\n            </div>\r\n\r\n            <mat-paginator [pageSizeOptions]=\"[10, 25, 50, 100]\"></mat-paginator>\r\n        </div>\r\n    </div>\r\n</div>","import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\n\r\nimport { SoilMoistureService } from './service';\r\nimport { SoilMoistureDialog } from './soil-moisture-dialog';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\n\r\nimport { ISoilMoistureFile, ISoilMoistureDialogParameters } from './soilMoisture.interface';\r\nimport { eSoilMoistureViews, eSoilMoistureImportErrors } from '../../interfaces/constants';\r\nimport { Router } from '@angular/router';\r\nimport { TokenService } from '../../services/token.service';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'soil-moisture',\r\n\ttemplateUrl: 'soil-moisture.component.html'\r\n})\r\n\r\nexport class SoilMoistureComponent implements OnInit, OnDestroy {\r\n\t@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n\t@ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n\tpublic displayedColumns = ['RanchName', 'PlantingName', 'HarvestDate', 'FileName', 'LastUpdateDate', 'Action'];\r\n\tpublic dataSource: MatTableDataSource<ISoilMoistureFile>;\r\n\tpublic soilMoistureFiles: ISoilMoistureFile[] = new Array();\r\n\tpublic eSoilMoistureViews = eSoilMoistureViews;\r\n\tpublic plantingBeingUpdated: {\r\n\t\tid: number,\r\n\t\tname: string\r\n\t} = null;\r\n\tpublic soilMoistureUpdateError: eSoilMoistureImportErrors;\r\n\tpublic eSoilMoistureImportErrors = eSoilMoistureImportErrors;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _router: Router,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate soilMoistureService: SoilMoistureService,\r\n\t\tprivate dialog: MatDialog,\r\n\t\tprivate updateService: UpdateService) {\r\n\r\n\t\tif (this._tokenService.isAuthenticated() === false) {\r\n\t\t\tthis._router.navigate(['login']);\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.soilMoistureService.list().then(soilMoistureFiles => {\r\n\t\t\tthis.soilMoistureFiles = soilMoistureFiles;\r\n\t\t\tthis.dataSource = new MatTableDataSource(this.soilMoistureFiles);\r\n\t\t\tthis.dataSource.paginator = this.paginator;\r\n\t\t\tthis.dataSource.sort = this.sort;\r\n\r\n\t\t\tthis.dataSource.sortingDataAccessor = (data: ISoilMoistureFile,\r\n\t\t\t\tsortHeaderId: string) => {\r\n\r\n\t\t\t\t\tswitch (sortHeaderId) {\r\n\t\t\t\t\t\tcase 'RanchName':\r\n\t\t\t\t\t\t\treturn data.RanchName.toLowerCase()\r\n\t\t\t\t\t\tcase 'PlantingName':\r\n\t\t\t\t\t\t\treturn data.PlantingName.toLowerCase();\r\n\t\t\t\t\t\tcase 'PlantingId':\r\n\t\t\t\t\t\t\treturn data.PlantingId;\r\n\t\t\t\t\t\tcase 'HarvestDate':\r\n\t\t\t\t\t\t\treturn DateUtility.MMDDYYYYToDate(data.HarvestDate).toDateString();\r\n\t\t\t\t\t\tcase 'FileName':\r\n\t\t\t\t\t\t\treturn data.FileName.toLowerCase();\r\n\t\t\t\t\t\tcase 'LastUpdateDate':\r\n\t\t\t\t\t\t\treturn DateUtility.MMDDYYYYToDate(data.LastUpdateDate).toDateString();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.updateService.SoilMoistureFileUpdated$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(updatedSoilMoistureFile => {\r\n\r\n\t\t\tif (!this.soilMoistureFiles || this.soilMoistureFiles.length === 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tfor (let file of this.soilMoistureFiles) {\r\n\t\t\t\tif (file.PlantingId === updatedSoilMoistureFile.plantingId) {\r\n\t\t\t\t\tfile.FileName = updatedSoilMoistureFile.fileName;\r\n\t\t\t\t\tfile.LastUpdateDate = DateUtility.getmmddyyyyString(new Date());\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis.sort.sortChange.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\twhile (this.paginator.hasPreviousPage()) {\r\n\t\t\t\tthis.paginator.previousPage();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic applyFilter(filterValue: string): void {\r\n\t\tif (!this.dataSource) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfilterValue = filterValue.trim();\r\n\t\tfilterValue = filterValue.toLowerCase();\r\n\t\tthis.dataSource.filter = filterValue;\r\n\t}\r\n\r\n\tpublic openSoilMoistureDialog(view: eSoilMoistureViews, plantingId: number,\r\n\t\tplantingName: string, fileName: string, hasSoilMoistureFileName: boolean): void {\r\n\r\n\t\tlet params: ISoilMoistureDialogParameters = {\r\n\t\t\tview: view,\r\n\t\t\tplantingId: plantingId,\r\n\t\t\tplantingName: plantingName\r\n\t\t}\r\n\r\n\t\tif (fileName !== null) {\r\n\t\t\tparams.fileName = fileName;\r\n\t\t}\r\n\r\n\t\tif (hasSoilMoistureFileName !== null) {\r\n\t\t\tparams.hasSoilMoistureFileName = hasSoilMoistureFileName;\r\n\t\t}\r\n\r\n\t\tthis.dialog.open(SoilMoistureDialog, {\r\n\t\t\twidth: '690px',\r\n\t\t\tdata: params\r\n\t\t});\r\n\t}\r\n\r\n\tpublic updateSoilMoistureData(plantingId: number, plantingName: string, fileName: string): void {\r\n\t\tthis.plantingBeingUpdated = {\r\n\t\t\tid: plantingId,\r\n\t\t\tname: plantingName\r\n\t\t};\r\n\t\tthis.soilMoistureUpdateError = null;\r\n\r\n\t\tthis.soilMoistureService.updateFile(plantingId, fileName)\r\n\t\t\t.then(response => {\r\n\t\t\t\tif (response && response.code) {\r\n\t\t\t\t\tthis.plantingBeingUpdated = {\r\n\t\t\t\t\t\tid: plantingId,\r\n\t\t\t\t\t\tname: plantingName\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tthis.soilMoistureUpdateError = response.code;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.updateService.setSoilMoistureFileUpdated(plantingId, fileName);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t}\r\n\r\n\tpublic clearSoilMoistureUpdateMessage(): void {\r\n\t\tthis.plantingBeingUpdated = null;\r\n\t\tthis.soilMoistureUpdateError = null;\r\n\t}\r\n}\r\n","import { ISoilMoistureDropdownItem, ISoilMoistureHeader, ISoilMoistureTab } from './soilMoisture.interface';\r\n\r\nexport class SoilMoisture {\r\n\tpublic static readonly SoilMoistureTabs: ISoilMoistureTab[] = [\r\n\t\t{\r\n\t\t\tname: 'Tension',\r\n\t\t\tvalues: ['kPa', 'cBar'],\r\n\t\t\tdisabled: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: 'Volumetric Moisture',\r\n\t\t\tvalues: ['%'],\r\n\t\t\tdisabled: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: 'Salinity/Electrical Conductivity',\r\n\t\t\tvalues: ['EC dS/m'],\r\n\t\t\tdisabled: true\r\n\t\t}\r\n\t]\r\n\r\n\tpublic readonly soilMoistureDepthDropdownItems: ISoilMoistureDropdownItem[] = [\r\n\t\t{\r\n\t\t\tname: '6 in.',\r\n\t\t\tvalue: '6 inches'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: '8 in.',\r\n\t\t\tvalue: '8 inches'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: '12 in.',\r\n\t\t\tvalue: '12 inches'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: '16 in.',\r\n\t\t\tvalue: '16 inches'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: '18 in.',\r\n\t\t\tvalue: '18 inches'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: '20 in.',\r\n\t\t\tvalue: '20 inches'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: '24 in.',\r\n\t\t\tvalue: '24 inches'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: '30 in.',\r\n\t\t\tvalue: '30 inches'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: '36 in.',\r\n\t\t\tvalue: '36 inches'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: '42 in.',\r\n\t\t\tvalue: '42 inches'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: '48 in.',\r\n\t\t\tvalue: '48 inches'\r\n\t\t}\r\n\t];\r\n\r\n\tpublic readonly SoilMoistureTypeDropdownItems: ISoilMoistureDropdownItem[] = [\r\n\t\t{\r\n\t\t\tname: 'Soil Moisture (%)',\r\n\t\t\tvalue: '%'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: 'Soil Tension (kPa)',\r\n\t\t\tvalue: 'kPa'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: 'Soil Tension (cBar)',\r\n\t\t\tvalue: 'cBar'\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: 'Salinity/Electrical Conductivity (dS/m)',\r\n\t\t\tvalue: 'EC dS/m'\r\n\t\t}\r\n\t];\r\n\r\n\tpublic static areNewHeaders(headers: ISoilMoistureHeader[]): boolean {\r\n\t\tfor (let header of headers) {\r\n\t\t\tif (!header.isDisplayed) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (header.SensorName || header.Depth || header.DataType) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic static getTabNameFromDataType(dataType: string): string {\r\n\t\tlet result: string;\r\n\r\n\t\tresult = this.SoilMoistureTabs.filter(x => x.values.indexOf(dataType) >= 0)[0].name;\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { CMError, httpStatusCodes } from '../../interfaces/interfaces';\r\nimport { SoilMoisture } from './soilMoisture';\r\nimport { ISoilMoistureGraphSeries, ISoilMoistureSeries, ISoilMoistureTab } from './soilMoisture.interface';\r\n\r\nexport class SoilMoistureSeriesConverter {\r\n\tprivate _seriesList: ISoilMoistureSeries[];\r\n\r\n\tpublic constructor(data: ISoilMoistureSeries[] | CMError) {\r\n\t\tlet error: CMError;\r\n\r\n\t\terror = data as CMError;\r\n\r\n\t\t// there is an error with the headers\r\n\t\tif (error && error.code && error.code === httpStatusCodes.continue) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._seriesList = data as ISoilMoistureSeries[];\r\n\t}\r\n\r\n\tpublic getGraphSeries(): ISoilMoistureGraphSeries[] {\r\n\t\tlet graphSeriesList: ISoilMoistureGraphSeries[] = new Array();\r\n\t\tlet graphSeries: ISoilMoistureGraphSeries;\r\n\t\tlet tabName: string;\r\n\r\n\t\tif (!this._seriesList || this._seriesList.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfor (let series of this._seriesList) {\r\n\t\t\tif (!series.Header) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\ttabName = SoilMoisture.getTabNameFromDataType(series.Header.DataType);\r\n\r\n\t\t\tif (!tabName) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tgraphSeries = graphSeriesList.filter(x => x.tabName === tabName)[0];\r\n\r\n\t\t\tif (graphSeries) {\r\n\t\t\t\tgraphSeries.seriesList.push(series);\r\n\t\t\t} else {\r\n\t\t\t\tgraphSeriesList.push({\r\n\t\t\t\t\ttabName: tabName,\r\n\t\t\t\t\tseriesList: new Array(series)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn graphSeriesList;\r\n\t}\r\n}\r\n","import * as Highcharts from 'highcharts';\r\nrequire('highcharts/modules/exporting')(Highcharts);\r\n\r\nimport { ISoilMoistureSeries, ISoilMoistureHeader } from './soilMoisture.interface';\r\nimport { IHighchartsData } from '../../interfaces/views/highCharts';\r\nimport { IRange } from '../../interfaces/interfaces';\r\n\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport highChartExportOptions from '../shared/highchartsExportOptions';\r\n\r\nexport class SoilSeriesCharts {\r\n\r\n\tpublic isLegendActive: Map<string, boolean>; // maintains visibility of series\r\n\r\n\tpublic static areNewHeaders(headers: ISoilMoistureHeader[]): boolean {\r\n\t\tfor (let header of headers) {\r\n\t\t\tif (!header.isDisplayed) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (header.SensorName || header.Depth || header.DataType) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tthis.isLegendActive = new Map<string, boolean>();\r\n\t}\r\n\r\n\t/**\r\n     *\r\n     * @param data\r\n     * @param graphRange\r\n     * @param dayRange\r\n     * @param index legend index, to show active or inactive\r\n     */\r\n\tpublic convertData(data: ISoilMoistureSeries, dayRange: number): IHighchartsData {\r\n\r\n\t\tlet date: Date;\r\n\t\tlet year: number;\r\n\t\tlet month: number;\r\n\t\tlet day: number;\r\n\t\tlet hours: number;\r\n\t\tlet minutes: number;\r\n\t\tlet utc: number;\r\n\t\tlet value: number;\r\n\t\t// highcharts data points are a 2 or 3 element array\r\n\t\tlet point: number[];\r\n\t\tlet points: number[][] = new Array();\r\n\t\tlet timeRange: number;\r\n\t\tlet mostRecentDate: number;\r\n\t\tlet result: IHighchartsData;\r\n\r\n\t\tif (!data || !data.Header || !data.Dates || data.Dates.length === 0\r\n\t\t\t|| !data.Values || data.Values.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.isLegendActive.get(data.Header.SensorName) === undefined) {\r\n\t\t\tthis.isLegendActive.set(data.Header.SensorName, true);\r\n\t\t}\r\n\r\n\t\tresult = {\r\n\t\t\tname: data.Header.SensorName,\r\n\t\t\tvisible: this.isLegendActive.get(data.Header.SensorName),\r\n\t\t\tdata: []\r\n\t\t};\r\n\r\n\t\tdate = DateUtility.DotNetToDate(data.Dates[data.Dates.length - 1]);\r\n\t\tyear = date.getFullYear();\r\n\t\tmonth = date.getMonth();\r\n\t\tday = date.getDate();\r\n\t\thours = date.getHours();\r\n\t\tminutes = date.getMinutes();\r\n\r\n\t\tmostRecentDate = Date.UTC(year, month, day, hours, minutes);\r\n\t\ttimeRange = dayRange * 24 * 60 * 60 * 1000;\r\n\r\n\t\tfor (let i = 0; i < data.Dates.length; i++) {\r\n\t\t\tdate = DateUtility.DotNetToDate(data.Dates[i]);\r\n\r\n\t\t\tyear = date.getFullYear();\r\n\t\t\tmonth = date.getMonth();\r\n\t\t\tday = date.getDate();\r\n\t\t\thours = date.getHours();\r\n\t\t\tminutes = date.getMinutes();\r\n\r\n\t\t\tutc = Date.UTC(year, month, day, hours, minutes);\r\n\t\t\tvalue = Number(data.Values[i]);\r\n\r\n\t\t\tif (timeRange === 0\r\n\t\t\t\t|| utc > mostRecentDate - timeRange) {\r\n\t\t\t\tpoint = new Array(utc, value);\r\n\t\t\t\tpoints.push(point);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult.data = points;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic generateHighchart(chartElement: HTMLElement, params: { data: IHighchartsData[], unit: string }): void {\r\n\t\tlet options: Highcharts.Options;\r\n\t\tlet range: IRange;\r\n\t\tlet chart: Highcharts.ChartObject;\r\n\t\tlet __this = this;\r\n\r\n\t\tif (!params || !params.data) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tchart: {\r\n\t\t\t\ttype: 'spline',\r\n\t\t\t\twidth: 950,\r\n\t\t\t\tzoomType: 'x'\r\n\t\t\t},\r\n\t\t\ttitle: {\r\n\t\t\t\ttext: null\r\n\t\t\t},\r\n\t\t\tlegend: {\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: 'Sensor'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\txAxis: {\r\n\t\t\t\ttype: 'datetime',\r\n\t\t\t\tdateTimeLabelFormats: {\r\n\t\t\t\t\t// hour: '%H:%M %b %e',\r\n\t\t\t\t\tday: '%b %e %Y',\r\n\t\t\t\t\tweek: '%b %e %Y',\r\n\t\t\t\t\tmonth: '%b %Y'\r\n\t\t\t\t},\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: 'Date'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tyAxis: {\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: params.unit\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\ttooltip: {\r\n\t\t\t\tcrosshairs: true,\r\n\t\t\t\tshared: true,\r\n\t\t\t\tdateTimeLabelFormats: {\r\n\t\t\t\t\t// hour: '%b %e %Y',\r\n\t\t\t\t\thour: '%H:%M %b %e %Y',\r\n\t\t\t\t\tday: '%b %e %Y',\r\n\t\t\t\t\tweek: '%b %e %Y',\r\n\t\t\t\t\tmonth: '%b %Y'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tplotOptions: {\r\n\t\t\t\tseries: {\r\n\t\t\t\t\tevents: {\r\n\t\t\t\t\t\tlegendItemClick: function () {\r\n\t\t\t\t\t\t\t__this.isLegendActive.set(params.data[this.index].name,\r\n\t\t\t\t\t\t\t\tthis.visible ? false : true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tseries: params.data,\r\n\t\t\texporting: highChartExportOptions\r\n\t\t}\r\n\r\n\t\tchart = Highcharts.chart(chartElement, options);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n    <button type=\"button\"\r\n        class=\"bk-button bk-dialog__close\"\r\n        (click)=\"close()\">\r\n        &times;\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>\r\n        <ng-container *ngIf=\"!eventId\">\r\n            {{'Add' | translate }} {{'Soil Sample' | translate }}\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"eventId\">\r\n            {{'Edit' | translate }} {{'Soil Sample' | translate }}\r\n        </ng-container>\r\n    </h4>\r\n\r\n    <div mat-dialog-content\r\n        *ngIf=\"isLoaded === false\">\r\n\r\n        <div class=\"bk-loader__container\">\r\n            <div class=\"bk-loader\">\r\n                {{'Loading' | translate }}...\r\n            </div>\r\n        </div>\r\n    </div>\r\n\r\n    <div mat-dialog-content\r\n        *ngIf=\"isLoaded\">\r\n        <form [formGroup]=\"form\">\r\n            <mat-form-field appearance=\"fill\"\r\n                class='mat-form-field--one-line mat-form-field--short'>\r\n                <mat-label>{{ 'Event Date' | translate }}</mat-label>\r\n                <input matInput [matDatepicker]=\"picker\"\r\n                    required\r\n                    formControlName=\"EventDate\"\r\n                    [max]=\"maxDate\">\r\n                <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n                <mat-datepicker #picker></mat-datepicker>\r\n                <mat-error *ngIf=\"f.EventDate.invalid && (f.EventDate.dirty ||\r\n                    f.EventDate.touched)\">\r\n                    <div *ngIf=\"f.EventDate.errors.required\">\r\n                        {{ 'Event date is required' | translate }}\r\n                    </div>\r\n                    <div *ngIf=\"f.EventDate.errors.endDateOnOrAfterTargetDate\">\r\n                        {{ 'Event date must be earlier than planting end date' | translate }}\r\n                    </div>\r\n                </mat-error>\r\n            </mat-form-field>\r\n            <mat-form-field appearance=\"fill\" *ngIf=\"f.isNDependent.value\"\r\n                class=\"mat-form-field--one-line mat-form-field--short\">\r\n                <mat-label>\r\n                    {{'Sample Type' | translate }}\r\n                </mat-label>\r\n                <mat-select\r\n                    required\r\n                    formControlName=\"SampleTypeId\">\r\n                    <mat-option [value]=\"null\" disabled selected>\r\n                        {{'Select One' | translate }}\r\n                    </mat-option>\r\n                    <mat-option *ngFor=\"let type of sampleTypes\"\r\n                        [value]=\"type.key\">\r\n                        {{type.value | translate }}\r\n                    </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"f.SampleTypeId.invalid && (f.SampleTypeId.dirty ||\r\n                    f.SampleTypeId.touched)\">\r\n                    {{'Cannot be empty. Please select an option.' | translate }}\r\n                </mat-error>\r\n            </mat-form-field>\r\n\r\n            <mat-form-field appearance=\"fill\"\r\n                class=\"mat-form-field--one-line mat-form-field--short\">\r\n                <mat-label>\r\n                    {{'Depth' | translate }}\r\n                </mat-label>\r\n                <mat-select\r\n                    required\r\n                    formControlName=\"SampleDepth\">\r\n                    <mat-option [value]=\"null\" disabled selected>\r\n                        {{'Select One' | translate }}\r\n                    </mat-option>\r\n                    <mat-option [value]=\"DEPTHS.FEET_ONE\">\r\n                        0 to 1 {{'ft' | translate }}\r\n                    </mat-option>\r\n                        <mat-option [value]=\"DEPTHS.FEET_TWO\">\r\n                        1 to 2 {{'ft' | translate }}\r\n                    </mat-option>\r\n                    \r\n                </mat-select>\r\n                <mat-error *ngIf=\"f.SampleDepth.invalid && (f.SampleDepth.dirty ||\r\n                    f.SampleDepth.touched)\">\r\n                    {{'Cannot be empty. Please select an option.' | translate }}\r\n                </mat-error>\r\n            </mat-form-field>\r\n\r\n            <mat-form-field appearance=\"fill\"\r\n                class=\"mat-form-field--one-line mat-form-field--short\">\r\n                <mat-label>\r\n                    {{'Crop Stage' | translate }}\r\n                </mat-label>\r\n                <mat-select formControlName=\"CropStageId\">\r\n                    <mat-option [value]=\"0\" selected>\r\n                        {{'Select One' | translate }}\r\n                    </mat-option>\r\n                    <mat-option *ngFor=\"let stage of cropStages\"\r\n                        [value]=\"stage.Value\">\r\n                        {{stage.Text | translate }}\r\n                    </mat-option>\r\n                </mat-select>\r\n            </mat-form-field>\r\n\r\n            <ng-container *ngIf=\"!f.isFuture.value &&\r\n                f.SampleTypeId.value === SAMPLE_TYPE_QUICK_NITRATE_STRIP\">\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Soil Moisture' | translate }}\r\n                </label>\r\n\r\n                <div class=\"bk-modal__field bk-modal__field--anchor\">\r\n                    <mat-radio-group aria-label=\"\"\r\n                        name=\"soilMoisture\"\r\n                        formControlName=\"SoilMoistureId\">\r\n\r\n                        <mat-radio-button *ngFor=\"let type of moistureTypes\"\r\n                            [ngClass]=\"{ 'mat-radio-button--left-margin': type.key === 2  }\"\r\n                            [value]=\"type.key\"\r\n                            name=\"soilMoisture\">\r\n                            {{type.value}}\r\n                        </mat-radio-button>\r\n                    </mat-radio-group>\r\n                </div>\r\n            </ng-container>\r\n\r\n            <!--old form - crops that are n dependent-->\r\n            <div *ngIf=\"!f.isFuture.value &&\r\n                f.SampleTypeId.value > 0\r\n                && f.isNDependent.value\">\r\n                <mat-form-field appearance=\"fill\"\r\n                    class='mat-form-field--one-line mat-form-field--short'>\r\n                        <mat-label *ngIf=\"f.SampleTypeId.value === SAMPLE_TYPE_LAB_TEST\">\r\n                            {{ 'Nitrate-N' | translate }}\r\n                    </mat-label>\r\n                        <mat-label *ngIf=\"f.SampleTypeId.value !== SAMPLE_TYPE_LAB_TEST\">\r\n                            {{ 'Nitrate' | translate }}\r\n                        </mat-label>\r\n                    <input matInput \r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        required\r\n                        formControlName=\"Nitrogen\"/>\r\n                    <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                        {{'ppm' | translate}}\r\n                    </span>\r\n                    <mat-error *ngIf=\"f.Nitrogen.invalid && (f.Nitrogen.dirty ||\r\n                        f.Nitrogen.touched)\">\r\n            \r\n                        <span *ngIf=\"f.Nitrogen.errors.min || f.Nitrogen.errors.max\">\r\n                            {{'Not a valid number' | translate }}\r\n                        </span>\r\n                        <span *ngIf=\"f.Nitrogen.errors.invalidNitrogen\">\r\n                            {{'This field is required' | translate }}\r\n                        </span>\r\n                    </mat-error>\r\n                </mat-form-field>\r\n\r\n                <ng-container *ngIf=\"f.OtherNutrients.controls.length > 0 &&\r\n                    f.SampleTypeId.value === SAMPLE_TYPE_LAB_TEST\">\r\n                    <div class=\"bk-modal__right-two-col\"\r\n                        *ngFor=\"let nutrient of f.OtherNutrients.controls;\r\n                        let i = index;\">\r\n\r\n                        <mat-form-field appearance=\"fill\"\r\n                            class='mat-form-field--one-line mat-form-field--short'>\r\n                            <mat-label>\r\n                                {{nutrient.get('Name').value}}\r\n                            </mat-label>\r\n                            <input matInput \r\n                                type=\"number\"\r\n                                step=\"0.01\"\r\n                                [formControl]=\"nutrient.get('value')\"/>\r\n                            <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                                {{nutrient.get('MeasurementUnitName').value}}\r\n                            </span>\r\n                        </mat-form-field>\r\n                    </div>\r\n                </ng-container>\r\n            </div>\r\n\r\n            <div *ngIf=\"!f.isFuture.value && !f.isNDependent.value\"\r\n                class=\"bk-modal__soil-samples--dark\">\r\n                <h4 class=\"bk-modal__header-title\">\r\n                    {{ 'Sample Readings' | translate }}\r\n                </h4>\r\n\r\n                <ng-container *ngIf=\"f.OtherNutrients.controls.length > 0\">\r\n                    <div class=\"bk-modal__right-two-col\"\r\n                        *ngFor=\"let nutrient of f.OtherNutrients.controls;\r\n                            let i = index;\">\r\n\r\n                        <mat-form-field appearance=\"fill\"\r\n                            class='mat-form-field--one-line mat-form-field--short'>\r\n                            <mat-label>\r\n                                {{nutrient.get('Name').value | translate}}\r\n                            </mat-label>\r\n                            <input matInput \r\n                                type=\"number\"\r\n                                step=\"0.01\"\r\n                                [formControl]=\"nutrient.get('value')\"/>\r\n                            <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                                {{nutrient.get('MeasurementUnitName').value}}\r\n                            </span>\r\n                        </mat-form-field>\r\n                    </div>\r\n                </ng-container>\r\n\r\n                <div class=\"bk-modal__right-two-col\">\r\n                    <mat-form-field appearance=\"fill\"\r\n                        class='mat-form-field--one-line mat-form-field--short'>\r\n                        <mat-label>\r\n                            {{ 'Nitrate-N' | translate}}\r\n                        </mat-label>\r\n                        <input matInput \r\n                            type=\"number\"\r\n                            step=\"0.01\"\r\n                            formControlName=\"Nitrogen\"/>\r\n                        <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                            {{'ppm' | translate}}\r\n                        </span>\r\n                    </mat-form-field>\r\n                </div>\r\n            </div>\r\n\r\n            <span *ngIf='eventId > 0'\r\n                class='bk-modal__last-updated-meta bk-clearfix'>\r\n                {{ 'Last updated by' | translate }} {{lastUpdatedUser}}\r\n            </span>\r\n        </form>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n        <button class=\"bk-button__delete\"\r\n            *ngIf=\"eventId\"\r\n            (click)=\"onDeleteConfirmationOpen($event)\">\r\n            \r\n            {{'Delete' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"onClose()\">\r\n            {{'Cancel' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            *ngIf=\"!eventId\"\r\n            [disabled]=\"form && form.invalid\"\r\n            (click)=\"create()\">\r\n            \r\n            {{ (isSaving ? 'Creating' : 'Create') | translate }}\r\n            <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            *ngIf=\"eventId\"\r\n            [disabled]=\"form && form.invalid\"\r\n            (click)=\"update()\">\r\n\r\n            {{ (isSaving ? 'Saving' : 'Save') | translate }}\r\n            <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n        </button>\r\n    </div>\r\n</div>\r\n","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { SoilSampleEventService } from './service';\r\nimport * as moment from 'moment';\r\n\r\nimport { SoilSampleEvent } from './soilSampleEvent';\r\n\r\nimport { IEventGroup, IEventPostResponseJSON } from '../../models/event/interfaces';\r\nimport { IPlanting } from '../planting-settings/interfaces';\r\nimport { eNotificationTypes, eSampleTypeIds, EventsType } from '../../interfaces/constants';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { IFormNutrient } from '../../models/nutrient/interfaces';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { FormGroup, AbstractControl, FormBuilder, FormArray, Validators, ValidatorFn } from '@angular/forms';\r\nimport { IFormCropStage } from '../../models/crop-stage/interfaces';\r\nimport { ISelectOptions } from '../../interfaces/abstract';\r\nimport { FormValidation } from '../../classes/formValidation';\r\nimport { BaseDialog } from '../shared/dialogs/base-dialog';\r\nimport { SharedUpdateService } from '../shared/dialogs/update.service';\r\nimport { SoilSampleWarningDialog } from './warning';\r\nimport { PlantingRecalculatorService } from '../planting-recalculate-modal/plantingRecalculatorService';\r\nimport { NotificationService } from '../../services/notification.service';\r\n\r\nexport type SoilSampleDialogFields = 'EventDate' | 'SampleTypeId' |\r\n\t'SampleDepth' | 'CropStageId' | 'SoilMoistureId' | 'Nitrogen' |\r\n\t'OtherNutrients';\r\n\r\nexport interface SoilSampleDialogForm {\r\n\tId: number,\r\n\tEventDate: Date,\r\n\tSampleTypeId: number,\r\n\tSampleDepth: number,\r\n\tCropStageId: number,\r\n\tSoilMoistureId: number,\r\n\tNitrogen: number,\r\n\tOtherNutrients: OtherNutrientsForm[],\r\n\tisFuture: boolean,\r\n\tisNDependent: boolean,\r\n}\r\n\r\nexport interface OtherNutrientsForm {\r\n\tId: number,\r\n\tName: string,\r\n\tvalue: number,\r\n\tMeasurementUnitName: string,\r\n}\r\n\r\nexport enum eSoilMoistures {\r\n\tDRY = 1,\r\n\tMOIST = 2\r\n}\r\n\r\nexport enum eSoilSampleDepths {\r\n\tFEET_ONE = 1,\r\n\tFEET_TWO = 2\r\n}\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'soil-sample-event',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: [ 'main.scss']\r\n})\r\n\r\nexport class SoilSampleEventDialog extends BaseDialog implements OnInit, OnDestroy {\r\n\r\n\tpublic affectedEvents: IEventGroup[] = new Array();\r\n\tpublic cropStages: IFormCropStage[];\r\n\tpublic eventId: number;\r\n\tpublic form: FormGroupTyped<SoilSampleDialogForm>;\r\n\tpublic isSaving = false; // used to display a spinner in the save button\r\n\tpublic isLoaded = false;\r\n\tpublic lastUpdatedUser: string;\r\n\tpublic maxDate: Date; // maximum valid date for EventDate\r\n\tpublic moistureTypes: ISelectOptions[];\r\n\tpublic otherNutrients: IFormNutrient[];\r\n\tpublic readonly SAMPLE_TYPE_LAB_TEST = 2;\r\n\tpublic readonly SAMPLE_TYPE_QUICK_NITRATE_STRIP = 1;\r\n\tpublic sampleTypes: ISelectOptions[];\r\n\tpublic DEPTHS = eSoilSampleDepths;\r\n\r\n\tprivate _allEvents: IEventGroup[] = new Array();\r\n\tprivate _dateDefault: Date; // used for Calendar UI\r\n\tprivate _harvestDate: Date;\r\n\tprivate _originalEventDate: Date;\r\n\tprivate _plantingId: number = null;\r\n\r\n\tpublic get f(): { [key in SoilSampleDialogFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in SoilSampleDialogFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { plantingId: number, id?: number, dateDefault?: Date },\r\n\t\tprivate dialog: MatDialog,\r\n\t\tprivate dialogRef: MatDialogRef<SoilSampleEventDialog>,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _plantingRecalculatorService: PlantingRecalculatorService,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _soilSampleEventService: SoilSampleEventService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate sharedUpdateService: SharedUpdateService\r\n\t) {\r\n\r\n\t\tsuper(dialog, dialogRef, sharedUpdateService);\r\n\r\n\t\tif (this._data) {\r\n\t\t\tthis.eventId = this._data.id;\r\n\t\t\tthis._plantingId = this._data.plantingId;\r\n\t\t\tthis._dateDefault = this._data.dateDefault;\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.clear();\r\n\r\n\t\tif (this.eventId) {\r\n\t\t\tthis._getEditModel(this.eventId);\r\n\t\t} else {\r\n\t\t\tthis._getCreateModel();\r\n\t\t}\r\n\r\n\t\tsuper.ngOnInit();\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tprivate clear(): void {\r\n\t\tthis.affectedEvents = new Array();\r\n\t\tthis._allEvents = new Array();\r\n\t}\r\n\r\n\tprivate _configureDeleteConfirmationText(): void {\r\n\r\n\t\tif (this.f.EventDate.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._deleteConfirmationData = {\r\n\t\t\tobjectName: 'Soil Sample Event',\r\n\t\t\tspecificName: null,\r\n\t\t\tadditionalMessage: 'Are you sure you want to delete this soil sample event dated '\r\n\t\t\t\t+ (this.f.EventDate.value as Date).toDateString() + '?'\r\n\t\t};\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis._updateService.setEventDialogClosed(); // tell event table to re-display\r\n\t\tsuper.close();\r\n\t}\r\n\r\n\tpublic create(): void {\r\n\t\tlet event: SoilSampleEvent;\r\n\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tevent = this._getModelFromForm();\r\n\r\n\t\tthis._truncateNutrientValues();\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._soilSampleEventService.create(this._plantingId, event)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t\tthis.close();\r\n\t\t\t\tthis._plantingRecalculatorService.recalculate(this._plantingId, false, true);\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._soilSampleEventService.delete(this.eventId)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\r\n\t\t\t\tthis._checkEventsAffected();\r\n\t\t\t\tthis.sharedUpdateService.deleteComplete();\r\n\t\t\t\tthis._updateService.setEventDialogClosed();\r\n\t\t\t\tthis._plantingRecalculatorService.recalculate(this._plantingId, false, true);\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic update(): void {\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._truncateNutrientValues();\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._soilSampleEventService.update(this.eventId,\r\n\t\t\tthis._getModelFromForm())\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\r\n\t\t\t\tthis._plantingRecalculatorService.recalculate(this._plantingId, false, true);\r\n\t\t\t\tthis._checkEventsAffected();\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _checkEventsAffected(): void {\r\n\r\n\t\tlet planting: IPlanting;\r\n\t\tlet events: IEventGroup[];\r\n\t\tlet eventDate: Date;\r\n\r\n\t\tplanting = this._ranchService.plantings.getPlantingById(this._plantingId);\r\n\t\tevents = planting.Events;\r\n\r\n\t\teventDate = this.f.EventDate.value;\r\n\r\n\t\tif (eventDate === null) {\r\n\t\t\tthis.close();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\teventDate.setHours(0, 0, 0, 0);\r\n\r\n\t\tthis._allEvents = events.sort(function (a, b) { return new Date(a.EventDate).getTime() - new Date(b.EventDate).getTime(); })\r\n\r\n\t\tthis.affectedEvents = new Array();\r\n\r\n\t\tfor (let event of this._allEvents) {\r\n\r\n\t\t\tif (event.Fertilization != null && event.Fertilization.length > 0\r\n\t\t\t\t&& event.Fertilization[0].SoilSampleEventDate\r\n\t\t\t\t&& event.Fertilization[0].SoilSampleEventDate.getTime() === eventDate.getTime()\r\n\t\t\t) {\r\n\t\t\t\tthis.affectedEvents.push(event);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.affectedEvents.length > 0) {\r\n\t\t\tthis.close();\r\n\r\n\t\t\tthis.dialog.open(SoilSampleWarningDialog, {\r\n\t\t\t\tdisableClose: true,\r\n\t\t\t\tdata: {\r\n\t\t\t\t\taffectedEvents: this.affectedEvents\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.close()\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _createNutrientFormArray(nutrients: IFormNutrient[]): void {\r\n\r\n\t\tfor (let nutrient of nutrients) {\r\n\t\t\tlet g: FormGroup;\r\n\r\n\t\t\tg = this._fb.group({\r\n\t\t\t\tId: [nutrient.Id],\r\n\t\t\t\tvalue: [nutrient.value, [Validators.min(0), Validators.max(99999999)]],\r\n\t\t\t\tName: [nutrient.Name],\r\n\t\t\t\tMeasurementUnitName: [nutrient.MeasurementUnit.Name]\r\n\t\t\t});\r\n\r\n\t\t\t(this.form.get('OtherNutrients') as FormArrayTyped<OtherNutrientsForm>).push(g);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getCreateModel(): void {\r\n\t\tthis._soilSampleEventService.getCreateModel(this._plantingId)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\t\tmessage: `Server didn't respond. Please try again.`\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this._dateDefault) {\r\n\t\t\t\t\tres.EventDate = this._dateDefault;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tres.EventDate = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tres.SampleDepth = null;\r\n\t\t\t\tthis._loadFormFromModel(res);\r\n\t\t\t\tthis.isLoaded = true;\r\n\t\t\t\tthis._configureDeleteConfirmationText();\r\n\t\t\t\t// Modal.resize();\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _getEditModel(id: number): Promise<boolean> {\r\n\t\treturn this._soilSampleEventService.getEditModel(id)\r\n\t\t.then(res => {\r\n\t\t\tif (!res) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._loadFormFromModel(res);\r\n\t\t\tthis.form.markAsDirty();\r\n\t\t\tthis._originalEventDate = res.EventDate;\r\n\t\t\tthis.isLoaded = true;\r\n\t\t\tthis._configureDeleteConfirmationText();\r\n\t\t\t// Modal.resize();\r\n\t\t\treturn true;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getModelFromForm(): SoilSampleEvent {\r\n\t\tlet event: SoilSampleEvent;\r\n\t\tevent = new SoilSampleEvent(this.form.get('EventDate').value);\r\n\t\tevent.CropStageId = this.form.get('CropStageId').value;\r\n\t\tevent.SoilMoistureId = this.form.get('SoilMoistureId').value;\r\n\t\tevent.SampleDepth = this.form.get('SampleDepth').value;\r\n\t\tevent.SampleTypeId = this.form.get('SampleTypeId').value;\r\n\r\n\t\tevent.Nitrogen = {\r\n\t\t\tId: 1,\r\n\t\t\tNutrientId: 1,\r\n\t\t\tValue: this.form.get('Nitrogen').value\r\n\t\t};\r\n\r\n\t\t// update model\r\n\t\tfor (let control of (this.form.get('OtherNutrients') as FormArrayTyped<OtherNutrientsForm>).controls) {\r\n\t\t\tlet nutrient: IFormNutrient;\r\n\t\t\tlet fg: FormGroupTyped<OtherNutrientsForm>;\r\n\r\n\t\t\tfg = control as FormGroupTyped<OtherNutrientsForm>;\r\n\r\n\t\t\tnutrient = this.otherNutrients.find(x => x.Id ===\r\n\t\t\t\tfg.get('Id').value);\r\n\r\n\t\t\tnutrient.value = fg.get('value').value;\r\n\t\t}\r\n\r\n\t\tevent.OtherNutrients = this.otherNutrients;\r\n\r\n\t\treturn event;\r\n\t}\r\n\r\n\tprivate _initializeForm(model: SoilSampleEvent): void {\r\n\t\tlet isNDependent: boolean;\r\n\r\n\t\tif (!model) {\r\n\t\t\tthrow new Error('soil sample event is empty');\r\n\t\t}\r\n\r\n\t\tisNDependent = this._ranchService.getIsNDependent(this._plantingId);\r\n\r\n\t\tif (model.SampleTypeId === 0) {\r\n\t\t\tmodel.SampleTypeId = null;\r\n\t\t}\r\n\r\n\t\tif (!isNDependent) {\r\n\t\t\tmodel.SampleTypeId = eSampleTypeIds.LAB_TEST;\r\n\t\t}\r\n\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tId: [ model.Id],\r\n\t\t\tEventDate: [model.EventDate ? model.EventDate : null,\r\n\t\t\t\t[Validators.required,\r\n\t\t\t\tFormValidation.maxDateValidator(DateUtility.DotNetToDate(model.EndDate))]],\r\n\t\t\tSampleTypeId: [model.SampleTypeId],\r\n\t\t\tSampleDepth: [model.SampleDepth, [Validators.required, Validators.min(1), Validators.max(2)]],\r\n\t\t\tCropStageId: [model.CropStageId], // optional\r\n\t\t\tSoilMoistureId: [model.SoilMoistureId ? model.SoilMoistureId : eSoilMoistures.MOIST],\r\n\t\t\t\t// we need a value if quick nittrate strip\r\n\t\t\tNitrogen: [model.Nitrogen.Value],\r\n\t\t\tOtherNutrients: this._fb.array([]),\r\n\t\t\tisFuture: [null],\r\n\t\t\tisNDependent: [isNDependent],\r\n\t\t}, { validator: this._validateGroup }) as FormGroupTyped<SoilSampleDialogForm>;\r\n\r\n\t\tthis.form.get('isFuture').setValue(DateUtility.isFuture(this.form.get('EventDate').value));\r\n\t\tthis.form.get('SampleTypeId').setValidators(this._sampleTypeValidator(isNDependent));\r\n\t\tthis.f.Nitrogen.setValidators([\r\n\t\t\t// required if event date is today or past\r\n\t\t\tValidators.min(0),\r\n\t\t\tValidators.max(99999999),\r\n\t\t]);\r\n\r\n\t\tthis._createNutrientFormArray(model.OtherNutrients.sort((a, b) => { return a.Name.localeCompare(b.Name); }));\r\n\r\n\t\tthis.f.EventDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.form.get('isFuture').setValue(DateUtility.isFuture(this.form.get('EventDate').value));\r\n\t\t\tthis._configureDeleteConfirmationText(); // reconfigure delete confirmation text\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _loadFormFromModel(model: SoilSampleEvent): void {\r\n\t\tif (!model) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._initializeForm(model);\r\n\r\n\t\tthis.otherNutrients = model.OtherNutrients;\r\n\t\tthis.cropStages = model.CropStages;\r\n\t\tthis.sampleTypes = model.SampleTypes;\r\n\t\tthis._harvestDate = DateUtility.DotNetToDate(model.EndDate);\r\n\t\tthis.lastUpdatedUser = model.LastUpdatedUser;\r\n\t\tthis.moistureTypes = model.MoistureTypes;\r\n\r\n\t\tthis.maxDate = moment(this._harvestDate).subtract(1, 'days').toDate();\r\n\t}\r\n\r\n\tprivate _sampleTypeValidator(isNDependent: boolean): ValidatorFn {\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\t\t\tlet error: { requiredIfNDependent: { value: number }};\r\n\r\n\t\t\terror = {\r\n\t\t\t\trequiredIfNDependent: { value: control.value }\r\n\t\t\t};\r\n\r\n\t\t\tif (isNDependent) {\r\n\t\t\t\tvalid = control.value > 0;\r\n\t\t\t} else {\r\n\t\t\t\tvalid = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : error;\r\n\t\t};\r\n\t}\r\n\r\n\t// only save 2 decimal places\r\n\tprivate _truncateNutrientValues(): void {\r\n\t\tthis.form.get('Nitrogen').setValue(ValidateService.truncateDecimals(this.form.get('Nitrogen').value, 2));\r\n\r\n\t\tfor (let nutrient of (this.form.get('OtherNutrients') as FormArray).controls) {\r\n\t\t\tlet group: FormGroupTyped<OtherNutrientsForm>;\r\n\r\n\t\t\tgroup = nutrient as FormGroupTyped<OtherNutrientsForm>;\r\n\t\t\tgroup.get('value').setValue(ValidateService.truncateDecimals(group.get('value').value, 2));\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _validateGroup(g: FormGroupTyped<SoilSampleDialogForm>): void {\r\n\t\tlet isFuture: AbstractControlTyped<boolean> = g.get('isFuture');\r\n\t\tlet nitrogen: AbstractControlTyped<number> = g.get('Nitrogen');\r\n\t\tlet isNDependent: AbstractControlTyped<boolean> = g.get('isNDependent');\r\n\t\tlet error: { invalidNitrogen: boolean } = { invalidNitrogen: true };\r\n\t\tconst errorString = 'invalidNitrogen';\r\n\r\n\t\tif (isFuture.value) {\r\n\t\t\tFormValidation.removeErrorFromContrl(nitrogen, errorString);\r\n\t\t} else if (nitrogen.value !== null) {\r\n\t\t\tFormValidation.removeErrorFromContrl(nitrogen, errorString);\r\n\t\t} else if (isNDependent.value) {\r\n\t\t\tnitrogen.setErrors(error);\r\n\t\t}\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { ModelService } from '../../services/model.service';\r\n\r\nimport { ISoilSampleEventForm, IFormSoilSample, ISoilSampleEventService, ISoilSampleSimple, SoilSampleJSONModel } from './interfaces';\r\nimport { IEventPostResponseJSON } from '../../models/event/interfaces';\r\n\r\nimport { SoilSampleEvent } from './soilSampleEvent';\r\nimport { SoilSampleEventDropdownModel } from '../fertilization-event/interfaces';\r\nimport { of } from 'rxjs';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { CMError, httpStatusCodes } from '../../interfaces/interfaces';\r\nimport { EventResponse } from '../../models/event/eventResponse';\r\n\r\n@Injectable()\r\nexport class SoilSampleEventService extends ModelService implements ISoilSampleEventService {\r\n\r\n\tprivate urls = {\r\n\t\tcreateForm: (plantingId: number) => `/v2/plantings/${plantingId}/soil-sample-events/form.json`,\r\n\t\tcreate: (plantingId: number) => `/v2/plantings/${plantingId}/soil-sample-events.json`,\r\n\t\tshow: (id: number) => `/v2/soil-sample-events/${id}.json`,\r\n\t\tupdate: (id: number) => `/v2/soil-sample-events/${id}.json`,\r\n\t\tdelete: (id: number) => `/v2/soil-sample-events/${id}.json`,\r\n\t\tgetForPlanting: (plantingId: number) => `/v2/plantings/${plantingId}/soil-sample-events.json`,\r\n\t};\r\n\r\n\tpublic getCreateModel(plantingId: number): Promise<SoilSampleEvent> {\r\n\r\n\t\tif (!plantingId) {\r\n\t\t\tthrow new Error(`SoilSampleEventService: getAddSoilSampleEventData()\r\n\t\t\t\t- plantingId is empty`);\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.createForm(plantingId), (data: SoilSampleJSONModel): SoilSampleEvent => {\r\n\t\t\tlet soilSampleEvent: SoilSampleEvent = new SoilSampleEvent();\r\n\r\n\t\t\tif (!data) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tsoilSampleEvent.convertSoilSampleJSONModel(data);\r\n\r\n\t\t\treturn soilSampleEvent;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getEditModel(id: number): Promise<SoilSampleEvent> {\r\n\r\n\t\treturn this.get(this.urls.show(id), (data: SoilSampleJSONModel): SoilSampleEvent => {\r\n\t\t\tlet soilSampleEvent: SoilSampleEvent;\r\n\r\n\t\t\tsoilSampleEvent = new SoilSampleEvent();\r\n\r\n\t\t\tif (!data) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tsoilSampleEvent.convertSoilSampleJSONModel(data);\r\n\r\n\t\t\treturn soilSampleEvent;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Alternative to create() using form data\r\n\t * @param plantingId\r\n\t * @param form\r\n\t */\r\n\tpublic createForFertilizationEvent(plantingId: number, form: ISoilSampleSimple): Promise<IEventPostResponseJSON> {\r\n\t\tlet params: ISoilSampleEventForm;\r\n\r\n\t\tparams = SoilSampleEvent.extractFromReactiveForm(form);\r\n\t\tparams.EventDate = DateUtility.ConvertToUTC(params.EventDate as Date);\r\n\r\n\t\treturn this.post(this.urls.create(plantingId), (data: IEventPostResponseJSON): IEventPostResponseJSON => {\r\n\t\t\treturn data;\r\n\t\t}, params);\r\n\t}\r\n\r\n\tpublic create(plantingId: number, event: SoilSampleEvent): Promise<IEventPostResponseJSON> {\r\n\t\tlet params: ISoilSampleEventForm;\r\n\r\n\t\tparams =  event.getForm();\r\n\r\n\t\tparams.EventDate = DateUtility.ConvertToUTC(params.EventDate as Date);\r\n\r\n\t\treturn this.post(this.urls.create(plantingId), (data: IEventPostResponseJSON): IEventPostResponseJSON => {\r\n\t\t\treturn data;\r\n\t\t}, params);\r\n\t}\r\n\r\n\tpublic update(id: number, sample: SoilSampleEvent): Promise<EventResponse> {\r\n\t\tlet params: ISoilSampleEventForm = sample.getForm();\r\n\r\n\t\tparams.EventDate = DateUtility.ConvertToUTC(params.EventDate as Date);\r\n\r\n\t\treturn this.put(this.urls.update(id), (data: IEventPostResponseJSON | CMError): EventResponse => {\r\n\t\t\tlet jsonResponse: CMError;\r\n\t\t\tlet result: EventResponse;\r\n\r\n\t\t\tif (!data) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tjsonResponse = data as CMError;\r\n\t\t\tresult = new EventResponse(data as IEventPostResponseJSON);\r\n\r\n\t\t\tif (jsonResponse.code && jsonResponse.code !== httpStatusCodes.success) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}, params);\r\n\t}\r\n\r\n\tpublic delete(id: number): Promise<IEventPostResponseJSON> {\r\n\r\n\t\treturn this.deleteItem(this.urls.delete(id), (data: IEventPostResponseJSON): IEventPostResponseJSON => {\r\n\t\t\treturn data;\r\n\t\t}, null);\r\n\t}\r\n\r\n\t/**\r\n\t * REFACTOR: Belongs in soil sample service\r\n\t * @param plantingId\r\n\t */\r\n\tpublic getListForPlanting(plantingId: number): Promise<IFormSoilSample[]> { // this should not be a string\r\n\r\n\t\tif (!plantingId) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.getForPlanting(plantingId), (soilSamples: SoilSampleEventDropdownModel[]): IFormSoilSample[] => {\r\n\t\t\tif (!soilSamples || soilSamples.length === 0) {\r\n\t\t\t\treturn new Array();\r\n\t\t\t}\r\n\r\n\t\t\tlet result: IFormSoilSample[];\r\n\r\n\t\t\tresult = new Array();\r\n\r\n\t\t\tfor (let soilSample of soilSamples) {\r\n\r\n\t\t\t\tresult.push({\r\n\t\t\t\t\tId: soilSample.Id,\r\n\t\t\t\t\tName: soilSample.Name,\r\n\t\t\t\t\tDate: DateUtility.DotNetToDate(soilSample.Date)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n}\r\n","import { ICropStage, IFormCropStage } from '../../models/crop-stage/interfaces';\r\nimport { INutrient, IFormNutrient } from '../../models/nutrient/interfaces';\r\nimport { IRawSoilSample, ISoilSampleEventForm, IFormNitrogen, ISoilSampleSimple, SoilSampleJSONModel } from './interfaces';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { ISelectOptions } from '../../interfaces/abstract';\r\nimport { eNutrientTypes } from '../tissue-sample-event/interfaces';\r\n\r\nexport class SoilSampleEvent {\r\n\tpublic CropStage: ICropStage;\r\n\tpublic Depth: number;\r\n\tpublic Id: number;\r\n\tpublic LastUpdatedUser: string;\r\n\tpublic Nutrients: INutrient[];\r\n\tpublic SampleType: string;\r\n\r\n\tpublic SoilMineralNLbsAcre: number;\r\n\tpublic SoilNitrateNPPM: number;\r\n\tpublic Metainfo: string;\r\n\r\n\t// raw model properties from combined events list\r\n\tpublic ShowDetails: boolean;\r\n\r\n\t// soil sample event form properties\r\n\tpublic EventDate: Date;\r\n\tpublic CropStageId: number;\r\n\tpublic CropStageName: string;\r\n\tpublic CropStages: IFormCropStage[];\r\n\tpublic SoilMoistureId: number;\r\n\tpublic MoistureTypes: ISelectOptions[];\r\n\tpublic OtherNutrients: IFormNutrient[];\r\n\tpublic SampleDepth: number;\r\n\tpublic SampleTypeId: number;\r\n\tpublic SampleTypes: ISelectOptions[];\r\n\tpublic Nitrogen: IFormNitrogen;\r\n\tpublic StartDate: string;\r\n\tpublic EndDate: string;\r\n\r\n\tpublic HarvestDate?: string; // remove these later\r\n\tpublic endDate?: string;\r\n\tpublic startDate?: string;\r\n\tpublic DateOnly?: boolean;\r\n\r\n\t/**\r\n\t * Inserts N-Nitrate into Nutrients array, for proper sorting in event table hover panel\r\n\t * @param soilSampleEvent\r\n\t */\r\n\tpublic static insertNitrateNIntoNutrients(soilSampleEvent: SoilSampleEvent): INutrient[] {\r\n\t\tlet nitrateN: INutrient;\r\n\r\n\t\tif (soilSampleEvent.SoilNitrateNPPM === 0) {\r\n\t\t\t// if N value is 0, don't insert\r\n\t\t\treturn soilSampleEvent.Nutrients;\r\n\t\t}\r\n\r\n\t\tnitrateN = {\r\n\t\t\tNutrient: 'Nitrate-N',\r\n\t\t\tValue: soilSampleEvent.SoilNitrateNPPM\r\n\t\t};\r\n\r\n\t\tsoilSampleEvent.Nutrients.push(nitrateN);\r\n\r\n\t\treturn soilSampleEvent.Nutrients;\r\n\t}\r\n\r\n\tpublic static extractFromReactiveForm(m: ISoilSampleSimple): ISoilSampleEventForm {\r\n\t\tlet formNutrients: IFormNutrient[] = new Array();\r\n\r\n\t\tformNutrients.push({\r\n\t\t\tId: 1,\r\n\t\t\tNutrientTypeId: 1,\r\n\t\t\tName: 'Nitrogen',\r\n\t\t\tvalue: m.Nitrogen,\r\n\t\t\tNutrientId: 1\r\n\t\t});\r\n\r\n\t\treturn {\r\n\t\t\tCropStageId: m.CropStageId,\r\n\t\t\tEventDate: m.EventDate,\r\n\t\t\tNutrients: formNutrients,\r\n\t\t\tSampleDepth: m.SampleDepth,\r\n\t\t\tSampleTypeId: m.SampleTypeId,\r\n\t\t\tSoilMoistureId: m.SoilMoistureId,\r\n\t\t\tStartDate: null,\r\n\t\t\tEndDate: null,\r\n\t\t\tNitrogen: {\r\n\t\t\t\tId: 1,\r\n\t\t\t\tNutrientId: 1,\r\n\t\t\t\tValue: m.Nitrogen\r\n\t\t\t},\r\n\t\t};\r\n\t}\r\n\r\n\tconstructor(eventDate?: Date) {\r\n\t\tif (eventDate) {\r\n\t\t\tthis.EventDate = eventDate;\r\n\t\t}\r\n\t}\r\n\r\n\t// used when converting data for events popup\r\n\tpublic convert(rawSoilSample: IRawSoilSample): void {\r\n\t\tthis.Depth = rawSoilSample.Depth;\r\n\t\tthis.Id = rawSoilSample.Id;\r\n\t\tthis.Metainfo = rawSoilSample.Metainfo;\r\n\t\tthis.CropStage = rawSoilSample.CropStage;\r\n\t\tthis.SampleType = rawSoilSample.SampleType;\r\n\t\tthis.SampleTypeId = rawSoilSample.SampleTypeId;\r\n\t\tthis.Nutrients = rawSoilSample.Nutrients;\r\n\t\tthis.SoilNitrateNPPM = rawSoilSample.SoilNitrateNPPM;\r\n\t\tthis.SoilMineralNLbsAcre = rawSoilSample.SoilMineralNLbsAcre;\r\n\t\tthis.LastUpdatedUser = rawSoilSample.LastUpdatedUser;\r\n\t\tthis.ShowDetails = false;\r\n\t}\r\n\r\n\tpublic convertSoilSampleJSONModel(d: SoilSampleJSONModel): void {\r\n\t\tif (!d) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!d.EventDate) {\r\n\t\t\tthis.EventDate = new Date();\r\n\t\t} else {\r\n\t\t\tthis.EventDate = DateUtility.DotNetToDate(d.EventDate);\r\n\t\t}\r\n\r\n\t\tthis.CropStageId = d.CropStageId;\r\n\t\tthis.CropStages = [];\r\n\t\tthis.MoistureTypes = [];\r\n\t\tthis.SampleTypes = [];\r\n\r\n\t\tif (d.CropStages && d.CropStages.length > 0) {\r\n\t\t\tfor (let cropStage of d.CropStages) {\r\n\t\t\t\tthis.CropStages.push({\r\n\t\t\t\t\tText: cropStage.Text,\r\n\t\t\t\t\tValue: Number(cropStage.Value)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (d.MoistureTypes && d.MoistureTypes.length > 0) {\r\n\t\t\tfor (let type of d.MoistureTypes) {\r\n\t\t\t\tthis.MoistureTypes.push({\r\n\t\t\t\t\tkey: type.Key,\r\n\t\t\t\t\tvalue: type.Value\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (d.SampleTypes && d.SampleTypes.length > 0) {\r\n\t\t\tfor (let type of d.SampleTypes) {\r\n\t\t\t\tthis.SampleTypes.push({\r\n\t\t\t\t\tkey: type.Key,\r\n\t\t\t\t\tvalue: type.Value\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.SoilMoistureId = d.SoilMoistureId;\r\n\t\tthis.SampleDepth = d.SampleDepth;\r\n\t\tthis.SampleTypeId = d.SampleTypeId;\r\n\t\tthis.StartDate = d.StartDate;\r\n\t\tthis.EndDate = d.EndDate;\r\n\t\tthis.LastUpdatedUser = d.LastUpdated;\r\n\t\tthis.OtherNutrients = new Array();\r\n\r\n\t\tthis.Nitrogen = {\r\n\t\t\tId: 1,\r\n\t\t\tNutrientId: 1,\r\n\t\t\tValue: 0\r\n\t\t}\r\n\r\n\t\tfor (let nutrient of d.Nutrients) {\r\n\t\t\tif (nutrient.Name === 'Nitrogen') {\r\n\t\t\t\tthis.Nitrogen.Id = nutrient.Id;\r\n\t\t\t\tthis.Nitrogen.NutrientId = nutrient.Id;\r\n\t\t\t\tthis.Nitrogen.Value = nutrient.value;\r\n\t\t\t} else {\r\n\t\t\t\tthis.OtherNutrients.push({\r\n\t\t\t\t\tId: nutrient.Id,\r\n\t\t\t\t\tName: nutrient.Name,\r\n\t\t\t\t\tvalue: nutrient.value,\r\n\t\t\t\t\tNutrientId: nutrient.Id,\r\n\t\t\t\t\tNutrientTypeId: nutrient.NutrientTypeId,\r\n\t\t\t\t\tMeasurementUnit: nutrient.MeasurementUnit,\r\n\t\t\t\t\tMeasureUnitTypeId: nutrient.MeasureUnitTypeId\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getForm(): ISoilSampleEventForm {\r\n\t\tlet formNutrients: IFormNutrient[] = new Array();\r\n\r\n\t\tif (this.Nitrogen) {\r\n\t\t\tformNutrients.push({\r\n\t\t\t\tId: this.Nitrogen.Id,\r\n\t\t\t\tNutrientTypeId: this.Nitrogen.NutrientId,\r\n\t\t\t\tName: 'Nitrogen',\r\n\t\t\t\tvalue: this.Nitrogen.Value,\r\n\t\t\t\tNutrientId: this.Nitrogen.NutrientId\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.OtherNutrients && this.OtherNutrients.length > 0) {\r\n\t\t\tfor (let nutrient of this.OtherNutrients) {\r\n\t\t\t\tformNutrients.push({\r\n\t\t\t\t\tId: nutrient.Id,\r\n\t\t\t\t\tNutrientTypeId: nutrient.NutrientTypeId,\r\n\t\t\t\t\tName: nutrient.Name,\r\n\t\t\t\t\tvalue: nutrient.value,\r\n\t\t\t\t\tNutrientId: nutrient.NutrientId\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tCropStageId: this.CropStageId,\r\n\t\t\tCropStages: this.CropStages,\r\n\t\t\tEventDate: this.EventDate,\r\n\t\t\tMoistureTypes: this.MoistureTypes,\r\n\t\t\tNutrients: formNutrients,\r\n\t\t\tSampleDepth: this.SampleDepth,\r\n\t\t\tSampleTypeId: this.SampleTypeId,\r\n\t\t\tSampleTypes: this.SampleTypes,\r\n\t\t\tSoilMoistureId: this.SoilMoistureId,\r\n\t\t\tStartDate: this.StartDate,\r\n\t\t\tEndDate: this.EndDate,\r\n\t\t\tNitrogen: this.Nitrogen,\r\n\t\t\tOtherNutrients: this.OtherNutrients,\r\n\t\t\tDateOnly: this.DateOnly\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n    <h4 mat-dialog-title>\r\n        {{'Recommendations Changed' | translate}}\r\n    </h4>\r\n\r\n    <div mat-dialog-content>\r\n\t\t<div class=\"bk-modal__remove-text\">\r\n\t\t\t{{'Action has changed the recommendation for the following\r\n\t\t\tevent(s)' | translate }}:\r\n\t\t</div>\r\n\r\n\t\t<table class=\"bk-event-table__affected-events\">\r\n\t\t\t<tr *ngFor=\"let affectedEvent of affectedEvents\">\r\n\t\t\t\t<td class=\"bk-event-table__affected-events-cell--date\">\r\n\t\t\t\t\t{{affectedEvent.EventDate | date:'mediumDate'}}\r\n\t\t\t\t</td>\r\n\t\t\t\t<td class=\"bk-event-table__affected-events-cell\">\r\n\t\t\t\t\t<div class=\"bk-planting__event-row__icon bk-button--black-icon\">\r\n\t\t\t\t\t\t<svg-fertilizer></svg-fertilizer>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t{{affectedEvent.Fertilization[0].FertilizerName}}\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t</table>\r\n\t\t<div class=\"bk-modal__remove-text\">\r\n\t\t\t{{'Edit an event to get a new recommendation' | translate }}.\r\n\t\t</div>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n\t\t<button mat-button\r\n\t\t\tclass=\"bk-button bk-button--medium\"\r\n\t\t\t(click)=\"close()\">\r\n\t\t\t{{'Close Window' | translate }}\r\n\t\t</button>\r\n    </div>\r\n</div>\r\n","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { IEventGroup } from '../../models/event/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'soil-sample-warning',\r\n\ttemplateUrl: 'warning.html',\r\n})\r\n\r\nexport class SoilSampleWarningDialog implements OnInit {\r\n\r\n\tpublic affectedEvents: IEventGroup[];\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { affectedEvents: IEventGroup[] },\r\n\t\tprivate dialogRef: MatDialogRef<SoilSampleWarningDialog>,\r\n\t) {\r\n\r\n\t\tif (this._data) {\r\n\t\t\tthis.affectedEvents = this._data.affectedEvents;\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\t\r\n\t<h4 mat-dialog-title>\r\n\t\t{{ 'Technical Support' | translate }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<p>\r\n\t\t\t{{ 'technical support explanation text' | translate }}\r\n\t\t</p>\r\n\t\t<textarea\r\n\t\t\tclass='bk-feedback__textarea'\r\n\t\t\t[(ngModel)]='description'\r\n\t\t\tplaceholder=\"{{ 'Please describe your issue' | translate }}.\">\r\n\t\t</textarea>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\r\n\t\t<button (click)=\"cancel()\" mat-button\r\n\t\t\tclass=\"bk-button--medium bk-dialog__button--secondary bk-button--text-only\">\r\n\t\t\t{{ 'Cancel' | translate }}\r\n\t\t</button>\r\n\r\n\t\t<button\r\n\t\t\t[disabled]=\"!description\"\r\n\t\t\t(click)=\"send()\"\r\n\t\t\tmat-button\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t\t{{ 'Send' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { eNotificationTypes } from '../../interfaces/constants';\r\nimport { FeedbackService } from '../feedback/service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'support',\r\n\ttemplateUrl: 'support.html'\r\n})\r\n\r\nexport class SupportComponent implements OnInit {\r\n\r\n\tpublic description: string;\r\n\r\n\tconstructor(\r\n\t\tpublic dialogRef: MatDialogRef<SupportComponent>,\r\n\t\tpublic notificationService: NotificationService,\r\n\t\tpublic service: FeedbackService\r\n\t) {\r\n\t\t// disable click outside\r\n\t\tthis.dialogRef.disableClose = true;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n\r\n\tpublic send(): void {\r\n\r\n\t\t// validate ET value before posting...\r\n\r\n\t\tif (!this.description) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.service.send(this.description).then(() => {\r\n\t\t\tthis.dialogRef.close();\r\n\r\n\t\t\tthis.notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\tmessage: 'Your support request was sent successfully.'\r\n\t\t\t});\r\n\r\n\t\t});\r\n\t}\r\n\r\n\tpublic cancel(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n}\r\n","import { ICropStage } from '../../models/crop-stage/interfaces';\r\nimport { IIdNamePair } from '../planting-settings/interfaces';\r\nimport { NutrientJSONModel } from '../ranch-settings/modals/fertilizer/interfaces';\r\nimport { TissueSampleEvent } from './tissueSampleEvent';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { EventResponse } from '../../models/event/eventResponse';\r\n\r\n/**\r\n * Namespace used for managing JSON that comes in from C#\r\n */\r\nexport namespace IncomingJSON {\r\n\r\n\texport interface TissueSampleNutrient {\r\n\t\tId: number,\r\n\t\tEventId: number,\r\n\t\tNutrientId: number,\r\n\t\tMeasurementUnitId: number,\r\n\t\tValue?: number,\r\n\t\tTissueSampleEvent?: any, // this comes in as null\r\n\t\tNutrient: Nutrient,\r\n\t}\r\n\r\n\texport interface Nutrient {\r\n\t\tId: number,\r\n\t\tName: string,\r\n\t\tName_Alt: string,\r\n\t\tNutrientTypeId: number,\r\n\t\tMeasureUnitTypeId: number,\r\n\t\tTissueMeasureUnitTypeId: number,\r\n\t\tSymbol: string\r\n\t}\r\n\t/**\r\n     *\r\n     */\r\n\texport interface TissueSampleEventJSONModel {\r\n\t\tPlantingId: number,\r\n\t\tLastUpdated?: string,\r\n\t\tLastUpdatedUser: string,\r\n\t\tLastUpdatedTimestamp: string,\r\n\t\tCropStageId?: number,\r\n\t\tLocationId?: number,\r\n\t\tLocationDetails?: string,\r\n\t\tNotes?: string,\r\n\t\tTissueSampleNutrients: TissueSampleNutrientJSON[],\r\n\t\t// inherited from EventJSON\r\n\t\tId: number,\r\n\t\t// EventDate specified by child\r\n\t\tLotPlantingId?: number,\r\n\t\tCreatedDate?: string,\r\n\t\tLastUpdateDate?: string,\r\n\t\tUpdatedBy?: string,\r\n\t}\r\n\r\n\texport interface TissueSampleNutrientJSON {\r\n\t\tId: number,\r\n\t\tEventId: number,\r\n\t\tNutrientId?: number,\r\n\t\tNutrient: NutrientJSONModel,\r\n\t\tMeasurementUnitId?: number,\r\n\t\tValue?: number\r\n\t}\r\n\r\n\t/**\r\n     * incoming JSON, where date is a string\r\n\t * Transmitted by edit controller\r\n     */\r\n\texport interface ITissueSampleEventJSON extends TissueSampleEventJSONModel {\r\n\t\tEventDate: string\r\n\t}\r\n\r\n\t/**\r\n     * Data structure Comes from TissueSampleModel in EventService: EventsListForPlanting()\r\n     */\r\n\texport interface ITissueSampleModel {\r\n\t\tMetainfo: string,\r\n\t\tId: number,\r\n\t\tCropStage: { Id: number, Name: string },\r\n\t\tLocation: { Id: number, Name: string },\r\n\t\tLastUpdatedUser: string,\r\n\t\tTissueSampleNutrients: EventSnapshotEventSnapshotTissueSampleNutrient[]\r\n\t}\r\n\r\n\texport interface EventSnapshotEventSnapshotTissueSampleNutrient {\r\n\t\tSymbol: string;\r\n\t\tName: string;\r\n\t\tValue: number;\r\n\t\tMeasurementUnitId: number\r\n\t}\r\n\r\n\texport interface ITissueSampleLocation extends IIdNamePair {\r\n\t\tExternalID: number\r\n\t}\r\n}\r\n\r\nexport namespace Internal {\r\n\texport interface ITissueSampleEvent extends IncomingJSON.TissueSampleEventJSONModel { // REFACTOR - remove - obsolete\r\n\t\tMetainfo: string;\r\n\t\tEventDate: Date;\r\n\t\tCropStage: ICropStage;\r\n\t\tNutrientDisplayText?: string;\r\n\t}\r\n}\r\n\r\nexport const TISSUE_SAMPLE_LOCATION_OTHER = 4;\r\n\r\nexport enum eNutrientTypes {\r\n\tPRIMARY = 1,\r\n\tSECONDARY,\r\n\tMICRO,\r\n\tGENERAL\r\n}\r\n\r\nexport const eNutrientSymbols = {\r\n\tSulfur: 'S',\r\n\tPhosphorous: 'P',\r\n\tBoron: 'B'\r\n}\r\n\r\n/**\r\n * Nutrient measure unit types\r\n */\r\nexport enum eMeasureUnitTypes {\r\n\tPPM = 1,\r\n\tPERCENT\r\n}\r\n\r\n/**\r\n * C# model used to post to server\r\n */\r\nexport interface TissueSampleEventUpdateParams {\r\n\tEventDate: Date,\r\n\tLocationId?: number,\r\n\tLocationDetails: string,\r\n\tCropStageId?: number,\r\n\tNotes?: string,\r\n\tTissueSampleNutrients: TissueSampleNutrientParams[]\r\n}\r\n\r\n/**\r\n * C# model used to post to server\r\n */\r\nexport interface TissueSampleNutrientParams {\r\n\tId: number,\r\n\tNutrientId: number,\r\n\tMeasurementUnitId: number,\r\n\tValue: number\r\n}\r\n\r\nexport interface ITissueSampleEventService {\r\n\tcreate(plantingId: number, model: TissueSampleEventUpdateParams): Promise<EventResponse>,\r\n\tdelete(id: number, plantingId: number): Promise<EventGroup[]>,\r\n\tget(id: number): Promise<TissueSampleEvent>,\r\n\tlocationList(): Promise<IncomingJSON.ITissueSampleLocation[]>,\r\n\tnutrientList(): Promise<IncomingJSON.TissueSampleNutrient[]>,\r\n\tupdate(eventId: number, model: TissueSampleEventUpdateParams, plantingId: number): Promise<EventResponse>,\r\n\tupdateDateOnly(eventId: number, plantingId: number, date: Date): Promise<EventResponse>,\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\n\r\nimport { HttpService, HttpServicePostOptions, HttpServiceGetOptions } from '../../services/http.service';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\n\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { IEventPostResponseJSON, IEventPostResponse } from '../../models/event/interfaces';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { TissueSampleEvent } from './tissueSampleEvent';\r\nimport { Internal, IncomingJSON, ITissueSampleEventService, TissueSampleEventUpdateParams } from './interfaces';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { ObjectUtility } from '../../classes/objectUtility';\r\nimport { EventResponse } from '../../models/event/eventResponse';\r\n\r\n\r\n@Injectable()\r\nexport class TissueSampleEventService implements ITissueSampleEventService {\r\n\r\n\tprivate urls = {\r\n\t\t// save: '/v2/tissue-sample-events.json',\r\n\t\tupdate: (eventId: number) => `/v3/tissue-sample-events/${eventId}.json`,\r\n\t\tupdateDateOnly: (eventId: number) => `/v3/tissue-sample-events/${eventId}/date-only.json`,\r\n\t\tcreate: (plantingId: number) => `/v3/plantings/${plantingId}/tissue-sample-events.json`,\r\n\t\tget: (id: number) => `/v2/tissue-sample-events/${id}.json`,\r\n\t\tdelete: (id: number) => `/v2/tissue-sample-events/${id}.json`,\r\n\t\tlocationList: '/v2/tissue-sample-locations.json',\r\n\t\tnutrientList: '/v2/tissue-sample-nutrients.json'\r\n\t}\r\n\r\n\tconstructor(private httpService: HttpService,\r\n\t\tprivate ranchService: RanchService\r\n\t) { }\r\n\r\n\tpublic updateDateOnly(eventId: number, plantingId: number, date: Date): Promise<EventResponse> {\r\n\t\tlet params: HttpParams;\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tparams = new HttpParams().set('eventDate', DateUtility.ConvertToUTC(date).toISOString());\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.updateDateOnly(eventId),\r\n\t\t\tparams: params,\r\n\t\t\tbody: null,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: IEventPostResponseJSON): EventResponse => {\r\n\t\t\t\tlet result: EventResponse;\r\n\r\n\t\t\t\tresult = new EventResponse(response);\r\n\t\t\t\tresult.updateSucceedingEvents(plantingId, this.ranchService);\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.put(options);\r\n\t}\r\n\r\n\tpublic create(plantingId: number, model: TissueSampleEventUpdateParams): Promise<EventResponse> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.create(plantingId),\r\n\t\t\tbody: model,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: IEventPostResponseJSON): EventResponse => {\r\n\t\t\t\tlet result: EventResponse;\r\n\r\n\t\t\t\tresult = new EventResponse(response);\r\n\t\t\t\tresult.updateSucceedingEvents(plantingId, this.ranchService);\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic update(eventId: number, model: TissueSampleEventUpdateParams, plantingId: number): Promise<EventResponse> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.update(eventId),\r\n\t\t\tbody: model,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: IEventPostResponseJSON): EventResponse => {\r\n\t\t\t\tlet result: EventResponse;\r\n\r\n\t\t\t\tresult = new EventResponse(response);\r\n\t\t\t\tresult.updateSucceedingEvents(plantingId, this.ranchService);\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.put(options);\r\n\t}\r\n\r\n\tpublic get(id: number): Promise<TissueSampleEvent> {\r\n\t\tlet options: HttpServiceGetOptions;\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams().set('id', id.toString());\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.get(id),\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (event: IncomingJSON.ITissueSampleEventJSON) => {\r\n\t\t\t\tlet tissueSampleEvent: TissueSampleEvent;\r\n\r\n\t\t\t\tif (!event) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttissueSampleEvent = new TissueSampleEvent();\r\n\t\t\t\ttissueSampleEvent.transmuteJSON(event);\r\n\r\n\t\t\t\treturn tissueSampleEvent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic delete(id: number, plantingId: number): Promise<EventGroup[]> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tlet body: {\r\n\t\t\tplantingId: number,\r\n\t\t};\r\n\r\n\t\tif (!plantingId || !id) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tbody = {\r\n\t\t\tplantingId: plantingId,\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: body,\r\n\t\t\turl: this.urls.delete(id),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: IEventPostResponseJSON): EventGroup[] => {\r\n\t\t\t\tlet eventGroupsSucceeding: EventGroup[];\r\n\r\n\t\t\t\tEventGroup.updateEvents(response.EventGroupsSucceeding, plantingId,\r\n\t\t\t\t\tDateUtility.DotNetToDate(response.WetDate), this.ranchService);\r\n\r\n\t\t\t\teventGroupsSucceeding = EventGroup.convertAll(response.EventGroupsSucceeding,\r\n\t\t\t\t\tDateUtility.DotNetToDate(response.WetDate));\r\n\r\n\t\t\t\treturn eventGroupsSucceeding;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.delete(options);\r\n\t}\r\n\r\n\tpublic locationList(): Promise<IncomingJSON.ITissueSampleLocation[]> {\r\n\t\tlet options: HttpServiceGetOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.locationList,\r\n\t\t\tuseLocalStorage: true,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (result: IncomingJSON.ITissueSampleLocation[]) => {\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic nutrientList(): Promise<IncomingJSON.TissueSampleNutrient[]> {\r\n\t\tlet options: HttpServiceGetOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.nutrientList,\r\n\t\t\tuseLocalStorage: true,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (result: IncomingJSON.TissueSampleNutrient[]) => {\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\r\n    <button *ngIf=\"view !== eventViews.DISCARD_CHANGES &&\r\n        view !== eventViews.DELETE_CONFIRMATION\"\r\n        type=\"button\"\r\n        class=\"bk-button bk-dialog__close\"\r\n        (click)=\"close()\">\r\n\r\n        &times;\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>\r\n        <ng-container *ngIf=\"!id\">\r\n            {{ 'Add' | translate }}\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"id && view !== eventViews.DELETE_CONFIRMATION\">\r\n            {{ 'Edit' | translate }}\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"id && view === eventViews.DELETE_CONFIRMATION\">\r\n            {{ 'Delete' | translate }}\r\n        </ng-container>\r\n\r\n        {{ 'Tissue Sample Event' | translate}}\r\n    </h4>\r\n\r\n    <div *ngIf=\"view === eventViews.FORM\"\r\n        mat-dialog-content\r\n        [ngClass]=\"{ 'bk-cut-event--datepicker-open' : isEventDatePickerOpen }\">\r\n        <form [formGroup]=\"form\">\r\n            <mat-form-field appearance=\"fill\"\r\n                class='mat-form-field--one-line mat-form-field--short'>\r\n                <mat-label>{{ 'Event Date' | translate }}</mat-label>\r\n                <input matInput [matDatepicker]=\"picker\"\r\n                    required\r\n                    [max]=\"maxDate\"\r\n                    formControlName=\"EventDate\">\r\n                <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n                <mat-datepicker #picker></mat-datepicker>\r\n                <mat-error *ngIf=\"f.EventDate.invalid && (f.EventDate.dirty ||\r\n                    f.EventDate.touched)\">\r\n                    <div *ngIf=\"f.EventDate.errors.required\">\r\n                        {{ 'Event date is required' | translate }}\r\n                    </div>\r\n                </mat-error>\r\n            </mat-form-field>\r\n\r\n            <mat-form-field appearance=\"fill\"\r\n                class=\"mat-form-field--one-line mat-form-field--short\">\r\n                <mat-label>\r\n                    {{ 'Crop Stage' | translate }}\r\n                </mat-label>\r\n                <mat-select\r\n                    formControlName=\"CropStageId\">\r\n                    <mat-option *ngFor=\"let cropStage of cropStages\"\r\n                        [value]=\"cropStage.Id\">\r\n                        {{cropStage.Name | translate }}\r\n                    </mat-option>\r\n                </mat-select>\r\n            </mat-form-field>\r\n\r\n            <ng-container *ngIf='locations !== null'>\r\n                <mat-form-field appearance=\"fill\"\r\n                class=\"mat-form-field--one-line mat-form-field--short\">\r\n                    <mat-label>\r\n                        {{ 'Part of Plant' | translate }}\r\n                    </mat-label>\r\n                    <mat-select\r\n                        formControlName=\"LocationId\">\r\n                        <mat-option [value]=null selected>\r\n                            {{'Please Select' | translate }}\r\n                        </mat-option>\r\n                        <mat-option *ngFor=\"let location of locations\"\r\n                            [value]=\"location.Id\">\r\n                            {{location.Name | translate }}\r\n                        </mat-option>\r\n                    </mat-select>\r\n                </mat-form-field>\r\n\r\n                <mat-form-field *ngIf='f.LocationId.value === locationOtherId'\r\n                    appearance=\"fill\"\r\n                    class='mat-form-field--one-line mat-form-field--short'>\r\n                    <mat-label>\r\n                        {{ 'Enter a custom sample location:' | translate }}\r\n                    </mat-label>\r\n                    <input matInput \r\n                        type=\"text\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"LocationDetails\"\r\n                        name=\"LocationDetails\"/>\r\n                </mat-form-field>\r\n            </ng-container>\r\n\r\n            <mat-accordion>\r\n                <mat-expansion-panel>\r\n                    <mat-expansion-panel-header>\r\n                        <mat-panel-title>\r\n                            {{ 'Macro Nutrients' | translate }}\r\n                        </mat-panel-title>\r\n                        <mat-panel-description></mat-panel-description>\r\n                    </mat-expansion-panel-header>\r\n                    <ng-container *ngFor=\"let nutrient of\r\n                        f.Nutrients.get('macro').controls\">\r\n                        <div class=\"bk-modal__right-two-col\">\r\n                            <mat-form-field appearance=\"fill\"\r\n                                class=\"mat-form-field--one-line mat-form-field--w1\">\r\n                                <mat-label>\r\n                                    {{ nutrient.get('Name').value | translate }}\r\n                                </mat-label>\r\n                                <input matInput\r\n                                    type=\"number\"\r\n                                    step=\"0.01\"\r\n                                    [formControl]=\"nutrient.get('Value')\"/>\r\n                                <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                                    {{ (nutrient.get('MeasureUnitTypeId') ? nutrient.get('MeasureUnitTypeId').value\r\n                                    : null) == measureUnitTypes.PPM ? 'ppm' : '%'}}\r\n                                </span>\r\n                            </mat-form-field> \r\n                        </div>\r\n                    </ng-container>\r\n                </mat-expansion-panel>\r\n                <mat-expansion-panel (opened)=\"panelOpenState = true\" (closed)=\"panelOpenState = false\">\r\n                    <mat-expansion-panel-header>\r\n                        <mat-panel-title>\r\n                            {{ 'Micro Nutrients' | translate }}\r\n                        </mat-panel-title>\r\n                        <mat-panel-description></mat-panel-description>\r\n                    </mat-expansion-panel-header>\r\n                    <ng-container *ngFor=\"let nutrient of\r\n                        f.Nutrients.get('micro').controls\">\r\n                        <div class=\"bk-modal__right-two-col\">\r\n                            <mat-form-field appearance=\"fill\"\r\n                                class=\"mat-form-field--one-line mat-form-field--w1\">\r\n                                <mat-label>\r\n                                    {{ nutrient.get('Name').value | translate }}\r\n                                </mat-label>\r\n                                <input matInput\r\n                                    type=\"number\"\r\n                                    step=\"0.01\"\r\n                                    [formControl]=\"nutrient.get('Value')\"/>\r\n                                <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                                    {{ getNutrientUnit(nutrient) }}\r\n                                </span>\r\n                            </mat-form-field> \r\n                        </div>\r\n                    </ng-container>\r\n                </mat-expansion-panel>\r\n            </mat-accordion>\r\n\r\n            <span *ngIf=\"id && lastUpdated\"\r\n                class='bk-modal__last-updated-meta bk-clearfix'>\r\n\r\n                {{ 'Last updated by' | translate }} {{ lastUpdated.user }} {{ 'on' | translate }} {{ lastUpdated.timestamp}}\r\n            </span>\r\n        </form>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === eventViews.DISCARD_CHANGES\"\r\n        mat-dialog-content>\r\n\r\n        <div class=\"bk-dialog__paragraph\">\r\n            {{ 'The changes you made were not saved' | translate}}. {{'Discard changes' | translate}}?\r\n        </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === eventViews.DELETE_CONFIRMATION\"\r\n        mat-dialog-content>\r\n\r\n        <div class=\"bk-dialog__paragraph\">\r\n            {{ 'Are you sure you want to delete this event' | translate}}?\r\n        </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === eventViews.FORM\"\r\n        mat-dialog-actions\r\n        align=\"end\">\r\n\r\n        <button *ngIf=\"id\"\r\n            class=\"bk-button__delete\" \r\n            (click)=\"onDelete($)\">\r\n\r\n            {{'Delete' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n            (click)=\"close()\">\r\n\r\n            {{ 'Cancel' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"save()\"\r\n            [disabled]=\"form.invalid\">\r\n\r\n            {{(isSaving ? 'Saving' : 'Save') | translate }}\r\n            <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n        </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === eventViews.DISCARD_CHANGES\"\r\n        mat-dialog-actions\r\n        align=\"end\">\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n            (click)=\"revert()\">\r\n            {{ 'Keep Editing' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"close(true)\">\r\n            {{ 'Discard' | translate }}\r\n        </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === eventViews.DELETE_CONFIRMATION\"\r\n        mat-dialog-actions\r\n        align=\"end\" >\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n            (click)=\"revert()\">\r\n            {{ 'Keep Editing' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"delete()\">\r\n            {{ 'Delete' | translate }}\r\n        </button>\r\n    </div>\r\n</div>","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { UpdateService } from '../../services/update.service';\r\n\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { TissueSampleEvent, eEventDialogViews } from './tissueSampleEvent';\r\nimport { TissueSampleEventService } from './service';\r\nimport { CropStageService } from '../../models/crop-stage/cropStage.service';\r\nimport { IIdNamePair } from '../planting-settings/interfaces';\r\n\r\nimport { IncomingJSON, TISSUE_SAMPLE_LOCATION_OTHER, eNutrientTypes, eMeasureUnitTypes, TissueSampleEventUpdateParams } from './interfaces';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { EventsType } from '../../interfaces/constants';\r\nimport * as moment from 'moment';\r\n\r\nexport interface  INutrientSet {\r\n\tmacro: IncomingJSON.TissueSampleNutrientJSON[],\r\n\tmicro: IncomingJSON.TissueSampleNutrientJSON[]\r\n}\r\n\r\nexport type TissueSampleDialogFields = 'Id' | 'EventDate' | 'CropStageId' |\r\n\t'LocationId' | 'LocationDetails' | 'Nutrients';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'tissue-sample-event',\r\n\ttemplateUrl: 'tissue-sample-event.component.html',\r\n\tstyleUrls: ['tissue-sample-event.component.scss']\r\n})\r\n\r\nexport class TissueSampleEventComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic cropStages: IIdNamePair[];\r\n\tpublic eventViews = eEventDialogViews;\r\n\tpublic form: FormGroup;\r\n\tpublic id: number;\r\n\tpublic isSaving = false; // button loadeer\r\n\r\n\tpublic lastUpdated: {\r\n\t\tuser: string,\r\n\t\ttimestamp: string\r\n\t};\r\n\r\n\tpublic locationOtherId: number; // external ID of \"other\" location field\r\n\tpublic locations: IncomingJSON.ITissueSampleLocation[];\r\n\tpublic maxDate: Date; // maximum valid date for EventDate\r\n\tpublic measureUnitTypes = eMeasureUnitTypes;\r\n\tpublic nutrients: INutrientSet;\r\n\tpublic panelOpenState = false;\r\n\tpublic view: eEventDialogViews = eEventDialogViews.FORM;\r\n\r\n\tprivate _commodityTypeId: number;\r\n\tprivate _dateDefault: Date;\r\n\tprivate _eventDateOriginal: Date;\r\n\tprivate _plantingId: number;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic get f(): { [key in TissueSampleDialogFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in TissueSampleDialogFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _cropStageService: CropStageService,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: {\r\n\t\t\tplantingId: number,\r\n\t\t\tid?: number,\r\n\t\t\tcommodityTypeId: number,\r\n\t\t\tdateDefault?: Date,\r\n\t\t\tharvestDate: Date,\r\n\t\t},\r\n\r\n\t\tpublic _dialogRef: MatDialogRef<TissueSampleEventComponent>,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _service: TissueSampleEventService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\r\n\t\tif (this._data) {\r\n\t\t\tthis.id = this._data.id;\r\n\t\t\tthis._commodityTypeId = this._data.commodityTypeId;\r\n\t\t\tthis._plantingId = this._data.plantingId;\r\n\t\t\tthis._dateDefault = this._data.dateDefault;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._initializeForm();\r\n\r\n\t\tthis.nutrients = {\r\n\t\t\tmicro: null,\r\n\t\t\tmacro: null\r\n\t\t};\r\n\r\n\t\tthis._service.locationList().then(response => {\r\n\t\t\tlet location: IncomingJSON.ITissueSampleLocation;\r\n\r\n\t\t\tthis.locations = response;\r\n\r\n\t\t\tif (!this.locations || this.locations.length === 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlocation = this.locations.filter(x => x.ExternalID === TISSUE_SAMPLE_LOCATION_OTHER)[0];\r\n\r\n\t\t\tif (location) {\r\n\t\t\t\tthis.locationOtherId = location.Id;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (this.id) {\r\n\t\t\tthis._service.get(this.id)\r\n\t\t\t\t.then(response => {\r\n\t\t\t\t\tif (!response) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis._eventDateOriginal = response.EventDate;\r\n\r\n\t\t\t\t\tthis.lastUpdated = {\r\n\t\t\t\t\t\tuser: response.LastUpdatedUser,\r\n\t\t\t\t\t\ttimestamp: response.LastUpdatedTimestamp\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis._organizeNutrients(response.TissueSampleNutrients);\r\n\t\t\t\t\tthis._populateForm(response, this.nutrients);\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\tif (this._dateDefault) {\r\n\t\t\t\tthis.f.EventDate.setValue(this._dateDefault);\r\n\t\t\t} else {\r\n\t\t\t\tthis.f.EventDate.setValue(null);\r\n\t\t\t}\r\n\r\n\t\t\tthis._service.nutrientList().then(response => {\r\n\t\t\t\tlet nutrients: IncomingJSON.TissueSampleNutrientJSON[];\r\n\r\n\t\t\t\tnutrients = this._convertNutrients(response);\r\n\r\n\t\t\t\t// sending actual time messes with event list\r\n\t\t\t\tthis._organizeNutrients(nutrients);\r\n\t\t\t\tthis._populateForm(null, this.nutrients);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._cropStageService.list(this._commodityTypeId).then(res => {\r\n\t\t\tthis.cropStages = res;\r\n\t\t});\r\n\r\n\t\tthis._dialogRef.backdropClick().pipe(takeUntil(this._subscriptions$)).subscribe((e: MouseEvent) => {\r\n\t\t\tthis.cancel();\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic cancel(): void {\r\n\r\n\t\tif (this.form.touched) {\r\n\t\t\tthis.view = eEventDialogViews.DISCARD_CHANGES;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.close();\r\n\t}\r\n\r\n\tpublic getNutrientUnit(nutrientControl: AbstractControl): string {\r\n\t\tlet id: number;\r\n\r\n\t\tif (!nutrientControl || !nutrientControl.get('MeasurementUnitId')) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tid = nutrientControl.get('MeasurementUnitId').value as number;\r\n\r\n\t\tswitch (id) {\r\n\t\t\tcase this.measureUnitTypes.PPM:\r\n\t\t\t\treturn 'ppm';\r\n\t\t\tcase this.measureUnitTypes.PERCENT:\r\n\t\t\t\treturn '%';\r\n\t\t}\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis._dialogRef.close();\r\n\t\tthis._updateService.setEventDialogClosed();\r\n\t}\r\n\r\n\tpublic onDelete(): void {\r\n\t\tthis.view = this.eventViews.DELETE_CONFIRMATION;\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._service.delete(this.f.Id.value, this._plantingId)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\r\n\t\t\t\tthis._ranchService.plantings.deleteEventInPlantings(this.f.EventDate.value,\r\n\t\t\t\t\tthis._plantingId, EventsType.TISSUE_SAMPLE, this.f.Id.value);\r\n\r\n\t\t\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date());\r\n\t\t\t\tthis.close();\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic revert(): void {\r\n\t\tthis.view = eEventDialogViews.FORM;\r\n\t}\r\n\r\n\tpublic save(): void {\r\n\t\tif (this.form.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.f.Id.value) {\r\n\t\t\tthis._update();\r\n\t\t} else {\r\n\t\t\tthis._create();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _compareNutrientNames(a: IncomingJSON.TissueSampleNutrientJSON,\r\n\t\tb: IncomingJSON.TissueSampleNutrientJSON): number {\r\n\r\n\t\tif (a.Nutrient.Name > b.Nutrient.Name) {\r\n\t\t\treturn 1;\r\n\t\t} else if (a.Nutrient.Name < b.Nutrient.Name) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t}\r\n\r\n\t/***\r\n\t * Convert form to TissueSampleEventUpdateParams\r\n\t */\r\n\tprivate _convertFormToParams(): TissueSampleEventUpdateParams {\r\n\t\tlet result: TissueSampleEventUpdateParams;\r\n\t\tlet model: TissueSampleEvent;\r\n\t\tlet macro: IncomingJSON.TissueSampleNutrientJSON[];\r\n\t\tlet micro: IncomingJSON.TissueSampleNutrientJSON[];\r\n\t\tlet nutrients: IncomingJSON.TissueSampleNutrientJSON[];\r\n\r\n\t\tmacro = (this.f.Nutrients as FormGroup).get('macro').value;\r\n\t\tmicro = (this.f.Nutrients as FormGroup).get('micro').value;\r\n\t\tnutrients = micro.concat(macro);\r\n\r\n\t\tmodel = this.form.value;\r\n\r\n\t\tresult = {\r\n\t\t\tEventDate: model.EventDate,\r\n\t\t\tLocationId: model.LocationId,\r\n\t\t\tLocationDetails: model.LocationDetails,\r\n\t\t\tCropStageId: model.CropStageId,\r\n\t\t\tNotes: model.Notes,\r\n\t\t\tTissueSampleNutrients: []\r\n\t\t};\r\n\r\n\t\tresult.TissueSampleNutrients = [];\r\n\r\n\t\tnutrients.forEach((x) => {\r\n\t\t\tresult.TissueSampleNutrients.push({\r\n\t\t\t\tId: x.Id,\r\n\t\t\t\tNutrientId: x.NutrientId,\r\n\t\t\t\tMeasurementUnitId: x.MeasurementUnitId,\r\n\t\t\t\tValue: x.Value\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _convertNutrients(nutrients: IncomingJSON.TissueSampleNutrient[]):\r\n\t\tIncomingJSON.TissueSampleNutrientJSON[] {\r\n\r\n\t\tlet results: IncomingJSON.TissueSampleNutrientJSON[];\r\n\r\n\t\tresults = [];\r\n\r\n\t\tif (!nutrients || nutrients.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfor (let nutrient of nutrients) {\r\n\t\t\tlet item: IncomingJSON.TissueSampleNutrientJSON;\r\n\r\n\t\t\tif (!nutrient.Nutrient) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\titem = {\r\n\t\t\t\tId: nutrient.Id,\r\n\t\t\t\tEventId: nutrient.EventId,\r\n\t\t\t\tNutrient: {\r\n\t\t\t\t\tId: nutrient.Nutrient.Id,\r\n\t\t\t\t\tName: nutrient.Nutrient.Name,\r\n\t\t\t\t\tSymbol: nutrient.Nutrient.Symbol,\r\n\t\t\t\t\tMeasureUnitTypeId: nutrient.Nutrient.MeasureUnitTypeId,\r\n\t\t\t\t\tNutrientTypeId: nutrient.Nutrient.NutrientTypeId,\r\n\t\t\t\t\tName_Alt: null,\r\n\t\t\t\t\tMeasurementUnit: null,\r\n\t\t\t\t\tPercentage: null\r\n\t\t\t\t},\r\n\t\t\t\tNutrientId: nutrient.NutrientId,\r\n\t\t\t\tMeasurementUnitId: nutrient.MeasurementUnitId,\r\n\t\t\t\tValue: nutrient.Value\r\n\t\t\t}\r\n\r\n\t\t\tresults.push(item);\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tprivate _create(): void {\r\n\t\tlet model: TissueSampleEventUpdateParams;\r\n\r\n\t\tmodel = this._convertFormToParams();\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._service.create(this._plantingId, model)\r\n\t\t.then((response) => {\r\n\r\n\t\t\tlet eventGroup: EventGroup;\r\n\r\n\t\t\tthis.isSaving = false;\r\n\r\n\t\t\tif (!response || !response.Events || response.Events.length === 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\teventGroup = response.Events[0];\r\n\t\t\teventGroup.eventType = EventsType.TISSUE_SAMPLE;\r\n\r\n\t\t\tthis._ranchService.plantings.addEventToPlantings(eventGroup, this._plantingId);\r\n\t\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date());\r\n\t\t\tthis.close();\r\n\r\n\t\t\treturn;\r\n\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _initializeForm(): void {\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tId: [null],\r\n\t\t\tEventDate: [null, Validators.required],\r\n\t\t\tCropStageId: [null],\r\n\t\t\tLocationId: [null],\r\n\t\t\tLocationDetails: [null],\r\n\t\t\tNutrients: this._fb.group({\r\n\t\t\t\tmacro: this._fb.array([]),\r\n\t\t\t\tmicro: this._fb.array([])\r\n\t\t\t})\r\n\t\t});\r\n\r\n\t\tthis.maxDate = moment(this._data.harvestDate).subtract(1, 'days').toDate();\r\n\t}\r\n\r\n\t/**\r\n\t * Organize nutrients into micro/macro nutrients, and then sort each set alphabetically\r\n\t */\r\n\tprivate _organizeNutrients(nutrients: IncomingJSON.TissueSampleNutrientJSON[]): void {\r\n\r\n\t\tif (!nutrients || nutrients.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.nutrients.micro = nutrients.filter(x => x.Nutrient &&\r\n\t\t\tx.Nutrient.NutrientTypeId === eNutrientTypes.MICRO);\r\n\r\n\t\tthis.nutrients.macro = nutrients.filter(x => x.Nutrient &&\r\n\t\t\tx.Nutrient.NutrientTypeId !== eNutrientTypes.MICRO);\r\n\r\n\t\tthis.nutrients.micro.sort(this._compareNutrientNames);\r\n\t\tthis.nutrients.macro.sort(this._compareNutrientNames);\r\n\t}\r\n\r\n\tprivate _populateForm(model: TissueSampleEvent, nutrientSet: INutrientSet): void {\r\n\t\tif (!this.form) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (model) {\r\n\t\t\tthis.f.Id.setValue(model.Id);\r\n\t\t\tthis.f.EventDate.setValue(model.EventDate);\r\n\t\t\tthis.f.CropStageId.setValue(model.CropStageId);\r\n\t\t\tthis.f.LocationId.setValue(model.LocationId);\r\n\t\t\tthis.f.LocationDetails.setValue(model.LocationDetails);\r\n\t\t}\r\n\r\n\t\tthis._populateNutrients(nutrientSet.micro, 'micro');\r\n\t\tthis._populateNutrients(nutrientSet.macro, 'macro');\r\n\t}\r\n\r\n\tprivate _populateNutrients(nutrients: IncomingJSON.TissueSampleNutrientJSON[], key: string): void {\r\n\t\tif (!nutrients || nutrients.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let nutrient of nutrients) {\r\n\t\t\tlet g: FormGroup;\r\n\r\n\t\t\tg = this._fb.group({\r\n\t\t\t\tId: [nutrient.Id],\r\n\t\t\t\tNutrientId: [nutrient.Nutrient.Id],\r\n\t\t\t\tEventId: [nutrient.EventId],\r\n\t\t\t\tValue: [nutrient.Value],\r\n\t\t\t\tName: [nutrient.Nutrient.Name],\r\n\t\t\t\tMeasurementUnitId: [nutrient.Nutrient.MeasureUnitTypeId]\r\n\t\t\t});\r\n\r\n\t\t\t((this.f.Nutrients as FormGroup).get(key) as FormArray).push(g);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _update(): void {\r\n\t\tlet model: TissueSampleEventUpdateParams;\r\n\r\n\t\tmodel = this._convertFormToParams();\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._service.update(this.f.Id.value, model, this._plantingId)\r\n\t\t.then((response) => {\r\n\r\n\t\t\tlet eventGroup: EventGroup;\r\n\r\n\t\t\tthis.isSaving = false;\r\n\r\n\t\t\tif (!response || !response.Events || response.Events.length === 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\teventGroup = response.Events[0];\r\n\r\n\t\t\teventGroup.eventType = EventsType.TISSUE_SAMPLE;\r\n\t\t\teventGroup.originalEventDate = this._eventDateOriginal;\r\n\r\n\t\t\tthis._ranchService.plantings.addEventToPlantings(eventGroup, this._plantingId, this.f.Id.value);\r\n\t\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date());\r\n\t\t\tthis.close();\r\n\r\n\t\t\treturn;\r\n\t\t});\r\n\t}\r\n}\r\n","import { DateUtility } from '../../classes/dateUtility';\r\nimport { ICropStage } from '../../models/crop-stage/interfaces';\r\nimport { Internal, IncomingJSON, eMeasureUnitTypes } from './interfaces';\r\nimport { IEventGroup } from '../../models/event/interfaces';\r\nimport { IIdNamePair } from '../../interfaces/abstract';\r\nimport { INutrient } from '../../models/nutrient/interfaces';\r\n\r\nexport enum eEventDialogViews {\r\n\tFORM = 1,\r\n\tDISCARD_CHANGES,\r\n\tDELETE_CONFIRMATION,\r\n}\r\n\r\nexport class TissueSampleEvent implements Internal.ITissueSampleEvent {\r\n\tpublic Id: number;\r\n\tpublic PlantingId: number;\r\n\tpublic Metainfo: string;\r\n\tpublic EventDate: Date;\r\n\tpublic LastUpdatedUser: string;\r\n\tpublic LastUpdatedTimestamp: string;\r\n\tpublic CropStageId: number;\r\n\tpublic Location: IIdNamePair;\r\n\tpublic LocationId?: number;\r\n\tpublic LocationDetails?: string;\r\n\tpublic Notes: string;\r\n\tpublic CropStage: ICropStage;\r\n\tpublic Nutrients: INutrient[];\r\n\tpublic TissueSampleNutrients: IncomingJSON.TissueSampleNutrientJSON[];\r\n\tpublic NutrientDisplayText: string;\r\n\r\n\tpublic ShowDetails = false; // used to toggle hover panel on/off\r\n\tpublic DateOnly: boolean\r\n\r\n\tpublic static shouldShowWarningIcon(event: Internal.ITissueSampleEvent, eventGroup: IEventGroup): boolean {\r\n\t\tif (!eventGroup) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (DateUtility.isTodayOrFuture(eventGroup.EventDate)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!event.NutrientDisplayText) {\r\n\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tconstructor() {\r\n\t}\r\n\r\n\t/**\r\n     * Takes JSON data and copies into a class object\r\n     * @param json\r\n     */\r\n\tpublic transmuteJSON(json: IncomingJSON.ITissueSampleEventJSON): void {\r\n\t\tthis.Id = json.Id;\r\n\t\tthis.PlantingId = json.PlantingId;\r\n\t\tthis.EventDate = DateUtility.DotNetToDate(json.EventDate);\r\n\t\tthis.CropStageId = json.CropStageId;\r\n\t\tthis.LocationId = json.LocationId;\r\n\t\tthis.LocationDetails = json.LocationDetails;\r\n\t\tthis.Notes = json.Notes;\r\n\t\tthis.TissueSampleNutrients = json.TissueSampleNutrients;\r\n\t\tthis.LastUpdatedUser = json.LastUpdatedUser;\r\n\t\tthis.LastUpdatedTimestamp = json.LastUpdatedTimestamp;\r\n\t}\r\n\r\n\tpublic convertTissueSampleModel(json: IncomingJSON.ITissueSampleModel): void {\r\n\t\tlet nutrients: INutrient[];\r\n\t\tlet first: boolean;\r\n\r\n\t\tif (!json) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.Id = json.Id;\r\n\t\tthis.Metainfo = json.Metainfo;\r\n\t\tthis.CropStage = json.CropStage;\r\n\t\tthis.Location = json.Location;\r\n\r\n\t\tthis.Nutrients = new Array();\r\n\t\tthis.NutrientDisplayText = '';\r\n\r\n\t\tfirst = true;\r\n\r\n\t\tif (!json.TissueSampleNutrients || json.TissueSampleNutrients.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let nutrient of json.TissueSampleNutrients) {\r\n\t\t\tif (nutrient.Value > 0) {\r\n\r\n\t\t\t\tthis.Nutrients.push(nutrient);\r\n\r\n\t\t\t\tif (first) { // only display the first nutrient, due to lack of space\r\n\t\t\t\t\tthis.NutrientDisplayText += nutrient.Value\r\n\t\t\t\t\t\t+ (nutrient.MeasurementUnitId === eMeasureUnitTypes.PPM ? ' ppm' : '%')\r\n\t\t\t\t\t\t+ ' ' + nutrient.Name;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfirst = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n     * Takes an empty class object and copy to another class object\r\n     */\r\n\tpublic copy(event: TissueSampleEvent): void {\r\n\t\tthis.Id = event.Id;\r\n\t\tthis.Metainfo = event.Metainfo;\r\n\t\tthis.PlantingId = event.Id;\r\n\t\tthis.EventDate = event.EventDate;\r\n\t\tthis.CropStageId = event.CropStageId;\r\n\t}\r\n\r\n\tpublic clear(): void {\r\n\t\tthis.EventDate = null;\r\n\t\tthis.CropStageId = null;\r\n\t\tthis.Metainfo = null;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { HttpService, HttpServiceGetOptions } from '../../services/http.service';\r\nimport { ICIMISDayDataService, CIMISDayDataViewModel, ICIMISDayDataViewModel } from './interfaces';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\n\r\n\r\n@Injectable()\r\nexport class CIMISDayDataService implements ICIMISDayDataService {\r\n\r\n\tprivate urls = {\r\n\t\tget: (stationId: number) => `/v2/cimis-day-data/${stationId}.json`\r\n\t}\r\n\r\n\tconstructor(private httpService: HttpService,\r\n\t) { }\r\n\r\n\tpublic async get(stationId: number, start: Date, end: Date): Promise<ICIMISDayDataViewModel[]> {\r\n\r\n\t\tlet options: HttpServiceGetOptions;\r\n\t\tlet params: HttpParams;\r\n\t\tlet result: ICIMISDayDataViewModel[];\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('start', DateUtility.ConvertToUTC(start).toISOString())\r\n\t\t\t.set('end', DateUtility.ConvertToUTC(end).toISOString());\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.get(stationId),\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: CIMISDayDataViewModel[]): ICIMISDayDataViewModel[] => {\r\n\t\t\t\tlet r: ICIMISDayDataViewModel[];\r\n\r\n\t\t\t\tr = [];\r\n\r\n\t\t\t\tfor (let item of response) {\r\n\t\t\t\t\tr.push({\r\n\t\t\t\t\t\tDate: DateUtility.DotNetToDate(item.Date),\r\n\t\t\t\t\t\tET: item.ET,\r\n\t\t\t\t\t\tRainfall: item.Rainfall,\r\n\t\t\t\t\t\tSource: item.Source\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn r;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult = await this.httpService.get(options);\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__deactivate\">\r\n    <button type=\"button\"\r\n        class=\"bk-button bk-dialog__close\"\r\n        (click)=\"close()\">\r\n        <span>&times;</span>\r\n    </button>\r\n\r\n    <h1 mat-dialog-title *ngIf=\"weatherStation\">\r\n        {{ 'Deactivate' | translate}} {{ 'Weather Station' | translate }}\r\n    </h1>\r\n\r\n    <div mat-dialog-content>\r\n        <p>Are you sure you want to deactivate <b>{{ weatherStation.Name }}</b>?</p>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-dialog__button--secondary\"\r\n            (click)=\"close()\">\r\n            {{ 'Cancel' | translate }}\r\n        </button>\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"deactivate()\">\r\n            {{ 'Deactivate' | translate }}\r\n        </button>\r\n    </div>\r\n</div>\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\nimport { WeatherStationsService } from '../../models/weather-station-stats/service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { IWeatherStationAdvanced } from './interfaces';\r\nimport { httpStatusCodes } from '../../interfaces/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'deactivate-weather-station-dialog',\r\n\ttemplateUrl: 'deactivate-weather-station-dialog.html'\r\n})\r\n\r\nexport class DeactivateWeatherStationDialog {\r\n\r\n\tpublic weatherStation: IWeatherStationAdvanced;\r\n\r\n\tconstructor(public dialogRef: MatDialogRef<DeactivateWeatherStationDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: IWeatherStationAdvanced,\r\n\t\tprivate weatherStationsService: WeatherStationsService,\r\n\t\tprivate updateService: UpdateService) {\r\n\r\n\t\tthis.weatherStation = data;\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n\r\n\tpublic deactivate(): void {\r\n\t\tthis.weatherStationsService.changeActiveStatus(this.weatherStation.Id)\r\n\t\t\t.then(response => {\r\n\t\t\t\tif (response) {\r\n\t\t\t\t\tthis.updateService.deactivateWeatherStation(this.weatherStation.Id);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dialogRef.close();\r\n\t\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { HttpService, HttpServiceGetOptions } from '../../services/http.service';\r\nimport { IHistoricalETService, IHistoricalETViewModel, HistoricalETViewModel } from './interfaces';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\n\r\n\r\n@Injectable()\r\nexport class HistoricalETService implements IHistoricalETService {\r\n\r\n\tprivate urls = {\r\n\t\tget: (stationId: number) => `/v2/historical-et/${stationId}.json`\r\n\t}\r\n\r\n\tconstructor(private httpService: HttpService,\r\n\t) { }\r\n\r\n\tpublic async get(stationId: number, start: Date, end: Date): Promise<IHistoricalETViewModel[]> {\r\n\r\n\t\tlet options: HttpServiceGetOptions;\r\n\t\tlet params: HttpParams;\r\n\t\tlet result: IHistoricalETViewModel[];\r\n\r\n\t\tparams = new HttpParams()\r\n\t\t\t.set('start', DateUtility.ConvertToUTC(start).toISOString())\r\n\t\t\t.set('end', DateUtility.ConvertToUTC(end).toISOString());\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.get(stationId),\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: HistoricalETViewModel[]): IHistoricalETViewModel[] => {\r\n\t\t\t\tlet r: IHistoricalETViewModel[];\r\n\r\n\t\t\t\tr = [];\r\n\r\n\t\t\t\tfor (let item of response) {\r\n\t\t\t\t\tr.push({\r\n\t\t\t\t\t\tDate: DateUtility.DotNetToDate(item.Date),\r\n\t\t\t\t\t\tET: item.ET,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn r;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult = await this.httpService.get(options);\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","<admin-nav></admin-nav>\r\n<div class=\"bk-admin__page\">\r\n\r\n\t<h1>\r\n\t\t{{ stationName }} ({{ stationId }})\r\n\t</h1>\r\n\r\n\t<h5 class=\"bk-text--gray\">\r\n\t\t{{'ET Data in the last 180 days' | translate }}\r\n\t</h5>\r\n\r\n\t<div class=\"bk-chart\" #chartContainer></div>\r\n\r\n    <h5 class=\"bk-text--gray\">\r\n\t\t{{'Missing Records for Station' | translate }} {{ stationId }} {{ stationName }}\r\n\t</h5>\r\n\r\n    <div class=\"bk-data-table bk-data-table__weather-stations\">\r\n\r\n        <div class=\"bk-data-table__content\">\r\n            <mat-table [dataSource]=\"dataSource\" matSort>\r\n\r\n                <ng-container matColumnDef=\"Date\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Date' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.Date | date:'M/d/yyyy'}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"Status\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Status' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.Status}} </mat-cell>\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t\r\n\t\t\t\t<!--\r\n\t\t\t\t<ng-container matColumnDef=\"Action\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Status' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\" class=\"bk-data-table__cell-overflow\">\r\n                        \r\n\t\t\t\t\t\t<button type=\"button\"\r\n\t\t\t\t\t\t\tclass=\"bk-button bk-split-button__button\"\r\n\t\t\t\t\t\t\t(click)=\"rescan(row.Date)\">\r\n\t\t\t\t\t\t\t{{ 'Rescan' | translate }}\r\n\t\t\t\t\t\t</button>\r\n                    </mat-cell>\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t-->\r\n\r\n                <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n                <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\r\n\r\n            </mat-table>\r\n\r\n            <mat-paginator [pageSizeOptions]=\"[10, 25]\"></mat-paginator>\r\n        </div>\r\n    </div>\r\n</div>","import { Component, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { WeatherStationsService } from '../../models/weather-station-stats/service';\r\nimport { CIMISDayDataService } from './cimis-day-data.service';\r\nimport * as moment from 'moment';\r\nimport * as Highcharts from 'highcharts';\r\nimport { ICIMISDayDataViewModel, IHistoricalETViewModel, IMissingStationRecord } from './interfaces';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { HighChartsService } from '../../classes/highCharts.service';\r\nimport { HistoricalETService } from './historical-et.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'missing-station-records',\r\n\ttemplateUrl: 'missing-station-records.html'\r\n})\r\n\r\nexport class MissingStationRecordsComponent implements OnInit, OnDestroy {\r\n\tpublic dataSource: MatTableDataSource<IMissingStationRecord>;\r\n\r\n\tpublic displayedColumns: string[] = ['Date', 'Status' ];\r\n\r\n\t@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n\t@ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\tpublic stationId: number;\r\n\tpublic stationName: string;\r\n\r\n\t@ViewChild('chartContainer', { static: true }) private _chartContainer: ElementRef;\r\n\tprivate _chart: Highcharts.IndividualSeriesOptions[];\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _cimisDayDataService: CIMISDayDataService,\r\n\t\tprivate _historicalETService: HistoricalETService,\r\n\t\tprivate _route: ActivatedRoute,\r\n\t\tprivate _weatherStationService: WeatherStationsService,\r\n\t) {}\r\n\r\n\tngOnInit() {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis._route.queryParams.pipe(takeUntil(this._subscriptions$)).subscribe(params => {\r\n\t\t\tthis.stationId = params['stationId'];\r\n\t\t\tthis.stationName = params['name']\r\n\r\n\t\t\tthis._loadGraph();\r\n\r\n\t\t\tthis._weatherStationService.getMissingRecords(this.stationId).then((data) => {\r\n\t\t\t\tthis._setDataSource(data);\r\n\t\t\t});\r\n\t\t})\r\n\t}\r\n\r\n\tngOnDestroy() {}\r\n\r\n\tprivate _convertToGraphData(cimis: ICIMISDayDataViewModel[],\r\n\t\thistoricalET?: IHistoricalETViewModel[]): void {\r\n\r\n\t\tlet temp: {\r\n\t\t\tET: Highcharts.IndividualSeriesOptions,\r\n\t\t\thistoricalET?: Highcharts.IndividualSeriesOptions,\r\n\t\t\tRainfall?: Highcharts.IndividualSeriesOptions\r\n\t\t};\r\n\r\n\t\tif (!cimis || cimis.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttemp = {\r\n\t\t\tET: {\r\n\t\t\t\tname: 'CIMIS ET',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttype: 'line'\r\n\t\t\t},\r\n\t\t\tRainfall: {\r\n\t\t\t\tname: 'Rainfall',\r\n\t\t\t\tvisible: false,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttype: 'line'\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._chart = [];\r\n\r\n\t\tfor (let record of cimis) {\r\n\t\t\tlet d: number;\r\n\r\n\t\t\td = DateUtility.DateToUTC(record.Date);\r\n\t\t\ttemp.ET.data.push([d, record.ET]);\r\n\t\t\ttemp.Rainfall.data.push([d, record.Rainfall]);\r\n\t\t}\r\n\r\n\t\tthis._chart.push(temp.ET);\r\n\t\tthis._chart.push(temp.Rainfall);\r\n\r\n\t\t// historical ET is optional for some weather stations\r\n\t\tif (historicalET && historicalET.length > 0) {\r\n\t\t\ttemp.historicalET = {\r\n\t\t\t\tname: 'Historical ET',\r\n\t\t\t\tvisible: true,\r\n\t\t\t\tdata: [],\r\n\t\t\t\ttype: 'line'\r\n\t\t\t}\r\n\r\n\t\t\tfor (let record of historicalET) {\r\n\t\t\t\ttemp.historicalET.data.push([\r\n\t\t\t\t\tDateUtility.DateToUTC(record.Date), record.ET\r\n\t\t\t\t])\r\n\t\t\t}\r\n\r\n\t\t\tthis._chart.push(temp.historicalET);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _loadGraph(): void {\r\n\t\tlet start: moment.Moment;\r\n\t\tlet end: moment.Moment;\r\n\r\n\t\tstart = moment().subtract(180, 'day');\r\n\t\tend = moment(); // today\r\n\r\n\t\tlet promises: {\r\n\t\t\tcimis: Promise<ICIMISDayDataViewModel[]>,\r\n\t\t\thistoricalET: Promise<IHistoricalETViewModel[]>\r\n\t\t}\r\n\r\n\t\tpromises = {\r\n\t\t\tcimis: this._cimisDayDataService.get(this.stationId, start.toDate(), end.toDate()),\r\n\t\t\thistoricalET: this._historicalETService.get(this.stationId, start.toDate(), end.toDate())\r\n\t\t};\r\n\r\n\t\tPromise.all([promises.cimis, promises.historicalET]).then(([cimis, historicalET]) => {\r\n\t\t\tthis._convertToGraphData(cimis, historicalET);\r\n\t\t\tHighChartsService.drawGraph(this._chartContainer, this._chart);\r\n\t\t})\r\n\t}\r\n\r\n\tprivate _setDataSource(data: IMissingStationRecord[]): void {\r\n\t\tthis.dataSource = new MatTableDataSource(data);\r\n\t\tthis.dataSource.paginator = this.paginator;\r\n\t\tthis.dataSource.sort = this.sort;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { IWeatherAPIService, WeatherAPI } from './interfaces';\r\n\r\n@Injectable()\r\nexport class WeatherAPIService implements IWeatherAPIService {\r\n\tprivate urls = {\r\n\t\tlist: () => `/v2/weatherapis.json`\r\n\t}\r\n\r\n\tpublic apis: WeatherAPI[];\r\n\r\n\tconstructor(private httpService: HttpService) { }\r\n\r\n\tpublic list(): Promise<WeatherAPI[]> {\r\n\t\tif (this.apis && this.apis.length > 0) {\r\n\t\t\treturn of(this.apis).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.list(),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: function (json: WeatherAPI[]) {\r\n\t\t\t\tthis.apis = json;\r\n\t\t\t\treturn json;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\"\r\n     [ngClass]=\"{'bk-dialog__small' : view === weatherStationViewsEnum.DISCARDCHANGES || view === weatherStationViewsEnum.DELETECONFIRMATION }\">\r\n\r\n    <button type=\"button\"\r\n        class=\"bk-button bk-dialog__close\"\r\n        (click)=\"close()\">\r\n        <span>&times;</span>\r\n    </button>\r\n\r\n    <h4 mat-dialog-title> {{ title }} </h4>\r\n\r\n    <div *ngIf=\"weatherStation && view === weatherStationViewsEnum.FORM\"\r\n        mat-dialog-content \r\n        class=\"bk-dialog__split\">\r\n\r\n        <div class=\"bk-dialog__left bk-dialog__left--narrow\">\r\n            <form #weatherStationForm=\"ngForm\">\r\n\r\n                <label class=\"bk-dialog__form--label\">\r\n                    {{ 'Name' | translate }}\r\n                </label>\r\n\r\n                <input type=\"text\"\r\n                    class=\"bk-dialog__form--input\"\r\n                    [(ngModel)]=\"weatherStation.Name\"\r\n                    required\r\n                    name=\"name\"\r\n                    #name=\"ngModel\"\r\n                    [ngClass]=\"{'bk-input-invalid' : (showErrors || name.dirty) && name.errors }\"/>\r\n\r\n                <div *ngIf=\"(showErrors || name.dirty) && name.errors\"\r\n                    class=\"bk-dialog__form--invalid-text\" >\r\n                    {{ 'Name' | translate }} {{ 'is required' | translate}}\r\n                </div>\r\n\r\n                <label class=\"bk-dialog__form--label\">\r\n                    {{ 'External ID' | translate }}\r\n                </label>\r\n                <p>\r\n                    {{ 'External ID is the numerical code for the station. For example, 002 for Frezno.' | translate }}\r\n                </p>\r\n\r\n                <input type=\"number\"\r\n                    class=\"bk-dialog__form--input\"\r\n                    [(ngModel)]=\"weatherStation.External_Id\"\r\n                    required\r\n                    name=\"externalId\"\r\n                    #externalId=\"ngModel\"\r\n                    [ngClass]=\"{'bk-input-invalid' : showErrors && !isCIMISCodeValid }\"\r\n                    (ngModelChange)=\"validateCIMISCode(weatherStation.External_Id)\"/>\r\n\r\n                <div *ngIf=\"showErrors && !isCIMISCodeValid\"\r\n                    class=\"bk-dialog__form--invalid-text\" >\r\n                    {{ 'External ID' | translate }} {{ 'must be a number with no more than 3 digits' | translate}}\r\n                </div>\r\n\r\n                <label class=\"bk-dialog__form--label\">\r\n                    {{ 'API ID' | translate }} (Optional)\r\n                </label>\r\n                <p>\r\n                    {{ 'API ID is used for Hawaii weather stations that do not conform to CIMIS numerical IDs.' | translate}}\r\n                </p>\r\n\r\n                <input type=\"text\"\r\n                    class=\"bk-dialog__form--input\"\r\n                    [(ngModel)]=\"weatherStation.API_Id\"\r\n                    required\r\n                    name=\"API_Id\"\r\n                    #externalId=\"ngModel\"/>\r\n\r\n                <label class=\"bk-dialog__form--label\">\r\n                    {{ 'County' | translate }}\r\n                </label>\r\n\r\n                <input type=\"text\"\r\n                    class=\"bk-dialog__form--input\"\r\n                    [(ngModel)]=\"weatherStation.County\"\r\n                    required\r\n                    name=\"county\"\r\n                    #county=\"ngModel\"\r\n                    [ngClass]=\"{'bk-input-invalid' : (showErrors || county.dirty) && county.errors }\"/>\r\n\r\n                <div *ngIf=\"(showErrors || county.dirty) && county.errors\"\r\n                    class=\"bk-dialog__form--invalid-text\" >\r\n                    {{ 'County' | translate }} {{ 'is required' | translate}}\r\n                </div>\r\n\r\n                <label class=\"bk-dialog__form--label\">\r\n                    {{ 'Nearest City' | translate }}\r\n                </label>\r\n\r\n                <input type=\"text\"\r\n                    class=\"bk-dialog__form--input\"\r\n                    [(ngModel)]=\"weatherStation.NearestCity\"\r\n                    required\r\n                    name=\"nearestCity\"\r\n                    #nearestCity=\"ngModel\"\r\n                    [ngClass]=\"{'bk-input-invalid' : (showErrors || nearestCity.dirty) && nearestCity.errors }\"/>\r\n\r\n                <div *ngIf=\"(showErrors || nearestCity.dirty) && nearestCity.errors\"\r\n                    class=\"bk-dialog__form--invalid-text\" >\r\n                    {{ 'Nearest City' | translate }} {{ 'is required' | translate}}\r\n                </div>\r\n\r\n                <label class=\"bk-dialog__form--label\">\r\n                    {{ 'Region' | translate }}\r\n                </label>\r\n\r\n                <select class=\"bk-dialog__form--input\"\r\n                    [(ngModel)]=\"weatherStation.RegionId\"\r\n                    required\r\n                    name=\"regionId\" \r\n                    #regionId=\"ngModel\"\r\n                    [ngClass]=\"{'bk-input-invalid' : (showErrors || regionId.dirty) && regionId.errors }\">\r\n\r\n                    <option *ngIf=\"!weatherStation.Id\"\r\n                        value=\"null\"\r\n                        disabled\r\n                        selected>\r\n                            {{'Select a Region' | translate }}\r\n                        </option>\r\n\r\n                    <option *ngFor=\"let region of regions\"\r\n                        [ngValue]=\"region.Id\">\r\n                        {{region.Name}}\r\n                    </option>\r\n                </select>\r\n\r\n                <div *ngIf=\"(showErrors || regionId.dirty) && regionId.errors\"\r\n                    class=\"bk-dialog__form--invalid-text\">\r\n                    {{ 'Please select a' | translate }} {{ 'Region' | translate}}\r\n                </div>\r\n\r\n                <label class=\"bk-dialog__form--label\">\r\n                    {{ 'Coordinates' | translate }}\r\n                </label>\r\n\r\n                <input type=\"text\"\r\n                    class=\"bk-dialog__form--input\"\r\n                    [(ngModel)]=\"weatherStation.Coordinates\"\r\n                    (ngModelChange)=\"onCoordinatesTextChange(weatherStation.Coordinates)\" \r\n                    required\r\n                    name=\"coordinates\"\r\n                    #coordinates=\"ngModel\"\r\n                    [ngClass]=\"{'bk-input-invalid' : (showErrors || coordinates.dirty) && (coordinates.errors || !areCoordinatesValid)}\"/>\r\n\r\n                <div *ngIf=\"(showErrors || coordinates.dirty) && (coordinates.errors || !areCoordinatesValid)\"\r\n                    class=\"bk-dialog__form--invalid-text\">\r\n                    {{ 'Coordinates' | translate }} {{ 'must have valid latitude and longitude' | translate}}\r\n                </div>\r\n\r\n                <label class=\"bk-dialog__form--label\">\r\n                    {{ 'UC IPM Name' | translate }}\r\n                </label>\r\n                <p>\r\n                    UC Davis IPM (Integrated Pest Management) Name. (Obsolete)\r\n                </p>\r\n                <input type=\"text\" \r\n                    class=\"bk-dialog__form--input\"\r\n                    [(ngModel)]=\"weatherStation.UcIpmName\"\r\n                    [ngModelOptions]=\"{standalone: true}\"/>\r\n\r\n                <label class=\"bk-dialog__form--label\">\r\n                    {{ 'Weather API' | translate }}\r\n                </label>\r\n\r\n                <select class=\"bk-dialog__form--input\"\r\n                    [(ngModel)]=\"weatherStation.WeatherAPI_Id\"\r\n                    required\r\n                    name=\"WeatherAPI_Id\" \r\n                    #WeatherAPI_Id=\"ngModel\"\r\n                    [ngClass]=\"{'bk-input-invalid' : (showErrors || WeatherAPI_Id.dirty) && WeatherAPI_Id.errors }\">\r\n\r\n                    <option *ngIf=\"!weatherStation.Id\"\r\n                        value=\"null\"\r\n                        disabled\r\n                        selected>\r\n                            {{'Select API' | translate }}\r\n                        </option>\r\n\r\n                    <option *ngFor=\"let weatherAPI of weatherAPIs\"\r\n                        [ngValue]=\"weatherAPI.Id\">\r\n                        {{weatherAPI.Name}}\r\n                    </option>\r\n                </select>\r\n            </form>\r\n        </div>\r\n\r\n        <div class=\"bk-dialog__right\">\r\n            <div class=\"bk-dialog__map--instructions\">\r\n                {{ 'Weather Station Popup Map Instructions Text' | translate }}\r\n            </div>\r\n\r\n            <div class=\"bk-dialog__map--legend\">\r\n                <img class=\"bk-dialog__map--legend-station-icon\"\r\n                    src=\"../assets/images/icons/icon-weather-station-marker-24x24.svg\"> {{ 'Weather Station Location' | translate }}\r\n            </div>\r\n            \r\n            <div class=\"bk-dialog__map--container\">\r\n                <agm-map [mapTypeId]=\"'hybrid'\"\r\n                    [latitude]=\"mapParams.lat\"\r\n                    [longitude]=\"mapParams.lng\"\r\n                    [zoom]=\"mapParams.zoom\"\r\n                    (mapClick)=\"onMapClick($event)\"\r\n                    [fullscreenControl]=\"true\">\r\n\r\n                    <agm-marker *ngFor=\"let marker of markers\"\r\n                        [iconUrl]=\"'../assets/images/icons/icon-weather-station-marker-56x56.svg'\"  \r\n                        [latitude]=\"marker.lat\"\r\n                        [longitude]=\"marker.lng\">\r\n                    </agm-marker>\r\n\r\n                    <map-control></map-control>\r\n                </agm-map>\r\n            </div>\r\n        </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === weatherStationViewsEnum.DISCARDCHANGES\"\r\n        mat-dialog-content>\r\n\r\n        <div class=\"bk-dialog__paragraph\">\r\n            {{ 'The changes you made were not saved' | translate}}. {{'Discard changes' | translate}}?\r\n        </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === weatherStationViewsEnum.DELETECONFIRMATION\"\r\n        mat-dialog-content>\r\n\r\n        <div class=\"bk-dialog__paragraph\">\r\n            {{ 'Are you sure you want to delete the Weather Station' | translate}} {{weatherStation.Name | translate}}?\r\n        </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === weatherStationViewsEnum.FORM\"\r\n        mat-dialog-actions \r\n        align=\"end\">\r\n\r\n        <button *ngIf=\"weatherStation.Id && canBeDeleted\"\r\n            mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-dialog__button--secondary bk-dialog__button--left\" \r\n            (click)=\"switchView(weatherStationViewsEnum.DELETECONFIRMATION)\">\r\n            {{ 'Delete' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-dialog__button--secondary\"\r\n            (click)=\"close()\">\r\n            {{ 'Cancel' | translate }}\r\n        </button>\r\n\r\n        <button *ngIf=\"!weatherStation.Id\"\r\n            mat-button \r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"create()\">\r\n            {{ 'Add' | translate }}\r\n        </button>\r\n\r\n        <button *ngIf=\"weatherStation.Id\"\r\n            mat-button \r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"save()\">\r\n            {{ 'Save' | translate }}\r\n        </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === weatherStationViewsEnum.DISCARDCHANGES\"\r\n        mat-dialog-actions\r\n        align=\"end\">\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n            (click)=\"switchView(weatherStationViewsEnum.FORM)\">\r\n            {{ 'Keep Editing' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"close()\">\r\n            {{ 'Discard' | translate }}\r\n        </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"view === weatherStationViewsEnum.DELETECONFIRMATION\"\r\n        mat-dialog-actions\r\n        align=\"end\">\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n            (click)=\"switchView(weatherStationViewsEnum.FORM)\">\r\n            {{ 'Cancel' | translate }}\r\n        </button>\r\n\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"remove()\">\r\n            {{ 'Delete Weather Station' | translate }}\r\n        </button>\r\n    </div>\r\n</div>\r\n","import { Component, Inject, OnInit, ViewChild, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AgmMap } from '@agm/core';\r\n\r\nimport { WeatherStationsService } from '../../models/weather-station-stats/service';\r\nimport { MapControlDirective } from '../../directives/map-control.directive';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { ObjectUtility } from '../../classes/objectUtility';\r\n\r\nimport { IWeatherStationAdvanced, IWeatherStation, WeatherAPI } from './interfaces';\r\nimport { IWeatherStationRegion } from '../../models/region/interfaces';\r\nimport { CMCoordinates, iMapMarker, iMapClickEvent } from '../../interfaces/views/map';\r\nimport { eDialogFormViews } from '../../interfaces/constants';\r\nimport { httpStatusCodes, SuccessResponse } from '../../interfaces/interfaces';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { GeoLocation } from '../../classes/geolocation.class';\r\nimport { WeatherAPIService } from './weather-api.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'weather-station-dialog',\r\n\ttemplateUrl: 'weather-station-dialog.html'\r\n})\r\n\r\nexport class WeatherStationDialog implements OnInit, OnDestroy {\r\n\r\n\tpublic areCoordinatesValid = false;\r\n\tpublic canBeDeleted = false;\r\n\tpublic isCIMISCodeValid = false;\r\n\r\n\t// default to being centered on western united states\r\n\tpublic mapParams = {\r\n\t\tlat: 37.195 as number,\r\n\t\tlng: -116.486 as number,\r\n\t\tzoom: 5 as number\r\n\t}\r\n\r\n\tpublic markers: iMapMarker[] = new Array();\r\n\tpublic regions: IWeatherStationRegion[] = new Array();\r\n\r\n\t// fields to validate\r\n\tpublic readonly requiredFields: string[] = ['Name', 'External_Id', 'County', 'NearestCity', 'RegionId', 'WeatherAPI_Id'];\r\n\tpublic showErrors = false;\r\n\r\n\tpublic title = 'Edit Weather Station';\r\n\tpublic view: eDialogFormViews = eDialogFormViews.FORM;\r\n\tpublic weatherAPIs: WeatherAPI[];\r\n\tpublic weatherStation: IWeatherStation;\r\n\tpublic weatherStationViewsEnum = eDialogFormViews;\r\n\r\n\t@ViewChild(AgmMap, { static: false }) private map: AgmMap;\r\n\t@ViewChild(MapControlDirective, { static: false }) private mapControl: MapControlDirective;\r\n\tprivate _originalWeatherStation: IWeatherStation;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tpublic dialogRef: MatDialogRef<WeatherStationDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { weatherStation: IWeatherStationAdvanced, canBeDeleted: boolean },\r\n\t\tprivate _weatherAPIService: WeatherAPIService,\r\n\t\tprivate _weatherStationsService: WeatherStationsService,\r\n\t\tprivate _updateService: UpdateService) {\r\n\r\n\t\tlet coordinatesString: string;\r\n\r\n\t\tthis.weatherStation = this._convertWeatherStation(_data ? _data.weatherStation : null);\r\n\r\n\t\tif (_data) {\r\n\t\t\tthis.canBeDeleted = _data.canBeDeleted;\r\n\t\t}\r\n\r\n\t\tthis._originalWeatherStation = ObjectUtility.copy(this.weatherStation);\r\n\t\tthis.regions = this._updateService.weatherStationRegions;\r\n\r\n\t\tthis._weatherAPIService.list().then((d) => {\r\n\t\t\tthis.weatherAPIs = d;\r\n\t\t});\r\n\r\n\t\tif (!_data) {\r\n\t\t\tthis.title = 'Add Weather Station';\r\n\r\n\t\t\tif (this._updateService.currentLocation.lat && this._updateService.currentLocation.lng) {\r\n\t\t\t\tcoordinatesString = this._updateService.currentLocation.lat + ',' + this._updateService.currentLocation.lng;\r\n\t\t\t\tthis.centerMap(coordinatesString);\r\n\t\t\t} else {\r\n\t\t\t\tGeoLocation.getCoordinates().then(position => {\r\n\t\t\t\t\tif (position.coords.latitude && position.coords.longitude) {\r\n\t\t\t\t\t\tthis._updateService.setCurrentLocation(Number(position.coords.latitude), Number(position.coords.longitude));\r\n\t\t\t\t\t\tcoordinatesString = position.coords.latitude + ',' + position.coords.longitude;\r\n\t\t\t\t\t\tthis.centerMap(coordinatesString);\r\n\t\t\t\t\t}\r\n\t\t\t\t}).catch((reason: any) => {\r\n\t\t\t\t\t// we need to catch the error triggered by\r\n\t\t\t\t\t// a user not sharing his/her location\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.centerMap(this.weatherStation.Coordinates);\r\n\t\tthis.placeMarker(this.weatherStation.Coordinates);\r\n\r\n\t\tthis.areCoordinatesValid = true;\r\n\t\tthis.isCIMISCodeValid = true;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.dialogRef.backdropClick().pipe(takeUntil(this._subscriptions$)).subscribe((e: MouseEvent) => {\r\n\t\t\tthis.close(e);\r\n\t\t});\r\n\r\n\t\tthis._updateService.closeModalSubscription.pipe(takeUntil(this._subscriptions$)).subscribe(event => this.dialogRef.close());\r\n\r\n\t\tthis._updateService.weatherStationRegionsList$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(weatherStationRegions => this.regions = weatherStationRegions);\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic close(e?: MouseEvent): void {\r\n\r\n\t\tif (!this.weatherStation || !this._originalWeatherStation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.view === eDialogFormViews.DELETECONFIRMATION) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.view === eDialogFormViews.DISCARDCHANGES) {\r\n\t\t\tthis.dialogRef.close();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (ObjectUtility.isEqual(this.weatherStation, this._originalWeatherStation)) {\r\n\t\t\tthis.dialogRef.close();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.switchView(eDialogFormViews.DISCARDCHANGES);\r\n\t}\r\n\r\n\tpublic onMapClick(event: iMapClickEvent): void {\r\n\t\tlet coordinatesString: string;\r\n\r\n\t\tif (!event || !event.coords || !event.coords.lat || !event.coords.lng) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcoordinatesString = event.coords.lat + ',' + event.coords.lng;\r\n\r\n\t\tthis.weatherStation.Coordinates = coordinatesString;\r\n\t\tthis.placeMarker(coordinatesString);\r\n\r\n\t\tthis.areCoordinatesValid = true;\r\n\t}\r\n\r\n\tpublic onCoordinatesTextChange(coordinatesString: string): void {\r\n\t\tlet coordinates: CMCoordinates;\r\n\r\n\t\t// using this as validation (if null, invalid string)\r\n\t\tcoordinates = ValidateService.getCoordinatesFromString(coordinatesString);\r\n\r\n\t\tif (!coordinates) {\r\n\t\t\tthis.areCoordinatesValid = false;\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tthis.placeMarker(coordinatesString);\r\n\t\tthis.areCoordinatesValid = true;\r\n\t}\r\n\r\n\tpublic isStationValid(): boolean {\r\n\t\tif (!this.weatherStation.Name || !this.weatherStation.External_Id ||\r\n\t\t\t!this.weatherStation.County || !this.weatherStation.NearestCity ||\r\n\t\t\t!this.weatherStation.RegionId || !this.weatherStation.WeatherAPI_Id) {\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn this.areCoordinatesValid && this.isCIMISCodeValid;\r\n\t}\r\n\r\n\tpublic create(): void {\r\n\t\tthis.showErrors = true;\r\n\r\n\t\tif (!this.isStationValid()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._weatherStationsService.create(this.weatherStation)\r\n\t\t\t.then(weatherStation => {\r\n\t\t\t\tif (weatherStation) {\r\n\t\t\t\t\tweatherStation.RegionName = this.regions.filter(x => x.Id === weatherStation.RegionId)[0].Name;\r\n\t\t\t\t\tthis._updateService.createWeatherStation(weatherStation);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dialogRef.close()\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic save(): void {\r\n\t\tthis.showErrors = true;\r\n\r\n\t\tif (!this.isStationValid()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._weatherStationsService.update(this.weatherStation)\r\n\t\t\t.then(response => {\r\n\t\t\t\tlet successResponse: SuccessResponse;\r\n\r\n\t\t\t\tsuccessResponse = response as SuccessResponse;\r\n\r\n\t\t\t\tif (successResponse && successResponse.Message) {\r\n\t\t\t\t\tthis.weatherStation.RegionName = this.regions.filter(x => x.Id === this.weatherStation.RegionId)[0].Name;\r\n\t\t\t\t\tthis._updateService.updateWeatherStation(this.weatherStation);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dialogRef.close()\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic remove(): void {\r\n\t\tthis.showErrors = true;\r\n\r\n\t\tif (!this.isStationValid()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._weatherStationsService.delete(this.weatherStation.Id)\r\n\t\t\t.then(response => {\r\n\t\t\t\tif (response && response.code === httpStatusCodes.success) {\r\n\t\t\t\t\tthis._updateService.deleteWeatherStation(this.weatherStation);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dialogRef.close();\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic validateCIMISCode(cimisCode: number): void {\r\n\t\tthis.isCIMISCodeValid = ValidateService.isValidNumber(cimisCode) && cimisCode <= 1000;\r\n\t}\r\n\r\n\tpublic switchView(view: eDialogFormViews): void {\r\n\t\tthis.view = view;\r\n\r\n\t\tif (this.view === eDialogFormViews.DELETECONFIRMATION) {\r\n\t\t\tthis.title = 'Delete Weather Station';\r\n\t\t} else {\r\n\t\t\tthis.title = this.weatherStation.Id ? 'Edit Weather Station' : 'Add Weather Station';\r\n\t\t}\r\n\r\n\t\tif (view === eDialogFormViews.DELETECONFIRMATION || view === eDialogFormViews.DISCARDCHANGES) {\r\n\t\t\tthis.dialogRef.updateSize('460px');\r\n\t\t} else {\r\n\t\t\tthis.dialogRef.updateSize('980px');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _convertWeatherStation(weatherStation?: IWeatherStationAdvanced): IWeatherStation {\r\n\t\tlet result: IWeatherStation;\r\n\r\n\t\tif (weatherStation) {\r\n\t\t\tresult = {\r\n\t\t\t\tId: weatherStation.Id,\r\n\t\t\t\tName: weatherStation.Name,\r\n\t\t\t\tExternal_Id: weatherStation.ExternalId,\r\n\t\t\t\tNearestCity: weatherStation.NearestCity,\r\n\t\t\t\tCounty: weatherStation.County,\r\n\t\t\t\tCoordinates: weatherStation.Coordinates,\r\n\t\t\t\tUcIpmName: weatherStation.UcIpmName,\r\n\t\t\t\tRegionId: weatherStation.RegionId,\r\n\t\t\t\tWeatherAPI_Id: weatherStation.WeatherAPI_Id,\r\n\t\t\t\tAPI_Id: weatherStation.API_Id,\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tresult = {\r\n\t\t\t\tId: null,\r\n\t\t\t\tName: null,\r\n\t\t\t\tExternal_Id: null,\r\n\t\t\t\tNearestCity: null,\r\n\t\t\t\tCounty: null,\r\n\t\t\t\tCoordinates: null,\r\n\t\t\t\tUcIpmName: null,\r\n\t\t\t\tRegionId: null,\r\n\t\t\t\tWeatherAPI_Id: null,\r\n\t\t\t\tAPI_Id: null\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate centerMap(coordinatesString: string): void {\r\n\t\tlet coordinates: CMCoordinates;\r\n\t\tlet zoom = 10;\r\n\r\n\t\tcoordinates = ValidateService.getCoordinatesFromString(coordinatesString);\r\n\r\n\t\tif (!coordinates) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.mapParams = {\r\n\t\t\tlat: coordinates.lat,\r\n\t\t\tlng: coordinates.lng,\r\n\t\t\tzoom: zoom\r\n\t\t}\r\n\r\n\t\tif (!this.map || !this.mapControl) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.map.triggerResize()\r\n\t\t\t.then(event => {\r\n\t\t\t\tthis.mapControl.centerMap(this.mapParams.lat, this.mapParams.lng);\r\n\t\t\t\tthis.mapControl.setZoom(this.mapParams.zoom);\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate placeMarker(coordinatesString: string): void {\r\n\t\tlet coordinates: CMCoordinates;\r\n\t\tlet marker: iMapMarker;\r\n\r\n\t\tcoordinates = ValidateService.getCoordinatesFromString(coordinatesString);\r\n\r\n\t\tif (!coordinates) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.markers = new Array();\r\n\r\n\t\tmarker = {\r\n\t\t\tlat: coordinates.lat,\r\n\t\t\tlng: coordinates.lng\r\n\t\t}\r\n\r\n\t\tthis.markers.push(marker);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n    <button type=\"button\"\r\n        class=\"bk-button bk-dialog__close\"\r\n        (click)=\"close()\">\r\n        <span>&times;</span>\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>{{ title }} (#{{number}}) {{ 'Usage Details' | translate}}</h4>\r\n\r\n    <div mat-dialog-content>\r\n        <div class=\"bk-weather-station-stats__summary\" *ngIf=\"summary\">\r\n            <div class=\"bk-weather-station-stats__summary--column\">\r\n                <div class=\"bk-weather-station-stats__summary--label\">{{ 'Name' | translate}}</div>\r\n                <div class=\"bk-weather-station-stats__summary--value\">{{ summary.Name }}</div>\r\n            </div>\r\n\r\n            <div class=\"bk-weather-station-stats__summary--column\">\r\n                <div class=\"bk-weather-station-stats__summary--label\">{{ 'Nearest City' | translate}}</div>\r\n                <div class=\"bk-weather-station-stats__summary--value\">{{ summary.NearestCity }}</div>\r\n            </div>\r\n\r\n            <div class=\"bk-weather-station-stats__summary--column\">\r\n                <div class=\"bk-weather-station-stats__summary--label\">{{ 'County' | translate}}</div>\r\n                <div class=\"bk-weather-station-stats__summary--value\">{{ summary.County }}</div>\r\n            </div>\r\n\r\n            <div class=\"bk-weather-station-stats__summary--column\">\r\n                <div class=\"bk-weather-station-stats__summary--label\">{{ 'Region' | translate}}</div>\r\n                <div class=\"bk-weather-station-stats__summary--value\">{{ summary.RegionName }}</div>\r\n            </div>\r\n\r\n            <div class=\"bk-weather-station-stats__summary--column\">\r\n                <div class=\"bk-weather-station-stats__summary--label\">{{ 'Station' | translate}} #</div>\r\n                <div class=\"bk-weather-station-stats__summary--value\">{{ summary.ExternalId }}</div>\r\n            </div>\r\n\r\n            <div class=\"bk-weather-station-stats__summary--column\">\r\n                <div class=\"bk-weather-station-stats__summary--label\">{{ 'Added a Total of' | translate}}</div>\r\n                <div class=\"bk-weather-station-stats__summary--value\">{{ summary.RainfallCount }} {{ 'Rainfall Events' | translate }}</div>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"bk-weather-station-stats__date-filter\">\r\n            <div class=\"bk-weather-station-stats__date-filter--range\">\r\n                <my-date-picker #startDatePicker [(ngModel)]=\"startDateFilter\" [options]=\"startDateFilterOptions\" (dateChanged)=\"startDateFilterChanged($event)\"\r\n                                [ngClass]=\"{'bk-input-invalid--datepicker' : !isDateRangeValid.startDate}\"></my-date-picker>\r\n                <div class=\"bk-weather-station-stats__date-filter--range-text\">{{ 'to' | translate}}</div>\r\n                <my-date-picker #endDatePicker [(ngModel)]=\"endDateFilter\" [options]=\"endDateFilterOptions\" (dateChanged)=\"endDateFilterChanged($event)\"\r\n                                [ngClass]=\"{'bk-input-invalid--datepicker' : !isDateRangeValid.endDate}\"></my-date-picker>\r\n            </div>\r\n            <div class=\"bk-weather-station-stats__date-filter--totals\" *ngIf=\"summary\">\r\n                <div class=\"bk-weather-station-stats__date-filter--totals-text\">\r\n                    {{summary.RanchCount}} {{ 'Ranch' | plural: summary.RanchCount | translate}}\r\n                </div>\r\n                <div class=\"bk-weather-station-stats__date-filter--totals-text\">\r\n                    {{summary.RecommendationCount}} {{ 'Recommendation' | plural: summary.RecommendationCount | translate}}\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"bk-weather-station-stats__usage\">\r\n            <div class=\"bk-weather-station-stats__usage--header\" *ngIf=\"summary && summary.RanchCount > 0 && summary.RecommendationCount > 0\">\r\n                {{ 'Usage Statistics' | translate}}\r\n            </div>\r\n\r\n            <div class=\"bk-weather-station-stats__chart\" [hidden]=\"summary && (summary.RanchCount == 0 || summary.RecommendationCount == 0)\">\r\n                <div class=\"bk-weather-station-stats__chart-container\" #chartContainer></div>\r\n            </div>\r\n\r\n            <div class=\"bk-weather-station-stats__usage--header\" *ngIf=\"summary && summary.RanchCount > 0 && summary.RecommendationCount > 0\">\r\n                {{ 'Recommendations Distribution' | translate}}\r\n            </div>\r\n\r\n            <div class=\"bk-weather-station-stats__distribution\" *ngIf=\"summary && summary.RanchCount > 0 && summary.RecommendationCount > 0\">\r\n                <div class=\"bk-weather-station-stats__distribution-tabs\">\r\n                    <div class=\"bk-weather-station-stats__distribution-tab\" [class.bk-weather-station-stats__distribution-tab--selected]=\"viewByRanch\"\r\n                         (click)=\"viewByRanch = true\">\r\n                        {{ 'View by Ranch' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-weather-station-stats__distribution-tab\" [class.bk-weather-station-stats__distribution-tab--selected]=\"!viewByRanch\"\r\n                         (click)=\"viewByRanch = false\">\r\n                        {{ 'View by Commodity' | translate }}\r\n                    </div>\r\n                </div>\r\n\r\n                <div class=\"bk-weather-station-stats__distribution-content\">\r\n                    <table class=\"bk-weather-station-stats__distribution-table\" *ngIf=\"distributionByRanchRows\" [hidden]=\"!viewByRanch\">\r\n                        <thead>\r\n\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t<th width=\"10%\">{{ 'Id' | translate }}</th>\r\n\t\t\t\t\t\t\t\t<th width=\"20%\">{{ 'Ranch' | translate }}</th>\r\n\t\t\t\t\t\t\t\t<th width=\"30%\">{{ 'Used in' | translate }}</th>\r\n\t\t\t\t\t\t\t\t<th width=\"40%\">{{ 'Commodity' | translate }}</th>\r\n\t\t\t\t\t\t\t</tr>\r\n                        </thead>\r\n                        <tbody>\r\n\t\t\t\t\t\t\t<tr *ngFor=\"let row of distributionByRanchRows\">\r\n\t\t\t\t\t\t\t\t<td>{{ row.Id }}</td>\r\n\t\t\t\t\t\t\t\t<td>{{ row.RanchName }}</td>\r\n\t\t\t\t\t\t\t\t<td>{{ row.RecommendationCount }} {{ 'Recommendation' | plural: row.RecommendationCount | translate }}</td>\r\n\t\t\t\t\t\t\t\t<td>{{ row.CommodityNames | stringifyList }}</td>\r\n\t\t\t\t\t\t\t</tr>\r\n                        </tbody>\r\n                    </table>\r\n\r\n                    <table class=\"bk-weather-station-stats__distribution-table\" *ngIf=\"distributionByCommodityRows\" [hidden]=\"viewByRanch\">\r\n                        <thead>\r\n                            <tr>\r\n                                <th class=\"bk-weather-station-stats__distribution-table--col-1\">{{ 'Commodity' | translate }}</th>\r\n                                <th class=\"bk-weather-station-stats__distribution-table--col-2\">{{ 'Used in' | translate }}</th>\r\n                                <th class=\"bk-weather-station-stats__distribution-table--col-3\">{{ 'Ranch' | translate }}</th>\r\n                            </tr>\r\n                        </thead>\r\n                        <tbody>\r\n                            <tr *ngFor=\"let row of distributionByCommodityRows\">\r\n                                <td>{{ row.CommodityName }}</td>\r\n                                <td>{{ row.RecommendationCount }} {{ 'Recommendation' | plural: row.RecommendationCount | translate }}</td>\r\n                                <td>{{ row.RanchNames | stringifyList }}</td>\r\n                            </tr>\r\n                        </tbody>\r\n                    </table>\r\n                </div>\r\n            </div>\r\n\r\n             <div class=\"bk-weather-station-stats__usage--header\" *ngIf=\"summary && (summary.RanchCount == 0 || summary.RecommendationCount == 0)\">\r\n                {{ 'There is no Data for this Weather Station in this Date Range' | translate}}\r\n            </div>\r\n        </div>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n        <button mat-button\r\n            class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n            (click)=\"close()\">\r\n            {{ 'Done' | translate }}\r\n        </button>\r\n    </div>\r\n</div>\r\n","import { Component, Inject, OnInit, ViewChild, ElementRef, OnDestroy } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { IMyDpOptions, IMyDateModel, MyDatePicker } from 'mydatepicker';\r\n\r\nimport { WeatherStationsService } from '../../models/weather-station-stats/service';\r\nimport { WeatherStationStatsCharts } from './weatherStationStatsCharts';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { UpdateService } from '../../services/update.service';\r\n\r\nimport {\r\n\tIWeatherStationStatsDetails, IWeatherStationStats, IWeatherStationStatsGraphData,\r\n\tIWeatherStationGraphRecord, IWeatherStationDistributionByRanch, IWeatherStationDistributionByCommodity\r\n} from './interfaces';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'weather-station-stats-dialog',\r\n\ttemplateUrl: 'weather-station-stats-dialog.html'\r\n})\r\n\r\nexport class WeatherStationStatsDialog implements OnInit, OnDestroy {\r\n\t@ViewChild('chartContainer', { static: true }) chartContainer: ElementRef;\r\n\r\n\tpublic startDateFilter: { jsdate: Date } = { jsdate: new Date() };\r\n\tpublic endDateFilter: { jsdate: Date } = { jsdate: new Date() };\r\n\tpublic startDateFilterOptions: IMyDpOptions = {\r\n\t\tshowClearDateBtn: false\r\n\t};\r\n\tpublic endDateFilterOptions: IMyDpOptions = {\r\n\t\tshowClearDateBtn: false\r\n\t};\r\n\tpublic isDateRangeValid = {\r\n\t\tstartDate: true as boolean,\r\n\t\tendDate: true as boolean\r\n\t}\r\n\r\n\tpublic title: string;\r\n\tpublic number: string;\r\n\tpublic summary: IWeatherStationStats;\r\n\tpublic distributionByRanchRows: IWeatherStationDistributionByRanch[];\r\n\tpublic distributionByCommodityRows: IWeatherStationDistributionByCommodity[];\r\n\tpublic viewByRanch  = true;\r\n\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tprivate weatherStationId: number;\r\n\r\n\tconstructor(public dialogRef: MatDialogRef<WeatherStationStatsDialog>,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: { id: number, startDate: Date, endDate: Date },\r\n\t\tprivate weatherStationsService: WeatherStationsService,\r\n\t\tprivate updateService: UpdateService) {\r\n\t\tlet maxDate: Date = DateUtility.addDays(new Date(), 1);\r\n\r\n\t\tthis.weatherStationId = data.id;\r\n\t\tthis.startDateFilter.jsdate = data.startDate;\r\n\t\tthis.endDateFilter.jsdate = data.endDate;\r\n\r\n\t\tthis.startDateFilterOptions.disableSince = {\r\n\t\t\tyear: maxDate.getFullYear(),\r\n\t\t\tmonth: maxDate.getMonth() + 1,\r\n\t\t\tday: maxDate.getDate()\r\n\t\t};\r\n\t\tthis.endDateFilterOptions.disableSince = {\r\n\t\t\tyear: maxDate.getFullYear(),\r\n\t\t\tmonth: maxDate.getMonth() + 1,\r\n\t\t\tday: maxDate.getDate()\r\n\t\t};\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.getWeatherStationStatsDetails(this.data.startDate, this.data.endDate);\r\n\t\tthis.updateService.closeModalSubscription.pipe(takeUntil(this._subscriptions$)).subscribe(event => this.dialogRef.close());\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic getWeatherStationStatsDetails(startDate: Date, endDate: Date): void {\r\n\t\tlet daily = false;\r\n\r\n\t\tthis.weatherStationsService.getStats(this.weatherStationId, startDate, endDate)\r\n\t\t\t.then(response => {\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.summary = response.Summary;\r\n\t\t\t\tthis.title = this.summary.Name;\r\n\t\t\t\tthis.number = this.summary.ExternalId;\r\n\r\n\t\t\t\tthis.distributionByRanchRows = response.DistributionByRanch;\r\n\t\t\t\tthis.distributionByCommodityRows = response.DistributionByCommodity;\r\n\r\n\t\t\t\tif (startDate.getMonth() === endDate.getMonth()) {\r\n\t\t\t\t\tdaily = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.summary.RanchCount > 0 && this.summary.RecommendationCount > 0) {\r\n\t\t\t\t\tthis.generateGraph(response.Graph, daily);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic startDateFilterChanged(date: IMyDateModel): void {\r\n\t\tlet startDate: Date;\r\n\t\tlet endDate: Date;\r\n\r\n\t\t// reset end date validation\r\n\t\tendDate = this.endDateFilter ? this.endDateFilter.jsdate : null;\r\n\t\tthis.isDateRangeValid.endDate = endDate && endDate instanceof Date;\r\n\r\n\t\tif (!date || !date.jsdate) {\r\n\t\t\tthis.isDateRangeValid.startDate = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tstartDate = date.jsdate;\r\n\r\n\t\tthis.isDateRangeValid.startDate = this.isDateRangeValid.endDate ? startDate <= endDate : true;\r\n\r\n\t\tif (this.isDateRangeValid.startDate && this.isDateRangeValid.endDate) {\r\n\t\t\tthis.getWeatherStationStatsDetails(startDate, endDate);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic endDateFilterChanged(date: IMyDateModel): void {\r\n\t\tlet startDate: Date;\r\n\t\tlet endDate: Date;\r\n\r\n\t\t// reset end date validation\r\n\t\tstartDate = this.startDateFilter ? this.startDateFilter.jsdate : null;\r\n\t\tthis.isDateRangeValid.startDate = startDate && startDate instanceof Date;\r\n\r\n\t\tif (!date || !date.jsdate) {\r\n\t\t\tthis.isDateRangeValid.endDate = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tendDate = date.jsdate;\r\n\r\n\t\tthis.isDateRangeValid.endDate = this.isDateRangeValid.startDate ? endDate >= startDate : true;\r\n\r\n\t\tif (this.isDateRangeValid.startDate && this.isDateRangeValid.endDate) {\r\n\t\t\tthis.getWeatherStationStatsDetails(startDate, endDate);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n\r\n\tprivate generateGraph(graphRecords: IWeatherStationGraphRecord[], daily: boolean): void {\r\n\t\tlet graphData: IWeatherStationStatsGraphData;\r\n\t\tlet params: { graphData: IWeatherStationStatsGraphData, daily: boolean };\r\n\r\n\t\tif (!graphRecords || !this.chartContainer) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tgraphData = WeatherStationStatsCharts.convertData(graphRecords);\r\n\r\n\t\tparams = { graphData: graphData, daily: daily };\r\n\r\n\t\tWeatherStationStatsCharts.generateHighchart(this.chartContainer.nativeElement, params);\r\n\t}\r\n}\r\n","<admin-nav></admin-nav>\r\n<div class=\"bk-admin__page\">\r\n\r\n    <h5 class=\"bk-text--gray\">{{'Weather Stations' | translate }}</h5>\r\n\r\n    <div class=\"bk-data-table bk-data-table__weather-stations\">\r\n        <div class=\"bk-data-table__head\">\r\n            <div class=\"bk-data-table__title\">\r\n                {{ 'CIMIS Weather Stations' | translate}}\r\n                <button class=\"bk-button bk-data-table__title--button-right\" (click)=\"openWeatherStationDialog()\">\r\n                    <span class=\"bk-data-table__plus-icon\">+</span> {{ 'Add' | translate}}\r\n                </button>\r\n            </div>\r\n            <div class=\"bk-data-table__search\">\r\n                <div class=\"bk-data-table__date-range\">\r\n                    <label>\r\n\t\t\t\t\t\t{{ 'Show Data From' | translate }}\r\n\t\t\t\t\t</label>\r\n                    <my-date-picker  #startDatePicker [(ngModel)]=\"startDateFilter\" [options]=\"startDateFilterOptions\" (dateChanged)=\"startDateFilterChanged($event)\"\r\n                                    [ngClass]=\"{'bk-input-invalid--datepicker' : !isDateRangeValid.startDate}\"></my-date-picker>\r\n                    <label>\r\n\t\t\t\t\t\t{{ 'to' | translate}}\r\n\t\t\t\t\t</label>\r\n                    <my-date-picker #endDatePicker [(ngModel)]=\"endDateFilter\" [options]=\"endDateFilterOptions\" (dateChanged)=\"endDateFilterChanged($event)\"\r\n                                    [ngClass]=\"{'bk-input-invalid--datepicker' : !isDateRangeValid.endDate}\"></my-date-picker>\r\n                </div>\r\n                <label class=\"bk-data-table__search--label\">\r\n                    {{ 'Filter By' | translate }}\r\n                    <input class=\"bk-data-table__search--input\" (keyup)=\"search($event.target.value)\" placeholder=\"Station, Nearest City, County, Code\" [(ngModel)]=\"filterValue\"/>\r\n                </label>\r\n                <select class=\"bk-data-table__search--select\" [(ngModel)]=\"regionId\" (ngModelChange)=\"filterByRegion(regionId)\">\r\n                    <option [ngValue]=\"null\">\r\n\t\t\t\t\t\t{{ 'All Regions' | translate}}\r\n\t\t\t\t\t</option>\r\n                    <option *ngFor=\"let region of regions\" [ngValue]=\"region.Id\">{{region.Name}}</option>\r\n                </select>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"bk-data-table__content\">\r\n            <mat-table [dataSource]=\"dataSource\" matSort>\r\n\r\n                <ng-container matColumnDef=\"Name\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Station' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.Name}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"NearestCity\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Nearest City' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.NearestCity}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"County\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'County' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.County}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"RegionName\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Region' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\">{{row.RegionName}}</mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"ExternalId\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'External ID' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.ExternalId}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"MissingRecords\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header> {{ 'Missing Records' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\">\r\n                        {{row.MissingRecords}}\r\n                    </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"RanchCount\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header start=\"desc\"> {{ 'Ranches' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.RanchCount}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"RecommendationCount\">\r\n                    <mat-header-cell *matHeaderCellDef mat-sort-header start=\"desc\"> {{ 'Recommendations' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\"> {{row.RecommendationCount}} </mat-cell>\r\n                </ng-container>\r\n\r\n                <ng-container matColumnDef=\"Action\">\r\n                    <mat-header-cell *matHeaderCellDef> {{ 'Actions' | translate }} </mat-header-cell>\r\n                    <mat-cell *matCellDef=\"let row\" class=\"bk-data-table__cell-overflow\">\r\n                        \r\n                        <div class=\"bk-split-button__group\">\r\n                            <button type=\"button\"\r\n                                class=\"bk-button bk-split-button__button\"\r\n                                (click)=\"openWeatherStationStatsDialog(row.Id)\"\r\n                                *ngIf=\"row.Active\">\r\n                                {{ 'View' | translate }}\r\n                            </button>\r\n                            <button type=\"button\"\r\n                                class=\"bk-button bk-split-button__button\"\r\n                                (click)=\"activate(row.Id)\"\r\n                                *ngIf=\"!row.Active\">\r\n                                {{ 'Activate' | translate }}\r\n                            </button>\r\n                            <div class=\"bk-split-button__group--dropdown\" ngbDropdown role=\"group\">\r\n                                <button class=\"bk-button bk-split-button__dropdown-toggle\"\r\n                                    ngbDropdownToggle>\r\n                                </button>\r\n                                <div class=\"bk-split-button__dropdown-menu\" ngbDropdownMenu>\r\n                                    <button class=\"bk-button bk-split-button__dropdown-menu-item\"\r\n                                        (click)=\"openWeatherStationDialog(row)\">\r\n                                        {{ 'Edit' | translate }}\r\n                                    </button>\r\n                                    <button class=\"bk-button bk-split-button__dropdown-menu-item\"\r\n                                        (click)=\"update(row.Id)\"\r\n                                        *ngIf=\"row.Active\">\r\n                                        {{ 'Update' | translate }}\r\n                                    </button>\r\n                                    <button class=\"bk-button bk-split-button__dropdown-menu-item\"\r\n                                        *ngIf=\"row.Active\" \r\n                                        (click)=\"openDeactivateWeatherStationDialog(row)\">\r\n                                        {{ 'Deactivate' | translate }}\r\n                                        <i class='fa fa-warning' *ngIf=\"row.AllowToDeactivate === false\"\r\n                                            title='This weather station is associated with at least one ranch'>\r\n                                        </i>\r\n                                    </button>\r\n                                    <button class=\"bk-button bk-split-button__dropdown-menu-item\"\r\n                                        (click)=\"details(row)\">\r\n                                        {{ 'Details' | translate }}\r\n                                    </button>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n\r\n\r\n                    </mat-cell>\r\n                </ng-container>\r\n\r\n                <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n                <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\r\n\r\n            </mat-table>\r\n\r\n            <div class=\"bk-data-table__empty\" *ngIf=\"weatherStations.length && dataSource && dataSource.filteredData && dataSource.filteredData.length === 0\">\r\n                {{ 'There are no Weather Stations matching' | translate }} <span class=\"bk-data-table__empty--filter\">\"{{dataSource.filter}}\"</span>\r\n            </div>\r\n\r\n            <div class=\"bk-data-table__empty\" *ngIf=\"originalWeatherStations.length && !weatherStations.length\">\r\n                {{ 'There are no Weather Stations in the specified Region' | translate }}\r\n            </div>\r\n\r\n            <div class=\"bk-data-table__empty\" *ngIf=\"!originalWeatherStations.length\">\r\n                {{ 'Currently there are no Weather Stations available' | translate }}\r\n            </div>\r\n\r\n            <mat-paginator [pageSizeOptions]=\"[10, 25]\"></mat-paginator>\r\n        </div>\r\n    </div>\r\n</div>","import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { IMyDpOptions, IMyDateModel, MyDatePicker } from 'mydatepicker';\r\n\r\nimport { WeatherStationsService } from '../../models/weather-station-stats/service';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { WeatherStationDialog } from './weather-station-dialog';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { WeatherStationStatsDialog } from './weather-station-stats-dialog';\r\nimport { DeactivateWeatherStationDialog } from './deactivate-weather-station-dialog';\r\nimport { ObjectUtility } from '../../classes/objectUtility';\r\n\r\nimport { INotificationParams, SuccessResponse } from '../../interfaces/interfaces';\r\nimport { IWeatherStationAdvanced } from './interfaces';\r\nimport { IWeatherStationRegion } from '../../models/region/interfaces';\r\nimport { eNotificationTypes } from '../../interfaces/constants';\r\nimport { WeatherStation } from './weatherStation';\r\nimport { NavigationExtras, Router } from '@angular/router';\r\nimport { TokenService } from '../../services/token.service';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'weather-stations',\r\n\ttemplateUrl: 'weather-stations.component.html'\r\n})\r\n\r\nexport class WeatherStationsComponent implements OnInit, OnDestroy {\r\n\t@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n\t@ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\t@ViewChild('startDatePicker', { static: true }) startDatePicker: MyDatePicker;\r\n\t@ViewChild('endDatePicker', { static: true }) endDatePicker: MyDatePicker;\r\n\r\n\tprivate defaultStartdate: Date = new Date(2011, 0, 1);\r\n\tprivate defaultEndDate: Date = new Date();\r\n\r\n\tpublic dataSource: MatTableDataSource<IWeatherStationAdvanced>;\r\n\tpublic weatherStations: IWeatherStationAdvanced[] = new Array();\r\n\tpublic originalWeatherStations: IWeatherStationAdvanced[] = new Array();\r\n\tpublic regions: IWeatherStationRegion[] = new Array();\r\n\tpublic regionId: number = null;\r\n\r\n\tpublic displayedColumns: string[] = ['Name', 'NearestCity', 'County', 'RegionName',\r\n\t\t'ExternalId', 'MissingRecords', 'RanchCount', 'RecommendationCount', 'Action'];\r\n\r\n\tpublic startDateFilter: { jsdate: Date };\r\n\tpublic endDateFilter: { jsdate: Date } = { jsdate: this.defaultEndDate };\r\n\tpublic startDateFilterOptions: IMyDpOptions = {\r\n\t\tshowClearDateBtn: false\r\n\t};\r\n\tpublic endDateFilterOptions: IMyDpOptions = {\r\n\t\tshowClearDateBtn: false\r\n\t};\r\n\tpublic filterValue = '';\r\n\r\n\tpublic isDateRangeValid = {\r\n\t\tstartDate: true as boolean,\r\n\t\tendDate: true as boolean\r\n\t}\r\n\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _router: Router,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate weatherStationsService: WeatherStationsService,\r\n\t\tprivate notificationService: NotificationService,\r\n\t\tprivate dialog: MatDialog,\r\n\t\tprivate updateService: UpdateService) {\r\n\r\n\t\tif (this._tokenService.isAuthenticated() === false) {\r\n\t\t\tthis._router.navigate(['login']);\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tlet minDate: Date;\r\n\t\tlet maxDate: Date;\r\n\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.defaultStartdate = DateUtility.subtractDays(this.defaultEndDate, 90);\r\n\t\tthis.startDateFilter = { jsdate: this.defaultStartdate };\r\n\r\n\t\tthis.weatherStationsService.listRegions()\r\n\t\t\t.then(response => {\r\n\t\t\t\tthis.regions = response;\r\n\t\t\t\tthis.updateService.setweatherStationRegionsList(this.regions);\r\n\t\t\t});\r\n\r\n\t\tthis.getWeatherStations(this.defaultStartdate, this.defaultEndDate);\r\n\r\n\t\tminDate = DateUtility.subtractDays(this.defaultEndDate, 30);\r\n\t\tmaxDate = DateUtility.addDays(this.defaultEndDate, 1);\r\n\r\n\t\t// filter options are meant to set min/max on the date UI\r\n\t\tthis.startDateFilterOptions = this.setFilterMaxDate(this.startDateFilterOptions, maxDate);\r\n\t\t// updating filter options not working so don't set min\r\n\t\t// this.endDateFilterOptions = this.setFilterMinDate(this.endDateFilterOptions, minDate);\r\n\t\tthis.endDateFilterOptions = this.setFilterMaxDate(this.endDateFilterOptions, maxDate);\r\n\r\n\t\tthis.updateService.updatedWeatherStation$.pipe(takeUntil(this._subscriptions$)).subscribe(updatedWeatherStation => {\r\n\t\t\tfor (let weatherStation of this.originalWeatherStations) {\r\n\t\t\t\tif (weatherStation.Id === updatedWeatherStation.Id) {\r\n\t\t\t\t\tWeatherStation.copyAdvanced(updatedWeatherStation, weatherStation);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.filterByRegion(this.regionId);\r\n\t\t});\r\n\r\n\t\tthis.updateService.createdWeatherStation$.pipe(takeUntil(this._subscriptions$)).subscribe(createdWeatherStation => {\r\n\t\t\tif (!createdWeatherStation) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet weatherStation: IWeatherStationAdvanced = {\r\n\t\t\t\tId: createdWeatherStation.Id,\r\n\t\t\t\tName: createdWeatherStation.Name,\r\n\t\t\t\tExternalId: createdWeatherStation.External_Id,\r\n\t\t\t\tCounty: createdWeatherStation.County,\r\n\t\t\t\tNearestCity: createdWeatherStation.NearestCity,\r\n\t\t\t\tRegionId: createdWeatherStation.RegionId,\r\n\t\t\t\tRegionName: createdWeatherStation.RegionName,\r\n\t\t\t\tCoordinates: createdWeatherStation.Coordinates,\r\n\t\t\t\tUcIpmName: createdWeatherStation.UcIpmName,\r\n\t\t\t\tWeatherAPI_Id: createdWeatherStation.WeatherAPI_Id,\r\n\t\t\t\tRanchCount: 0,\r\n\t\t\t\tRecommendationCount: 0,\r\n\t\t\t\tActive: createdWeatherStation.Active,\r\n\t\t\t\tAllowToDeactivate: createdWeatherStation.AllowToDeactivate,\r\n\t\t\t\tAPI_Id: createdWeatherStation.API_Id\r\n\t\t\t};\r\n\r\n\t\t\tthis.originalWeatherStations.push(weatherStation);\r\n\t\t\tthis.filterByRegion(this.regionId);\r\n\t\t});\r\n\r\n\t\tthis.updateService.deletedWeatherStation$.pipe(takeUntil(this._subscriptions$)).subscribe(deletedWeatherStation => {\r\n\t\t\tif (!deletedWeatherStation) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.originalWeatherStations = this.originalWeatherStations.filter(x => x.Id !== deletedWeatherStation.Id);\r\n\t\t\tthis.filterByRegion(this.regionId);\r\n\t\t});\r\n\r\n\t\tthis.updateService.deactivatedWeatherStation$.pipe(takeUntil(this._subscriptions$)).subscribe(id => {\r\n\t\t\tfor (let weatherStation of this.originalWeatherStations) {\r\n\t\t\t\tif (weatherStation.Id === id) {\r\n\t\t\t\t\tweatherStation.Active = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.filterByRegion(this.regionId);\r\n\t\t});\r\n\r\n\t\tif (this.sort) {\r\n\t\t\tif (this.sort.sortChange) {\r\n\t\t\t\tthis.sort.sortChange.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\t\t\twhile (this.paginator.hasPreviousPage()) {\r\n\t\t\t\t\t\tthis.paginator.previousPage();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.sort.sort({ id: 'Name', start: 'asc', disableClear: false });\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tif (!this._subscriptions$) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic search(query: string): void {\r\n\t\tif (!this.dataSource) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!query) {\r\n\t\t\tquery = ''; // send empty string to clear search filter\r\n\t\t}\r\n\r\n\t\tquery = query.trim();\r\n\t\tquery = query.toLowerCase();\r\n\t\tthis.dataSource.filter = query;\r\n\t}\r\n\r\n\tpublic filterByRegion(regionId: number): void {\r\n\t\tif (regionId) {\r\n\t\t\tthis.weatherStations = this.originalWeatherStations.filter(x => x.RegionId === regionId);\r\n\t\t} else {\r\n\t\t\tthis.weatherStations = ObjectUtility.copyArray(this.originalWeatherStations);\r\n\t\t}\r\n\r\n\t\tthis.setDataSource(this.weatherStations);\r\n\t}\r\n\r\n\tpublic startDateFilterChanged(date: IMyDateModel): void {\r\n\t\tlet startDate: Date;\r\n\t\tlet endDate: Date;\r\n\t\tlet minDate: Date;\r\n\r\n\t\t// reset end date validation\r\n\t\tendDate = this.endDateFilter ? this.endDateFilter.jsdate : null;\r\n\t\tthis.isDateRangeValid.endDate = endDate && endDate instanceof Date;\r\n\r\n\t\tif (!date || !date.jsdate) {\r\n\t\t\tthis.isDateRangeValid.startDate = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tstartDate = date.jsdate;\r\n\r\n\t\t// update min date on end date picker (currently not working)\r\n\t\tminDate = DateUtility.subtractDays(startDate, 1);\r\n\t\tthis.endDateFilterOptions = this.setFilterMinDate(this.endDateFilterOptions, minDate);\r\n\t\tthis.endDatePicker.options = this.endDateFilterOptions;\r\n\r\n\t\tthis.isDateRangeValid.startDate = this.isDateRangeValid.endDate ? startDate <= endDate : true;\r\n\r\n\t\tif (this.isDateRangeValid.startDate && this.isDateRangeValid.endDate) {\r\n\t\t\tthis.getWeatherStations(startDate, endDate);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic endDateFilterChanged(date: IMyDateModel): void {\r\n\t\tlet startDate: Date;\r\n\t\tlet endDate: Date;\r\n\t\tlet maxDate: Date = new Date();\r\n\r\n\t\t// reset end date validation\r\n\t\tstartDate = this.startDateFilter ? this.startDateFilter.jsdate : null;\r\n\t\tthis.isDateRangeValid.startDate = startDate && startDate instanceof Date;\r\n\r\n\t\tif (!date || !date.jsdate) {\r\n\t\t\tthis.isDateRangeValid.endDate = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tendDate = date.jsdate;\r\n\r\n\t\t// update max date on start date picker (currently not working)\r\n\t\tif (endDate < maxDate) {\r\n\t\t\tmaxDate = endDate;\r\n\t\t}\r\n\t\tmaxDate = DateUtility.addDays(maxDate, 1);\r\n\t\tthis.startDateFilterOptions = this.setFilterMaxDate(this.startDateFilterOptions, maxDate);\r\n\t\tthis.startDatePicker.options = this.startDateFilterOptions;\r\n\r\n\t\tthis.isDateRangeValid.endDate = this.isDateRangeValid.startDate ? endDate >= startDate : true;\r\n\r\n\t\tif (this.isDateRangeValid.startDate && this.isDateRangeValid.endDate) {\r\n\t\t\tthis.getWeatherStations(startDate, endDate);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic update(id: number): void {\r\n\t\tlet notificationParams: INotificationParams;\r\n\r\n\t\tthis.weatherStationsService.updateCIMISData(id)\r\n\t\t\t.then((response: SuccessResponse) => {\r\n\t\t\t\tif (response && response.Message) {\r\n\t\t\t\t\tnotificationParams = {\r\n\t\t\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\t\t\tmessage: 'Update process started'\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnotificationParams = {\r\n\t\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\t\tmessage: 'An error occured while updating. Please try again'\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.notificationService.generateNotifcation(notificationParams);\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic openWeatherStationStatsDialog(id: number): void {\r\n\t\tlet data: { id: number, startDate: Date, endDate: Date } = {\r\n\t\t\tid: id,\r\n\t\t\tstartDate: this.startDateFilter.jsdate,\r\n\t\t\tendDate: this.endDateFilter.jsdate\r\n\t\t};\r\n\r\n\t\tthis.dialog.open(WeatherStationStatsDialog, {\r\n\t\t\twidth: '1000px',\r\n\t\t\tdata: data\r\n\t\t});\r\n\t}\r\n\r\n\tpublic activate(id: number): void {\r\n\t\tthis.weatherStationsService.changeActiveStatus(id)\r\n\t\t\t.then(response => {\r\n\t\t\t\tif (!response || !response.Message) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (let weatherStation of this.weatherStations) {\r\n\t\t\t\t\tif (weatherStation.Id === id) {\r\n\t\t\t\t\t\tweatherStation.Active = true;\r\n\t\t\t\t\t\tweatherStation.AllowToDeactivate = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic details(station: IWeatherStationAdvanced): void {\r\n\t\tlet navigationExtras: NavigationExtras = {\r\n\t\t\tqueryParams: {\r\n\t\t\t\t'stationId': parseInt(station.ExternalId, 10),\r\n\t\t\t\t'name': station.Name\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._router.navigate(['MissingStationRecords'], navigationExtras);\r\n\t}\r\n\r\n\tpublic openDeactivateWeatherStationDialog(weatherStation: IWeatherStationAdvanced): void {\r\n\t\tthis.dialog.open(DeactivateWeatherStationDialog, {\r\n\t\t\twidth: '460px',\r\n\t\t\tdata: weatherStation\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openWeatherStationDialog(weatherStation?: IWeatherStationAdvanced): void {\r\n\t\tlet data: { weatherStation: IWeatherStationAdvanced, canBeDeleted: boolean };\r\n\r\n\t\tdata = weatherStation ? { weatherStation: weatherStation, canBeDeleted: weatherStation.RanchCount === 0 } : null;\r\n\r\n\t\tthis.dialog.open(WeatherStationDialog, {\r\n\t\t\twidth: '980px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: data\r\n\t\t});\r\n\t}\r\n\r\n\tprivate getWeatherStations(startDate: Date, endDate: Date): void {\r\n\t\tthis.weatherStationsService.getWeatherStationAdvancedList(startDate, endDate)\r\n\t\t\t.then(stations => {\r\n\t\t\t\tif (!stations) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.originalWeatherStations = ObjectUtility.copyArray(stations);\r\n\t\t\t\tthis.filterByRegion(this.regionId);\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate setFilterMaxDate(options: IMyDpOptions, maxDate: Date): IMyDpOptions {\r\n\t\tif (!options || !maxDate) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\toptions.disableSince = {\r\n\t\t\tyear: maxDate.getFullYear(),\r\n\t\t\tmonth: maxDate.getMonth() + 1,\r\n\t\t\tday: maxDate.getDate()\r\n\t\t}\r\n\r\n\t\treturn options;\r\n\t}\r\n\r\n\tprivate setFilterMinDate(options: IMyDpOptions, minDate: Date): IMyDpOptions {\r\n\t\tif (!options || !minDate) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\toptions.disableUntil = {\r\n\t\t\tyear: minDate.getFullYear(),\r\n\t\t\tmonth: minDate.getMonth() + 1,\r\n\t\t\tday: minDate.getDate()\r\n\t\t}\r\n\r\n\t\treturn options;\r\n\t}\r\n\r\n\tprivate setDataSource(weatherStations: IWeatherStationAdvanced[]): void {\r\n\t\tthis.dataSource = new MatTableDataSource(weatherStations);\r\n\t\tthis.dataSource.paginator = this.paginator;\r\n\t\tthis.dataSource.sort = this.sort;\r\n\r\n\t\tthis.dataSource.filterPredicate = (data: IWeatherStationAdvanced, filter: string) => {\r\n\t\t\treturn data.Name.toLowerCase().includes(filter) ||\r\n\t\t\t\tdata.County.toLowerCase().includes(filter) ||\r\n\t\t\t\tdata.ExternalId.toLowerCase().includes(filter);\r\n\t\t};\r\n\r\n\t\tthis.search(this.filterValue);\r\n\t}\r\n}\r\n","import { IWeatherStation, IWeatherStationAdvanced } from './interfaces';\r\n\r\nexport class WeatherStation {\r\n\r\n\tpublic static copy(source: IWeatherStation, target: IWeatherStation) {\r\n\t\ttarget.Name = source.Name;\r\n\t\ttarget.External_Id = source.External_Id;\r\n\t\ttarget.County = source.County;\r\n\t\ttarget.NearestCity = source.NearestCity;\r\n\t\ttarget.RegionId = source.RegionId;\r\n\t\ttarget.RegionName = source.RegionName;\r\n\t\ttarget.Coordinates = source.Coordinates;\r\n\t\ttarget.UcIpmName = source.UcIpmName;\r\n\t\ttarget.WeatherAPI_Id = source.WeatherAPI_Id;\r\n\t}\r\n\r\n\tpublic static copyAdvanced(source: IWeatherStation, target: IWeatherStationAdvanced) {\r\n\t\ttarget.Name = source.Name;\r\n\t\ttarget.ExternalId = source.External_Id;\r\n\t\ttarget.County = source.County;\r\n\t\ttarget.NearestCity = source.NearestCity;\r\n\t\ttarget.RegionId = source.RegionId;\r\n\t\ttarget.RegionName = source.RegionName;\r\n\t\ttarget.Coordinates = source.Coordinates;\r\n\t\ttarget.UcIpmName = source.UcIpmName;\r\n\t\ttarget.WeatherAPI_Id = source.WeatherAPI_Id;\r\n\t\ttarget.API_Id = source.API_Id;\r\n\t}\r\n}\r\n\r\n\r\n","import * as Highcharts from 'highcharts';\r\nrequire('highcharts/modules/exporting')(Highcharts);\r\n\r\nimport { DateUtility } from '../../classes/dateUtility';\r\n\r\nimport { IHighchartsLine, IHighchartsXAxis } from '../../interfaces/views/highCharts';\r\nimport { IWeatherStationGraphRecord, IWeatherStationStatsGraphData } from './interfaces';\r\nimport highChartExportOptions from '../shared/highchartsExportOptions';\r\n\r\nexport class WeatherStationStatsCharts {\r\n\r\n\tpublic static convertData(data: IWeatherStationGraphRecord[]): IWeatherStationStatsGraphData {\r\n\t\tlet graphData: IWeatherStationStatsGraphData;\r\n\t\tlet ranches: IHighchartsLine;\r\n\t\tlet recommendations: IHighchartsLine;\r\n\t\tlet date: Date;\r\n\t\tlet utc: number;\r\n\r\n\t\tif (!data) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tranches = {\r\n\t\t\tname: 'Ranches',\r\n\t\t\tdata: new Array()\r\n\t\t}\r\n\r\n\t\trecommendations = {\r\n\t\t\tname: 'Recommendations',\r\n\t\t\tdata: new Array()\r\n\t\t}\r\n\r\n\t\tdata = data.sort((a, b) => {\r\n\t\t\treturn DateUtility.DotNetToDate(a.EventDate).valueOf() - DateUtility.DotNetToDate(b.EventDate).valueOf();\r\n\t\t});\r\n\r\n\t\tfor (let graphRecord of data) {\r\n\t\t\tdate = DateUtility.DotNetToDate(graphRecord.EventDate);\r\n\t\t\tutc = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes());\r\n\r\n\t\t\tranches.data.push(new Array(utc, graphRecord.RanchCount));\r\n\t\t\trecommendations.data.push(new Array(utc, graphRecord.RecommendationCount));\r\n\t\t}\r\n\r\n\t\tgraphData = {\r\n\t\t\tranches: ranches,\r\n\t\t\trecommendations: recommendations\r\n\t\t}\r\n\r\n\t\treturn graphData;\r\n\t}\r\n\r\n\tpublic static generateHighchart(chartElement: HTMLElement, params: { graphData: IWeatherStationStatsGraphData, daily: boolean }): void {\r\n\t\tlet ranchesColor = '#0090FF';\r\n\t\tlet recommendationsColor = '#E94957';\r\n\r\n\t\tlet options: Highcharts.Options;\r\n\t\tlet data: IHighchartsLine[];\r\n\t\tlet xAxis: IHighchartsXAxis;\r\n\t\tlet tooltipFormatter: () => string | boolean;\r\n\r\n\t\tif (!params || !params.graphData) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\txAxis = {\r\n\t\t\ttype: 'datetime',\r\n\t\t\tgridLineWidth: 1\r\n\t\t}\r\n\r\n\t\tif (params.daily) {\r\n\t\t\txAxis.dateTimeLabelFormats = {\r\n\t\t\t\tday: '%b %e \\'%y',\r\n\t\t\t\tweek: '%b %e \\'%y',\r\n\t\t\t\tmonth: '%b %Y',\r\n\t\t\t\tyear: '%b %Y'\r\n\t\t\t};\r\n\r\n\t\t\ttooltipFormatter = function () {\r\n\t\t\t\tlet name: string = this.series.name;\r\n\t\t\t\tlet utc: number = this.x;\r\n\t\t\t\tlet months: string[] = DateUtility.monthsAsStrings;\r\n\t\t\t\tlet element: string;\r\n\t\t\t\tlet date: Date;\r\n\r\n\t\t\t\tdate = new Date(0);\r\n\t\t\t\tdate.setUTCMilliseconds(utc);\r\n\r\n\t\t\t\telement = '<span class=\"bk-highcharts__tooltip-text\">' + months[date.getMonth()] + ' ' + date.getDate() + ' ' +\r\n\t\t\t\t\tdate.getFullYear() + ' - ' + this.y + ' ' + name + '</span>';\r\n\r\n\t\t\t\treturn element;\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\txAxis.labels = {\r\n\t\t\t\tformat: '{value: %b %Y}'\r\n\t\t\t}\r\n\r\n\t\t\ttooltipFormatter = function () {\r\n\t\t\t\tlet name: string = this.series.name;\r\n\t\t\t\tlet utc: number = this.x;\r\n\t\t\t\tlet months: string[] = DateUtility.monthsAsStrings;\r\n\t\t\t\tlet element: string;\r\n\t\t\t\tlet date: Date;\r\n\r\n\t\t\t\tdate = new Date(0);\r\n\t\t\t\tdate.setUTCMilliseconds(utc);\r\n\r\n\t\t\t\telement = '<span class=\"bk-highcharts__tooltip-text\">' + months[date.getMonth()] + ' ' +\r\n\t\t\t\t\tdate.getFullYear() + ' - ' + this.y + ' ' + name + '</span>';\r\n\r\n\t\t\t\treturn element;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tparams.graphData.ranches.color = ranchesColor;\r\n\t\tparams.graphData.ranches.marker = {\r\n\t\t\tsymbol: 'circle'\r\n\t\t};\r\n\r\n\t\tparams.graphData.recommendations.yAxis = 1;\r\n\t\tparams.graphData.recommendations.color = recommendationsColor;\r\n\t\tparams.graphData.recommendations.marker = {\r\n\t\t\tsymbol: 'square'\r\n\t\t};\r\n\r\n\t\tdata = new Array(params.graphData.ranches, params.graphData.recommendations);\r\n\r\n\t\toptions = {\r\n\t\t\tchart: {\r\n\t\t\t\ttype: 'line',\r\n\t\t\t\twidth: 900,\r\n\t\t\t\theight: 250\r\n\t\t\t},\r\n\t\t\ttitle: {\r\n\t\t\t\ttext: null\r\n\t\t\t},\r\n\t\t\ttooltip: {\r\n\t\t\t\tbackgroundColor: '#FFF',\r\n\t\t\t\tborderColor: '#FFF',\r\n\t\t\t\tformatter: tooltipFormatter\r\n\t\t\t},\r\n\t\t\txAxis: xAxis,\r\n\t\t\tyAxis: [{\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: 'Ranches'\r\n\t\t\t\t},\r\n\t\t\t\tallowDecimals: false,\r\n\t\t\t\tlabels: {\r\n\t\t\t\t\tstyle: {\r\n\t\t\t\t\t\tcolor: ranchesColor\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tmin: 0\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: 'Recommendations'\r\n\t\t\t\t},\r\n\t\t\t\tallowDecimals: false,\r\n\t\t\t\topposite: true,\r\n\t\t\t\tlabels: {\r\n\t\t\t\t\tstyle: {\r\n\t\t\t\t\t\tcolor: recommendationsColor\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tmin: 0\r\n\t\t\t}],\r\n\t\t\tseries: data,\r\n\t\t\texporting: highChartExportOptions,\r\n\t\t\tplotOptions: {\r\n\t\t\t\tseries: {\r\n\t\t\t\t\tevents: {\r\n\t\t\t\t\t\tlegendItemClick: function () {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tHighcharts.chart(chartElement, options);\r\n\t}\r\n}\r\n","/*modules*/\r\nimport { NgModule } from '@angular/core';\r\n\r\n/*services*/\r\nimport { RanchService } from './components/ranch-settings/service';\r\nimport { PlantingService } from './components/planting-settings/service';\r\nimport { FertilizerModelService } from './components/ranch-settings/modals/fertilizer/service';\r\nimport { CommodityService } from './models/commodity-type/service';\r\nimport { PersistentDatabase } from './services/persistent-database';\r\n\r\n@NgModule({\r\n\timports: [\r\n\t],\r\n\texports: [\r\n\t],\r\n\tdeclarations: [\r\n\t],\r\n\tproviders: [ // make data in these services persistent\r\n\t\tPersistentDatabase,\r\n\t\tCommodityService,\r\n\t\tRanchService,\r\n\t\tPlantingService,\r\n\t\tFertilizerModelService\r\n\t],\r\n\tbootstrap: []\r\n})\r\nexport class CoreModule { }\r\n","import { Directive, ElementRef, Output, EventEmitter, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n\tselector: '[clickOutside]'\r\n})\r\n\r\nexport class ClickOutsideDirective {\r\n\r\n\t@Output()\r\n\tpublic clickOutside = new EventEmitter<MouseEvent>();\r\n\r\n\tconstructor(private _elementRef: ElementRef) {\r\n\t}\r\n\r\n\t@HostListener('document:click', ['$event', '$event.target'])\r\n\t// @HostListener('document:touchstart', ['$event', '$event.target'])\r\n\tpublic onClick(event: MouseEvent, targetElement: HTMLElement): void {\r\n\t\tif (!targetElement) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst clickedInside = this._elementRef.nativeElement.contains(targetElement);\r\n\t\tif (!clickedInside) {\r\n\t\t\tthis.clickOutside.emit(event);\r\n\t\t}\r\n\t}\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { GoogleMapsAPIWrapper, LatLngLiteral, LatLngBounds } from '@agm/core';\r\nimport { GoogleMap } from '@agm/core/services/google-maps-types';\r\n\r\n@Directive({\r\n\tselector: 'map-control'\r\n})\r\n\r\nexport class MapControlDirective {\r\n\r\n\tconstructor(private wrapper: GoogleMapsAPIWrapper) { }\r\n\r\n\tpublic centerMap(lat: number, lng: number): Promise<void> {\r\n\t\tlet latLng = <LatLngLiteral>{ lat: lat, lng: lng };\r\n\r\n\t\treturn this.wrapper.setCenter(latLng)\r\n\t\t\t.then(res => res);\r\n\t}\r\n\r\n\tpublic setZoom(zoom: number): Promise<void> {\r\n\t\treturn this.wrapper.setZoom(zoom)\r\n\t\t\t.then(res => res);\r\n\t}\r\n\r\n\tpublic getBounds(): Promise<LatLngBounds> {\r\n\t\treturn this.wrapper.getBounds()\r\n\t\t\t.then(res => res);\r\n\t}\r\n\r\n\tpublic getZoom(): Promise<Number> {\r\n\t\treturn this.wrapper.getZoom();\r\n\t}\r\n}\r\n","import { Input, OnChanges, Directive, SimpleChanges } from '@angular/core';\r\nimport { NG_VALIDATORS, Validator, Validators, AbstractControl, ValidatorFn, ValidationErrors } from '@angular/forms';\r\n\r\n@Directive({\r\n\tselector: '[maxNumber]',\r\n\tproviders: [{ provide: NG_VALIDATORS, useExisting: MaxNumberDirective, multi: true }]\r\n})\r\nexport class MaxNumberDirective implements Validator, OnChanges {\r\n\t@Input() maxNumber: number;\r\n\tprivate valFn = Validators.nullValidator;\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tconst change = changes['maxNumber'];\r\n\r\n\t\tif (change) {\r\n\t\t\tconst n: number = change.currentValue;\r\n\t\t\tthis.valFn = maxNumberValidator(n);\r\n\t\t} else {\r\n\t\t\tthis.valFn = Validators.nullValidator;\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(control: AbstractControl): { [key: string]: ValidationErrors } {\r\n\t\treturn this.valFn(control);\r\n\t}\r\n}\r\n\r\nexport function maxNumberValidator(n: number): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } => {\r\n\t\tconst a = control.value;\r\n\t\tconst no = a > n;\r\n\t\treturn no ? { 'maxNumber': { a } } : null;\r\n\t};\r\n}\r\n","import { Input, OnChanges, Directive, SimpleChanges } from '@angular/core';\r\nimport { NG_VALIDATORS, Validator, Validators, AbstractControl, ValidatorFn, ValidationErrors } from '@angular/forms';\r\n\r\n@Directive({\r\n\tselector: '[minNumber]',\r\n\tproviders: [{ provide: NG_VALIDATORS, useExisting: MinNumberDirective, multi: true }]\r\n})\r\nexport class MinNumberDirective implements Validator, OnChanges {\r\n\t@Input() minNumber: number;\r\n\tprivate valFn = Validators.nullValidator;\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tconst change = changes['minNumber'];\r\n\r\n\t\tif (change) {\r\n\t\t\tconst n: number = change.currentValue;\r\n\t\t\tthis.valFn = minNumberValidator(n);\r\n\t\t} else {\r\n\t\t\tthis.valFn = Validators.nullValidator;\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(control: AbstractControl): { [key: string]: ValidationErrors } {\r\n\t\treturn this.valFn(control);\r\n\t}\r\n}\r\n\r\n/**\r\n *\r\n * @param n minNumber setting\r\n */\r\nexport function minNumberValidator(n: number): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } => {\r\n\t\tconst userInput = control.value; // user input\r\n\r\n\t\tif (userInput === null) {\r\n\t\t\treturn null; // check for required value elsewhere\r\n\t\t} else if (userInput >= n) {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\treturn { 'minNumber': { a: userInput } };\r\n\t\t}\r\n\t};\r\n}\r\n","export interface ISelectOptions {\r\n\tkey: number,\r\n\tvalue: string\r\n}\r\n\r\n/**\r\n * used for manure calculator, where there are multiple keys for the\r\n * same label\r\n */\r\nexport interface ISelectoptionsMultiple {\r\n\tkeys: number[],\r\n\tlabel: string\r\n}\r\n\r\nexport interface ISelectOptionBoolean {\r\n\tkey: boolean,\r\n\tvalue: string\r\n}\r\n\r\nexport interface IIdNamePair {\r\n\tId: number,\r\n\tName: string\r\n}\r\n\r\nexport enum eDialogViews {\r\n\tCREATE = 1,\r\n\tUPDATE = 2,\r\n\tDISCARD_CHANGES,\r\n\tDELETE_CONFIRMATION,\r\n}\r\n","export type PlantingTabs = 'ActivePlantings' | 'FavoritePlantings' | 'AllPlantings';\r\n\r\nexport const PlantingTabValues = {\r\n\tactive: 'ActivePlantings' as PlantingTabs,\r\n\tfavorites: 'FavoritePlantings' as PlantingTabs,\r\n\tall: 'AllPlantings' as PlantingTabs\r\n}\r\n\r\nexport const PlantingTabTitles = {\r\n\tactive: 'Active Plantings',\r\n\tfavorites: 'Favorite Plantings',\r\n\tall: 'All Plantings'\r\n}\r\n\r\nexport enum EventsView {\r\n\tLIST = 1,\r\n\tTABLE,\r\n\tTOTALS // REFACTOR - what is this view?\r\n};\r\n\r\nexport enum NUTRIENT_KEYS {\r\n\tN = 0,\r\n\tP,\r\n\tK\r\n};\r\n\r\nexport enum EventsType {\r\n\tALL = 1,\r\n\tWATER,\r\n\tFERTILIZER,\r\n\tSOILSAMPLES,\r\n\tCUTTING,\r\n\tTISSUE_SAMPLE\r\n}\r\n\r\nexport type EventTypeName = 'Water' | 'Fertilizer' | 'SoilSamples' | 'Cutting' | 'TissueSamples';\r\n\r\nexport const EventTypeNames = {\r\n\tWATER: 'Water' as EventTypeName,\r\n\tFERTILIZER: 'Fertilizer' as EventTypeName,\r\n\tSOILSAMPLES: 'SoilSamples' as EventTypeName,\r\n\tCUTTING: 'Cutting' as EventTypeName,\r\n\tTISSUE_SAMPLE: 'TissueSamples' as EventTypeName\r\n}\r\n\r\nexport const ModalTypes = {\r\n\tIRRIGATION: 'IrrigationEventModal',\r\n\tFERTILIZATION: 'FertilizationEventModal',\r\n\tSOILSAMPLE: 'SoilSampleEventModal'\r\n}\r\n\r\nexport enum EventContext {\r\n\tSNAPSHOT = 1,\r\n\tTABLE,\r\n\tLIST\r\n};\r\n\r\nexport enum eWeatherAPIs {\r\n\tCIMIS = 1,\r\n\tWesternWX,\r\n\tHobolink,\r\n\tInvalid,\r\n\tAzmet,\r\n\tCROPNET,\r\n\tOpenET\r\n}\r\n\r\nexport enum eIrrigationMethods {\r\n\tSPRINKLER = 1,\r\n\tRAINFALL = 2,\r\n\tDRIP = 3,\r\n\tGERMINATION_SPRINKLER = 5,\r\n\tFLOOD = 6,\r\n\tSOIL_TENSION_READING = 8,\r\n\tMICRO_SPRINKLER = 7\r\n}\r\n\r\nexport enum eSampleTypeIds {\r\n\tQUICK_NITRATE_STRIP = 1,\r\n\tLAB_TEST = 2\r\n}\r\n\r\nexport enum eCommodityTypes {\r\n\tLETTUCE = 1,\r\n\tBROCCOLI = 2,\r\n\tSPINACH = 3,\r\n\tCELERY = 4,\r\n\tCAULIFLOWER = 5,\r\n\tSTRAWBERRY = 6,\r\n\tCABBAGE = 7,\r\n\tCILANTRO = 8,\r\n\tMIZUNA = 9,\r\n\tPEPPERS = 10,\r\n\tPROCESSING_TOMATO = 11,\r\n\tCANEBERRY = 12,\r\n\t// WILL BE DIFFERENT ON PRODUCTION/OTHERS LOCAL DATABASES\r\n\tALFALFA = 17,\r\n\tALMOND = 18,\r\n\tBRUSSEL_SPROUTS = 19,\r\n\tPISTACHIO = 32,\r\n\tWALNUT = 33,\r\n\tPRUNE = 34,\r\n\tPEAR = 35,\r\n\tGRAPE = 39,\r\n\tCITRUS = 43,\r\n}\r\n\r\nexport enum eCalculators {\r\n\tLETTUCE = 1, // covers vegetable crops\r\n\tSTRAWBERRY, // covers caneberry\r\n\tALFALFA,\r\n\tALMOND,\r\n\tTOMATO,\r\n\tPISTACHIO,\r\n\tWALNUT\r\n}\r\n\r\nexport enum eIrrigationUnit {\r\n\tINCHES = 1,\r\n\tHOURS\r\n}\r\n\r\nexport enum eSoilWebCrawErrors {\r\n\tNone = 0,\r\n\tOutOfRange = 1, // coordinates outside US\r\n\tServerFailure = 2, // SoilWeb server failed to respond\r\n\tParseError = 3, // HTML parse error\r\n}\r\n\r\nexport enum eSoilMoistureViews {\r\n\tGRAPH = 1,\r\n\tSETTINGS,\r\n\tCONFIRMATION\r\n}\r\n\r\nexport enum eSoilMoistureImportErrors {\r\n\tDATE = 1,\r\n\tCOLUMNS,\r\n\tNOTFOUND,\r\n\tEMPTY,\r\n\tGENERIC\r\n}\r\n\r\nexport enum eFertilizerFormulationTypes {\r\n\tDRY = 1,\r\n\tWET\r\n}\r\n\r\nexport enum eModalFormViews {\r\n\tFORM = 1,\r\n\tDISCARDCHANGES,\r\n\tDELETECONFIRMATION\r\n}\r\n\r\nexport enum eNotificationTypes {\r\n\tMESSAGE = 1,\r\n\tERROR,\r\n\tUPDATE\r\n}\r\n\r\nexport enum eDialogFormViews {\r\n\tFORM = 1,\r\n\tDISCARDCHANGES,\r\n\tDELETECONFIRMATION\r\n}\r\n\r\nexport type irrigationMethodName = 'Sprinkler' | 'Rainfall' | 'Drip' | 'Flow Meter' | 'Germination Sprinkler' | 'Flood';\r\n\r\nexport const irrigationMethodNames = {\r\n\tsprinker: 'Sprinkler' as irrigationMethodName,\r\n\trainfall: 'Rainfall' as irrigationMethodName,\r\n\tdrip: 'Drip' as irrigationMethodName,\r\n\tflowMeter: 'Flow Meter' as irrigationMethodName,\r\n\tgerminationSprinkler: 'Germination Sprinkler' as irrigationMethodName,\r\n\tflood: 'Flood' as irrigationMethodName\r\n}\r\n\r\nexport type waterUnit = 'hours' | 'inches';\r\n\r\nexport type fertilizerUnit = 'fertilizerUnit' | 'lbsNPerAcre';\r\n\r\nexport type soilSamplesUnit = 'lbsNPerAcre' | 'ppmNitrate-N';\r\n\r\nexport const units = {\r\n\twater: {\r\n\t\thours: 'hours' as waterUnit,\r\n\t\tinches: 'inches' as waterUnit\r\n\t},\r\n\tfertilizer: {\r\n\t\tfertilizerUnit: 'fertilizerUnit' as fertilizerUnit,\r\n\t\tlbsNPerAcre: 'lbsNPerAcre' as fertilizerUnit\r\n\t},\r\n\tsoilSamples: {\r\n\t\tlbsNPerAcre: 'lbsNPerAcre' as soilSamplesUnit,\r\n\t\tppmNitrateN: 'ppmNitrate-N' as soilSamplesUnit\r\n\t}\r\n}\r\n\r\nexport const IRRIGATION_RECENCY_DAYS = 60;\r\nexport const CUTTING_RECENCY_DAYS = 60;\r\n","import { eNotificationTypes } from './constants';\r\nimport { IPlanting } from '../components/planting-settings/interfaces';\r\nimport { IRanch, IRanchLotJSONModel } from '../components/ranch-settings/interfaces';\r\nimport { ILotEdit } from '../components/ranch-settings/modals/lot/interfaces'\r\n\r\nexport interface IRanchesArray {\r\n\tmyRanches: IRanch[],\r\n\tfavorites: IRanch[],\r\n\tpublic: IRanch[],\r\n\tloaded: {\r\n\t\tmyRanches: boolean,\r\n\t\tfavorites: boolean,\r\n\t\tpublic: boolean\r\n\t}\r\n}\r\n\r\nexport interface PlantingsArray {\r\n\tactive: IPlanting[],\r\n\tfavorites: IPlanting[],\r\n\tall: IPlanting[]\r\n}\r\n\r\nexport interface ITextValue {\r\n\tText: string,\r\n\tValue: string\r\n}\r\n\r\n/**\r\n* Used for updating planting cards when lot name is updated in ranch settings\r\n**/\r\nexport interface ICurrentRanchLots {\r\n\tlots: IRanchLotJSONModel[],\r\n\tlotId: number,\r\n\tlot: ILotEdit\r\n}\r\n\r\n/**\r\n * generic .NET response object\r\n */\r\nexport interface  CMError {\r\n\tmessage: string,\r\n\tcode: number\r\n}\r\n\r\nexport interface CMErrors {\r\n\terrors: CMError[]\r\n}\r\n\r\nexport interface SuccessResponse {\r\n\tMessage: string\r\n}\r\n\r\nexport interface INotificationParams {\r\n\tmessage: string,\r\n\ttype: eNotificationTypes\r\n}\r\n\r\nexport enum httpStatusCodes {\r\n\tsuccess = 200,\r\n\tcontinue = 100,\r\n\tangularError = 101,\r\n\tbadRequest = 400,\r\n\tnotfound = 404,\r\n\tforbidden = 403,\r\n\tinterrupted = 103,\r\n\tUpgradeRequired = 426\r\n}\r\n\r\nexport interface IRange {\r\n\tmin: number,\r\n\tmax: number\r\n}\r\n","import { TabInterface } from './tab.interface';\r\n\r\nexport class NavInterface {\r\n\ttabs: TabInterface[] = [];\r\n\r\n\tselectTab(tab: TabInterface): void { }\r\n\r\n\taddTab(tab: TabInterface): void { }\r\n}\r\n","export class TabInterface {\r\n    selected: boolean;\r\n}","import { ICommodityType } from './interfaces';\r\n\r\nexport class CommodityType {\r\n\tpublic static filterAvailable(commodityTypes: ICommodityType[]) {\r\n\t\tlet result: ICommodityType[];\r\n\r\n\t\tif (!commodityTypes) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = commodityTypes.filter(x => x.IsAssociatedWithRanch === false);\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { IPlantingAdvancedEdit } from '../../components/planting-settings/interfaces';\r\nimport { SuccessResponse } from '../../interfaces/interfaces';\r\n\r\nexport enum YieldUnitId {\r\n\tLBS = 1,\r\n\tTONS = 2,\r\n};\r\n\r\n/**\r\n * = Common.Models.Json.CommodityType\r\n */\r\nexport interface ICommodityType {\r\n\tId: number,\r\n\tName: string,\r\n\tHarvestOnce: boolean,\r\n\tIconPath: string,\r\n\tHeaderBackgroundPath?: string,\r\n\tIsAssociatedWithRanch?: boolean,\r\n\tIsActive: boolean,\r\n\tCommodityTypeCalculator: string,\r\n\tYieldUnitId: YieldUnitId,\r\n\r\n\t// virtual\r\n\r\n\tSelected?: boolean, // used for displaying plantings filters\r\n\tDisabled?: boolean,\r\n}\r\n\r\n/**\r\n * Used for displaying a commodity type dropdown on admin/crop stages view\r\n */\r\nexport interface ICommodityTypeCropStageDropDownItem {\r\n\tId: number,\r\n\tName: string,\r\n\tCropStagesCount?: number, // number of crop stages associated\r\n\tIsSelected?: boolean,\r\n}\r\n\r\nexport interface ICommodityTypesRanchJSON {\r\n\tId: number,\r\n\tRanchId: number,\r\n\tCommodityTypeId: number,\r\n\tName: string,\r\n\tIsActive: boolean,\r\n\tPlantingsCount: number\r\n}\r\n\r\nexport interface ICommodityTypesRanchPostResponseViewModel {\r\n\tCommodityTypesRanch: ICommodityTypesRanchJSON[],\r\n\tCommodityTypes: ICommodityType[],\r\n\tCount: number\r\n}\r\n\r\nexport interface ICommodityTypeDialogInput {\r\n\tranchGuid: string,\r\n\tcommodityTypeId?: number,\r\n\tcommodityTypeName?: string,\r\n\tplantingsCount?: number\r\n}\r\n\r\nexport const eCommodityTypeCalculators = {\r\n\tprocessingTomato: 'CropManage.Calculations.Calculators.ProcessingTomato',\r\n\talmond: 'CropManage.Calculations.Calculators.Almond',\r\n\tstrawberry: 'CropManage.Calculations.Calculators.Strawberry',\r\n\tcaneberry: 'CropManage.Calculations.Calculators.Caneberry',\r\n\tlettuce: 'CropManage.Calculations.Calculators.Lettuce',\r\n\talfalfa: 'CropManage.Calculations.Calculators.Alfalfa',\r\n\twalnut: 'CropManage.Calculations.Calculators.Walnut',\r\n\tpistachio: 'CropManage.Calculations.Calculators.Pistachio'\r\n}\r\n\r\nexport interface ICommodityService {\r\n\r\n\tlistByRanch(ranchGuid: string): Promise<ICommodityTypesRanchPostResponseViewModel>,\r\n\tlistAllByRanch(ranchGuid: string): Promise<ICommodityType[]>,\r\n\r\n\tsaveByRanch(ranchGuid: string, commodityTypeId: number, cropTypeIds: number[])\r\n\t\t: Promise<SuccessResponse>,\r\n\r\n\tdeleteByRanch(ranchGuid: string, commodityTypeId: number):\r\n\t\tPromise<ICommodityTypesRanchPostResponseViewModel>,\r\n\r\n\tlist(): Promise<ICommodityType[]>,\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { IPlantingAdvancedEdit } from '../../components/planting-settings/interfaces';\r\nimport { ICommodityType, ICommodityTypesRanchPostResponseViewModel, ICommodityService } from './interfaces';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { of } from 'rxjs';\r\nimport { SuccessResponse } from '../../interfaces/interfaces';\r\n\r\n@Injectable()\r\nexport class CommodityService implements ICommodityService {\r\n\r\n\tprivate urls = {\r\n\t\tcommodityType: {\r\n\t\t\tlist: '/v2/commodity-types.json',\r\n\t\t},\r\n\t\tcommodityTypesRanch: {\r\n\t\t\tlist: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/commodity-types.json`,\r\n\t\t\tlistAll: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/commodity-types/list-all.json`,\r\n\t\t\tsave: (ranchGuid: string) =>  `/v2/ranches/${ranchGuid}/commodity-types.json`,\r\n\t\t\tdelete: (ranchGuid: string, commodityTypeId: number) => `/v2/ranches/${ranchGuid}/commodity-types/${commodityTypeId}.json`\r\n\t\t}\r\n\t};\r\n\r\n\tpublic commodityTypes: ICommodityType[] = new Array();\r\n\r\n\t/**\r\n     * Get commodity type from planting JSON\r\n     *\r\n     * @param planting\r\n     * @param commodityTypeId\r\n     */\r\n\tpublic static getCommodityType(commodityTypes: ICommodityType[],\r\n\t\tcommodityTypeId?: number): ICommodityType {\r\n\r\n\t\tif (!commodityTypes || commodityTypes.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfor (let commodityType of commodityTypes) {\r\n\t\t\tif (commodityType.Id === commodityTypeId) {\r\n\t\t\t\treturn commodityType;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate httpService: HttpService) {\r\n\t}\r\n\r\n\tpublic listByRanch(ranchGuid: string): Promise<ICommodityTypesRanchPostResponseViewModel> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.commodityTypesRanch.list(ranchGuid),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: function (json: ICommodityTypesRanchPostResponseViewModel): ICommodityTypesRanchPostResponseViewModel {\r\n\t\t\t\treturn json;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic listAllByRanch(ranchGuid: string): Promise<ICommodityType[]> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.commodityTypesRanch.listAll(ranchGuid),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: function (json: ICommodityType[]): ICommodityType[] {\r\n\t\t\t\treturn json;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic saveByRanch(ranchGuid: string, commodityTypeId: number, cropTypeIds: number[])\r\n\t\t: Promise<SuccessResponse> {\r\n\t\tlet params = {\r\n\t\t\tCommodityTypeId: commodityTypeId,\r\n\t\t\tCropTypeIds: cropTypeIds\r\n\t\t};\r\n\r\n\t\treturn this.httpService.post({\r\n\t\t\turl: this.urls.commodityTypesRanch.save(ranchGuid),\r\n\t\t\tbody: params,\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic deleteByRanch(ranchGuid: string, commodityTypeId: number):\r\n\t\tPromise<ICommodityTypesRanchPostResponseViewModel> {\r\n\r\n\t\treturn this.httpService.delete({\r\n\t\t\turl: this.urls.commodityTypesRanch.delete(ranchGuid, commodityTypeId),\r\n\t\t\tisWebAPI: true,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic list(): Promise<ICommodityType[]> {\r\n\r\n\t\tif (this.commodityTypes && this.commodityTypes.length > 0) {\r\n\t\t\treturn of(this.commodityTypes).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.commodityType.list,\r\n\t\t\tuseLocalStorage: true,\r\n\t\t\tsearchParams: null,\r\n\t\t\tcallback: (json: ICommodityType[]) => {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\tthis.commodityTypes = json;\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn {};\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n\r\nimport 'file-saver';\r\nimport { of } from 'rxjs';\r\n\r\nimport { ModelService } from '../../services/model.service';\r\nimport { IIdNamePair } from '../../components/planting-settings/interfaces';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { ICropStageTableRow } from '../../modules/crop-stages/interfaces';\r\nimport { CMError, SuccessResponse } from '../../interfaces/interfaces';\r\nimport { ICropStageService } from './interfaces';\r\n\r\nexport class RanchFavoritesModel {\r\n\tpublic Id: number;\r\n\tpublic Ranch: RanchModel;\r\n\tpublic RanchId: number;\r\n\tpublic UserID: string;\r\n}\r\n\r\nexport class RanchModel {\r\n\tpublic ActivePlantings: number;\r\n\tpublic CreatedByFullName: string;\r\n\tpublic Id: number;\r\n\tpublic Name: string;\r\n\tpublic RanchAccessState: number;\r\n\tpublic Ranch_External_GUID: string;\r\n\tpublic UserAccessState: number;\r\n}\r\n\r\n@Injectable()\r\nexport class CropStageService extends ModelService implements ICropStageService {\r\n\r\n\tprivate urls = {\r\n\t\tlist: '/v2/crop-stages.json',\r\n\t\tdelete: (cropStageId: number) => `/v2/crop-stages/${cropStageId}.json`,\r\n\t\tupdate: (cropStageId: number) => `/v2/crop-stages/${cropStageId}.json`,\r\n\t\tcreate: `/v2/crop-stages.json`\r\n\t};\r\n\r\n\tpublic update(model: ICropStageTableRow): Promise<CMError | SuccessResponse> {\r\n\t\tlet body: {\r\n\t\t\tName: string,\r\n\t\t\tCommodityTypes: number[]\r\n\t\t};\r\n\r\n\t\tbody = {\r\n\t\t\tName: model.Name,\r\n\t\t\tCommodityTypes: model.CommodityTypes\r\n\t\t}\r\n\r\n\t\treturn this.put(this.urls.update(model.Id), (response: CMError | SuccessResponse):\r\n\t\tCMError | SuccessResponse => {\r\n\r\n\t\t\treturn response;\r\n\t\t}, body, true)\r\n\t}\r\n\r\n\tpublic create(model: ICropStageTableRow): Promise<CMError | SuccessResponse> {\r\n\t\tlet body: {\r\n\t\t\tName: string,\r\n\t\t\tCommodityTypes: number[]\r\n\t\t};\r\n\r\n\t\tbody = {\r\n\t\t\tName: model.Name,\r\n\t\t\tCommodityTypes: model.CommodityTypes\r\n\t\t}\r\n\r\n\t\treturn this.post(this.urls.create, (response: CMError | SuccessResponse):\r\n\t\tCMError | SuccessResponse => {\r\n\r\n\t\t\treturn response;\r\n\t\t}, body, true)\r\n\t}\r\n\r\n\tpublic list(commodityTypeId: number): Promise<IIdNamePair[]> {\r\n\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tif (!commodityTypeId) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tparams = new HttpParams().set('commodityTypeId', commodityTypeId.toString());\r\n\r\n\t\treturn this.get(this.urls.list,\r\n\t\t\t(response: IIdNamePair[]) => {\r\n\r\n\t\t\treturn response;\r\n\t\t}, params);\r\n\t}\r\n\r\n\tpublic listAdmin(): Promise<ICropStageTableRow[]> {\r\n\r\n\t\treturn this.get(this.urls.list,\r\n\t\t\t(response: ICropStageTableRow[]): ICropStageTableRow[] => {\r\n\r\n\t\t\tfor (let row of response) {\r\n\t\t\t\trow.CommodityTypeCount = row.CommodityTypes ? row.CommodityTypes.length : 0\r\n\t\t\t}\r\n\r\n\t\t\treturn response;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic delete(cropStageId: number): Promise<CMError | SuccessResponse> {\r\n\r\n\t\treturn this.deleteItem(this.urls.delete(cropStageId),\r\n\t\t\t(response: CMError | SuccessResponse): CMError | SuccessResponse => {\r\n\t\t\treturn response;\r\n\t\t});\r\n\t}\r\n}\r\n","import { eCommodityTypes } from '../../interfaces/constants';\r\nimport { ICropType } from './interfaces';\r\nimport { eCommodityTypeCalculators } from '../commodity-type/interfaces';\r\n\r\nexport class CropType {\r\n\t// Logic may change over time\r\n\r\n\tpublic static hasFloodEvents(commodityType: eCommodityTypes): boolean {\r\n\t\treturn commodityType === eCommodityTypes.ALFALFA;\r\n\t}\r\n\r\n\tpublic static hasCutEvents(commodityType: eCommodityTypes): boolean {\r\n\t\treturn commodityType === eCommodityTypes.ALFALFA;\r\n\t}\r\n\r\n\t/**\r\n\t * Determine whether a crop is perennial (lasts more than one year)\r\n\t *\r\n\t * @param commodityTypeId\r\n\t */\r\n\tpublic static isPerennialPlanting(commodityTypeId: eCommodityTypes): boolean {\r\n\t\tif (this.isTree(commodityTypeId) || commodityTypeId === eCommodityTypes.ALFALFA\r\n\t\t|| commodityTypeId === eCommodityTypes.CANEBERRY || commodityTypeId === eCommodityTypes.GRAPE\r\n\t\t) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Identical to isPerennialPlanting, except it uses a calculator interface\r\n\t * @param calculatorInterface\r\n\t */\r\n\tpublic static isPerennialCalc(calculatorInterface: string): boolean {\r\n\t\tif (this.isTreeCalc(calculatorInterface)) {\r\n\t\t\treturn true;\r\n\t\t} else if (calculatorInterface === eCommodityTypeCalculators.alfalfa ||\r\n\t\t\tcalculatorInterface === eCommodityTypeCalculators.caneberry) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static isTreeCalc(calculatorInterface: string): boolean {\r\n\t\tif (calculatorInterface === eCommodityTypeCalculators.almond ||\r\n\t\t\tcalculatorInterface === eCommodityTypeCalculators.pistachio ||\r\n\t\t\tcalculatorInterface === eCommodityTypeCalculators.walnut) {\r\n\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static isTree(commodityTypeId: number): boolean {\r\n\t\tif (commodityTypeId === eCommodityTypes.ALMOND ||\r\n\t\t\tcommodityTypeId === eCommodityTypes.PISTACHIO ||\r\n\t\t\tcommodityTypeId === eCommodityTypes.WALNUT ||\r\n\t\t\tcommodityTypeId === eCommodityTypes.PRUNE ||\r\n\t\t\tcommodityTypeId === eCommodityTypes.PEAR ||\r\n\t\t\tcommodityTypeId === eCommodityTypes.GRAPE ||\r\n\t\t\tcommodityTypeId === eCommodityTypes.CITRUS) {\r\n\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Associated with crop type parameters used to calculate fertilization\r\n\t * recommendation for strawberries, tomatoes, and caneberries (which inherit\r\n\t * from strawberries)\r\n\t * @param calculatorInterface\r\n\t * @returns\r\n\t */\r\n\tpublic static ignoresNFactors(calculatorInterface: string): boolean {\r\n\t\tif (calculatorInterface === eCommodityTypeCalculators.strawberry ||\r\n\t\t\tcalculatorInterface === eCommodityTypeCalculators.processingTomato ||\r\n\t\t\tcalculatorInterface === eCommodityTypeCalculators.caneberry) {\r\n\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static isTreeByInterface(calculatorInterface: string): boolean {\r\n\t\tif (calculatorInterface === eCommodityTypeCalculators.almond ||\r\n\t\t\tcalculatorInterface === eCommodityTypeCalculators.walnut ||\r\n\t\t\tcalculatorInterface === eCommodityTypeCalculators.pistachio) {\r\n\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static areSpringLeafNutrientsRequired(calculatorInterface: string): boolean {\r\n\t\tif (calculatorInterface === eCommodityTypeCalculators.walnut ||\r\n\t\t\tcalculatorInterface === eCommodityTypeCalculators.almond) {\r\n\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static areTreeCoefficientsRequired(calculatorInterface: string): boolean {\r\n\t\tif (calculatorInterface === eCommodityTypeCalculators.walnut) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static getIdsFromArray(cropTypes: ICropType[]) {\r\n\t\tlet result: number[];\r\n\r\n\t\tresult = new Array();\r\n\r\n\t\tfor (let cropType of cropTypes) {\r\n\t\t\tif (cropType.IsSelected) {\r\n\t\t\t\tresult.push(cropType.Id);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * In commodity type edit UI, if a crop type is used by at least one\r\n\t * planting, auto select it, to prevent it from getting deselected\r\n\t *\r\n\t * @param cropTypes\r\n\t */\r\n\tpublic static autoSelectCropTypes(cropTypes: ICropType[]): void {\r\n\t\tif (!cropTypes) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let cropType of cropTypes) {\r\n\t\t\tif (cropType.PlantingsCount > 0) {\r\n\t\t\t\tcropType.IsSelected = true;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { ModelService } from '../../services/model.service';\r\n\r\nimport { ISeasonalKC } from '../seasonal-kc/interfaces';\r\nimport { ICropType, ICropTypeViewModel, ICropTypeListItem, ICropTypeService } from './interfaces';\r\nimport { CropType } from './cropType';\r\nimport { of } from 'rxjs';\r\nimport { CMError } from '../../interfaces/interfaces';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { ISuccessResponse } from '../../components/ranch-settings/interfaces';\r\nimport { HttpServicePostOptions } from '../../services/http.service';\r\n\r\n@Injectable()\r\nexport class CropTypeService extends ModelService implements ICropTypeService {\r\n\r\n\tprivate urls = {\r\n\t\tget: (cropTypeId: number) => `/v2/crop-types/${cropTypeId}.json`,\r\n\t\tlistByRanch: (guid: string, commodityTypeId: number) => `/v2/ranches/${guid}/commodity-types/${commodityTypeId}/crop-types.json`,\r\n\t\tadmin: {\r\n\t\t\tlist: `/v2/crop-types.json`,\r\n\t\t\tgetCreateModel: `/v2/crop-types/form.json`,\r\n\t\t\tgetCloneModel: (cropTypeId: number) => `/v2/crop-types/${cropTypeId}/clone.json`,\r\n\t\t\tsave: `/v2/crop-types.json`,\r\n\t\t\tdelete: (cropTypeId: number) => `/v2/crop-types/${cropTypeId}.json`\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Get crop type list for admin section\r\n\t * @param id\r\n\t */\r\n\tpublic getCropTypesAdmin(includePrevious: boolean, commodityTypeId?: number): Promise<ICropTypeListItem[]> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams().set('includePrevious', includePrevious ? 'true' : 'false');\r\n\r\n\t\tif (commodityTypeId) {\r\n\t\t\tparams = params.set('commodityTypeId', commodityTypeId.toString());\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.admin.list,\r\n\t\t\t(response: ICropTypeListItem[]) => {\r\n\t\t\t\treturn response;\r\n\t\t\t},\r\n\t\t\tparams);\r\n\t}\r\n\r\n\tpublic getCreateModel(): Promise<ICropTypeViewModel> {\r\n\r\n\t\treturn this.get(this.urls.admin.getCreateModel,\r\n\t\t\t(response: ICropTypeViewModel) => {\r\n\r\n\t\t\treturn response;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Get Edit model for admin section\r\n\t */\r\n\tpublic getEditModel(id: number): Promise<ICropTypeViewModel> {\r\n\r\n\t\tif (!id) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.get(id),\r\n\t\t\t(response: ICropTypeViewModel): ICropTypeViewModel => {\r\n\r\n\t\t\treturn response;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getCloneModel(id: number): Promise<ICropTypeViewModel> {\r\n\r\n\t\tif (!id) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.get(this.urls.admin.getCloneModel(id),\r\n\t\t\t(response: ICropTypeViewModel): ICropTypeViewModel => {\r\n\r\n\t\t\treturn response;\r\n\t\t});\r\n\t}\r\n\r\n\t/** Save crop type data */\r\n\tpublic update(model: ICropTypeViewModel): Promise<ICropTypeViewModel | CMError> {\r\n\t\tif (!model.Id) {\r\n\t\t\tthrow new Error('crop Id is missing');\r\n\t\t}\r\n\r\n\t\treturn this.put(this.urls.admin.save,\r\n\t\t\t(response: ICropTypeViewModel | CMError ): ICropTypeViewModel | CMError  => {\r\n\t\t\t\treturn response;\r\n\t\t\t}, model);\r\n\t}\r\n\r\n\tpublic create(model: ICropTypeViewModel): Promise<ICropTypeViewModel | CMError> {\r\n\t\tif (model.Id) {\r\n\t\t\tthrow new Error('crop Id should not be defined');\r\n\t\t}\r\n\r\n\t\treturn this.post(this.urls.admin.save,\r\n\t\t\t(response: ICropTypeViewModel | CMError ): ICropTypeViewModel | CMError  => {\r\n\t\t\t\treturn response;\r\n\t\t\t}, model);\r\n\t}\r\n\r\n\r\n\r\n\tpublic delete(cropTypeId: number): Promise<ISuccessResponse | CMError> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.admin.delete(cropTypeId),\r\n\t\t\tbody: {},\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.delete(options);\r\n\t}\r\n\r\n\tpublic getCropModel(id: number): Promise<ICropTypeViewModel> {\r\n\r\n\t\treturn this.get(this.urls.get(id), (data: ICropTypeViewModel): ICropTypeViewModel => {\r\n\t\t\tif (!data.SeasonalKCs || !data.SeasonalKCs.length) {\r\n\t\t\t\treturn data;\r\n\t\t\t}\r\n\r\n\t\t\t// remove \"invalid\" months (less than 1 or greater than 12)\r\n\t\t\tdata.SeasonalKCs = (data.SeasonalKCs as ISeasonalKC[]).filter(x => x.Month > 0 && x.Month < 13);\r\n\r\n\t\t\treturn data;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a list of crop types associated with a commodity type for a particular ranch\r\n\t * @param ranchGuid\r\n\t * @param commodityTypeId\r\n\t * @returns\r\n\t */\r\n\tpublic getByRanch(ranchGuid: string, commodityTypeId: number): Promise<ICropType[]> {\r\n\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tif (!commodityTypeId) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tparams = new HttpParams().set('shouldFilterUnassociated', 'true');\r\n\r\n\t\treturn this.get(this.urls.listByRanch(ranchGuid, commodityTypeId),\r\n\t\t\t(cropTypes: ICropType[]) => {\r\n\t\t\t\treturn cropTypes;\r\n\t\t\t}, params);\r\n\t}\r\n\r\n\tpublic getAllByRanch(ranchGuid: string, commodityTypeId: number): Promise<ICropType[]> {\r\n\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams().set('shouldFilterUnassociated', 'false');\r\n\r\n\t\treturn this.get(this.urls.listByRanch(ranchGuid, commodityTypeId),\r\n\t\t\t(cropTypes: ICropType[]) => {\r\n\t\t\t\tCropType.autoSelectCropTypes(cropTypes);\r\n\t\t\t\treturn cropTypes;\r\n\t\t\t}, params);\r\n\t}\r\n}\r\n","import { IrrigationEvent } from '../../components/irrigation-event/irrigationEvent';\r\nimport { FertilizationEvent } from '../../components/fertilization-event/fertilizationEvent';\r\nimport { SoilSampleEvent } from '../../components/soil-sample-event/soilSampleEvent';\r\nimport { FlowMeter } from '../../components/flowmeter-graph/flowMeter';\r\n\r\nimport { IRainfallWeather } from '../../components/irrigation-event/interfaces';\r\nimport { IRawEvent, IEventPostResponseJSON, IEventPostResponse } from './interfaces';\r\n\r\nimport {\r\n\tEventContext, eIrrigationMethods, EventTypeName, EventTypeNames, irrigationMethodNames,\r\n\tunits, waterUnit, eCommodityTypes, EventsType\r\n} from '../../interfaces/constants';\r\nimport { EventUtility } from './eventUtility';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { RanchService } from '../../components/ranch-settings/service';\r\nimport { CutEvent } from '../../components/cut-event/cutEvent';\r\nimport { IMaturity } from '../maturity/interfaces';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport * as jQuery from 'jquery';\r\nimport { TissueSampleEvent } from '../../components/tissue-sample-event/tissueSampleEvent';\r\n\r\nexport class EventGroup {\r\n\tpublic ActiveEvents?: string; // active events string used to display upcoming events in plantings view\r\n\tpublic Id: number;\r\n\tpublic CutEvent: CutEvent = null;\r\n\tpublic CuttingDaysSincePreviousCutting: number;\r\n\tpublic CuttingMaturityName: string; // controls table sorting\r\n\tpublic CuttingYield: number;\r\n\tpublic EventDate: Date;\r\n\tpublic EventDateString: string; // result of Date.getTime() converted to string,\r\n\tpublic eventType: EventsType; // virtual\r\n\tpublic Fertilization: FertilizationEvent[] = null;\r\n\tpublic FertilizationCropStageName: string;\r\n\tpublic FertilizationDisplayFertilizationUnit: number;\r\n\tpublic FertilizationDisplayLbsNPerAcre: number;\r\n\tpublic FertilizationFertilizerApplied: number;\r\n\tpublic FertilizationFertilizerName: string;\r\n\tpublic FertilizationNApplied: number;\r\n\tpublic FertilizationNAppliedFromWater: number;\r\n\tpublic FertilizationNUptake: number;\r\n\tpublic FertilizationRecommendation: number;\r\n\tpublic FertilizationsoilNitrate: number;\r\n\tpublic hiddenInListView: boolean;\r\n\tpublic Irrigation: IrrigationEvent = null;\r\n\tpublic IrrigationAppliedInches: number;\r\n\tpublic IrrigationAppliedHours: number;\r\n\tpublic IrrigationAvailableSoilMoisture: number;\r\n\tpublic IrrigationCanopyCover: number;\r\n\tpublic IrrigationContributingRainfall: number;\r\n\tpublic IrrigationCumulativeRainfall: number;\r\n\tpublic IrrigationCropCoefficient: number;\r\n\tpublic IrrigationDisplayAmount: number;\r\n\tpublic IrrigationInterval: number;\r\n\tpublic IrrigationIrrigationMethod: string;\r\n\tpublic IrrigationRainfall: number;\r\n\tpublic IrrigationRecommendationHours: number;\r\n\tpublic IrrigationRecommendedMaxIrrigationInterval: number;\r\n\tpublic IrrigationRecommendationInches: number;\r\n\tpublic IrrigationReferenceET: number;\r\n\tpublic IrrigationTotalCropET: number;\r\n\tpublic isFuture: boolean;\r\n\tpublic isOnOrBeforeWetDate: boolean;\r\n\tpublic isPast: boolean;\r\n\tpublic JSEventDate: Date;\r\n\tpublic originalEventDate: Date; // virtual - used to maintain planting array when event is moved from\r\n\t\t// one date to the next\r\n\tpublic RainfallWeather: IRainfallWeather;\r\n\tpublic SoilSamples: SoilSampleEvent[] = null;\r\n\tpublic SoilSamplesCropStageName: string;\r\n\tpublic SoilSamplesDepth: number;\r\n\tpublic SoilSamplesSampleType: string;\r\n\tpublic SoilSamplesSoilMineralNLbsAcre: number;\r\n\tpublic SoilSamplesSoilNitrateNPPM: number; // controls table sorting\r\n\tpublic TissueSamples: TissueSampleEvent[] = null;\r\n\tpublic TissueSamplesCropStageName: string;\r\n\tpublic TissueSamplesLocationName: string;\r\n\tpublic TissueSamplesNitrate: number;\r\n\r\n\t// some of the above fields are properties only for display\r\n\t// which is used for sorting\r\n\t// REFACTOR - these should not be at the top level of EventGroup.. they should\r\n\t// be tucked away in eventGroup.Irrigation, etc.\r\n\r\n\t/**\r\n     * Convert multiple event JSON into eventGroups\r\n     * @param events\r\n     * @param persistentDatabase\r\n     */\r\n\tpublic static convertAll(events: IRawEvent[], wetDate: Date): EventGroup[] {\r\n\t\tlet result: EventGroup[];\r\n\r\n\t\tresult = new Array();\r\n\r\n\t\tevents = EventGroup.removeHiddenEvents(events);\r\n\r\n\t\tfor (let event of events) {\r\n\t\t\tlet item: EventGroup;\r\n\r\n\t\t\titem = new EventGroup();\r\n\t\t\titem.convert(event, wetDate);\r\n\t\t\tresult.push(item);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n     * Convert from JSON into EventGroup - wrote to reduce redundant code in calling controllers\r\n     * @param json\r\n     * @param planting\r\n     * @param ranchService\r\n     */\r\n\tpublic static convertFromJSON(json: IEventPostResponseJSON, wetDate: Date, plantingId: number,\r\n\t\tranchService: RanchService): EventGroup {\r\n\r\n\t\tlet eventGroup: EventGroup;\r\n\r\n\t\tif (!json || !json.Events) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\teventGroup = new EventGroup();\r\n\t\teventGroup.convert(json.Events[0], wetDate);\r\n\r\n\t\tEventGroup.updateEvents(json.EventGroupsSucceeding, plantingId,\r\n\t\t\twetDate, ranchService);\r\n\r\n\t\teventGroup.Id = json.Id;\r\n\t\teventGroup.ActiveEvents = json.ActiveEvents;\r\n\r\n\t\treturn eventGroup;\r\n\t}\r\n\r\n\t/**\r\n     * Create meta data for events for list view\r\n     *\r\n     * @param events\r\n     * @param commodityTypeId\r\n     * @param maturities\r\n     */\r\n\tpublic static createMetadata(events: EventGroup[], commodityTypeId: number,\r\n\t\tmaturities: IMaturity[]): EventGroup[] {\r\n\r\n\t\tlet now: Date;\r\n\t\tlet result: EventGroup[];\r\n\r\n\t\tnow = new Date();\r\n\r\n\t\tif (!events || events.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnow.setHours(0, 0, 0, 0);\r\n\t\tresult = new Array();\r\n\r\n\t\tfor (let event of events) {\r\n\r\n\t\t\tevent.EventDateString = event.EventDate.getTime().toString();\r\n\r\n\t\t\tif (event.EventDate > now) {\r\n\t\t\t\tevent.isFuture = true;\r\n\t\t\t} else {\r\n\t\t\t\tevent.isFuture = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (event.Irrigation) {\r\n\t\t\t\tevent.IrrigationDisplayAmount = event.Irrigation.DisplayAmount;\r\n\t\t\t\tevent.IrrigationIrrigationMethod = event.Irrigation.IrrigationMethod\r\n\t\t\t\tevent.IrrigationInterval = event.Irrigation.Interval;\r\n\r\n\t\t\t\tif (event.Irrigation.IsRainfall) {\r\n\t\t\t\t\tevent.IrrigationRecommendedMaxIrrigationInterval = -1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tevent.IrrigationRecommendedMaxIrrigationInterval = event.Irrigation.RecommendedIrrigationInterval;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tevent.IrrigationRecommendationInches = event.Irrigation.RecommendationInches;\r\n\t\t\t\tevent.IrrigationRecommendationHours = event.Irrigation.RecommendationHours;\r\n\t\t\t\tevent.IrrigationAppliedInches = event.Irrigation.AppliedInches;\r\n\t\t\t\tevent.IrrigationAppliedHours = event.Irrigation.AppliedHours;\r\n\t\t\t\tevent.IrrigationCropCoefficient = -1;\r\n\t\t\t\tevent.IrrigationCanopyCover = -1;\r\n\t\t\t\tevent.IrrigationReferenceET = -1;\r\n\t\t\t\tevent.IrrigationTotalCropET = -1;\r\n\t\t\t\tevent.IrrigationAvailableSoilMoisture = -1;\r\n\t\t\t\tevent.IrrigationContributingRainfall = event.Irrigation.ContributingRainfall;\r\n\t\t\t\tevent.IrrigationCumulativeRainfall = event.Irrigation.ContributingRainfall + event.Irrigation.Rainfall;\r\n\t\t\t} else {\r\n\t\t\t\tevent.IrrigationDisplayAmount = -1;\r\n\t\t\t\tevent.IrrigationIrrigationMethod = '-1';\r\n\t\t\t\tevent.IrrigationInterval = -1;\r\n\t\t\t\tevent.IrrigationRecommendedMaxIrrigationInterval = -1;\r\n\t\t\t\tevent.IrrigationRecommendationInches = -1;\r\n\t\t\t\tevent.IrrigationRecommendationHours = -1;\r\n\t\t\t\tevent.IrrigationAppliedInches = -1;\r\n\t\t\t\tevent.IrrigationAppliedHours = -1;\r\n\t\t\t\tevent.IrrigationRainfall = -1;\r\n\t\t\t\tevent.IrrigationContributingRainfall = -1;\r\n\t\t\t\tevent.IrrigationCumulativeRainfall = -1;\r\n\t\t\t}\r\n\r\n\t\t\tEventGroup.unpackFertilizationEvents(event, result, commodityTypeId);\r\n\t\t\tEventGroup.unpackTissueSampleEvents(event, result);\r\n\r\n\t\t\t// may rewrite to use loops in template instead of this...\r\n\r\n\t\t\tif (event.SoilSamples) {\r\n\t\t\t\tfor (let index in event.SoilSamples) {\r\n\t\t\t\t\t// keep at least one soil sample in the eventGroup, so eventGroup isn't empty\r\n\t\t\t\t\tif (Number(index) === 0) {\r\n\t\t\t\t\t\tevent.SoilSamplesSoilNitrateNPPM = event.SoilSamples[0].SoilNitrateNPPM;\r\n\t\t\t\t\t\tevent.SoilSamplesSoilMineralNLbsAcre = event.SoilSamples[0].SoilMineralNLbsAcre;\r\n\t\t\t\t\t\tevent.SoilSamplesSampleType = event.SoilSamples[0].SampleType;\r\n\t\t\t\t\t\tevent.SoilSamplesDepth = event.SoilSamples[0].Depth;\r\n\r\n\t\t\t\t\t\tevent.SoilSamplesCropStageName = event.SoilSamples[0].CropStage ?\r\n\t\t\t\t\t\t\tevent.SoilSamples[0].CropStage.Name : null;\r\n\r\n\t\t\t\t\t\tevent.SoilSamples[0].Nutrients = SoilSampleEvent.insertNitrateNIntoNutrients(event.SoilSamples[0]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tlet newEvent: EventGroup;\r\n\r\n\t\t\t\t\t\tnewEvent = EventGroup.initializeEventGroup(event);\r\n\t\t\t\t\t\tnewEvent.hiddenInListView = true;\r\n\r\n\t\t\t\t\t\tnewEvent.SoilSamples.push(jQuery.extend(true, {}, event.SoilSamples[index]));\r\n\t\t\t\t\t\tnewEvent.SoilSamplesSoilNitrateNPPM = newEvent.SoilSamples[0].SoilNitrateNPPM;\r\n\t\t\t\t\t\tnewEvent.SoilSamplesSoilMineralNLbsAcre = newEvent.SoilSamples[0].SoilMineralNLbsAcre;\r\n\t\t\t\t\t\tnewEvent.SoilSamplesSampleType = newEvent.SoilSamples[0].SampleType;\r\n\t\t\t\t\t\tnewEvent.SoilSamplesDepth = newEvent.SoilSamples[0].Depth;\r\n\r\n\t\t\t\t\t\tnewEvent.SoilSamplesCropStageName = newEvent.SoilSamples[0].CropStage ?\r\n\t\t\t\t\t\t\tnewEvent.SoilSamples[0].CropStage.Name : null;\r\n\r\n\t\t\t\t\t\tnewEvent.SoilSamples[0].Nutrients = SoilSampleEvent.insertNitrateNIntoNutrients(event.SoilSamples[index]);\r\n\t\t\t\t\t\t// additionalSoilSamples.push(newEvent); // each soil sample\r\n\t\t\t\t\t\tresult.push(newEvent);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// for (let newEvent of additionalSoilSamples) {\r\n\t\t\t\t\t//     processedEvents.push(newEvent); // each additionalSoilSamples is added to allEvents\r\n\t\t\t\t\t// }\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tevent.SoilSamplesSoilNitrateNPPM = -1;\r\n\t\t\t\tevent.SoilSamplesSoilMineralNLbsAcre = -1;\r\n\t\t\t\tevent.SoilSamplesSampleType = '-1';\r\n\t\t\t\tevent.SoilSamplesDepth = -1;\r\n\t\t\t\tevent.SoilSamplesCropStageName = '-1';\r\n\t\t\t}\r\n\r\n\t\t\tif (event.CutEvent) {\r\n\t\t\t\tevent.CuttingYield = event.CutEvent.Yield;\r\n\t\t\t\tevent.CuttingMaturityName = EventGroup.getMaturityNameById(maturities, event.CutEvent.MaturityId);\r\n\r\n\t\t\t\tevent.CuttingDaysSincePreviousCutting = event.CutEvent.CutInterval;\r\n\t\t\t} else {\r\n\t\t\t\tevent.CuttingYield = -1;\r\n\t\t\t\tevent.CuttingMaturityName = '-1';\r\n\t\t\t\tevent.CuttingDaysSincePreviousCutting = -1;\r\n\t\t\t}\r\n\r\n\t\t\tresult.push(event);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate static getMaturityNameById(maturities: IMaturity[], maturityId: number): string {\r\n\t\tlet maturity: IMaturity;\r\n\r\n\t\tif (!ValidateService.isValidNumber(maturityId)) {\r\n\t\t\treturn '-1';\r\n\t\t}\r\n\r\n\t\tif (!maturities || !maturities.length) {\r\n\t\t\treturn '-1';\r\n\t\t}\r\n\r\n\t\tmaturity = maturities.filter(x => x.Id === maturityId)[0];\r\n\r\n\t\tif (!maturity) {\r\n\t\t\treturn '-1';\r\n\t\t}\r\n\r\n\t\treturn maturity.Name;\r\n\t}\r\n\r\n\tpublic static initializeEventGroup(originalEvent: EventGroup): EventGroup {\r\n\t\tlet result: EventGroup;\r\n\r\n\t\tif (originalEvent) {\r\n\t\t\tresult = jQuery.extend(true, new EventGroup(), originalEvent);\r\n\t\t} else {\r\n\t\t\tresult = new EventGroup();\r\n\t\t}\r\n\r\n\t\tresult.hiddenInListView = true; // filters out this event from list views -\r\n\t\t\t// otherwise will show as duplicate\r\n\r\n\t\tresult.Irrigation = null;\r\n\t\tresult.IrrigationDisplayAmount = -1;\r\n\t\tresult.IrrigationIrrigationMethod = '-1';\r\n\t\tresult.IrrigationInterval = -1;\r\n\t\tresult.IrrigationRecommendedMaxIrrigationInterval = -1;\r\n\t\tresult.IrrigationRecommendationInches = -1;\r\n\t\tresult.IrrigationRecommendationHours = -1;\r\n\t\tresult.IrrigationAppliedInches = -1;\r\n\t\tresult.IrrigationAppliedHours = -1;\r\n\t\tresult.IrrigationRainfall = -1;\r\n\t\tresult.Fertilization = new Array();\r\n\t\tresult.FertilizationDisplayFertilizationUnit = -1;\r\n\t\tresult.FertilizationDisplayLbsNPerAcre = -1;\r\n\t\tresult.FertilizationCropStageName = '-1';\r\n\t\tresult.FertilizationsoilNitrate = -1;\r\n\t\tresult.FertilizationNAppliedFromWater = -1;\r\n\t\tresult.FertilizationNUptake = -1;\r\n\t\tresult.FertilizationFertilizerName = '-1';\r\n\t\tresult.FertilizationRecommendation = -1;\r\n\t\tresult.FertilizationFertilizerApplied = -1;\r\n\t\tresult.FertilizationNApplied = -1;\r\n\t\tresult.SoilSamples = new Array();\r\n\t\tresult.TissueSamples = new Array();\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n     * remove \"bookmark\" cut events and soil tension reading irrigation events\r\n     *\r\n     * WARNING: Also removes events where no \"event\" is detected, which is not related to this functionality\r\n     * @param events\r\n     */\r\n\tpublic static removeHiddenEvents(events: IRawEvent[]): IRawEvent[] {\r\n\t\tlet result: IRawEvent[] = new Array();\r\n\r\n\t\tif (!events || !events.length) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tfor (let event of events) {\r\n\t\t\tif (event.Irrigation && event.Irrigation.IrrigationMethodId === eIrrigationMethods.SOIL_TENSION_READING) {\r\n\t\t\t\tevent.Irrigation = null;\r\n\t\t\t}\r\n\r\n\t\t\tif (event.CutEvent && event.CutEvent.IsBookmark) {\r\n\t\t\t\tevent.CutEvent = null;\r\n\t\t\t}\r\n\r\n\t\t\tif (EventUtility.hasNoEvents(event)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tresult.push(event);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n     * Prep display fields for event tables/lists. Modifies eventGroup\r\n     *\r\n     * @param event\r\n     * @param eventGroup event group will be modified\r\n     */\r\n\tprivate static setFertlizationEventDisplayFields(event: FertilizationEvent, eventGroup: EventGroup, commodityTypeId: number) {\r\n\t\tif (!event) {\r\n\t\t\teventGroup.FertilizationDisplayFertilizationUnit = -1;\r\n\t\t\teventGroup.FertilizationDisplayLbsNPerAcre = -1;\r\n\t\t\teventGroup.FertilizationCropStageName = '-1';\r\n\t\t\teventGroup.FertilizationsoilNitrate = -1;\r\n\t\t\teventGroup.FertilizationNAppliedFromWater = -1;\r\n\t\t\teventGroup.FertilizationNUptake = -1;\r\n\t\t\teventGroup.FertilizationFertilizerName = '-1';\r\n\t\t\teventGroup.FertilizationRecommendation = -1;\r\n\t\t\teventGroup.FertilizationFertilizerApplied = -1;\r\n\t\t\teventGroup.FertilizationNApplied = -1;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\teventGroup.FertilizationDisplayFertilizationUnit = event.DisplayFertilizationUnit;\r\n\t\teventGroup.FertilizationDisplayLbsNPerAcre = event.DisplayLbsNPerAcre;\r\n\t\teventGroup.FertilizationCropStageName = event.CropStage ? event.CropStage.Name : null;\r\n\t\teventGroup.FertilizationsoilNitrate = event.SoilNitrate;\r\n\t\teventGroup.FertilizationNAppliedFromWater = event.NAppliedFromWater;\r\n\t\teventGroup.FertilizationNUptake = event.NUptake;\r\n\t\teventGroup.FertilizationFertilizerName = event.FertilizerName;\r\n\t\teventGroup.FertilizationRecommendation = event.Recommendation.cropManage;\r\n\r\n\t\tif (event.Recommendation && commodityTypeId === eCommodityTypes.ALFALFA) {\r\n\t\t\teventGroup.FertilizationRecommendation = event.Recommendation.managerFertilizerAmount;\r\n\t\t\t// if alfalfa, just use the manager's fertilizer amount.\r\n\t\t}\r\n\r\n\t\tif (event.FertilizerApplied) {\r\n\t\t\teventGroup.FertilizationFertilizerApplied = event.FertilizerApplied;\r\n\t\t} else {\r\n\t\t\teventGroup.FertilizationFertilizerApplied = 0;\r\n\t\t}\r\n\r\n\t\tif (event.NApplied) {\r\n\t\t\teventGroup.FertilizationNApplied = event.NApplied;\r\n\t\t} else {\r\n\t\t\teventGroup.FertilizationNApplied = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate static setTissueSampleEventDisplayFields(event: TissueSampleEvent,\r\n\t\teventGroup: EventGroup): void {\r\n\r\n\t\tif (!eventGroup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!event) {\r\n\t\t\teventGroup.TissueSamplesLocationName = '-1'; // REFACTOR - should not have numbers as strings\r\n\t\t\teventGroup.TissueSamplesCropStageName = '-1';\r\n\t\t\teventGroup.TissueSamplesNitrate = -1;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\teventGroup.TissueSamplesCropStageName = event.CropStage ? event.CropStage.Name : '-1';\r\n\t\teventGroup.TissueSamplesLocationName = '-1';\r\n\t}\r\n\r\n\tpublic static sortEvents(events: EventGroup[]): EventGroup[] {\r\n\t\tlet result: EventGroup[];\r\n\r\n\t\tif (!events) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tresult = events.sort(function (a, b) {\r\n\t\t\treturn Number(a.EventDateString) - Number(b.EventDateString);\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate static unpackFertilizationEvents(eventGroupOriginal: EventGroup, eventGroups: EventGroup[], commodityTypeId: number): void {\r\n\r\n\t\tlet count = 0;\r\n\r\n\t\tif (!eventGroupOriginal.Fertilization || eventGroupOriginal.Fertilization.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let fertilization of eventGroupOriginal.Fertilization) {\r\n\t\t\tlet eventGroupCopy: EventGroup;\r\n\r\n\t\t\tif (count === 0) {\r\n\t\t\t\tEventGroup.setFertlizationEventDisplayFields(fertilization, eventGroupOriginal, commodityTypeId);\r\n\t\t\t\tcount++;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\teventGroupCopy = EventGroup.initializeEventGroup(eventGroupOriginal);\r\n\t\t\tEventGroup.setFertlizationEventDisplayFields(fertilization, eventGroupCopy, commodityTypeId);\r\n\r\n\t\t\teventGroupCopy.Fertilization = [\r\n\t\t\t\tfertilization\r\n\t\t\t];\r\n\r\n\t\t\teventGroups.push(eventGroupCopy);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate static unpackTissueSampleEvents(eventGroupOriginal: EventGroup,\r\n\t\teventGroups: EventGroup[]): void {\r\n\r\n\t\tlet count = 0;\r\n\r\n\t\tif (!eventGroupOriginal.TissueSamples || eventGroupOriginal.TissueSamples.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let tissueSample of eventGroupOriginal.TissueSamples) {\r\n\t\t\tlet eventGroupCopy: EventGroup;\r\n\r\n\t\t\tif (count === 0) {\r\n\t\t\t\tEventGroup.setTissueSampleEventDisplayFields(tissueSample, eventGroupOriginal);\r\n\t\t\t\tcount++;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\teventGroupCopy = EventGroup.initializeEventGroup(eventGroupOriginal);\r\n\t\t\tEventGroup.setTissueSampleEventDisplayFields(tissueSample, eventGroupCopy);\r\n\r\n\t\t\teventGroupCopy.TissueSamples = [\r\n\t\t\t\ttissueSample\r\n\t\t\t];\r\n\r\n\t\t\teventGroups.push(eventGroupCopy);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n     * Used to update multiple event groups - mainly used for alfalfa's succeeding event problem\r\n     *\r\n     * @param eventGroups\r\n     * @param wetDate\r\n     */\r\n\tpublic static updateEvents(eventGroupsRaw: IRawEvent[], plantingId: number, wetDate: Date,\r\n\t\tranchService: RanchService): void {\r\n\r\n\t\tlet eventGroups: EventGroup[];\r\n\r\n\t\tif (!eventGroupsRaw || eventGroupsRaw.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\teventGroups = EventGroup.convertAll(eventGroupsRaw,\r\n\t\t\twetDate);\r\n\r\n\t\tfor (let eventGroup of eventGroups) {\r\n\t\t\tranchService.plantings.updatePlantingEvents(eventGroup, plantingId);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic convert(rawEvent: IRawEvent, wetDate: Date): void {\r\n\r\n\t\tlet dateArr: number[];\r\n\t\tlet date: Date;\r\n\t\tlet now: Date;\r\n\t\tlet soilSample: SoilSampleEvent;\r\n\r\n\t\tif (!rawEvent) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tdateArr = rawEvent.EventDate.split('/').map((n) => {\r\n\t\t\treturn parseInt(n, 10);\r\n\t\t});\r\n\r\n\t\tdate = new Date(dateArr[2], dateArr[0] - 1, dateArr[1]);\r\n\t\tnow = new Date();\r\n\r\n\t\tnow.setHours(0, 0, 0, 0);\r\n\t\tthis.isFuture = date > now;\r\n\t\tthis.isPast = date < now;\r\n\r\n\t\tthis.EventDate = new Date(rawEvent.EventDate);\r\n\t\tthis.RainfallWeather = rawEvent.RainfallWeather;\r\n\r\n\t\tthis.isOnOrBeforeWetDate = DateUtility.isOnOrBefore(this.EventDate, wetDate);\r\n\r\n\t\tif (rawEvent.Irrigation) {\r\n\t\t\tthis.Irrigation = new IrrigationEvent();\r\n\r\n\t\t\tthis.Irrigation.convert(rawEvent.Irrigation, this.RainfallWeather, this.isFuture);\r\n\t\t}\r\n\r\n\t\tif (rawEvent.Fertilization && rawEvent.Fertilization.length > 0) {\r\n\t\t\tthis.Fertilization = new Array();\r\n\r\n\t\t\tfor (let fe of rawEvent.Fertilization) {\r\n\t\t\t\tlet fertilizationEvent = new FertilizationEvent();\r\n\r\n\t\t\t\tfertilizationEvent.convert(fe, this.EventDate);\r\n\r\n\t\t\t\tthis.Fertilization.push(fertilizationEvent);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (rawEvent.SoilSamples) {\r\n\t\t\tthis.SoilSamples = new Array();\r\n\r\n\t\t\tfor (let sample of rawEvent.SoilSamples) {\r\n\t\t\t\tsoilSample = new SoilSampleEvent();\r\n\r\n\t\t\t\tsoilSample.convert(sample);\r\n\r\n\t\t\t\tthis.SoilSamples.push(soilSample);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (rawEvent.TissueSamples) {\r\n\t\t\tthis.TissueSamples = new Array();\r\n\r\n\t\t\tfor (let sample of rawEvent.TissueSamples) {\r\n\t\t\t\tlet tissueSample: TissueSampleEvent;\r\n\r\n\t\t\t\ttissueSample = new TissueSampleEvent();\r\n\r\n\t\t\t\ttissueSample.convertTissueSampleModel(sample);\r\n\r\n\t\t\t\tthis.TissueSamples.push(tissueSample);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (rawEvent.CutEvent) {\r\n\t\t\tthis.CutEvent = new CutEvent();\r\n\t\t\tthis.CutEvent.transmuteJSON(rawEvent.CutEvent);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getFloodAmount(context: EventContext, isRecommendation: boolean = null): number {\r\n\t\tlet isCropManageRecommendation: boolean;\r\n\r\n\t\tif (!this.Irrigation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// applied values are only in hours\r\n\t\tif (isRecommendation === false) {\r\n\t\t\treturn this.Irrigation.AppliedHours;\r\n\t\t}\r\n\r\n\t\tisCropManageRecommendation = this.isCropManageRecommendationIrrigation(context);\r\n\r\n\t\treturn isCropManageRecommendation ? this.Irrigation.RecommendationInches : this.Irrigation.RecommendationHours;\r\n\t}\r\n\r\n\tpublic isCropManageRecommendation(eventTypeName: EventTypeName, context: EventContext): boolean {\r\n\t\tswitch (eventTypeName) {\r\n\t\t\tcase EventTypeNames.WATER:\r\n\t\t\t\treturn this.isCropManageRecommendationIrrigation(context);\r\n\t\t\tcase EventTypeNames.FERTILIZER:\r\n\t\t\t\treturn this.isCropManageRecommendationFertilization(context);\r\n\t\t\tcase EventTypeNames.SOILSAMPLES:\r\n\t\t\t\treturn false;\r\n\t\t\tcase EventTypeNames.CUTTING:\r\n\t\t\t\treturn false;\r\n\t\t\tdefault:\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n     * NOTE: We assume that this.Fertilization at this point only has 1 fertilization event, which is true\r\n     * after event table initially loads and processes the event stream.\r\n     *\r\n     * @param context\r\n     */\r\n\tpublic isCropManageRecommendationFertilization(context: EventContext): boolean {\r\n\t\tif (!this.Fertilization || this.Fertilization.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context !== EventContext.TABLE && (this.Fertilization[0].FertilizerApplied != null || this.Fertilization[0].NApplied != null)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this.Fertilization[0].Recommendation.manager != null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic isCropManageRecommendationIrrigation(context: EventContext): boolean {\r\n\t\tif (!this.Irrigation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.Irrigation.IrrigationMethodId === eIrrigationMethods.RAINFALL) {\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (this.Irrigation.HasFlowmeterData && this.Irrigation.WaterApplied !== null &&\r\n\t\t\tFlowMeter.getFlowmeterWaterApplied(this.Irrigation) === this.Irrigation.WaterApplied) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (context !== EventContext.TABLE && this.Irrigation.WaterApplied !== null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this.Irrigation.ManagerAmountRecommendation != null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic showCutEventWarning(): boolean {\r\n\t\tif (!this.CutEvent) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.isPast === false) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn this.CutEvent.Yield <= 0;\r\n\t}\r\n\r\n\tpublic showFloodInfoIcon(context: EventContext, waterUnits: waterUnit, appliedOnly = false): boolean {\r\n\t\tlet isCropManageRecommendation: boolean;\r\n\r\n\t\tif (!this.Irrigation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (appliedOnly) {\r\n\t\t\treturn waterUnits === units.water.inches;\r\n\t\t}\r\n\r\n\t\tisCropManageRecommendation = this.isCropManageRecommendationIrrigation(context);\r\n\r\n\t\treturn isCropManageRecommendation ? waterUnits === units.water.hours : waterUnits === units.water.inches;\r\n\t}\r\n}\r\n","import { IEventPostResponseJSON, IEventPostResponse, IRawEvent } from './interfaces';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { EventGroup } from './event';\r\nimport { RanchService } from '../../components/ranch-settings/service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { EventsType } from '../../interfaces/constants';\r\n\r\nexport class EventResponse implements IEventPostResponse {\r\n\r\n\tpublic ActiveEvents: string;\r\n\tpublic EventGroupsSucceeding: EventGroup[];\r\n\tpublic Events: EventGroup[];\r\n\tpublic Id: number;\r\n\tpublic SucceedingEventGroupsRaw: IRawEvent[];\r\n\tpublic WetDate: Date;\r\n\r\n\tconstructor(response: IEventPostResponseJSON) {\r\n\t\tlet eventGroup: EventGroup;\r\n\r\n\t\tif (!response || !response.Events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.WetDate = DateUtility.DotNetToDate(response.WetDate);\r\n\r\n\t\teventGroup = new EventGroup();\r\n\t\teventGroup.convert(response.Events[0], this.WetDate);\r\n\r\n\t\tthis.SucceedingEventGroupsRaw = response.EventGroupsSucceeding;\r\n\r\n\t\tthis.Id = response.Id;\r\n\t\tthis.Events = EventGroup.convertAll(response.Events, this.WetDate);\r\n\t\tthis.EventGroupsSucceeding = EventGroup.convertAll(response.EventGroupsSucceeding, this.WetDate);\r\n\t\tthis.ActiveEvents = response.ActiveEvents;\r\n\t}\r\n\r\n\tpublic getEventGroup(eventType: EventsType, originalDate: Date): EventGroup {\r\n\t\tlet eventGroup: EventGroup;\r\n\r\n\t\tif (!this.Events || this.Events.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\teventGroup = this.Events[0];\r\n\t\teventGroup.ActiveEvents = this.ActiveEvents;\r\n\t\teventGroup.Id = this.Id;\r\n\t\teventGroup.eventType = eventType;\r\n\t\teventGroup.originalEventDate = originalDate;\r\n\r\n\t\treturn eventGroup;\r\n\t}\r\n\r\n\tpublic updateServices(eventType: EventsType, originalDate: Date,\r\n\t\tplantingId: number,\r\n\t\tranchService: RanchService, updateService: UpdateService): void {\r\n\r\n\t\tlet eventGroup: EventGroup;\r\n\r\n\t\teventGroup = this.getEventGroup(eventType, originalDate);\r\n\r\n\t\tranchService.plantings.addEventToPlantings(eventGroup,\r\n\t\t\tplantingId, this.Id);\r\n\r\n\t\tupdateService.setPlantingsUpdated(updateService.currentRanchId, new Date());\r\n\t\tupdateService.setEventUpdated(this.Id, eventGroup); // update icon\r\n\t}\r\n\r\n\tpublic updateSucceedingEvents(plantingId: number, ranchService: RanchService): void {\r\n\t\tEventGroup.updateEvents(this.SucceedingEventGroupsRaw, plantingId,\r\n\t\t\tthis.WetDate, ranchService);\r\n\t}\r\n}\r\n","import * as moment from 'moment';\r\n\r\nimport { CalculateService } from '../../services/calculate.service';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { FlowMeter } from '../../components/flowmeter-graph/flowMeter';\r\n\r\nimport { IEventGroup, IRawEvent } from './interfaces';\r\nimport { IFertilizationEvent } from '../../components/fertilization-event/interfaces';\r\nimport { IIrrigationEvent, IIrrigationRecommendationSummaryModel } from '../../components/irrigation-event/interfaces';\r\nimport { ISoilSampleEvent } from '../../components/soil-sample-event/interfaces';\r\nimport { ICutEvent } from '../../components/cut-event/cut-event.interfaces';\r\n\r\nimport {\r\n\tEventsView, EventsType, EventTypeNames, EventContext,\r\n\tirrigationMethodNames,\r\n\teIrrigationMethods\r\n} from '../../interfaces/constants';\r\nimport { INutrient } from '../nutrient/interfaces';\r\nimport { FertilizationEvent } from '../../components/fertilization-event/fertilizationEvent';\r\nimport { IrrigationEvent } from '../../components/irrigation-event/irrigationEvent';\r\n\r\nexport class EventUtility {\r\n\r\n\tpublic static getSoilSampleValue(event: IEventGroup, past: boolean): number {\r\n\t\tif (!event || event == null || !event.SoilSamples || !event.SoilSamples[0] || event.SoilSamples[0] == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!past) {\r\n\t\t\treturn event.SoilSamples[0].Depth;\r\n\t\t}\r\n\r\n\t\tif (this.soilSampleApplied(event, past)) {\r\n\t\t\treturn event.SoilSamples[0].SoilNitrateNPPM;\r\n\t\t}\r\n\r\n\t\treturn event.SoilSamples[0].Depth;\r\n\t}\r\n\r\n\tpublic static getSoilSampleValueFromIndex(event: IEventGroup, past: boolean, index: number): number {\r\n\t\tif (!event || event == null || !event.SoilSamples || !event.SoilSamples[index]\r\n\t\t\t|| event.SoilSamples[index] == null) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!past) { // scheduled event, so no applied value should exist\r\n\t\t\treturn event.SoilSamples[index].Depth;\r\n\t\t}\r\n\r\n\t\tif (this.isSoilSampleApplied(event, past, index)) {\r\n\t\t\treturn event.SoilSamples[index].SoilNitrateNPPM;\r\n\t\t}\r\n\r\n\t\treturn event.SoilSamples[index].Depth;\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param event\r\n\t * @param past\r\n\t * @returns true if the event is a past event and applied field is null\r\n\t */\r\n\tpublic static shouldDisplayFertilizationWarning(event: IFertilizationEvent, past: boolean): boolean {\r\n\t\tif (!event) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!past) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (event.FertilizerApplied === null || event.NApplied === null) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static soilSampleApplied(event: IEventGroup, past: boolean, isNDependent = true): boolean {\r\n\t\tif (!event || !event.SoilSamples || !event.SoilSamples[0]) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (!past) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (!isNDependent) {\r\n\t\t\tfor (let nutrient of event.SoilSamples[0].Nutrients) {\r\n\t\t\t\tif (nutrient.Value > 0) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn event.SoilSamples[0].SoilNitrateNPPM > 0;\r\n\t}\r\n\r\n\t/**\r\n     * Determines if a soil sample can be considered to have an Applied value.\r\n     * Used in event snapshot, for example, to decide whether to show in upcoming\r\n     * or scheduled\r\n     *\r\n     * @param event\r\n     * @param past\r\n     * @param index\r\n     * @param isNDependent\r\n     */\r\n\tpublic static isSoilSampleApplied(event: IEventGroup, past: boolean, index: number, isNDependent = true): boolean {\r\n\t\tif (!event || !event.SoilSamples || !event.SoilSamples[index]) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (!past) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (!isNDependent) {\r\n\t\t\tfor (let nutrient of event.SoilSamples[index].Nutrients) {\r\n\t\t\t\tif (nutrient.Value > 0) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn event.SoilSamples[index].SoilNitrateNPPM > 0;\r\n\t}\r\n\r\n\tpublic static isCuttingApplied(event: IEventGroup, past: boolean): boolean {\r\n\t\tif (!event || !event.CutEvent) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (!past) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// yield of 0 means not applied\r\n\t\treturn event.CutEvent.Yield > 0\r\n\t}\r\n\r\n\t/**\r\n\t * Checks whether the displayed number is an applied amount or not\r\n\t * @param event\r\n\t * @param context\r\n\t * @returns true if the number displayed to user is a CropManage recommendation\r\n\t * false if the number displayed is an applied value\r\n\t */\r\n\tpublic static isCropManageRecommendationIrrigation(event: IEventGroup, context: EventContext): boolean {\r\n\t\tlet irrigationEvent: IIrrigationEvent;\r\n\r\n\t\tif (!event || event == null || !event.Irrigation || event.Irrigation == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tirrigationEvent = event.Irrigation;\r\n\r\n\t\tif (irrigationEvent.IrrigationMethodId === eIrrigationMethods.RAINFALL) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// if irrigation event has flowmeter data, and water applied doesn't look touched, assume cropmanage generated value\r\n\t\t// checking two parameters here because data stream is not consistent with interface definition\r\n\t\tif (irrigationEvent.HasFlowMeterData || irrigationEvent.HasFlowmeterData) {\r\n\t\t\tlet flowMeterAppled = FlowMeter.getFlowmeterWaterApplied(irrigationEvent);\r\n\r\n\t\t\tif (flowMeterAppled === ValidateService.roundToDecimalPlaces(irrigationEvent.WaterApplied, 2)) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (context !== EventContext.TABLE && irrigationEvent.WaterApplied !== null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (irrigationEvent.ManagerAmountRecommendation != null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic static isCropManageRecommendationFertilization(event: IEventGroup, context: EventContext): boolean {\r\n\t\tif (!event || event == null || !event.Fertilization || event.Fertilization.length === 0 ||\r\n\t\t\tevent.Fertilization[0].Recommendation == null) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context !== EventContext.TABLE) {\r\n\t\t\tif (event.Fertilization[0].FertilizerApplied != null || event.Fertilization[0].NApplied != null) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (event.Fertilization[0].Recommendation.manager != null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// commenting this out since soil sample events are optional\r\n\t\tif (!event.Fertilization[0].SoilSampleEventDate) { // CropManage recommendation can't exist if there are no associated soil sample events\r\n\t\t\t// return false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic static isCropManageRecommendationSoilSample(event: IEventGroup): boolean {\r\n\t\tif (!event || event == null || !event.SoilSamples || !event.SoilSamples[0] || event.SoilSamples[0] == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn event.SoilSamples[0].SoilNitrateNPPM > 0 ? false : true;\r\n\t}\r\n\r\n\tpublic static isCropManageRecommendationSoilSampleFromIndex(event: IEventGroup, index: number): boolean {\r\n\t\tif (!event || event == null || !event.SoilSamples || !event.SoilSamples[index] || event.SoilSamples[index] == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn event.SoilSamples[index].SoilNitrateNPPM > 0 ? false : true;\r\n\t}\r\n\r\n\t/**\r\n     * This method is used to decide in event snapshot whether the event (with today's date on it)\r\n     * should be displayed in the past tab vs Scheduled tab\r\n     *\r\n     * @param event\r\n     */\r\n\tpublic static isIrrigationTodayPast(event: IEventGroup): boolean {\r\n\t\tif (!event || event == null || !event.Irrigation || event.Irrigation == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (event.Irrigation.IrrigationMethodId === eIrrigationMethods.RAINFALL) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn event.Irrigation.WaterApplied != null;\r\n\t}\r\n\r\n\tpublic static isFertilizationTodayPast(event: IEventGroup): boolean {\r\n\t\tif (!event || event == null || !event.Fertilization || event.Fertilization.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn event.Fertilization[0].FertilizerApplied != null;\r\n\t}\r\n\r\n\t/*\r\n     * Note: eventType can be 'Water', 'Fertilizer', or 'SoilSamples'\r\n     */\r\n\tpublic static getSubEvent(event: IEventGroup, eventType: string, sampleIndex?: number):\r\n\t\tIIrrigationEvent | IFertilizationEvent | ISoilSampleEvent | ICutEvent {\r\n\r\n\t\tswitch (eventType) {\r\n\t\t\tcase ('SoilSamples'): {\r\n\t\t\t\tif (!event.SoilSamples) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn sampleIndex && event.SoilSamples[sampleIndex] ? event.SoilSamples[sampleIndex] : event.SoilSamples[0];\r\n\t\t\t}\r\n\r\n\t\t\tcase ('Water'): { return event.Irrigation; }\r\n\r\n\t\t\tcase ('Fertilizer'): { return event.Fertilization[0]; }\r\n\r\n\t\t\tcase ('Cutting'): { return event.CutEvent }\r\n\r\n\t\t\tdefault: { return }\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static getMetaInfo(event: IEventGroup, eventType: string, index?: number): string {\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tswitch (eventType) {\r\n\t\t\tcase EventTypeNames.WATER:\r\n\t\t\t\tif (!event.Irrigation) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn event.Irrigation.Metainfo;\r\n\t\t\tcase EventTypeNames.FERTILIZER:\r\n\t\t\t\tif (!event.Fertilization || event.Fertilization.length === 0) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!index) {\r\n\t\t\t\t\tindex = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.Fertilization[index]) {\r\n\t\t\t\t\treturn event.Fertilization[index].Metainfo;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\tcase EventTypeNames.SOILSAMPLES:\r\n\r\n\t\t\t\tif (!event.SoilSamples) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!index) { // includes 0\r\n\t\t\t\t\tindex = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.SoilSamples[index]) {\r\n\t\t\t\t\treturn event.SoilSamples[index].Metainfo;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\tcase EventTypeNames.TISSUE_SAMPLE:\r\n\r\n\t\t\t\tif (!event.TissueSamples) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!index) { // includes 0\r\n\t\t\t\t\tindex = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.TissueSamples[index]) {\r\n\t\t\t\t\treturn event.TissueSamples[index].Metainfo;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\tcase EventTypeNames.CUTTING:\r\n\t\t\t\tif (!event.CutEvent) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn event.CutEvent.Metainfo;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static shouldShowLeafIconWater(m: IrrigationEvent): boolean {\r\n\t\tif (!m) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (m.ManagerAmountRecommendation !== null ||\r\n\t\t\tm.WaterApplied !== null) {\r\n\t\t\treturn false;\r\n\t\t} else if (m.IrrigationMethodId === eIrrigationMethods.RAINFALL) {\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static shouldShowLeafIconFertilization(m: FertilizationEvent): boolean {\r\n\t\tif (!m) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif ((m.Recommendation !== null &&\r\n\t\t\tm.Recommendation.manager !== null)  ||\r\n\t\t\tm.NApplied !== null) {\r\n\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static shouldShowLeafIcon(event: IEventGroup, eventType: string): boolean {\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tswitch (eventType) {\r\n\t\t\tcase EventTypeNames.WATER:\r\n\t\t\t\tif (!event.Irrigation) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.Irrigation.ManagerAmountRecommendation !== null ||\r\n\t\t\t\t\tevent.Irrigation.WaterApplied !== null) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (event.Irrigation.IrrigationMethodId === eIrrigationMethods.RAINFALL) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\tcase EventTypeNames.FERTILIZER:\r\n\t\t\t\tlet f: IFertilizationEvent;\r\n\r\n\t\t\t\tif (!event.Fertilization || event.Fertilization.length === 0) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tf = event.Fertilization[0];\r\n\r\n\t\t\t\tif (f.FertilizerApplied !== null) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (f.Recommendation !== null && f.Recommendation.manager) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (f.Recommendation.cropManage) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\t// cut events and soil sample events don't have recommendations\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static hasNoEvents(event: IEventGroup | IRawEvent): boolean {\r\n\t\treturn !event.Irrigation && (!event.Fertilization || event.Fertilization.length === 0)\r\n\t\t\t&& (!event.SoilSamples || event.SoilSamples.length === 0) && !event.CutEvent\r\n\t\t\t&& (!event.TissueSamples || event.TissueSamples.length === 0);\r\n\t}\r\n\r\n\tpublic static getLeechingFactor(recommendationSummary: IIrrigationRecommendationSummaryModel, asPercent: boolean) {\r\n\t\tlet decimal: number;\r\n\r\n\t\tif (!recommendationSummary || !recommendationSummary.LeechingFactor) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tif (asPercent) {\r\n\t\t\treturn recommendationSummary.LeechingFactor;\r\n\t\t}\r\n\r\n\t\tdecimal = CalculateService.percentToDecimal(recommendationSummary.LeechingFactor);\r\n\r\n\t\treturn decimal ? decimal : 0;\r\n\t}\r\n\r\n\tpublic static getStringFromEventsView(view: EventsView): string {\r\n\t\tif (!view) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (view === EventsView.TOTALS) {\r\n\t\t\treturn 'Totals';\r\n\t\t}\r\n\r\n\t\treturn view === EventsView.LIST ? 'List' : 'Table';\r\n\t}\r\n\r\n\tpublic static getStringFromEventsType(type: EventsType): string {\r\n\t\tswitch (type) {\r\n\t\t\tcase EventsType.WATER:\r\n\t\t\t\treturn 'Water';\r\n\t\t\tcase EventsType.FERTILIZER:\r\n\t\t\t\treturn 'Fertilization';\r\n\t\t\tcase EventsType.CUTTING:\r\n\t\t\t\treturn 'Cutting';\r\n\t\t\tcase EventsType.SOILSAMPLES:\r\n\t\t\t\treturn 'Soil Samples';\r\n\t\t\tcase EventsType.TISSUE_SAMPLE:\r\n\t\t\t\treturn 'Tissue Samples';\r\n\t\t\tdefault:\r\n\t\t\t\treturn 'All';\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static getEventsTypeFromString(type: string): EventsType {\r\n\t\tif (type === 'Water') {\r\n\t\t\treturn EventsType.WATER;\r\n\t\t} else if (type === 'Fertilizer') {\r\n\t\t\treturn EventsType.FERTILIZER;\r\n\t\t} else if (type === 'Cutting') {\r\n\t\t\treturn EventsType.CUTTING;\r\n\t\t}\r\n\r\n\t\treturn type === 'SoilSamples' ? EventsType.SOILSAMPLES : EventsType.ALL;\r\n\t}\r\n\r\n\t/**\r\n\t * Sort soil sample and tissue sample event nutrients by value and name.\r\n\t * Value is used - if nutrient value is the same, then we sort by nutrient name\r\n\t *\r\n\t * @param nutrients\r\n\t */\r\n\tpublic static sortNutrients(nutrients: INutrient[]): INutrient[] {\r\n\t\tif (!nutrients || !nutrients.length) {\r\n\t\t\treturn new Array();\r\n\t\t}\r\n\r\n\t\treturn nutrients.sort((nutrientA: INutrient, nutrientB: INutrient) => {\r\n\r\n\t\t\tif (nutrientA.Value > nutrientB.Value) {\r\n\t\t\t\treturn -1\r\n\t\t\t} else if (nutrientA.Value < nutrientB.Value) {\r\n\t\t\t\treturn 1;\r\n\t\t\t} else if (nutrientA.Nutrient > nutrientB.Nutrient) {\r\n\t\t\t\treturn -1;\r\n\t\t\t} else if (nutrientA.Nutrient < nutrientB.Nutrient) {\r\n\t\t\t\treturn 1;\r\n\t\t\t} else {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpServicePostOptions } from '../../services/http.service';\r\n\r\nimport { ModelService } from '../../services/model.service';\r\n\r\nimport { IWell } from '../planting-well/well.interface';\r\nimport { CMError } from '../../interfaces/interfaces';\r\nimport { IFertilizationEventWellService } from './interfaces';\r\n\r\n@Injectable()\r\nexport class FertilizationEventWellService extends ModelService implements IFertilizationEventWellService {\r\n\r\n\tprivate urls = {\r\n\t\tlistByPlantingId: (plantingId: number) => `/v2/plantings/${plantingId}/fertilization-events/wells.json`,\r\n\t\tlist: (eventId: number) => `/v2/fertilization-events/${eventId}/wells.json`,\r\n\t\tsaveAll: (eventId: number) => `/v2/fertilization-events/${eventId}/wells/batch.json`,\r\n\t\tSync: (eventId: number) => `/v2/fertilization-events/${eventId}/wells/sync.json`,\r\n\t};\r\n\r\n\t/**\r\n\t * Fetch wells for a fertilization event based on planting ID\r\n\t * @param plantingId\r\n\t */\r\n\tpublic listByPlantingId(plantingId: number): Promise<IWell[]> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\tbody: null,\r\n\t\t\turl: this.urls.listByPlantingId(plantingId),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: IWell[]) => {\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t};\r\n\r\n\t/**\r\n\t * Call to sync fertilization event wells against lotPlanting wells or ranch wells..\r\n\t * might be needed when past event is scheduled to future after a well has been added\r\n\t * @param fertilizationEventId\r\n\t */\r\n\tpublic syncFertilizationEventWells(fertilizationEventId: number): void {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tif (fertilizationEventId == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: null,\r\n\t\t\turl: this.urls.Sync(fertilizationEventId),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: CMError) => {\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.httpService.post(options);\r\n\t}\r\n\r\n\t/**\r\n\t * Get wells associated with a fertilization event\r\n\t * @param eventId\r\n\t */\r\n\tpublic getFertilizationEventWells(eventId: number): Promise<IWell[]> {\r\n\r\n\t\treturn this.get(this.urls.list(eventId), (response: IWell[]) => {\r\n\t\t\tif (!response) {\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param wells\r\n\t * @returns\r\n\t */\r\n\tpublic saveAllFertilizationWells(wells: IWell[], eventId: number): Promise<CMError> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\t\tlet body: { Wells: IWell[] };\r\n\r\n\t\tbody = {\r\n\t\t\tWells: wells\r\n\t\t};\r\n\r\n\t\toptions = {\r\n\t\t\tbody: body,\r\n\t\t\turl: this.urls.saveAll(eventId),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: CMError) => {\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpService } from '../../services/http.service';\r\nimport { IMicroSprinklerJSON, IMicroSprinkler, IMicroSprinklerService } from './interfaces';\r\n\r\n@Injectable()\r\nexport class MicroSprinklerService implements IMicroSprinklerService {\r\n\r\n\tprivate urls = {\r\n\t\tlist: '/v2/microsprinklers.json'\r\n\t}\r\n\r\n\tpublic static translatePressure(microSprinklers: IMicroSprinklerJSON[]): IMicroSprinkler[] {\r\n\t\tlet result: IMicroSprinkler[];\r\n\r\n\t\tresult = new Array();\r\n\r\n\t\tif (!microSprinklers || microSprinklers.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfor (let microSprinkler of microSprinklers) {\r\n\t\t\tlet item: IMicroSprinkler;\r\n\r\n\t\t\titem = {\r\n\t\t\t\tId: microSprinkler.Id,\r\n\t\t\t\tOrificeDiameter: microSprinkler.OrificeDiameter,\r\n\t\t\t\tPressure: {\r\n\t\t\t\t\tMicroSprinklerId: microSprinkler.Id,\r\n\t\t\t\t\tId: null,\r\n\t\t\t\t\tName: microSprinkler.Pressure\r\n\t\t\t\t},\r\n\t\t\t\tApplicationRate: microSprinkler.ApplicationRate,\r\n\t\t\t\tColor: microSprinkler.Color,\r\n\t\t\t\t// Model: microSprinkler.Model,\r\n\t\t\t\tManufacturer: microSprinkler.Manufacturer,\r\n\t\t\t\tSeries: microSprinkler.Series\r\n\t\t\t}\r\n\r\n\t\t\tresult.push(item);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static calculate(flowRate: number, inRowTreeSpacing: number,\r\n\t\tbetweenRowTreeSpacing: number, microSprinklersPerTree: number): number {\r\n\r\n\t\tlet result: number;\r\n\r\n\t\tresult = flowRate * microSprinklersPerTree * 43560 /\r\n\t\t\t(inRowTreeSpacing * betweenRowTreeSpacing * 27154);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tconstructor(private httpService: HttpService) { }\r\n\r\n\tpublic list(): Promise<IMicroSprinkler[]> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.list,\r\n\t\t\tuseLocalStorage: true,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: IMicroSprinklerJSON[]) => {\r\n\t\t\t\tlet result: IMicroSprinkler[];\r\n\r\n\t\t\t\tresult = MicroSprinklerService.translatePressure(response);\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpServicePostOptions } from '../../services/http.service';\r\n\r\nimport { ModelService } from '../../services/model.service';\r\n\r\nimport { ILotPlantingWell, IPlantingWellService } from './interfaces';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { CMError } from '../../interfaces/interfaces';\r\n\r\n@Injectable()\r\nexport class PlantingWellService extends ModelService implements IPlantingWellService {\r\n\r\n\tprivate urls = {\r\n\t\tcreate: (plantingId: number) => `/v2/plantings/${plantingId}/wells/generate.json`,\r\n\t\tlist: (plantingId: number) => `/v2/plantings/${plantingId}/wells.json`,\r\n\t\tsaveAll: '/v2/plantings/wells/batch.json',\r\n\t\tSync: (plantingId: number) => `/v2/plantings/${plantingId}/wells/sync.json`\r\n\t};\r\n\r\n\t/**\r\n\t * Call to sync planting wells with ranch wells\r\n\t * needed when an \"inactive\" planting turns active (by moving harvestDate to future) after well has been added\r\n\t * @param plantingId\r\n\t */\r\n\tpublic syncPlantingWells(plantingId: number): void {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\tbody: null,\r\n\t\t\turl: this.urls.Sync(plantingId),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: CMError) => {\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.httpService.post(options);\r\n\t}\r\n\r\n\tpublic createLotPlantingWells(plantingId: number): Promise<ILotPlantingWell[]> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\tbody: null,\r\n\t\t\turl: this.urls.create(plantingId),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: (response: ILotPlantingWell[]) => {\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t};\r\n\r\n\t/**\r\n\t * Get wells associated with a fertilization event\r\n\t * @param eventId\r\n\t */\r\n\tpublic getLotPlantingtWells(plantingId: number): Promise<ILotPlantingWell[]> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\treturn this.get(this.urls.list(plantingId), (response: ILotPlantingWell[]) => {\r\n\t\t\tif (!response) {\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t}, params);\r\n\t}\r\n\r\n\t// Save all wells\r\n\tpublic saveAllLotPlantingWells(wells: ILotPlantingWell[]): Promise<CMError> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\t\tlet body: { Wells: ILotPlantingWell[] }\r\n\r\n\t\tbody = {\r\n\t\t\tWells: wells\r\n\t\t};\r\n\r\n\t\toptions = {\r\n\t\t\tbody: body,\r\n\t\t\turl: this.urls.saveAll,\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: CMError) => {\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { HttpService, HttpServiceGetOptions } from '../../services/http.service';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { ISoilProperty,\r\n\tISoilTypeService, ISoilWebProperties, CombinedSoilProperties } from './interfaces';\r\nimport { CMCoordinates } from '../../interfaces/views/map';\r\nimport { CMError } from '../../interfaces/interfaces';\r\nimport { HttpParams } from '@angular/common/http';\r\n\r\n@Injectable()\r\nexport class SoilTypeService implements ISoilTypeService {\r\n\r\n\tprivate urls = {\r\n\t\tgetSoilWebRecord: '/v2/soil-web-record.json',\r\n\t\tget: (lotId: number) => `/v0/lots/${lotId}/soil-properties.json`\r\n\t};\r\n\r\n\tpublic readonly soilProperties: ISoilProperty[] = [\r\n\t\t{\r\n\t\t\tkey: 'Silt',\r\n\t\t\tdisplay: 'Silt',\r\n\t\t\tunit: '%'\r\n\t\t},\r\n\t\t{\r\n\t\t\tkey: 'Sand',\r\n\t\t\tdisplay: 'Sand',\r\n\t\t\tunit: '%'\r\n\t\t},\r\n\t\t// we don't display clay\r\n\t\t{\r\n\t\t\tkey: 'Organic',\r\n\t\t\tdisplay: 'Organic Matter',\r\n\t\t\tunit: '%'\r\n\t\t},\r\n\t\t{\r\n\t\t\tkey: 'Density',\r\n\t\t\tdisplay: 'Soil Bulk Density',\r\n\t\t\tunit: 'g/cc'\r\n\t\t},\r\n\t\t{\r\n\t\t\tkey: 'Tension',\r\n\t\t\tdisplay: 'Saturated Soil Tension',\r\n\t\t\tunit: 'cbar'\r\n\t\t},\r\n\t\t/* Custom logic\r\n        {\r\n            key: 'Mineralization',\r\n            display: 'Soil Mineralization Rate',\r\n            unit: 'lb/acre/day'\r\n        },\r\n        */\r\n\t];\r\n\r\n\tconstructor(private httpService: HttpService) { }\r\n\r\n\t/* new calls for soil properties table */\r\n\r\n\tpublic getSoilWebRecord(coords: string): Promise<ISoilWebProperties | CMError> {\r\n\t\tlet coordinates: CMCoordinates;\r\n\t\tlet options: HttpServiceGetOptions;\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tif (!ValidateService.areCoordinatesValid(coords)) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tcoordinates = ValidateService.getCoordinatesFromString(coords);\r\n\r\n\t\tparams = new HttpParams().set('lat', coordinates.lat.toString())\r\n\t\t\t.set('lng', coordinates.lng.toString());\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.getSoilWebRecord,\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true,\r\n\r\n\t\t\tcallback: (data: ISoilWebProperties | CMError) => {\r\n\r\n\t\t\t\tif (!data) {\r\n\t\t\t\t\tthrow new Error(`Received no response from server when\r\n\t\t\t\t\t\tfetching soil data. Please try again.`);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn data;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic getSoilPropertiesByLot(lotId: number): Promise<CombinedSoilProperties> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.get(lotId),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: (response: CombinedSoilProperties) => {\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","import { ITextValue, CMError, SuccessResponse } from '../../interfaces/interfaces';\r\nimport { IIdNamePair } from '../../components/planting-settings/interfaces';\r\nimport { IChangePassword } from '../../components/profile/interfaces';\r\n\r\n/**\r\n * Model structure from userDetailsController:GetCurrentUser()\r\n */\r\nexport interface ICurrentUser {\r\n\tFirstName: string,\r\n\tLastName: string,\r\n\tBETACommoditiesEnabled: boolean,\r\n\tLanguageCodeId: number,\r\n\tRoles: IIdNamePair[],\r\n\tId: number\r\n}\r\n\r\n/*\r\n * The admin user role\r\n */\r\nexport const ADMIN_USER_ROLE = 1;\r\n\r\nexport interface IUserService {\r\n\tuserIsAdmin(): Promise<boolean>,\r\n\tgetCurrentUser(override: boolean): Promise<ICurrentUser>,\r\n\tupdateUserDetails(userDetails: ICurrentUser): Promise<CMError>,\r\n\tchangePassword(password: IChangePassword): Promise<CMError | SuccessResponse>,\r\n\temailRanchOwner(email: string, subject: string, body: string): Promise<Object>,\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\n\r\nimport { HttpService } from '../../services/http.service';\r\nimport { ICurrentUser, ADMIN_USER_ROLE, IUserService } from './interfaces';\r\nimport { IChangePassword } from '../../components/profile/interfaces';\r\nimport { CMError, SuccessResponse } from '../../interfaces/interfaces';\r\n\r\n@Injectable()\r\nexport class UserService implements IUserService {\r\n\r\n\tpublic urls = {\r\n\t\tuserDetails: {\r\n\t\t\tgetCurrentUser: '/v2/user-detail.json',\r\n\t\t\tupdateUser: '/v2/user-detail.json',\r\n\t\t\tupdatePassword: '/v2/user-detail/change-password.json',\r\n\t\t\tgetBETACount: '/v2/ranches/commodity-types/beta-count.json'\r\n\t\t},\r\n\t\taccount: {\r\n\t\t\temail: '/v2/users/email.json',\r\n\t\t}\r\n\t};\r\n\r\n\tprivate isAdmin: boolean;\r\n\r\n\tconstructor(\r\n\t\tprivate httpService: HttpService) { }\r\n\r\n\tpublic userIsAdmin(): Promise<boolean> {\r\n\t\tif (this.isAdmin !== null && this.isAdmin !== undefined) {\r\n\t\t\treturn of(this.isAdmin).toPromise();\r\n\t\t}\r\n\r\n\t\treturn this.getCurrentUser().then((user: ICurrentUser) => {\r\n\t\t\tthis.isAdmin = user && user.Roles && user.Roles[0] && user.Roles[0].Id === ADMIN_USER_ROLE;\r\n\t\t\treturn this.isAdmin;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getBETACommodityTypeCount(): Promise<number> {\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.userDetails.getBETACount,\r\n\t\t\tcallback: (data: number): number => {\r\n\t\t\t\treturn data;\r\n\t\t\t},\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getCurrentUser(override = true): Promise<ICurrentUser> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.userDetails.getCurrentUser,\r\n\t\t\tuseLocalStorage: override ? false : true,\r\n\t\t\tcallback: (data: ICurrentUser): ICurrentUser => {\r\n\t\t\t\treturn data;\r\n\t\t\t},\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic updateUserDetails(userDetails: ICurrentUser): Promise<CMError> {\r\n\t\treturn this.httpService.put({\r\n\t\t\turl: this.urls.userDetails.updateUser,\r\n\r\n\t\t\tcallback: (data: CMError): CMError => {\r\n\t\t\t\treturn data;\r\n\t\t\t},\r\n\r\n\t\t\tbody: userDetails,\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic changePassword(password: IChangePassword): Promise<CMError | SuccessResponse> {\r\n\t\treturn this.httpService.post({\r\n\t\t\turl: this.urls.userDetails.updatePassword,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true,\r\n\r\n\t\t\tcallback: (data: CMError | SuccessResponse): CMError | SuccessResponse => {\r\n\t\t\t\treturn data;\r\n\t\t\t},\r\n\r\n\t\t\tbody: password\r\n\t\t});\r\n\t}\r\n\r\n\tpublic emailRanchOwner(email: string, subject: string, body: string): Promise<Object> {\r\n\t\tlet params: {\r\n\t\t\tEmail: string,\r\n\t\t\tSubject: string,\r\n\t\t\tBody: string\r\n\t\t}\r\n\r\n\t\tparams = {\r\n\t\t\tEmail: email,\r\n\t\t\tSubject: subject,\r\n\t\t\tBody: body\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post({\r\n\t\t\turl: this.urls.account.email,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: (data: CMError): Object => {\r\n\t\t\t\treturn data;\r\n\t\t\t},\r\n\t\t\tbody: params\r\n\t\t});\r\n\t}\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\n\r\nimport { HttpService, HttpServicePostOptions, HttpServiceGetOptions } from '../../services/http.service';\r\nimport { UpdateService } from '../../services/update.service';\r\n\r\nimport { IWeatherStation, IWeatherStationStats, IWeatherStationAdvanced,\r\n\tIWeatherStationStatsDetails,\r\n\tIWeatherStationViewModel, IMissingStationRecord, MissingStationRecord} from '../../components/weather-stations/interfaces';\r\n\r\nimport { IWeatherStationRegion } from '../region/interfaces';\r\n\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { CMError, SuccessResponse } from '../../interfaces/interfaces';\r\nimport { IWeatherStationCurrentModel, IMarkerCollection, IMarker, MarkerCollection } from '../../components/ranch-settings/interfaces';\r\nimport { IWeatherStationsService, IStationPriority } from './interfaces';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\n\r\n@Injectable()\r\nexport class WeatherStationsService implements IWeatherStationsService {\r\n\r\n\tprivate urls = {\r\n\t\tstats: {\r\n\t\t\tlist: '/v2/weather-stations/stats.json',\r\n\t\t\tget: (stationId: number) => `/v2/weather-stations/${stationId}/stats.json`,\r\n\t\t\tmissingRecords: (stationId: number) => `/v2/weather-stations/${stationId}/missingRecords.json`\r\n\t\t},\r\n\t\tcimisData: {\r\n\t\t\tupdate: (stationId: number) => `/v2/weather-stations/${stationId}/cimis.json`\r\n\t\t},\r\n\t\tregions: {\r\n\t\t\tlist: '/v2/regions.json'\r\n\t\t},\r\n\t\tlist: '/v2/weather-stations.json',\r\n\t\tupdate: '/v2/weather-stations.json',\r\n\t\tcreate: '/v2/weather-stations.json',\r\n\t\tdelete: (stationId: number) => `/v2/weather-stations/${stationId}.json`,\r\n\t\tchangeActiveStatus: (stationId: number) => `/v2/weather-stations/${stationId}/status/toggle.json`,\r\n\r\n\t\tranch: { // ranch setting weather station CRUD calls\r\n\t\t\tlist: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/weather-stations.json`, // get stations associated with ranch\r\n\t\t\tget: (id: number) => `/v2/weather-stations/${id}.json`,\r\n\r\n\t\t\tlistAsMarkers: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/weather-stations/markers.json`,\r\n\t\t\t\t// returns stations assoicated with ranch as a marker collection\r\n\r\n\t\t\taddToRanch: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/weather-stations.json`,\r\n\t\t\tremoveFromRanch: (ranchGuid: string, stationId: number) => `/v2/ranches/${ranchGuid}/weather-stations/${stationId}.json`,\r\n\t\t\tsetStationPriorities: (ranchGuid: string) => `/v2/ranches/${ranchGuid}/weather-stations/priorities.json`,\r\n\t\t},\r\n\t}\r\n\r\n\tconstructor(private httpService: HttpService,\r\n\t\tprivate updateService: UpdateService) { }\r\n\r\n\t/**\r\n\t * Add one or more stations to a ranch\r\n\t * @param stations\r\n\t */\r\n\tpublic addStationsToRanch(stations: IMarker[]): Promise<Object> {\r\n\t\tlet ids: number[] = new Array();\r\n\r\n\t\tfor (let station of stations) {\r\n\t\t\tids.push(station.Id);\r\n\t\t}\r\n\r\n\t\treturn this.httpService\r\n\t\t\t.post({\r\n\t\t\t\turl: this.urls.ranch.addToRanch(this.updateService.currentRanchId),\r\n\t\t\t\tbody: { Ids: ids },\r\n\t\t\t\tisWebAPI: true\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Set weather stations priority order during CIMIS data pulls\r\n\t * @param stations\r\n\t */\r\n\tpublic setPriorityOrder(stations: IWeatherStationCurrentModel[]): Promise<void> {\r\n\t\tlet stationPriorities: IStationPriority[] = new Array();\r\n\t\tlet params: HttpServicePostOptions;\r\n\t\tlet body: {\r\n\t\t\tStations: IStationPriority[]\r\n\t\t};\r\n\r\n\t\tif (!stations || stations.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tstations.forEach((item, index) => {\r\n\t\t\tstationPriorities.push({\r\n\t\t\t\tStationExtId: item.External_Id,\r\n\t\t\t\tPriority: index + 1\r\n\t\t\t})\r\n\t\t})\r\n\r\n\t\tbody = {\r\n\t\t\tStations: stationPriorities\r\n\t\t}\r\n\r\n\t\tparams = {\r\n\t\t\turl: this.urls.ranch.setStationPriorities(this.updateService.currentRanchId),\r\n\t\t\tbody: body,\r\n\t\t\tisWebAPI: true\r\n\t\t};\r\n\r\n\t\treturn this.httpService.put(params);\r\n\t}\r\n\r\n\tpublic removeFromRanch(id: number): Promise<Object> {\r\n\t\treturn this.httpService\r\n\t\t\t.delete({\r\n\t\t\t\turl: this.urls.ranch.removeFromRanch(this.updateService.currentRanchId, id),\r\n\t\t\t\tisWebAPI: true\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic listStats(startDate?: Date, endDate?: Date): Promise<IWeatherStationStats[]> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams();\r\n\r\n\t\tif (startDate && endDate) {\r\n\t\t\tparams = params.set('startDate', startDate.toUTCString())\r\n\t\t\t\t.set('endDate', endDate.toUTCString());\r\n\t\t}\r\n\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this.urls.stats.list,\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic list(): Promise<IWeatherStation[]> {\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this.urls.list,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: (weatherStations: IWeatherStation[]) => {\r\n\t\t\t\tthis.updateService.setWeatherStationsList(weatherStations);\r\n\t\t\t\treturn weatherStations;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\t/**\r\n\t * Get weather stations associated with the current ranch\r\n\t */\r\n\tpublic getRanchWeatherStations(): Promise<IWeatherStationCurrentModel[]> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.ranch.list(this.updateService.currentRanchId),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: function (json: IWeatherStationCurrentModel[]) {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn new Array();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getDetails(id: number): Promise<MarkerCollection> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams().set('ranchGuid', this.updateService.currentRanchId);\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.ranch.get(id),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tsearchParams: params,\r\n\r\n\t\t\tcallback: function (json: MarkerCollection): MarkerCollection {\r\n\t\t\t\treturn json;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getMissingRecords(stationId: number): Promise<IMissingStationRecord[]> {\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.stats.missingRecords(stationId),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tcallback: (json: MissingStationRecord[]): IMissingStationRecord[] => {\r\n\t\t\t\tlet result: IMissingStationRecord[];\r\n\r\n\t\t\t\tresult = [];\r\n\r\n\t\t\t\tfor (let record of json) {\r\n\t\t\t\t\tresult.push({\r\n\t\t\t\t\t\tDate: DateUtility.DotNetToDate(record.Date),\r\n\t\t\t\t\t\tStatus: record.Status\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Get a list of stations associated with a ranch as Marker collection, including distance to the current ranch\r\n\t */\r\n\tpublic listRanchStations(): Promise<IMarkerCollection> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.ranch.listAsMarkers(this.updateService.currentRanchId),\r\n\t\t\tisWebAPI: true,\r\n\r\n\t\t\tcallback: function (json: IMarkerCollection) {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn {};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Get all weather stations\r\n\t */\r\n\tpublic listAll(suppressZeroET?: boolean): Promise<IWeatherStationViewModel[]> {\r\n\t\tlet params: HttpParams;\r\n\r\n\t\tparams = new HttpParams().set('ranchGuid', this.updateService.currentRanchId)\r\n\t\t\t.set('activeOnly', 'true');\r\n\r\n\t\tif (suppressZeroET) {\r\n\t\t\tparams = params.set('suppressZeroET', 'true');\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.list,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tsearchParams: params,\r\n\r\n\t\t\tcallback: function (json: IWeatherStationViewModel[]) {\r\n\t\t\t\tif (json) {\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn {};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getWeatherStationAdvancedList(startDate?: Date, endDate?: Date): Promise<IWeatherStationAdvanced[]> {\r\n\t\tlet promises: {\r\n\t\t\tstations: Promise<IWeatherStation[]>,\r\n\t\t\tstats: Promise<IWeatherStationStats[]>\r\n\t\t};\r\n\r\n\t\tpromises = {\r\n\t\t\tstations: null,\r\n\t\t\tstats: null\r\n\t\t};\r\n\r\n\t\tpromises.stations = this.list();\r\n\r\n\t\tif (startDate && endDate) {\r\n\t\t\tpromises.stats = this.listStats(startDate, endDate);\r\n\t\t} else {\r\n\t\t\tpromises.stats = this.listStats();\r\n\t\t}\r\n\r\n\t\treturn Promise.all([promises.stations, promises.stats])\r\n\t\t\t.then(([stations, stats]) => {\r\n\t\t\t\tlet weatherStationAdvancedList: IWeatherStationAdvanced[] = new Array();\r\n\t\t\t\tlet weatherStationAdvanced: IWeatherStationAdvanced;\r\n\r\n\t\t\t\tif (!stations || !stats) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (let weatherStation of stations) {\r\n\t\t\t\t\tweatherStationAdvanced = {\r\n\t\t\t\t\t\tId: weatherStation.Id,\r\n\t\t\t\t\t\tName: weatherStation.Name,\r\n\t\t\t\t\t\tExternalId: weatherStation.External_Id,\r\n\t\t\t\t\t\tAPI_Id: weatherStation.API_Id,\r\n\t\t\t\t\t\tNearestCity: weatherStation.NearestCity,\r\n\t\t\t\t\t\tCounty: weatherStation.County,\r\n\t\t\t\t\t\tRegionId: weatherStation.RegionId,\r\n\t\t\t\t\t\tRegionName: weatherStation.RegionName,\r\n\t\t\t\t\t\tCoordinates: weatherStation.Coordinates,\r\n\t\t\t\t\t\tUcIpmName: weatherStation.UcIpmName,\r\n\t\t\t\t\t\tWeatherAPI_Id: weatherStation.WeatherAPI_Id,\r\n\t\t\t\t\t\tRanchCount: 0,\r\n\t\t\t\t\t\tRecommendationCount: 0,\r\n\t\t\t\t\t\tActive: weatherStation.Active,\r\n\t\t\t\t\t\tAllowToDeactivate: weatherStation.AllowToDeactivate,\r\n\t\t\t\t\t\tMissingRecords: weatherStation.MissingRecords\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (let weatherStationStats of stats) {\r\n\t\t\t\t\t\tif (weatherStation.Id === weatherStationStats.StationId) {\r\n\t\t\t\t\t\t\tweatherStationAdvanced.RanchCount = weatherStationStats.RanchCount;\r\n\t\t\t\t\t\t\tweatherStationAdvanced.RecommendationCount = weatherStationStats.RecommendationCount;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tweatherStationAdvancedList.push(weatherStationAdvanced);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn weatherStationAdvancedList;\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Start a background process to download today's CIMIS daya for a particular station.\r\n\t * @param id\r\n\t */\r\n\tpublic updateCIMISData(id: number): Promise<SuccessResponse> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.cimisData.update(id),\r\n\t\t\tisWebAPI: true,\r\n\t\t\tbody: null,\r\n\t\t\tshouldBypassServerErrorAlert: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.put(options);\r\n\t}\r\n\r\n\tpublic listRegions(): Promise<IWeatherStationRegion[]> {\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this.urls.regions.list,\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic update(weatherStation: IWeatherStation): Promise<CMError | SuccessResponse> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tif (!weatherStation) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: weatherStation,\r\n\t\t\turl: this.urls.update,\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.put(options);\r\n\t}\r\n\r\n\tpublic create(weatherStation: IWeatherStation): Promise<IWeatherStation> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tif (!weatherStation) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\tbody: weatherStation,\r\n\t\t\turl: this.urls.create,\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic delete(id: number): Promise<CMError> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.delete(id),\r\n\t\t\tbody: null,\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.delete(options);\r\n\t}\r\n\r\n\tpublic getStats(id: number, startDate?: Date, endDate?: Date): Promise<IWeatherStationStatsDetails> {\r\n\t\tlet params: HttpParams;\r\n\t\tlet options: HttpServiceGetOptions;\r\n\r\n\t\tparams = new HttpParams().set('stationId', id.toString());\r\n\r\n\t\tif (startDate && endDate) {\r\n\t\t\tparams = params.set('startDate', startDate.toUTCString())\r\n\t\t\t\t.set('endDate', endDate.toUTCString());\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.stats.get(id),\r\n\t\t\tsearchParams: params,\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic changeActiveStatus(id: number): Promise<SuccessResponse> {\r\n\r\n\t\tlet options: HttpServiceGetOptions = {\r\n\t\t\turl: this.urls.changeActiveStatus(id),\r\n\t\t\tisWebAPI: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.get(options);\r\n\t}\r\n\r\n\tpublic combineStationArrays(addData: IMarkerCollection, allStations: IWeatherStationViewModel[]): IMarkerCollection {\r\n\t\tlet response: IMarkerCollection;\r\n\r\n\t\tresponse = {\r\n\t\t\tRanchLocation: null,\r\n\t\t\tStations: new Array()\r\n\t\t};\r\n\r\n\t\tresponse.RanchLocation = addData.RanchLocation;\r\n\t\tlet stationsFromAddData: IMarker[] = addData.Stations;\r\n\r\n\t\tfor (let station of stationsFromAddData) {\r\n\t\t\tfor (let aStation of allStations) {\r\n\t\t\t\tif (station.Id === aStation.Id) {\r\n\t\t\t\t\tstation.Distance = aStation.Distance;\r\n\t\t\t\t\tstation.NearestCity = aStation.NearestCity;\r\n\t\t\t\t\tstation.County = aStation.County;\r\n\t\t\t\t\tstation.Selected = false;\r\n\t\t\t\t\tresponse.Stations.push(station);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn response;\r\n\t}\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { ModuleWithProviders } from '@angular/compiler/src/core';\r\nimport { TranslatePipe } from '../../pipes/translate.pipe';\r\nimport { ConvertDotNetDate, IntegerIfZero, PluralPipe, NAIfEmpty, LocaleMonth } from '../../pipes/pipes.misc';\r\nimport { ModalModule } from 'ngx-bootstrap';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OrderBy } from '../../pipes/order-by.pipe';\r\nimport { RanchWeatherStationModalComponent } from '../../components/ranch-settings/modals/weather-station/main';\r\nimport { AgmCoreModule } from '@agm/core';\r\nimport { MapControlDirective } from '../../directives/map-control.directive';\r\nimport { ModalLoaderComponent } from '../../components/shared/modal-loader/main';\r\nimport { CimisOptionsModalComponent } from '../../components/ranch-settings/modals/cimis-options/main';\r\nimport { SVGWaterComponent } from '../../components/events/buttons/svg/water';\r\nimport { SVGFertilizerComponent } from '../../components/events/buttons/svg/fertilizer';\r\nimport { SVGSoilSampleComponent } from '../../components/events/buttons/svg/soil-sample';\r\nimport { SVGTissueSampleComponent } from '../../components/events/buttons/svg/tissue-sample';\r\nimport { UserIconComponent } from '../../components/shared/user-icon/main';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { NgxPopperModule } from 'ngx-popper';\r\nimport { GreaterThanNumDirective } from '../../directives/greaterThanNumber';\r\nimport { MaxNumberDirective } from '../../directives/maxNumber';\r\nimport { MinNumberDirective } from '../../directives/minNumber';\r\nimport { SoilPropertiesTableComponent } from '../../components/soil-properties-table/soil-properties-table.component';\r\nimport { InfoIconComponent } from '../../components/shared/info-icon/main';\r\nimport { AdminNavComponent } from '../../components/admin/nav/main';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MyDatePickerModule } from 'mydatepicker';\r\nimport { FertilizationHoverColComponent } from '../../components/events/table/fertilization-hover-panel/fertilization-hover-col';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { ClickOutsideDirective } from '../../directives/clickOutsideDirective';\r\nimport { FlowmeterChartDialog } from '../../components/flowmeter-graph/main';\r\nimport { FlowmeterSummaryTableComponent } from '../../components/flowmeter-graph/summary-table/main';\r\nimport { FlowmeterDetailsTableComponent } from '../../components/flowmeter-graph/details-table/main';\r\nimport { RanchDialog } from '../../components/ranch-settings/modals/ranch/main';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { AdminTabComponent } from '../../components/admin/tab/main';\r\nimport { ReactiveFormComponent } from '../../components/shared/reactive-form/reactive-form-component';\r\nimport { FlowmeterSettingsComponent } from '../../components/flowmeter-graph/flowmeter-settings';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { SVGRanchLocationComponent } from '../../components/ranch-settings/modals/weather-station/icons/ranch-location';\r\nimport { SVGStationLocationComponent } from '../../components/ranch-settings/modals/weather-station/icons/station-location';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { WeatherStationEditComponent } from '../../components/ranch-settings/modals/weather-station/edit';\r\nimport { SVGRanchMarkerComponent } from '../../components/events/buttons/svg/ranch-marker';\r\nimport { SVGLotFilledMarkerComponent } from '../../components/events/buttons/svg/lot-filled';\r\nimport { SVGPlantingIconComponent } from '../../components/events/buttons/svg/planting';\r\nimport { FertilizationRecommendationComponent } from '../../components/events/table/fertilization-hover-panel/fertilization-recommendation';\r\nimport { FertilizationRecommendationSummaryComponent } from\r\n\t'../../components/events/table/fertilization-hover-panel/recommendation-summary';\r\nimport { FertilizationHoverPanelComponent } from\r\n\t'../../components/events/table/fertilization-hover-panel/fertilization-recommendation-hover-panel';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { SVGRainfallComponent } from '../../components/events/buttons/svg/rainfall';\r\nimport { SVGSickleComponent } from '../../components/events/buttons/svg/sickle';\r\nimport { SVGStageBasedComponent } from '../../components/events/buttons/svg/stage-based';\r\nimport { SVGPointToPointComponent } from '../../components/events/buttons/svg/point-to-point';\r\n\r\n/**\r\n * Shared module should be as lean as possible - otherwise it weighs down lazy loading\r\n */\r\n@NgModule({\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tReactiveFormsModule,\r\n\t\tModalModule, // modal and forms is required by soil moisture data modal\r\n\t\t\t// component...only because the dialog is embedded in a component and not a dialog\r\n\t\tFormsModule,\r\n\t\tAgmCoreModule, // required by weather station popup.. should be able to get rid of this...\r\n\t\tMatIconModule,\r\n\t\tMatTooltipModule,\r\n\t\tMatInputModule,\r\n\t\tMatDatepickerModule,\r\n\t\tMatRadioModule,\r\n\t\tMatSelectModule,\r\n\t\tNgxPopperModule,\r\n\t\tRouterModule,\r\n\t\tMyDatePickerModule,\r\n\t\tMatDialogModule,\r\n\t\tMatButtonModule,\r\n\t],\r\n\tdeclarations: [\r\n\t\tTranslatePipe,\r\n\t\tOrderBy,\r\n\t\tConvertDotNetDate,\r\n\t\tLocaleMonth,\r\n\t\tIntegerIfZero,\r\n\t\tGreaterThanNumDirective,\r\n\t\tMaxNumberDirective,\r\n\t\tMinNumberDirective,\r\n\t\tPluralPipe,\r\n\t\tNAIfEmpty,\r\n\t\tClickOutsideDirective,\r\n\t\tSoilPropertiesTableComponent,\r\n\t\tRanchWeatherStationModalComponent,\r\n\t\tWeatherStationEditComponent,\r\n\t\tSVGRanchLocationComponent,\r\n\t\tSVGStationLocationComponent,\r\n\t\tCimisOptionsModalComponent,\r\n\t\tModalLoaderComponent, // possibly shared\r\n\t\tUserIconComponent,\r\n\t\tMapControlDirective,\r\n\t\tSVGWaterComponent,\r\n\t\tSVGRainfallComponent,\r\n\t\tSVGSickleComponent,\r\n\t\tSVGFertilizerComponent,\r\n\t\tSVGSoilSampleComponent,\r\n\t\tSVGStageBasedComponent,\r\n\t\tSVGPointToPointComponent,\r\n\t\tSVGTissueSampleComponent,\r\n\t\tSVGRanchMarkerComponent,\r\n\t\tSVGLotFilledMarkerComponent,\r\n\t\tSVGPlantingIconComponent,\r\n\t\tInfoIconComponent,\r\n\t\tReactiveFormComponent,\r\n\t\tAdminNavComponent, // should be moved, into an admin module\r\n\t\tAdminTabComponent,\r\n\t\t// CutEventComponent,\r\n\t\tFertilizationRecommendationComponent,\r\n\t\tFertilizationRecommendationSummaryComponent,\r\n\t\tFertilizationHoverPanelComponent,\r\n\t\tFertilizationHoverColComponent,\r\n\t\tFlowmeterChartDialog,\r\n\t\tFlowmeterSettingsComponent,\r\n\t\tFlowmeterSummaryTableComponent,\r\n\t\tFlowmeterDetailsTableComponent,\r\n\t\tRanchDialog,\r\n\t],\r\n\texports: [\r\n\t\tTranslatePipe,\r\n\t\tOrderBy,\r\n\t\tConvertDotNetDate,\r\n\t\tLocaleMonth,\r\n\t\tIntegerIfZero,\r\n\t\tMapControlDirective,\r\n\t\tGreaterThanNumDirective,\r\n\t\tMinNumberDirective,\r\n\t\tMaxNumberDirective,\r\n\t\tPluralPipe,\r\n\t\tNAIfEmpty,\r\n\t\tClickOutsideDirective,\r\n\t\tSoilPropertiesTableComponent,\r\n\t\tRanchWeatherStationModalComponent,\r\n\t\tCimisOptionsModalComponent,\r\n\t\tSVGWaterComponent,\r\n\t\tSVGSickleComponent,\r\n\t\tSVGPointToPointComponent,\r\n\t\tSVGRainfallComponent,\r\n\t\tSVGStageBasedComponent,\r\n\t\tSVGFertilizerComponent,\r\n\t\tSVGSoilSampleComponent,\r\n\t\tSVGTissueSampleComponent,\r\n\t\tSVGRanchMarkerComponent,\r\n\t\tSVGLotFilledMarkerComponent,\r\n\t\tSVGPlantingIconComponent,\r\n\t\tModalLoaderComponent,\r\n\t\tUserIconComponent,\r\n\t\tModalModule,\r\n\t\tInfoIconComponent,\r\n\t\tModalModule,\r\n\t\tAgmCoreModule,\r\n\t\tMatIconModule,\r\n\t\tMatTooltipModule,\r\n\t\tNgxPopperModule,\r\n\t\tAdminNavComponent,\r\n\t\tAdminTabComponent,\r\n\t\tMyDatePickerModule,\r\n\t\tFertilizationRecommendationComponent,\r\n\t\tFertilizationHoverPanelComponent,\r\n\t\tFertilizationRecommendationSummaryComponent,\r\n\t\tFertilizationHoverColComponent,\r\n\t\tFlowmeterChartDialog,\r\n\t\tFlowmeterSummaryTableComponent,\r\n\t\tFlowmeterDetailsTableComponent,\r\n\t\tMatRadioModule\r\n\t],\r\n\tentryComponents: [\r\n\t\tFlowmeterChartDialog,\r\n\t\tRanchDialog,\r\n\t\tFlowmeterSettingsComponent,\r\n\t\tRanchWeatherStationModalComponent,\r\n\t\tCimisOptionsModalComponent,\r\n\t\tWeatherStationEditComponent\r\n\t]\r\n})\r\n\r\nexport class SharedModule {\r\n\tstatic forRoot(): ModuleWithProviders {\r\n\t\treturn {\r\n\t\t\tngModule: SharedModule,\r\n\t\t\tproviders: [\r\n\t\t\t]\r\n\t\t};\r\n\t}\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\nimport { ValidateService } from '../services/validate.service';\r\n\r\nimport { IIrrigationEvent } from '../components/irrigation-event/interfaces';\r\nimport { TranslateService } from '../components/localization/service';\r\n\r\n/*\r\n * Raise the value exponentially\r\n * Takes an exponent argument that defaults to 1.\r\n * Usage:\r\n *   value | exponentialStrength:exponent\r\n * Example:\r\n *   {{ 2 |  exponentialStrength:10}}\r\n *   formats to: 1024\r\n*/\r\n@Pipe({ name: 'checkForNA' })\r\nexport class CheckForNA implements PipeTransform {\r\n\ttransform(value: string): string {\r\n\t\tif (parseInt(value, 10) === -1) {\r\n\t\t\treturn 'N/A';\r\n\t\t} else {\r\n\t\t\treturn value.toString();\r\n\t\t}\r\n\t}\r\n}\r\n\r\n@Pipe({ name: 'NAifRainfall' })\r\nexport class NAifRainfall implements PipeTransform {\r\n\ttransform(value: string, irrigationEvent: IIrrigationEvent): string {\r\n\t\tif (!irrigationEvent) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tif (irrigationEvent.IsRainfall) {\r\n\t\t\treturn 'N/A';\r\n\t\t} else {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n@Pipe({ name: 'checkForWetDate' })\r\nexport class CheckForWetDate implements PipeTransform {\r\n\ttransform(interval: string, isOnWetDate: boolean): string {\r\n\r\n\t\tif (parseInt(interval, 10) > 0 || isOnWetDate === false) {\r\n\t\t\treturn interval;\r\n\t\t} else {\r\n\t\t\treturn 'N/A';\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// returns 0 instead of 0.00 - otherwise return in float\r\n@Pipe({ name: 'integerIfZero' })\r\nexport class IntegerIfZero implements PipeTransform {\r\n\ttransform(x: string): string {\r\n\t\tlet val: string;\r\n\r\n\t\tif (x === undefined || x === null) {\r\n\t\t\treturn 'N/A';\r\n\t\t}\r\n\r\n\t\t// remove comma added by Angular number pipe to numbers 4 or more digits\r\n\t\tval = ValidateService.removeComma(x.toString());\r\n\r\n\t\tif (ValidateService.isValidNumber(Number(val)) && Number(val) > 0) {\r\n\t\t\treturn x;\r\n\t\t} else {\r\n\t\t\treturn '0';\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// returns 0 instead of 0.00 - otherwise return in float\r\n@Pipe({ name: 'zeroIfEmpty' })\r\nexport class ZeroIfEmpty implements PipeTransform {\r\n\ttransform(x: number): number {\r\n\r\n\t\tif (x === null || x === undefined || isNaN(x)) {\r\n\t\t\treturn 0;\r\n\t\t} else {\r\n\t\t\treturn x;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// returns 0 instead of 0.00 - otherwise return in float\r\n@Pipe({ name: 'NAIfEmpty' })\r\nexport class NAIfEmpty implements PipeTransform {\r\n\ttransform(x: number): String {\r\n\t\tlet val: string;\r\n\r\n\t\tif (x === undefined || x === null) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\t// remove comma added by Angular number pipe to numbers 4 or more digits\r\n\t\tval = ValidateService.removeComma(x.toString());\r\n\r\n\t\treturn ValidateService.isValidNumber(Number(val)) ? x.toString() : '';\r\n\t}\r\n}\r\n\r\n// returns 0 instead of 0.00 - otherwise return in float\r\n@Pipe({ name: 'convertDotNetDate' })\r\nexport class ConvertDotNetDate implements PipeTransform {\r\n\tconstructor(public translateService: TranslateService) { }\r\n\ttransform(x: Date): string {\r\n\t\tlet languageCode: string;\r\n\r\n\t\tif (!x) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlanguageCode = this.translateService.getStandardLanguageCode();\r\n\r\n\t\treturn x.getDate() + ' ' + x.toLocaleString(languageCode, { month: 'short' }) + ' ' + x.getFullYear();\r\n\t}\r\n}\r\n\r\n@Pipe({ name: 'localeMonth' })\r\nexport class LocaleMonth implements PipeTransform {\r\n\tconstructor(public translateService: TranslateService) { }\r\n\ttransform(x: Date): string {\r\n\t\tlet languageCode: string;\r\n\r\n\t\tif (!x) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlanguageCode = this.translateService.getStandardLanguageCode();\r\n\r\n\t\treturn x.toLocaleString(languageCode, { month: 'short' });\r\n\t}\r\n}\r\n\r\n@Pipe({ name: 'stringifyList' })\r\nexport class StringifyListPipe implements PipeTransform {\r\n\ttransform(values: string[]): string {\r\n\t\tlet string: string;\r\n\r\n\t\tif (!values.length) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tstring = values.shift();\r\n\r\n\t\tfor (let value of values) {\r\n\t\t\tstring = string += ', ' + value;\r\n\t\t}\r\n\r\n\t\treturn string;\r\n\t}\r\n}\r\n\r\n@Pipe({ name: 'yesNo' })\r\nexport class YesNoPipe implements PipeTransform {\r\n\ttransform(value: boolean): string {\r\n\t\treturn value ? 'Yes' : 'No';\r\n\t}\r\n}\r\n\r\n@Pipe({ name: 'plural' })\r\nexport class PluralPipe implements PipeTransform {\r\n\ttransform(value: string, count: number): string {\r\n\t\tlet lastCharacter: string;\r\n\t\tlet lastTwoCharacters: string;\r\n\r\n\t\tif (count === 1) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\r\n\t\tlastCharacter = value.slice(-1);\r\n\t\tlastTwoCharacters = value.slice(-2);\r\n\r\n\t\tif (lastCharacter === 'x' || lastCharacter === 'z' || lastCharacter === 's' ||\r\n\t\t\tlastTwoCharacters === 'sh' || lastTwoCharacters === 'ch') {\r\n\t\t\treturn value + 'es';\r\n\t\t}\r\n\r\n\t\treturn value + 's';\r\n\t}\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { TranslateService } from '../components/localization/service';\r\n\r\n@Pipe({\r\n\tname: 'translate',\r\n\tpure: false\r\n})\r\n\r\nexport class TranslatePipe implements PipeTransform {\r\n\r\n\tconstructor(private translateService: TranslateService) { }\r\n\r\n\ttransform(value: string): string {\r\n\t\tif (!value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn this.translateService.translate(value);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ValidateService } from './validate.service';\r\n\r\nimport { IrrigationEvent, IUnitRatios } from '../components/irrigation-event/irrigationEvent';\r\n\r\nimport { IIrrigationObject, IIrrigationEventEditResponse } from '../components/irrigation-event/interfaces';\r\nimport { IFertilizationEvent } from '../components/fertilization-event/interfaces';\r\nimport { IEventGroup } from '../models/event/interfaces';\r\nimport { IWell } from '../models/planting-well/well.interface';\r\nimport { ILotPlantingWell } from '../models/planting-well/interfaces';\r\n\r\nexport interface ISprinklerApplicationRateConstant {\r\n\ttype: number,\r\n\tintercept: number,\r\n\tpressure: number,\r\n\tnozzle: number,\r\n\tpressNozzle: number,\r\n\tpressSqr: number\r\n}\r\n\r\n@Injectable()\r\nexport class CalculateService {\r\n\r\n\t/*\r\n     * Fertilizer Calculations\r\n     */\r\n\r\n\tprivate fertilizerCalc = 0;\r\n\tprivate fertilizerInverse = 0;\r\n\treadonly IRRIGATION_METHOD_GERMINATION_SPRINKLER = 'Germination Sprinkler';\r\n\r\n\tprivate sprinklerSpecs: ISprinklerApplicationRateConstant[] = [\r\n\t\t{\r\n\t\t\ttype: 1, // rainbird\r\n\t\t\tintercept: -3.59634,\r\n\t\t\tpressure: 0.02712,\r\n\t\t\tnozzle: 39.84918,\r\n\t\t\tpressNozzle: 0.28509,\r\n\t\t\tpressSqr: -0.00037498\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: 2, // weather Tec\r\n\t\t\tintercept: -1.527,\r\n\t\t\tpressure: -0.0124,\r\n\t\t\tnozzle: 21.297,\r\n\t\t\tpressNozzle: 0.498,\r\n\t\t\tpressSqr: -0.000163\r\n\t\t}\r\n\t];\r\n\r\n\tpublic static eventIsPast(event: IEventGroup): boolean {\r\n\t\tlet a, now: number;\r\n\r\n\t\tif (!event || event == null || !event.EventDate || event.EventDate == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ta = new Date(event.EventDate).setHours(0, 0, 0, 0);\r\n\t\tnow = new Date().setHours(0, 0, 0, 0);\r\n\r\n\t\treturn a < now;\r\n\t}\r\n\r\n\tpublic static percentToDecimal(percent: number): number {\r\n\t\tif (percent === undefined || percent === null || isNaN(percent)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn percent / 100;\r\n\t}\r\n\r\n\tconstructor() {\r\n\t}\r\n\r\n\t/**\r\n\t * duplicate code\r\n\t * @param lbsN\r\n\t * @param fertilizerObject\r\n\t */\r\n\tpublic convertToFertilizerUnit(lbsN: number, fertilizationEvent: IFertilizationEvent): number {\r\n\r\n\t\tif (fertilizationEvent === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (lbsN === -1) {\r\n\t\t\treturn lbsN;\r\n\t\t}\r\n\r\n\t\tif (lbsN === null || lbsN === undefined) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tlet lbsPerAcre: number;\r\n\r\n\t\tif (lbsN) {\r\n\t\t\tthis.setFertilizationCalculationSettings(fertilizationEvent);\r\n\t\t\tlbsPerAcre = 0;\r\n\r\n\t\t\tif (fertilizationEvent.NPercentage > 0) {\r\n\t\t\t\tlbsPerAcre = lbsN * this.fertilizerCalc;\r\n\t\t\t}\r\n\t\t\treturn lbsPerAcre;\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic fertilizerConvertToLbsN(lbsPerAcre: number, fertilizerObject: IFertilizationEvent): number {\r\n\t\tif (lbsPerAcre === -1) {\r\n\t\t\treturn lbsPerAcre;\r\n\t\t}\r\n\r\n\t\tif (lbsPerAcre === null || lbsPerAcre === undefined) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tlet lbsN: number;\r\n\r\n\t\tif (lbsPerAcre) {\r\n\t\t\tthis.setFertilizationCalculationSettings(fertilizerObject);\r\n\t\t\tlbsN = 0;\r\n\r\n\t\t\tif (fertilizerObject.NPercentage > 0) {\r\n\t\t\t\tlbsN = lbsPerAcre * this.fertilizerInverse;\r\n\t\t\t}\r\n\t\t\treturn lbsN;\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setFertilizationCalculationSettings(fertilizerObject: IFertilizationEvent): void {\r\n\t\tif (fertilizerObject.NPercentage === 0) {\r\n\t\t\tthis.fertilizerCalc = 0;\r\n\t\t\tthis.fertilizerInverse = 0;\r\n\t\t} else {\r\n\t\t\tif (fertilizerObject.IsFormulationTypeDry || fertilizerObject.FormulationType === 'Dry') {\r\n\t\t\t\tif (fertilizerObject.NPercentage === 0) {\r\n\t\t\t\t\tthis.fertilizerCalc = 100;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.fertilizerCalc = 100 / fertilizerObject.NPercentage;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (fertilizerObject.LbsPerGallon * fertilizerObject.NPercentage / 100 === 0) {\r\n\t\t\t\t\tthis.fertilizerCalc = 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.fertilizerCalc = 1 / (fertilizerObject.LbsPerGallon * fertilizerObject.NPercentage / 100);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.fertilizerInverse = 1 / this.fertilizerCalc;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic irrigationConvertToTime(inches: number, irrigation: IIrrigationEventEditResponse): number {\r\n\t\tlet ratios: IUnitRatios;\r\n\t\tlet hours: number;\r\n\r\n\t\tif (inches === -1) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (inches) {\r\n\t\t\tratios = IrrigationEvent.getUnitConversionRatio(irrigation.IrrigationMethodId, irrigation.SprinklerApplicationRate,\r\n\t\t\t\tirrigation.DripApplicationRate, irrigation.MicroSprinklerApplicationRate);\r\n\r\n\t\t\thours = inches * ratios.inverse;\r\n\t\t\treturn hours;\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic irrigationConvertToInches(hours: number, irrigation: IIrrigationObject): number {\r\n\t\tlet ratios: IUnitRatios;\r\n\t\tlet result: number;\r\n\r\n\t\tif (hours === -1) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (hours) {\r\n\t\t\tratios = IrrigationEvent.getUnitConversionRatio(irrigation.IrrigationMethodId, irrigation.SprinklerApplicationRate,\r\n\t\t\t\tirrigation.DripApplicationRate, irrigation.MicroSprinklerApplicationRate);\r\n\r\n\t\t\tresult = hours * ratios.ratio;\r\n\r\n\t\t\treturn result;\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate calculateFlowRate(nozzlePressure: number, nozzleDiameter: number,\r\n\t\tintercept: number, Cpressure: number, Cnozzle: number, Cpressnozzle: number, Cpresssqr: number): number {\r\n\r\n\t\treturn intercept +\r\n\t\t\t(Cpressure * nozzlePressure) +\r\n\t\t\t(Cnozzle * nozzleDiameter) +\r\n\t\t\t(Cpressnozzle * nozzleDiameter * nozzlePressure) +\r\n\t\t\t(Cpresssqr * Math.pow(nozzlePressure, 2)); // return units: gallons/minute (gpm)\r\n\t}\r\n\r\n\tprivate sprinklerApplicationRate(flowrate: number, lateralPipeSpacing: number, sprinklerHeadSpacing: number): number {\r\n\t\treturn (\r\n\t\t\tflowrate * // gallons/minute\r\n\t\t\t60 * // minutes/hour\r\n\t\t\t43560 // ft^2/acre\r\n\t\t) / (\r\n\t\t\t\t27154 * // gallons / inch*acre\r\n\t\t\t\tlateralPipeSpacing * // ft\r\n\t\t\t\tsprinklerHeadSpacing // ft\r\n\t\t\t)\r\n\t\t\t; // return units: inch/hour\r\n\t};\r\n\r\n\tpublic calculateSprinklerApplicationRate(sprinklerType: number, nozzleDiameter: number,\r\n\t\tnozzlePressure: number, lateralPipeSpacing: number, sprinklerHeadSpacing: number): number {\r\n\r\n\t\tlet sprinkler: ISprinklerApplicationRateConstant;\r\n\t\tlet flowRate: number;\r\n\t\tlet result: number;\r\n\r\n\t\tsprinkler = this.sprinklerSpecs.find(x => x.type === sprinklerType);\r\n\r\n\t\tif (!sprinkler) {\r\n\t\t\tthrow new Error('no sprinkler found');\r\n\t\t}\r\n\r\n\t\tflowRate = sprinkler.intercept +\r\n\t\t\t(sprinkler.pressure * nozzlePressure) +\r\n\t\t\t(sprinkler.nozzle * nozzleDiameter) +\r\n\t\t\t(sprinkler.pressNozzle * nozzleDiameter * nozzlePressure) +\r\n\t\t\t(sprinkler.pressSqr * Math.pow(nozzlePressure, 2)); // return units: gallons/minute (gpm)\r\n\r\n\t\tresult = (flowRate * 60 * 43560) / (27154 * lateralPipeSpacing * sprinklerHeadSpacing);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/*drip application rate calculations*/\r\n\r\n\tpublic calculateDripApplicationRate(bedWidth: number, dripLinesPerBed: number, tapeDischargeRate: number): number {\r\n\t\t// bedWidth => inches (ie. 64)\r\n\t\t// dripLinesPerBed => the number of drip lines per bed (ie. 2)\r\n\t\t// tapeDischargeRate => (gallons/minute) / 100 ft (ie. 0.45)\r\n\r\n\t\tlet constant = 60 * 12 * 43560 / (100 * 27154); // ?\r\n\t\treturn tapeDischargeRate * dripLinesPerBed * constant / bedWidth; // return type => inches/hour\r\n\t};\r\n\r\n\tpublic calculateTotalNUptake(expectedYield: number, uptakeFactor: number, uptakeConstant: number): number {\r\n\t\tif (!expectedYield) {\r\n\t\t\treturn 0;\r\n\t\t} else if (!uptakeFactor) {\r\n\t\t\treturn 0;\r\n\t\t} else if (!uptakeConstant) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\texpectedYield = !isNaN(expectedYield) ? Number(expectedYield) : null;\r\n\t\tuptakeFactor = !isNaN(uptakeFactor) ? Number(uptakeFactor) : null;\r\n\t\tuptakeConstant = !isNaN(uptakeConstant) ? Number(uptakeConstant) : null;\r\n\r\n\t\tif (expectedYield && uptakeFactor && uptakeConstant) {\r\n\t\t\treturn Math.round(uptakeFactor * expectedYield + uptakeConstant); // return type => int => lbs N/acre\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Used for N Contribution from Water UI, calculate N Applied, given\r\n\t * water applied and PPM\r\n\t *\r\n\t * @param waterApplied\r\n\t * @param ppm\r\n\t */\r\n\tpublic calculateNApplied(waterApplied: number, ppm: number): number {\r\n\t\treturn waterApplied * ppm * 0.227;\r\n\t}\r\n\r\n\tpublic calculateAveragePPM(wells: IWell[] | ILotPlantingWell[]): number {\r\n\r\n\t\tlet result = 0;\r\n\r\n\t\tif (!wells || wells.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tfor (let well of wells) {\r\n\t\t\tresult += well.NitrogenPPM * well.Percentage / 100;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","export const ReleaseVersion = '2.4.9';\r\nexport const SessionStorageWebAPIKey = 'webAPIToken';\r\nexport const RecaptchaKey = '6LcJBb8qAAAAAAzdeGfLmPA31xNPlNcBHt0tto4X';\r\nexport const CASP_HOMEPAGE_URL = 'http://www.almondstewardship.org/';\r\nexport const DONATE_URL = 'https://donate.ucanr.edu/?fund_id=1400&program=UC+Cooperative+Extension+Offices&county=Monterey';\r\nexport const CASPNotNowCookieName = 'CASPNotNow';\r\nexport const GlobalNotificationExists = false;\r\n\r\nexport const VersionUpgradeCookieName = 'showVersionUpdate';\r\nexport const enum loginTypes {\r\n\tWORKSHOP = 1\r\n}\r\n\r\nexport const PREVIOUS_CROP_NO_RESIDUE_ID = 14; // Id associated with the \"no residue\" option\r\nexport const DEFAULT_MINERALIZATION_RATE = 2;\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class CookieService {\r\n\r\n\tpublic static set(name: string, value: string, expireDays: number, path = ''): void {\r\n\t\tlet d: Date = new Date();\r\n\t\td.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000);\r\n\t\tlet expires: string = 'expires=' + d.toUTCString();\r\n\t\tdocument.cookie = name + '=' + value + '; ' + expires + (path.length > 0 ? '; path=' + path : '');\r\n\t}\r\n\r\n\tpublic static get(name: string): string {\r\n\t\tlet ca: Array<string> = document.cookie.split(';');\r\n\t\tlet caLen: number = ca.length;\r\n\t\tlet cookieName = name + '=';\r\n\r\n\t\tfor (let i = 0; i < caLen; i += 1) {\r\n\t\t\tlet c: string;\r\n\r\n\t\t\tc = ca[i];\r\n\r\n\t\t\twhile (c.charAt(0) === ' ') {\r\n\t\t\t\tc = c.substring(1);\r\n\t\t\t}\r\n\r\n\t\t\tif (c.indexOf(cookieName) === 0) {\r\n\t\t\t\treturn c.substring(cookieName.length, c.length);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tpublic static delete(name: string): void {\r\n\t\tthis.set(name, '', -1);\r\n\t}\r\n\r\n\tpublic setCurrentRanchCookie(id: string): void {\r\n\t\tCookieService.set('CurrentRanch', id, 1);\r\n\t}\r\n\r\n\tpublic deleteCurrentRanchCookie(): void {\r\n\t\tCookieService.delete('CurrentRanch');\r\n\t}\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\nimport { HttpErrorDialog } from '../components/server-error-dialog/http-error-dialog';\r\nimport { UpdateService } from './update.service';\r\n\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { CMError } from '../interfaces/interfaces';\r\nimport { Token } from './interface';\r\nimport { TokenService } from './token.service';\r\nimport { ReleaseVersion, VersionUpgradeCookieName } from './constants';\r\nimport { CookieService } from './cookie.service';\r\nimport { environment } from '../../environments/environment';\r\n\r\n@Injectable()\r\nexport class ErrorService {\r\n\r\n\tprivate urls = {\r\n\t\tsendEmail: '/v2/error-alert.json'\r\n\t};\r\n\r\n\tconstructor(public dialog: MatDialog,\r\n\t\tprivate http: HttpClient,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate updateService: UpdateService) { }\r\n\r\n\tpublic handleError(error: Error) {\r\n\t\tthis.logError(error);\r\n\t}\r\n\r\n\tprivate logError(error: Error) {\r\n\t\tconst chunkFailedMessage = /Loading chunk [^\\s]+ failed/;\r\n\r\n\t\tif (!error) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (error.message.indexOf('ExpressionChangedAfterItHasBeenCheckedError') >= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (chunkFailedMessage.test(error.message)) {\r\n\t\t\tCookieService.set(VersionUpgradeCookieName, 'yes', 1000000);\r\n\t\t\twindow.location.reload();\r\n\t\t\t// automatically reload the page if chunk\r\n\t\t\t// loading fails due to bad versioning\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (console && console.group && console.error) {\r\n\t\t\tconsole.group('Error Service - Console Log');\r\n\t\t\tconsole.warn(error.message);\r\n\t\t\tconsole.warn(error.stack);\r\n\t\t\tconsole.groupEnd();\r\n\t\t\tthis.emailError(error);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic handleHttpError(url: string, message: string): void {\r\n\r\n\t\tthis.updateService.closeModal();\r\n\r\n\t\tthis.dialog.open(HttpErrorDialog, {\r\n\t\t\twidth: '250px',\r\n\t\t\tdata: {\r\n\t\t\t\terrorMessage: message\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic emailErrorMessage(message: string): Promise<CMError> {\r\n\t\tlet headers: HttpHeaders;\r\n\t\tlet token: Token;\r\n\t\tlet body: { Message: string};\r\n\r\n\t\ttoken = this._tokenService.getToken();\r\n\r\n\t\tif (!token) {\r\n\t\t\tthrow new Error('token is empty!');\r\n\t\t}\r\n\r\n\t\theaders = new HttpHeaders({ // Disable caching. Otherwise, ajax calls via Angular are cached prevents views in IE11 from refreshing\r\n\t\t\t'Cache-Control': 'no-cache',\r\n\t\t\t'Pragma': 'no-cache',\r\n\t\t\t'Authorization': 'Bearer ' + token.token,\r\n\t\t\t'X-Client-Version': ReleaseVersion\r\n\t\t});\r\n\r\n\t\tbody = {\r\n\t\t\tMessage: message\r\n\t\t}\r\n\r\n\t\tif (!this.http) {\r\n\t\t\tconsole.warn('ErrorService:emailError() - http is empty');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// using http here to avoid circular reference caused by httpService\r\n\t\treturn this.http.post(environment.APIEndpoint + this.urls.sendEmail, body, { headers: headers}).\r\n\t\ttoPromise().then((response: CMError): CMError => {\r\n\t\t\t\treturn response;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tprivate emailError(error: Error): Promise<CMError> {\r\n\t\tlet headers: HttpHeaders;\r\n\t\tlet token: Token;\r\n\t\tlet body: { Message: string};\r\n\r\n\t\tif (!error || !error.message) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttoken = this._tokenService.getToken();\r\n\r\n\t\tif (!token) {\r\n\t\t\tthrow new Error('token is empty!');\r\n\t\t}\r\n\r\n\t\theaders = new HttpHeaders({ // Disable caching. Otherwise, ajax calls via Angular are cached prevents views in IE11 from refreshing\r\n\t\t\t'Cache-Control': 'no-cache',\r\n\t\t\t'Pragma': 'no-cache',\r\n\t\t\t'Authorization': 'Bearer ' + token.token,\r\n\t\t\t'X-Client-Version': ReleaseVersion\r\n\t\t});\r\n\r\n\t\tbody = {\r\n\t\t\tMessage: error.message + ' ' + error.stack\r\n\t\t}\r\n\r\n\t\tif (!this.http) {\r\n\t\t\tconsole.warn('ErrorService:emailError() - http is empty');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// using http here to avoid circular reference caused by httpService\r\n\t\treturn this.http.post(environment.APIEndpoint + this.urls.sendEmail, body, { headers: headers}).\r\n\t\t\ttoPromise().then(\r\n\t\t\t\t(response: CMError): CMError => {\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { ErrorService } from './error.service';\r\nimport { HttpClient, HttpHeaders, HttpParams, HttpErrorResponse } from '@angular/common/http';\r\nimport { TokenService } from './token.service';\r\nimport { Token } from './interface';\r\nimport { ReleaseVersion, VersionUpgradeCookieName } from './constants';\r\nimport { CMErrors, CMError, httpStatusCodes } from '../interfaces/interfaces';\r\nimport { WebAPIErrors } from '../classes/WebAPIErrors';\r\nimport { CookieService } from './cookie.service';\r\nimport { environment } from '../../environments/environment';\r\n\r\nexport interface HttpServiceGetOptions {\r\n\turl: string,\r\n\tsearchParams?: HttpParams,\r\n\tcallback?: Function,\r\n\tuseLocalStorage?: boolean,\r\n\tisWebAPI?: boolean,\r\n\tshouldBypassServerErrorAlert?: boolean // setting this to true will suppress the server error popul\r\n}\r\n\r\nexport interface HttpServicePostOptions {\r\n\turl: string,\r\n\tbody: any,\r\n\tparams?: HttpParams,\r\n\tcallback?: Function,\r\n\tisWebAPI?: boolean,\r\n\tshouldBypassServerErrorAlert?: boolean, // setting this to true will suppress the server error popul\r\n\tGoogleJWTToken?: string, // Google Identity JWT\r\n}\r\n\r\n@Injectable()\r\nexport class HttpService {\r\n\r\n\tconstructor(\r\n\t\tprivate http: HttpClient,\r\n\t\tprivate tokenService: TokenService,\r\n\t\tprivate errorService: ErrorService) { }\r\n\r\n\tpublic get(params: HttpServiceGetOptions): Promise<any> {\r\n\r\n\t\tlet headers: HttpHeaders;\r\n\t\tlet stored: string;\r\n\t\tlet token: Token;\r\n\t\tlet urlAbsolute: string;\r\n\r\n\t\tif (!params) {\r\n\t\t\tthrow new Error('params is empty');\r\n\t\t}\r\n\r\n\t\tif (params.useLocalStorage) {\r\n\r\n\t\t\tstored = sessionStorage.getItem(params.url.toLowerCase());\r\n\r\n\t\t\tif (stored) {\r\n\t\t\t\tif (params.callback) {\r\n\t\t\t\t\treturn of(params.callback(JSON.parse(stored))).toPromise();\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn of(JSON.parse(stored)).toPromise();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (params.isWebAPI) {\r\n\t\t\ttoken = this.tokenService.getToken();\r\n\r\n\t\t\tif (!token) {\r\n\t\t\t\tthrow new Error('token is empty');\r\n\t\t\t}\r\n\r\n\t\t\theaders = new HttpHeaders({ // Disable caching. Otherwise, ajax calls via Angular are cached prevents views in IE11 from refreshing\r\n\t\t\t\t'Cache-Control': 'no-cache',\r\n\t\t\t\t'Pragma': 'no-cache',\r\n\t\t\t\t'Authorization': 'Bearer ' + token.token,\r\n\t\t\t\t'X-Client-Version': ReleaseVersion\r\n\t\t\t});\r\n\r\n\t\t\turlAbsolute = environment.APIEndpoint + params.url;\r\n\t\t} else {\r\n\t\t\theaders = new HttpHeaders({ // Disable caching. Otherwise, ajax calls via Angular are cached prevents views in IE11 from refreshing\r\n\t\t\t\t'Cache-Control': 'no-cache',\r\n\t\t\t\t'Pragma': 'no-cache',\r\n\t\t\t\t'X-Client-Version': ReleaseVersion\r\n\t\t\t});\r\n\r\n\t\t\turlAbsolute = params.url;\r\n\t\t}\r\n\r\n\t\tif (!urlAbsolute) {\r\n\t\t\treturn of(null).toPromise(); // return empty promise on fail\r\n\t\t} else {\r\n\t\t\turlAbsolute = urlAbsolute.toLowerCase();\r\n\t\t\t\t// Visual C# oddity where upper case urls sometimes generated\r\n\t\t\t\t// different session cookies, at least locally, which resulted in authentication fail\r\n\t\t}\r\n\r\n\t\treturn this.http\r\n\t\t\t.get(urlAbsolute,\r\n\t\t\t\t{\r\n\t\t\t\t\theaders: headers,\r\n\t\t\t\t\tparams: params.searchParams,\r\n\t\t\t\t})\r\n\t\t\t.toPromise()\r\n\t\t\t.then(json => {\r\n\r\n\t\t\t\tlet errors: WebAPIErrors;\r\n\r\n\t\t\t\tif (json === null || json === undefined) {\r\n\t\t\t\t\tthis.handleError(params.url, 'Empty JSON response');\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\terrors = new WebAPIErrors(json as CMErrors);\r\n\r\n\t\t\t\tif (errors.isCMError()) {\r\n\t\t\t\t\tif (errors.isError()) {\r\n\t\t\t\t\t\tconsole.warn(errors.error.message);\r\n\t\t\t\t\t\tthis.handleError(params.url, errors.error.message);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjson = errors.error; // clean up return object\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (params.useLocalStorage) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tsessionStorage.setItem(params.url, JSON.stringify(json));\r\n\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t// prevent the error from disrupting this method\r\n\t\t\t\t\t\t// setItem may trigger an QuotaExceededError due to storage\r\n\t\t\t\t\t\t// space issues\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (params.callback) {\r\n\t\t\t\t\treturn params.callback(json);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn json;\r\n\t\t\t})\r\n\t\t\t.catch((errorResponse: HttpErrorResponse) => {\r\n\t\t\t\tlet errors: WebAPIErrors;\r\n\r\n\t\t\t\tif (errorResponse) {\r\n\t\t\t\t\terrors = new WebAPIErrors(errorResponse.error);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this._handleUpgrade(errorResponse)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (params && params.shouldBypassServerErrorAlert) {\r\n\t\t\t\t\tif (params.callback) {\r\n\t\t\t\t\t\treturn params.callback(errors.error);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn errors.error;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (errors && errors.errors && errors.errors.length > 0) {\r\n\t\t\t\t\t\tthis.handleError(params.url, errors.errors[0].message);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.handleError(params.url, 'Something went wrong.');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconsole.warn(errorResponse);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate preparePostHeaders(params: HttpServicePostOptions | HttpServiceGetOptions): HttpHeaders {\r\n\t\tlet token: Token;\r\n\t\tlet headers: HttpHeaders;\r\n\r\n\t\tif (!params) {\r\n\t\t\tthrow new Error('params is empty');\r\n\t\t}\r\n\r\n\t\tif (params.isWebAPI) {\r\n\t\t\ttoken = this.tokenService.getToken();\r\n\r\n\t\t\tif (!token) {\r\n\t\t\t\tthrow new Error('token is empty!');\r\n\t\t\t}\r\n\r\n\t\t\theaders = new HttpHeaders({ // Disable caching. Otherwise, ajax calls via Angular are cached prevents views in IE11 from refreshing\r\n\t\t\t\t'Cache-Control': 'no-cache',\r\n\t\t\t\t'Pragma': 'no-cache',\r\n\t\t\t\t'Authorization': 'Bearer ' + token.token,\r\n\t\t\t\t'X-Client-Version': ReleaseVersion\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\theaders = new HttpHeaders({ // Disable caching. Otherwise, ajax calls via Angular are cached prevents views in IE11 from refreshing\r\n\t\t\t\t'Cache-Control': 'no-cache',\r\n\t\t\t\t'Pragma': 'no-cache',\r\n\t\t\t\t'X-Client-Version': ReleaseVersion\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn headers;\r\n\t}\r\n\r\n\tprivate prepareUrl(url: string, isWebAPI: boolean): string {\r\n\r\n\t\tif (!url) {\r\n\t\t\tthrow new Error('url is empty');\r\n\t\t}\r\n\r\n\t\tif (isWebAPI) {\r\n\t\t\turl = environment.APIEndpoint + url;\r\n\t\t}\r\n\r\n\t\turl = url.toLowerCase();\r\n\t\treturn url;\r\n\t}\r\n\r\n\tpublic post(params: HttpServicePostOptions): Promise<any> {\r\n\t\tlet headers: HttpHeaders;\r\n\r\n\t\tif (!params) {\r\n\t\t\tthrow new Error('params is empty');\r\n\t\t}\r\n\r\n\t\theaders = this.preparePostHeaders(params);\r\n\t\tparams.url = this.prepareUrl(params.url, params.isWebAPI);\r\n\r\n\t\tif (params.GoogleJWTToken) {\r\n\t\t\theaders = headers.append('X-Google-JWT', params.GoogleJWTToken);\r\n\t\t}\r\n\r\n\t\tif (!params.body) {\r\n\t\t\tparams.body = {};\r\n\t\t}\r\n\r\n\t\treturn this.http\r\n\t\t\t.post(params.url, params.body, {\r\n\t\t\t\theaders: headers,\r\n\t\t\t})\r\n\t\t\t.toPromise()\r\n\t\t\t.then(json => {\r\n\r\n\t\t\t\tlet errors: WebAPIErrors;\r\n\r\n\t\t\t\tif (json === null || json === undefined) { // allow for boolean and other responses\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\terrors = new WebAPIErrors(json as CMErrors);\r\n\r\n\t\t\t\tif (errors.isCMError()) {\r\n\t\t\t\t\tif (errors.isError()) {\r\n\t\t\t\t\t\tconsole.warn(errors.error.message);\r\n\t\t\t\t\t\tthis.handleError(params.url, errors.error.message);\r\n\t\t\t\t\t\treturn errors.error;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjson = errors.error; // clean up return object\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (params.callback) {\r\n\t\t\t\t\treturn params.callback(json);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn json;\r\n\t\t\t})\r\n\t\t\t.catch((error: HttpErrorResponse) => {\r\n\t\t\t\tlet response: WebAPIErrors;\r\n\r\n\t\t\t\tif (this._handleUpgrade(error)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!error) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresponse = new WebAPIErrors(error.error as CMErrors);\r\n\r\n\t\t\t\tif (params.shouldBypassServerErrorAlert) {\r\n\r\n\t\t\t\t\tif (params.callback) {\r\n\t\t\t\t\t\treturn params.callback(response.error);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn response.error; // return the first error\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.warn(error);\r\n\r\n\t\t\t\t\tif (response.error) {\r\n\t\t\t\t\t\tthis.handleError(params.url, response.error.message);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.handleError(params.url, error.message);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic put(params: HttpServicePostOptions): Promise<any> {\r\n\t\tlet headers: HttpHeaders;\r\n\t\tlet options: {\r\n\t\t\theaders: HttpHeaders,\r\n\t\t\tparams?: HttpParams\r\n\t\t};\r\n\r\n\t\tif (!params) {\r\n\t\t\tthrow new Error('params is empty');\r\n\t\t}\r\n\r\n\t\theaders = this.preparePostHeaders(params);\r\n\t\tparams.url = this.prepareUrl(params.url, params.isWebAPI);\r\n\r\n\t\tif (!params.body) {\r\n\t\t\tparams.body = {};\r\n\t\t}\r\n\r\n\t\toptions = {\r\n\t\t\theaders: headers\r\n\t\t};\r\n\r\n\t\tif (params.params) {\r\n\t\t\toptions.params = params.params;\r\n\t\t}\r\n\r\n\t\treturn this.http\r\n\t\t\t.put(params.url, params.body, options)\r\n\t\t\t.toPromise()\r\n\t\t\t.then(json => {\r\n\t\t\t\treturn this._handlePostResponse(json, params);\r\n\t\t\t})\r\n\t\t\t.catch((error: HttpErrorResponse) => {\r\n\t\t\t\tif (this._handleUpgrade(error)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn this._handleErrorResponse(error, params);\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic async delete(params: HttpServiceGetOptions): Promise<any> {\r\n\t\tlet headers: HttpHeaders;\r\n\t\tlet json: any;\r\n\r\n\t\tif (!params) {\r\n\t\t\tthrow new Error('params is empty');\r\n\t\t}\r\n\r\n\t\theaders = this.preparePostHeaders(params);\r\n\t\tparams.url = this.prepareUrl(params.url, params.isWebAPI);\r\n\r\n\t\ttry {\r\n\t\t\tjson = await this.http\r\n\t\t\t\t.delete(params.url, { headers: headers, params: params.searchParams })\r\n\t\t\t\t.toPromise()\r\n\t\t\t\t.catch((error: HttpErrorResponse) => {\r\n\t\t\t\t\tif (this._handleUpgrade(error)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn this._handleErrorResponse(error, params);\r\n\t\t\t\t});\r\n\r\n\t\t\treturn this._handlePostResponse(json, params);\r\n\t\t} catch (error) {\r\n\t\t\treturn this._handleErrorResponse(error, params);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _handleErrorResponse(error: HttpErrorResponse, params: HttpServicePostOptions | HttpServiceGetOptions): CMError {\r\n\t\tlet response: WebAPIErrors;\r\n\r\n\t\tif (error) {\r\n\t\t\tif (!error.error) {\r\n\t\t\t\tlet internalErrors: CMError[] = [{\r\n\t\t\t\t\tcode: httpStatusCodes.angularError,\r\n\t\t\t\t\tmessage: error.message\r\n\t\t\t\t}];\r\n\r\n\t\t\t\tresponse = new WebAPIErrors({ errors: internalErrors });\r\n\t\t\t} else {\r\n\t\t\t\tresponse = new WebAPIErrors(error.error as CMErrors);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (params && params.shouldBypassServerErrorAlert) {\r\n\t\t\tif (response) {\r\n\t\t\t\treturn response.error; // return the first error\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconsole.warn(error);\r\n\r\n\t\t\tif (response && response.errors && response.errors.length > 0) {\r\n\t\t\t\tthis.handleError(params.url, response.errors[0].message);\r\n\t\t\t} else {\r\n\t\t\t\tthis.handleError(params.url, 'Something went wrong.');\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _handlePostResponse(json: any, params: HttpServicePostOptions | HttpServiceGetOptions): any {\r\n\t\tlet errors: WebAPIErrors;\r\n\r\n\t\tif (json === null || json === undefined) {\r\n\t\t\t// allow zero and boolean false responses to go through\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\terrors = new WebAPIErrors(json as CMErrors);\r\n\r\n\t\tif (errors.isCMError()) {\r\n\t\t\tif (errors.isError()) {\r\n\t\t\t\tconsole.warn(errors.error.message);\r\n\t\t\t\tthis.handleError(params.url, errors.error.message);\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\tjson = errors.error; // clean up return object\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (params.callback) {\r\n\t\t\treturn params.callback(json);\r\n\t\t}\r\n\r\n\t\treturn json;\r\n\t}\r\n\r\n\t/**\r\n\t * This method is called by external functions, so has public scope\r\n\t * @param url\r\n\t * @param message\r\n\t */\r\n\tpublic handleError(url: string, message: string): void {\r\n\t\tthis.errorService.handleHttpError(url, message);\r\n\t}\r\n\r\n\t/**\r\n\t * return boolean result to prevent further error processing\r\n\t * if page reloads\r\n\t * @param errorResponse\r\n\t */\r\n\tprivate _handleUpgrade(errorResponse: HttpErrorResponse): boolean {\r\n\t\tif (errorResponse.status === httpStatusCodes.UpgradeRequired) {\r\n\t\t\tCookieService.set(VersionUpgradeCookieName, 'yes', 1000000);\r\n\t\t\twindow.location.reload();\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpService, HttpServicePostOptions } from './http.service';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { LoginCredentials, LogInResponse, Token, ResetPasswordResponse, IRecaptchaResponse, ILoginService } from './interface';\r\nimport { CMError } from '../interfaces/interfaces';\r\n\r\n@Injectable()\r\nexport class LoginService implements ILoginService {\r\n\r\n\tprivate urls = {\r\n\t\tlogin: '/Token',\r\n\t\tforgetPassword: '/v2/account/forget-password.json',\r\n\t\tresetPassword: '/v2/account/reset-password.json',\r\n\t\tregister: '/v2/account/register.json',\r\n\t\tresendConfirmation: '/v2/account/resend-confirmation.json',\r\n\t\tconfirmEmail: '/v2/account/confirm-email.json',\r\n\t\tvalidateRecaptcha: '/v2/account/validate-captcha.json',\r\n\t\ttemporaryKey: `/v2/account/temporary-key.json`,\r\n\t\taddToUCCERanch: '/v2/account/ucce-ranch-member.json'\r\n\t};\r\n\r\n\tconstructor(private httpService: HttpService, ) { }\r\n\r\n\tpublic addToUCCE(): Promise<void> {\r\n\t\treturn this.httpService.put({\r\n\t\t\turl: this.urls.addToUCCERanch,\r\n\t\t\tbody: {},\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tpublic login(loginCredentials: LoginCredentials): Promise<Token> {\r\n\t\tlet params: HttpParams;\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tparams = new HttpParams().set('username', loginCredentials.username)\r\n\t\t\t.set('password', loginCredentials.password)\r\n\t\t\t.set('grant_type', 'password');\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.login,\r\n\t\t\tbody: params,\r\n\t\t\tcallback: this.parseTokenFromResponse,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true,\r\n\t\t\tGoogleJWTToken: loginCredentials.GoogleJWT\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic getTemporaryKey(): Promise<string> {\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: this.urls.temporaryKey,\r\n\t\t\tisWebAPI: true,\r\n\t\t});\r\n\t}\r\n\r\n\tprivate parseTokenFromResponse(response: LogInResponse): Token {\r\n\t\tlet token: Token;\r\n\r\n\t\tif (!response || !response.access_token || !response.expires_in) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttoken = {\r\n\t\t\ttoken: response.access_token,\r\n\t\t\texpires: new Date(Date.now() + response.expires_in * 1000)\r\n\t\t\t\t// expires_in is in seconds, date() takes milliseconds\r\n\t\t}\r\n\r\n\t\treturn token;\r\n\t}\r\n\r\n\tpublic forgetPassword(email: string): Promise<CMError> {\r\n\t\tlet params: HttpParams;\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tparams = new HttpParams().set('email', email);\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.forgetPassword,\r\n\t\t\tbody: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic resetPassword(email: string, password: string, confirmPassword: string, code: string): Promise<CMError | ResetPasswordResponse> {\r\n\t\tlet params: HttpParams;\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tparams = new HttpParams().set('Email', email)\r\n\t\t\t.set('Password', password)\r\n\t\t\t.set('ConfirmPassword', confirmPassword)\r\n\t\t\t.set('Code', encodeURIComponent(code));\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.resetPassword,\r\n\t\t\tbody: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic register(firstName: string, lastName: string, email: string, confirmEmail: string,\r\n\t\tpassword: string, confirmPassword: string): Promise<CMError | ResetPasswordResponse> {\r\n\r\n\t\tlet params: HttpParams;\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tparams = new HttpParams().set('FirstName', firstName)\r\n\t\t\t.set('LastName', lastName)\r\n\t\t\t.set('Email', email)\r\n\t\t\t.set('ConfirmEmail', confirmEmail)\r\n\t\t\t.set('Password', password)\r\n\t\t\t.set('ConfirmPassword', confirmPassword);\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.register,\r\n\t\t\tbody: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic resendConfirmation(email: string): Promise<CMError | ResetPasswordResponse> {\r\n\t\tlet params: HttpParams;\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tparams = new HttpParams().set('email', email);\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.resendConfirmation,\r\n\t\t\tbody: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic confirmEmail(userId: string, code: string): Promise<CMError | ResetPasswordResponse> {\r\n\t\tlet params: HttpParams;\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\tparams = new HttpParams().set('userId', userId)\r\n\t\t\t.set('code', code);\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.confirmEmail,\r\n\t\t\tbody: params,\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n\r\n\tpublic validateRecaptcha(token: string): Promise<CMError | IRecaptchaResponse> {\r\n\t\tlet options: HttpServicePostOptions;\r\n\r\n\t\toptions = {\r\n\t\t\turl: this.urls.validateRecaptcha,\r\n\t\t\tbody: {\r\n\t\t\t\tToken: token\r\n\t\t\t},\r\n\t\t\tisWebAPI: true,\r\n\t\t\tshouldBypassServerErrorAlert: true\r\n\t\t}\r\n\r\n\t\treturn this.httpService.post(options);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpService } from './http.service';\r\nimport { ValidateService } from './validate.service';\r\nimport { HttpParams } from '@angular/common/http';\r\n\r\n@Injectable()\r\nexport class ModelService {\r\n\r\n\tconstructor(\r\n\t\tprotected httpService: HttpService,\r\n\t\tprotected validateService: ValidateService) { }\r\n\r\n\tprotected get(url: string, callback: Function, params?: HttpParams): Promise<any> {\r\n\r\n\t\treturn this.httpService.get({\r\n\t\t\turl: url.toLocaleLowerCase(),\r\n\t\t\tsearchParams: params,\r\n\t\t\tcallback: callback,\r\n\t\t\tisWebAPI: true\r\n\t\t});\r\n\t}\r\n\r\n\tprotected post(url: string, callback: Function, params: Object, shouldBypassServerErrorAlert = false): Promise<any> {\r\n\t\treturn this.httpService\r\n\t\t\t.post({\r\n\t\t\t\turl: url.toLocaleLowerCase(),\r\n\t\t\t\tbody: params,\r\n\t\t\t\tcallback: callback,\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tshouldBypassServerErrorAlert: shouldBypassServerErrorAlert\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param url\r\n\t * @param callback\r\n\t * @param params\r\n\t * @param shouldBypassServerErrorAlert\r\n\t * @returns result of callback if successful. Else will return CMError object\r\n\t */\r\n\tprotected put(url: string, callback: Function, params: Object, shouldBypassServerErrorAlert = false): Promise<any> {\r\n\t\treturn this.httpService\r\n\t\t\t.put({\r\n\t\t\t\turl: url.toLocaleLowerCase(),\r\n\t\t\t\tbody: params,\r\n\t\t\t\tcallback: callback,\r\n\t\t\t\tisWebAPI: true,\r\n\t\t\t\tshouldBypassServerErrorAlert: shouldBypassServerErrorAlert\r\n\t\t\t});\r\n\t}\r\n\r\n\tprotected deleteItem(url: string, callback: Function, params?: HttpParams): Promise<any> {\r\n\t\treturn this.httpService\r\n\t\t\t.delete({\r\n\t\t\t\turl: url.toLocaleLowerCase(),\r\n\t\t\t\tsearchParams: params,\r\n\t\t\t\tcallback: callback,\r\n\t\t\t\tisWebAPI: true\r\n\t\t\t});\r\n\t}\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\n\r\nimport { INotificationParams } from '../interfaces/interfaces';\r\nimport { NotificationComponent } from '../components/shared/notification/main';\r\n\r\n@Injectable()\r\nexport class NotificationService {\r\n\r\n\tconstructor(private snackBar: MatSnackBar) { }\r\n\r\n\tpublic generateNotifcation(params: INotificationParams): void {\r\n\r\n\t\tif (!params) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (params.message) {\r\n\t\t\t// capitalize first letter of message for better presentation\r\n\t\t\tparams.message = params.message.charAt(0).toUpperCase() + params.message.substr(1);\r\n\t\t}\r\n\r\n\t\tthis.snackBar.openFromComponent(NotificationComponent, {\r\n\t\t\tduration: 10000,\r\n\t\t\tpanelClass: 'bk-notification',\r\n\t\t\tdata: params\r\n\t\t})\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IPlanting } from '../components/planting-settings/interfaces';\r\nimport { ICurrentUser } from '../models/user/interfaces';\r\nimport { IRanchPermissions } from '../components/ranch-settings/interfaces';\r\nimport { PlantingTabTitles } from '../interfaces/constants';\r\nimport * as jQuery from 'jquery';\r\nimport { CookieService } from './cookie.service';\r\nimport { ETCalculatorResultsInputParams } from '../components/public/et-calculator/et-calculator-results.component';\r\nimport { GlobalNotificationExists } from './constants';\r\n\r\n/**\r\n * Used to maintain data across different views without depending on triggers\r\n * The data is persistent, so need to be careful what we put here, to minimize memory allcoation\r\n */\r\n@Injectable()\r\nexport class PersistentDatabase {\r\n\tpublic planting: IPlanting;\r\n\tpublic wetDate: Date;\r\n\tpublic user: ICurrentUser;\r\n\tpublic permissions: IRanchPermissions;\r\n\tpublic isGlobalNotificationVisible: boolean;\r\n\tpublic selectedPlantingsTab: string;\r\n\tpublic globalNotificationCookieName = 'donationCookie1.1';\r\n\tpublic cropTypeQuery: string;\r\n\tpublic cropTypePageIndex: number;\r\n\tpublic etCalculatorParams: ETCalculatorResultsInputParams;\r\n\r\n\tpublic verticalSCrollPosition: {\r\n\t\tplantingsView: number\r\n\t} = {\r\n\t\t\tplantingsView: null\r\n\t\t};\r\n\r\n\tpublic getPlantingsViewScrollPosition() {\r\n\t\tlet el: JQuery;\r\n\r\n\t\tel = jQuery(this.getScrollArea());\r\n\r\n\t\tif (!el) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.verticalSCrollPosition.plantingsView = el.scrollTop();\r\n\t}\r\n\r\n\tpublic GlobalNotificationIsVisible(): boolean {\r\n\t\tlet cookie: string;\r\n\r\n\t\tif (!GlobalNotificationExists) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tcookie = CookieService.get(this.globalNotificationCookieName);\r\n\r\n\t\tif (cookie === null) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\t// if cookie is set, then it was dismissed.. so its not visible\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic resetPlantingsViewScrollPosition() {\r\n\t\tlet el: JQuery;\r\n\r\n\t\tel = jQuery(this.getScrollArea());\r\n\r\n\t\tif (!el) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.verticalSCrollPosition.plantingsView) {\r\n\t\t\tel.scrollTop(this.verticalSCrollPosition.plantingsView);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getScrollArea(): Element {\r\n\t\tlet el: JQuery;\r\n\t\tlet index: number;\r\n\r\n\t\tswitch (this.selectedPlantingsTab) {\r\n\t\t\tcase PlantingTabTitles.active:\r\n\t\t\t\tindex = 0;\r\n\t\t\t\tbreak;\r\n\t\t\tcase PlantingTabTitles.favorites:\r\n\t\t\t\tindex = 1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase PlantingTabTitles.all:\r\n\t\t\t\tindex = 2;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault: // if nothing is selected, assume active planting\r\n\t\t\t\tindex = 0;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tel = jQuery('.bk-flex-table__scroll-area');\r\n\r\n\t\tif (!el) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!el.get(index)) {\r\n\t\t\tif (index !== 2) {\r\n\t\t\t\treturn;\r\n\t\t\t} else if (!el.get(1)) { // get(1) may be either favorite plantings or all plantings\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\tindex = 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn el.get(index);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject, Observable } from 'rxjs';\r\nimport { ICurrentRanchLots } from '../../interfaces/interfaces';\r\nimport { RanchService } from '../../components/ranch-settings/service';\r\nimport { IRanchLotJSONModel } from '../../components/ranch-settings/interfaces';\r\nimport { ILotEdit } from '../../components/ranch-settings/modals/lot/interfaces';\r\n\r\n@Injectable()\r\nexport class LotSubscriptionService {\r\n\tprivate _currentRanchLotsSubject: Subject<ICurrentRanchLots>;\r\n\tpublic currentRanchLots$: Observable<ICurrentRanchLots>;\r\n\r\n\tconstructor(\r\n\t\tprivate _ranchService: RanchService\r\n\t) {\r\n\t\tthis._currentRanchLotsSubject = new Subject<ICurrentRanchLots>();\r\n\t\tthis.currentRanchLots$ = this._currentRanchLotsSubject.asObservable();\r\n\t}\r\n\r\n\tpublic setCurrentRanchLots(ranchId: string, lotId: number, lot: ILotEdit) {\r\n\r\n\t\tthis._ranchService.getBasicRanchLots(ranchId)\r\n\t\t\t.then((res: IRanchLotJSONModel[]) => {\r\n\r\n\t\t\t\tthis._currentRanchLotsSubject.next({\r\n\t\t\t\t\tlots: res,\r\n\t\t\t\t\tlotId: lotId,\r\n\t\t\t\t\tlot: lot\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Token, ITokenService } from './interface';\r\nimport { SessionStorageWebAPIKey } from './constants';\r\n\r\n@Injectable()\r\nexport class TokenService implements ITokenService {\r\n\r\n\tprivate token: Token = {\r\n\t\ttoken: null,\r\n\t\texpires: null\r\n\t};\r\n\r\n\tpublic setToken(token: Token): void {\r\n\t\tthis.token = token;\r\n\t\tlocalStorage.setItem(SessionStorageWebAPIKey, JSON.stringify(token));\r\n\t}\r\n\r\n\tpublic getToken(): Token {\r\n\t\tlet cache: Token;\r\n\r\n\t\tcache = JSON.parse(localStorage.getItem(SessionStorageWebAPIKey));\r\n\r\n\t\tif (cache) {\r\n\t\t\tthis.token = cache;\r\n\t\t}\r\n\r\n\t\treturn this.token;\r\n\t}\r\n\r\n\tpublic isAuthenticated(): boolean {\r\n\t\tlet now: Date;\r\n\r\n\t\tnow = new Date();\r\n\r\n\t\tif (!this.token || !this.token.token) {\r\n\t\t\tthis.getToken();\r\n\t\t}\r\n\r\n\t\tif (this.token && this.token.token !== null &&\r\n\t\t\tnew Date(this.token.expires) >= now) {\r\n\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic logOff(): void {\r\n\t\tthis.token = {\r\n\t\t\ttoken: null,\r\n\t\t\texpires: null\r\n\t\t};\r\n\r\n\t\tlocalStorage.removeItem(SessionStorageWebAPIKey);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class TooltipService {\r\n    public static hideTooltip() {\r\n        jQuery(\".ui-tooltip\").remove();\r\n    }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Subject ,  Observable, BehaviorSubject } from 'rxjs';\r\n\r\nimport { IEventGroup } from '../models/event/interfaces';\r\n\r\nimport { IRanch, ICIMISOptions, IRanchPermissions, IRanchSettingsValidationStates,\r\n\tISubjectFavoriteResponse,\r\n\tIRanchUserListItem,\r\n\tIWeatherStationCurrentModel} from '../components/ranch-settings/interfaces';\r\n\r\nimport { IUpdatedSoilMoistureFile } from '../components/soil-moisture/soilMoisture.interface';\r\nimport { iLocation } from '../interfaces/views/map';\r\nimport { IWeatherStation } from '../components/weather-stations/interfaces';\r\nimport { iIgnoreSchedule } from '../components/ignore-schedules/interfaces';\r\nimport { IWeatherStationRegion } from '../models/region/interfaces';\r\nimport { ICommodityTypesRanchJSON } from '../models/commodity-type/interfaces';\r\nimport { WeatherStation } from '../components/weather-stations/weatherStation';\r\nimport { IRanchLotModel } from '../components/ranch-settings/modals/lot/interfaces';\r\nimport { IWell } from '../models/planting-well/well.interface';\r\nimport { ICurrentUser } from '../models/user/interfaces';\r\nimport { IFertilizer } from '../components/ranch-settings/modals/fertilizer/interfaces';\r\n\r\n// Navigation options in the main menu - used to track which menu item is active\r\nexport enum navigationViews {\r\n\tLOCALIZATION = 1,\r\n\tPROFILE = 2,\r\n\tRANCHES = 3\r\n}\r\n\r\n@Injectable()\r\nexport class UpdateService {\r\n\r\n\t/*\r\n     * Subscription for when a ranch is created, updated, or deleted\r\n     */\r\n\tprivate ranchesSubject: Subject<string> = new Subject<string>();\r\n\r\n\t// use this to detect changes to a single ranch\r\n\t// - used primary for updating ranch settings page\r\n\tprivate updatedRanch: Subject<IRanch> = new Subject<IRanch>();\r\n\tpublic updatedRanch$ = this.updatedRanch.asObservable();\r\n\r\n\t/*\r\n     * Subscription for tracking current ranch\r\n     */\r\n\r\n\tpublic reload = { // tracks to see if we switched ranches, to figure out when to repull from server\r\n\t\tactive: false,\r\n\t\tfavorites: false,\r\n\t\tall: false\r\n\t}\r\n\r\n\tpublic currentRanchId: string; // access this object for current ranch id\r\n\tprivate ranchIdSubject: Subject<string> = new Subject<string>();\r\n\r\n\t// subscribe to this object to get alerted when current ranch changes (with .subscribe())\r\n\tpublic ranchIdSubscription$: Observable<string> = this.ranchIdSubject.asObservable();\r\n\r\n\t/*\r\n     * subscription for ranch plantings permissions\r\n     */\r\n\tprivate RanchPlantingsPermissions: Subject<IRanchPermissions> = new Subject<IRanchPermissions>();\r\n\tpublic RanchPlantingsPermissions$ = this.RanchPlantingsPermissions.asObservable();\r\n\tpublic currentPermissions: IRanchPermissions;\r\n\r\n\t/*\r\n     * subscription for ranch settings\r\n     */\r\n\tprivate RanchSettingsUpdated: Subject<string> = new Subject<string>();\r\n\tpublic RanchSettingsUpdated$ = this.RanchSettingsUpdated.asObservable();\r\n\r\n\t/*for adding events?*/\r\n\tprivate PlantingsUpdated: Subject<Object> = new Subject<Object>();\r\n\tpublic PlantingsUpdated$ = this.PlantingsUpdated.asObservable();\r\n\r\n\tprivate EventUpdated: Subject<Object> = new Subject<Object>();\r\n\tpublic EventUpdated$ = this.EventUpdated.asObservable();\r\n\r\n\t/* For hiding or displaying Ranch search and filter side nav*/\r\n\tprivate displayRanchesSearch: Subject<boolean> = new Subject<boolean>();\r\n\tpublic diplayRanchesSearch$ = this.displayRanchesSearch.asObservable();\r\n\r\n\t/* For hiding or displaying Planting search and filter side nav*/\r\n\tprivate displayPlantingsSearch: Subject<boolean> = new Subject<boolean>();\r\n\tpublic displayPlantingsSearch$ = this.displayPlantingsSearch.asObservable();\r\n\r\n\t/* For toggling units in all events modal */\r\n\tprivate unitsToggle: Subject<{type: string, value: string }> = new Subject<{type: string, value: string }>();\r\n\tpublic unitsToggle$ = this.unitsToggle.asObservable();\r\n\r\n\t/**\r\n     * Trigger ranches to load when tab is clicked\r\n     */\r\n\tprivate plantingsTabclicked: Subject<{ tabName: string }> = new Subject<{ tabName: string }>();\r\n\tpublic plantingsTabClicked$ = this.plantingsTabclicked.asObservable();\r\n\r\n\tprivate plantingFavoritesUpdated: Subject<Object> = new Subject<Object>();\r\n\tpublic plantingFavoritesUpdated$ = this.plantingFavoritesUpdated.asObservable();\r\n\r\n\tprivate ranchFavoritesUpdated: Subject<ISubjectFavoriteResponse> =\r\n\t\tnew Subject<ISubjectFavoriteResponse>();\r\n\r\n\tpublic ranchFavoritesUpdated$ = this.ranchFavoritesUpdated.asObservable();\r\n\r\n\tpublic showRanchSettings: boolean;\r\n\r\n\t/*for setting the current page*/\r\n\t// BehaviorSubject is used instead of Subject to ensure that subscribers\r\n\t// receive updates even if the updates were fired before the subscription\r\n\t// happens\r\n\tprivate currentPage: BehaviorSubject<navigationViews> = new BehaviorSubject<navigationViews>(null);\r\n\tpublic currentPage$ = this.currentPage.asObservable();\r\n\r\n\tprivate missingRanchSettings: Subject<IRanchSettingsValidationStates> = new Subject<IRanchSettingsValidationStates>();\r\n\tpublic missingRanchsettings$ = this.missingRanchSettings.asObservable();\r\n\r\n\tpublic ranchSettings: IRanchSettings = {\r\n\t\tmembers: null,\r\n\t\tlots: null,\r\n\t\tfertilizers: null,\r\n\t\tweatherStations: null,\r\n\t\twells: null,\r\n\t\tcommodityTypes: null\r\n\t}\r\n\r\n\tprivate _ranchSettingsSubject: Subject<IRanchSettings> = new Subject<IRanchSettings>();\r\n\tpublic ranchSettings$ = this._ranchSettingsSubject.asObservable();\r\n\r\n\tprivate navigateToRanchSettings: Subject<void> = new Subject<void>();\r\n\tpublic navigateToRanchSettings$ = this.navigateToRanchSettings.asObservable();\r\n\r\n\t/* Boolean for determining whether or not to cancel ranch export */\r\n\tpublic cancelRanchDataExport = false;\r\n\r\n\tprivate favoritePlantingsLoaded: Subject<boolean> = new Subject<boolean>();\r\n\tpublic favoritePlantingsLoaded$ = this.favoritePlantingsLoaded.asObservable();\r\n\r\n\tprivate activePlantingsLoaded: Subject<boolean> = new Subject<boolean>();\r\n\tpublic activePlantingsLoaded$ = this.activePlantingsLoaded.asObservable();\r\n\r\n\tprivate closeModalSubject: Subject<boolean> = new Subject<boolean>();\r\n\tpublic closeModalSubscription = this.closeModalSubject.asObservable();\r\n\r\n\tpublic currentLocation: iLocation = {\r\n\t\tlat: null,\r\n\t\tlng: null\r\n\t}\r\n\r\n\tprivate SoilMoistureFileUpdated: Subject<IUpdatedSoilMoistureFile> = new Subject<IUpdatedSoilMoistureFile>();\r\n\tpublic SoilMoistureFileUpdated$ = this.SoilMoistureFileUpdated.asObservable();\r\n\r\n\tprivate CIMISOptionsUpdated: Subject<ICIMISOptions> = new Subject<ICIMISOptions>();\r\n\tpublic CIMISOptionsUpdated$ = this.CIMISOptionsUpdated.asObservable();\r\n\r\n\t/**\r\n     * Allows event dialogs to tell event table/list that it has closed. Used for mat dialogs which\r\n     * are not embedded in the event table component template\r\n     */\r\n\r\n\tprivate eventDialogClosed: Subject<null> = new Subject<null>();\r\n\tpublic eventDialogClosed$ = this.eventDialogClosed.asObservable();\r\n\r\n\tprivate updatedWeatherStation: Subject<IWeatherStation> = new Subject<IWeatherStation>();\r\n\tpublic updatedWeatherStation$ = this.updatedWeatherStation.asObservable();\r\n\r\n\tprivate createdWeatherStation: Subject<IWeatherStation> = new Subject<IWeatherStation>();\r\n\tpublic createdWeatherStation$ = this.createdWeatherStation.asObservable();\r\n\r\n\tprivate deletedWeatherStation: Subject<IWeatherStation> = new Subject<IWeatherStation>();\r\n\tpublic deletedWeatherStation$ = this.deletedWeatherStation.asObservable();\r\n\r\n\tprivate deactivatedWeatherstation: Subject<number> = new Subject<number>();\r\n\tpublic deactivatedWeatherStation$ = this.deactivatedWeatherstation.asObservable();\r\n\r\n\tpublic weatherStations: IWeatherStation[] = new Array();\r\n\r\n\tprivate weatherStationsList: Subject<IWeatherStation[]> = new Subject<IWeatherStation[]>();\r\n\tpublic weatherStationsList$ = this.weatherStationsList.asObservable();\r\n\r\n\tprivate createdIgnoreSchedule: Subject<iIgnoreSchedule> = new Subject<iIgnoreSchedule>();\r\n\tpublic createdIgnoreSchedule$ = this.createdIgnoreSchedule.asObservable();\r\n\r\n\tprivate updatedIgnoreSchedule: Subject<iIgnoreSchedule> = new Subject<iIgnoreSchedule>();\r\n\tpublic updatedIgnoreSchedule$ = this.updatedIgnoreSchedule.asObservable();\r\n\r\n\tprivate deletedIgnoreSchedule: Subject<iIgnoreSchedule> = new Subject<iIgnoreSchedule>();\r\n\tpublic deletedIgnoreSchedule$ = this.deletedIgnoreSchedule.asObservable();\r\n\r\n\tpublic weatherStationRegions: IWeatherStationRegion[] = new Array();\r\n\r\n\tprivate weatherStationRegionsList: Subject<IWeatherStationRegion[]> = new Subject<IWeatherStationRegion[]>();\r\n\tpublic weatherStationRegionsList$ = this.weatherStationRegionsList.asObservable();\r\n\r\n\tprivate currentRanchUserReceived: Subject<ICurrentUser> = new Subject<ICurrentUser>();\r\n\tpublic currentRanchUserReceived$ = this.currentRanchUserReceived.asObservable();\r\n\r\n\tprivate authToken: Subject<void> = new Subject<void>(); // triggers when user logs in\r\n\tpublic authToken$ = this.authToken.asObservable();\r\n\r\n\t/******************************************************************************************** */\r\n\r\n\tconstructor() { }\r\n\r\n\tpublic updateAuthToken(): void {\r\n\t\treturn this.authToken.next();\r\n\t}\r\n\r\n\tpublic setCurrentRanchUserAsReceived(user: ICurrentUser): void {\r\n\t\treturn this.currentRanchUserReceived.next(user);\r\n\t}\r\n\r\n\tpublic setUpdatedRanches(source: string) {\r\n\t\tthis.ranchesSubject.next(source);\r\n\t}\r\n\r\n\t// subscribe to this method to get alerted when ranches are updated (with .subscribe())\r\n\tpublic getUpdatedRanchesSubscription(): Observable<string> {\r\n\t\treturn this.ranchesSubject.asObservable();\r\n\t}\r\n\r\n\tpublic setUpdatedRanch(ranch: IRanch) {\r\n\t\tthis.updatedRanch.next(ranch);\r\n\t}\r\n\r\n\tpublic setCurrentRanchId(id: string) {\r\n\r\n\t\tthis.reload = {\r\n\t\t\tactive: true,\r\n\t\t\tfavorites: true,\r\n\t\t\tall: true\r\n\t\t};\r\n\r\n\t\tthis.currentRanchId = id;\r\n\t\tthis.ranchIdSubject.next(id);\r\n\t}\r\n\r\n\tpublic setRanchPlantingsPermissions(permissions: IRanchPermissions) {\r\n\t\tthis.RanchPlantingsPermissions.next(permissions);\r\n\t\tthis.currentPermissions = permissions;\r\n\t}\r\n\r\n\tpublic setRanchSettingsUpdated(settings: string) {\r\n\t\tthis.RanchSettingsUpdated.next(settings);\r\n\t}\r\n\r\n\tpublic setPlantingsUpdated(ranchId: string, time: Date) {\r\n\t\tthis.PlantingsUpdated.next({\r\n\t\t\tranchId: ranchId,\r\n\t\t\ttime: time\r\n\t\t});\r\n\t}\r\n\r\n\tpublic setEventUpdated(eventId: number, event: IEventGroup) {\r\n\t\tthis.EventUpdated.next({\r\n\t\t\teventId: eventId,\r\n\t\t\tevent: event\r\n\t\t});\r\n\t}\r\n\r\n\tpublic setDisplayRanchesSearch(displayRanchesSearch: boolean): void {\r\n\t\tthis.displayRanchesSearch.next(displayRanchesSearch);\r\n\t}\r\n\r\n\tpublic setDisplayPlantingsSearch(displayPlantingsSearch: boolean): void {\r\n\t\tthis.displayPlantingsSearch.next(displayPlantingsSearch);\r\n\t}\r\n\r\n\tpublic toggleUnits(type: string, value: string): void {\r\n\t\tthis.unitsToggle.next({\r\n\t\t\ttype: type,\r\n\t\t\tvalue: value\r\n\t\t});\r\n\t}\r\n\r\n\tpublic setPlantingsTabClicked(tabName: string) {\r\n\t\tthis.plantingsTabclicked.next({ tabName: tabName });\r\n\t}\r\n\r\n\tpublic setPlantingFavoritesUpdated(plantingId: number, favoriteId: number) {\r\n\t\tthis.plantingFavoritesUpdated.next({\r\n\t\t\tplantingId: plantingId,\r\n\t\t\tfavoriteId: favoriteId\r\n\t\t});\r\n\t}\r\n\r\n\tpublic setRanchFavoritesUpdated(ranchId: number, favoriteId?: number, ranch?: IRanch) {\r\n\t\tthis.ranchFavoritesUpdated.next({\r\n\t\t\tranchId: ranchId,\r\n\t\t\tfavoriteId: favoriteId,\r\n\t\t\tranch: ranch\r\n\t\t});\r\n\t}\r\n\r\n\tpublic setCurrentPage(view: navigationViews): void {\r\n\t\tthis.currentPage.next(view);\r\n\t}\r\n\r\n\tpublic setMissingRanchSettings(settings: IRanchSettingsValidationStates): void {\r\n\t\tthis.missingRanchSettings.next(settings);\r\n\t}\r\n\r\n\tpublic updateRanchSettings(): void {\r\n\t\tthis._ranchSettingsSubject.next(this.ranchSettings);\r\n\t}\r\n\r\n\tpublic clearRanchSettings(): void {\r\n\r\n\t\tthis.ranchSettings = {\r\n\t\t\tmembers: null,\r\n\t\t\tlots: null,\r\n\t\t\tfertilizers: null,\r\n\t\t\tweatherStations: null,\r\n\t\t\twells: null,\r\n\t\t\tcommodityTypes: null\r\n\t\t}\r\n\r\n\t\tthis._ranchSettingsSubject.next(this.ranchSettings);\r\n\t}\r\n\r\n\tpublic setNavigateToRanchSettings(): void {\r\n\t\tthis.navigateToRanchSettings.next();\r\n\t}\r\n\r\n\tpublic setFavoritePlantingsLoaded(loaded: boolean): void {\r\n\t\tthis.favoritePlantingsLoaded.next(loaded);\r\n\t}\r\n\r\n\tpublic setActivePlantingsLoaded(loaded: boolean): void {\r\n\t\tthis.activePlantingsLoaded.next(loaded);\r\n\t}\r\n\r\n\tpublic setPlantingsLoaded(loaded: boolean): void {\r\n\t\tthis.favoritePlantingsLoaded.next(loaded);\r\n\t\tthis.activePlantingsLoaded.next(loaded);\r\n\t}\r\n\r\n\tpublic closeModal(): void {\r\n\t\tthis.closeModalSubject.next(true);\r\n\t}\r\n\r\n\tpublic setCurrentLocation(lat: number, lng: number): void {\r\n\t\tthis.currentLocation.lat = lat;\r\n\t\tthis.currentLocation.lng = lng;\r\n\t}\r\n\r\n\tpublic setSoilMoistureFileUpdated(plantingId: number, fileName: string): void {\r\n\t\tif (fileName && typeof fileName === 'string') {\r\n\t\t\tfileName = fileName.trim();\r\n\t\t}\r\n\r\n\t\tthis.SoilMoistureFileUpdated.next({ plantingId: plantingId, fileName: fileName });\r\n\t}\r\n\r\n\tpublic setCIMISOptionsUpdated(cimisOptions: ICIMISOptions): void {\r\n\t\tthis.CIMISOptionsUpdated.next(cimisOptions);\r\n\t}\r\n\r\n\tpublic setEventDialogClosed(): void {\r\n\t\tthis.eventDialogClosed.next();\r\n\t}\r\n\r\n\tpublic updateWeatherStation(updatedWeatherStation: IWeatherStation): void {\r\n\t\tfor (let weatherStation of this.weatherStations) {\r\n\t\t\tif (weatherStation.Id === updatedWeatherStation.Id) {\r\n\t\t\t\tWeatherStation.copy(updatedWeatherStation, weatherStation);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.updatedWeatherStation.next(updatedWeatherStation);\r\n\t}\r\n\r\n\tpublic createWeatherStation(weatherStation: IWeatherStation): void {\r\n\t\tthis.weatherStations.push(weatherStation);\r\n\t\tthis.createdWeatherStation.next(weatherStation);\r\n\t}\r\n\r\n\tpublic deleteWeatherStation(weatherStation: IWeatherStation): void {\r\n\t\tthis.weatherStations = this.weatherStations.filter(x => x.Id !== weatherStation.Id);\r\n\t\tthis.deletedWeatherStation.next(weatherStation);\r\n\t}\r\n\r\n\tpublic deactivateWeatherStation(id: number): void {\r\n\t\tthis.deactivatedWeatherstation.next(id);\r\n\t}\r\n\r\n\tpublic setWeatherStationsList(weatherStations: IWeatherStation[]): void {\r\n\t\tthis.weatherStations = weatherStations;\r\n\t\tthis.weatherStationsList.next(weatherStations);\r\n\t}\r\n\r\n\tpublic createIgnoreSchedule(ignoreSchedule: iIgnoreSchedule): void {\r\n\t\tthis.createdIgnoreSchedule.next(ignoreSchedule);\r\n\t}\r\n\r\n\tpublic updateIgnoreSchedule(ignoreSchedule: iIgnoreSchedule): void {\r\n\t\tthis.updatedIgnoreSchedule.next(ignoreSchedule);\r\n\t}\r\n\r\n\tpublic deleteIgnoreSchedule(ignoreSchedule: iIgnoreSchedule): void {\r\n\t\tthis.deletedIgnoreSchedule.next(ignoreSchedule);\r\n\t}\r\n\r\n\tpublic setweatherStationRegionsList(weatherStationRegions: IWeatherStationRegion[]): void {\r\n\t\tthis.weatherStationRegions = weatherStationRegions;\r\n\t\tthis.weatherStationRegionsList.next(weatherStationRegions);\r\n\t}\r\n}\r\n\r\nexport interface IRanchSettings {\r\n\tmembers: IRanchUserListItem[],\r\n\tlots: IRanchLotModel[],\r\n\tfertilizers: IFertilizer[], // REFACTOR\r\n\tweatherStations: IWeatherStationCurrentModel[],\r\n\twells: IWell[],\r\n\tcommodityTypes: ICommodityTypesRanchJSON[]\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { CMCoordinates } from '../interfaces/views/map';\r\nimport { DateUtility } from '../classes/dateUtility';\r\nimport { isNumber } from 'util';\r\n\r\n@Injectable()\r\nexport class ValidateService {\r\n\r\n\t/**\r\n\t * Takes a number and makes sure its not null or undefined\r\n\t * This does not evaluate whether something is actually a number or not. It\r\n\t * only evaluates emptiness. This method also fails for strings\r\n\t *\r\n\t * @param x\r\n\t */\r\n\tpublic static numberIsEmpty(x: number): boolean { // REFACTOR - this isn't checking what we expect\r\n\t\t// REFACTOR - this is doing a negative check\r\n\t\treturn !x && x !== 0;\r\n\t}\r\n\r\n\tpublic static isNumberWithXDecimalPlaces(value: string, places: number): boolean {\r\n\t\tlet regexString: string;\r\n\t\tlet pattern: RegExp;\r\n\r\n\t\tif (!value || !places) { return; }\r\n\r\n\t\tregexString = '^[0-9]*(\\.[0-9]{0,' + places + '})?$'\r\n\t\tpattern = new RegExp(regexString);\r\n\r\n\t\treturn pattern.test(value);\r\n\t}\r\n\r\n\tpublic static isNullOrEmpty(value: string): boolean { // REFACTOR - this is a string only check but\r\n\t\t// function name does not clarify that\r\n\r\n\t\treturn value === '' || value === null;\r\n\t}\r\n\r\n\t/**\r\n     * WARNING: Duplicate of BOKA.Number.isValid()\r\n     * @param value\r\n     */\r\n\tpublic static isValidNumber(value: number): boolean {\r\n\t\treturn value !== null && value !== undefined && isNumber(value); // REFACTOR - why check for empty string here?\r\n\t}\r\n\r\n\tpublic static removeComma(val: string): string {\r\n\t\tif (val === undefined || val === null) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\treturn val.toString().replace(',', '');\r\n\t}\r\n\r\n\tpublic static isEmpty(value: number): boolean {\r\n\t\treturn value === null || value === undefined;\r\n\t}\r\n\r\n\tpublic static getCoordinatesFromString(coordinatesString: string): CMCoordinates {\r\n\t\tlet coordinates: CMCoordinates;\r\n\t\tlet coordinatesArray: string[];\r\n\r\n\t\tif (!coordinatesString) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcoordinatesArray = coordinatesString.split(',');\r\n\r\n\t\tif (coordinatesArray.length !== 2 ||\r\n\t\t\t!ValidateService.isValidNumber(parseFloat(coordinatesArray[0]))\r\n\t\t\t|| !ValidateService.isValidNumber(parseFloat(coordinatesArray[1]))) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcoordinates = {\r\n\t\t\tlat: Number(coordinatesArray[0]),\r\n\t\t\tlng: Number(coordinatesArray[1])\r\n\t\t}\r\n\r\n\t\treturn coordinates;\r\n\t}\r\n\r\n\tpublic static areCoordinatesValid(coords: string): boolean {\r\n\t\tlet coordinatesArray: string[];\r\n\r\n\t\tif (!coords) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tcoordinatesArray = coords.split(',');\r\n\r\n\t\treturn coordinatesArray.length === 2 && ValidateService.\r\n\t\t\tisValidNumber(parseFloat(coordinatesArray[0])) &&\r\n\t\t\tValidateService.isValidNumber(parseFloat(coordinatesArray[1]));\r\n\t}\r\n\r\n\t// alternative to js toFixed method\r\n\tpublic static truncateDecimals(value: number, decimalPlaces: number): number {\r\n\t\tlet valueAsStrings: string[];\r\n\t\tlet wholeNumber: string;\r\n\t\tlet decimal: string;\r\n\r\n\t\tif (!value) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvalueAsStrings = value.toString().split('.');\r\n\r\n\t\tif (valueAsStrings.length > 2) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\twholeNumber = valueAsStrings[0];\r\n\r\n\t\tif (valueAsStrings.length === 1) {\r\n\t\t\treturn Number(wholeNumber);\r\n\t\t}\r\n\r\n\t\tdecimal = valueAsStrings[1];\r\n\r\n\t\tif (decimal.length <= decimalPlaces) {\r\n\t\t\treturn Number(wholeNumber + '.' + decimal);\r\n\t\t}\r\n\r\n\t\tdecimal = decimal.substring(0, decimalPlaces);\r\n\r\n\t\treturn Number(wholeNumber + '.' + decimal);\r\n\t}\r\n\r\n\t/**\r\n\t * TODO: This doesn't belong in this file\r\n\t * @param decimalNumber\r\n\t */\r\n\tpublic static roundTo2DecimalPlaces(decimalNumber: number, places?: number): number {\r\n\t\tlet mult: number;\r\n\t\tlet pre: number;\r\n\t\tlet result: number;\r\n\r\n\t\tif (!places) {\r\n\t\t\tplaces = 2;\r\n\t\t}\r\n\r\n\t\tif (!decimalNumber || isNaN(decimalNumber)) {\r\n\t\t\treturn 0.00;\r\n\t\t}\r\n\r\n\t\tmult = Math.pow(10, places);\r\n\r\n\t\tdecimalNumber = parseFloat((decimalNumber * mult).toFixed(11));\r\n\t\tpre = (Math.round(decimalNumber) / mult);\r\n\r\n\t\tresult = +(pre.toFixed(places));\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static roundToDecimalPlaces(data: number, places: number): number {\r\n\t\tlet tenFactor = 10;\r\n\r\n\t\tif (!data || !places) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\twhile (places > 1) {\r\n\t\t\ttenFactor = tenFactor * 10;\r\n\t\t\tplaces -= 1;\r\n\t\t}\r\n\r\n\t\treturn Math.round(data * tenFactor + Number.EPSILON) / tenFactor;\r\n\t}\r\n\r\n\tpublic validateNotEmptyString(data: string): boolean {\r\n\t\treturn data !== null && data !== '' && data !== undefined;\r\n\t}\r\n\r\n\tpublic validateNumber(data: number): boolean { // REFACTOR - duplicate of isValidNumber?\r\n\t\treturn data === 0 || (data !== null && !isNaN(data));\r\n\t}\r\n\r\n\tpublic validateNumberInRange(data: number, min: number, max: number): boolean {\r\n\t\treturn this.validateNumber(data) && data >= min && data <= max;\r\n\t}\r\n\r\n\tpublic validateCoordinatesString(data: string): boolean {\r\n\t\tlet coordinates: string[];\r\n\r\n\t\tif (!data) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tcoordinates = data.split(',');\r\n\r\n\t\treturn coordinates.length === 2 && this.validateNumber(Number(coordinates[0])) && this.validateNumber(Number(coordinates[1]));\r\n\t}\r\n\r\n\tpublic isStringWithinMaxCharacterLength(data: string, max: number): boolean {\r\n\t\treturn this.validateNotEmptyString(data) && data.length <= max;\r\n\t}\r\n\r\n\tpublic validateAcceptableSelectOption(data: number): boolean {\r\n\t\treturn !isNaN(data) && Number(data) > 0;\r\n\t}\r\n\r\n\tpublic convertToFloat(n: number, places: number): number {\r\n\t\tlet tenFactor = 10;\r\n\r\n\t\tif (!n || !places) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\twhile (places > 1) {\r\n\t\t\ttenFactor = tenFactor * 10;\r\n\t\t\tplaces -= 1;\r\n\t\t}\r\n\r\n\t\treturn Math.round(n * tenFactor + Number.EPSILON) / tenFactor;\r\n\t}\r\n\r\n\tpublic validateDateBeforeNetDate(date: Date, netDate: string): boolean {\r\n\t\tlet convertedNetDate: Date;\r\n\r\n\t\tconvertedNetDate = DateUtility.DotNetToDate(netDate);\r\n\r\n\t\tif (convertedNetDate) {\r\n\t\t\treturn date <= convertedNetDate;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic validateNumberOrNull(data: number): boolean {\r\n\t\treturn this.validateNumber(data) || data == null;\r\n\t}\r\n}\r\n","export const environment = {\r\n\tproduction: true,\r\n\tAPIEndpoint: 'https://api.cropmanage.ucanr.edu',\r\n\tCASP_LOGIN_URL: 'http://www.almondstewardship.org/',\r\n\tGoogleClientId: '566280991114-uhdiohuu7k8p1enlh9r28hclcq3mbv0p.apps.googleusercontent.com'\r\n};\r\n","import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\nimport { enableProdMode } from '@angular/core';\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n\tenableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule);\r\n"],"sourceRoot":"webpack:///"}