{"version":3,"sources":["./node_modules/ng2-dragula/index.js","./src/app/classes/Errors/argumentNullError.ts","./src/app/classes/eventDialogUtility.ts","./src/app/classes/jqueryHelper.ts","./src/app/classes/modal.ts","./src/app/components/calendar/calendar-event.html","./src/app/components/calendar/calendar-event.ts","./src/app/components/calendar/calendar.html","./src/app/components/calendar/calendar.ts","./src/app/components/calendar/event-hover.html","./src/app/components/calendar/event-hover.ts","./src/app/components/calendar/event-menu-dialog.html","./src/app/components/calendar/event-menu-dialog.ts","./src/app/components/calendar/event-type-icon.html","./src/app/components/calendar/event-type-icon.ts","./src/app/components/casp-dialog/casp-dialog.html","./src/app/components/events/buttons/svg/lot-filled.ts.SVGLotFilledMarkerComponent.html","./src/app/components/events/buttons/svg/lot-filled.ts","./src/app/components/events/buttons/svg/planting.ts.SVGPlantingIconComponent.html","./src/app/components/events/buttons/svg/planting.ts","./src/app/components/events/buttons/svg/rainfall.ts.SVGRainfallComponent.html","./src/app/components/events/buttons/svg/rainfall.ts","./src/app/components/events/buttons/svg/sickle.ts.SVGSickleComponent.html","./src/app/components/events/buttons/svg/sickle.ts","./src/app/components/events/buttons/svg/soil-sample.ts.SVGSoilSampleComponent.html","./src/app/components/events/buttons/svg/soil-sample.ts","./src/app/components/events/buttons/svg/tissue-sample.ts.SVGTissueSampleComponent.html","./src/app/components/events/buttons/svg/tissue-sample.ts","./src/app/components/events/buttons/view-type-units/main.html","./src/app/components/events/buttons/view-type-units/main.ts","./src/app/components/events/list/events-list.tissue-sample.html","./src/app/components/events/list/events-list.tissue-sample.ts","./src/app/components/events/list/main.html","./src/app/components/events/list/main.ts","./src/app/components/events/main.html","./src/app/components/events/main.ts","./src/app/components/events/table/fertilization-hover-panel/fertilization-hover-col.html","./src/app/components/events/table/fertilization-hover-panel/fertilization-hover-col.ts","./src/app/components/events/table/fertilization-hover-panel/fertilization-recommendation-hover-panel.html","./src/app/components/events/table/fertilization-hover-panel/fertilization-recommendation-hover-panel.ts","./src/app/components/events/table/fertilizer/main.html","./src/app/components/events/table/fertilizer/main.ts","./src/app/components/events/table/irrigation-hover-panel/amount.html","./src/app/components/events/table/irrigation-hover-panel/amount.ts","./src/app/components/events/table/irrigation-hover-panel/interval.html","./src/app/components/events/table/irrigation-hover-panel/interval.ts","./src/app/components/events/table/irrigation-hover-panel/main.html","./src/app/components/events/table/irrigation-hover-panel/main.ts","./src/app/components/events/table/main.html","./src/app/components/events/table/main.ts","./src/app/components/events/table/npk/main.html","./src/app/components/events/table/npk/main.ts","./src/app/components/events/table/tissue-samples/event-table.tissue-samples.html","./src/app/components/events/table/tissue-samples/event-table.tissue-samples.ts","./src/app/components/events/totals/main.html","./src/app/components/events/totals/main.ts","./src/app/components/planting-recalculate-modal/planting-recalculate-modal.component.html","./src/app/components/planting-recalculate-modal/planting-recalculate-modal.component.ts","./src/app/components/planting-recalculate-modal/recalculating.component.html","./src/app/components/planting-recalculate-modal/recalculating.component.ts","./src/app/components/planting-settings/calculatorSettingsForm.ts","./src/app/components/planting-settings/creation/planting-create-dialog.html","./src/app/components/planting-settings/creation/planting-create-dialog.ts","./src/app/components/planting-settings/creation/planting-create-step1.html","./src/app/components/planting-settings/creation/planting-create-step1.ts","./src/app/components/planting-settings/creation/planting-create-step2.html","./src/app/components/planting-settings/creation/planting-create-step2.ts","./src/app/components/planting-settings/creation/planting-create-step3.html","./src/app/components/planting-settings/creation/planting-create-step3.ts","./src/app/components/planting-settings/creation/planting-create-step4.html","./src/app/components/planting-settings/creation/planting-create-step4.ts","./src/app/components/planting-settings/creation/planting-create-step5.html","./src/app/components/planting-settings/creation/planting-create-step5.ts","./src/app/components/planting-settings/creation/planting-create-step6.html","./src/app/components/planting-settings/creation/planting-create-step6.ts","./src/app/components/planting-settings/creation/planting-create-step7.html","./src/app/components/planting-settings/creation/planting-create-step7.ts","./src/app/components/planting-settings/cropSettingsFormBuilder.ts","./src/app/components/planting-settings/duplicate-planting/duplicate-planting-dialog.html","./src/app/components/planting-settings/duplicate-planting/duplicate-planting-dialog.ts","./src/app/components/planting-settings/errorFieldLookupTable.ts","./src/app/components/planting-settings/micro-sprinkler/micro-sprinkler.html","./src/app/components/planting-settings/micro-sprinkler/micro-sprinkler.ts","./src/app/components/planting-settings/planting-dialog.html","./src/app/components/planting-settings/planting-dialog.ts","./src/app/components/planting-settings/plantingSettingsFormBuilder.ts","./src/app/components/planting-settings/plantingValidationNotifier.ts","./src/app/components/planting-settings/sections/crop-settings.html","./src/app/components/planting-settings/sections/crop-settings.ts","./src/app/components/planting-settings/sections/drip-application-rate-tree.html","./src/app/components/planting-settings/sections/drip-application-rate-tree.ts","./src/app/components/planting-settings/sections/drip-application-rate.html","./src/app/components/planting-settings/sections/drip-application-rate.ts","./src/app/components/planting-settings/sections/irrigation-deficit/irrigation-deficit.html","./src/app/components/planting-settings/sections/irrigation-deficit/irrigation-deficit.ts","./src/app/components/planting-settings/sections/irrigation-methods.html","./src/app/components/planting-settings/sections/irrigation-methods.ts","./src/app/components/planting-settings/sections/macro-tunnel-form.ts","./src/app/components/planting-settings/sections/macro-tunnel.html","./src/app/components/planting-settings/sections/macro-tunnel.ts","./src/app/components/planting-settings/sections/max-uptake-calculator/max-uptake-calculator.html","./src/app/components/planting-settings/sections/max-uptake-calculator/max-uptake-calculator.ts","./src/app/components/planting-settings/sections/nitrogen-calculator/compost.html","./src/app/components/planting-settings/sections/nitrogen-calculator/compost.ts","./src/app/components/planting-settings/sections/nitrogen-calculator/cover-crop.html","./src/app/components/planting-settings/sections/nitrogen-calculator/cover-crop.ts","./src/app/components/planting-settings/sections/nitrogen-calculator/manure.html","./src/app/components/planting-settings/sections/nitrogen-calculator/manure.ts","./src/app/components/planting-settings/sections/nitrogen-calculator/n-calculator-simple.html","./src/app/components/planting-settings/sections/nitrogen-calculator/n-calculator-simple.ts","./src/app/components/planting-settings/sections/nitrogen-calculator/n-calculator.html","./src/app/components/planting-settings/sections/nitrogen-calculator/n-calculator.ts","./src/app/components/planting-settings/sections/planting-wells.html","./src/app/components/planting-settings/sections/planting-wells.ts","./src/app/components/planting-settings/sections/plantingWellsDataFetcher.ts","./src/app/components/planting-settings/sections/plantingWellsFormBuilder.ts","./src/app/components/planting-settings/sections/sprinkler-calculator/sprinkler-application-rate.html","./src/app/components/planting-settings/sections/sprinkler-calculator/sprinkler-application-rate.ts","./src/app/components/planting-settings/tonsConverter.ts","./src/app/components/plantings/events-snapshot/cut-row.html","./src/app/components/plantings/events-snapshot/cut-row.ts","./src/app/components/plantings/events-snapshot/fertilization-row.html","./src/app/components/plantings/events-snapshot/fertilization-row.ts","./src/app/components/plantings/events-snapshot/irrigation-row.html","./src/app/components/plantings/events-snapshot/irrigation-row.ts","./src/app/components/plantings/events-snapshot/main.html","./src/app/components/plantings/events-snapshot/main.ts","./src/app/components/plantings/events-snapshot/row-base.ts","./src/app/components/plantings/events-snapshot/row.html","./src/app/components/plantings/events-snapshot/row.ts","./src/app/components/plantings/events-snapshot/soil-sample-row.html","./src/app/components/plantings/events-snapshot/soil-sample-row.ts","./src/app/components/plantings/events-snapshot/tissue-sample-row.html","./src/app/components/plantings/events-snapshot/tissue-sample-row.ts","./src/app/components/plantings/main.html","./src/app/components/plantings/main.ts","./src/app/components/plantings/search/main.html","./src/app/components/plantings/search/main.ts","./src/app/components/plantings/slide-in-panel/slide-in-panel.html","./src/app/components/plantings/slide-in-panel/slide-in-panel.ts","./src/app/components/plantings/tab/main.ts.RanchTabComponent.html","./src/app/components/plantings/tab/main.ts","./src/app/components/plantings/top-nav/main.html","./src/app/components/plantings/top-nav/main.ts","./src/app/components/rainfall-chart/main.html","./src/app/components/rainfall-chart/main.ts","./src/app/components/ranch-export-modal/ranch-export-modal.component.html","./src/app/components/ranch-export-modal/ranch-export-modal.component.ts","./src/app/components/ranch-settings/main.html","./src/app/components/ranch-settings/main.ts","./src/app/components/ranch-settings/modals/lot/main.html","./src/app/components/ranch-settings/modals/lot/main.ts","./src/app/components/ranch-settings/modals/member/main.html","./src/app/components/ranch-settings/modals/member/main.ts","./src/app/components/ranch-settings/modals/well/main.html","./src/app/components/ranch-settings/modals/well/main.ts","./src/app/components/ranch-settings/nav/main.html","./src/app/components/ranch-settings/nav/main.ts","./src/app/components/ranch-settings/ranch-permissions.ts","./src/app/components/shared/abstract-modal/main.ts","./src/app/components/shared/modal-loader/main.html","./src/app/components/shared/modal-loader/main.ts","./src/app/components/shared/user-icon/main.html","./src/app/components/shared/user-icon/main.ts","./src/app/components/soil-properties-table/customSoilPropertiesFormBuilder.ts","./src/app/components/soil-properties-table/soil-properties-table.component.html","./src/app/components/soil-properties-table/soil-properties-table.component.ts","./src/app/directives/greaterThanNumber.ts","./src/app/models/soil-type/interfaces.ts","./src/app/modules/ranch-home.module.ts","./src/app/modules/ranch-home.routing.ts","./src/app/pipes/order-by.pipe.ts"],"names":[],"mappings":"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","file":"modules-ranch-home-module-ngfactory.fa635b2c1b87573b15b3.js","sourcesContent":["\"use strict\";\nvar dragula_class_1 = require(\"./components/dragula.class\");\nexports.dragula = dragula_class_1.dragula;\nvar dragula_directive_1 = require(\"./components/dragula.directive\");\nexports.DragulaDirective = dragula_directive_1.DragulaDirective;\nvar dragula_provider_1 = require(\"./components/dragula.provider\");\nexports.DragulaService = dragula_provider_1.DragulaService;\nvar dragular_module_1 = require(\"./components/dragular.module\");\nexports.DragulaModule = dragular_module_1.DragulaModule;\n","export class ArgumentNullError extends Error {\r\n\tconstructor(message: string) {\r\n\t\tsuper(message);\r\n\t\tthis.name = 'ArgumentNullError';\r\n\t}\r\n}\r\n","import { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { CutEventComponent } from '../components/cut-event/cut-event.component';\r\nimport { FertilizationEventDialog } from '../components/fertilization-event/main';\r\nimport { IRanchPermissions } from '../components/ranch-settings/interfaces';\r\nimport { RanchService } from '../components/ranch-settings/service';\r\nimport { SoilSampleEventDialog } from '../components/soil-sample-event/main';\r\nimport { TissueSampleEventComponent } from '../components/tissue-sample-event/tissue-sample-event.component';\r\nimport { EventsType } from '../interfaces/constants';\r\nimport { IrrigationEventComponent } from '../components/irrigation-event/main';\r\n\r\nexport interface EventDialogParameters {\r\n\tid?: number,\r\n\tplantingId: number,\r\n\tcommodityTypeId: number,\r\n\twetDate: Date,\r\n\tharvestDate: Date,\r\n\tdateDefault?: Date,\r\n}\r\n\r\nexport class EventDialogUtility {\r\n\r\n\tprivate _plantingId: number;\r\n\tprivate _commodityTypeId: number;\r\n\tprivate _permissions: IRanchPermissions;\r\n\tprivate _dialog: MatDialog;\r\n\tprivate _ranchService: RanchService;\r\n\r\n\tpublic constructor(plantingId: number, commodityTypeId: number, permissions: IRanchPermissions,\r\n\t\tdialog: MatDialog, ranchService: RanchService) {\r\n\r\n\t\tthis._plantingId = plantingId;\r\n\t\tthis._commodityTypeId = commodityTypeId;\r\n\t\tthis._permissions = permissions;\r\n\t\tthis._dialog = dialog;\r\n\t\tthis._ranchService = ranchService;\r\n\t}\r\n\r\n\t/**\r\n\t * Opens an event dialog\r\n\t *\r\n\t * @param type event type\r\n\t * @param eventId event ID\r\n\t */\r\n\tpublic open(type: EventsType, eventId: number, dateDefault?: Date) {\r\n\r\n\t\tlet dialogConfig: MatDialogConfig;\r\n\t\tlet params: EventDialogParameters;\r\n\r\n\t\tparams = {\r\n\t\t\tplantingId: this._plantingId,\r\n\t\t\tcommodityTypeId: this._commodityTypeId,\r\n\t\t\tid: eventId,\r\n\t\t\twetDate: this._ranchService.getGerminationDate(this._plantingId),\r\n\t\t\tharvestDate: this._ranchService.getHarvestDate(this._plantingId),\r\n\t\t\tdateDefault: dateDefault\r\n\t\t}\r\n\r\n\t\tdialogConfig = {\r\n\t\t\twidth: '530px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: params\r\n\t\t};\r\n\r\n\t\tif (!this._permissions) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase EventsType.WATER:\r\n\t\t\t\tif (this._permissions.UserCanEditIrrigationEvent) {\r\n\t\t\t\t\tthis._dialog.open(IrrigationEventComponent, dialogConfig);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.FERTILIZER:\r\n\t\t\t\tif (this._permissions.UserCanEditFertilizationEvent) {\r\n\t\t\t\t\tthis._dialog.open(FertilizationEventDialog, dialogConfig);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.SOILSAMPLES:\r\n\t\t\t\tif (this._permissions.UserCanEditSoilSampleEvent) {\r\n\t\t\t\t\tthis._dialog.open(SoilSampleEventDialog, dialogConfig);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.CUTTING:\r\n\t\t\t\tif (this._permissions.UserCanEditPlanting) {\r\n\t\t\t\t\tdialogConfig.width = '500px';\r\n\t\t\t\t\tthis._dialog.open(CutEventComponent, dialogConfig);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.TISSUE_SAMPLE:\r\n\t\t\t\tif (this._permissions.UserCanEditPlanting) {\r\n\t\t\t\t\tthis._dialog.open(TissueSampleEventComponent, dialogConfig);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic setPermissions(permissions: IRanchPermissions) {\r\n\t\tthis._permissions = permissions;\r\n\t}\r\n}\r\n","export class JQueryHelper {\r\n\tpublic static getElementClassFromEvent(event: Event): string {\r\n\t\tlet target: Element;\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\ttarget = event.target as Element;\r\n\r\n\t\tif (!target) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn target.className;\r\n\t}\r\n}\r\n","import * as jQuery from 'jquery';\r\n\r\nexport class Modal {\r\n\r\n\tpublic static resize() {\r\n\t\tlet modalBodyHeight: number;\r\n\r\n\t\tif (jQuery('.bk-modal__scroll-area:visible').hasClass('bk-modal__events-container')) {\r\n\t\t\tmodalBodyHeight = jQuery(window).height() - 400;\r\n\t\t} else {\r\n\t\t\tmodalBodyHeight = jQuery(window).height() - 200;\r\n\t\t}\r\n\t\tif (modalBodyHeight > 0) {\r\n\t\t\tif (jQuery('.bk-modal__scroll-area:visible').hasClass('bk-modal__events-container')) {\r\n\t\t\t\tjQuery('.bk-modal__scroll-area').css('height', modalBodyHeight).css('max-height', '');\r\n\t\t\t} else {\r\n\t\t\t\t// jQuery(\".bk-modal__scroll-area\").css(\"max-height\", modalBodyHeight).css(\"height\", \"\");\r\n\t\t\t\t// removed this - controlling height and max height using calc() in CSS - the code is not\r\n\t\t\t\t// reliable in mobile\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static eventsResize() {\r\n\t\tlet heights: {\r\n\t\t\teventsHeader: number,\r\n\t\t\teventsFooter: number,\r\n\t\t\tmodalBody: number\r\n\t\t} = {\r\n\t\t\teventsHeader: null,\r\n\t\t\teventsFooter: null,\r\n\t\t\tmodalBody: null\r\n\t\t};\r\n\r\n\t\tif (jQuery('.bk-modal__scroll-area:visible').hasClass('bk-modal__events-container')) {\r\n\t\t\theights.eventsHeader = jQuery('.bk-modal__events-header--container').outerHeight();\r\n\t\t\theights.eventsFooter = jQuery('.bk-modal__events-footer--container').outerHeight();\r\n\r\n\t\t\tif (jQuery('.bk-modal__events-footer--container').is(':visible')) {\r\n\t\t\t\theights.modalBody = jQuery('.bk-modal_events-content').height() - (heights.eventsHeader + heights.eventsFooter);\r\n\t\t\t} else {\r\n\t\t\t\theights.modalBody = jQuery('.bk-modal_events-content').height() - heights.eventsHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (heights.modalBody && heights.modalBody > 0) {\r\n\t\t\tif (jQuery('.bk-modal__events-body--container').height() === heights.modalBody) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tjQuery('.bk-modal__events-body--container').css('height', heights.modalBody).css('max-height', '');\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static resetVerticalPosition() {\r\n\t\tjQuery('.bk-modal__scroll-area').scrollTop(0);\r\n\t}\r\n}\r\n","<div class=\"bk-calendar__event\"\r\n\t[ngClass]=\"task.isValid ? 'bk-calendar__background--' + task.eventType :\r\n\t'bk-calendar__event--invalid'\"\r\n\t[popper]=\"eventDetails\"\r\n\t[popperTrigger]=\"'hover'\"\r\n\t[popperTimeoutAfterShow]=\"5000\"\r\n\t[popperApplyClass]=\"'bk-popper'\"\r\n\t[popperDisabled]=\"isPopperDisabled\"\r\n\t[popperPlacement]=\"'bottom'\"\r\n\tdata-id=\"{{task.id}}\"\r\n\t(click)=\"openEventDialog(task.eventType, task.id)\">\r\n\t<ap-event-type-icon [eventType]=\"task.eventType\"></ap-event-type-icon>\r\n\t{{ task.prefix }}<br *ngIf=\"task.eventType === EVENT_TYPES.FERTILIZER\r\n\t\t|| task.eventType === EVENT_TYPES.SOILSAMPLES\"/>\r\n\t<ng-container *ngIf=\"!task.isNA\">\r\n\t\t{{ task.amount | number: '1.0-1' }}\r\n\t\t{{ task.unit }}\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"task.isNA\">\r\n\t\tN/A\r\n\t</ng-container>\r\n</div>\r\n<popper-content #eventDetails>\r\n\t<ap-event-hover [task]=\"task\"></ap-event-hover>\r\n</popper-content>","import { Component, OnInit, Input } from '@angular/core';\r\nimport { EventsType } from '../../interfaces/constants';\r\nimport { Task } from './interfaces';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { IRanchPermissions } from '../ranch-settings/interfaces';\r\nimport { RanchPermissions } from '../ranch-settings/ranch-permissions';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { EventDialogUtility } from '../../classes/eventDialogUtility';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ap-calendar-event',\r\n\ttemplateUrl: 'calendar-event.html',\r\n\tstyleUrls: [ 'calendar-event.scss' ]\r\n})\r\n\r\nexport class CalendarEventComponent implements OnInit {\r\n\r\n\t@Input()\r\n\tpublic commodityTypeId: number;\r\n\r\n\tpublic EVENT_TYPES = EventsType;\r\n\tpublic eventDialogUtility: EventDialogUtility;\r\n\tpublic isEditable: boolean;\r\n\r\n\t@Input()\r\n\tpublic isPopperDisabled: boolean;\r\n\r\n\t@Input()\r\n\tpublic permissions: IRanchPermissions;\r\n\r\n\t@Input()\r\n\tpublic plantingId: number;\r\n\r\n\t@Input()\r\n\tpublic task: Task;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _ranchService: RanchService\r\n\t) {\r\n\r\n\t}\r\n\r\n\tpublic ngOnInit(): void {\r\n\t\tif (this.task) {\r\n\t\t\tthis.isEditable = RanchPermissions.isEditable(this.permissions, this.task.eventType);\r\n\t\t} else {\r\n\t\t\tthis.isEditable = false;\r\n\t\t}\r\n\r\n\t\tthis.eventDialogUtility = new EventDialogUtility(this.plantingId,\r\n\t\t\tthis.commodityTypeId, this.permissions, this._dialog,\r\n\t\t\tthis._ranchService);\r\n\t}\r\n\r\n\t/**\r\n\t * Method used to edit events.\r\n\t * @param eventType\r\n\t * @param id\r\n\t */\r\n\tpublic openEventDialog(eventType: EventsType, id?: number): void {\r\n\r\n\t\tif (!this.isEditable) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.eventDialogUtility.open(eventType, id);\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\t\r\n\t<div mat-dialog-title>\r\n\t\t<h4 class=\"bk-dialog__title\">\r\n\t\t\t{{ planting.name }}\t<span class=\"bk-dialog__subTitle\">\r\n\t\t\t\t{{planting.dates.start | convertDotNetDate}} - {{planting.dates.end | convertDotNetDate}}\r\n\t\t\t</span>\r\n\t\t</h4>\r\n\t</div>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<div *ngIf=\"isSaving\"\r\n\t\t\tclass=\"bk-calendar__spinner\">\r\n\t\t\t<mat-spinner></mat-spinner>\r\n\t\t</div>\r\n\t\t<div class=\"bk-calendar__ui\">\r\n\t\t\t<button mat-icon-button aria-label=\"Go to previous\"\r\n\t\t\t\tmatTooltip=\"previous {{ calendarType === calendarTypes.WEEK ? 'week' : 'month'}}\"\r\n\t\t\t\t[disabled]=\"!events || !targetDate\"\r\n\t\t\t\t(click)=\"jumpToPrevious()\">\r\n\t\t\t\t<mat-icon>keyboard_arrow_left</mat-icon>\r\n\t\t\t</button>\r\n\r\n\t\t\t<button mat-icon-button\r\n\t\t\t\t[disabled]=\"!events\"\r\n\t\t\t\t(click)=\"jumpToToday()\"\r\n\t\t\t\tmatTooltip=\"Jump to Today\"\r\n\t\t\t\taria-label=\"Example icon button with a vertical three dot icon\">\r\n\t\t\t\t<mat-icon>today</mat-icon>\r\n\t\t\t</button>\r\n\r\n\t\t\t<button mat-icon-button aria-label=\"Go to previous\"\r\n\t\t\t\tmatTooltip=\"next {{ calendarType === calendarTypes.WEEK ? 'week' : 'month'}}\"\r\n\t\t\t\t[disabled]=\"!events || !targetDate\"\r\n\t\t\t\t(click)=\"jumpToNext()\">\r\n\t\t\t\t<mat-icon>keyboard_arrow_right</mat-icon>\r\n\t\t\t</button>\r\n\r\n\t\t\t<span class=\"bk-calendar__title\">\r\n\t\t\t\t<ng-container *ngIf=\"calendarType === calendarTypes.WEEK\">\r\n\t\t\t\t\t{{ monthYear }}\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t<ng-container *ngIf=\"calendarType === calendarTypes.MONTH\">\r\n\t\t\t\t\t{{ targetDate | date:'MMMM'}} {{ targetDate | date:'yyyy'}}\r\n\t\t\t\t</ng-container>\r\n\t\t\t</span>\r\n\r\n\t\t\t<select (ngModelChange)=\"updateCalendartype($event)\"\r\n\t\t\t\t[(ngModel)]=\"calendarType\"\r\n\t\t\t\tname=\"calendarType\"\r\n\t\t\t\tclass=\"bk-calendar__dropdown bk-modal__field bk-select--medium\">\r\n\t\t\t\t<option [ngValue]=\"1\">Week</option>\r\n\t\t\t\t<option [ngValue]=\"2\">Month</option>\r\n\t\t\t</select>\r\n\t\t</div>\r\n\t\t<!-- Week View -->\r\n\t\t<div class=\"bk-calendar\"\r\n\t\t\t*ngIf=\"calendarType === calendarTypes.WEEK && week\">\r\n\t\t\t<div class=\"bk-calendar__row\">\r\n\t\t\t\t<div *ngFor=\"let day of week; let i = index;\"\r\n\t\t\t\t\t(mouseenter)=\"day.mouseover = true\"\r\n\t\t\t\t\t(mouseleave)=\"day.mouseover = false;\"\r\n\t\t\t\t\t[ngClass]=\"{'bk-calendar__last_col' : i === 6}\"\r\n\t\t\t\t\tclass=\"bk-calendar__col bk-calendar__last_row\">\r\n\r\n\t\t\t\t\t<div class=\"bk-calendar__header\">\r\n\t\t\t\t\t\t<button mat-icon-button color=\"accent\"\r\n\t\t\t\t\t\t\tmatTooltip=\"create an event\"\r\n\t\t\t\t\t\t\t*ngIf=\"day.mouseover\"\r\n\t\t\t\t\t\t\t(click)=\"createEvent(day)\"\r\n\t\t\t\t\t\t\tclass=\"bk-calendar__create-button_simple\"\r\n\t\t\t\t\t\t\taria-label=\"Example icon-button with a heart icon\">\r\n\t\t\t\t\t\t\t<mat-icon class=\"bk-calendar__primary\">add_box</mat-icon>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t<mat-icon class=\"bk-calendar__milestone\" \r\n\t\t\t\t\t\t\t*ngIf=\"day.isPlantingStart\"\r\n\t\t\t\t\t\t\tmatTooltip=\"Planting Start Date\">\r\n\t\t\t\t\t\t\temoji_flags\r\n\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t\t<mat-icon class=\"bk-calendar__milestone\" \r\n\t\t\t\t\t\t\t*ngIf=\"day.isPlantingEnd\"\r\n\t\t\t\t\t\t\tmatTooltip=\"Planting End Date\">\r\n\t\t\t\t\t\t\temoji_flags\r\n\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t<div class=\"bk-calendar__day\">{{ day.date | date: 'E'}}</div>\r\n\t\t\t\t\t\t<span [ngClass]=\"{'bk-calendar__header--today' : day.isToday }\">\r\n\t\t\t\t\t\t\t<div class=\"bk-calendar__date\">{{ day.date | date: 'd' }}</div>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"bk-calendar__body\"\r\n\t\t\t\t\t\tdragula=\"DRAG_TEST_WEEK\"\r\n\t\t\t\t\t\tdata-id=\"{{day.date}}\"\r\n\t\t\t\t\t\t[(dragulaModel)]=\"day.tasks\">\r\n\t\t\t\t\t\t<ng-container *ngFor=\"let task of day.tasks\">\r\n\t\t\t\t\t\t\t<ap-calendar-event [task]=\"task\"\r\n\t\t\t\t\t\t\t\t[isPopperDisabled]=\"isPopperDisabled\"\r\n\t\t\t\t\t\t\t\t[plantingId]=\"planting.id\"\r\n\t\t\t\t\t\t\t\t[permissions]=\"permissions\"\r\n\t\t\t\t\t\t\t\t[commodityTypeId]=\"commodityTypeId\">\r\n\t\t\t\t\t\t\t</ap-calendar-event>\r\n\t\t\t\t\t\t</ng-container>\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\r\n\t\t<!-- month view -->\r\n\r\n\t\t<div class=\"bk-calendar\"\r\n\t\t\t*ngIf=\"calendarType === calendarTypes.MONTH && month\">\r\n\t\t\t<div *ngFor=\"let week of month; let w = index;\"\r\n\t\t\t\tclass=\"bk-calendar__row\">\r\n\t\t\t\t<div *ngFor=\"let day of week; let d = index;\"\r\n\t\t\t\t\t(mouseenter)=\"day.mouseover = true\"\r\n\t\t\t\t\t(mouseleave)=\"day.mouseover = false;\"\r\n\t\t\t\t\tclass=\"bk-calendar__col\"\r\n\t\t\t\t\t[ngClass]=\"{'bk-calendar__last_row' : w === month.length - 1,\r\n\t\t\t\t\t\t'bk-calendar__last_col' : d === 6}\">\r\n\r\n\t\t\t\t\t<div class=\"bk-calendar__header bk-calendar__header--tight\">\r\n\t\t\t\t\t\t<button mat-icon-button color=\"accent\"\r\n\t\t\t\t\t\t\tmatTooltip=\"create an event\"\r\n\t\t\t\t\t\t\t*ngIf=\"day.mouseover\"\r\n\t\t\t\t\t\t\t(click)=\"createEvent(day)\"\r\n\t\t\t\t\t\t\tclass=\"bk-calendar__create-button_simple\"\r\n\t\t\t\t\t\t\taria-label=\"Example icon-button with a heart icon\">\r\n\t\t\t\t\t\t\t<mat-icon class=\"bk-calendar__primary\">add_box</mat-icon>\r\n\t\t\t\t\t\t</button>\r\n\r\n\t\t\t\t\t\t<mat-icon class=\"bk-calendar__milestone\" \r\n\t\t\t\t\t\t\t*ngIf=\"day.isPlantingStart\"\r\n\t\t\t\t\t\t\tmatTooltip=\"Planting Start Date\">\r\n\t\t\t\t\t\t\tflag\r\n\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t\t<mat-icon class=\"bk-calendar__milestone\" \r\n\t\t\t\t\t\t\t*ngIf=\"day.isPlantingEnd\"\r\n\t\t\t\t\t\t\tmatTooltip=\"Planting End Date\">\r\n\t\t\t\t\t\t\tflag\r\n\t\t\t\t\t\t</mat-icon>\r\n\r\n\t\t\t\t\t\t<div *ngIf=\"w === 0\"\r\n\t\t\t\t\t\t\t[ngClass]=\"{'bk-calendar__date--de-emphasized' : !day.isTargetMonth }\"\r\n\t\t\t\t\t\t\tclass=\"bk-calendar__day\">\r\n\t\t\t\t\t\t\t{{ day.date | date: 'E'}}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"bk-calendar__date bk-calendar__date--small\">\r\n\t\t\t\t\t\t\t<span [ngClass]=\"{'bk-calendar__header--today' : day.isToday,\r\n\t\t\t\t\t\t\t\t'bk-calendar__date--de-emphasized' : !day.isTargetMonth }\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"day.date.getDate() === 1\">\r\n\t\t\t\t\t\t\t\t\t{{ day.date | date: 'MMM d' }}\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"day.date.getDate() !== 1\">\r\n\t\t\t\t\t\t\t\t\t{{ day.date | date: 'd' }}\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"bk-calendar__body\"\r\n\t\t\t\t\t\tdragula=\"DRAG_TEST_MONTH\"\r\n\t\t\t\t\t\tdata-id=\"{{day.date}}\"\r\n\t\t\t\t\t\t[(dragulaModel)]=\"day.tasks\">\r\n\t\t\t\t\t\t<ng-container *ngFor=\"let task of day.tasks\">\r\n\t\t\t\t\t\t\t<ap-calendar-event [task]=\"task\"\r\n\t\t\t\t\t\t\t\t[isPopperDisabled]=\"isPopperDisabled\"\r\n\t\t\t\t\t\t\t\t[plantingId]=\"planting.id\"\r\n\t\t\t\t\t\t\t\t[permissions]=\"permissions\"\r\n\t\t\t\t\t\t\t\t[commodityTypeId]=\"commodityTypeId\">\r\n\t\t\t\t\t\t\t</ap-calendar-event>\r\n\t\t\t\t\t\t</ng-container>\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</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, ChangeDetectorRef } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogConfig, MatDialog } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { PlantingService } from '../planting-settings/service';\r\nimport * as moment from 'moment';\r\nimport { CalendarDate, CalendarEventDialogData, Task } from './interfaces';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { IMaturity } from '../../models/maturity/interfaces';\r\nimport { CutEventService } from '../cut-event/service';\r\nimport { EventsType, eIrrigationMethods, eNotificationTypes } from '../../interfaces/constants';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { EventMenuDialogComponent } from './event-menu-dialog';\r\nimport { DragulaService } from 'ng2-dragula';\r\nimport { CutEvent } from '../cut-event/cutEvent';\r\nimport { FertilizationEvent } from '../fertilization-event/fertilizationEvent';\r\nimport { EventUtility } from '../../models/event/eventUtility';\r\nimport { IrrigationEvent } from '../irrigation-event/irrigationEvent';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { SoilSampleEvent } from '../soil-sample-event/soilSampleEvent';\r\nimport { IrrigationService } from '../irrigation-event/service';\r\nimport { IIrrigationEventEditResponse } from '../irrigation-event/interfaces';\r\nimport { DatePipe } from '@angular/common';\r\nimport { TissueSampleEvent } from '../tissue-sample-event/tissueSampleEvent';\r\nimport { FertilizationEventService } from '../fertilization-event/service';\r\nimport { SoilSampleEventService } from '../soil-sample-event/service';\r\nimport { TissueSampleEventService } from '../tissue-sample-event/service';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { EventResponse } from '../../models/event/eventResponse';\r\nimport { IRanchPermissions } from '../ranch-settings/interfaces';\r\nimport { TranslateService } from '../localization/service';\r\n\r\nexport enum calendarTypes {\r\n\tWEEK = 1,\r\n\tMONTH\r\n};\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ap-calendar',\r\n\ttemplateUrl: 'calendar.html',\r\n\tstyleUrls: [ 'calendar.scss' ]\r\n})\r\n\r\nexport class CalendarComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic calendarType = 2;\r\n\tpublic calendarTypes = calendarTypes;\r\n\tpublic commodityTypeId: number;\r\n\tpublic EVENT_TYPES = EventsType;\r\n\tpublic events: Task[] = [];\r\n\tpublic isPopperDisabled = false; // turn ngx-poppers on and off during drag\r\n\tpublic isSaving = false; // temporarily turns true while saving to server\r\n\tpublic month: CalendarDate[][];\r\n\tpublic monthYear: string; // monthYear string\r\n\tpublic permissions: IRanchPermissions; // these are used in the template for editing events\r\n\r\n\tpublic planting: {\r\n\t\tid: number,\r\n\t\tname: string;\r\n\t\tdates: {\r\n\t\t\tstart: Date,\r\n\t\t\tend: Date\r\n\t\t}\r\n\t};\r\n\r\n\tpublic targetDate: Date; // front end date, used for change detection\r\n\tpublic today: Date;\r\n\tpublic week: CalendarDate[];\r\n\r\n\tprivate _maturities: IMaturity[];\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tprivate _targetDate: moment.Moment;\r\n\r\n\tconstructor(\r\n\t\tprivate _cutEventService: CutEventService,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: CalendarEventDialogData,\r\n\t\tprivate _datePipe: DatePipe,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<CalendarComponent>,\r\n\t\tprivate _dragulaService: DragulaService,\r\n\t\tprivate _fertilizationService: FertilizationEventService,\r\n\t\tprivate _irrigationService: IrrigationService,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _plantingService: PlantingService,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _soilSampleService: SoilSampleEventService,\r\n\t\tprivate _tissueSampleService: TissueSampleEventService,\r\n\t\tprivate _translateService: TranslateService,\r\n\t\tprivate _updateService: UpdateService\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\tthis.today = new Date();\r\n\t\tthis.permissions = this._updateService.currentPermissions;\r\n\r\n\t\tif (!this._data) {\r\n\t\t\treturn;\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\tdates: {\r\n\t\t\t\tstart: this._data.startDate,\r\n\t\t\t\tend: this._data.endDate\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.commodityTypeId = this._data.commodityTypeId;\r\n\t\tthis._configureDragAndDrop();\r\n\r\n\t\tthis._updateService.PlantingsUpdated$.\r\n\t\t\tpipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\r\n\t\t\tthis._getEvents(this.planting.id, this.commodityTypeId).then(() => {\r\n\t\t\t\tthis.week = this._getWeeks(this._targetDate);\r\n\t\t\t\tthis.monthYear = this._getDateRangeText(this._targetDate);\r\n\t\t\t\tthis.month = this._getMonths(this._targetDate);\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis._updateService.RanchPlantingsPermissions$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(data => {\r\n\r\n\t\t\tthis.permissions = data;\r\n\t\t});\r\n\r\n\t\tthis._cutEventService.listMaturities()\r\n\t\t.then(response => {\r\n\t\t\tthis._maturities = response;\r\n\r\n\t\t\tthis._getEvents(this.planting.id, this.commodityTypeId).then(() => {\r\n\t\t\t\tthis._targetDate = moment();\r\n\t\t\t\tthis._updateTargetDate();\r\n\t\t\t\tthis.week = this._getWeeks(this._targetDate);\r\n\t\t\t\tthis.monthYear = this._getDateRangeText(this._targetDate);\r\n\t\t\t\tthis.month = this._getMonths(this._targetDate);\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 createEvent(day: CalendarDate): void {\r\n\t\tlet data: CalendarEventDialogData;\r\n\r\n\t\tdata = {\r\n\t\t\tlotPlantingId: this.planting.id,\r\n\t\t\tcommodityTypeId: this.commodityTypeId,\r\n\t\t\tdefaultDate: day.date,\r\n\t\t\ttasks: day.tasks,\r\n\t\t\tpermissions: this.permissions\r\n\t\t};\r\n\r\n\t\tthis._dialog.open(EventMenuDialogComponent, {\r\n\t\t\twidth: '500px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: data\r\n\t\t});\r\n\t}\r\n\r\n\tpublic jumpToToday(): void {\r\n\t\tthis._targetDate = moment();\r\n\t\tthis._redraw();\r\n\t}\r\n\r\n\tpublic jumpToNext(): void {\r\n\r\n\t\tif (!this._targetDate) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tswitch (this.calendarType) {\r\n\t\t\tcase calendarTypes.WEEK:\r\n\t\t\t\tthis._targetDate.add(7, 'days');\r\n\t\t\t\tbreak;\r\n\t\t\tcase calendarTypes.MONTH:\r\n\t\t\t\tthis._targetDate.add(1, 'months').startOf('month');\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tthis._redraw();\r\n\t}\r\n\r\n\tpublic jumpToPrevious(): void {\r\n\r\n\t\tif (!this._targetDate) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tswitch (this.calendarType) {\r\n\t\t\tcase calendarTypes.WEEK:\r\n\t\t\t\tthis._targetDate.subtract(7, 'days');\r\n\t\t\t\tbreak;\r\n\t\t\tcase calendarTypes.MONTH:\r\n\t\t\t\tthis._targetDate.subtract(1, 'months').startOf('month');\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tthis._redraw();\r\n\t}\r\n\r\n\tpublic updateCalendartype(type: number): void {\r\n\t\tthis.calendarType = Number(type);\r\n\t\t// if monthly view, draw the entire month\r\n\t\tswitch (type) {\r\n\t\t\tcase calendarTypes.WEEK:\r\n\t\t\t\tbreak;\r\n\t\t\tcase calendarTypes.MONTH:\r\n\t\t\t\t// 1. find the first month/date of the first week of the month\r\n\t\t\t\t// 2. find the last month/date of the last week of the month\r\n\t\t\t\t// 3. loop through all dates until calendar is filled.\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Custom click outside behavior so we can intercept if needed\r\n\t * @param s\r\n\t * @param d\r\n\t */\r\n\tprivate _configureClickOutside(s: Subject<boolean>, d: MatDialogRef<CalendarComponent>): void {\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\t/**\r\n\t * Drag and drop configuration\r\n\t */\r\n\tprivate _configureDragAndDrop(): void {\r\n\t\tthis._dragulaService.drag.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.isPopperDisabled = true;\r\n\t\t});\r\n\r\n\t\tthis._dragulaService.dragend.pipe(takeUntil(this._subscriptions$)).subscribe((x: [string,\r\n\t\t\tHTMLElement, HTMLElement, HTMLElement]) => {\r\n\r\n\t\t\t// check if we dragged item into the wrong date, where another event already exists\r\n\t\t});\r\n\r\n\t\tthis._dragulaService.dropModel.pipe(takeUntil(this._subscriptions$)).subscribe((x: [string,\r\n\t\t\tHTMLElement, HTMLElement, HTMLElement]) => {\r\n\t\t\t// dragula ID DRAG_TEST_MONTH\r\n\t\t\t// calendar event DOM\r\n\t\t\t// target calendar slot (contains date)\r\n\t\t\t// source calendar slot (contains date)\r\n\r\n\t\t\tlet eventId: number;\r\n\t\t\tlet date: Date;\r\n\r\n\t\t\tthis.isPopperDisabled = false;\r\n\r\n\t\t\tif (!x) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\teventId = Number(this._getElementAttribute((x[1] as HTMLElement).children[0], 'id'));\r\n\t\t\tdate = new Date(this._getElementAttribute(x[2], 'id')); // attribute says id but stores date.\r\n\t\t\t\t// this is in the parent wrapper div class=\"bk-calendar__body\"\r\n\r\n\t\t\tif (this._isDragValid(eventId, date)) {\r\n\t\t\t\tif (eventId && date) {\r\n\t\t\t\t\tthis._updateEventDate(eventId, date);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tthis._getEventsAndRedraw();\r\n\r\n\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\tmessage: `More than one event of this type can't be scheduled on the same date.`\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _findCalDateInMonth(date: Date): CalendarDate {\r\n\t\treturn this.month[DateUtility.getWeekOfMonth(date, this.month[0][0].date)].find(x => moment(x.date).isSame(date, 'date'));\r\n\t}\r\n\r\n\t/**\r\n\t * Determines \"month / year\" text shown in the calendar\r\n\t * @param targetDate\r\n\t */\r\n\tprivate _getDateRangeText(targetDate: moment.Moment): string {\r\n\t\tlet startDate: moment.Moment;\r\n\t\tlet endDate: moment.Moment;\r\n\t\tlet result: string;\r\n\r\n\t\tstartDate = moment(targetDate);\r\n\t\tendDate = moment(targetDate);\r\n\r\n\t\tif (endDate.isoWeekday() < 6) {\r\n\t\t\t// set end date to saturday of the same week\r\n\t\t\tendDate.add(6 - endDate.isoWeekday(), 'days');\r\n\t\t}\r\n\r\n\t\tif (startDate.isoWeekday() < 7) { // set start date to sunday\r\n\t\t\tstartDate.subtract(startDate.isoWeekday(), 'days');\r\n\t\t}\r\n\r\n\t\tresult = this._datePipe.transform(endDate, 'MMMM') + ' ' +\r\n\t\t\tthis._datePipe.transform(endDate, 'yyyy');\r\n\r\n\t\tif (startDate.month() !== endDate.month()) {\r\n\t\t\tif (startDate.year() !== endDate.year()) {\r\n\t\t\t\treturn this._datePipe.transform(startDate, 'MMMM') + ' ' +\r\n\t\t\t\t\tthis._datePipe.transform(startDate, 'yyyy') + ' - ' + result;\r\n\t\t\t} else {\r\n\t\t\t\treturn this._datePipe.transform(startDate, 'MMMM') + ' - ' + result;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getElementAttribute(el: Element, key: string): string {\r\n\t\tlet attribute: Attr;\r\n\r\n\t\tif (!el.attributes) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tattribute = el.attributes.getNamedItem(key);\r\n\r\n\t\tif (attribute) {\r\n\t\t\treturn attribute.value;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getEvents(plantingId: number, commodityTypeId: number): Promise<void> {\r\n\t\treturn this._plantingService.getAllEvents(plantingId)\r\n\t\t.then(res => {\r\n\t\t\tres = EventGroup.createMetadata(res, commodityTypeId,\r\n\t\t\t\tthis._maturities);\r\n\r\n\t\t\tres = EventGroup.sortEvents(res);\r\n\t\t\tthis.events = this._restructureEvents(res);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getEventsAndRedraw(): Promise<void> {\r\n\t\treturn this._getEvents(this.planting.id, this.commodityTypeId).then(() => {\r\n\t\t\tthis._redraw();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getMonths(targetDate: moment.Moment): CalendarDate[][] {\r\n\t\tlet startDate: moment.Moment;\r\n\t\tlet month: CalendarDate[][];\r\n\t\tlet totalWeeks: number;\r\n\t\tlet today: moment.Moment;\r\n\r\n\t\ttargetDate = moment(targetDate).startOf('month');\r\n\t\tstartDate = moment(targetDate);\r\n\t\ttoday = moment();\r\n\r\n\t\tif (targetDate.isoWeekday() < 7) { // set start date to sunday\r\n\t\t\tstartDate.subtract(startDate.isoWeekday(), 'days');\r\n\t\t}\r\n\r\n\t\tmonth = [];\r\n\t\ttotalWeeks = 6;\r\n\r\n\t\tfor (let w = 0; w < totalWeeks; w++) {\r\n\r\n\t\t\tif (!month[w]) {\r\n\t\t\t\tmonth[w] = [];\r\n\t\t\t}\r\n\r\n\t\t\tfor (let i = 0; i < 7; i++) {\r\n\t\t\t\tlet tasks: Task[];\r\n\t\t\t\tlet day: CalendarDate;\r\n\r\n\t\t\t\ttasks = this.events.filter(x => startDate.isSame(x.date, 'day'));\r\n\r\n\t\t\t\tday = {\r\n\t\t\t\t\tdate: startDate.toDate(),\r\n\t\t\t\t\ttasks: [],\r\n\t\t\t\t\tmouseover: false,\r\n\t\t\t\t\tisMenuVisible: false,\r\n\t\t\t\t\tisToday: startDate.isSame(today, 'day'),\r\n\t\t\t\t\tisTargetMonth: startDate.isSame(targetDate, 'month'),\r\n\t\t\t\t\tisPlantingStart: startDate.isSame(this.planting.dates.start, 'day'),\r\n\t\t\t\t\tisPlantingEnd: startDate.isSame(this.planting.dates.end, 'day'),\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (tasks.length > 0) {\r\n\t\t\t\t\tfor (let task of tasks) {\r\n\t\t\t\t\t\tday.tasks.push(task);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmonth[w].push(day);\r\n\t\t\t\tstartDate.add(1, 'days');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn month;\r\n\t}\r\n\r\n\t/**\r\n\t * 1. Organize events into dates\r\n\t * 2. Create a single row of 7 days, given target date\r\n\t * 3. Associate dates with event groups\r\n\t */\r\n\tprivate _getWeeks(targetDate: moment.Moment): CalendarDate[] {\r\n\t\tlet startDate: moment.Moment;\r\n\t\tlet week: CalendarDate[];\r\n\t\tlet day: CalendarDate;\r\n\t\tlet today: moment.Moment;\r\n\r\n\t\tstartDate = moment(targetDate);\r\n\t\ttoday = moment();\r\n\r\n\t\tif (targetDate.isoWeekday() < 7) { // set start date to sunday\r\n\t\t\tstartDate.subtract(startDate.isoWeekday(), 'days');\r\n\t\t}\r\n\r\n\t\tweek = [];\r\n\r\n\t\tfor (let offset = 0; offset <= 6; offset++) {\r\n\t\t\tlet tasks: Task[];\r\n\r\n\t\t\tif (offset > 0) {\r\n\t\t\t\tstartDate.add(1, 'days');\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.events || this.events.length === 0) {\r\n\t\t\t\ttasks = [];\r\n\t\t\t} else {\r\n\t\t\t\ttasks = this.events.filter(x => startDate.isSame(x.date, 'day'));\r\n\t\t\t}\r\n\r\n\t\t\tday = {\r\n\t\t\t\tdate: startDate.toDate(),\r\n\t\t\t\ttasks: [],\r\n\t\t\t\tmouseover: false,\r\n\t\t\t\tisMenuVisible: false,\r\n\t\t\t\tisToday: startDate.isSame(today, 'day'),\r\n\t\t\t\tisTargetMonth: startDate.isSame(targetDate, 'month'),\r\n\t\t\t\tisPlantingStart: startDate.isSame(this.planting.dates.start, 'day'),\r\n\t\t\t\tisPlantingEnd: startDate.isSame(this.planting.dates.end, 'day'),\r\n\t\t\t}\r\n\r\n\t\t\tif (tasks.length > 0) {\r\n\t\t\t\tfor (let task of tasks) {\r\n\t\t\t\t\tday.tasks.push(task);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tweek.push(day);\r\n\t\t}\r\n\r\n\t\treturn week;\r\n\t}\r\n\r\n\t/**\r\n\t * Check if the drag event is valid. For irrigation and cut events,\r\n\t * other events of the same type shouldn't be scheduled on the same date.\r\n\t *\r\n\t * @param eventId\r\n\t * @param date\r\n\t */\r\n\tprivate _isDragValid(eventId: number, date: Date): boolean {\r\n\t\tlet event: Task;\r\n\t\tlet calDate: CalendarDate;\r\n\r\n\t\tevent = this.events.find(x => x.id === eventId);\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (event.eventType !== EventsType.WATER && event.eventType !== EventsType.CUTTING) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tcalDate = this._findCalDateInMonth(date);\r\n\r\n\t\tif (!calDate) {\r\n\t\t\tthrow new Error('date not found in calendar');\r\n\t\t}\r\n\r\n\t\tif (calDate.tasks.filter(x => x.id !== eventId &&\r\n\t\t\t(x.eventType === EventsType.WATER || x.eventType === EventsType.CUTTING)).length > 0) {\r\n\r\n\t\t\tevent.isValid = false;\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\tprivate _redraw(): void {\r\n\t\tthis._updateTargetDate();\r\n\t\tthis.week = this._getWeeks(this._targetDate);\r\n\t\tthis.monthYear = this._getDateRangeText(this._targetDate);\r\n\t\tthis.month = this._getMonths(this._targetDate);\r\n\t}\r\n\r\n\tprivate _restructureCutEvent(m: CutEvent): Task {\r\n\t\tlet result: Task;\r\n\t\tlet maturity: IMaturity;\r\n\r\n\t\tif (!m) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tmaturity = this._maturities.find(x => x.Id === m.MaturityId);\r\n\r\n\t\tresult = {\r\n\t\t\tdate: m.EventDate,\r\n\t\t\tid: m.Id,\r\n\t\t\teventType: EventsType.CUTTING,\r\n\t\t\tprefix: null,\r\n\t\t\tamount: m.CutInterval,\r\n\t\t\tunit: 'days',\r\n\t\t\tdisplayLeaf: false,\r\n\t\t\twarningText: null,\r\n\t\t\tisValid: true,\r\n\t\t\tdetails: {\r\n\t\t\t\tyield: m.Yield,\r\n\t\t\t\tmaturity: maturity ? maturity.Name : null,\r\n\t\t\t\tlastUpdated: m.LastUpdatedUser\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 * Restructure EventGroup data to be used for dragging\r\n\t * @param events\r\n\t */\r\n\tprivate _restructureEvents(events: EventGroup[]): Task[] {\r\n\t\tlet result: Task[] = [];\r\n\t\tlet irrigationEvent = new IrrigationEvent(this._translateService);\r\n\r\n\t\tfor (let event of events) {\r\n\r\n\t\t\tif (event.CutEvent) {\r\n\t\t\t\tresult.push(this._restructureCutEvent(event.CutEvent));\r\n\t\t\t}\r\n\r\n\t\t\tif (event.Irrigation) {\r\n\t\t\t\tresult.push(this._restructureIrrigationEvent(event.Irrigation,\r\n\t\t\t\t\tirrigationEvent.getWarningTextForAllTab(event, this.commodityTypeId)));\r\n\t\t\t}\r\n\r\n\t\t\tif (event.SoilSamples && event.SoilSamples.length > 0) {\r\n\t\t\t\tresult.push(this._restructureSoilSample(event.SoilSamples[0], event.EventDate));\r\n\t\t\t}\r\n\r\n\t\t\tif (event.Fertilization && event.Fertilization.length > 0) {\r\n\t\t\t\tresult.push(this._restructureFertilization(event.Fertilization[0]));\r\n\t\t\t}\r\n\r\n\t\t\tif (event.TissueSamples && event.TissueSamples.length > 0) {\r\n\t\t\t\tresult.push(this._restructureTissueSample(event.TissueSamples[0], event.EventDate));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _restructureFertilization(m: FertilizationEvent): Task {\r\n\t\tlet result: Task;\r\n\r\n\t\tif (!m) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = {\r\n\t\t\tamount: m.DisplayFertilizationUnit,\r\n\t\t\tdate: m.EventDate,\r\n\t\t\tdetails: {\r\n\t\t\t\tlastUpdated: m.Metainfo,\r\n\t\t\t\tfertilizer: m.FertilizerName,\r\n\t\t\t\tformulationType: m.FormulationType\r\n\t\t\t},\r\n\t\t\tdisplayLeaf: EventUtility.shouldShowLeafIconFertilization(m),\r\n\t\t\teventType: EventsType.FERTILIZER,\r\n\t\t\tid: m.Id,\r\n\t\t\tisNA: m.DisplayFertilizationUnit === -1,\r\n\t\t\tisValid: true,\r\n\t\t\tprefix: m.FertilizerName,\r\n\t\t\tunit: m.FormulationType === 'Dry' ?  'lbs / acre' : 'gal / acre',\r\n\t\t\twarningText: null,\r\n\t\t}\r\n\r\n\t\tresult.details.recommendation = {\r\n\t\t\tamount: m.Recommendation.cropManage,\r\n\t\t\tunit:  'lbs N/acre'\r\n\t\t};\r\n\r\n\t\tif (m.NApplied !== null) {\r\n\t\t\tresult.details.applied = {\r\n\t\t\t\tamount: m.FertilizerApplied,\r\n\t\t\t\tunit:  m.FormulationType === 'Dry' ?  'lbs / acre' : 'gal / acre'\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _restructureIrrigationEvent(m: IrrigationEvent, warningText: string): Task {\r\n\t\tlet result: Task;\r\n\r\n\t\tif (!m) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t// if rain, data should be in inches\r\n\t\tresult = {\r\n\t\t\tamount: m.DisplayHours,\r\n\t\t\tdate: DateUtility.DotNetToDate(m.EventDate),\r\n\t\t\tdetails: {\r\n\t\t\t\tlastUpdated: m.Metainfo\r\n\t\t\t},\r\n\t\t\tdisplayLeaf: EventUtility.shouldShowLeafIconWater(m),\r\n\t\t\teventType: EventsType.WATER,\r\n\t\t\tid: m.Id,\r\n\t\t\tisNA: m.isNA(m, this.planting.dates.start),\r\n\t\t\tisValid: true,\r\n\t\t\tprefix: m.IrrigationMethod,\r\n\t\t\tunit: m.IrrigationMethodId === eIrrigationMethods.RAINFALL\r\n\t\t\t\t|| m.IrrigationMethodId === eIrrigationMethods.FLOOD ? 'in.' : 'hr.',\r\n\t\t\twarningText: warningText,\r\n\t\t}\r\n\r\n\t\tif (m.IrrigationMethodId === eIrrigationMethods.RAINFALL) {\r\n\t\t\tif (m.AppliedInches !== null) {\r\n\t\t\t\tresult.details.applied = {\r\n\t\t\t\t\tamount: m.DisplayInches,\r\n\t\t\t\t\tunit: 'in.'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (m.RecommendationHours > 0) {\r\n\t\t\t\tresult.details.recommendation = {\r\n\t\t\t\t\tamount: m.RecommendationHours,\r\n\t\t\t\t\tunit: 'hr.'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (m.AppliedHours > 0) {\r\n\t\t\t\tresult.details.applied = {\r\n\t\t\t\t\tamount: m.AppliedHours,\r\n\t\t\t\t\tunit: 'hr.'\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\tprivate _restructureSoilSample(m: SoilSampleEvent, date: Date): Task {\r\n\t\tlet result: Task;\r\n\r\n\t\tif (!m) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = {\r\n\t\t\tdate: date,\r\n\t\t\tid: m.Id,\r\n\t\t\teventType: EventsType.SOILSAMPLES,\r\n\t\t\tprefix: m.SampleType,\r\n\t\t\tamount: m.SoilNitrateNPPM,\r\n\t\t\tunit: 'ppm',\r\n\t\t\tdisplayLeaf: false,\r\n\t\t\twarningText: null,\r\n\t\t\tisValid: true,\r\n\t\t\tdetails: {\r\n\t\t\t\tlastUpdated: m.Metainfo,\r\n\t\t\t\tsampleType: m.SampleType,\r\n\t\t\t\tsampleTypeId: m.SampleTypeId,\r\n\t\t\t\tdepth: m.Depth,\r\n\t\t\t\tppmNitrateN: m.SoilNitrateNPPM,\r\n\t\t\t\tnutrients: m.Nutrients,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _restructureTissueSample(m: TissueSampleEvent, date: Date): Task {\r\n\t\tlet result: Task;\r\n\r\n\t\tif (!m) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = {\r\n\t\t\tdate: date,\r\n\t\t\tid: m.Id,\r\n\t\t\teventType: EventsType.TISSUE_SAMPLE,\r\n\t\t\tprefix: null,\r\n\t\t\tamount: null,\r\n\t\t\tunit: m.NutrientDisplayText,\r\n\t\t\tdisplayLeaf: null,\r\n\t\t\twarningText: null,\r\n\t\t\tisValid: true,\r\n\t\t\tdetails: {\r\n\t\t\t\tlastUpdated: m.Metainfo,\r\n\t\t\t\tnutrients: m.Nutrients,\r\n\t\t\t\tcropStage: m.CropStage ? m.CropStage.Name : null,\r\n\t\t\t\tlocation: m.Location ? m.Location.Name : 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 _updateEventDate(eventId: number, date: Date): void {\r\n\t\tlet event: Task;\r\n\t\tlet originalDate: Date;\r\n\r\n\t\tevent = this.events.find(x => x.id === eventId);\r\n\t\toriginalDate = event.date;\r\n\t\tevent.date = date;\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tswitch (event.eventType) {\r\n\t\t\tcase EventsType.WATER:\r\n\r\n\t\t\t\tthis._irrigationService.updateDateOnly(eventId, date).then((res) => {\r\n\t\t\t\t\tthis._updateViewAfterEventMove(EventsType.WATER, originalDate, res);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.FERTILIZER:\r\n\t\t\t\tlet f: FertilizationEvent;\r\n\r\n\t\t\t\tf = new FertilizationEvent(date);\r\n\t\t\t\tf.DateOnly = true;\r\n\r\n\t\t\t\tthis._fertilizationService.update(eventId, f, this.planting.id).then((res) => {\r\n\t\t\t\t\tthis._updateViewAfterEventMove(EventsType.FERTILIZER, originalDate, res);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.SOILSAMPLES:\r\n\t\t\t\tlet s: SoilSampleEvent;\r\n\r\n\t\t\t\ts = new SoilSampleEvent(date);\r\n\t\t\t\ts.DateOnly = true;\r\n\r\n\t\t\t\tthis._soilSampleService.update(eventId, s)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tthis._updateViewAfterEventMove(EventsType.SOILSAMPLES, originalDate, res);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.CUTTING:\r\n\t\t\t\tthis._cutEventService.save(this.planting.id, date,\r\n\t\t\t\t\tnull, null, false, eventId, true)\r\n\t\t\t\t\t.then((res) => {\r\n\t\t\t\t\t\tthis._updateViewAfterEventMove(EventsType.CUTTING, originalDate, res);\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\t\t\t\tthis._tissueSampleService.updateDateOnly(eventId, this.planting.id, date).then((res) => {\r\n\t\t\t\t\tthis._updateViewAfterEventMove(EventsType.TISSUE_SAMPLE, originalDate, res);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _updateTargetDate(): void {\r\n\t\tthis.targetDate = this._targetDate.toDate();\r\n\t}\r\n\r\n\tprivate _updateViewAfterEventMove(eventType: EventsType, originalDate: Date, res: EventResponse): void {\r\n\t\tthis._getEventsAndRedraw();\r\n\r\n\t\tif (res) {\r\n\t\t\tres.updateServices(eventType,\r\n\t\t\t\toriginalDate, this.planting.id, this._ranchService,\r\n\t\t\t\tthis._updateService);\r\n\t\t} else {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\tmessage: `Something went wrong. Please try again.`\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.isSaving = false;\r\n\t}\r\n}\r\n","<table>\r\n\t<tbody>\r\n\t\t<!-- fertilizer -->\r\n\r\n\t\t<ng-container *ngIf=\"task.eventType === eventType.FERTILIZER\">\r\n\t\t\t<tr *ngIf=\"task.details.fertilizer\">\r\n\t\t\t\t<td><strong>Fertilizer:</strong> {{ task.details.fertilizer }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.formulationType\">\r\n\t\t\t\t<td><strong>Formulation Type:</strong> {{ task.details.formulationType }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.cropStage\">\r\n\t\t\t\t<td><strong>Crop Stage:</strong> {{ task.details.cropStage }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.recommendation\">\r\n\t\t\t\t<td><strong>Recommendation:</strong> {{ task.details.recommendation.amount | number: '1.0-1' }} {{ task.details.recommendation.unit }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.applied\">\r\n\t\t\t\t<td><strong>Applied:</strong> {{ task.details.applied.amount | number: '1.0-1'}} {{ task.details.applied.unit }}</td>\r\n\t\t\t</tr>\r\n\t\t</ng-container>\r\n\t\t\r\n\t\t<!-- soil sample-->\r\n\r\n\t\t<ng-container *ngIf=\"task.eventType === eventType.SOILSAMPLES\">\r\n\t\t\t<tr *ngIf=\"task.details.sampleType\">\r\n\t\t\t\t<td><strong>Sample Type:</strong> {{ task.details.sampleType }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.depth\">\r\n\t\t\t\t<td><strong>Depth:</strong> {{ task.details.depth }} {{ 'ft' | translate }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.cropStage\">\r\n\t\t\t\t<td><strong>Crop Stage:</strong> {{ task.details.cropStage }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.ppmNitrateN\">\r\n\t\t\t\t<td><strong>N:</strong> {{ task.details.ppmNitrateN | number: '1.2-2' }} ppm Nitrate-N</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.nutrients && task.details.nutrients.length > 1\">\r\n\t\t\t\t<td><strong>All Nutrients:</strong> <span *ngFor=\"let nutrient of task.details.nutrients; let n = index;\">\r\n\t\t\t\t\t{{nutrient.Nutrient}} {{nutrient.Value}} {{ nutrient.Nutrient === 'Organic Matter' ? '%' : 'ppm'}}<span *ngIf=\"task.details.nutrients.length > 0 &&\r\n\t\t\t\t\t\tn < task.details.nutrients.length - 1\">,</span>\r\n\t\t\t\t</span></td>\r\n\t\t\t</tr>\r\n\t\t</ng-container>\r\n\t\t\r\n\t\t<!-- irrigation -->\r\n\r\n\t\t<ng-container *ngIf=\"task.eventType === eventType.WATER\">\r\n\t\t\t<tr *ngIf=\"task.details.recommendation\">\r\n\t\t\t\t<td><strong>Recommendation:</strong> {{ task.details.recommendation.amount | number: '1.0-1' }} {{ task.details.recommendation.unit }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.applied\">\r\n\t\t\t\t<td><strong>{{ task.prefix === 'Rainfall' ? 'Rainfall:' : 'Applied:'}}</strong> {{ task.details.applied.amount | number: '1.0-1'}} {{ task.details.applied.unit }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.warningText\">\r\n\t\t\t\t<td><strong>Warning: </strong> {{ task.warningText }}</td>\r\n\t\t\t</tr>\r\n\t\t</ng-container>\r\n\t\t\r\n\t\t<!-- tissue sample -->\r\n\r\n\t\t<ng-container *ngIf=\"task.eventType === eventType.TISSUE_SAMPLE\">\r\n\t\t\t<tr *ngIf=\"task.details.location\">\r\n\t\t\t\t<td><strong>Location:</strong> {{ task.details.location }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.cropStage\">\r\n\t\t\t\t<td><strong>Crop Stage:</strong> {{ task.details.cropStage }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.nutrients && task.details.nutrients.length > 0\">\r\n\t\t\t\t<td><strong>Nutrients:</strong> <span *ngFor=\"let nutrient of task.details.nutrients; let n = index;\">\r\n\t\t\t\t\t{{nutrient.Name}} {{nutrient.Value}} {{nutrient.MeasurementUnitId === measurementUnits.PPM ? \" ppm\" : \"%\" }}<span *ngIf=\"task.details.nutrients.length > 0 &&\r\n\t\t\t\t\t\tn < task.details.nutrients.length - 1\">,</span>\r\n\t\t\t\t</span></td>\r\n\t\t\t</tr>\r\n\t\t</ng-container>\r\n\r\n\t\t<ng-container *ngIf=\"task.eventType === eventType.CUTTING\">\r\n\t\t\t<tr *ngIf=\"task.details.maturity\">\r\n\t\t\t\t<td><strong>Maturity:</strong> {{ task.details.maturity }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.details.yield\">\r\n\t\t\t\t<td><strong>Yield:</strong> {{ task.details.yield }}</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"task.amount\">\r\n\t\t\t\t<td><strong>Interval:</strong> {{ task.amount }} days</td>\r\n\t\t\t</tr>\r\n\t\t</ng-container>\r\n\r\n\t\t<tr>\r\n\t\t\t<td><strong>Last Updated By:</strong> {{ task.details.lastUpdated }}</td>\r\n\t\t</tr>\r\n\t</tbody>\r\n</table>\r\n\r\n","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\r\nimport { Task } from './interfaces';\r\nimport { eMeasureUnitTypes } from '../tissue-sample-event/interfaces';\r\nimport { EventsType } from '../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ap-event-hover',\r\n\ttemplateUrl: 'event-hover.html',\r\n\tstyleUrls: [ 'event-hover.scss' ]\r\n})\r\n\r\nexport class EventHoverComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic measurementUnits = eMeasureUnitTypes;\r\n\tpublic eventType = EventsType;\r\n\r\n\t@Input()\r\n\tpublic task: Task;\r\n\r\n\tngOnInit(): void {\r\n\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\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\tCreate an Event\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<ng-container *ngIf=\"eventTypes && eventTypes.length > 0\">\r\n\t\t\t<label id=\"example-radio-group-label\">\r\n\t\t\t\tChoose an event type:\r\n\t\t\t</label>\r\n\t\t\t<mat-radio-group\r\n\t\t\t\taria-labelledby=\"example-radio-group-label\"\r\n\t\t\t\tclass=\"example-radio-group\"\r\n\t\t\t\t[(ngModel)]=\"eventTypeId\">\r\n\t\t\t\t<mat-radio-button class=\"example-radio-button\"\r\n\t\t\t\t\t*ngFor=\"let eventType of eventTypes\"\r\n\t\t\t\t\t[value]=\"eventType.id\">\r\n\t\t\t\t\t{{eventType.name}}\r\n\t\t\t\t</mat-radio-button>\r\n\t\t\t</mat-radio-group>\r\n\t\t</ng-container>\r\n\t\t<ng-container *ngIf=\"!eventTypes || eventTypes.length === 0\">\r\n\t\t\t{{ 'You are not allowed to create any events.' | translate }}\r\n\t\t</ng-container>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\">\r\n\t\t<button (click)=\"cancel()\" mat-button\r\n\t\t\tclass=\"bk-button bk-button--medium bk-button--text-only\r\n\t\t\tbk-dialog__button--secondary\">\r\n\t\t\t{{ 'Cancel' | translate }}\r\n\t\t</button>\r\n\t\t<button (click)=\"create()\" mat-button\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t\t{{ 'Create Event' | 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, MatDialog } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { EventsType } from '../../interfaces/constants';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { CalendarEventDialogData, Task } from './interfaces';\r\nimport { CropType } from '../../models/crop-type/cropType';\r\nimport { RanchPermissions } from '../ranch-settings/ranch-permissions';\r\nimport { IRanchPermissions } from '../ranch-settings/interfaces';\r\nimport { EventDialogUtility } from '../../classes/eventDialogUtility';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ap-event-menu-dialog',\r\n\ttemplateUrl: 'event-menu-dialog.html',\r\n\tstyleUrls: [ 'event-menu-dialog.scss' ]\r\n})\r\n\r\nexport class EventMenuDialogComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic commodityTypeId: number;\r\n\tpublic dateDefault: Date;\r\n\tpublic event_types = EventsType;\r\n\tpublic eventTypeId: EventsType;\r\n\tpublic eventDialogUtility: EventDialogUtility;\r\n\r\n\tpublic eventTypes: {\r\n\t\tid: number,\r\n\t\tname: string\r\n\t}[];\r\n\r\n\tpublic permissions: IRanchPermissions;\r\n\tpublic plantingId: number;\r\n\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: CalendarEventDialogData,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<EventMenuDialogComponent>,\r\n\t\tprivate _ranchService: RanchService,\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.plantingId = this._data.lotPlantingId;\r\n\t\tthis.commodityTypeId = this._data.commodityTypeId;\r\n\t\tthis.dateDefault = this._data.defaultDate;\r\n\t\tthis.permissions = this._data.permissions;\r\n\t\tthis._configureOptions(this._data.tasks);\r\n\r\n\t\tthis.eventDialogUtility = new EventDialogUtility(this.plantingId,\r\n\t\t\tthis.commodityTypeId, this.permissions, this._dialog, this._ranchService);\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 create() {\r\n\t\tthis._dialogRef.close();\r\n\t\tthis.eventDialogUtility.open(this.eventTypeId, null, this.dateDefault);\r\n\t}\r\n\r\n\tprivate _configureClickOutside(s: Subject<boolean>, d: MatDialogRef<EventMenuDialogComponent>): void {\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\t/**\r\n\t * Configure options.\r\n\t * @param tasks\r\n\t */\r\n\tprivate _configureOptions(tasks: Task[]): void {\r\n\t\tlet result: { id: EventsType, name: string }[] = [];\r\n\r\n\t\tif (tasks.filter(x => x.eventType === EventsType.WATER).length === 0) {\r\n\t\t\t// disallow duplicate irrigation events on the same day\r\n\t\t\tresult.push({\r\n\t\t\t\tid: EventsType.WATER,\r\n\t\t\t\tname: 'Irrigation'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tresult.push({\r\n\t\t\tid: EventsType.FERTILIZER,\r\n\t\t\tname: 'Fertilization'\r\n\t\t});\r\n\r\n\t\tresult.push({\r\n\t\t\tid: EventsType.SOILSAMPLES,\r\n\t\t\tname: 'Soil Sample'\r\n\t\t});\r\n\r\n\t\tresult.push({\r\n\t\t\tid: EventsType.TISSUE_SAMPLE,\r\n\t\t\tname: 'Tissue Sample'\r\n\t\t});\r\n\r\n\t\tif (CropType.hasCutEvents(this.commodityTypeId) &&\r\n\t\t\ttasks.filter(x => x.eventType === EventsType.CUTTING).length === 0) {\r\n\t\t\t// disallow cut events for irrelevant crop types\r\n\t\t\tresult.push({\r\n\t\t\t\tid: EventsType.CUTTING,\r\n\t\t\t\tname: 'Cutting'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.eventTypes = result.filter(x => RanchPermissions.isEditable(this.permissions, x.id));\r\n\t}\r\n}\r\n","\r\n<span class=\"bk-event-type-icon\">\r\n\t<img *ngIf=\"eventType === EVENT_TYPES.CUTTING\" src=\"../assets/images/icons/icon-sickle.svg\" />\r\n\t<svg-water *ngIf=\"eventType === EVENT_TYPES.WATER\"></svg-water>\r\n\t<svg-fertilizer *ngIf=\"eventType === EVENT_TYPES.FERTILIZER\"></svg-fertilizer>\r\n\t<svg-soil-sample *ngIf=\"eventType === EVENT_TYPES.SOILSAMPLES\"></svg-soil-sample>\r\n\t<svg-tissue-sample *ngIf=\"eventType === EVENT_TYPES.TISSUE_SAMPLE\"></svg-tissue-sample>\r\n</span>","import { Component, OnInit, Input } from '@angular/core';\r\nimport { EventsType } from '../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ap-event-type-icon',\r\n\ttemplateUrl: 'event-type-icon.html',\r\n\tstyleUrls: [ 'event-type-icon.scss' ]\r\n})\r\n\r\nexport class EventTypeIconComponent implements OnInit {\r\n\r\n\t@Input()\r\n\tpublic eventType: EventsType;\r\n\r\n\tpublic EVENT_TYPES = EventsType;\r\n\r\n\tpublic ngOnInit(): void {\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{{ 'Connect Your Account With CASP' | translate }}\r\n\t</h4>\r\n\r\n\t<div mat-dialog-content>\r\n\t\t<img src=\"/assets/images/logos/logo-casp.png\" alt=\"CASP Logo\"/>\r\n\t\t<p>If you have an account with CASP (California Almond Stewardship Platform),\r\n\t\t\tyou can connect your CropManage account with\r\n\t\t\tyour CASP account.</p>\r\n\t\t<p>If you don't already have a CASP account, <a href='{{url}}' target=\"_blank\">click here</a> to create a\r\n\t\t\tCASP account.</p>\r\n\t\t<p>CASP, led by the Almond Board of California, uses grower submitted information to\r\n\t\t\tdemonstrate the sustainability of the almond industry to stakeholders (buyers,\r\n\t\t\tregulators, and consumers), and helps growers find ways to improve efficiencies.</p>\r\n\t\t<p>By connecting the accounts, you will share your CropManage ranch data and\r\n\t\t\tany almond plantings associated with your ranches with CASP. In return,\r\n\t\t\tyou will benefit from several features offered by CASP without having to manually keep CASP data in sync with CropManage\r\n\t\t\tdata.</p>\r\n\t</div>\r\n\r\n\t<div mat-dialog-actions align=\"end\" class=\"dialog-actions\">\r\n\r\n\t\t<button (click)=\"notNow()\" 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{{ 'Not Now' | translate }}\r\n\t\t</button>\r\n\t\t<!-- Connect button is not in the template but rendered by raw JS -->\r\n\t</div>\r\n</div>","\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<defs></defs>\n\t\t<g id=\"Exports\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n\t\t\t<g id=\"icon-lot-filled\" fill-rule=\"nonzero\" fill=\"#000000\">\n\t\t\t\t<g id=\"Icon-Lot-FILLED\">\n\t\t\t\t\t<path d=\"M19.5,9.003 L18.108,9.003 C17.832,9.003 17.608,\n\t\t\t\t\t\t8.778 17.608,8.503 C17.608,8.226 17.832,8.003 18.108,\n\t\t\t\t\t\t8.003 L19.5,8.003 C19.776,8.003 20,8.226 20,8.503 C20,\n\t\t\t\t\t\t8.778 19.776,9.003 19.5,9.003 Z\" id=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t\t<path d=\"M16.37,4.112 C16.242,4.112 16.114,4.063 16.016,\n\t\t\t\t\t\t3.966 C15.821,3.772 15.821,3.454 16.016,3.259 L17.059,\n\t\t\t\t\t\t2.216 C17.254,2.021 17.571,2.021 17.766,2.216 C17.961,\n\t\t\t\t\t\t2.409 17.961,2.728 17.766,2.923 L16.723,3.966 C16.626,\n\t\t\t\t\t\t4.063 16.498,4.112 16.37,4.112 Z\" id=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t\t<path d=\"M11.5,2.394 C11.224,2.394 11,2.17 11,1.894 L11,\n\t\t\t\t\t\t0.503 C11,0.226 11.224,0.003 11.5,0.003 C11.776,0.003 12,\n\t\t\t\t\t\t0.226 12,0.503 L12,1.894 C12,2.17 11.776,2.394 11.5,2.394 Z\"\n\t\t\t\t\t\tid=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t\t<path d=\"M6.631,4.112 C6.503,4.112 6.375,4.063 6.277,\n\t\t\t\t\t\t3.966 L5.233,2.923 C5.038,2.728 5.038,2.411 5.233,\n\t\t\t\t\t\t2.216 C5.428,2.021 5.745,2.021 5.94,2.216 L6.984,\n\t\t\t\t\t\t3.259 C7.179,3.454 7.179,3.772 6.984,3.966 C6.887,\n\t\t\t\t\t\t4.063 6.759,4.112 6.631,4.112 Z\" id=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t\t<path d=\"M4.891,9.003 L3.5,9.003 C3.224,9.003 3,8.778 3,\n\t\t\t\t\t\t8.503 C3,8.226 3.224,8.003 3.5,8.003 L4.891,8.003 C5.168,\n\t\t\t\t\t\t8.003 5.391,8.226 5.391,8.503 C5.391,8.778 5.168,\n\t\t\t\t\t\t9.003 4.891,9.003 Z\" id=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t\t<path d=\"M11.555,11.358 C13.079,11.358 14.557,11.481 15.966,\n\t\t\t\t\t\t11.696 C16.621,10.782 17,9.677 17,8.503 C17,5.47 14.532,\n\t\t\t\t\t\t3.003 11.5,3.003 C8.467,3.003 6,5.47 6,8.503 C6,9.683 6.382,\n\t\t\t\t\t\t10.791 7.042,11.708 C8.483,11.485 9.997,11.358 11.555,11.358 Z\"\n\t\t\t\t\t\tid=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t\t<path d=\"M12.661,12.39 C12.441,12.38 12.222,12.374 12,\n\t\t\t\t\t\t12.372 L12,23.984 L16.266,23.984 L12.661,12.39 Z\" id=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t\t<path d=\"M6.733,23.983 L11,23.983 L11,12.374 C10.783,\n\t\t\t\t\t\t12.378 10.566,12.384 10.352,12.392 L6.733,23.983 Z\" id=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t\t<path d=\"M23,22.272 L23,15.483 C23,15.313 22.914,\n\t\t\t\t\t\t15.154 22.77,15.061 C20.825,13.813 18.129,12.958 15.096,\n\t\t\t\t\t\t12.581 L23,22.272 Z\" id=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t\t<path d=\"M9.2,12.725 L0.161,23.847 C0.25,23.931 0.368,\n\t\t\t\t\t\t23.984 0.5,23.984 L5.687,23.984 L9.2,12.725 Z\" id=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t\t<path d=\"M8.033,12.573 C4.961,12.95 2.22,13.806 0.233,\n\t\t\t\t\t\t15.059 C0.088,15.152 0,15.311 0,15.483 L0,22.46 L8.033,\n\t\t\t\t\t\t12.573 Z\" id=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t\t<path d=\"M13.745,12.508 L17.313,23.984 L22.5,23.984 C22.677,\n\t\t\t\t\t\t23.984 22.824,23.887 22.913,23.75 L13.745,12.508 Z\" id=\"Shape\">\n\t\t\t\t\t</path>\n\t\t\t\t</g>\n\t\t\t</g>\n\t\t</g>\n\t</svg>\n    ","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'svg-lot-filled-marker',\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<defs></defs>\r\n\t\t<g id=\"Exports\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n\t\t\t<g id=\"icon-lot-filled\" fill-rule=\"nonzero\" fill=\"#000000\">\r\n\t\t\t\t<g id=\"Icon-Lot-FILLED\">\r\n\t\t\t\t\t<path d=\"M19.5,9.003 L18.108,9.003 C17.832,9.003 17.608,\r\n\t\t\t\t\t\t8.778 17.608,8.503 C17.608,8.226 17.832,8.003 18.108,\r\n\t\t\t\t\t\t8.003 L19.5,8.003 C19.776,8.003 20,8.226 20,8.503 C20,\r\n\t\t\t\t\t\t8.778 19.776,9.003 19.5,9.003 Z\" id=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t\t<path d=\"M16.37,4.112 C16.242,4.112 16.114,4.063 16.016,\r\n\t\t\t\t\t\t3.966 C15.821,3.772 15.821,3.454 16.016,3.259 L17.059,\r\n\t\t\t\t\t\t2.216 C17.254,2.021 17.571,2.021 17.766,2.216 C17.961,\r\n\t\t\t\t\t\t2.409 17.961,2.728 17.766,2.923 L16.723,3.966 C16.626,\r\n\t\t\t\t\t\t4.063 16.498,4.112 16.37,4.112 Z\" id=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t\t<path d=\"M11.5,2.394 C11.224,2.394 11,2.17 11,1.894 L11,\r\n\t\t\t\t\t\t0.503 C11,0.226 11.224,0.003 11.5,0.003 C11.776,0.003 12,\r\n\t\t\t\t\t\t0.226 12,0.503 L12,1.894 C12,2.17 11.776,2.394 11.5,2.394 Z\"\r\n\t\t\t\t\t\tid=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t\t<path d=\"M6.631,4.112 C6.503,4.112 6.375,4.063 6.277,\r\n\t\t\t\t\t\t3.966 L5.233,2.923 C5.038,2.728 5.038,2.411 5.233,\r\n\t\t\t\t\t\t2.216 C5.428,2.021 5.745,2.021 5.94,2.216 L6.984,\r\n\t\t\t\t\t\t3.259 C7.179,3.454 7.179,3.772 6.984,3.966 C6.887,\r\n\t\t\t\t\t\t4.063 6.759,4.112 6.631,4.112 Z\" id=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t\t<path d=\"M4.891,9.003 L3.5,9.003 C3.224,9.003 3,8.778 3,\r\n\t\t\t\t\t\t8.503 C3,8.226 3.224,8.003 3.5,8.003 L4.891,8.003 C5.168,\r\n\t\t\t\t\t\t8.003 5.391,8.226 5.391,8.503 C5.391,8.778 5.168,\r\n\t\t\t\t\t\t9.003 4.891,9.003 Z\" id=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t\t<path d=\"M11.555,11.358 C13.079,11.358 14.557,11.481 15.966,\r\n\t\t\t\t\t\t11.696 C16.621,10.782 17,9.677 17,8.503 C17,5.47 14.532,\r\n\t\t\t\t\t\t3.003 11.5,3.003 C8.467,3.003 6,5.47 6,8.503 C6,9.683 6.382,\r\n\t\t\t\t\t\t10.791 7.042,11.708 C8.483,11.485 9.997,11.358 11.555,11.358 Z\"\r\n\t\t\t\t\t\tid=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t\t<path d=\"M12.661,12.39 C12.441,12.38 12.222,12.374 12,\r\n\t\t\t\t\t\t12.372 L12,23.984 L16.266,23.984 L12.661,12.39 Z\" id=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t\t<path d=\"M6.733,23.983 L11,23.983 L11,12.374 C10.783,\r\n\t\t\t\t\t\t12.378 10.566,12.384 10.352,12.392 L6.733,23.983 Z\" id=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t\t<path d=\"M23,22.272 L23,15.483 C23,15.313 22.914,\r\n\t\t\t\t\t\t15.154 22.77,15.061 C20.825,13.813 18.129,12.958 15.096,\r\n\t\t\t\t\t\t12.581 L23,22.272 Z\" id=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t\t<path d=\"M9.2,12.725 L0.161,23.847 C0.25,23.931 0.368,\r\n\t\t\t\t\t\t23.984 0.5,23.984 L5.687,23.984 L9.2,12.725 Z\" id=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t\t<path d=\"M8.033,12.573 C4.961,12.95 2.22,13.806 0.233,\r\n\t\t\t\t\t\t15.059 C0.088,15.152 0,15.311 0,15.483 L0,22.46 L8.033,\r\n\t\t\t\t\t\t12.573 Z\" id=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t\t<path d=\"M13.745,12.508 L17.313,23.984 L22.5,23.984 C22.677,\r\n\t\t\t\t\t\t23.984 22.824,23.887 22.913,23.75 L13.745,12.508 Z\" id=\"Shape\">\r\n\t\t\t\t\t</path>\r\n\t\t\t\t</g>\r\n\t\t\t</g>\r\n\t\t</g>\r\n\t</svg>\r\n    `,\r\n})\r\n\r\nexport class SVGLotFilledMarkerComponent {\r\n\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<g id=\"Exports\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n\t\t\t\t<g id=\"icon-planting-filled\" fill-rule=\"nonzero\" fill=\"#000000\">\n\t\t\t\t\t<g transform=\"translate(6.000000, 0.000000)\" id=\"Shape\">\n\t\t\t\t\t\t<path d=\"M6,23.99 C5.724,23.99 5.5,23.766 5.5,23.49 L5.5,\n\t\t\t\t\t\t\t0.506 C5.5,0.23 5.724,0.006 6,0.006 C6.276,0.006 6.5,\n\t\t\t\t\t\t\t0.229 6.5,0.506 L6.5,23.49 C6.5,23.767 6.276,23.99 6,23.99 Z\">\n\t\t\t\t\t\t</path>\n\t\t\t\t\t\t<path d=\"M4,8.49 C3.89,8.49 3.779,8.453 3.69,8.382 C0.862,\n\t\t\t\t\t\t\t6.139 0.5,3.253 0.5,0.99 C0.5,0.788 0.622,0.605 0.809,\n\t\t\t\t\t\t\t0.528 C0.995,0.45 1.211,0.494 1.354,0.637 L4.354,3.637 C4.447,\n\t\t\t\t\t\t\t3.73 4.5,3.857 4.5,3.99 L4.5,7.99 C4.5,8.181 4.391,\n\t\t\t\t\t\t\t8.357 4.218,8.44 C4.148,8.474 4.074,8.49 4,8.49 Z\">\n\t\t\t\t\t\t</path>\n\t\t\t\t\t\t<path d=\"M4,16.006 C3.89,16.006 3.779,15.969 3.69,\n\t\t\t\t\t\t\t15.898 C0.862,13.654 0.5,10.769 0.5,8.506 C0.5,8.304 0.622,\n\t\t\t\t\t\t\t8.121 0.809,8.044 C0.995,7.968 1.211,8.009 1.354,\n\t\t\t\t\t\t\t8.152 L4.354,11.152 C4.447,11.246 4.5,11.373 4.5,\n\t\t\t\t\t\t\t11.506 L4.5,15.506 C4.5,15.697 4.391,15.873 4.218,\n\t\t\t\t\t\t\t15.956 C4.148,15.989 4.074,16.006 4,16.006 Z\">\n\t\t\t\t\t\t</path>\n\t\t\t\t\t\t<path d=\"M4,23.521 C3.89,23.521 3.779,23.484 3.69,\n\t\t\t\t\t\t\t23.413 C0.862,21.17 0.5,18.284 0.5,16.021 C0.5,\n\t\t\t\t\t\t\t15.819 0.622,15.636 0.809,15.559 C0.995,15.483 1.211,\n\t\t\t\t\t\t\t15.525 1.354,15.667 L4.354,18.667 C4.447,18.762 4.5,\n\t\t\t\t\t\t\t18.889 4.5,19.021 L4.5,23.021 C4.5,23.212 4.391,\n\t\t\t\t\t\t\t23.388 4.218,23.471 C4.148,23.505 4.074,23.521 4,23.521 Z\">\n\t\t\t\t\t\t</path>\n\t\t\t\t\t\t<path d=\"M8,8.49 C7.926,8.49 7.852,8.473 7.782,8.44 C7.609,\n\t\t\t\t\t\t\t8.357 7.5,8.182 7.5,7.99 L7.5,3.99 C7.5,3.857 7.553,\n\t\t\t\t\t\t\t3.73 7.647,3.636 L10.647,0.636 C10.791,0.493 11.005,\n\t\t\t\t\t\t\t0.449 11.192,0.528 C11.378,0.605 11.5,0.788 11.5,\n\t\t\t\t\t\t\t0.99 C11.5,3.253 11.138,6.138 8.311,8.382 C8.221,\n\t\t\t\t\t\t\t8.453 8.11,8.49 8,8.49 Z\">\n\t\t\t\t\t\t</path>\n\t\t\t\t\t\t<path d=\"M8,16.006 C7.926,16.006 7.852,15.989 7.782,\n\t\t\t\t\t\t\t15.956 C7.609,15.873 7.5,15.697 7.5,15.506 L7.5,\n\t\t\t\t\t\t\t11.506 C7.5,11.373 7.553,11.246 7.647,11.152 L10.647,\n\t\t\t\t\t\t\t8.152 C10.791,8.008 11.005,7.967 11.192,8.044 C11.378,\n\t\t\t\t\t\t\t8.121 11.5,8.304 11.5,8.506 C11.5,10.769 11.138,\n\t\t\t\t\t\t\t13.654 8.311,15.898 C8.221,15.969 8.11,16.006 8,16.006 Z\">\n\t\t\t\t\t\t</path>\n\t\t\t\t\t\t<path d=\"M8,23.521 C7.926,23.521 7.852,23.504 7.782,\n\t\t\t\t\t\t\t23.471 C7.609,23.389 7.5,23.213 7.5,23.021 L7.5,\n\t\t\t\t\t\t\t19.021 C7.5,18.888 7.553,18.761 7.647,18.667 L10.647,\n\t\t\t\t\t\t\t15.667 C10.791,15.523 11.005,15.481 11.192,15.559 C11.378,\n\t\t\t\t\t\t\t15.637 11.5,15.819 11.5,16.021 C11.5,18.284 11.138,\n\t\t\t\t\t\t\t21.169 8.311,23.413 C8.221,23.484 8.11,23.521 8,23.521 Z\">\n\t\t\t\t\t\t</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-planting-icon',\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<g id=\"Exports\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n\t\t\t\t<g id=\"icon-planting-filled\" fill-rule=\"nonzero\" fill=\"#000000\">\r\n\t\t\t\t\t<g transform=\"translate(6.000000, 0.000000)\" id=\"Shape\">\r\n\t\t\t\t\t\t<path d=\"M6,23.99 C5.724,23.99 5.5,23.766 5.5,23.49 L5.5,\r\n\t\t\t\t\t\t\t0.506 C5.5,0.23 5.724,0.006 6,0.006 C6.276,0.006 6.5,\r\n\t\t\t\t\t\t\t0.229 6.5,0.506 L6.5,23.49 C6.5,23.767 6.276,23.99 6,23.99 Z\">\r\n\t\t\t\t\t\t</path>\r\n\t\t\t\t\t\t<path d=\"M4,8.49 C3.89,8.49 3.779,8.453 3.69,8.382 C0.862,\r\n\t\t\t\t\t\t\t6.139 0.5,3.253 0.5,0.99 C0.5,0.788 0.622,0.605 0.809,\r\n\t\t\t\t\t\t\t0.528 C0.995,0.45 1.211,0.494 1.354,0.637 L4.354,3.637 C4.447,\r\n\t\t\t\t\t\t\t3.73 4.5,3.857 4.5,3.99 L4.5,7.99 C4.5,8.181 4.391,\r\n\t\t\t\t\t\t\t8.357 4.218,8.44 C4.148,8.474 4.074,8.49 4,8.49 Z\">\r\n\t\t\t\t\t\t</path>\r\n\t\t\t\t\t\t<path d=\"M4,16.006 C3.89,16.006 3.779,15.969 3.69,\r\n\t\t\t\t\t\t\t15.898 C0.862,13.654 0.5,10.769 0.5,8.506 C0.5,8.304 0.622,\r\n\t\t\t\t\t\t\t8.121 0.809,8.044 C0.995,7.968 1.211,8.009 1.354,\r\n\t\t\t\t\t\t\t8.152 L4.354,11.152 C4.447,11.246 4.5,11.373 4.5,\r\n\t\t\t\t\t\t\t11.506 L4.5,15.506 C4.5,15.697 4.391,15.873 4.218,\r\n\t\t\t\t\t\t\t15.956 C4.148,15.989 4.074,16.006 4,16.006 Z\">\r\n\t\t\t\t\t\t</path>\r\n\t\t\t\t\t\t<path d=\"M4,23.521 C3.89,23.521 3.779,23.484 3.69,\r\n\t\t\t\t\t\t\t23.413 C0.862,21.17 0.5,18.284 0.5,16.021 C0.5,\r\n\t\t\t\t\t\t\t15.819 0.622,15.636 0.809,15.559 C0.995,15.483 1.211,\r\n\t\t\t\t\t\t\t15.525 1.354,15.667 L4.354,18.667 C4.447,18.762 4.5,\r\n\t\t\t\t\t\t\t18.889 4.5,19.021 L4.5,23.021 C4.5,23.212 4.391,\r\n\t\t\t\t\t\t\t23.388 4.218,23.471 C4.148,23.505 4.074,23.521 4,23.521 Z\">\r\n\t\t\t\t\t\t</path>\r\n\t\t\t\t\t\t<path d=\"M8,8.49 C7.926,8.49 7.852,8.473 7.782,8.44 C7.609,\r\n\t\t\t\t\t\t\t8.357 7.5,8.182 7.5,7.99 L7.5,3.99 C7.5,3.857 7.553,\r\n\t\t\t\t\t\t\t3.73 7.647,3.636 L10.647,0.636 C10.791,0.493 11.005,\r\n\t\t\t\t\t\t\t0.449 11.192,0.528 C11.378,0.605 11.5,0.788 11.5,\r\n\t\t\t\t\t\t\t0.99 C11.5,3.253 11.138,6.138 8.311,8.382 C8.221,\r\n\t\t\t\t\t\t\t8.453 8.11,8.49 8,8.49 Z\">\r\n\t\t\t\t\t\t</path>\r\n\t\t\t\t\t\t<path d=\"M8,16.006 C7.926,16.006 7.852,15.989 7.782,\r\n\t\t\t\t\t\t\t15.956 C7.609,15.873 7.5,15.697 7.5,15.506 L7.5,\r\n\t\t\t\t\t\t\t11.506 C7.5,11.373 7.553,11.246 7.647,11.152 L10.647,\r\n\t\t\t\t\t\t\t8.152 C10.791,8.008 11.005,7.967 11.192,8.044 C11.378,\r\n\t\t\t\t\t\t\t8.121 11.5,8.304 11.5,8.506 C11.5,10.769 11.138,\r\n\t\t\t\t\t\t\t13.654 8.311,15.898 C8.221,15.969 8.11,16.006 8,16.006 Z\">\r\n\t\t\t\t\t\t</path>\r\n\t\t\t\t\t\t<path d=\"M8,23.521 C7.926,23.521 7.852,23.504 7.782,\r\n\t\t\t\t\t\t\t23.471 C7.609,23.389 7.5,23.213 7.5,23.021 L7.5,\r\n\t\t\t\t\t\t\t19.021 C7.5,18.888 7.553,18.761 7.647,18.667 L10.647,\r\n\t\t\t\t\t\t\t15.667 C10.791,15.523 11.005,15.481 11.192,15.559 C11.378,\r\n\t\t\t\t\t\t\t15.637 11.5,15.819 11.5,16.021 C11.5,18.284 11.138,\r\n\t\t\t\t\t\t\t21.169 8.311,23.413 C8.221,23.484 8.11,23.521 8,23.521 Z\">\r\n\t\t\t\t\t\t</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 SVGPlantingIconComponent {\r\n\r\n}\r\n","\n    <svg\n   version=\"1.1\"\n   id=\"svg934\"\n   width=\"24\"\n   height=\"24\"\n   viewBox=\"0 0 24 24\">\n  <g id=\"Rainfall\" stroke=\"#898E97\" stroke-width=\"1.38038\" fill=\"none\" fill-rule=\"evenodd\">\n    <path\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"M 4.06187,6.66317 C 4.1401827,2.4912336 9.9037784,-1.2653992 14.172847,4.0389392 16.261801,3.005504 19.983942,\n\t   3.1329471 20.604773,7.1262638 24.244025,9.5728014 22.30278,14.641398 18.675195,14.56157 H 4.39633 C 2.3819412,\n\t   14.513859 -0.70428092,9.741976 4.06187,6.66317 Z\"\n       id=\"path949\"\n       sodipodi:nodetypes=\"cccccc\" />\n    <path\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"M 5.9142627,17.545976 4.9108826,19.29546\"\n       id=\"path1514\" />\n    <path\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"M 8.2040246,20.581842 7.2521032,22.485694\"\n       id=\"path1516\" />\n    <path\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"m 12.320455,17.468792 -1.029106,1.955303\"\n       id=\"path1518\" />\n    <path\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"m 15.227686,20.684751 -1.00338,1.878126\"\n       id=\"path1520\" />\n    <path\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"m 18.572287,17.443068 -1.054839,1.929576\"\n       id=\"path1522\" />\n  </g>\n</svg>\n    ","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'svg-rainfall',\r\n\ttemplate: `\r\n    <svg\r\n   version=\"1.1\"\r\n   id=\"svg934\"\r\n   width=\"24\"\r\n   height=\"24\"\r\n   viewBox=\"0 0 24 24\">\r\n  <g id=\"Rainfall\" stroke=\"#898E97\" stroke-width=\"1.38038\" fill=\"none\" fill-rule=\"evenodd\">\r\n    <path\r\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"M 4.06187,6.66317 C 4.1401827,2.4912336 9.9037784,-1.2653992 14.172847,4.0389392 16.261801,3.005504 19.983942,\r\n\t   3.1329471 20.604773,7.1262638 24.244025,9.5728014 22.30278,14.641398 18.675195,14.56157 H 4.39633 C 2.3819412,\r\n\t   14.513859 -0.70428092,9.741976 4.06187,6.66317 Z\"\r\n       id=\"path949\"\r\n       sodipodi:nodetypes=\"cccccc\" />\r\n    <path\r\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"M 5.9142627,17.545976 4.9108826,19.29546\"\r\n       id=\"path1514\" />\r\n    <path\r\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"M 8.2040246,20.581842 7.2521032,22.485694\"\r\n       id=\"path1516\" />\r\n    <path\r\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"m 12.320455,17.468792 -1.029106,1.955303\"\r\n       id=\"path1518\" />\r\n    <path\r\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"m 15.227686,20.684751 -1.00338,1.878126\"\r\n       id=\"path1520\" />\r\n    <path\r\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"m 18.572287,17.443068 -1.054839,1.929576\"\r\n       id=\"path1522\" />\r\n  </g>\r\n</svg>\r\n    `,\r\n})\r\n\r\nexport class SVGRainfallComponent {\r\n\r\n}\r\n","\n\t\t<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\"\n\t\txmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\t\t\t<defs>\n\t\t\t\t<polygon id=\"path-1\" points=\"0 28 14 28 14 0 0 0\"></polygon>\n\t\t\t</defs>\n\t\t\t<g id=\"Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n\t\t\t\t<g id=\"icon-sickle\">\n\t\t\t\t\t<g transform=\"translate(13.000000, 14.500000) rotate(30.000000) translate(-13.000000, -14.500000) translate(5.500000, 0.500000)\">\n\t\t\t\t\t\t<g id=\"Group-3\" transform=\"translate(1.000000, 0.000000)\" stroke=\"#9D426C\" stroke-width=\"0.25\" fill=\"#9D426C\">\n\t\t\t\t\t\t\t<path d=\"M3.10249238,17.0443907 C3.55627279,17.122328 4.01823262,17.1616477 4.48517124,\n\t\t\t\t\t\t\t17.1616477 C8.89743889,17.1616477 12.486785,13.6179591 12.486785,9.26259947 C12.486785,\n\t\t\t\t\t\t\t4.90723982 8.89743889,1.36355126 4.48517124,1.36355126 C4.01823262,1.36355126 3.55627279,\n\t\t\t\t\t\t\t1.40287096 3.10249238,1.48080824 C5.89345526,3.05394757 7.68581675,6.02188329 7.68581675,\n\t\t\t\t\t\t\t9.26259947 C7.68581675,12.5033156 5.89345526,15.4712514 3.10249238,17.0443907 M4.48517124,\n\t\t\t\t\t\t\t18.2148541 C3.41366625,18.2148541 2.3649214,18.0319473 1.36774251,17.6713996 L0,\n\t\t\t\t\t\t\t17.1770947 L1.36809814,16.6827898 C4.50864264,15.5474333 6.61893491,12.5658059 6.61893491,\n\t\t\t\t\t\t\t9.26259947 C6.61893491,5.95939304 4.50864264,2.97776564 1.36809814,1.84240911 L0,\n\t\t\t\t\t\t\t1.34810423 L1.36774251,0.853799345 C2.3649214,0.492900609 3.41366625,0.310344828 4.48517124,\n\t\t\t\t\t\t\t0.310344828 C9.4856464,0.310344828 13.5536668,4.32622094 13.5536668,9.26259947 C13.5536668,\n\t\t\t\t\t\t\t14.198978 9.4856464,18.2148541 4.48517124,18.2148541\" id=\"Fill-1\"></path>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t\t<path d=\"M1.5,18.0805147 C1.20940541,18.0805147 0.972972973,18.3430798 0.972972973,\n\t\t\t\t\t\t18.6657935 L0.972972973,26.3342065 C0.972972973,26.6572804 1.20940541,26.9194853 1.5,\n\t\t\t\t\t\t26.9194853 C1.79059459,26.9194853 2.02702703,26.6572804 2.02702703,26.3342065 L2.02702703,\n\t\t\t\t\t\t18.6657935 C2.02702703,18.3430798 1.79059459,18.0805147 1.5,18.0805147 M1.5,28 C0.672972973,\n\t\t\t\t\t\t28 0,27.252644 0,26.3342065 L0,18.6657935 C0,17.747356 0.672972973,17 1.5,17 C2.32702703,17 3,\n\t\t\t\t\t\t17.747356 3,18.6657935 L3,26.3342065 C3,27.252644 2.32702703,28 1.5,28\" id=\"Fill-4\" fill=\"#9D426C\"></path>\n\t\t\t\t\t\t<mask id=\"mask-2\" fill=\"white\">\n\t\t\t\t\t\t\t<use xlink:href=\"#path-1\"></use>\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t\t<g id=\"Clip-7\"></g>\n\t\t\t\t\t\t<polygon id=\"Fill-6\" fill=\"#9D426C\" mask=\"url(#mask-2)\" points=\"0 22 3 22 3 21 0 21\"></polygon>\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-sickle',\r\n\ttemplate: `\r\n\t\t<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\"\r\n\t\txmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n\t\t\t<defs>\r\n\t\t\t\t<polygon id=\"path-1\" points=\"0 28 14 28 14 0 0 0\"></polygon>\r\n\t\t\t</defs>\r\n\t\t\t<g id=\"Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n\t\t\t\t<g id=\"icon-sickle\">\r\n\t\t\t\t\t<g transform=\"translate(13.000000, 14.500000) rotate(30.000000) translate(-13.000000, -14.500000) translate(5.500000, 0.500000)\">\r\n\t\t\t\t\t\t<g id=\"Group-3\" transform=\"translate(1.000000, 0.000000)\" stroke=\"#9D426C\" stroke-width=\"0.25\" fill=\"#9D426C\">\r\n\t\t\t\t\t\t\t<path d=\"M3.10249238,17.0443907 C3.55627279,17.122328 4.01823262,17.1616477 4.48517124,\r\n\t\t\t\t\t\t\t17.1616477 C8.89743889,17.1616477 12.486785,13.6179591 12.486785,9.26259947 C12.486785,\r\n\t\t\t\t\t\t\t4.90723982 8.89743889,1.36355126 4.48517124,1.36355126 C4.01823262,1.36355126 3.55627279,\r\n\t\t\t\t\t\t\t1.40287096 3.10249238,1.48080824 C5.89345526,3.05394757 7.68581675,6.02188329 7.68581675,\r\n\t\t\t\t\t\t\t9.26259947 C7.68581675,12.5033156 5.89345526,15.4712514 3.10249238,17.0443907 M4.48517124,\r\n\t\t\t\t\t\t\t18.2148541 C3.41366625,18.2148541 2.3649214,18.0319473 1.36774251,17.6713996 L0,\r\n\t\t\t\t\t\t\t17.1770947 L1.36809814,16.6827898 C4.50864264,15.5474333 6.61893491,12.5658059 6.61893491,\r\n\t\t\t\t\t\t\t9.26259947 C6.61893491,5.95939304 4.50864264,2.97776564 1.36809814,1.84240911 L0,\r\n\t\t\t\t\t\t\t1.34810423 L1.36774251,0.853799345 C2.3649214,0.492900609 3.41366625,0.310344828 4.48517124,\r\n\t\t\t\t\t\t\t0.310344828 C9.4856464,0.310344828 13.5536668,4.32622094 13.5536668,9.26259947 C13.5536668,\r\n\t\t\t\t\t\t\t14.198978 9.4856464,18.2148541 4.48517124,18.2148541\" id=\"Fill-1\"></path>\r\n\t\t\t\t\t\t</g>\r\n\t\t\t\t\t\t<path d=\"M1.5,18.0805147 C1.20940541,18.0805147 0.972972973,18.3430798 0.972972973,\r\n\t\t\t\t\t\t18.6657935 L0.972972973,26.3342065 C0.972972973,26.6572804 1.20940541,26.9194853 1.5,\r\n\t\t\t\t\t\t26.9194853 C1.79059459,26.9194853 2.02702703,26.6572804 2.02702703,26.3342065 L2.02702703,\r\n\t\t\t\t\t\t18.6657935 C2.02702703,18.3430798 1.79059459,18.0805147 1.5,18.0805147 M1.5,28 C0.672972973,\r\n\t\t\t\t\t\t28 0,27.252644 0,26.3342065 L0,18.6657935 C0,17.747356 0.672972973,17 1.5,17 C2.32702703,17 3,\r\n\t\t\t\t\t\t17.747356 3,18.6657935 L3,26.3342065 C3,27.252644 2.32702703,28 1.5,28\" id=\"Fill-4\" fill=\"#9D426C\"></path>\r\n\t\t\t\t\t\t<mask id=\"mask-2\" fill=\"white\">\r\n\t\t\t\t\t\t\t<use xlink:href=\"#path-1\"></use>\r\n\t\t\t\t\t\t</mask>\r\n\t\t\t\t\t\t<g id=\"Clip-7\"></g>\r\n\t\t\t\t\t\t<polygon id=\"Fill-6\" fill=\"#9D426C\" mask=\"url(#mask-2)\" points=\"0 22 3 22 3 21 0 21\"></polygon>\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 SVGSickleComponent {\r\n\r\n}\r\n","\n\t\t<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-Soil\">\n                    <g>\n                        <path d=\"M6.93306184,10.969333 C6.93306184,11.699733 6.34266617,\n                            12.2901287 5.61226617,12.2901287 C4.88186617,12.2901287 4.2914705,\n                            11.699733 4.2914705,10.969333 L4.2914705,-0.917827989 L6.93306184,\n                            -0.917827989 L6.93306184,10.969333 Z\" id=\"Shape\" stroke=\"#000000\"\n                            stroke-linejoin=\"round\"\n                            transform=\"translate(5.612266, 5.686150) rotate(-225.000000) translate(-5.612266, -5.686150) \">\n                        </path>\n                        <path d=\"M16.7394694,25.3985254 L22.022652,25.3985254 L22.022652,22.0965362 C22.022652,\n                            15.8438895 20.0454209,9.79464536 15.4186737,5.58659036 C10.7919265,\n                            9.79464536 8.81469535,15.7553962 8.81469535,22.0080429 L8.81469535,\n                            25.3985254 L14.097878,25.3985254\" id=\"Shape\"\n                            stroke=\"#000000\" stroke-linejoin=\"round\"\n                            transform=\"translate(15.418674, 15.492558) rotate(-225.000000) translate(-15.418674, -15.492558) \">\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-soil-sample',\r\n\ttemplate: `\r\n\t\t<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-Soil\">\r\n                    <g>\r\n                        <path d=\"M6.93306184,10.969333 C6.93306184,11.699733 6.34266617,\r\n                            12.2901287 5.61226617,12.2901287 C4.88186617,12.2901287 4.2914705,\r\n                            11.699733 4.2914705,10.969333 L4.2914705,-0.917827989 L6.93306184,\r\n                            -0.917827989 L6.93306184,10.969333 Z\" id=\"Shape\" stroke=\"#000000\"\r\n                            stroke-linejoin=\"round\"\r\n                            transform=\"translate(5.612266, 5.686150) rotate(-225.000000) translate(-5.612266, -5.686150) \">\r\n                        </path>\r\n                        <path d=\"M16.7394694,25.3985254 L22.022652,25.3985254 L22.022652,22.0965362 C22.022652,\r\n                            15.8438895 20.0454209,9.79464536 15.4186737,5.58659036 C10.7919265,\r\n                            9.79464536 8.81469535,15.7553962 8.81469535,22.0080429 L8.81469535,\r\n                            25.3985254 L14.097878,25.3985254\" id=\"Shape\"\r\n                            stroke=\"#000000\" stroke-linejoin=\"round\"\r\n                            transform=\"translate(15.418674, 15.492558) rotate(-225.000000) translate(-15.418674, -15.492558) \">\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 SVGSoilSampleComponent {\r\n\r\n}\r\n","\n    <svg\n    width=\"24px\"\n    height=\"24px\"\n    viewBox=\"0 0 24 24\"\n    version=\"1.1\"\n    id=\"svg1492\">\n   <g id=\"layer1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n   <path\n       style=\"stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\n       d=\"M 12.03125,0.5361608 H 8.7852715 c -0.4738013,0 -0.7827694,0 -0.7827694,\n       0.8179627 0,0.8655076 0.7898734,1.2086916 1.2901045,\n       1.2370142 V 6.6035151 C 6.8752126,11.194522 2.038597,17.713894 2.0404243,\n       20.376538 c -0.00183,1.918491 -0.00183,3.143857 2.7776381,\n       3.143857 H 12.03125 m 0,-22.9842342 h 3.245978 c 0.473801,0 0.782769,\n       0 0.782769,0.8179627 0,0.8655076 -0.789873,1.2086916 -1.290104,\n       1.2370142 v 4.0123774 c 2.417394,4.5910069 7.25401,11.1103789 7.252183,\n       13.7730229 0.0018,1.918491 0.0018,3.143857 -2.777638,3.143857 H 12.03125\"\n       id=\"path2069\"\n       sodipodi:nodetypes=\"cccccccc\" />\n    <path\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1\"\n       d=\"M 6.7456715,11.510187 H 17.372488\"\n       id=\"path2087\"\n       sodipodi:nodetypes=\"cc\" />\n   </g>\n </svg>\n    ","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'svg-tissue-sample',\r\n\ttemplate: `\r\n    <svg\r\n    width=\"24px\"\r\n    height=\"24px\"\r\n    viewBox=\"0 0 24 24\"\r\n    version=\"1.1\"\r\n    id=\"svg1492\">\r\n   <g id=\"layer1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n   <path\r\n       style=\"stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\"\r\n       d=\"M 12.03125,0.5361608 H 8.7852715 c -0.4738013,0 -0.7827694,0 -0.7827694,\r\n       0.8179627 0,0.8655076 0.7898734,1.2086916 1.2901045,\r\n       1.2370142 V 6.6035151 C 6.8752126,11.194522 2.038597,17.713894 2.0404243,\r\n       20.376538 c -0.00183,1.918491 -0.00183,3.143857 2.7776381,\r\n       3.143857 H 12.03125 m 0,-22.9842342 h 3.245978 c 0.473801,0 0.782769,\r\n       0 0.782769,0.8179627 0,0.8655076 -0.789873,1.2086916 -1.290104,\r\n       1.2370142 v 4.0123774 c 2.417394,4.5910069 7.25401,11.1103789 7.252183,\r\n       13.7730229 0.0018,1.918491 0.0018,3.143857 -2.777638,3.143857 H 12.03125\"\r\n       id=\"path2069\"\r\n       sodipodi:nodetypes=\"cccccccc\" />\r\n    <path\r\n       style=\"stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1\"\r\n       d=\"M 6.7456715,11.510187 H 17.372488\"\r\n       id=\"path2087\"\r\n       sodipodi:nodetypes=\"cc\" />\r\n   </g>\r\n </svg>\r\n    `,\r\n})\r\n\r\nexport class SVGTissueSampleComponent {\r\n\r\n}\r\n","<div class=\"bk-button-set\">\r\n    <button [class.bk-button-set__button--selected]=\"view == EventsViewEnum.LIST\"\r\n        (click)=\"setView(EventsViewEnum.LIST)\"\r\n        class=\"bk-button bk-button-set__button bk-button--gray-icon\">\r\n        <i class=\"fa fa-list-ul\"></i>\r\n    </button>\r\n    <button [class.bk-button-set__button--selected]=\"view == EventsViewEnum.TABLE\"\r\n        (click)=\"setView(EventsViewEnum.TABLE)\"\r\n        class=\"bk-button-set__button bk-button--gray-icon\">\r\n        <i class=\"fa fa-table\"></i>\r\n    </button>\r\n    <button (click)=\"openCalendar()\"\r\n        class=\"bk-button-set__button bk-button--gray-icon\">\r\n        <i class=\"far fa-calendar\"></i>\r\n    </button>\r\n    <button [class.bk-button-set__button--selected]=\"displayUnitsMenu\"\r\n        (click)=\"displayUnitsMenu = !displayUnitsMenu\" \r\n        class=\"bk-button bk-button-set__button-unit bk-button-set__button bk-button--gray-icon\"\r\n        [disabled]=\"!isNDependent && (eventType === EventsTypeEnum.FERTILIZER || eventType === EventsTypeEnum.SOILSAMPLES\r\n            || eventType === EventsTypeEnum.CUTTING)\">\r\n        {{'Units' | translate }} <i class=\"bk-button-set__button-unit-icon fa fa-angle-down\"></i>\r\n    </button>\r\n</div>\r\n<div class=\"bk-drop-menu bk-unit-menu bk-modal__events-unit-menu\"\r\n    [hidden]=\"!displayUnitsMenu\"\r\n    (clickOutside)=\"clickOutsideMenu($event)\">\r\n\r\n    <div *ngIf=\"eventType== EventsTypeEnum.ALL\"\r\n        class=\"bk-unit-menu__row\">\r\n\r\n        <div class=\"bk-event-list__row-icon bk-button--blue-icon bk-unit-menu__icon\">\r\n            <svg-water></svg-water>\r\n        </div>\r\n        <div class=\"bk-button-set\">\r\n            <label class=\"bk-button-set__label bk-unit-menu__label\">\r\n                {{'Water' | translate }}\r\n            </label>\r\n            <button class=\"bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': waterUnits == 'inches'}\"\r\n                (click)=\"toggleUnits('Water', 'inches')\">\r\n                {{'inches' | translate }}\r\n            </button>\r\n            <button class=\"bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': waterUnits == 'hours'}\"\r\n                (click)=\"toggleUnits('Water', 'hours')\">\r\n                {{'hours' | translate }}\r\n            </button>\r\n        </div>\r\n    </div>\r\n    <div *ngIf=\"eventType== EventsTypeEnum.ALL && isNDependent\"\r\n        class=\"bk-unit-menu__row\">\r\n        <div class=\"bk-event-list__row-icon bk-button--black-icon bk-unit-menu__icon\">\r\n            <svg-fertilizer></svg-fertilizer>\r\n        </div>\r\n        <div class=\"bk-button-set\">\r\n            <label class=\"bk-button-set__label bk-unit-menu__label\">\r\n                {{'Fertilizer' | translate }}\r\n            </label>\r\n            <button class=\"bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': fertilizerUnits == 'fertilizerUnit'}\"\r\n                (click)=\"toggleUnits('Fertilizer', 'fertilizerUnit')\">\r\n                {{'Fertilizer Unit' | translate }}\r\n            </button>\r\n            <button class=\"bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': fertilizerUnits == 'lbsNPerAcre'}\"\r\n                (click)=\"toggleUnits('Fertilizer', 'lbsNPerAcre')\">\r\n                {{'lbs' | translate }} N/{{'acre' | translate }}\r\n            </button>\r\n        </div>\r\n    </div>\r\n    <div *ngIf=\"eventType === EventsTypeEnum.ALL && isNDependent\"\r\n        class=\"bk-unit-menu__row\">\r\n        <div class=\"bk-event-list__row-icon bk-button--yellow-icon bk-unit-menu__icon\">\r\n            <svg-soil-sample></svg-soil-sample>\r\n        </div>\r\n        <div class=\"bk-button-set\">\r\n            <label class=\"bk-button-set__label bk-unit-menu__label\">\r\n                {{'Soil Samples' | translate }}\r\n            </label>\r\n            <button class=\"bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': soilSamplesUnits == 'lbsNPerAcre'}\"\r\n                (click)=\"toggleUnits('SoilSamples', 'lbsNPerAcre')\">\r\n                {{'lbs N/acre' | translate}}\r\n            </button>\r\n            <button class=\"bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': soilSamplesUnits == 'ppmNitrate-N'}\"\r\n                (click)=\"toggleUnits('SoilSamples', 'ppmNitrate-N')\">\r\n                {{'ppm Nitrate-N' | translate}}\r\n            </button>\r\n        </div>\r\n    </div>\r\n    <div *ngIf=\"eventType== EventsTypeEnum.WATER\"\r\n        class=\"bk-unit-menu__row\">\r\n        <div class=\"bk-event-list__row-icon bk-button--blue-icon bk-unit-menu__icon\">\r\n            <svg-water></svg-water>\r\n        </div>\r\n        <div class=\"bk-button-set\">\r\n            <label class=\"bk-button-set__label bk-unit-menu__label\">\r\n                {{'Water' | translate }}\r\n            </label>\r\n            <button class=\"bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': waterUnits == 'inches'}\"\r\n                (click)=\"toggleUnits('Water', 'inches')\">\r\n                {{'inches' | translate }}\r\n            </button>\r\n            <button class=\"bk-button bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': waterUnits == 'hours'}\"\r\n                (click)=\"toggleUnits('Water', 'hours')\">\r\n                {{'hours' | translate }}\r\n            </button>\r\n        </div>\r\n    </div>\r\n    <div *ngIf=\"eventType== EventsTypeEnum.FERTILIZER && isNDependent\"\r\n        class=\"bk-unit-menu__row\">\r\n        <div class=\"bk-event-list__row-icon bk-button--black-icon bk-unit-menu__icon\">\r\n            <svg-fertilizer></svg-fertilizer>\r\n        </div>\r\n        <div class=\"bk-button-set\">\r\n            <label class=\"bk-button-set__label bk-unit-menu__label\">\r\n                {{'Fertilizer' | translate }}\r\n            </label>\r\n            <button class=\"bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': fertilizerUnits == 'fertilizerUnit'}\"\r\n                (click)=\"toggleUnits('Fertilizer', 'fertilizerUnit')\">\r\n                {{'Fertilizer Unit' | translate }}\r\n            </button>\r\n            <button class=\"bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': fertilizerUnits == 'lbsNPerAcre'}\"\r\n                (click)=\"toggleUnits('Fertilizer', 'lbsNPerAcre')\">\r\n                {{'lbs' | translate }} N/{{'acre' | translate }}\r\n            </button>\r\n        </div>\r\n    </div>\r\n    <div *ngIf=\"eventType== EventsTypeEnum.SOILSAMPLES\"\r\n        class=\"bk-unit-menu__row\">\r\n        <div class=\"bk-event-list__row-icon bk-button--yellow-icon bk-unit-menu__icon\">\r\n            <svg-soil-sample></svg-soil-sample>\r\n        </div>\r\n        <div class=\"bk-button-set\">\r\n            <label class=\"bk-button-set__label bk-unit-menu__label\">\r\n                {{'Soil Samples' | translate }}\r\n            </label>\r\n            <button class=\"bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': soilSamplesUnits == 'lbsNPerAcre'}\"\r\n                (click)=\"toggleUnits('SoilSamples', 'lbsNPerAcre')\">\r\n                {{'lbs' | translate }} N/{{'acre' | translate }}\r\n            </button>\r\n            <button class=\"bk-button bk-unit-menu__button bk-button-set__button bk-button--gray-icon\"\r\n                [ngClass]=\"{'bk-button-set__button--selected': soilSamplesUnits == 'ppmNitrate-N'}\"\r\n                (click)=\"toggleUnits('SoilSamples', 'ppmNitrate-N')\">\r\n                {{'ppm Nitrate-N' | translate }}\r\n            </button>\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { Component, Input, EventEmitter, Output } from '@angular/core';\r\n\r\nimport { EventsView, EventsType, eCommodityTypes } from '../../../../interfaces/constants';\r\nimport { CalendarEventDialogData } from '../../../calendar/interfaces';\r\nimport { IPlanting } from '../../../planting-settings/interfaces';\r\nimport { CalendarComponent } from '../../../calendar/calendar';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { EventsUpdateService } from '../../events.update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'all-events-buttonset',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class AllEventsButtonsetComponent {\r\n\t@Input()\r\n\tview: EventsView;\r\n\r\n\t@Input()\r\n\tcommodityTypeId: number;\r\n\r\n\t@Input()\r\n\tplanting: IPlanting;\r\n\r\n\t@Output()\r\n\tonSetView: EventEmitter<EventsView> = new EventEmitter<EventsView>();\r\n\r\n\t@Input()\r\n\teventType: EventsType;\r\n\r\n\t@Output()\r\n\tonToggleUnits: EventEmitter<{ type: string, value: string }> = new EventEmitter<{ type: string, value: string }>();\r\n\r\n\t@Input()\r\n\twaterUnits: string;\r\n\r\n\t@Input()\r\n\tfertilizerUnits: string;\r\n\r\n\t@Input()\r\n\tsoilSamplesUnits: string;\r\n\r\n\t@Input()\r\n\tisNDependent: boolean;\r\n\r\n\tpublic commodityTypes = eCommodityTypes;\r\n\tpublic displayUnitsMenu = false;\r\n\tpublic EventsViewEnum = EventsView;\r\n\tpublic EventsTypeEnum = EventsType;\r\n\r\n\tpublic constructor(\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _eventUpdateService: EventsUpdateService\r\n\t) {}\r\n\r\n\tpublic clickOutsideMenu(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-button-set__button-unit') || classList.contains('bk-button-set__button-unit-icon')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.displayUnitsMenu) {\r\n\t\t\tthis.displayUnitsMenu = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic openCalendar(): void {\r\n\r\n\t\tlet data: CalendarEventDialogData;\r\n\r\n\t\tdata = {\r\n\t\t\tlotPlantingId: this.planting.Id,\r\n\t\t\tname: this.planting.Name,\r\n\t\t\tcommodityTypeId: this.planting.CommodityTypeId,\r\n\t\t\tstartDate: this.planting.WetDate,\r\n\t\t\tendDate: this.planting.HarvestDate\r\n\t\t};\r\n\r\n\t\tthis._dialog.open(CalendarComponent, {\r\n\t\t\twidth: '1200px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: data\r\n\t\t});\r\n\r\n\t\tthis._eventUpdateService.closeModal();\r\n\t}\r\n\r\n\tpublic setView(view: EventsView): void {\r\n\t\tthis.onSetView.emit(view);\r\n\t}\r\n\r\n\tpublic toggleUnits(type: string, value: string) {\r\n\t\tthis.onToggleUnits.emit({ type: type, value: value });\r\n\t}\r\n}\r\n","<div *ngFor=\"let sample of eventGroup.TissueSamples; let i = index;\"\r\n\tclass=\"bk-event-list__row-item bk-clickable\"\r\n\t(click)=\"edit(sample.Id)\">\r\n\r\n\t<div class=\"bk-event-list__row-icon bk-button--yellow-icon\">\r\n\t\t<svg-tissue-sample></svg-tissue-sample>\r\n\t</div>\r\n\r\n\t<div class=\"bk-event-list__row-data\">\r\n\t\t<div class=\"bk-event-list__row-title bk-event-list__row-title--yellow\">\r\n\t\t\t{{sample.NutrientDisplayText ? sample.NutrientDisplayText : 'No measurements taken'}}\r\n\t\t\t\r\n\t\t\t<i\r\n\t\t\t\tmatTooltip=\"{{'Sample not taken' | translate }}\"\r\n\t\t\t\t*ngIf=\"tissueSampleEventClass.shouldShowWarningIcon(sample, eventGroup)\"\r\n\t\t\t\tclass=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n\t\t\t</i>\r\n\t\t</div>\r\n\t\t\r\n\t\t<div class=\"bk-event-list__row-meta\">\r\n\t\t\t{{ sample.Metainfo }}\r\n\t\t</div>\r\n\t</div>\r\n</div>","import { Component, Input, Output, OnInit, EventEmitter } from '@angular/core';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { PlantingService } from '../../planting-settings/service';\r\nimport { IEventGroup } from '../../../models/event/interfaces';\r\nimport { EventsType } from '../../../interfaces/constants';\r\nimport { TissueSampleEvent } from '../../tissue-sample-event/tissueSampleEvent';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'events-list-tissue-sample',\r\n\ttemplateUrl: 'events-list.tissue-sample.html'\r\n})\r\n\r\nexport class EventsListTissueSampleComponent implements OnInit {\r\n\r\n\t/*** Public - visible in template */\r\n\r\n\t@Input()\r\n\tpublic eventGroup: IEventGroup;\r\n\r\n\t@Output()\r\n\tpublic emitterEditEvent = new EventEmitter<{ eventType: EventsType, id: number }>();\r\n\r\n\tpublic tissueSampleEventClass = TissueSampleEvent;\r\n\r\n\t/**** private *****/\r\n\r\n\tconstructor(\r\n\t\tpublic updateService: UpdateService,\r\n\t\tpublic plantingService: PlantingService\r\n\t) { }\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n\r\n\tedit(id: number): void {\r\n\t\tthis.emitterEditEvent.emit({ eventType: EventsType.TISSUE_SAMPLE, id: id});\r\n\t}\r\n}\r\n","<ng-container *ngFor=\"let eventGroup of events\">\r\n\r\n\t<div class=\"bk-event-list__row\" *ngIf=\"!eventGroup.hiddenInListView\">\r\n        <div class=\"bk-event-list__row-date\">\r\n            {{eventGroup.EventDate | date:'M/d/yyyy' }}\r\n        </div>\r\n        \r\n        <!-- irrigation events-->\r\n\r\n        <div *ngIf=\"eventGroup && eventGroup.Irrigation && (eventType == EventsTypeEnum.ALL ||\r\n            eventType == EventsTypeEnum.WATER)\" class=\"bk-event-list__row-item\">\r\n\r\n\t\t\t<div class=\"bk-event-list__row-icon bk-button--blue-icon\">\r\n\t\t\t\t<svg-water></svg-water>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-event-list__row-data\">\r\n                <ng-container *ngIf=\"!irrigationEvent.isNA(eventGroup.Irrigation, planting.WetDate)\">\r\n                    <div *ngIf=\"eventGroup.Irrigation.IsRainfall\"\r\n                        class=\"bk-event-list__row-title bk-event-list__row-title--blue\"\r\n                        (click)=\"openModal(EventsTypeEnum.WATER, eventGroup.Irrigation.Id)\">\r\n                        {{eventGroup.Irrigation.IrrigationMethod | translate}} {{eventGroup.Irrigation.DisplayAmount | number: '1.0-1'}} {{'in' | translate }}\r\n                    </div>\r\n                    <div\r\n                        *ngIf=\"!eventGroup.Irrigation.IsRainfall && (plantingService.units.water == 'inches' ||\r\n                            eventGroup.Irrigation.IrrigationMethodId === irrigationMethods.FLOOD)\"\r\n                        class=\"bk-event-list__row-title bk-event-list__row-title--blue\"\r\n                        (click)=\"openModal(EventsTypeEnum.WATER, eventGroup.Irrigation.Id)\">\r\n                        {{eventGroup.Irrigation.IrrigationMethod | translate }} {{eventGroup.Irrigation.DisplayInches | number: '1.0-1'}} {{'in' | translate }}\r\n                        <i *ngIf=\"irrigationEvent.getWarningTextForAllTab(eventGroup, planting.CommodityTypeId) !== ''\"\r\n                            matTooltip=\"{{ irrigationEvent.getWarningTextForAllTab(eventGroup, planting.CommodityTypeId) }}\"\r\n                            class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                        </i>\r\n                    </div>\r\n                    <div\r\n                        *ngIf=\"!eventGroup.Irrigation.IsRainfall && (plantingService.units.water == 'hours' &&\r\n                            eventGroup.Irrigation.IrrigationMethodId !== irrigationMethods.FLOOD)\"\r\n                        class=\"bk-event-list__row-title bk-event-list__row-title--blue\"\r\n                        (click)=\"openModal(EventsTypeEnum.WATER, eventGroup.Irrigation.Id)\">\r\n                        {{eventGroup.Irrigation.IrrigationMethod | translate }} {{eventGroup.Irrigation.DisplayHours | number: '1.0-1'}} {{'hr' | translate }}\r\n                        <i *ngIf=\"irrigationEvent.getWarningTextForAllTab(eventGroup, planting.CommodityTypeId) !== ''\"\r\n                            matTooltip=\"{{irrigationEvent.getWarningTextForAllTab(eventGroup, planting.CommodityTypeId) }}\"\r\n                            class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                        </i>\r\n                    </div>\r\n                </ng-container>\r\n                <ng-container *ngIf=\"irrigationEvent.isNA(eventGroup.Irrigation, planting.WetDate)\">\r\n                    <div class=\"bk-event-list__row-title bk-event-list__row-title--blue\"\r\n                        (click)=\"openModal(EventsTypeEnum.WATER, eventGroup.Irrigation.Id)\">\r\n                        {{eventGroup.Irrigation.IrrigationMethod}} N/A\r\n                        <i *ngIf=\"irrigationEvent.getWarningTextForAllTab(eventGroup, planting.CommodityTypeId) !== ''\"\r\n                            matTooltip=\"{{irrigationEvent.getWarningTextForAllTab(eventGroup, planting.CommodityTypeId) }}\"\r\n                            class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                        </i>\r\n                    </div>\r\n                </ng-container>\r\n\r\n\t\t\t\t<div class=\"bk-event-list__row-meta\">{{ eventGroup.Irrigation.Metainfo }}</div>\r\n\t\t\t</div>\r\n        </div>\r\n        \r\n        <!-- fertilization events-->\r\n\r\n\t\t<ng-container *ngIf=\"eventGroup && eventGroup.Fertilization && eventGroup.Fertilization.length > 0\r\n            && (eventType == EventsTypeEnum.ALL || eventType == EventsTypeEnum.FERTILIZER)\" >\r\n            <div *ngFor=\"let fe of eventGroup.Fertilization; let i = index;\" class=\"bk-event-list__row-item\">\r\n                <div class=\"bk-event-list__row-icon bk-button--black-icon\">\r\n                    <svg-fertilizer></svg-fertilizer>\r\n                </div>\r\n                <div class=\"bk-event-list__row-data\">\r\n\r\n                    <!-- display amount is not NA -->\r\n\r\n                    <ng-container *ngIf=\"!isNA(fe.DisplayAmount)\">\r\n\r\n                        <!-- fertilizer unit -->\r\n\r\n                        <div *ngIf=\"plantingService.units.fertilizer === 'fertilizerUnit'\"\r\n                            class=\"bk-event-list__row-title bk-event-list__row-title--green\r\n                                bk-event-table--event-{{fe.Id}}\"\r\n                            (click)=\"openModal(EventsTypeEnum.FERTILIZER, fe.Id)\">\r\n\r\n                            <div class=\"bk-event-list_fertilizer-name\">\r\n                                {{fe.FertilizerName}}\r\n                            </div>\r\n                            {{fe.DisplayFertilizationUnit | number: '1.0-1'}} <span *ngIf=\"fe.IsFormulationTypeDry\">\r\n                                {{'lbs' | translate }}/{{'acre' | translate }}</span>\r\n                            <span *ngIf=\"!fe.IsFormulationTypeDry\">\r\n                                {{'gal' | translate }}/{{'acre' | translate }}\r\n                            </span>\r\n                            <i *ngIf=\"eventUtility.shouldDisplayFertilizationWarning(fe, eventGroup.isPast)\"\r\n                                matTooltip=\"{{'Recommendation not applied' | translate }}\"\r\n                                class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                            </i>\r\n                        </div>\r\n\r\n                        <!-- lbs N / Acre -->\r\n\r\n                        <div *ngIf=\"plantingService.units.fertilizer === 'lbsNPerAcre'\"\r\n                            class=\"bk-event-list__row-title bk-event-list__row-title--green\r\n                                bk-event-table--event-{{fe.Id}}\"\r\n                            (click)=\"openModal(EventsTypeEnum.FERTILIZER, fe.Id)\">\r\n\r\n                            <div class=\"bk-event-list_fertilizer-name\">\r\n                                {{fe.FertilizerName}}\r\n                            </div>\r\n\r\n                            {{fe.DisplayLbsNPerAcre | number: '1.0-1'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                            <i matTooltip=\"{{'Recommendation not applied' | translate }}\"\r\n                                *ngIf=\"eventUtility.shouldDisplayFertilizationWarning(fe, eventGroup.isPast)\"\r\n                                class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                            </i>\r\n                        </div>\r\n                    </ng-container>\r\n\r\n                    <!-- display amount is NA -->\r\n                    <ng-container *ngIf=\"isNA(fe.DisplayAmount)\">\r\n                        <div class=\"bk-event-list__row-title bk-event-list__row-title--green bk-event-table--event-{{fe.Id}}\"\r\n                            (click)=\"openModal(EventsTypeEnum.FERTILIZER, fe.Id)\">\r\n                            <div class=\"bk-event-list_fertilizer-name\">{{fe.FertilizerName}}</div>N/A\r\n                        </div>\r\n                    </ng-container>\r\n\r\n                    <div class=\"bk-event-list__row-meta\">\r\n                        {{ fe.Metainfo }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </ng-container>\r\n\r\n        <!-- soil sample events -->\r\n\r\n        <ng-container *ngIf=\"eventGroup && eventGroup.SoilSamples &&\r\n            eventGroup.SoilSamples.length > 0 &&\r\n            (eventType == EventsTypeEnum.ALL || eventType == EventsTypeEnum.SOILSAMPLES)\">\r\n            <div *ngFor=\"let sample of eventGroup.SoilSamples; let i = index;\" class=\"bk-event-list__row-item\">\r\n                <div class=\"bk-event-list__row-icon bk-button--yellow-icon\">\r\n                    <svg-soil-sample></svg-soil-sample>\r\n                </div>\r\n                <div class=\"bk-event-list__row-data\">\r\n                    <ng-container *ngIf=\"plantingService.units.soilSamples == 'ppmNitrate-N' && isNDependent\" >\r\n                        <div class=\"bk-event-list__row-title bk-event-list__row-title--yellow\"\r\n                            (click)=\"openModal(EventsTypeEnum.SOILSAMPLES, sample.Id)\">\r\n                            {{sample.Depth}} {{'ft depth' | translate }}: {{sample.SampleType}} - {{sample.SoilNitrateNPPM | number: '1.0-1'}} {{'ppm' | translate }}\r\n                            <i matTooltip=\"{{'Sample not taken' | translate }}\"\r\n                                *ngIf=\"soilSampleNotApplied(eventGroup, i)\"\r\n                                class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                            </i>\r\n                        </div>\r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"plantingService.units.soilSamples == 'lbsNPerAcre' && isNDependent\">\r\n                        <div\r\n                            class=\"bk-event-list__row-title bk-event-list__row-title--yellow\"\r\n                            (click)=\"openModal(EventsTypeEnum.SOILSAMPLES, sample.Id)\">\r\n                            {{sample.Depth}} {{'ft depth' | translate }}: {{sample.SampleType}} - {{sample.SoilMineralNLbsAcre | number: '1.0-1'}} {{'lbs N/acre' | translate }}\r\n                            <i matTooltip=\"{{'Sample not taken' | translate }}\"\r\n                                *ngIf=\"soilSampleNotApplied(eventGroup, i)\"\r\n                                class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                            </i>\r\n                        </div>\r\n                    </ng-container>\r\n                    <ng-container *ngIf=\"!isNDependent\">\r\n                        <div class=\"bk-event-list__row-title bk-event-list__row-title--yellow\"\r\n                            (click)=\"openModal(EventsTypeEnum.SOILSAMPLES, sample.Id)\">\r\n                            {{sample.Depth}} {{'ft depth' | translate }}: {{sample.SampleType}}\r\n                            <i\r\n                                matTooltip=\"{{'Sample not taken' | translate }}\"\r\n                                *ngIf=\"soilSampleNotApplied(eventGroup, i)\"\r\n                                class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                            </i>\r\n                        </div>\r\n                    </ng-container>\r\n                    <div class=\"bk-event-list__row-meta\">{{ sample.Metainfo }}</div>\r\n                </div>\r\n            </div>\r\n        </ng-container>\r\n\r\n        <!-- Tissue sample events -->\r\n\r\n        <ng-container *ngIf=\"eventGroup && eventGroup.TissueSamples &&\r\n            eventGroup.TissueSamples.length > 0 &&\r\n            (eventType === EventsTypeEnum.ALL || eventType === EventsTypeEnum.TISSUE_SAMPLE)\">\r\n            <!-- wrap in this file - otherwise it messes with CSS because events-list-tissue-sample\r\n                injects an invisible DOM -->\r\n\r\n            <events-list-tissue-sample [eventGroup]='eventGroup'\r\n                (emitterEditEvent)='openModalV2($event)'>\r\n            </events-list-tissue-sample>\r\n        </ng-container>\r\n\r\n        <!-- cut events-->\r\n\r\n        <div *ngIf=\"eventGroup && eventGroup.CutEvent && (eventType === EventsTypeEnum.ALL\r\n            || eventType === EventsTypeEnum.CUTTING) && hasCutEvents\"\r\n\r\n            class=\"bk-event-list__row-item\">\r\n            <div class=\"bk-event-list__row-icon bk-button--purple\">\r\n                <img src=\"../assets/images/icons/icon-sickle.svg\" />\r\n            </div>\r\n            <div class=\"bk-event-list__row-data\">\r\n                <div class=\"bk-event-list__row-title bk-event-list__row-title--purple\"\r\n                    (click)=\"openModal(EventsTypeEnum.CUTTING, eventGroup.CutEvent.Id)\">\r\n                    <ng-container *ngIf=\"isValidNumber(eventGroup.CutEvent.MaturityId)\">\r\n                        {{ getMaturityName(eventGroup.CutEvent.MaturityId) }}\r\n                    </ng-container>\r\n                    {{ eventGroup.CutEvent.CutInterval }} {{ 'days' | translate }}\r\n                </div>\r\n                <div class=\"bk-event-list__row-meta\">\r\n                    {{ eventGroup.CutEvent.Metainfo }}\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</ng-container>\r\n<popper-content #floodIrrigationUnitListPopper>\r\n    <div class=\"bk-popper\" *ngIf=\"plantingService.units.water == 'inches'\">\r\n        {{ 'Flood Irrigation Unit Mismatch Inches Text' | translate }}\r\n    </div>\r\n    <div class=\"bk-popper\" *ngIf=\"plantingService.units.water == 'hours'\">\r\n        {{ 'Flood Irrigation Unit Mismatch Hours Text' | translate }}\r\n    </div>\r\n</popper-content>","import { Component, Input, Output, OnInit, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { PlantingService } from '../../planting-settings/service';\r\nimport { RanchService } from '../../ranch-settings/service';\r\nimport { EventUtility } from '../../../models/event/eventUtility';\r\nimport { ValidateService } from '../../../services/validate.service';\r\nimport { IrrigationEvent } from '../../irrigation-event/irrigationEvent';\r\n\r\nimport { IEventGroup } from '../../../models/event/interfaces';\r\nimport { IPlanting } from '../../planting-settings/interfaces';\r\nimport { IMaturity } from '../../../models/maturity/interfaces';\r\nimport { EventsType, EventContext, eIrrigationMethods } from '../../../interfaces/constants';\r\nimport { EventGroup } from '../../../models/event/event';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { TranslateService } from '../../localization/service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'events-list',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class EventsListComponent implements OnInit, OnDestroy {\r\n\t@Input()\r\n\tplantingId: number;\r\n\r\n\t@Input()\r\n\tevents: EventGroup[];\r\n\r\n\t@Input()\r\n\teventType: EventsType;\r\n\r\n\t@Input()\r\n\tmaturities: IMaturity[];\r\n\r\n\t@Output()\r\n\tmodalOpen = new EventEmitter<{ eventType: EventsType, id: number }>();\r\n\r\n\t@Input()\r\n\tisNDependent: boolean;\r\n\r\n\t@Input()\r\n\thasCutEvents: boolean;\r\n\r\n\tpublic planting: IPlanting;\r\n\tpublic eventUtility = EventUtility; // make this accessible to template\r\n\tpublic context = EventContext;\r\n\tpublic EventsTypeEnum = EventsType;\r\n\tpublic irrigationMethods = eIrrigationMethods;\r\n\tpublic irrigationEvent: IrrigationEvent;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tpublic plantingService: PlantingService,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _translateService: TranslateService) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.irrigationEvent = new IrrigationEvent(this._translateService);\r\n\t\tthis.planting = this._ranchService.plantings.getPlantingById(Number(this.plantingId));\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis._updateService.unitsToggle$.pipe(takeUntil(this._subscriptions$)).subscribe((data: { type: string, value: string }) => {\r\n\t\t\tthis._toggleUnits(data.type, data.value);\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 _toggleUnits(type: string, value: string) {\r\n\t\tthis.plantingService.toggleUnits(type, value);\r\n\t}\r\n\r\n\tpublic openModal(eventType: EventsType, id: number): void {\r\n\t\tthis.modalOpen.emit({ eventType: eventType, id: id });\r\n\t}\r\n\r\n\tpublic openModalV2($event: {eventType: EventsType, id: number }): void {\r\n\t\tthis.modalOpen.emit($event);\r\n\t}\r\n\r\n\tpublic soilSampleNotApplied(event: IEventGroup, index: number): boolean {\r\n\t\tif (!event || event == null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (typeof event.isPast === 'undefined') {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn !EventUtility.isSoilSampleApplied(event, event.isPast, index, this.isNDependent);\r\n\t}\r\n\r\n\tpublic isNA(value: number): boolean {\r\n\t\treturn value === -1;\r\n\t}\r\n\r\n\t/*\r\n     * Note: eventType can be 'Water', 'Fertilizer', or 'SoilSamples'\r\n     */\r\n\r\n\tpublic isValidNumber(value: number): boolean {\r\n\t\treturn ValidateService.isValidNumber(value);\r\n\t}\r\n\r\n\tpublic getMaturityName(id: number): string {\r\n\t\tlet maturity: IMaturity;\r\n\r\n\t\tif (!this.maturities || !ValidateService.isValidNumber(id)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmaturity = this.maturities.filter(x => x.Id === id)[0];\r\n\r\n\t\tif (!maturity) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn maturity.Name;\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\" *ngIf=\"planting\">\r\n    <div class=\"modal-header bk-modal__header bk-modal__events-header--container\">\r\n        <button type=\"button\"\r\n            class=\"bk-dialog__close\"\r\n            (click)=\"close()\">\r\n            &times;\r\n        </button>\r\n        <h4 class=\"bk-modal__header-title\">\r\n            {{getStringFromEventsType(eventType)}} {{'Events' | translate }}\r\n        </h4>\r\n        <div class=\"bk-modal__header-subtitle\">\r\n            {{planting.Name}} | {{planting.LotName}}\r\n        </div>\r\n        <h4 class=\"bk-modal__header-title bk-modal__events-header--mobile\">\r\n            {{planting.Name}}\r\n        </h4>\r\n        <ul class=\"bk-modal__tabs bk-modal__events-tabs\">\r\n            <li class=\"bk-modal__tab\"\r\n                [ngClass]=\"{'bk-modal__tab--selected': eventType === EventsTypeEnum.ALL}\"\r\n                (click)=\"setType(EventsTypeEnum.ALL)\">\r\n                {{'All' | translate }}\r\n            </li>\r\n            <li class=\"bk-modal__tab\"\r\n                [ngClass]=\"{'bk-modal__tab--selected': eventType === EventsTypeEnum.WATER}\"\r\n                (click)=\"setType(EventsTypeEnum.WATER)\">\r\n                {{'Water' | translate }}\r\n            </li>\r\n            <li *ngIf=\"hasCutEvents\"\r\n                class=\"bk-modal__tab\"\r\n                [ngClass]=\"{'bk-modal__tab--selected': eventType === EventsTypeEnum.CUTTING}\" \r\n                (click)=\"setType(EventsTypeEnum.CUTTING)\">\r\n                {{'Cutting' | translate }}\r\n            </li>\r\n            <li class=\"bk-modal__tab\"\r\n                [ngClass]=\"{'bk-modal__tab--selected': eventType === EventsTypeEnum.FERTILIZER }\"\r\n                (click)=\"setType(EventsTypeEnum.FERTILIZER)\">\r\n                {{'Fertilizer' | translate }}\r\n            </li>\r\n            <li class=\"bk-modal__tab\"\r\n                [ngClass]=\"{'bk-modal__tab--selected': eventType === EventsTypeEnum.SOILSAMPLES }\"\r\n                (click)=\"setType(EventsTypeEnum.SOILSAMPLES)\">\r\n                {{'Soil Samples' | translate }}\r\n            </li>\r\n            <li class=\"bk-modal__tab\"\r\n                [ngClass]=\"{'bk-modal__tab--selected': eventType === EventsTypeEnum.TISSUE_SAMPLE }\"\r\n                (click)=\"setType(EventsTypeEnum.TISSUE_SAMPLE)\">\r\n                {{'Tissue Samples' | translate }}\r\n            </li>\r\n        </ul>\r\n        <div class=\"bk-modal__events-select-and-units\">\r\n            <!-- this dropdown appears in mobile view -->\r\n            <select class=\"bk-modal__events-select\"\r\n                (ngModelChange)=\"onTypeSelect($event)\"\r\n                [(ngModel)]=\"dropdownSelectedItem\">\r\n                <option [value]=\"'All'\">\r\n                    All Events\r\n                </option>\r\n                <option [value]=\"'Water'\">\r\n                    Water Events\r\n                </option>\r\n                <option\r\n                    [value]=\"'Fertilizer'\">\r\n                    Fertilization Events\r\n                </option>\r\n                <option\r\n                    [value]=\"'SoilSamples'\">\r\n                    Soil Sample Events\r\n                </option>\r\n                <option *ngIf=\"hasCutEvents\"\r\n                    [value]=\"'Cutting'\">\r\n                    Cutting Events\r\n                </option>\r\n                <option [value]=\"'Totals'\">\r\n                    All Events Totals\r\n                </option>\r\n                <option [value]=\"'AdditionalWater'\">\r\n                    Additional Water Data\r\n                </option>\r\n            </select>\r\n            <div class=\"bk-modal_events-buttonset--mobile\">\r\n                <all-events-buttonset [view]=\"view\"\r\n                    [planting]=\"planting\"\r\n                    (onSetView)=\"setView($event)\"\r\n                    [eventType]=\"eventType\"\r\n                    [commodityTypeId]='planting.CommodityTypeId'\r\n                    (onToggleUnits)=\"onToggleUnits($event)\"\r\n                    [waterUnits]=\"waterUnits\"\r\n                    [fertilizerUnits]=\"fertilizerUnits\"\r\n                    [soilSamplesUnits]=\"soilSamplesUnits\"\r\n                    [isNDependent]=\"isNDependent\">\r\n                </all-events-buttonset>\r\n            </div>\r\n        </div>\r\n    </div>\r\n\r\n\r\n    <div mat-dialog-content>\r\n        <div class=\"bk-modal__events-top\">\r\n            <all-events-buttonset\r\n                [commodityTypeId]='planting.CommodityTypeId'\r\n                [eventType]=\"eventType\"\r\n                [fertilizerUnits]=\"fertilizerUnits\"\r\n                [isNDependent]=\"isNDependent\"\r\n                [planting]=\"planting\"\r\n                [soilSamplesUnits]=\"soilSamplesUnits\"\r\n                [view]=\"view\"\r\n                [waterUnits]=\"waterUnits\"\r\n                (onSetView)=\"setView($event)\"\r\n                (onToggleUnits)=\"onToggleUnits($event)\">\r\n            </all-events-buttonset>\r\n\r\n            <div *ngIf=\"eventType== EventsTypeEnum.WATER\"\r\n                class=\"bk-water-data-links\">\r\n                <ng-container *ngIf=\"view === EventsViewEnum.TABLE && \r\n                    eventsTableComponent && eventsTableComponent.showAdditionalWaterData\">\r\n\r\n                    <a class=\"bk-water-data-link\"\r\n                        href=\"javascript:void(0)\"\r\n                        (click)=\"toggleAddtionalWaterData()\">\r\n                        {{'Irrigation Data' | translate }}\r\n                    </a> \r\n                \r\n                    <span class=\"bk-water-data-link bk-water-data-link--text\">\r\n                        {{'Additional Water Data' | translate }}\r\n                    </span>\r\n                </ng-container>\r\n\r\n                <ng-container *ngIf=\"view === EventsViewEnum.TABLE && \r\n                    eventsTableComponent && !eventsTableComponent.showAdditionalWaterData\">\r\n                    \r\n                    <span class=\"bk-water-data-link bk-water-data-link--text\">\r\n                        {{'Irrigation Data' | translate }}\r\n                    </span> \r\n                    <a class=\"bk-water-data-link\"\r\n                        href=\"javascript:void(0)\"\r\n                        (click)=\"toggleAddtionalWaterData()\">\r\n                        {{'Additional Water Data' | translate }}\r\n                    </a>\r\n                </ng-container>\r\n            </div>\r\n            <div *ngIf=\"permissions && permissions.UserCanEditPlanting\" \r\n                class=\"bk-button-set bk-button-set--right bk-modal__events-add--hidden-mobile\">\r\n                <label class=\"bk-button-set__label\">\r\n                    {{'Add' | translate }}:\r\n                </label>\r\n                <button *ngIf=\"eventType == EventsTypeEnum.ALL || eventType == EventsTypeEnum.WATER\"\r\n                    matTooltip=\"{{'Add Watering Event' | translate }}\"\r\n                    (click)=\"editEvent({ eventType: EventsTypeEnum.WATER })\"\r\n                    [disabled]='!permissions || !permissions.UserCanEditIrrigationEvent'\r\n                    class=\"bk-button bk-button-set__button bk-button--blue-icon\">\r\n                    <svg-water></svg-water>\r\n                </button>\r\n                <button *ngIf=\"(eventType === EventsTypeEnum.ALL || eventType === EventsTypeEnum.CUTTING) && hasCutEvents\" \r\n                    matTooltip=\"{{'Add Cutting Event' | translate }}\"\r\n                    class=\"bk-button bk-button-set__button bk-button--purple-icon\"\r\n                    (click)=\"editEvent({ eventType: EventsTypeEnum.CUTTING })\">\r\n                    \r\n                    <img class=\"bk-button-set__cuttting-image\"\r\n                        src=\"../assets/images/icons/icon-sickle.svg\" />\r\n                </button>\r\n                <button *ngIf=\"eventType == EventsTypeEnum.ALL || eventType == EventsTypeEnum.FERTILIZER\"\r\n                    matTooltip=\"{{ 'Add Fertilization Event' | translate }}\"\r\n                    (click)=\"editEvent({ eventType: EventsTypeEnum.FERTILIZER })\"\r\n                    [disabled]=\"!permissions || !permissions.UserCanEditFertilizationEvent\"\r\n                    class=\"bk-button bk-button-set__button bk-button--black-icon\">\r\n                    <svg-fertilizer></svg-fertilizer>\r\n                </button>\r\n                <button *ngIf=\"eventType == EventsTypeEnum.ALL || eventType == EventsTypeEnum.SOILSAMPLES\"\r\n                    matTooltip=\"{{ 'Add Soil Sample' | translate }}\"\r\n                    (click)=\"editEvent({ eventType: EventsTypeEnum.SOILSAMPLES })\"\r\n                    [disabled]=\"!permissions || !permissions.UserCanEditSoilSampleEvent\"\r\n                    class=\"bk-button bk-button-set__button bk-button--yellow-icon\">\r\n                    <svg-soil-sample></svg-soil-sample>\r\n                </button>\r\n                <button *ngIf=\"eventType == EventsTypeEnum.ALL || eventType == EventsTypeEnum.TISSUE_SAMPLE\"\r\n                    matTooltip=\"{{ 'Add' }} {{ 'Tissue Sample' | translate }}\"\r\n                    (click)=\"editEvent({ eventType: EventsTypeEnum.TISSUE_SAMPLE })\"\r\n                    [disabled]=\"!permissions || !permissions.UserCanEditPlanting\"\r\n                    class=\"bk-button bk-button-set__button bk-button--yellow-icon\">\r\n                    <svg-tissue-sample></svg-tissue-sample>\r\n                </button>\r\n            </div>\r\n        </div>\r\n        <div *ngIf=\"loadingData\"\r\n            class=\"bk-loader__container\">\r\n            <div class=\"bk-loader\"></div>\r\n        </div>\r\n        <div *ngIf=\"!loadingData\" \r\n            class=\"bk-modal__scroll-area bk-modal__events-container\"\r\n            [class.bk-model__events-container--list]=\"view == EventsViewEnum.LIST\"\r\n            [class.bk-modal__events-container--totals]=\"view == EventsViewEnum.TOTALS\">\r\n            <ng-container *ngIf=\"view == EventsViewEnum.LIST\">\r\n                <events-list [plantingId]=\"planting.Id\"\r\n                    [events]=\"events\"\r\n                    [eventType]=\"eventType\"\r\n                    [maturities]=\"maturities\" \r\n                    [isNDependent]=\"isNDependent\"\r\n                    [hasCutEvents]=\"hasCutEvents\"\r\n                    (modalOpen)=\"editEvent($event)\">\r\n                </events-list>\r\n            </ng-container>\r\n            <div class=\"bk-modal__events-table--container\"\r\n                [hidden]=\"view !== EventsViewEnum.TABLE\">\r\n                <events-table [plantingId]=\"planting.Id\"\r\n                    [events]=\"events\"\r\n                    [eventType]=\"eventType\"\r\n                    [detailsData]=\"eventTableDetailsData\"\r\n                    [showAdditionalWaterDataLoader]=\"showAdditionalWaterDataLoader\"\r\n                    [maturities]=\"maturities\"\r\n                    [isNDependent]=\"isNDependent\"\r\n                    [hasCutEvents]=\"hasCutEvents\"\r\n                    (setDetailsData)=\"setEventsTableDetailsData($event)\"\r\n                    (modalOpen)=\"editEvent($event)\">\r\n                </events-table>\r\n            </div>\r\n            <ng-container *ngIf=\"view == EventsViewEnum.TOTALS\">\r\n                <event-totals [appliedWater]=\"appliedWater\"\r\n                    [rainfall]=\"rainfall\"\r\n                    [appliedFertilizer]=\"appliedN\"\r\n                    [numSoilSamples]=\"numSoilSamples\"\r\n                    [numTissueSamples]=\"numTissueSamples\"\r\n                    [numNotApplied]=\"numNotApplied\"\r\n                    [numCuttings]=\"numCuttings\"\r\n                    (onOpenRainfallDataModal)=\"openRainfallDataModal()\"\r\n                    (onOpenFlowmeterDataModal)=\"openFlowmeterDataModal()\"\r\n                    [totalRecommendedWater]=\"totalRecommendedWater\"\r\n                    [numFertilizationEvents]=\"numFertilizationEvents\"\r\n                    [numIrrigationEvents]=\"numIrrigationEvents\"\r\n                    [recommendedFertilizer]=\"recommendedFertilizer\"\r\n                    [eventType]=\"eventType\"\r\n                    [view]=\"view\"\r\n                    [isNDependent]=\"isNDependent\"\r\n                    [hasFloodEvents]=\"hasFloodEvents\"\r\n                    [hasCutEvents]=\"hasCutEvents\">\r\n                </event-totals>\r\n            </ng-container>\r\n            <div *ngIf=\"!events || events.length === 0\"\r\n                class=\"bk-events--zero-state\">\r\n                {{ 'Events Table Zero State Message' | translate }}.\r\n            </div>\r\n        </div>\r\n    </div>\r\n\r\n    <!-- FOOTER -->\r\n\r\n    <div mat-dialog-actions>\r\n        <event-totals [appliedWater]=\"appliedWater\"\r\n            [rainfall]=\"rainfall\"\r\n            [appliedN]=\"appliedN\"\r\n            [numSoilSamples]=\"numSoilSamples\"\r\n            [numTissueSamples]=\"numTissueSamples\"\r\n            [numNotApplied]=\"numNotApplied\"\r\n            [numCuttings]=\"numCuttings\"\r\n            (onOpenRainfallDataModal)=\"openRainfallDataModal()\"\r\n            (onOpenFlowmeterDataModal)=\"openFlowmeterDataModal()\"\r\n            [totalRecommendedWater]=\"totalRecommendedWater\"\r\n            [numIrrigationEvents]=\"numIrrigationEvents\"\r\n            [numFertilizationEvents]=\"numFertilizationEvents\"\r\n            [recommendedFertilizer]=\"recommendedFertilizer\"\r\n            [eventType]=\"eventType\"\r\n            [view]=\"view\"\r\n            [hasFlowmeterFileName]=\"hasFlowmeterFileName\"\r\n            [isNDependent]=\"isNDependent\"\r\n            [hasFloodEvents]=\"hasFloodEvents\"\r\n            [hasCutEvents]=\"hasCutEvents\">\r\n        </event-totals>\r\n    </div>\r\n    <div class=\"bk-modal__events--additional-data\"\r\n        [hidden]=\"!isRainfallChartVisible\">\r\n    </div>\r\n</div>","import { Component, ViewChild, OnInit, AfterViewChecked, OnDestroy, Inject } from '@angular/core';\r\nimport { PlantingService } from '../planting-settings/service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { EventsTableComponent } from '../events/table/main';\r\nimport { IrrigationEventComponent } from '../irrigation-event/main';\r\nimport { FertilizationEventDialog } from '../fertilization-event/main';\r\nimport { FlowmeterChartDialog } from '../flowmeter-graph/main';\r\nimport { RainfallDataComponent } from '../rainfall-chart/main';\r\nimport { EventUtility } from '../../models/event/eventUtility';\r\nimport { EventGroup } from '../../models/event/event';\r\nimport { CutEventService } from '../cut-event/service';\r\nimport { CropType } from '../../models/crop-type/cropType';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { IrrigationService } from '../irrigation-event/service';\r\n\r\nimport { IMaturity } from '../../models/maturity/interfaces';\r\nimport { EventsView, EventsType, eCommodityTypes, EventTypeNames } from '../../interfaces/constants';\r\nimport * as jQuery from 'jquery';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { EventsListComponent } from './list/main';\r\nimport { IRanchPermissions } from '../ranch-settings/interfaces';\r\nimport { chartTypes } from '../flowmeter-graph/flowMeter';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { IEventDetails } from '../shared/interfaces';\r\nimport { INotApplied, IVerticalScrollPositions, IVerticalScrollPositionsTable } from './interfaces';\r\nimport { EventsUpdateService } from './events.update.service';\r\nimport { RainfallChartUpdateService } from '../rainfall-chart/rainfall-chart.update.service';\r\nimport { FlowmeterChartUpdateService } from '../flowmeter-graph/flowmeter-chart.update.service';\r\nimport { EventDialogUtility } from '../../classes/eventDialogUtility';\r\nimport { DIALOG_HIDE_CLASS } from '../shared/constants';\r\n\r\nexport interface AllEventsModalSettings {\r\n\tplanting: IAllEventModalPlanting,\r\n\tview?: EventsView\r\n}\r\n\r\nexport interface IAllEventModalPlanting {\r\n\tId: number,\r\n\tCommodityTypeId: number,\r\n\tHasFlowMeterFileName: boolean,\r\n\tName: string,\r\n\tLotName: string,\r\n\tWetDate: Date,\r\n\tHarvestDate: Date,\r\n\tpermissions: IRanchPermissions\r\n}\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'all-events-modal',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: [ 'main.scss']\r\n})\r\n\r\nexport class AllEventsModalComponent implements OnInit, AfterViewChecked, OnDestroy {\r\n\t@ViewChild(EventsTableComponent, { static: false }) public eventsTableComponent: EventsTableComponent;\r\n\r\n\t@ViewChild(EventsListComponent, { static: false })\r\n\t\tpublic eventsListComponent: EventsListComponent; // temporarily exposing this for debugging\r\n\r\n\t// remove these\r\n\t@ViewChild(IrrigationEventComponent, { static: false }) public IrrigationEventComponent: IrrigationEventComponent;\r\n\t@ViewChild(FertilizationEventDialog, { static: false }) public fertilizationEventComponent: FertilizationEventDialog;\r\n\r\n\tpublic EventsViewEnum = EventsView;\r\n\tpublic EventsTypeEnum = EventsType;\r\n\tpublic planting: IAllEventModalPlanting;\r\n\tpublic commodityTypes = eCommodityTypes;\r\n\tpublic view: EventsView = EventsView.LIST;\r\n\tpublic eventType: EventsType = EventsType.ALL;\r\n\tpublic events: EventGroup[] = new Array();\r\n\tpublic permissions: IRanchPermissions;\r\n\r\n\tpublic waterUnits = '';\r\n\tpublic fertilizerUnits = '';\r\n\tpublic soilSamplesUnits = '';\r\n\r\n\t// totals\r\n\tpublic totalRecommendedWater = 0;\r\n\tpublic appliedWater = 0;\r\n\tpublic rainfall = 0;\r\n\tpublic numIrrigationEvents = 0;\r\n\tpublic numFertilizationEvents = 0;\r\n\tpublic appliedN = 0;\r\n\tpublic recommendedFertilizer = 0;\r\n\tpublic numSoilSamples = 0;\r\n\tpublic numTissueSamples = 0;\r\n\tpublic numCuttings = 0;\r\n\tpublic numNotApplied: INotApplied;\r\n\r\n\tpublic eventTableDetailsData: IEventDetails = {\r\n\t\tfertilizationRecommendationDetails: null,\r\n\t\tirrigationRecommendationDetails: null,\r\n\t\tirrigationRecommendationDetailsType: null\r\n\t};\r\n\r\n\tpublic showAdditionalWaterDataLoader = true;\r\n\tpublic loadingData = true;\r\n\tpublic eventDialogUtility: EventDialogUtility;\r\n\tpublic dropdownSelectedItem = 'All';\r\n\tpublic hasFlowmeterFileName = false;\r\n\tpublic maturities: IMaturity[];\r\n\tpublic isNDependent: boolean;\r\n\tpublic hasFloodEvents = false;\r\n\tpublic hasCutEvents = false;\r\n\tpublic readonly domSelector = 'all-events-modal .bk-modal__scroll-area.bk-modal__events-container';\r\n\r\n\tpublic eventDialogParams: {\r\n\t\tplantingId: number,\r\n\t\tgerminationDate?: Date, // optional for irrigation events\r\n\t\tid: number\r\n\t}\r\n\r\n\tprivate _typeChanged = false;\r\n\tprivate _allEvents: EventGroup[] = new Array();\r\n\tprivate _isLoaded = true; // used to reset horizontal scroll position\r\n\r\n\tprivate _eventsScrollPositions: IVerticalScrollPositions = { // vertical scroll positions maintained for\r\n\t\t// Events List and Events Table - which needs to be preserved when opening and closing event popups\r\n\t\tTable: {\r\n\t\t\tAll: 0,\r\n\t\t\tWater: 0,\r\n\t\t\tFertilizer: 0,\r\n\t\t\tSoilSamples: 0\r\n\t\t},\r\n\t\tList: {\r\n\t\t\tAll: 0,\r\n\t\t\tWater: 0,\r\n\t\t\tFertilizer: 0,\r\n\t\t\tSoilSamples: 0\r\n\t\t}\r\n\t};\r\n\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tprivate _orientationChangeListener: EventListener = () => {\r\n\t\tthis._resetView();\r\n\t};\r\n\r\n\tprivate _resizeListener: EventListener = () => {\r\n\t\tthis._handleWindowResize();\r\n\t};\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: AllEventsModalSettings,\r\n\t\tprivate _dialogRef: MatDialogRef<AllEventsModalComponent>,\r\n\t\tprivate _eventUpdateService: EventsUpdateService,\r\n\t\tprivate _plantingService: PlantingService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _cutEventService: CutEventService,\r\n\t\tprivate _irrigationService: IrrigationService,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _rainfallChartUpdateService: RainfallChartUpdateService,\r\n\t\tprivate _flowmeterUpdateService: FlowmeterChartUpdateService,\r\n\t\tprivate _ranchService: RanchService) { }\r\n\r\n\t/**\r\n     * Warning: Loads when plantings view loads, not when event table/list button is clicked\r\n     */\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._clear();\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._data.planting;\r\n\r\n\t\tif (!this.planting) {\r\n\t\t\tthrow new Error('AllEventsModalComponent.ngOnInit()) - planting is empty');\r\n\t\t}\r\n\r\n\t\tthis.hasFloodEvents = CropType.hasFloodEvents(this.planting.CommodityTypeId);\r\n\t\tthis.hasCutEvents = CropType.hasCutEvents(this.planting.CommodityTypeId);\r\n\t\tthis.isNDependent = this._ranchService.getIsNDependent(this.planting.Id)\r\n\t\tthis.hasFlowmeterFileName = this.planting.HasFlowMeterFileName;\r\n\t\tthis.permissions = this.planting.permissions;\r\n\t\tthis._initializeUnits();\r\n\r\n\t\tthis.eventDialogUtility = new EventDialogUtility(this.planting.Id,\r\n\t\t\tthis.planting.CommodityTypeId, this.permissions, this._dialog,\r\n\t\t\tthis._ranchService);\r\n\r\n\t\tif (this._data.view) {\r\n\t\t\tthis.setView(this._data.view);\r\n\t\t}\r\n\r\n\t\tthis._cutEventService.listMaturities()\r\n\t\t\t.then(response => {\r\n\t\t\t\tthis.maturities = response;\r\n\t\t\t\tthis._getAllEvents(this.planting.Id, this.planting.CommodityTypeId);\r\n\t\t\t});\r\n\r\n\t\tthis._updateService.PlantingsUpdated$.\r\n\t\t\tpipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (!this.planting) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._getAllEvents(this.planting.Id, this.planting.CommodityTypeId);\r\n\t\t});\r\n\r\n\t\tthis._updateService.RanchPlantingsPermissions$.\r\n\t\t\tpipe(takeUntil(this._subscriptions$)).subscribe(data => {\r\n\t\t\tthis.permissions = data;\r\n\t\t});\r\n\r\n\t\t/**\r\n         * display event table/list when irrigation event dialog is closed\r\n         */\r\n\t\tthis._updateService.eventDialogClosed$.\r\n\t\t\tpipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\r\n\t\t\t// Display bootstrap backdrop again, but since this component instantiates in the background,\r\n\t\t\t// backdrop may not necessarily exist\r\n\r\n\t\t\tthis.show();\r\n\t\t\tthis._isLoaded = false;\r\n\t\t});\r\n\r\n\t\t// Modal.eventsResize();\r\n\t\t// Modal.resetVerticalPosition();\r\n\t\twindow.addEventListener('orientationchange', this._orientationChangeListener);\r\n\t\twindow.addEventListener('resize', this._resizeListener);\r\n\r\n\t\tthis._eventUpdateService.closeModal$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.close();\r\n\t\t});\r\n\r\n\t\t// if user closes the rainfall chart dialog, make this dialog visible\r\n\t\tthis._rainfallChartUpdateService.onClose$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.show();\r\n\t\t});\r\n\r\n\t\tthis._flowmeterUpdateService.onClose$.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 * force check to keep consistency in the mobile experience\r\n\t * This fires many times\r\n\t */\r\n\tngAfterViewChecked(): void {\r\n\r\n\t\tif (!this._isLoaded && jQuery(this.domSelector).length > 0) {\r\n\t\t\tthis._loadScrollPosition(this.eventType, this.view);\r\n\t\t\tthis._isLoaded = 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 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 _getVerticalScrollPositions(type: EventsType, view: EventsView): IVerticalScrollPositionsTable {\r\n\t\tlet result: IVerticalScrollPositionsTable;\r\n\r\n\t\tif (!this._eventsScrollPositions) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tswitch (view) {\r\n\t\t\tcase EventsView.TABLE:\r\n\t\t\t\tresult = this._eventsScrollPositions.Table;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsView.LIST:\r\n\t\t\t\tresult = this._eventsScrollPositions.List;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _getVerticalScrollPosition(type: EventsType, view: EventsView): number {\r\n\t\tlet positions: IVerticalScrollPositionsTable;\r\n\t\tlet result: number;\r\n\r\n\t\tpositions = this._getVerticalScrollPositions(type, view);\r\n\r\n\t\tif (!positions) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase EventsType.ALL:\r\n\t\t\t\tresult = positions.All;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.WATER:\r\n\t\t\t\tresult = positions.Water;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.FERTILIZER:\r\n\t\t\t\tresult = positions.Fertilizer;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.SOILSAMPLES:\r\n\t\t\t\tresult = positions.SoilSamples;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _loadScrollPosition(type: EventsType, view: EventsView): void {\r\n\t\tlet position: number;\r\n\r\n\t\tposition = this._getVerticalScrollPosition(type, view);\r\n\r\n\t\tjQuery('all-events-modal .bk-modal__scroll-area.bk-modal__events-container').\r\n\t\t\tscrollTop(position);\r\n\t}\r\n\r\n\tprivate _setVerticalScrollPosition(type: EventsType, positions: IVerticalScrollPositionsTable,\r\n\t\tvalue: number): void {\r\n\r\n\t\tif (!positions) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase EventsType.ALL:\r\n\t\t\t\tpositions.All = value;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.WATER:\r\n\t\t\t\tpositions.Water = value;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.FERTILIZER:\r\n\t\t\t\tpositions.Fertilizer = value;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.SOILSAMPLES:\r\n\t\t\t\tpositions.SoilSamples = value;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Keep track of vertical scroll positions\r\n\t *\r\n\t * @param type\r\n\t * @param view\r\n\t */\r\n\tprivate _trackScrollPosition(type: EventsType, view: EventsView): void {\r\n\r\n\t\tthis._setVerticalScrollPosition(type, this._getVerticalScrollPositions(type, view),\r\n\t\t\tjQuery('all-events-modal .bk-modal__scroll-area.bk-modal__events-container').scrollTop());\r\n\t}\r\n\r\n\tprivate _resetScrollPosition(type: EventsType, view: EventsView) {\r\n\t\tthis._setVerticalScrollPosition(type, this._getVerticalScrollPositions(type, view), 0);\r\n\t}\r\n\r\n\tpublic setEventsTableDetailsData(data: IEventDetails) {\r\n\t\tthis.eventTableDetailsData = data;\r\n\t}\r\n\r\n\tpublic getStringFromEventsType(type: EventsType): string {\r\n\t\treturn EventUtility.getStringFromEventsType(type);\r\n\t}\r\n\r\n\tprivate _resetView(): void {\r\n\t\t// Modal.eventsResize();\r\n\r\n\t\tif (this.events && this.events.length > 0 && this._typeChanged === true) {\r\n\t\t\t// assume that if this.events is empty, the popup isn't actually active\r\n\r\n\t\t\tthis._loadScrollPosition(this.eventType, this.view); // load previous position\r\n\t\t\tthis._typeChanged = false;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _handleWindowResize(): void {\r\n\t\tlet windowWidth: number;\r\n\r\n\t\t// Modal.eventsResize();\r\n\r\n\t\twindowWidth = jQuery(window).width();\r\n\r\n\t\tif (this.view === EventsView.TOTALS && windowWidth >= 768) {\r\n\t\t\t// default to list view, because Totals view isn't visible on mobile\r\n\t\t\tthis.setView(EventsView.LIST);\r\n\t\t}\r\n\r\n\t\tif (this.view === EventsView.TABLE && this.eventType === EventsType.WATER && windowWidth < 768) {\r\n\t\t\tif (this.eventsTableComponent && this.eventsTableComponent.showAdditionalWaterData) {\r\n\t\t\t\tthis.dropdownSelectedItem = 'AdditionalWater';\r\n\t\t\t} else {\r\n\t\t\t\tthis.dropdownSelectedItem = 'Water';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _initializeUnits(): void {\r\n\t\tthis._toggleUnits('Water', 'hours');\r\n\t\tthis._toggleUnits('Fertilizer', 'fertilizerUnit');\r\n\t\tthis._toggleUnits('SoilSamples', 'ppmNitrate-N');\r\n\t}\r\n\r\n\tpublic onToggleUnits(event: { type: string, value: string }): void {\r\n\t\tif (!event) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._toggleUnits(event.type, event.value);\r\n\t}\r\n\r\n\tprivate _toggleUnits(type: string, value: string) {\r\n\t\tif (type === 'Water') {\r\n\t\t\tthis.waterUnits = value;\r\n\t\t} else if (type === 'Fertilizer') {\r\n\t\t\tthis.fertilizerUnits = value;\r\n\t\t} else if (type === 'SoilSamples') {\r\n\t\t\tthis.soilSamplesUnits = value;\r\n\t\t}\r\n\t\tthis._updateService.toggleUnits(type, value);\r\n\t}\r\n\r\n\tprivate _clear() {\r\n\t\tthis.planting = null;\r\n\t\tthis.view = EventsView.LIST;\r\n\t\tthis.eventType = EventsType.ALL;\r\n\t\tthis._allEvents = new Array();\r\n\t\tthis.events = new Array();\r\n\t\tthis.totalRecommendedWater = 0;\r\n\t\tthis.appliedWater = 0;\r\n\t\tthis.rainfall = 0;\r\n\t\tthis.numFertilizationEvents = 0;\r\n\t\tthis.numIrrigationEvents = 0;\r\n\t\tthis.recommendedFertilizer = 0;\r\n\t\tthis.numSoilSamples = 0;\r\n\t\tthis.numTissueSamples = 0;\r\n\t\tthis.numCuttings = 0;\r\n\t\tthis._initializeUnits();\r\n\r\n\t\tthis.eventTableDetailsData = {\r\n\t\t\tfertilizationRecommendationDetails: null,\r\n\t\t\tirrigationRecommendationDetails: null,\r\n\t\t\tirrigationRecommendationDetailsType: null\r\n\t\t};\r\n\r\n\t\tthis.showAdditionalWaterDataLoader = true;\r\n\t\tthis.loadingData = true;\r\n\t\tthis.dropdownSelectedItem = 'All';\r\n\t\tthis.hasFlowmeterFileName = false;\r\n\t\tthis.maturities = null;\r\n\t\tthis.isNDependent = null;\r\n\t\tthis.hasFloodEvents = false;\r\n\t\tthis.hasCutEvents = false;\r\n\t\tthis.eventDialogParams = null;\r\n\t}\r\n\r\n\tprivate _getAllEvents(id: number, commodityTypeId: number) {\r\n\t\tthis._plantingService.getAllEvents(id)\r\n\t\t.then(res => {\r\n\t\t\tres = EventGroup.createMetadata(res, commodityTypeId,\r\n\t\t\t\tthis.maturities);\r\n\r\n\t\t\tthis._allEvents = EventGroup.sortEvents(res);\r\n\t\t\tthis.events = this._allEvents;\r\n\r\n\t\t\tthis._calculateTotals();\r\n\t\t\tthis.loadingData = false;\r\n\t\t\t// Modal.eventsResize();\r\n\r\n\t\t\tthis._irrigationService.getAdditionalWaterData(id)\r\n\t\t\t\t.then((waterData) => {\r\n\t\t\t\t\tthis._allEvents = this._plantingService.combineAdditionalDataWithAllEvents(this._allEvents, waterData);\r\n\t\t\t\t\tthis._processAdditionalIrrigationEventsData();\r\n\t\t\t\t\tthis.showAdditionalWaterDataLoader = false;\r\n\t\t\t\t\t// Modal.eventsResize();\r\n\t\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _processAdditionalIrrigationEventsData(): void {\r\n\r\n\t\tif (!this._allEvents || this._allEvents.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let event of this._allEvents) {\r\n\t\t\tif (!event.Irrigation) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (event.Irrigation.AdditionalData) {\r\n\t\t\t\tevent.IrrigationCropCoefficient = event.Irrigation.AdditionalData.CropCoefficient;\r\n\t\t\t\tevent.IrrigationCanopyCover = event.Irrigation.AdditionalData.CanopyCover;\r\n\t\t\t\tevent.IrrigationReferenceET = event.Irrigation.AdditionalData.ReferenceET;\r\n\t\t\t\tevent.IrrigationTotalCropET = event.Irrigation.AdditionalData.TotalCropET;\r\n\t\t\t\tevent.IrrigationAvailableSoilMoisture = event.Irrigation.AdditionalData.AvailableSoilMoisture;\r\n\t\t\t} else {\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}\r\n\t\t}\r\n\r\n\t\tthis._filterEvents(this.eventType);\r\n\t}\r\n\r\n\tpublic setView(view: EventsView) {\r\n\t\tif (this.view === view) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.dropdownSelectedItem = EventUtility.getStringFromEventsType(this.eventType);\r\n\r\n\t\tif (this.eventsTableComponent) {\r\n\t\t\tthis.eventsTableComponent.setShowAdditionalWaterData(false);\r\n\t\t}\r\n\r\n\t\tthis.view = view;\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\twindow.removeEventListener('orientationchange', this._orientationChangeListener);\r\n\t\twindow.removeEventListener('resize', this._resizeListener);\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tpublic setType(eventType: EventsType) {\r\n\t\tif (eventType === this.eventType) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._typeChanged = true;\r\n\r\n\t\tif (this.view !== EventsView.TOTALS) {\r\n\t\t\tthis._resetScrollPosition(eventType, this.view);\r\n\t\t}\r\n\r\n\t\tthis.eventType = eventType;\r\n\t\tthis._filterEvents(eventType);\r\n\t}\r\n\r\n\tpublic onTypeSelect(value: string): void {\r\n\t\tlet type: EventsType;\r\n\r\n\t\tif (value === 'AdditionalWater') {\r\n\t\t\tthis.showAdditionalWaterDataTable();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (value === 'Totals') {\r\n\t\t\tthis.setView(EventsView.TOTALS);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.view === EventsView.TOTALS) {\r\n\t\t\t// default to list view\r\n\t\t\tthis.setView(EventsView.LIST);\r\n\t\t}\r\n\r\n\t\tif (this.eventsTableComponent) {\r\n\t\t\tthis.eventsTableComponent.setShowAdditionalWaterData(false);\r\n\t\t}\r\n\r\n\t\ttype = EventUtility.getEventsTypeFromString(value);\r\n\r\n\t\tthis.setType(type);\r\n\t}\r\n\r\n\tpublic showAdditionalWaterDataTable(): void {\r\n\t\tthis.view = EventsView.TABLE;\r\n\t\tthis.eventType = EventsType.WATER;\r\n\t\tthis._filterEvents(EventsType.WATER);\r\n\r\n\t\tif (this.eventsTableComponent) {\r\n\t\t\tthis.eventsTableComponent.setShowAdditionalWaterData(true);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _filterEvents(eventType: EventsType): void {\r\n\r\n\t\tif (!this._allEvents) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tswitch (eventType) {\r\n\t\t\tcase EventsType.ALL:\r\n\t\t\t\tthis.events = this._allEvents;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.WATER:\r\n\t\t\t\tthis.events = this._allEvents.filter(data => data.Irrigation !== null);\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.FERTILIZER:\r\n\t\t\t\tthis.events = this._allEvents.filter(data => data.Fertilization !== null &&\r\n\t\t\t\t\tdata.Fertilization.length > 0);\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.SOILSAMPLES:\r\n\t\t\t\tthis.events = this._allEvents.filter(data => data.SoilSamples !== null &&\r\n\t\t\t\t\tdata.SoilSamples.length > 0);\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.CUTTING:\r\n\t\t\t\tthis.events = this._allEvents.filter(data => data.CutEvent !== null);\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.TISSUE_SAMPLE:\r\n\t\t\t\tthis.events = this._allEvents.filter(data => data.TissueSamples !== null\r\n\t\t\t\t\t&& data.TissueSamples.length > 0);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tthis._calculateTotals();\r\n\t}\r\n\r\n\tpublic editEvent(data: { eventType: EventsType, id?: number }): void {\r\n\r\n\t\tthis._trackScrollPosition(this.eventType, this.view);\r\n\r\n\t\tif (!data || !data.eventType) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.eventDialogUtility.open(data.eventType, data.id);\r\n\t\tthis.hide();\r\n\t}\r\n\r\n\tprivate _calculateTotals(): void {\r\n\t\tlet totalRecommended = 0;\r\n\t\tlet appliedWater = 0;\r\n\t\tlet rainfall = 0;\r\n\t\tlet numIrrigationEvents = 0;\r\n\t\tlet numFertilizationEvents = 0;\r\n\t\tlet appliedN = 0;\r\n\t\tlet recommendedFertilizer = 0;\r\n\t\tlet numSoilSamples = 0; // these temporary variables prevent the view from updating many times\r\n\t\tlet numTissueSamples = 0;\r\n\t\tlet numCuttings = 0;\r\n\t\tlet numNotApplied: INotApplied = {\r\n\t\t\tirrigation: 0,\r\n\t\t\tfertilization: 0\r\n\t\t};\r\n\r\n\t\tif (!this.events || this.events.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let event of this.events) {\r\n\t\t\tif (event.Irrigation) {\r\n\t\t\t\tnumIrrigationEvents += 1;\r\n\r\n\t\t\t\tif (event.Irrigation.ContributingRainfall > 0) { // protect against adding undefined\r\n\t\t\t\t\trainfall += event.Irrigation.ContributingRainfall;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.Irrigation.Rainfall > 0) {\r\n\t\t\t\t\trainfall += event.Irrigation.Rainfall;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tappliedWater += event.Irrigation.WaterApplied;\r\n\r\n\t\t\t\tif (event.Irrigation.RecommendedIrrigationAmount > 0) {\r\n\t\t\t\t\ttotalRecommended += event.Irrigation.RecommendedIrrigationAmount;\r\n\r\n\t\t\t\t\tif (!event.Irrigation.WaterApplied) {\r\n\t\t\t\t\t\tnumNotApplied.irrigation++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (event.Fertilization && event.Fertilization.length > 0) {\r\n\t\t\t\t// assume that at this point, each event Group contains a single fertilization event\r\n\t\t\t\tnumFertilizationEvents += 1;\r\n\r\n\t\t\t\tif (event.Fertilization[0].FertilizerApplied) {\r\n\t\t\t\t\tappliedN += event.Fertilization[0].convertFertilizerAmountToLbsN(event.Fertilization[0].FertilizerApplied);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.Fertilization[0].FertilizerApplied === null) {\r\n\t\t\t\t\tnumNotApplied.fertilization++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.Fertilization[0].Recommendation.cropManage > 0) {\r\n\t\t\t\t\trecommendedFertilizer += event.Fertilization[0].Recommendation.cropManage;\r\n\t\t\t\t} else if (event.Fertilization[0].Recommendation.manager > 0) {\r\n\t\t\t\t\trecommendedFertilizer += event.Fertilization[0].Recommendation.manager;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (event.SoilSamples[0]) {\r\n\t\t\t\tnumSoilSamples += 1;\r\n\t\t\t}\r\n\r\n\t\t\tif (event.TissueSamples[0]) {\r\n\t\t\t\tnumTissueSamples++;\r\n\t\t\t}\r\n\r\n\t\t\tif (event.CutEvent) {\r\n\t\t\t\tnumCuttings += 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// apply after calculation to prevent triggering multiple change detections\r\n\t\tthis.totalRecommendedWater = totalRecommended;\r\n\t\tthis.appliedWater = appliedWater;\r\n\t\tthis.rainfall = rainfall;\r\n\t\tthis.numIrrigationEvents = numIrrigationEvents;\r\n\t\tthis.numFertilizationEvents = numFertilizationEvents;\r\n\t\tthis.appliedN = appliedN;\r\n\t\tthis.recommendedFertilizer = recommendedFertilizer;\r\n\t\tthis.numSoilSamples = numSoilSamples;\r\n\t\tthis.numTissueSamples = numTissueSamples;\r\n\t\tthis.numCuttings = numCuttings;\r\n\t\tthis.numNotApplied = numNotApplied;\r\n\t}\r\n\r\n\tpublic openRainfallDataModal(): void {\r\n\t\tthis._dialog.open(RainfallDataComponent, {\r\n\t\t\tdata: {\r\n\t\t\t\tid: this.planting.Id,\r\n\t\t\t\tname: this.planting.Name\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.hide();\r\n\t}\r\n\r\n\tpublic openFlowmeterDataModal(): void {\r\n\t\tlet dialogConfig: MatDialogConfig;\r\n\r\n\t\tdialogConfig = {\r\n\t\t\tdisableClose: true,\r\n\r\n\t\t\tdata: {\r\n\t\t\t\tplantingId: this.planting.Id,\r\n\t\t\t\tplantingName: this.planting.Name,\r\n\t\t\t\tstartDate: this.planting.WetDate,\r\n\t\t\t\tendDate: this.planting.HarvestDate,\r\n\t\t\t\tchartType: chartTypes.summary\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._dialog.open(FlowmeterChartDialog, dialogConfig);\r\n\t\tthis.hide();\r\n\t}\r\n\r\n\tpublic toggleAddtionalWaterData(): void {\r\n\t\tthis.eventsTableComponent.toggleAddtionalWaterData();\r\n\t}\r\n}\r\n","<div class=\"bk-event-calculation-details__cell--table\r\n    bk-event-calculation-details__cell--four-col\"\r\n    *ngIf=\"model !== undefined\">\r\n    <div class=\"bk-event-calculation-details__value\">\r\n        {{model | number: '1.2-2'}} \r\n        <ng-container *ngIf='unit === units.LBNACRE'>\r\n            {{'lbs' | translate }} N/{{'acre' | translate }}\r\n        </ng-container>\r\n        <ng-container *ngIf='unit === units.PERCENTAGE'>\r\n            %\r\n        </ng-container>\r\n    </div>\r\n    <div class=\"bk-event-calculation-details__toggle\"\r\n        (click)=\"toggle = !toggle\">\r\n        <div class=\"bk-event-calculation-details__toggle-text\">\r\n            {{label | translate }}\r\n        </div>\r\n        <i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\">\r\n        </i>\r\n    </div>\r\n    <div class=\"bk-event-calculation-details__text\"\r\n        *ngIf=\"toggle\">\r\n        {{explanation | translate }}\r\n    </div>\r\n</div>","import { Component, OnInit, Input } from '@angular/core';\r\n\r\nexport enum eHoverPanelUnits {\r\n\tLBNACRE = 1,\r\n\tPERCENTAGE = 2,\r\n\tNO_UNIT = 3\r\n}\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'fertilization-hover-col',\r\n\ttemplateUrl: 'fertilization-hover-col.html',\r\n\tstyleUrls: ['fertilization-hover-col.scss']\r\n})\r\n\r\nexport class FertilizationHoverColComponent implements OnInit {\r\n\r\n\t@Input() model: number;\r\n\t@Input() label: string;\r\n\t@Input() explanation: string;\r\n\t@Input() toggle: boolean;\r\n\t@Input() unit: number;\r\n\r\n\tpublic units = eHoverPanelUnits;\r\n\r\n\tngOnInit() {\r\n\t\tif (!this.unit) {\r\n\t\t\tthis.unit = eHoverPanelUnits.LBNACRE; // default to lbs N / acre\r\n\t\t}\r\n\t}\r\n}\r\n","<ng-container *ngIf=\"recommendationSummary\">\r\n    <div class=\"bk-event-calculation-details__formula-row\">\r\n        <div class=\"bk-event-calculation-details__formula-description\">\r\n            {{equationDescriptions[0]}}\r\n        </div>\r\n        <div class=\"bk-event-calculation-details__formula\">\r\n            {{equations[0]}}\r\n        </div>\r\n        <div *ngIf=\"equationDescriptions[1] !== undefined\"\r\n            class=\"bk-event-calculation-details__formula-description\"\r\n            [innerHTML]=\"equationDescriptions[1]\">\r\n        </div>\r\n        <div *ngIf=\"equations[1] !== undefined\"\r\n            class=\"bk-event-calculation-details__formula\">\r\n            {{equations[1]}}\r\n        </div>\r\n        <div *ngIf=\"equationDescriptions[2] !== undefined\"\r\n            class=\"bk-event-calculation-details__formula-description\"\r\n            [innerHTML]=\"equationDescriptions[2]\">\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"bk-event-calculation-details__cells bk-event-calculation-details__cells--table\">\r\n\r\n        <fertilization-hover-col [model]='recommendationSummary.TotalCropNDemand'\r\n            [label]='\"Seasonal Crop N Demand\"'\r\n            [explanation]='\"Seasonal Crop N Demand Text\"'>\r\n        </fertilization-hover-col>\r\n\r\n        <fertilization-hover-col [model]='recommendationSummary.NSoilAmendments'\r\n            [label]='\"N Soil Amendments\"'\r\n            [explanation]='\"N Soil Amendments Text\"'>\r\n        </fertilization-hover-col>\r\n\r\n        <fertilization-hover-col [model]='recommendationSummary.UseEfficiency'\r\n            [label]='\"Fertilizer N Use Efficiency\"'\r\n            [unit]=\"hoverPanelUnits.PERCENTAGE\"\r\n            [explanation]='\"Fertilizer N Use Efficiency Text\"'>\r\n        </fertilization-hover-col>\r\n\r\n        <div class=\"bk-event-calculation-details__cell--table bk-event-calculation-details__cell--four-col\"\r\n            *ngIf=\"recommendationSummary.NUptakeDifference != null\">\r\n            <div class=\"bk-event-calculation-details__value\">\r\n                {{recommendationSummary.NUptakeDifference | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__sub-value\"\r\n                *ngIf=\"recommendationSummary.DaysToNextFertilization > 0\">\r\n                ({{ recommendationSummary.DaysToNextFertilization }} Days)\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__toggle\"\r\n                (click)=\"summaryToggles.NUptakeDifference = !summaryToggles.NUptakeDifference\">\r\n                <div class=\"bk-event-calculation-details__toggle-text\">\r\n                    {{'Crop N Uptake' | translate }}\r\n                </div>\r\n                <i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__text\"\r\n                *ngIf=\"summaryToggles.NUptakeDifference\">\r\n                {{'Future N Uptake Text' | translate }}\r\n            </div>\r\n        </div>\r\n\r\n        <fertilization-hover-col [model]='recommendationSummary.NFertilizerFactor'\r\n            [label]='\"N Fertilizer Factor\"'\r\n            [unit]=\"hoverPanelUnits.NO_UNIT\"\r\n            [explanation]='\"NFertilizerFactor Text\"'>\r\n        </fertilization-hover-col>\r\n\r\n        <div class=\"bk-event-calculation-details__cell--table bk-event-calculation-details__cell--four-col\"\r\n            *ngIf=\"recommendationSummary.SoilN != null\">\r\n            <div class=\"bk-event-calculation-details__value\">\r\n                {{recommendationSummary.SoilN | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__sub-value\"\r\n                *ngIf=\"recommendationSummary.SoilNppm !== null\">\r\n                ({{ recommendationSummary.SoilNppm | number: '1.2-2' }} ppm N)\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__toggle\"\r\n                (click)=\"summaryToggles.soilN = !summaryToggles.soilN\">\r\n                <div class=\"bk-event-calculation-details__toggle-text\">\r\n                    {{'Soil N' | translate }}\r\n                </div>\r\n                <i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__text\"\r\n                *ngIf=\"summaryToggles.soilN\">\r\n                {{'Soil N Text' | translate }}\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"bk-event-calculation-details__cell--table bk-event-calculation-details__cell--four-col\"\r\n            *ngIf=\"recommendationSummary.SoilNThreshold != null\">\r\n            <div class=\"bk-event-calculation-details__value\">\r\n                {{recommendationSummary.SoilNThreshold | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__sub-value\"\r\n                *ngIf=\"recommendationSummary.SoilNThresholdppm !== null\">\r\n                ({{ recommendationSummary.SoilNThresholdppm | number: '1.2-2' }} ppm N)\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__toggle\"\r\n                (click)=\"summaryToggles.soilNThreshold = !summaryToggles.soilNThreshold\">\r\n                <div class=\"bk-event-calculation-details__toggle-text\">\r\n                    {{'Soil N Threshold' | translate }}\r\n                </div>\r\n                <i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__text\"\r\n                *ngIf=\"summaryToggles.soilNThreshold\">\r\n                {{'Soil N Threshold Text' | translate }}\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"bk-event-calculation-details__cell--table bk-event-calculation-details__cell--four-col\"\r\n            *ngIf=\"recommendationSummary.FertilizationsPerMonth > 0\">\r\n            <div class=\"bk-event-calculation-details__value\">\r\n                {{recommendationSummary.FertilizationsPerMonth | number: '1.2-2'}}\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__toggle\"\r\n                (click)=\"summaryToggles.FertilizationsPerMonth = !summaryToggles.FertilizationsPerMonth\">\r\n                <div class=\"bk-event-calculation-details__toggle-text\">\r\n                    {{'Fertilizations Per Month' | translate }}\r\n                </div>\r\n                <i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__text\"\r\n                *ngIf=\"summaryToggles.FertilizationsPerMonth\">\r\n                {{'Fertilizations Per Month Text' | translate }}\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"bk-event-calculation-details__cell--table bk-event-calculation-details__cell--four-col\"\r\n            *ngIf=\"recommendationSummary.NMineralTotal != null\">\r\n            <div class=\"bk-event-calculation-details__value\">\r\n                {{recommendationSummary.NMineralTotal | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__sub-value\"\r\n                *ngIf=\"recommendationSummary.DaysToNextFertilization > 0\">\r\n                ({{ recommendationSummary.DaysToNextFertilization }} Days)\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__toggle\"\r\n                (click)=\"summaryToggles.NMineralTotal = !summaryToggles.NMineralTotal\">\r\n                <div class=\"bk-event-calculation-details__toggle-text bk-label--n-mineralization\">\r\n                    {{'Total Mineralized N' | translate }}\r\n                </div>\r\n                <i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__text\"\r\n                *ngIf=\"summaryToggles.NMineralTotal\">\r\n                {{(!isTree ? 'N from Mineralization Text' :\r\n                    'Soil N Mineralization Text') | translate }}\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"bk-event-calculation-details__cell--table bk-event-calculation-details__cell--four-col\"\r\n            *ngIf=\"recommendationSummary.NAppliedFromWater > 0\">\r\n            <div class=\"bk-event-calculation-details__value\">\r\n                {{recommendationSummary.NAppliedFromWater | number: '1.2-2'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__toggle\"\r\n                (click)=\"summaryToggles.NAppliedFromWater = !summaryToggles.NAppliedFromWater\">\r\n                <div class=\"bk-event-calculation-details__toggle-text\">\r\n                    {{'Water N Contribution' | translate }}\r\n                </div>\r\n                <i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n            </div>\r\n            <div class=\"bk-event-calculation-details__text\"\r\n                *ngIf=\"summaryToggles.NAppliedFromWater\">\r\n                {{'Water N Contribution Text' | translate }}\r\n            </div>\r\n        </div>\r\n    </div>\r\n</ng-container>","import { Component, Input, OnChanges } from '@angular/core';\r\nimport { ValidateService } from '../../../../services/validate.service';\r\n\r\nimport { FertilizationRecommendedSummaryViewModel, StrawberryFertilizationRecommendedSummaryViewModel, IFertilizationEvent,\r\n\tAlmondRecommendationSummaryModel} from '../../../fertilization-event/interfaces';\r\n\r\nimport { eHoverPanelUnits } from './fertilization-hover-col';\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-hover-panel',\r\n\ttemplateUrl: 'fertilization-recommendation-hover-panel.html'\r\n})\r\n\r\nexport class FertilizationHoverPanelComponent extends FertilizationRecommendationComponent implements OnChanges {\r\n\t@Input()\r\n\tinTable: boolean;\r\n\r\n\t@Input()\r\n\tnInWaterLbAcre: number;\r\n\r\n\t@Input()\r\n\tisFormulationTypeDry: boolean;\r\n\r\n\t/**\r\n\t * Used to display detailed information inside the hover panel template\r\n\t */\r\n\t@Input()\r\n\trecommendationSummary: FertilizationRecommendedSummaryViewModel\r\n\t\t| StrawberryFertilizationRecommendedSummaryViewModel\r\n\t\t| AlmondRecommendationSummaryModel;\r\n\r\n\tpublic validateService = ValidateService;\r\n\tpublic hoverPanelUnits = eHoverPanelUnits;\r\n\tpublic isTree = false;\r\n\r\n\tpublic summaryToggles = {\r\n\t\tsoilN: false,\r\n\t\tsoilNThreshold: false,\r\n\t\tNMineralTotal: false,\r\n\t\tNUptakeDifference: false,\r\n\t\tFertilizationsPerMonth: false,\r\n\t\tNAppliedFromWater: false\r\n\t}\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\tsuper(_translateService);\r\n\t}\r\n\r\n\tngOnChanges(): void {\r\n\t\tif (this.recommendationSummary !== null) {\r\n\t\t\tthis.render(this.recommendationSummary);\r\n\t\t}\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=\"eventType == eventTypes.FERTILIZER\">\r\n\t<table class=\"bk-event-table\">\r\n\r\n\t\t<!-- headers -->\r\n\r\n\t\t<thead>\r\n\t\t\t<tr>\r\n\t\t\t\t<th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n\t\t\t\t\t[class.bk-event-table__header--desc]=\"plantingService.sortField.Fertilizer=='EventDateString' &&\r\n\t\t\t\t\tplantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t[class.bk-event-table__header--asc]=\"plantingService.sortField.Fertilizer=='EventDateString' &&\r\n\t\t\t\t\t!plantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t(click)=\"plantingService.sort('Fertilizer','EventDateString', eventType)\">\r\n\r\n\t\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t\t{{'Date' | translate }}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n\t\t\t\t\t<i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n\t\t\t\t</th>\r\n\t\t\t\t<th *ngIf=\"isNDependent && !isTree\"\r\n\t\t\t\t\tclass=\"bk-event-table__header bk-event-table__header--sort\" \r\n\t\t\t\t\t[class.bk-event-table__header--desc]=\"plantingService.sortField.Fertilizer=='FertilizationsoilNitrate' &&\r\n\t\t\t\t\tplantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t[class.bk-event-table__header--asc]=\"plantingService.sortField.Fertilizer=='FertilizationsoilNitrate' &&\r\n\t\t\t\t\t!plantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t(click)=\"plantingService.sort('Fertilizer','FertilizationsoilNitrate', eventType)\">\r\n\r\n\t\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t\t{{'Soil N03-N' | translate }}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n\t\t\t\t\t<i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n\t\t\t\t</th>\r\n\t\t\t\t<th *ngIf=\"isNDependent\"\r\n\t\t\t\t\tclass=\"bk-event-table__header bk-event-table__header--sort\" \r\n\t\t\t\t\t[class.bk-event-table__header--desc]=\"plantingService.sortField.Fertilizer=='FertilizationnNAppliedFromWater' &&\r\n\t\t\t\t\tplantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t[class.bk-event-table__header--asc]=\"plantingService.sortField.Fertilizer=='FertilizationnNAppliedFromWater' &&\r\n\t\t\t\t\t!plantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t(click)=\"plantingService.sort('Fertilizer','FertilizationNAppliedFromWater', eventType)\">\r\n\r\n\t\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t\t{{'N Contribution From Water' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n\t\t\t\t\t<i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n\t\t\t\t</th>\r\n\t\t\t\t<th *ngIf=\"isNDependent\"\r\n\t\t\t\t\tclass=\"bk-event-table__header bk-event-table__header--sort\" \r\n\t\t\t\t\t[class.bk-event-table__header--desc]=\"plantingService.sortField.Fertilizer=='FertilizationNUptake' &&\r\n\t\t\t\t\tplantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t[class.bk-event-table__header--asc]=\"plantingService.sortField.Fertilizer=='FertilizationNUptake' &&\r\n\t\t\t\t\t!plantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t(click)=\"plantingService.sort('Fertilizer','FertilizationNUptake', eventType)\">\r\n\r\n\t\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t\t{{'Cumulative N Uptake' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n\t\t\t\t\t<i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n\t\t\t\t</th>\r\n\t\t\t\t<th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n\t\t\t\t\t[class.bk-event-table__header--desc]=\"plantingService.sortField.Fertilizer=='FertilizationFertilizerName' &&\r\n\t\t\t\t\tplantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t[class.bk-event-table__header--asc]=\"plantingService.sortField.Fertilizer=='FertilizationFertilizerName' &&\r\n\t\t\t\t\t!plantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t(click)=\"plantingService.sort('Fertilizer','FertilizationFertilizerName', eventType)\">\r\n\r\n\t\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t\t{{'Fertilizer' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n\t\t\t\t\t<i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n\t\t\t\t</th>\r\n\t\t\t\t<th class=\"bk-event-table__header bk-event-table__header--sort bk-event-table__header--total\"\r\n\t\t\t\t\t[class.bk-event-table__header--total-alt]=\"!isNDependent\"\r\n\t\t\t\t\t[class.bk-event-table__header--desc]=\"plantingService.sortField.Fertilizer=='FertilizationRecommendation' &&\r\n\t\t\t\t\tplantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t[class.bk-event-table__header--asc]=\"plantingService.sortField.Fertilizer=='FertilizationRecommendation' &&\r\n\t\t\t\t\t!plantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t(click)=\"plantingService.sort('Fertilizer','FertilizationRecommendation', eventType)\">\r\n\r\n\t\t\t\t\t<div *ngIf=\"isNDependent\"\r\n\t\t\t\t\t\tclass=\"bk-event-table__header-text\" >\r\n\t\t\t\t\t\t{{'CropManage N Recommendation' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"!isNDependent\"\r\n\t\t\t\t\t\tclass=\"bk-event-table__header-text\" >\r\n\t\t\t\t\t\t{{'Manager Amount' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n\t\t\t\t\t<i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n\t\t\t\t</th>\r\n\t\t\t\t<th *ngIf=\"plantingService.units.fertilizer == 'fertilizerUnit'\"\r\n\t\t\t\t\tclass=\"bk-event-table__header bk-event-table__header--sort bk-event-table__header--total\"\r\n\t\t\t\t\t[class.bk-event-table__header--total-alt]=\"!isNDependent\"\r\n\t\t\t\t\t[class.bk-event-table__header--desc]=\"plantingService.sortField.Fertilizer=='FertilizationFertilizerApplied' &&\r\n\t\t\t\t\tplantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t[class.bk-event-table__header--asc]=\"plantingService.sortField.Fertilizer=='FertilizationFertilizerApplied' &&\r\n\t\t\t\t\t!plantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t(click)=\"plantingService.sort('Fertilizer','FertilizationFertilizerApplied', eventType)\">\r\n\r\n\t\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t\t{{'Fertilizer Applied' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n\t\t\t\t\t<i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n\t\t\t\t</th>\r\n\t\t\t\t<th *ngIf=\"plantingService.units.fertilizer == 'lbsNPerAcre'\"\r\n\t\t\t\t\tclass=\"bk-event-table__header bk-event-table__header--sort bk-event-table__header--total\"\r\n\t\t\t\t\t[class.bk-event-table__header--total-alt]=\"!isNDependent\"\r\n\t\t\t\t\t[class.bk-event-table__header--desc]=\"plantingService.sortField.Fertilizer=='FertilizationNApplied' &&\r\n\t\t\t\t\t\tplantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t[class.bk-event-table__header--asc]=\"plantingService.sortField.Fertilizer=='FertilizationNApplied' &&\r\n\t\t\t\t\t\t!plantingService.sortDescending.Fertilizer\"\r\n\t\t\t\t\t(click)=\"plantingService.sort('Fertilizer','FertilizationNApplied', eventType)\">\r\n\r\n\t\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t\t{{'Fertilizer Applied' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n\t\t\t\t\t<i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n\t\t\t\t</th>\r\n\t\t\t\t<th class=\"bk-event-table__header bk-event-table__header--sort bk-event-table__header--total\">\r\n\t\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t\t{{'Nutrients' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</th>\r\n\t\t\t</tr>\r\n\t\t</thead>\r\n\r\n\t\t<!-- results -->\r\n\r\n\t\t<tbody>\r\n\t\t\t<ng-container *ngFor=\"let event of events | orderBy: plantingService.sortColumn('Fertilizer')\">\r\n\r\n\t\t\t\t<!-- fertilization event row START -->\r\n\r\n\t\t\t\t<tr *ngIf=\"event.Fertilization && event.Fertilization.length > 0\"\r\n\t\t\t\t\t[class.bk-event-table__row--open]=\"event.Fertilization[0].ShowDetails\"\r\n\t\t\t\t\tclass=\"bk-event-table__row\"\r\n\t\t\t\t\t(click)=\"openModal(eventTypes.FERTILIZER, event.Fertilization[0].Id, $event)\" >\r\n\r\n\t\t\t\t\t<td class=\"bk-event-table__cell\">\r\n\t\t\t\t\t\t<div class=\"bk-text--nobr\">\r\n\t\t\t\t\t\t\t<span class=\"bk-event-table__cell-text\">\r\n\t\t\t\t\t\t\t\t{{event.EventDate | date:'M/d/yyyy' }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</td>\r\n\r\n\t\t\t\t\t<!-- NDependent version -->\r\n\r\n\t\t\t\t\t<td *ngIf=\"isNDependent && !isTree\"\r\n\t\t\t\t\t\tclass=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n\t\t\t\t\t\t<span *ngIf=\"event.Fertilization[0].SoilNitrate\">\r\n\t\t\t\t\t\t\t{{event.Fertilization[0].SoilNitrate | number: '1.0-1'}}\r\n\t\t\t\t\t\t</span><span *ngIf=\"!event.Fertilization[0].SoilNitrate\">\r\n\t\t\t\t\t\t\tN/A\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span *ngIf=\"event.Fertilization[0].SoilNitrate\"\r\n\t\t\t\t\t\t\tclass=\"bk-unit-text\">\r\n\t\t\t\t\t\t\t{{'ppm' | translate}}\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 *ngIf=\"isNDependent\"\r\n\t\t\t\t\t\tclass=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t{{event.Fertilization[0].NAppliedFromWater | number: '1.0-1' | NAIfEmpty}}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span *ngIf=\"event.Fertilization[0].NAppliedFromWater !== null\"\r\n\t\t\t\t\t\t\tclass=\"bk-unit-text\">\r\n\t\t\t\t\t\t\t{{'lbs' | translate }} N/{{'acre' | translate }}\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 *ngIf=\"isNDependent\"\r\n\t\t\t\t\t\tclass=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t{{event.Fertilization[0].NUptake | number: '1.0-1'}}\r\n\t\t\t\t\t\t</span><span class=\"bk-unit-text\">\r\n\t\t\t\t\t\t\t{{'lbs' | translate }} N/{{'acre' | translate }}\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 class=\"bk-event-table__cell\">\r\n\t\t\t\t\t\t<span>{{event.Fertilization[0].FertilizerName}}</span>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td *ngIf=\"isNDependent\"\r\n\t\t\t\t\t\tclass=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n\r\n\t\t\t\t\t\t<!-- no manager or crop manage recommendation available -->\r\n\r\n\t\t\t\t\t\t<ng-container *ngIf=\"event.Fertilization[0].Recommendation.cropManage === null ||\r\n\t\t\t\t\t\t\tevent.Fertilization[0].NPercentage === 0\">\r\n\t\t\t\t\t\t\t<span class=\"bk-event-table--event-{{event.Fertilization[0].Id}}\">N/A</span>\r\n\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t<ng-container *ngIf=\"event.Fertilization[0].Recommendation.cropManage !== null\r\n\t\t\t\t\t\t\t&& event.Fertilization[0].NPercentage > 0\">\r\n\r\n\t\t\t\t\t\t\t<!-- cropmanage recommendation -->\r\n\r\n\t\t\t\t\t\t\t<span [class.bk-event-calculation-details__link--open]=\"event.Fertilization &&\r\n\t\t\t\t\t\t\t\tevent.Fertilization.length > 0 && event.Fertilization[0].ShowDetails &&\r\n\t\t\t\t\t\t\t\tdetailsData.fertilizationRecommendationDetails &&\r\n\t\t\t\t\t\t\t\tevent.Fertilization[0].Recommendation.cropManage !== null\"\r\n\t\t\t\t\t\t\t\tclass=\"bk-event-table--event-{{event.Fertilization[0].Id}} stop-modal-open\r\n\t\t\t\t\t\t\t\t\tbk-event-calculation-details__link\"\r\n\t\t\t\t\t\t\t\t(click)=\"event.Fertilization[0].Recommendation.cropManage !== null &&\r\n\t\t\t\t\t\t\t\t\ttoggleFertilizationEventDetails(event.Fertilization[0].Id, $event)\">\r\n\t\t\t\t\t\t\t\t{{event.Fertilization[0].Recommendation.cropManage | number: '1.0-1'}}\r\n\t\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t\t\t<span class=\"bk-unit-text\">\r\n\t\t\t\t\t\t\t\t{{'lbs' | translate }} N/{{'acre' | translate }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<i  *ngIf=\"eventUtility.shouldDisplayFertilizationWarning(event.Fertilization[0], event.isPast)\"\r\n\t\t\t\t\t\t\t\tmatTooltip=\"Recommendation not applied\"\r\n\t\t\t\t\t\t\t\tclass=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n\t\t\t\t\t\t\t</i>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</td>\r\n\r\n\t\t\t\t\t<!-- N independent (alfalfa) version -->\r\n\r\n\t\t\t\t\t<!-- Manager Amount -->\r\n\r\n\t\t\t\t\t<td *ngIf=\"!isNDependent\"\r\n\t\t\t\t\t\tclass=\"bk-event-table__cell bk-event-table__cell--right-align\" >\r\n\t\t\t\t\t\t<ng-container *ngIf=\"event.Fertilization[0].Recommendation.manager === null &&\r\n\t\t\t\t\t\t\t!event.Fertilization[0].Recommendation.managerFertilizerAmount\">\r\n\t\t\t\t\t\t\tN/A\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t<ng-container *ngIf=\"event.Fertilization[0].Recommendation.managerFertilizerAmount != null\">\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{event.Fertilization[0].Recommendation.managerFertilizerAmount | number: '1.0-1'}}\r\n\t\t\t\t\t\t\t<span *ngIf=\"event.Fertilization[0].IsFormulationTypeDry\"\r\n\t\t\t\t\t\t\t\tclass=\"bk-unit-text\">\r\n\t\t\t\t\t\t\t\t{{'lbs' | translate }}/{{'acre' | translate }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<span *ngIf=\"!event.Fertilization[0].IsFormulationTypeDry\"\r\n\t\t\t\t\t\t\t\tclass=\"bk-unit-text\">\r\n\t\t\t\t\t\t\t\t{{'gal' | translate }}/{{'acre' | translate }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</td>\r\n\r\n\t\t\t\t\t<!-- applied value, with NPK Values -->\r\n\r\n\t\t\t\t\t<td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n\t\t\t\t\t\t<ng-container *ngIf=\"plantingService.units.fertilizer == 'fertilizerUnit' || !isNDependent\">\r\n\r\n\t\t\t\t\t\t\t{{event.Fertilization[0].FertilizerApplied | number: '1.0-1' | NAIfEmpty}} \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<span class=\"bk-unit-text\"\r\n\t\t\t\t\t\t\t\t*ngIf=\"event.Fertilization[0].FormulationType === \r\n\t\t\t\t\t\t\t\tFORMULATION_TYPE_DRY && event.Fertilization[0].FertilizerApplied !== null\">\r\n\r\n\t\t\t\t\t\t\t\t{{'lbs' | translate }}/{{'acre' | translate }}\r\n\t\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t\t\t<span class=\"bk-unit-text\"\r\n\t\t\t\t\t\t\t\t*ngIf=\"event.Fertilization[0].FormulationType === FORMULATION_TYPE_WET &&\r\n\t\t\t\t\t\t\t\t\tevent.Fertilization[0].FertilizerApplied !== null\">\r\n\r\n\t\t\t\t\t\t\t\t{{'gal' | translate }}/{{'acre' | translate }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t<ng-container *ngIf=\"plantingService.units.fertilizer == 'lbsNPerAcre' && isNDependent\">\r\n\t\t\t\t\t\t\t{{event.Fertilization[0].NApplied | number: '1.0-1' | NAIfEmpty}} <span class=\"bk-unit-text\"\r\n\t\t\t\t\t\t\t*ngIf=\"event.Fertilization[0].NApplied !== null\">{{'lbs' | translate }}N/{{'acre' | translate }}</span>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</td>\r\n\r\n\t\t\t\t\t<td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n\t\t\t\t\t\t<ng-container *ngIf=\"isNDependent\">\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<div *ngIf=\"event.Fertilization[0].NutrientPercentages &&\r\n\t\t\t\t\t\t\t\t validationService.isValidNumber(event.Fertilization[0].FertilizerApplied)\"\r\n\t\t\t\t\t\t\t\t class=\"bk-event-table__fertilizer--nutrients\">\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t<npk [event]=\"event\"\r\n\t\t\t\t\t\t\t\t\t[fertilizerAmount]=\"event.Fertilization[0].FertilizerApplied\">\r\n\t\t\t\t\t\t\t\t</npk>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\r\n\t\t\t\t<!-- Fertilization recommendation calculation details -->\r\n\r\n\t\t\t\t<tr [hidden]=\"!event.Fertilization || event.Fertilization.length === 0 ||\r\n\t\t\t\t\t!event.Fertilization[0].ShowDetails\">\r\n\t\t\t\t\t<td class=\"bk-event-calculation-details\" colspan=\"9\">\r\n\t\t\t\t\t\t<span (click)=\"closeFertilizationEventDetails()\"\r\n\t\t\t\t\t\t\tclass=\"fa fa-times-circle bk-event-details__close\">\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<h4 class=\"bk-modal__header-title\">\r\n\t\t\t\t\t\t\t{{'CropManage Recommendation' | translate}}\r\n\t\t\t\t\t\t</h4>\r\n\r\n\t\t\t\t\t\t<fertilization-recommendation-hover-panel\r\n\t\t\t\t\t\t\t*ngIf=\"event && event.Fertilization && event.Fertilization.length > 0\"\r\n\t\t\t\t\t\t\t[recommendationSummary]=\"detailsData.fertilizationRecommendationDetails\"\r\n\t\t\t\t\t\t\t[isFormulationTypeDry]=\"event.Fertilization[0].IsFormulationTypeDry\"\r\n\t\t\t\t\t\t\t[nInWaterLbAcre]=\"getNAppliedFromWaterInFertilizerUnits(event.Fertilization[0])\">\r\n\t\t\t\t\t\t</fertilization-recommendation-hover-panel>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t</ng-container>\r\n\t\t</tbody>\r\n\t</table>\r\n</ng-container>","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\n\r\nimport { PlantingService } from '../../../planting-settings/service';\r\nimport { ValidateService } from '../../../../services/validate.service';\r\nimport { FertilizationEventService } from '../../../fertilization-event/service';\r\n\r\nimport { JQueryHelper } from '../../../../classes/jqueryHelper';\r\nimport { FertilizationEvent } from '../../../fertilization-event/fertilizationEvent';\r\nimport { EventGroup } from '../../../../models/event/event';\r\n\r\nimport { IFertilizationEvent } from '../../../fertilization-event/interfaces';\r\n\r\nimport { EventsType, EventContext } from '../../../../interfaces/constants';\r\nimport { RanchService } from '../../../ranch-settings/service';\r\nimport { IPlanting } from '../../../planting-settings/interfaces';\r\nimport { eCommodityTypeCalculators } from '../../../../models/commodity-type/interfaces';\r\nimport { CropType } from '../../../../models/crop-type/cropType';\r\nimport { IEventDetails } from '../../../shared/interfaces';\r\nimport { EventUtility } from '../../../../models/event/eventUtility';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'event-table-fertilizer',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class EventTableFertilizerComponent implements OnInit {\r\n\r\n\t@Input()\r\n\tevents: EventGroup[];\r\n\r\n\t@Input()\r\n\tisNDependent: boolean;\r\n\r\n\t@Input()\r\n\tplantingId: number;\r\n\r\n\t@Input()\r\n\teventType: EventsType;\r\n\r\n\t@Input()\r\n\tcontext: EventContext;\r\n\r\n\t@Input()\r\n\tmodalOpen: EventEmitter<{ eventType: EventsType, id: number }>;\r\n\r\n\t@Input()\r\n\tdetailsData: IEventDetails;\r\n\r\n\t@Input()\r\n\tsetDetailsData: EventEmitter<IEventDetails>;\r\n\r\n\tpublic eventTypes = EventsType;\r\n\tpublic fertilizationEventClass = FertilizationEvent;\r\n\tpublic validationService = ValidateService;\r\n\r\n\tpublic FORMULATION_TYPE_DRY = 'Dry';\r\n\tpublic FORMULATION_TYPE_WET = 'Wet';\r\n\r\n\tpublic calculatorInterface: string;\r\n\tpublic calculatorInterfaces = eCommodityTypeCalculators;\r\n\tpublic isTree: boolean;\r\n\tpublic eventUtility = EventUtility;\r\n\r\n\tconstructor(\r\n\t\tpublic plantingService: PlantingService,\r\n\t\tpublic fertilizationEventService: FertilizationEventService,\r\n\t\tprivate _ranchService: RanchService) { }\r\n\r\n\tngOnInit() {\r\n\t\tlet planting: IPlanting;\r\n\r\n\t\tplanting = this._ranchService.plantings.getPlantingById(this.plantingId);\r\n\r\n\t\tif (planting) {\r\n\t\t\tthis.isTree = CropType.isTree(planting.CommodityTypeId);\r\n\t\t}\r\n\r\n\t\tthis.calculatorInterface = this._ranchService.getCalculatorInterface(this.plantingId);\r\n\r\n\t\tif (!this.events || this.events.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let eventGroup of this.events) {\r\n\t\t\tif (!eventGroup.Fertilization || eventGroup.Fertilization.length === 0 ||\r\n\t\t\t\t!eventGroup.Fertilization[0].Recommendation.cropManage) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\teventGroup.Fertilization[0].FertilizationRecommendationLbsPerAcre =\r\n\t\t\t\tFertilizationEvent.convertNToFertilizerAmount(eventGroup.Fertilization[0].Recommendation.cropManage,\r\n\t\t\t\t\teventGroup.Fertilization[0]);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getNAppliedFromWaterInFertilizerUnits(event: FertilizationEvent): number {\r\n\t\treturn ValidateService.roundToDecimalPlaces(FertilizationEvent.convertNToFertilizerAmount(\r\n\t\t\tevent.NAppliedFromWater, event), 2);\r\n\t}\r\n\r\n\tpublic toggleFertilizationEventDetails(id: number, e: Event) {\r\n\t\te.stopPropagation();\r\n\r\n\t\tlet detailsData: IEventDetails = this.detailsData;\r\n\r\n\t\tfor (let event of this.events) {\r\n\t\t\tif (!event.Fertilization) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (event.Fertilization && event.Fertilization.length > 0 && event.Fertilization[0].Id === id) {\r\n\t\t\t\tevent.Fertilization[0].ShowDetails = !event.Fertilization[0].ShowDetails;\r\n\t\t\t\tevent.Fertilization[0].EventDate = event.EventDate;\r\n\r\n\t\t\t\tthis.fertilizationEventService.getRecommendationSummary(this.plantingId,\r\n\t\t\t\t\tevent.Fertilization[0] as IFertilizationEvent)\r\n\t\t\t\t\t.then(res => {\r\n\t\t\t\t\t\tdetailsData = {\r\n\t\t\t\t\t\t\tirrigationRecommendationDetails: detailsData.irrigationRecommendationDetails,\r\n\t\t\t\t\t\t\tirrigationRecommendationDetailsType: detailsData.irrigationRecommendationDetailsType,\r\n\t\t\t\t\t\t\tfertilizationRecommendationDetails: res\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.setDetailsData.emit(detailsData);\r\n\t\t\t\t\t})\r\n\t\t\t} else if (event.Fertilization && event.Fertilization.length > 0) {\r\n\t\t\t\tevent.Fertilization[0].ShowDetails = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic closeFertilizationEventDetails(): void {\r\n\t\tfor (let event of this.events) {\r\n\t\t\tif (event.Fertilization && event.Fertilization.length > 0) {\r\n\t\t\t\tevent.Fertilization[0].ShowDetails = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param type\r\n\t * @param id\r\n\t * @param event DOM Event (not a CropManage event)\r\n\t */\r\n\tpublic openModal(eventType: EventsType, id: number, event: Event): void {\r\n\t\tlet className: string;\r\n\r\n\t\tclassName = JQueryHelper.getElementClassFromEvent(event);\r\n\r\n\t\tif (!className || className.indexOf('stop-modal-open') === -1) {\r\n\t\t\tthis.modalOpen.emit({ eventType: eventType, id: id });\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"bk-event-calculation-details__formula-row\">\r\n\t<div class=\"bk-event-calculation-details__formula-description\">\r\n\t\t{{'Total Crop ET' | translate }} = {{'Total Crop ET Formula' | translate}}\r\n\t</div>\r\n\r\n\t<div class=\"bk-event-calculation-details__formula\">\r\n\t\t{{totalCropET | number: '1.2-2'}} {{'in' | translate }} =\r\n\t\t{{calculations.AverageCropET | number: '1.2-2'}} {{'in' | translate }} x\r\n\t\t{{calculations.AverageCropCoefficient | number: '1.2-2'}} x\r\n\t\t{{calculations.DaysSinceLastIrrigation | number: '1.0-0'}}\r\n\t</div>\r\n</div>\r\n\r\n<div class=\"bk-event-calculation-details__formula-row\">\r\n\t<ng-container *ngIf=\"totalCropET > calculations.TotalPrecipitation\">\r\n\t\t<ng-container *ngIf=\"!calculations.CropSensitivity || calculations.CropSensitivity === 1\">\r\n\t\t\t<div class=\"bk-event-calculation-details__formula-description\">\r\n\t\t\t\t{{'Recommended Irrigation Formula' | translate }}\r\n\t\t\t</div>\r\n\t\t\r\n\t\t\t<div class=\"bk-event-calculation-details__formula\">\r\n\t\t\t\t{{calculations.RecommendedIrrigationAmount | number: '1.2-2'}} {{'in' | translate }} =\r\n\t\t\t\t{{totalCropET | number: '1.2-2'}} {{'in' | translate }} x 100 / (\r\n\t\t\t\t{{calculations.Distribution | number: '1.2-2'}} x\r\n\t\t\t\t(1 - {{eventUtility.getLeechingFactor(calculations, false)}})) -\r\n\t\t\t\t{{calculations.TotalPrecipitation | number: '1.2-2'}} {{'in' | translate }}\r\n\t\t\t</div>\r\n\t\t</ng-container>\r\n\t\t<ng-container *ngIf=\"calculations.CropSensitivity && calculations.CropSensitivity !== 1\">\r\n\t\t\t<div class=\"bk-event-calculation-details__formula-description\">\r\n\t\t\t\t{{'Recommended Irrigation Formula 2' | translate }}\r\n\t\t\t</div>\r\n\t\t\r\n\t\t\t<div class=\"bk-event-calculation-details__formula\">\r\n\t\t\t\t{{calculations.RecommendedIrrigationAmount | number: '1.2-2'}} {{'in' | translate }} =\r\n\t\t\t\t{{totalCropET | number: '1.2-2'}} {{'in' | translate }} x 100 / (\r\n\t\t\t\t{{calculations.Distribution | number: '1.2-2'}} x\r\n\t\t\t\t{{calculations.CropSensitivity | number: '1.1-1'}} x\r\n\t\t\t\t(1 - {{eventUtility.getLeechingFactor(calculations, false)}})) -\r\n\t\t\t\t{{calculations.TotalPrecipitation | number: '1.2-2'}} {{'in' | translate }}\r\n\t\t\t</div>\r\n\t\t</ng-container>\r\n\t</ng-container>\r\n\r\n\t<ng-container *ngIf=\"calculations.TotalPrecipitation >= totalCropET\">\r\n\t\t<div class=\"bk-event-calculation-details__formula\">\r\n\t\t\t{{'Rainfall' | translate}}({{calculations.TotalPrecipitation | number: '1.2-2' }} in.)\r\n\t\t\t> {{ 'Total Crop ET' | translate}}({{totalCropET | number: '1.2-2'}})\r\n\t\t</div>\r\n\t</ng-container>\r\n</div>\r\n\r\n<div class=\"bk-event-calculation-details__cells\">\r\n\t<div class=\"bk-event-calculation-details__cell bk-event-calculation-details__cell--six-col\">\r\n\t\t<div class=\"bk-event-calculation-details__value\">\r\n\t\t\t{{calculations.AverageCropET | number: '1.2-2'}} {{'in' | translate }}/{{'day' | translate }}\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__toggle\" (click)=\"toggles.averageET = !toggles.averageET\">\r\n\t\t\t<div class=\"bk-event-calculation-details__toggle-text\">\r\n\t\t\t\t{{'Average ETo' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__text\" *ngIf=\"toggles.averageET\">\r\n\t\t\t{{'Average ETo Text' | translate }}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"bk-event-calculation-details__cell bk-event-calculation-details__cell--six-col\">\r\n\t\t<div class=\"bk-event-calculation-details__value\">\r\n\t\t\t{{calculations.AverageCropCoefficient | number: '1.2-2'}}\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__toggle\" (click)=\"toggles.averageCropCoefficient = !toggles.averageCropCoefficient\">\r\n\t\t\t<div class=\"bk-event-calculation-details__toggle-text\">\r\n\t\t\t\t{{'Average Crop Coefficient' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__text\" *ngIf=\"toggles.averageCropCoefficient\">\r\n\t\t\t{{'Average Crop Coefficient Text' | translate }}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"bk-event-calculation-details__cell bk-event-calculation-details__cell--six-col\">\r\n\t\t<div class=\"bk-event-calculation-details__value\">\r\n\t\t\t{{calculations.Distribution | number: '1.2-2'}} %\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__toggle\" (click)=\"toggles.distributionUniformity = !toggles.distributionUniformity\">\r\n\t\t\t<div class=\"bk-event-calculation-details__toggle-text\">\r\n\t\t\t\t{{'Distribution Uniformity' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__text\" *ngIf=\"toggles.distributionUniformity\">\r\n\t\t\t{{'Distribution Uniformity Text' | translate }}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"bk-event-calculation-details__cell bk-event-calculation-details__cell--six-col\">\r\n\t\t<div class=\"bk-event-calculation-details__value\">\r\n\t\t\t{{calculations.DaysSinceLastIrrigation | number: '1.0'}} {{'Days' | translate }}\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__toggle\" (click)=\"toggles.daysSinceLastIrrigation = !toggles.daysSinceLastIrrigation\">\r\n\t\t\t<div class=\"bk-event-calculation-details__toggle-text\">\r\n\t\t\t\t{{'Days Since Last Irrigation' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__text\" *ngIf=\"toggles.daysSinceLastIrrigation\">\r\n\t\t\t{{'Days Since Last Irrigation Text' | translate }}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"bk-event-calculation-details__cell bk-event-calculation-details__cell--six-col\">\r\n\t\t<div class=\"bk-event-calculation-details__value\">\r\n\t\t\t{{eventUtility.getLeechingFactor(calculations, true)}}%\r\n\t\t\t({{eventUtility.getLeechingFactor(calculations, true)/100 | number:'1.1-2'}})\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__toggle\" (click)=\"toggles.leechingRequirement = !toggles.leechingRequirement\">\r\n\t\t\t<div class=\"bk-event-calculation-details__toggle-text\">\r\n\t\t\t\t{{'Leaching Requirement' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__text\" *ngIf=\"toggles.leechingRequirement\">\r\n\t\t\t{{'Leaching Requirement Text' | translate }}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"bk-event-calculation-details__cell bk-event-calculation-details__cell--six-col\">\r\n\t\t<div class=\"bk-event-calculation-details__value\">\r\n\t\t\t{{calculations.TotalPrecipitation | number: '1.2-2'}} {{'in' | translate }}\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__toggle\" (click)=\"toggles.totalPrecipitation = !toggles.totalPrecipitation\">\r\n\t\t\t<div class=\"bk-event-calculation-details__toggle-text\">\r\n\t\t\t\t{{'Total Precipitation' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__text\" *ngIf=\"toggles.totalPrecipitation\">\r\n\t\t\t{{'Total Precipitation Text' | translate }}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div *ngIf=\"calculations.CropSensitivity && calculations.CropSensitivity !== 1\"\r\n\t\tclass=\"bk-event-calculation-details__cell bk-event-calculation-details__cell--six-col\">\r\n\t\t<div class=\"bk-event-calculation-details__value\">\r\n\t\t\t{{calculations.CropSensitivity | number: '1.1-1'}}\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__toggle\" (click)=\"toggles.cropSensitivity = !toggles.cropSensitivity\">\r\n\t\t\t<div class=\"bk-event-calculation-details__toggle-text\">\r\n\t\t\t\t{{'Crop Sensitivity' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__text\" *ngIf=\"toggles.cropSensitivity\">\r\n\t\t\t{{'Crop Sensitivity Help Text' | translate }}\r\n\t\t</div>\r\n\t</div>\r\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { EventUtility } from '../../../../models/event/eventUtility';\r\nimport { IIrrigationRecommendationSummaryModel } from '../../../irrigation-event/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'irrigation-amount-hover-panel',\r\n\ttemplateUrl: 'amount.html'\r\n})\r\n\r\nexport class IrrigationAmountHoverPanelComponent implements OnInit {\r\n\r\n\t@Input()\r\n\tpublic calculations: IIrrigationRecommendationSummaryModel;\r\n\r\n\tpublic totalCropET: number;\r\n\r\n\tpublic toggles = {\r\n\t\taverageET: false,\r\n\t\taverageCropCoefficient: false,\r\n\t\tdistributionUniformity: false,\r\n\t\tdaysSinceLastIrrigation: false,\r\n\t\tleechingRequirement: false,\r\n\t\ttotalPrecipitation: false,\r\n\t\tcropSensitivity: false,\r\n\t};\r\n\r\n\tpublic eventUtility = EventUtility;\r\n\r\n\tconstructor(\r\n\t) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tif (!this.calculations) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.totalCropET = this.calculations.AverageCropET * this.calculations.AverageCropCoefficient\r\n\t\t\t* this.calculations.DaysSinceLastIrrigation;\r\n\t}\r\n}\r\n","<!-- equations -->\r\n\r\n<div class=\"bk-event-calculation-details__formula-row\">\r\n\t<ng-container *ngIf=\"calculations.WetArea < 1; else wetAreaIsZero\">\r\n\t\t<div class=\"bk-event-calculation-details__formula-description\">\r\n\t\t\t{{'Recommended Irrigation Interval' | translate }} = {{'Available Soil Moisture' | translate }} * \r\n\t\t\t{{'Wet Area' | translate}} / ({{'Average Crop ET' | translate }} - {{'Average Rainfall' | translate }})\r\n\t\t</div>\r\n\r\n\t\t<div class=\"bk-event-calculation-details__formula\">\r\n\t\t\t{{calculations.RecommendedIrrigationInterval | number: '1.2-2'}} =\r\n\t\t\t({{calculations.AvailableWater | number: '1.2-2'}} * {{calculations.WetArea}}) /\r\n\t\t\t({{calculations.AverageCropET | number: '1.2-2'}} - {{calculations.AverageRainfall | number: '1.2-2'}})\r\n\t\t</div>\r\n\t</ng-container>\r\n\r\n\t<ng-template #wetAreaIsZero>\r\n\t\t<div class=\"bk-event-calculation-details__formula-description\">\r\n\t\t\t{{'Recommended Irrigation Interval' | translate }} = {{'Available Soil Moisture' | translate }} /\r\n\t\t\t({{'Average Crop ET' | translate }} - {{'Average Rainfall' | translate }})\r\n\t\t</div>\r\n\r\n\t\t<div class=\"bk-event-calculation-details__formula\">\r\n\t\t\t{{calculations.RecommendedIrrigationInterval | number: '1.2-2'}} =\r\n\t\t\t({{calculations.AvailableWater | number: '1.2-2'}}/\r\n\t\t\t({{calculations.AverageCropET | number: '1.2-2'}} - {{calculations.AverageRainfall | number: '1.2-2'}})\r\n\t\t</div>\r\n\t</ng-template>\r\n</div>\r\n\r\n<!-- parameters -->\r\n\r\n<div class=\"bk-event-calculation-details__cells\">\r\n\t<div class=\"bk-event-calculation-details__cell bk-event-calculation-details__cell--three-col\">\r\n\t\t<div class=\"bk-event-calculation-details__value\">\r\n\t\t\t{{calculations.AvailableWater | number: '1.2-2'}} {{'in' | translate }}\r\n\t\t</div>\r\n\r\n\t\t<div class=\"bk-event-calculation-details__toggle\" (click)=\"toggles.availableSoilMoisture = !toggles.availableSoilMoisture\">\r\n\t\t\t<div class=\"bk-event-calculation-details__toggle-text\">\r\n\t\t\t\t{{'Available Soil Moisture' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__text\" *ngIf=\"toggles.availableSoilMoisture\">\r\n\t\t\t{{'Available Soil Moisture Text' | translate }}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"bk-event-calculation-details__cell bk-event-calculation-details__cell--three-col\">\r\n\t\t<div class=\"bk-event-calculation-details__value\">\r\n\t\t\t{{calculations.AverageCropET | number: '1.2-2'}} {{'in' | translate }}/{{'day' | translate }}\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__toggle\" (click)=\"toggles.averageCropET = !toggles.averageCropET\">\r\n\t\t\t<div class=\"bk-event-calculation-details__toggle-text\">\r\n\t\t\t\t{{'Average Crop ET' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__text\" *ngIf=\"toggles.averageCropET\">\r\n\t\t\t{{'Average Crop ET Text' | translate }}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"bk-event-calculation-details__cell bk-event-calculation-details__cell--three-col\">\r\n\t\t<div class=\"bk-event-calculation-details__value\">\r\n\t\t\t{{calculations.AverageRainfall | number: '1.2-2'}} {{'in' | translate }}/{{'day' | translate }}\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__toggle\" (click)=\"toggles.averageRainfall = !toggles.averageRainfall\">\r\n\t\t\t<div class=\"bk-event-calculation-details__toggle-text\">\r\n\t\t\t\t{{'Average Rainfall' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n\t\t</div>\r\n\t\t<div class=\"bk-event-calculation-details__text\" *ngIf=\"toggles.averageRainfall\">\r\n\t\t\t{{'Average Rainfall Text' | translate }}\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<ng-container *ngIf=\"calculations.WetArea < 1\">\r\n\t\t<div class=\"bk-event-calculation-details__cell bk-event-calculation-details__cell--three-col\">\r\n\t\t\t<div class=\"bk-event-calculation-details__value\">\r\n\t\t\t\t{{calculations.WetArea*100 | number: '1.0-0'}} %\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"bk-event-calculation-details__toggle\" (click)=\"toggles.wetArea =\r\n\t\t\t\t !toggles.wetArea\">\r\n\t\t\t\t<div class=\"bk-event-calculation-details__toggle-text\">\r\n\t\t\t\t\t{{'Wet Area Percentage' | translate }}\r\n\t\t\t\t</div>\r\n\t\t\t\t<i class=\"fa fa-info-circle bk-modal__dropdown-link-icon\"></i>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-event-calculation-details__text\" *ngIf=\"toggles.wetArea\">\r\n\t\t\t\t{{'Wet Area Percentage Text' | translate }}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-container>\r\n</div>","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DecimalPipe } from '@angular/common'\r\n\r\nimport { IIrrigationRecommendationSummaryModel} from '../../../irrigation-event/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'irrigation-interval-hover-panel',\r\n\ttemplateUrl: 'interval.html'\r\n})\r\n\r\nexport class IrrigationIntervalHoverPanelComponent implements OnChanges {\r\n\r\n\t@Input()\r\n\tcalculations: IIrrigationRecommendationSummaryModel;\r\n\r\n\tpublic toggles = {\r\n\t\tavailableSoilMoisture: false,\r\n\t\taverageCropET: false,\r\n\t\taverageRainfall: false,\r\n\t\twetArea: false\r\n\t};\r\n\r\n\tprivate number: DecimalPipe = new DecimalPipe('en-US');\r\n\r\n\tconstructor() { }\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\r\n\t}\r\n}\r\n","<h4 class=\"bk-modal__header-title\">\r\n\t{{'CropManage Recommendation' | translate}}\r\n</h4>\r\n\r\n<ng-container *ngIf=\"irrigationSummaryType === 'IrrigationInterval'\">\r\n\t<irrigation-interval-hover-panel\r\n\t\t[calculations]=\"irrigationRecommendationSummary\">\r\n\t</irrigation-interval-hover-panel>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"irrigationSummaryType === 'Water'\">\r\n\t<irrigation-amount-hover-panel\r\n\t\t[calculations]=\"irrigationRecommendationSummary\">\r\n\t</irrigation-amount-hover-panel>\r\n</ng-container>","import { Component, Input, Output, ViewChild, OnChanges, SimpleChanges } from '@angular/core';\r\n\r\nimport { IrrigationIntervalHoverPanelComponent } from './interval';\r\nimport { IrrigationAmountHoverPanelComponent } from './amount';\r\n\r\nimport { IIrrigationRecommendationSummaryModel } from '../../../irrigation-event/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'irrigation-hover-panel',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class IrrigationHoverPanelComponent implements OnChanges {\r\n\t@ViewChild(IrrigationIntervalHoverPanelComponent, { static: false }) private IntervalHoverPanelComponent:\r\n\t\tIrrigationIntervalHoverPanelComponent;\r\n\r\n\t@ViewChild(IrrigationAmountHoverPanelComponent, { static: false }) private AmountHoverPanelComponent:\r\n\t\tIrrigationAmountHoverPanelComponent;\r\n\r\n\t@Input()\r\n\tirrigationSummaryType: string;\r\n\r\n\t@Input()\r\n\tirrigationRecommendationSummary: IIrrigationRecommendationSummaryModel;\r\n\r\n\t@Output()\r\n\tcalculations: IIrrigationRecommendationSummaryModel;\r\n\r\n\tconstructor() { }\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\r\n\t}\r\n}\r\n","<ng-container *ngIf=\"eventType === EventsTypeEnum.ALL\">\r\n    <table class=\"bk-event-table\">\r\n        <thead>\r\n            <tr>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.All=='EventDateString'\r\n                        && plantingService.sortDescending.All\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.All=='EventDateString' &&\r\n                        !plantingService.sortDescending.All\"\r\n                    (click)=\"plantingService.sort('All','EventDateString', eventType)\">\r\n\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Date' | translate }}\r\n                    </div>\r\n\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.All=='IrrigationDisplayAmount' &&\r\n                        plantingService.sortDescending.All\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.All=='IrrigationDisplayAmount' &&\r\n                        !plantingService.sortDescending.All\"\r\n                    (click)=\"plantingService.sort('All','IrrigationDisplayAmount', eventType)\">\r\n\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Water' | translate }}\r\n                    </div>\r\n\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th *ngIf=\"hasCutEvents\"\r\n                    class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    (click)=\"plantingService.sort('All','CuttingYield', eventType)\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.All=='CuttingYield' &&\r\n                        plantingService.sortDescending.All\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.All=='CuttingYield' &&\r\n                        !plantingService.sortDescending.All\">\r\n\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{ 'Cutting' | translate }}\r\n                    </div>\r\n\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th *ngIf=\"plantingService.units.fertilizer == 'fertilizerUnit'\"\r\n                    class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.All=='FertilizationDisplayFertilizationUnit' &&\r\n                        plantingService.sortDescending.All\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.All=='FertilizationDisplayFertilizationUnit' &&\r\n                        !plantingService.sortDescending.All\"\r\n                    (click)=\"plantingService.sort('All','FertilizationDisplayFertilizationUnit', eventType)\">\r\n\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Fertilizer' | translate }}\r\n                    </div>\r\n\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th *ngIf=\"plantingService.units.fertilizer == 'lbsNPerAcre'\"\r\n                    class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.All=='FertilizationDisplayLbsNPerAcre'\r\n                        && plantingService.sortDescending.All\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.All=='FertilizationDisplayLbsNPerAcre'\r\n                        && !plantingService.sortDescending.All\"\r\n                    (click)=\"plantingService.sort('All','FertilizationDisplayLbsNPerAcre', eventType)\">\r\n\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Fertilizer' | translate }}\r\n                    </div>\r\n\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.All=='SoilSamplesSoilNitrateNPPM'\r\n                        && plantingService.sortDescending.All\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.All=='SoilSamplesSoilNitrateNPPM'\r\n                        && !plantingService.sortDescending.All\"\r\n                        (click)=\"plantingService.sort('All','SoilSamplesSoilNitrateNPPM', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Soil Sample' | translate }}\r\n                    </div>\r\n\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.All=='SoilSamplesSoilNitrateNPPM'\r\n                        && plantingService.sortDescending.All\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.All=='SoilSamplesSoilNitrateNPPM'\r\n                        && !plantingService.sortDescending.All\"\r\n                        (click)=\"plantingService.sort('All','SoilSamplesSoilNitrateNPPM', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Tissue Sample' | translate }}\r\n                    </div>\r\n\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n            </tr>\r\n        </thead>\r\n        <tbody>\r\n            <tr *ngFor=\"let event of events | orderBy: plantingService.sortColumn('All')\">\r\n                <td class=\"bk-event-table__cell\">\r\n                    {{event.EventDate | date:'M/d/yyyy'}}\r\n                </td>\r\n\r\n                <!-- irrigation event -->\r\n\r\n                <td *ngIf=\"event.Irrigation\"\r\n                    class=\"bk-event-table__cell\"\r\n                    [class.bk-event-table__cell-clickable]=\"event.Irrigation\"\r\n                    (click)=\"openModal(EventsTypeEnum.WATER, event.Irrigation.Id, $event)\">\r\n\r\n                    <div class=\"bk-event-table__cell--left\">\r\n                        {{event.Irrigation.IrrigationMethod | translate }}\r\n                        <i *ngIf=\"irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) !== ''\"\r\n                            matTooltip=\"{{irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) }}\"\r\n                            class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                        </i>\r\n                    </div>\r\n\r\n                    <div class=\"bk-event-table__cell--right\r\n                        bk-event-table__all-events__event-{{event.Irrigation.Id}}\">\r\n\r\n                        <ng-container *ngIf=\"!irrigationEvent.isNA(event.Irrigation, planting.WetDate)\">\r\n\r\n                            <user-icon [event]=\"event\"\r\n                                [eventType]=\"'Water'\">\r\n                            </user-icon>\r\n\r\n                            <span *ngIf=\"plantingService.units.water === 'inches' ||\r\n                                event.Irrigation.IrrigationMethodId === irrigationMethods.RAINFALL ||\r\n                                event.Irrigation.IrrigationMethodId === irrigationMethods.FLOOD\"\r\n                                class=\"bk-event-table__cell--right-text\">\r\n\r\n                                {{event.Irrigation.DisplayInches | number: '1.0-1'}}\r\n                                <span class=\"bk-unit-text\">\r\n                                    {{'in' | translate }}\r\n                                </span>\r\n                            </span>\r\n\r\n                            <span *ngIf=\"plantingService.units.water === 'hours' &&\r\n                                event.Irrigation.IrrigationMethodId !== irrigationMethods.RAINFALL &&\r\n                                event.Irrigation.IrrigationMethodId !== irrigationMethods.FLOOD\"\r\n                                class=\"bk-event-table__cell--right-text\">\r\n                                \r\n                                {{event.Irrigation.DisplayHours | number: '1.0-1'}}\r\n                                <span class=\"bk-unit-text\">\r\n                                    {{'hr' | translate }}\r\n                                </span>\r\n                            </span>\r\n                        </ng-container>\r\n\r\n                        <ng-container *ngIf=\"irrigationEvent.isNA(event.Irrigation, planting.WetDate)\">\r\n                            <span class=\"bk-event-table__cell--right-text\">\r\n                                N/A\r\n                            </span>\r\n                        </ng-container>\r\n                    </div>\r\n                </td>\r\n                <td *ngIf=\"!event.Irrigation\"\r\n                    class=\"bk-event-table__cell\">\r\n                </td>\r\n\r\n                <!-- cut events -->\r\n\r\n                <td *ngIf=\"hasCutEvents && event.CutEvent\"\r\n                    class=\"bk-event-table__cell\"\r\n                    (click)=\"openModal(EventsTypeEnum.CUTTING, event.CutEvent.Id, $event)\"\r\n                    [class.bk-event-table__cell-clickable]=\"hasCutEvents && event.CutEvent\">\r\n\r\n                    <div class=\"bk-event-table__cell--left\">\r\n                        <ng-container *ngIf=\"validationService.isValidNumber(event.CutEvent.MaturityId)\">\r\n                            {{ getMaturityName(event.CutEvent.MaturityId) | translate }}\r\n                        </ng-container>\r\n\r\n                        <ng-container *ngIf=\"!validationService.isValidNumber(event.CutEvent.MaturityId)\">\r\n                            {{ 'Cutting' | translate }}\r\n                        </ng-container>\r\n                    </div>\r\n                    <div class=\"bk-event-table__cell--right\">\r\n                        <user-icon [event]=\"event\"\r\n                            [eventType]=\"'Cutting'\">\r\n                        </user-icon>\r\n                        <span class=\"bk-event-table__cell--right-text\">\r\n                            {{ event.CutEvent.CutInterval }} \r\n                            <span class=\"bk-unit-text\">\r\n                                {{'days' | translate }}\r\n                            </span>\r\n                        </span>\r\n                    </div>\r\n                </td>\r\n                <td *ngIf=\"hasCutEvents && !event.CutEvent\"\r\n                    class=\"bk-event-table__cell\">\r\n                </td>\r\n                \r\n                <!-- fertilization events -->\r\n\r\n                <td *ngIf=\"event.Fertilization && event.Fertilization.length > 0\"\r\n                    class=\"bk-event-table__cell\"\r\n                    [class.bk-event-table__cell-clickable]=\"event.Fertilization[0]\"\r\n                    (click)=\"openModal(EventsTypeEnum.FERTILIZER, event.Fertilization[0].Id, $event)\">\r\n                    <div class=\"bk-event-table__cell--left\">\r\n                        {{event.Fertilization[0].FertilizerName}}\r\n                        <i *ngIf=\"eventUtility.shouldDisplayFertilizationWarning(event.Fertilization[0], event.isPast)\"\r\n                            matTooltip=\"{{'Recommendation not applied' | translate }}\"\r\n                            class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                        </i>\r\n                    </div>\r\n                    <div class=\"bk-event-table__cell--right\">\r\n                        <ng-container *ngIf=\"!isNA(event.Fertilization[0].DisplayAmount)\">\r\n                            <user-icon [event]=\"event\"\r\n                                [eventType]=\"'Fertilizer'\">\r\n                            </user-icon>\r\n\r\n                            <span *ngIf=\"plantingService.units.fertilizer == 'fertilizerUnit'\"\r\n                                class=\"bk-event-table__cell--right-text\">\r\n                                {{event.Fertilization[0].DisplayFertilizationUnit | number: '1.0-1'}}\r\n                                <span *ngIf=\"event.Fertilization[0].FormulationType == 'Dry'\"\r\n                                    class=\"bk-unit-text\">\r\n                                    {{'lbs' | translate }}/{{'acre' | translate }}\r\n                                </span>\r\n                                <span *ngIf=\"event.Fertilization[0].FormulationType == 'Wet'\"\r\n                                    class=\"bk-unit-text\">\r\n                                    {{'gal' | translate }}/{{'acre' | translate }}\r\n                                </span>\r\n                            </span>\r\n                            <span *ngIf=\"plantingService.units.fertilizer == 'lbsNPerAcre'\"\r\n                                class=\"bk-event-table__cell--right-text\">\r\n                                {{event.Fertilization[0].DisplayLbsNPerAcre | number: '1.0-1'}}\r\n                                <span class=\"bk-unit-text\">\r\n                                    {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                                </span>\r\n                            </span>\r\n                        </ng-container>\r\n                        <ng-container *ngIf=\"isNA(event.Fertilization[0].DisplayAmount)\">\r\n                            <span class=\"bk-event-table__cell--right-text bk-event-table--event-{{event.Fertilization[0].Id}}\">\r\n                                N/A\r\n                            </span>\r\n                        </ng-container>\r\n                    </div>\r\n                </td>\r\n                <td *ngIf=\"!event.Fertilization || event.Fertilization.length === 0\"\r\n                    class=\"bk-event-table__cell\">\r\n                </td>\r\n\r\n                <!-- soil sample events -->\r\n\r\n                <td *ngIf=\"event.SoilSamples[0]\"\r\n                    class=\"bk-event-table__cell\"\r\n                    [class.bk-event-table__cell-clickable]=\"event.SoilSamples[0]\"\r\n                    (click)=\"openModal(EventsTypeEnum.SOILSAMPLES, event.SoilSamples[0].Id, $event)\">                     \r\n                    <div class=\"bk-event-table__cell--left\">\r\n                        {{event.SoilSamples[0].Depth | number: '1.0-1'}}\r\n                        <span class=\"bk-unit-text\">\r\n                            {{'ft depth' | translate }}\r\n                        </span>\r\n                        <i *ngIf=\"soilSampleNotApplied(event)\"\r\n                            matTooltip=\"{{'Sample not taken' | translate }}\"\r\n                            class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                        </i>\r\n                    </div>\r\n                    <div class=\"bk-event-table__cell--right\">\r\n                        <user-icon [event]=\"event\"\r\n                            [eventType]=\"'SoilSamples'\">\r\n                        </user-icon>\r\n                        <ng-container *ngIf=\"isNDependent\">\r\n                            <ng-container *ngIf=\"plantingService.units.soilSamples == 'ppmNitrate-N'\">\r\n                                <span class=\"bk-event-table__cell--right-text\">\r\n                                    {{event.SoilSamples[0].SoilNitrateNPPM | number: '1.0-1'}}\r\n                                    <span class=\"bk-unit-text\" >\r\n                                        {{'ppm Nitrate-N' | translate }}\r\n                                    </span>\r\n                                </span>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"plantingService.units.soilSamples == 'lbsNPerAcre'\">\r\n                                <span class=\"bk-event-table__cell--right-text\">\r\n                                    {{event.SoilSamples[0].SoilMineralNLbsAcre | number : '1.0-1'}}\r\n                                    <span class=\"bk-unit-text\">\r\n                                        {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                                    </span>\r\n                                </span>\r\n                            </ng-container>\r\n                        </ng-container>\r\n                    </div>\r\n                </td>\r\n                <td *ngIf=\"!event.SoilSamples[0]\"\r\n                    class=\"bk-event-table__cell\">\r\n                </td>\r\n\r\n                <!-- tissue sample events -->\r\n\r\n                <td *ngIf=\"event.TissueSamples[0]\"\r\n                    class=\"bk-event-table__cell\"\r\n                    [class.bk-event-table__cell-clickable]=\"event.TissueSamples[0]\"\r\n                    (click)=\"openModal(EventsTypeEnum.TISSUE_SAMPLE, event.TissueSamples[0].Id, $event)\">                     \r\n\r\n                    {{event.TissueSamples[0].NutrientDisplayText ? event.TissueSamples[0].NutrientDisplayText : 'N/A'}}\r\n\r\n                    <i *ngIf=\"tissueSampleEventClass.shouldShowWarningIcon(event.TissueSamples[0], event)\"\r\n                        matTooltip=\"{{'Sample not taken' | translate }}\"\r\n                        class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                    </i>\r\n\r\n                </td>\r\n                <td *ngIf=\"!event.TissueSamples[0]\"\r\n                    class=\"bk-event-table__cell\">\r\n                </td>\r\n            </tr>\r\n        </tbody>\r\n    </table>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"eventType == EventsTypeEnum.WATER\">\r\n    <ng-container *ngIf=\"!showAdditionalWaterData\">\r\n        <table class=\"bk-event-table\">\r\n            <thead>\r\n                <tr>\r\n                    <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='EventDateString'\r\n                            && plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='EventDateString'\r\n                            && !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','EventDateString', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Date' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationIrrigationMethod' &&\r\n                            plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationIrrigationMethod' &&\r\n                            !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationIrrigationMethod', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Irrigation Method' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationInterval' &&\r\n                            plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationInterval' &&\r\n                            !plantingService.sortDescending.Water\" (click)=\"plantingService.sort('Water','IrrigationInterval', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Irrigation Interval' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationRecommendedMaxIrrigationInterval' &&\r\n                            plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationRecommendedMaxIrrigationInterval' &&\r\n                            !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationRecommendedMaxIrrigationInterval', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            <span class=\"bk-text--nobr\">\r\n                                {{'Recommended Max' | translate }}\r\n                            </span>\r\n                            <span class=\"bk-text--nobr\">\r\n                                {{'Irrigation Interval' | translate }}\r\n                            </span>\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th *ngIf=\"plantingService.units.water == 'inches'\"\r\n                        class=\"bk-event-table__header bk-event-table__header--sort bk-event-table__header--total\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationRecommendationInches' &&\r\n                            plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationRecommendationInches' &&\r\n                            !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationRecommendationInches', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'CropManage Recommended Amount' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th *ngIf=\"plantingService.units.water == 'hours'\"\r\n                        class=\"bk-event-table__header bk-event-table__header--sort bk-event-table__header--total\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationRecommendationHours' &&\r\n                            plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationRecommendationHours' &&\r\n                            !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationRecommendationHours', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'CropManage Recommended Amount' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th *ngIf=\"plantingService.units.water == 'inches'\"\r\n                        class=\"bk-event-table__header bk-event-table__header--sort bk-event-table__header--total\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationAppliedInches' &&\r\n                            plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigiationAppliedInches' &&\r\n                            !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationAppliedInches', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Applied Water' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th *ngIf=\"plantingService.units.water == 'hours'\"\r\n                        class=\"bk-event-table__header bk-event-table__header--sort bk-event-table__header--total\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationAppliedHours' &&\r\n                            plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationAppliedHours' &&\r\n                            !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationAppliedHours', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Applied Water' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th class=\"bk-event-table__header bk-event-table__header--sort bk-event-table__header--total\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationCumulativeRainfall' &&\r\n                            plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationCumulativeRainfall' &&\r\n                            !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationContributingRainfall', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Contributing Rainfall' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                </tr>\r\n            </thead>\r\n\r\n            <!-- Irrigation events -->\r\n\r\n            <tbody>\r\n                <ng-container *ngFor=\"let event of events | orderBy: plantingService.sortColumn('Water')\">\r\n                    <tr *ngIf=\"event.Irrigation\"\r\n                        class=\"bk-event-table__row bk-event-table--event-{{event.Irrigation.Id}}\"\r\n                        (click)=\"openModal(EventsTypeEnum.WATER, event.Irrigation.Id, $event)\">\r\n\r\n                        <td class=\"bk-event-table__cell\">\r\n                            <div class=\"bk-text--nobr\">\r\n                                <span class=\"bk-event-table__cell-text\">\r\n                                    {{event.EventDate | date:'M/d/yyyy'}}\r\n                                </span>\r\n                            </div>\r\n                        </td>\r\n                        <td class=\"bk-event-table__cell\">\r\n                            {{event.Irrigation.IrrigationMethod | translate }}\r\n                        </td>\r\n                        <td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n                            <ng-container *ngIf=\"event.Irrigation.Interval !== -1\">\r\n                                {{event.Irrigation.Interval | number: '1.0-1'}}<span class=\"bk-unit-text\">{{'days' | translate}}</span>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"event.Irrigation.Interval === -1\">\r\n                                {{'N/A' | translate}}\r\n                            </ng-container>\r\n                        </td>\r\n                        <td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n                            <!-- rainfall should not display recommended interval -->\r\n                            <ng-container *ngIf=\"event.Irrigation.RecommendedIrrigationInterval > 0 &&\r\n                                    event.Irrigation.IrrigationMethodId !== irrigationMethods.RAINFALL &&\r\n                                    event.Irrigation.RecommendedIrrigationInterval <= maxIrrigationInterval\">\r\n                                <span\r\n                                    [class.bk-event-calculation-details__link--open]='event.Irrigation &&\r\n                                        event.Irrigation.ShowDetails &&\r\n                                        detailsData.irrigationRecommendationDetailsType == \"IrrigationInterval\"'\r\n                                    [class.bk-event-calculation-details__link]=\"cellHasCalculations(event.Irrigation)\"\r\n                                    [class.stop-modal-open]=\"cellHasCalculations(event.Irrigation)\"\r\n                                    (click)=\"toggleIrrigationEventDetails( 'IrrigationInterval', event.Irrigation.Id, $event)\">\r\n                                    {{event.Irrigation.RecommendedIrrigationInterval | number: '1.0-1' }}\r\n                                </span>\r\n                                <span class=\"bk-unit-text\">\r\n                                    {{'days' | translate}}\r\n                                </span>\r\n                            </ng-container>\r\n\r\n                            <ng-container *ngIf=\"event.Irrigation.RecommendedIrrigationInterval <= 0 ||\r\n                                event.Irrigation.IrrigationMethodId === irrigationMethods.RAINFALL\">\r\n                                <span class=\"stop-modal-open\">\r\n                                    {{'N/A' | translate}}\r\n                                </span>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"event.Irrigation.IrrigationMethodId !== irrigationMethods.RAINFALL &&\r\n                                event.Irrigation.RecommendedIrrigationInterval > maxIrrigationInterval\">\r\n                                <span class=\"stop-modal-open\">\r\n                                    {{'Over' | translate}} {{maxIrrigationInterval}} {{'days' | translate}}\r\n                                </span>\r\n                            </ng-container>\r\n                        </td>\r\n                        <td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n\r\n                            <!-- recommended amount column -->\r\n\r\n                            <ng-container *ngIf=\"!isIrrigationRecommendationNA(event.Irrigation)\">\r\n                                \r\n                                <ng-container *ngIf=\"plantingService.units.water == 'inches' ||\r\n                                    event.Irrigation.IrrigationMethodId === irrigationMethods.FLOOD\">\r\n\r\n                                    <span [class.bk-event-calculation-details__link--open]='event.Irrigation &&\r\n                                            event.Irrigation.ShowDetails &&\r\n                                            detailsData.irrigationRecommendationDetailsType == \"Water\"'\r\n                                        class=\"stop-modal-open\"\r\n                                        [class.bk-event-calculation-details__link]=\"event.Irrigation.RecommendationInches !== -1\"\r\n                                        (click)=\"toggleIrrigationEventDetails('Water', event.Irrigation.Id, $event)\">\r\n                                        {{event.Irrigation.RecommendationInches | number: '1.0-2'}}\r\n                                    </span>\r\n                                    <span class=\"bk-unit-text\">\r\n                                        {{'in' | translate}}\r\n                                    </span>\r\n                                    <i *ngIf=\"irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) !== ''\"\r\n                                        matTooltip=\"{{irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) }}\"\r\n                                        class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                                    </i>\r\n                                </ng-container>\r\n\r\n                                <ng-container *ngIf=\"plantingService.units.water == 'hours' &&\r\n                                event.Irrigation.IrrigationMethodId !== irrigationMethods.FLOOD\">\r\n                                    <span [class.bk-event-calculation-details__link--open]='event.Irrigation &&\r\n                                            event.Irrigation.ShowDetails &&\r\n                                            detailsData.irrigationRecommendationDetailsType == \"Water\"'\r\n                                        [class.bk-event-calculation-details__link]=\"event.Irrigation.RecommendationHours !== -1\"\r\n                                        class=\"stop-modal-open\"\r\n                                        (click)=\"toggleIrrigationEventDetails('Water', event.Irrigation.Id, $event)\">\r\n                                        {{event.Irrigation.RecommendationHours | number: '1.0-1'}}\r\n                                    </span>\r\n                                    <span class=\"bk-unit-text\">\r\n                                        {{'hr' | translate}}\r\n                                    </span>\r\n                                    <i *ngIf=\"irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) !== ''\"\r\n                                        matTooltip=\"{{irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) }}\"\r\n                                        class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                                    </i>\r\n                                </ng-container>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"isIrrigationRecommendationNA(event.Irrigation)\">\r\n                                <span class=\"stop-modal-open\">\r\n                                    {{'N/A' | translate}}\r\n                                </span>\r\n                                <i *ngIf=\"irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) !== ''\"\r\n                                    matTooltip=\"{{irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) }}\"\r\n                                    class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n                                </i>\r\n                            </ng-container>\r\n                        </td>\r\n                        <td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n                            <ng-container *ngIf=\"event.Irrigation.WaterApplied !== null &&\r\n                                event.Irrigation.IrrigationMethodId !== irrigationMethods.RAINFALL\">\r\n                                <ng-container *ngIf=\"plantingService.units.water == 'inches' ||\r\n                                    event.Irrigation.IrrigationMethodId === irrigationMethods.FLOOD\">\r\n                                    <span [class.bk-event-calculation-details__link]=\"event.Irrigation.ShowLink\"\r\n                                        [class.stop-modal-open]=\"event.Irrigation.ShowLink\">\r\n                                        {{event.Irrigation.AppliedInches | number: '1.0-2'}}<span class=\"bk-unit-text\">\r\n                                            {{'in' | translate}}\r\n                                        </span>\r\n                                    </span>\r\n                                </ng-container>\r\n                                <ng-container *ngIf=\"plantingService.units.water == 'hours' &&\r\n                                    event.Irrigation.IrrigationMethodId !== irrigationMethods.FLOOD\">\r\n                                    <span [class.bk-event-calculation-details__link]=\"event.Irrigation.ShowLink\"\r\n                                        [class.stop-modal-open]=\"event.Irrigation.ShowLink\">\r\n                                        {{event.Irrigation.AppliedHours | number: '1.0-1'}}\r\n                                        <span class=\"bk-unit-text\">\r\n                                            {{'hr' | translate}}\r\n                                        </span>\r\n                                    </span>\r\n                                </ng-container>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"event.Irrigation.IrrigationMethodId === irrigationMethods.RAINFALL\">\r\n                                {{ 'N/A' }}\r\n                            </ng-container>\r\n                        </td>\r\n                        <td class=\"bk-event-table__cell bk-event-table__cell--right-align\r\n                            bk-event-table__cell--rainfall\">\r\n\r\n                            <ng-container *ngIf=\"event.Irrigation.CumulativeRainfall\">\r\n                                <span>\r\n                                    {{event.Irrigation.CumulativeRainfall | number: '1.0-2'}}\r\n                                </span>\r\n                                <span class=\"bk-unit-text\">\r\n                                    {{'in' | translate}}\r\n                                </span>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"!event.Irrigation.CumulativeRainfall\">\r\n                                0 {{'in' | translate}}\r\n                            </ng-container>\r\n                        </td>\r\n                    </tr>\r\n                    <tr *ngIf=\"event.Irrigation && event.Irrigation.ShowDetails && isIrrigationDetailLoaded\">\r\n                        <td class=\"bk-event-calculation-details\"\r\n                            colspan=\"8\">\r\n                            <span (click)=\"closeIrrigationEventDetails()\"\r\n                                class=\"fa fa-times-circle bk-event-details__close\">\r\n                            </span>\r\n                            <irrigation-hover-panel *ngIf=\"event && event.Irrigation\"\r\n                                [irrigationSummaryType]=\"detailsData.irrigationRecommendationDetailsType\"\r\n                                [irrigationRecommendationSummary]=\"detailsData.irrigationRecommendationDetails\">\r\n                            </irrigation-hover-panel>\r\n                        </td>\r\n                    </tr>\r\n                </ng-container>\r\n            </tbody>\r\n        </table>\r\n    </ng-container>\r\n\r\n    <!-- additional water data -->\r\n    \r\n    <ng-container *ngIf=\"showAdditionalWaterData\">\r\n        <table *ngIf=\"!showAdditionalWaterDataLoader\"\r\n            class=\"bk-event-table\">\r\n            <thead>\r\n                <tr>\r\n                    <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='EventDateString'\r\n                            && plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='EventDateString'\r\n                            && !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','EventDateString', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Date' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationCropCoefficient'\r\n                            && plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationCropCoefficient'\r\n                            && !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationCropCoefficient', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Kc' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationCanopyCover' &&\r\n                            plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationCanopyCover' &&\r\n                            !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationCanopyCover', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Canopy' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationReferenceET'\r\n                            && plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationReferenceET'\r\n                            && !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationReferenceET', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Reference ET' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                        [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationTotalCropET'\r\n                            && plantingService.sortDescending.Water\"\r\n                        [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationTotalCropET'\r\n                            && !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationTotalCropET', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Crop ET' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                    <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                            [class.bk-event-table__header--desc]=\"plantingService.sortField.Water=='IrrigationAvailableSoilMoisture'\r\n                                && plantingService.sortDescending.Water\"\r\n                            [class.bk-event-table__header--asc]=\"plantingService.sortField.Water=='IrrigationAvailableSoilMoisture'\r\n                                && !plantingService.sortDescending.Water\"\r\n                        (click)=\"plantingService.sort('Water','IrrigationAvailableSoilMoisture', eventType)\">\r\n                        <div class=\"bk-event-table__header-text\">\r\n                            {{'Available Soil Moisture' | translate }}\r\n                        </div>\r\n                        <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                        <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                    </th>\r\n                </tr>\r\n            </thead>\r\n            <tbody>\r\n                <ng-container *ngFor=\"let event of events | orderBy: plantingService.sortColumn('Water')\">\r\n                    <tr *ngIf=\"event && event.Irrigation && event.Irrigation.AdditionalData\">\r\n                        <td class=\"bk-event-table__cell\">\r\n                            {{event.EventDate | date:'M/d/yyyy'}}\r\n                        </td>\r\n                        <td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n                            {{event.Irrigation.AdditionalData.AvgCanopy | number: '1.0-1'}}\r\n                        </td>\r\n                        <!-- we show AverageCanopy instead of CropCoefficient here, because AverageCanopy can be either average daily Kc \r\n                            OR canopy cover value,\r\n                            whichever is greater. The variable name is confusing, but based on conversation with Michael, its the \r\n                            correct field to use here -->\r\n                        <td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n                            {{event.Irrigation.AdditionalData.CanopyCover | number: '1.0-1'}}\r\n                            <span class=\"bk-unit-text\">\r\n                                %\r\n                            </span>\r\n                        </td>\r\n                        <td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n                            {{event.Irrigation.AdditionalData.ReferenceET | number: '1.0-1'}}\r\n                            <span class=\"bk-unit-text\">\r\n                                {{'in' | translate}}\r\n                            </span>\r\n                        </td>\r\n                        <td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n                            {{event.Irrigation.AdditionalData.TotalCropET | number: '1.0-1'}}\r\n                            <span class=\"bk-unit-text\">\r\n                                {{'in' | translate}}\r\n                            </span>\r\n                        </td>\r\n                        <td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n                            {{event.Irrigation.AdditionalData.AvailableSoilMoisture | number: '1.0-1'}}\r\n                            <span class=\"bk-unit-text\">\r\n                                {{'in' | translate}}\r\n                            </span>\r\n                        </td>\r\n                    </tr>\r\n                </ng-container>\r\n            </tbody>\r\n        </table>\r\n        <ng-container *ngIf=\"showAdditionalWaterDataLoader\">\r\n            <div class=\"bk-loader__container bk-event-table__loader\">\r\n                <div class=\"bk-loader\">\r\n                    {{'Loading' | translate }}...\r\n                </div>\r\n            </div>\r\n        </ng-container>\r\n    </ng-container>\r\n</ng-container>\r\n\r\n<event-table-fertilizer [eventType]=\"eventType\"\r\n    [isNDependent]=\"isNDependent\"\r\n    [events]=\"events\"\r\n    [detailsData]=\"detailsData\"\r\n    [context]=\"context\"\r\n    [modalOpen]=\"modalOpen\"\r\n    [plantingId]='plantingId'\r\n    [setDetailsData]=\"setDetailsData\">\r\n</event-table-fertilizer>\r\n\r\n<ng-container *ngIf=\"eventType === EventsTypeEnum.TISSUE_SAMPLE\">\r\n    <event-table-tissue-samples\r\n        [events]=\"events\"\r\n        [modalOpen]=\"modalOpen\">\r\n    </event-table-tissue-samples>\r\n</ng-container>\r\n\r\n<!-- soil samples -->\r\n\r\n<ng-container *ngIf=\"eventType == EventsTypeEnum.SOILSAMPLES\">\r\n    <table class=\"bk-event-table\">\r\n        <thead>\r\n            <tr>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.SoilSamples=='EventDateString' &&\r\n                        plantingService.sortDescending.SoilSamples\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.SoilSamples=='EventDateString' &&\r\n                        !plantingService.sortDescending.SoilSamples\"\r\n                    (click)=\"plantingService.sort('SoilSamples','EventDateString', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Date' | translate }}\r\n                    </div>\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.SoilSamples=='SoilSamplesSampleType' &&\r\n                        plantingService.sortDescending.SoilSamples\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.SoilSamples=='SoilSamplesSampleType' &&\r\n                        !plantingService.sortDescending.SoilSamples\"\r\n                    (click)=\"plantingService.sort('SoilSamples','SoilSamplesSampleType', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Sample Type' | translate }}\r\n                    </div>\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.SoilSamples=='SoilSamplesDepth' &&\r\n                        plantingService.sortDescending.SoilSamples\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.SoilSamples=='SoilSamplesDepth' &&\r\n                        !plantingService.sortDescending.SoilSamples\"\r\n                    (click)=\"plantingService.sort('SoilSamples','SoilSamplesDepth', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Depth' | translate }}\r\n                    </div>\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.SoilSamples=='SoilSamplesCropStageName' &&\r\n                        plantingService.sortDescending.SoilSamples\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.SoilSamples=='SoilSamplesCropStageName' &&\r\n                        !plantingService.sortDescending.SoilSamples\"\r\n                    (click)=\"plantingService.sort('SoilSamples','SoilSamplesCropStageName', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Soil Crop Stage' | translate }}\r\n                    </div>\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th *ngIf=\"plantingService.units.soilSamples == 'ppmNitrate-N' && isNDependent\"\r\n                    class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.SoilSamples=='SoilSamplesSoilNitrateNPPM' &&\r\n                        plantingService.sortDescending.SoilSamples\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.SoilSamples=='SoilSamplesSoilNitrateNPPM' &&\r\n                        !plantingService.sortDescending.SoilSamples\"\r\n                    (click)=\"plantingService.sort('SoilSamples','SoilSamplesSoilNitrateNPPM', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        N (ppm Nitrate-N)\r\n                    </div>\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th *ngIf=\"plantingService.units.soilSamples == 'lbsNPerAcre' && isNDependent\"\r\n                    class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.SoilSamples=='SoilSamplesSoilMineralNLbsAcre' &&\r\n                        plantingService.sortDescending.SoilSamples\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.SoilSamples=='SoilSamplesSoilMineralNLbsAcre' &&\r\n                        !plantingService.sortDescending.SoilSamples\"\r\n                    (click)=\"plantingService.sort('SoilSamples','SoilSamplesSoilMineralNLbsAcre', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        N (lbs N/acre)\r\n                    </div>\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n            </tr>\r\n        </thead>\r\n        <tbody>\r\n            <ng-container *ngFor=\"let event of events | orderBy: plantingService.sortColumn('SoilSamples')\">\r\n                <tr *ngIf=\"event.SoilSamples[0]\"\r\n                    class=\"bk-event-table__row\"\r\n                    (click)=\"openModal(EventsTypeEnum.SOILSAMPLES, event.SoilSamples[0].Id, $event)\">\r\n\r\n                    <td class=\"bk-event-table__cell\">\r\n                        <div class=\"bk-text--nobr\">\r\n                            <span>\r\n                                {{event.EventDate | date:'M/d/yyyy'}}\r\n                            </span>\r\n                        </div>\r\n                    </td>\r\n                    <td class=\"bk-event-table__cell\">\r\n                        <span *ngIf=\"isSoilSamplePanelAccessible(event.SoilSamples[0])\" \r\n                                [class.bk-event-calculation-details__link--open]=\"event.SoilSamples[0] && event.SoilSamples[0].ShowDetails\"\r\n                                class=\"bk-event-calculation-details__link stop-modal-open\"\r\n                                (click)=\"toggleSoilSampleDetails(event.SoilSamples[0].Id, $event);\">\r\n                            {{event.SoilSamples[0].SampleType | translate }}\r\n                        </span>\r\n                        <span *ngIf=\"!isSoilSamplePanelAccessible(event.SoilSamples[0])\">\r\n                            {{event.SoilSamples[0].SampleType | translate }}\r\n                        </span>\r\n                    </td>\r\n                    <td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n                        {{event.SoilSamples[0].Depth}}\r\n                        <span class=\"bk-unit-text\">\r\n                            {{'ft' | translate}}\r\n                        </span>\r\n                    </td>\r\n                    <td class=\"bk-event-table__cell\">\r\n                        {{event.SoilSamples[0].CropStage ? (event.SoilSamples[0].CropStage.Name | translate) : ''}}\r\n                    </td>\r\n                    <td *ngIf=\"isNDependent\"\r\n                        class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n\r\n                        <user-icon [event]=\"event\"\r\n                            [eventType]=\"'SoilSamples'\">\r\n                        </user-icon>\r\n\r\n                        <ng-container *ngIf=\"plantingService.units.soilSamples == 'ppmNitrate-N'\">\r\n                            {{event.SoilSamples[0].SoilNitrateNPPM | number: '1.0-1'}}\r\n                            \r\n                        </ng-container>\r\n                        <ng-container *ngIf=\"plantingService.units.soilSamples == 'lbsNPerAcre'\">\r\n                            {{event.SoilSamples[0].SoilMineralNLbsAcre | number: '1.0-1'}}\r\n                        </ng-container>\r\n                    </td>\r\n                </tr>\r\n                <tr *ngIf=\"event.SoilSamples[0] && event.SoilSamples[0].ShowDetails\">\r\n                    <td class=\"bk-event-calculation-details\" colspan=\"7\">\r\n                        <span (click)=\"closeSoilSampleEventDetails()\"\r\n                            class=\"fa fa-times-circle bk-event-details__close\"></span>\r\n                        <h4 *ngIf=\"isNDependent\"\r\n                            class=\"bk-modal__header-title\">\r\n                            {{'Additional Nutrients' | translate}}\r\n                        </h4>\r\n                        <h4 *ngIf=\"!isNDependent\"\r\n                            class=\"bk-modal__header-title\">\r\n                            {{'Nutrients' | translate}}\r\n                        </h4>\r\n                        <div *ngFor=\"let nutrient of eventUtility.sortNutrients(event.SoilSamples[0].Nutrients)\"\r\n                            class=\"bk-event-calculation-details__cell bk-margin-top\">\r\n                            <div class=\"bk-event-calculation-details__nutrient-title\">\r\n                                {{nutrient.Nutrient | translate }}\r\n                            </div>\r\n                            <div class=\"bk-event-calculation-details__nutrient-value\">\r\n                                {{nutrient.Value | number: '1.0-1'}} {{ nutrient.Nutrient === 'Organic Matter' ? '%' : 'ppm'}}\r\n                            </div>\r\n                        </div>\r\n                    </td>\r\n                </tr>\r\n            </ng-container>\r\n        </tbody>\r\n    </table>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"eventType === EventsTypeEnum.CUTTING && hasCutEvents\">\r\n    <table class=\"bk-event-table\">\r\n        <thead>\r\n            <tr>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\" \r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.Cutting === 'EventDateString'\r\n                        && plantingService.sortDescending.Cutting\" \r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.Cutting === 'EventDateString'\r\n                        && !plantingService.sortDescending.Cutting\" \r\n                    (click)=\"plantingService.sort('Cutting', 'EventDateString', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Date' | translate }}\r\n                    </div>\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\" \r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.Cutting === 'CuttingMaturityName' &&\r\n                        plantingService.sortDescending.Cutting\" \r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.Cutting === 'CuttingMaturityName' &&\r\n                        !plantingService.sortDescending.Cutting\" \r\n                    (click)=\"plantingService.sort('Cutting', 'CuttingMaturityName', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Maturity' | translate }}\r\n                    </div>\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.Cutting === 'CuttingDaysSincePreviousCutting' &&\r\n                        plantingService.sortDescending.Cutting\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.Cutting === 'CuttingDaysSincePreviousCutting' &&\r\n                        !plantingService.sortDescending.Cutting\"\r\n                    (click)=\"plantingService.sort('Cutting', 'CuttingDaysSincePreviousCutting', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Cut Interval' | translate }}\r\n                        <mat-icon class=\"bk-info-icon bk-event-table__header__icon\"\r\n                            [popper]=\"CutIntervalHelpText\"\r\n                            [popperTrigger]=\"'hover'\"\r\n                            [popperPlacement]=\"'top'\">\r\n                            info_outline\r\n                        </mat-icon>\r\n                    </div>\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n                <th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n                    [class.bk-event-table__header--desc]=\"plantingService.sortField.Cutting === 'CuttingYield'\r\n                        && plantingService.sortDescending.Cutting\"\r\n                    [class.bk-event-table__header--asc]=\"plantingService.sortField.Cutting === 'CuttingYield'\r\n                        && !plantingService.sortDescending.Cutting\"\r\n                    (click)=\"plantingService.sort('Cutting', 'CuttingYield', eventType)\">\r\n                    <div class=\"bk-event-table__header-text\">\r\n                        {{'Yield' | translate }}\r\n                    </div>\r\n                    <i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n                    <i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n                </th>\r\n            </tr>\r\n        </thead>\r\n        <tbody>\r\n            <ng-container *ngFor=\"let event of events | orderBy: plantingService.sortColumn('Cutting')\">\r\n                <tr *ngIf=\"event.CutEvent\"\r\n                    class=\"bk-event-table__row\"\r\n                    (click)=\"openModal(EventsTypeEnum.CUTTING, event.CutEvent.Id, $event)\">\r\n                    <td class=\"bk-event-table__cell\">\r\n                        <div class=\"bk-text--nobr\">\r\n                            <span class=\"bk-event-table__cell-text\">\r\n                                {{event.EventDate | date:'M/d/yyyy'}}\r\n                            </span>\r\n                        </div>\r\n                    </td>\r\n                    <td class=\"bk-event-table__cell\">\r\n                        <ng-container *ngIf=\"event.CutEvent.MaturityId\">\r\n                            {{ getMaturityName(event.CutEvent.MaturityId) }}\r\n                        </ng-container>\r\n                        <ng-container *ngIf=\"!event.CutEvent.MaturityId\">\r\n                            N/A\r\n                        </ng-container>            \r\n                    </td>\r\n                    <td class=\"bk-event-table__cell\">\r\n                        <ng-container *ngIf=\"event.CuttingDaysSincePreviousCutting >= 0\">\r\n                            {{ event.CuttingDaysSincePreviousCutting }} \r\n                            <span class=\"bk-unit-text\">\r\n                                {{'days' | translate }}\r\n                            </span>\r\n                        </ng-container>\r\n                        <ng-container *ngIf=\"event.CuttingDaysSincePreviousCutting < 0\">\r\n                            N/A\r\n                        </ng-container>\r\n                    </td>\r\n                    <td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n                        <user-icon [event]=\"event\"\r\n                            [eventType]=\"'Cutting'\">\r\n                        </user-icon>\r\n                        {{ event.CutEvent.Yield }} \r\n                        <span class=\"bk-unit-text\">\r\n                            {{'tons' | translate }}\r\n                        </span>\r\n                    </td>\r\n                </tr>\r\n            </ng-container>\r\n        </tbody>\r\n    </table>\r\n</ng-container>\r\n\r\n<popper-content #floodIrrigationUnitTablePopper>\r\n    <div *ngIf=\"plantingService.units.water == 'inches'\"\r\n        class=\"bk-popper\">\r\n        {{ 'Flood Irrigation Unit Mismatch Inches Text' | translate }}\r\n    </div>\r\n    <div *ngIf=\"plantingService.units.water == 'hours'\"\r\n        class=\"bk-popper\">\r\n        {{ 'Flood Irrigation Unit Mismatch Hours Text' | translate }}\r\n    </div>\r\n</popper-content>\r\n\r\n<popper-content #CutIntervalHelpText>\r\n    <div class=\"bk-popper\">\r\n        {{ 'Days since previous cutting if previous cutting event exists, or start date if first cutting event of the season' | translate }}\r\n    </div>\r\n</popper-content>","import { Component, OnInit, Input, ViewChild, Output, EventEmitter, OnDestroy } from '@angular/core';\r\n\r\nimport { PlantingService } from '../../planting-settings/service';\r\nimport { UpdateService } from '../../../services/update.service';\r\n\r\nimport { EventUtility } from '../../../models/event/eventUtility';\r\nimport { DateUtility } from '../../../classes/dateUtility';\r\nimport { JQueryHelper } from '../../../classes/jqueryHelper';\r\nimport { SoilSampleEvent } from '../../soil-sample-event/soilSampleEvent';\r\nimport { IrrigationEvent } from '../../irrigation-event/irrigationEvent';\r\nimport { EventGroup } from '../../../models/event/event';\r\n\r\nimport { RanchService } from '../../ranch-settings/service';\r\nimport { IrrigationService } from '../../irrigation-event/service';\r\nimport { ValidateService } from '../../../services/validate.service';\r\n\r\nimport { IIrrigationEvent, IRRIGATION_INTERVAL_MAX, IIrrigationRecommendationSummaryModel } from '../../irrigation-event/interfaces';\r\n\r\nimport { IEventGroup } from '../../../models/event/interfaces';\r\nimport { IPlanting } from '../../planting-settings/interfaces';\r\nimport { IMaturity } from '../../../models/maturity/interfaces';\r\nimport { ICutEvent } from '../../cut-event/cut-event.interfaces';\r\n\r\nimport { EventsType, EventContext, eIrrigationMethods, eFertilizerFormulationTypes,\r\n\teCommodityTypes, eSampleTypeIds } from '../../../interfaces/constants';\r\nimport { TissueSampleEvent } from '../../tissue-sample-event/tissueSampleEvent';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { IEventDetails } from '../../shared/interfaces';\r\nimport { TranslateService } from '../../localization/service';\r\n\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'events-table',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: ['main.scss']\r\n})\r\n\r\nexport class EventsTableComponent implements OnInit, OnDestroy {\r\n\t@Input()\r\n\tplantingId: number;\r\n\r\n\t@Input()\r\n\tevents: EventGroup[];\r\n\r\n\t@Input()\r\n\teventType: EventsType;\r\n\r\n\t@Input()\r\n\tdetailsData: IEventDetails;\r\n\r\n\t@Input()\r\n\tshowAdditionalWaterDataLoader: boolean;\r\n\r\n\t@Input()\r\n\tmaturities: IMaturity[];\r\n\r\n\t@Input()\r\n\tisNDependent: boolean;\r\n\r\n\t@Input()\r\n\thasCutEvents: boolean;\r\n\r\n\t@Output()\r\n\tsetDetailsData = new EventEmitter<IEventDetails>();\r\n\r\n\t@Output()\r\n\tmodalOpen = new EventEmitter<{ eventType: EventsType, id: number }>();\r\n\r\n\t@Output()\r\n\tirrigationSummaryType: string;\r\n\r\n\t@Output()\r\n\tirrigationRecommendationSummary: IIrrigationRecommendationSummaryModel;\r\n\r\n\tpublic maxIrrigationInterval = IRRIGATION_INTERVAL_MAX;\r\n\tpublic eventUtility = EventUtility;\r\n\tpublic EventsTypeEnum = EventsType;\r\n\tpublic validationService = ValidateService;\r\n\tpublic planting: IPlanting;\r\n\tpublic irrigationEvent: IrrigationEvent;\r\n\r\n\tpublic showAdditionalWaterData = false;\r\n\tpublic IRRIGATION_METHOD_RAINFALL = 'Rainfall';\r\n\tpublic FORMULATION_TYPE_DRY = 'Dry';\r\n\tpublic FORMULATION_TYPE_WET = 'Wet';\r\n\r\n\tpublic context = EventContext;\r\n\r\n\tpublic irrigationMethods = eIrrigationMethods;\r\n\tpublic fertilizerFormulationTypes = eFertilizerFormulationTypes;\r\n\tpublic commodityTypes = eCommodityTypes;\r\n\tpublic tissueSampleEventClass = TissueSampleEvent;\r\n\tpublic isIrrigationDetailLoaded = false;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tpublic plantingService: PlantingService,\r\n\t\tprivate updateService: UpdateService,\r\n\t\tprivate ranchService: RanchService,\r\n\t\tprivate irrigationService: IrrigationService,\r\n\t\tprivate _translateService: TranslateService) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.irrigationEvent = new IrrigationEvent(this._translateService);\r\n\t\tthis.planting = this.ranchService.plantings.getPlantingById(this.plantingId);\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.updateService.unitsToggle$.pipe(takeUntil(this._subscriptions$)).subscribe((data: { type: string, value: string }) => {\r\n\t\t\tthis.toggleUnits(data.type, data.value);\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 cellHasCalculations(event: IIrrigationEvent) {\r\n\r\n\t\tif (!event) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (event.IrrigationMethod === this.IRRIGATION_METHOD_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 getLeechingFactor(recommendationSummary: IIrrigationRecommendationSummaryModel, asPercent: boolean) {\r\n\t\treturn EventUtility.getLeechingFactor(recommendationSummary, asPercent);\r\n\t}\r\n\r\n\tprivate checkforNA(value: string): boolean {\r\n\t\tif (parseInt(value, 10) === -1) {\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\tprivate toggleUnits(eventType: string, value: string) {\r\n\t\tif (eventType === 'Water') {\r\n\t\t\tthis.plantingService.units.water = value;\r\n\t\t} else if (eventType === 'Fertilizer') {\r\n\t\t\tthis.plantingService.units.fertilizer = value;\r\n\t\t} else if (eventType === 'SoilSamples') {\r\n\t\t\tthis.plantingService.units.soilSamples = value;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleAddtionalWaterData(): void {\r\n\t\tthis.showAdditionalWaterData = !this.showAdditionalWaterData;\r\n\t}\r\n\r\n\tpublic setShowAdditionalWaterData(show: boolean): void {\r\n\t\tthis.showAdditionalWaterData = show;\r\n\t}\r\n\r\n\tpublic openModal(eventType: EventsType, id: number, event: Event): void {\r\n\t\tlet className: string;\r\n\r\n\t\tclassName = JQueryHelper.getElementClassFromEvent(event);\r\n\r\n\t\tif (className.indexOf('stop-modal-open') === -1) {\r\n\t\t\tthis.modalOpen.emit({ eventType: eventType, id: id });\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleIrrigationEventDetails(recommendationType: string, id: number, e: Event) {\r\n\t\te.stopPropagation();\r\n\r\n\t\tlet detailsData: IEventDetails = this.detailsData;\r\n\r\n\t\tthis.isIrrigationDetailLoaded = false;\r\n\r\n\t\tfor (let event of this.events) {\r\n\r\n\t\t\tif (!event.Irrigation) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (event.Irrigation.Id === id) {\r\n\r\n\t\t\t\t// bad method\r\n\t\t\t\tif (this.cellHasCalculations(event.Irrigation as IIrrigationEvent) === false) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.detailsData.irrigationRecommendationDetailsType === recommendationType) {\r\n\t\t\t\t\tevent.Irrigation.ShowDetails = !event.Irrigation.ShowDetails;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tevent.Irrigation.ShowDetails = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (recommendationType === 'IrrigationInterval') {\r\n\t\t\t\t\tthis.irrigationService.getIrrigationIntervalSummary(id)\r\n\t\t\t\t\t\t.then(res => {\r\n\t\t\t\t\t\t\tlet details: IEventDetails;\r\n\r\n\t\t\t\t\t\t\tdetails = {\r\n\t\t\t\t\t\t\t\tirrigationRecommendationDetails: res,\r\n\t\t\t\t\t\t\t\tirrigationRecommendationDetailsType: recommendationType,\r\n\t\t\t\t\t\t\t\tfertilizationRecommendationDetails: detailsData.fertilizationRecommendationDetails\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.setDetailsData.emit(details);\r\n\t\t\t\t\t\t\tthis.isIrrigationDetailLoaded = true;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t} else if (recommendationType === 'Water') {\r\n\r\n\t\t\t\t\tthis.irrigationService.getRecommendationSummary(this.plantingId,\r\n\t\t\t\t\t\tDateUtility.DotNetToDate(event.Irrigation.EventDate),\r\n\t\t\t\t\t\tevent.Irrigation.IrrigationMethodId, id, event.Irrigation.CustomDeficit)\r\n\t\t\t\t\t\t.then(res => {\r\n\t\t\t\t\t\t\tlet details: IEventDetails;\r\n\r\n\t\t\t\t\t\t\tdetails = {\r\n\t\t\t\t\t\t\t\tirrigationRecommendationDetails: res,\r\n\t\t\t\t\t\t\t\tirrigationRecommendationDetailsType: recommendationType,\r\n\t\t\t\t\t\t\t\tfertilizationRecommendationDetails: detailsData.fertilizationRecommendationDetails\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.setDetailsData.emit(details);\r\n\t\t\t\t\t\t\tthis.isIrrigationDetailLoaded = true;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tevent.Irrigation.ShowDetails = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleSoilSampleDetails(id: number, e: Event) {\r\n\t\te.stopPropagation();\r\n\r\n\t\tfor (let event of this.events) {\r\n\t\t\tfor (let sample of event.SoilSamples) {\r\n\t\t\t\tif (sample.Id === id) {\r\n\t\t\t\t\tsample.ShowDetails = !sample.ShowDetails;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsample.ShowDetails = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic closeIrrigationEventDetails(): void {\r\n\r\n\t\tif (!this.events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let event of this.events) {\r\n\r\n\t\t\tif (!event.Irrigation) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tevent.Irrigation.ShowDetails = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic closeSoilSampleEventDetails(): void {\r\n\t\tfor (let event of this.events) {\r\n\t\t\tevent.SoilSamples[0].ShowDetails = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic soilSampleNotApplied(event: IEventGroup): boolean {\r\n\t\tif (!event || event == null) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (typeof event.isPast === 'undefined') {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn !EventUtility.soilSampleApplied(event, event.isPast, this.isNDependent);\r\n\t}\r\n\r\n\tprivate isNA(value: number): boolean {\r\n\t\treturn value === -1;\r\n\t}\r\n\r\n\tpublic getMaturityName(id: number): string {\r\n\t\tlet maturity: IMaturity;\r\n\r\n\t\tif (!this.maturities || !ValidateService.isValidNumber(id)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmaturity = this.maturities.filter(x => x.Id === id)[0];\r\n\r\n\t\tif (!maturity) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn maturity.Name;\r\n\t}\r\n\r\n\tpublic showCutEventWarning(cutEvent: ICutEvent, isPast: boolean): boolean {\r\n\t\tif (!cutEvent) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (isPast === false) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn cutEvent.Yield <= 0;\r\n\t}\r\n\r\n\tpublic isSoilSamplePanelAccessible(soilSample: SoilSampleEvent): boolean {\r\n\r\n\t\tif (soilSample.SampleTypeId === eSampleTypeIds.QUICK_NITRATE_STRIP) { // if nitrate strip, we only see N, so waste of effort\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (soilSample.Nutrients && soilSample.Nutrients.length > 0) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn soilSample.SoilNitrateNPPM > 0;\r\n\t}\r\n\r\n\tpublic isIrrigationRecommendationNA(irrigationEvent: IrrigationEvent): boolean {\r\n\t\treturn IrrigationEvent.isRecommendationNA(irrigationEvent, [irrigationEvent.RecommendedIrrigationAmount]);\r\n\t}\r\n}\r\n","<ng-container *ngIf=\"fertilizerAmount > 0\">\r\n\t<span class=\"bk-event-table__fertilizer--nutrient\">\r\n\t\t{{ nutrients.N }}{{ 'lbs' | translate }} N,\r\n\t</span>\r\n\r\n\t<span class=\"bk-event-table__fertilizer--nutrient\">\r\n\t\t{{ nutrients.P }}{{ 'lbs' | translate }} P,\r\n\t</span>\r\n\r\n\t<span class=\"bk-event-table__fertilizer--nutrient\">\r\n\t\t{{ nutrients.K }}{{ 'lbs' | translate }} K\r\n\t</span>\r\n</ng-container>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FertilizationEvent } from '../../../fertilization-event/fertilizationEvent';\r\nimport { EventGroup } from '../../../../models/event/event';\r\n\r\nimport { NUTRIENT_KEYS } from '../../../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'npk',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class EventTableFertilizerNPKComponent {\r\n\r\n\t@Input()\r\n\tevent: EventGroup;\r\n\r\n\t@Input()\r\n\tfertilizerAmount: number;\r\n\r\n\tpublic nutrients: {\r\n\t\tN: number,\r\n\t\tP: number,\r\n\t\tK: number\r\n\t};\r\n\r\n\tpublic fertilizationEventClass = FertilizationEvent;\r\n\r\n\tconstructor() {\r\n\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tif (!this.event || !this.event.Fertilization || this.event.Fertilization.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.nutrients = {\r\n\t\t\tN: null,\r\n\t\t\tP: null,\r\n\t\t\tK: null\r\n\t\t};\r\n\r\n\t\tif (this.fertilizerAmount === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.nutrients.N = FertilizationEvent.getFertilizerNutrientAmount(this.event.Fertilization[0],\r\n\t\t\tthis.fertilizerAmount, NUTRIENT_KEYS.N);\r\n\r\n\t\tthis.nutrients.P = FertilizationEvent.getFertilizerNutrientAmount(this.event.Fertilization[0],\r\n\t\t\tthis.fertilizerAmount, NUTRIENT_KEYS.P);\r\n\r\n\t\tthis.nutrients.K = FertilizationEvent.getFertilizerNutrientAmount(this.event.Fertilization[0],\r\n\t\t\tthis.fertilizerAmount, NUTRIENT_KEYS.K);\r\n\t}\r\n}\r\n","<table class=\"bk-event-table\">\r\n\r\n\t<!-- headers -->\r\n\r\n\t<thead>\r\n\t\t<tr>\r\n\t\t\t<th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n\t\t\t\t[class.bk-event-table__header--desc]=\"plantingService.sortField.get('TissueSamples') === 'EventDateString' &&\r\n\t\t\t\tplantingService.sortDescending.get('TissueSamples')\"\r\n\t\t\t\t[class.bk-event-table__header--asc]=\"plantingService.sortField.get('TissueSamples') === 'EventDateString' &&\r\n\t\t\t\t!plantingService.sortDescending.get('TissueSamples')\"\r\n\t\t\t\t(click)=\"plantingService.sort('Tissue Samples','EventDateString', eventTypes.TISSUE_SAMPLE)\">\r\n\r\n\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t{{'Date' | translate }}\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n\t\t\t\t<i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n\t\t\t</th>\r\n\t\t\t<th class=\"bk-event-table__header bk-event-table__header--sort\"\r\n\t\t\t\t[class.bk-event-table__header--desc]=\"plantingService.sortField.get('TissueSamples') === 'TissueSamplesCropStageName' &&\r\n\t\t\t\tplantingService.sortDescending.get('TissueSamples')\"\r\n\t\t\t\t[class.bk-event-table__header--asc]=\"plantingService.sortField.get('TissueSamples') === 'TissueSamplesCropStageName' &&\r\n\t\t\t\t!plantingService.sortDescending.get('TissueSamples')\"\r\n\t\t\t\t(click)=\"plantingService.sort('Tissue Samples','TissueSamplesCropStageName', eventTypes.TISSUE_SAMPLE)\">\r\n\r\n\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t{{'Crop Stage' | translate }}\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n\t\t\t\t<i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n\t\t\t</th>\r\n\t\t\t<th class=\"bk-event-table__header bk-event-table__header--sort\" \r\n\t\t\t\t[class.bk-event-table__header--desc]=\"plantingService.sortField.get('TissueSamples') =='TissueSamplesLocationName' &&\r\n\t\t\t\tplantingService.sortDescending.get('TissueSamples')\"\r\n\t\t\t\t[class.bk-event-table__header--asc]=\"plantingService.sortField.get('TissueSamples') =='TissueSamplesLocationName' &&\r\n\t\t\t\t!plantingService.sortDescending.get('TissueSamples')\"\r\n\t\t\t\t(click)=\"plantingService.sort('Tissue Samples','TissueSamplesLocationName', eventTypes.TISSUE_SAMPLE)\">\r\n\r\n\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t{{'Part of Plant' | translate }}\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<i class=\"fa fa-caret-up bk-event-table__sort-asc\"></i>\r\n\t\t\t\t<i class=\"fa fa-caret-down bk-event-table__sort-desc\"></i>\r\n\t\t\t</th>\r\n\r\n\t\t\t<th class=\"bk-event-table__header bk-event-table__header--sort\" width=\"200px\">\r\n\r\n\t\t\t\t<div class=\"bk-event-table__header-text\">\r\n\t\t\t\t\t{{'Main Nutrient' | translate }}\r\n\t\t\t\t</div>\r\n\t\t\t</th>\r\n\t\t</tr>\r\n\t</thead>\r\n\r\n\t<!-- results -->\r\n\r\n\t<tbody>\r\n\t\t<ng-container *ngFor=\"let event of events | orderBy: plantingService.sortColumn('Tissue Samples')\">\r\n\r\n\t\t\t<!-- fertilization event row START -->\r\n\r\n\t\t\t<tr *ngIf=\"event.TissueSamples && event.TissueSamples.length > 0\"\r\n\t\t\t\t[class.bk-event-table__row--open]=\"event.TissueSamples[0].ShowDetails\"\r\n\t\t\t\tclass=\"bk-event-table__row\"\r\n\t\t\t\t(click)=\"openModal(event.TissueSamples[0].Id, $event)\" >\r\n\r\n\t\t\t\t<td class=\"bk-event-table__cell\">\r\n\t\t\t\t\t<div class=\"bk-text--nobr\">\r\n\t\t\t\t\t\t<span class=\"bk-event-table__cell-text\">\r\n\t\t\t\t\t\t\t{{event.EventDate | date:'M/d/yyyy' }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</td>\r\n\t\t\t\t<td class=\"bk-event-table__cell\">\r\n\t\t\t\t\t{{event.TissueSamples[0].CropStage ? (event.TissueSamples[0].CropStage.Name | translate ): ''}}\r\n\t\t\t\t</td>\r\n\t\t\t\t<td class=\"bk-event-table__cell\">\r\n\t\t\t\t\t{{event.TissueSamples[0].Location ? (event.TissueSamples[0].Location.Name | translate ): ''}}\r\n\t\t\t\t</td>\r\n\r\n\t\t\t\t<td class=\"bk-event-table__cell bk-event-table__cell--right-align\">\r\n\t\t\t\t\t<span [class.bk-event-calculation-details__link--open]=\"event.TissueSamples[0] &&\r\n\t\t\t\t\t\tevent.TissueSamples[0].ShowDetails\"\r\n\t\t\t\t\t\tclass=\"bk-event-calculation-details__link\"\r\n\t\t\t\t\t\t(click)=\"toggleEventDetails(event.TissueSamples[0].Id, $event);\">\r\n\r\n\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t{{event.TissueSamples[0].NutrientDisplayText}}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"event.TissueSamples[0] && event.TissueSamples[0].ShowDetails\">\r\n\t\t\t\t<td class=\"bk-event-calculation-details\" colspan=\"7\">\r\n\t\t\t\t\t<span (click)=\"closeEventDetails()\"\r\n\t\t\t\t\t\tclass=\"fa fa-times-circle bk-event-details__close\">\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<h4 class=\"bk-modal__header-title\">\r\n\t\t\t\t\t\t{{'Nutrients' | translate}}\r\n\t\t\t\t\t</h4>\r\n\r\n\t\t\t\t\t<div *ngFor=\"let nutrient of event.TissueSamples[0].Nutrients\"\r\n\t\t\t\t\t\tclass=\"bk-event-calculation-details__cell bk-margin-top\">\r\n\r\n\t\t\t\t\t\t<div class=\"bk-event-calculation-details__nutrient-title\">\r\n\t\t\t\t\t\t\t{{nutrient.Name | translate }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"bk-event-calculation-details__nutrient-value\">\r\n\t\t\t\t\t\t\t{{nutrient.Value }}\r\n\t\t\t\t\t\t\t{{nutrient.MeasurementUnitId === measurementUnits.PPM ? \" ppm\" : \"%\" }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t</ng-container>\r\n\t</tbody>\r\n</table>","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\n\r\nimport { PlantingService } from '../../../planting-settings/service';\r\nimport { JQueryHelper } from '../../../../classes/jqueryHelper';\r\nimport { EventGroup } from '../../../../models/event/event';\r\n\r\nimport { EventsType, EventContext } from '../../../../interfaces/constants';\r\nimport { EventUtility } from '../../../../models/event/eventUtility';\r\nimport { eMeasureUnitTypes } from '../../../tissue-sample-event/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'event-table-tissue-samples',\r\n\ttemplateUrl: 'event-table.tissue-samples.html'\r\n})\r\n\r\nexport class EventTableTissueSamplesComponent implements OnInit {\r\n\r\n\t@Input()\r\n\tevents: EventGroup[];\r\n\r\n\t@Input()\r\n\tmodalOpen: EventEmitter<{ eventType: EventsType, id: number }>;\r\n\r\n\tpublic eventUtility = EventUtility; // used to sort nutrients\r\n\tpublic context = EventContext; // view context: table or list\r\n\tpublic eventTypes = EventsType;\r\n\tpublic measurementUnits = eMeasureUnitTypes;\r\n\r\n\tconstructor(\r\n\t\tpublic plantingService: PlantingService\r\n\t) { }\r\n\r\n\tngOnInit() {\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param type\r\n\t * @param id\r\n\t * @param event DOM Event (not a CropManage event)\r\n\t */\r\n\tpublic openModal(id: number, event: Event): void {\r\n\t\tlet className: string;\r\n\r\n\t\tclassName = JQueryHelper.getElementClassFromEvent(event);\r\n\r\n\t\tif (!className || className.indexOf('stop-modal-open') === -1) {\r\n\t\t\tthis.modalOpen.emit({ eventType: EventsType.TISSUE_SAMPLE, id: id });\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleEventDetails(id: number, e: Event): void {\r\n\t\te.stopPropagation();\r\n\r\n\t\tif (!this.events || this.events.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let event of this.events) {\r\n\r\n\t\t\tif (!event.TissueSamples || event.TissueSamples.length === 0) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (event.TissueSamples[0].Id === id) {\r\n\t\t\t\tevent.TissueSamples[0].ShowDetails = !event.TissueSamples[0].ShowDetails;\r\n\t\t\t} else {\r\n\t\t\t\tevent.TissueSamples[0].ShowDetails = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic closeEventDetails(): void {\r\n\t\tfor (let event of this.events) {\r\n\t\t\tevent.TissueSamples[0].ShowDetails = false;\r\n\t\t}\r\n\t}\r\n}\r\n","<ng-container *ngIf=\"eventType == EventsTypeEnum.ALL && view != EventsViewEnum.TOTALS\">\r\n    <h4 class=\"bk-event-totals__title\">{{'Totals' | translate }}</h4>\r\n    <div class=\"bk-event-totals\">\r\n        <div class=\"bk-event-total--container\">\r\n            <div class=\"bk-event-total-icon bk-event-total-icon--water bk-event-total-icon--responsive\">\r\n                <svg-water></svg-water>\r\n            </div>\r\n            <div class=\"bk-event-total\">\r\n\r\n                <span [ngClass]=\"{'bk-totals__invalid': numNotApplied && numNotApplied.irrigation > 0}\">\r\n                    {{appliedWater + rainfall | number: '1.0-1'}} {{'in' | translate }}\r\n                </span>\r\n                <i *ngIf=\"numNotApplied && numNotApplied.irrigation > 0\"\r\n                    matTooltip=\"{{numNotApplied.irrigation}} irrigation event(s) missing applied values\"\r\n                    class=\"bk-event-recommendation-not-applied-icon fa fa-warning bk-clickable\">\r\n                </i>\r\n            </div>\r\n        </div>\r\n        <div class=\"bk-event-total--container\">\r\n            <div class=\"bk-event-total-icon bk-event-total-icon--fertilizer bk-event-total-icon--responsive\">\r\n                <svg-fertilizer></svg-fertilizer>\r\n            </div>\r\n            <div class=\"bk-event-total\">\r\n                <span *ngIf=\"isNDependent\"\r\n                    [ngClass]=\"{'bk-totals__invalid': numNotApplied && numNotApplied.fertilization > 0}\">\r\n                    {{appliedN | number: '1.0-1'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n\r\n                    <i *ngIf=\"numNotApplied && numNotApplied.fertilization > 0\"\r\n                        matTooltip=\"{{numNotApplied.fertilization}} fertilization event(s) missing applied values\"\r\n                        class=\"bk-event-recommendation-not-applied-icon fa fa-warning bk-clickable\">\r\n                    </i>\r\n                </span>\r\n\r\n                <div *ngIf=\"isNDependent\"\r\n                    class=\"bk-event-totals__detail-text\">\r\n                    {{'Fertilizer Applied' | translate}}\r\n                </div>\r\n                <span *ngIf=\"!isNDependent\">\r\n                    {{ numFertilizationEvents }} {{ 'Event' | plural: numFertilizationEvents | translate }}\r\n                </span>\r\n            </div>\r\n        </div>\r\n        <div class=\"bk-event-total--container\">\r\n            <div class=\"bk-event-total-icon bk-event-total-icon--soil bk-event-total-icon--responsive\">\r\n                <svg-soil-sample></svg-soil-sample>\r\n\t\t\t</div>\r\n            <div class=\"bk-event-total\">\r\n                {{numSoilSamples}} {{'Event' | plural : numSoilSamples | translate }}\r\n\t\t\t</div>\r\n        </div>\r\n        <div class=\"bk-event-total--container\">\r\n            <div class=\"bk-event-total-icon bk-event-total-icon--soil bk-event-total-icon--responsive\">\r\n                <svg-tissue-sample></svg-tissue-sample>\r\n            </div>\r\n            <div class=\"bk-event-total\">\r\n                {{numTissueSamples}} {{'Event' | plural : numTissueSamples | translate }}\r\n            </div>\r\n        </div>\r\n        <div class=\"bk-event-total--container\"\r\n            *ngIf=\"hasCutEvents\">\r\n            <div class=\"bk-event-total-icon bk-event-total-icon--cutting bk-event-total-icon--responsive\">\r\n                <img src=\"../assets/images/icons/icon-sickle-white.svg\"/>\r\n            </div>\r\n            <div class=\"bk-event-total\">\r\n\t\t\t\t{{numCuttings}} {{'Event' | plural : numCuttings | translate }}\r\n\t\t\t</div>\r\n        </div>\r\n    </div>\r\n</ng-container>\r\n\r\n<!-- water tab -->\r\n<ng-container *ngIf=\"eventType == EventsTypeEnum.WATER && view != EventsViewEnum.TOTALS\">\r\n    <h4 class=\"bk-event-totals__title\">\r\n        {{'Totals' | translate }}\r\n    </h4>\r\n    <div class=\"bk-event-totals\">\r\n        <div class=\"bk-event-total-icon bk-event-total-icon--water\">\r\n            <svg-water></svg-water>\r\n        </div>\r\n        <div class=\"bk-event-total\">\r\n            <span>\r\n                {{appliedWater + rainfall | number: '1.0-1'}} {{'in' | translate }}\r\n            </span>\r\n            <span class=\"bk-event-total__breakdown\">\r\n                ({{appliedWater | number: '1.0-1'}} {{'in' | translate }} + {{rainfall | number: '1.0-1'}} {{'in' | translate }})\r\n            </span>\r\n    \r\n            <div class=\"bk-event-totals__links\">\r\n                <a class=\"bk-event-totals__link\"\r\n                    href=\"javascript:void(0);\"\r\n                    (click)=\"openRainfallDataModal()\">\r\n                    {{'Rainfall Data' | translate }}\r\n                </a>\r\n                <a class=\"bk-event-totals__link\"\r\n                    href=\"javascript:void(0);\"\r\n                    (click)=\"openFlowmeterDataModal()\"\r\n                    *ngIf=\"hasFlowmeterFileName\">\r\n                    {{'Flowmeter Data' | translate }}\r\n                </a>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    \r\n    <div class=\"bk-event-totals__details\"\r\n        *ngIf=\"view == EventsViewEnum.TABLE\">\r\n\t\t<div class=\"bk-event-totals__detail\">\r\n\t\t\t{{totalRecommendedWater | number: '1.0-1'}} {{'in' | translate }}\r\n\t\t\t<div class=\"bk-event-totals__detail-label\">\r\n\t\t\t\t{{'Recommended Water' | translate }}\r\n\t\t\t</div>\r\n\t\t</div>\r\n        <div class=\"bk-event-totals__detail\">\r\n            <span [ngClass]=\"{'bk-totals__invalid': numNotApplied && numNotApplied.irrigation > 0}\">\r\n                {{appliedWater | number: '1.0-1'}} {{'in' | translate }}\r\n            </span>\r\n            <i *ngIf=\"numNotApplied && numNotApplied.irrigation > 0\"\r\n                matTooltip=\"{{numNotApplied.irrigation}} irrigation event(s) missing applied values\"\r\n                class=\"bk-event-recommendation-not-applied-icon fa fa-warning bk-clickable\">\r\n            </i>\r\n            <div class=\"bk-event-totals__detail-label\">\r\n\t\t\t\t{{'Applied Water' | translate }}\r\n\t\t\t</div>\r\n        </div>\r\n        <div class=\"bk-event-totals__detail\">\r\n            {{rainfall | number: '1.0-1'}} {{'in' | translate }}\r\n            <div class=\"bk-event-totals__detail-label\">\r\n\t\t\t\t{{'Contributing Rainfall' | translate }}\r\n\t\t\t</div>\r\n        </div>\r\n    </div>\r\n</ng-container>\r\n\r\n<!-- fertilizer tab -->\r\n\r\n<ng-container *ngIf=\"eventType == EventsTypeEnum.FERTILIZER && view != EventsViewEnum.TOTALS\">\r\n    <h4 class=\"bk-event-totals__title\">\r\n        {{'Totals' | translate }}\r\n    </h4>\r\n    <div class=\"bk-event-totals\">\r\n        <div class=\"bk-event-total-icon bk-event-total-icon--fertilizer\">\r\n            <svg-fertilizer></svg-fertilizer>\r\n        </div>\r\n        <div class=\"bk-event-total\">\r\n            {{numFertilizationEvents}} {{'Event' | plural: numFertilizationEvents | translate }}\r\n        </div>\r\n    </div>\r\n    <div class=\"bk-event-totals__details\"\r\n        *ngIf=\"view == EventsViewEnum.TABLE && isNDependent\">\r\n        <div class=\"bk-event-totals__detail\">\r\n            {{recommendedFertilizer | number: '1.0-1'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n            <div class=\"bk-event-totals__detail-label\">\r\n                {{'Fertilizer N Recommended' | translate }}\r\n            </div>\r\n        </div>\r\n        <div class=\"bk-event-totals__detail\">\r\n            <span [ngClass]=\"{'bk-totals__invalid': numNotApplied && numNotApplied.fertilization > 0}\">\r\n                {{appliedN | number: '1.0-1'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n            </span>\r\n            <i *ngIf=\"numNotApplied && numNotApplied.fertilization > 0\"\r\n                matTooltip=\"{{numNotApplied.fertilization}} fertilization event(s) missing applied values\"\r\n                class=\"bk-event-recommendation-not-applied-icon fa fa-warning bk-clickable\">\r\n            </i>\r\n            <div class=\"bk-event-totals__detail-label\">\r\n                {{'Fertilizer Applied' | translate }}\r\n            </div>\r\n        </div>\r\n    </div>\r\n</ng-container>\r\n\r\n<!-- soil sample event tab -->\r\n\r\n<ng-container *ngIf=\"eventType == EventsTypeEnum.SOILSAMPLES && view != EventsViewEnum.TOTALS\">\r\n    <h4 class=\"bk-event-totals__title\">\r\n        {{'Totals' | translate }}\r\n    </h4>\r\n    <div class=\"bk-event-totals\">\r\n        <div class=\"bk-event-total-icon bk-event-total-icon--soil\">\r\n            <svg-soil-sample></svg-soil-sample>\r\n        </div>\r\n        <div class=\"bk-event-total\">\r\n            {{numSoilSamples}} {{'Event' | plural: numSoilSamples | translate}}\r\n        </div>\r\n    </div>\r\n</ng-container>\r\n\r\n<!-- tissue sample event tab -->\r\n\r\n<ng-container *ngIf=\"eventType == EventsTypeEnum.TISSUE_SAMPLE && view != EventsViewEnum.TOTALS\">\r\n    <h4 class=\"bk-event-totals__title\">\r\n        {{'Totals' | translate }}\r\n    </h4>\r\n    <div class=\"bk-event-totals\">\r\n        <div class=\"bk-event-total-icon bk-event-total-icon--soil\">\r\n            <svg-tissue-sample></svg-tissue-sample>\r\n        </div>\r\n        <div class=\"bk-event-total\">\r\n            {{numTissueSamples}} {{'Event' | plural: numTissueSamples | translate}}\r\n        </div>\r\n    </div>\r\n</ng-container>\r\n\r\n<!-- cutting event tab-->\r\n\r\n<ng-container *ngIf=\"eventType == EventsTypeEnum.CUTTING && view != EventsViewEnum.TOTALS && hasCutEvents\">\r\n    <h4 class=\"bk-event-totals__title\">\r\n        {{'Totals' | translate}}\r\n    </h4>\r\n    <div class=\"bk-event-totals\">\r\n        <div class=\"bk-event-total-icon bk-event-total-icon--cutting\">\r\n            <img src=\"../assets/images/icons/icon-sickle-white.svg\" />\r\n        </div>\r\n        <div class=\"bk-event-total\">\r\n            {{numCuttings}} {{'Event' | plural : numCuttings | translate }}\r\n        </div>\r\n    </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"view == EventsViewEnum.TOTALS\">\r\n    <div class=\"bk-event-totals__container\">\r\n        <div class=\"bk-event-totals__type--title-section\">\r\n            <span class=\"bk-event-totals__type--title\">\r\n                {{ 'Water' | translate }}\r\n            </span>\r\n        </div>\r\n        <div class=\"bk-event-totals__type\">\r\n            <div class=\"bk-event-totals__type--top\">\r\n                <div class=\"bk-event-total-icon bk-event-total-icon--water\">\r\n                    <svg-water></svg-water>\r\n                </div>\r\n                <div class=\"bk-event-totals__type--total\">\r\n                    {{appliedWater + rainfall | number: '1.0-1'}} {{'in' | translate }} \r\n                    <span class=\"bk-event-total__breakdown\">\r\n                        ({{appliedWater | number: '1.0-1'}} {{'in' | translate }} + {{rainfall | number: '1.0-1'}} {{'in' | translate }})\r\n                    </span>\r\n                </div>\r\n            </div>\r\n            <div class=\"bk-event-totals__type--details\">\r\n                <div class=\"bk-event-totals__detail\">\r\n\t\t\t\t\t<div class=\"bk-event-totals__detail-value\">\r\n                        {{totalRecommendedWater | number: '1.0-1'}} {{'in' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-event-totals__detail-label\">\r\n                        {{'Recommended Water' | translate }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"bk-event-totals__detail\">\r\n                    <div class=\"bk-event-totals__detail-value\">\r\n                        {{appliedWater | number: '1.0-1'}} {{'in' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-event-totals__detail-label\">\r\n                        {{'Applied Water' | translate }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"bk-event-totals__detail\">\r\n                    <div class=\"bk-event-totals__detail-value\">\r\n                        {{rainfall | number: '1.0-1'}} {{'in' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-event-totals__detail-label\">\r\n                        {{'Rainfall' | translate }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div class=\"bk-event-totals__type--links\">\r\n                <a class=\"bk-event-totals__link\"\r\n                    href=\"javascript:void(0);\"\r\n                    (click)=\"openRainfallDataModal()\">\r\n                    {{'Rainfall Data' | translate }}\r\n                </a>\r\n                <a class=\"bk-event-totals__link\"\r\n                    href=\"javascript:void(0);\"\r\n                    (click)=\"openFlowmeterDataModal()\"\r\n                    *ngIf=\"hasFlowmeterFileName\">\r\n                    {{'Flowmeter Data' | translate }}\r\n                </a>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"bk-event-totals__container\">\r\n        <div class=\"bk-event-totals__type--title-section\">\r\n            <span class=\"bk-event-totals__type--title\">\r\n                {{ 'Fertilizer' | translate }}\r\n            </span>\r\n        </div>\r\n        <div class=\"bk-event-totals__type\">\r\n            <div class=\"bk-event-totals__type--top\">\r\n                <div class=\"bk-event-total-icon bk-event-total-icon--fertilizer\">\r\n                    <svg-fertilizer></svg-fertilizer>\r\n                </div>\r\n                <div class=\"bk-event-totals__type--total\">\r\n                    {{numFertilizationEvents}} {{'Event' | plural: numFertilizationEvents | translate }}\r\n                </div>\r\n            </div>\r\n            <div class=\"bk-event-totals__type--details\"\r\n                *ngIf=\"isNDependent\">\r\n                <div class=\"bk-event-totals__detail\">\r\n                    <div class=\"bk-event-totals__detail-value\">\r\n                        {{recommendedFertilizer | number: '1.0-1'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-event-totals__detail-label\">\r\n                        {{'Fertilizer N Recommended' | translate }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"bk-event-totals__detail\">\r\n                    <div class=\"bk-event-totals__detail-value\">\r\n                        {{appliedFertilizer | number: '1.0-1'}} {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-event-totals__detail-label\">\r\n                        {{'Fertilizer Applied' | translate }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"bk-event-totals__container\">\r\n        <div class=\"bk-event-totals__type--title-section\">\r\n            <span class=\"bk-event-totals__type--title\">\r\n                {{ 'Soil Samples' | translate }}\r\n            </span>\r\n        </div>\r\n        <div class=\"bk-event-totals__type\">\r\n            <div class=\"bk-event-totals__type--top\">\r\n                <div class=\"bk-event-total-icon bk-event-total-icon--soil\">\r\n                    <svg-soil-sample></svg-soil-sample>\r\n                </div>\r\n                <div class=\"bk-event-totals__type--total\">\r\n                    {{numSoilSamples}} {{'Event' | plural: numSoilSamples | translate }}\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"bk-event-totals__container\">\r\n        <div class=\"bk-event-totals__type--title-section\">\r\n            <span class=\"bk-event-totals__type--title\">\r\n                {{ 'Tissue Samples' | translate }}\r\n            </span>\r\n        </div>\r\n        <div class=\"bk-event-totals__type\">\r\n            <div class=\"bk-event-totals__type--top\">\r\n                <div class=\"bk-event-total-icon bk-event-total-icon--soil\">\r\n                    <svg-tissue-sample></svg-tissue-sample>\r\n                </div>\r\n                <div class=\"bk-event-totals__type--total\">\r\n                    {{numTissueSamples}} {{'Event' | plural: numTissueSamples | translate }}\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"bk-event-totals__container\" *ngIf=\"hasCutEvents\">\r\n        <div class=\"bk-event-totals__type--title-section\">\r\n            <span class=\"bk-event-totals__type--title\">\r\n                {{ 'Cuttings' | translate }}\r\n            </span>\r\n        </div>\r\n\r\n        <div class=\"bk-event-totals__type\">\r\n            <div class=\"bk-event-totals__type--top\">\r\n                <div class=\"bk-event-total-icon bk-event-total-icon--cutting\">\r\n                    <img src=\"../assets/images/icons/icon-sickle-white.svg\" />\r\n                </div>\r\n                <div class=\"bk-event-totals__type--total\">\r\n                    {{numCuttings}} {{'Event' | plural : numCuttings | translate }}\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n    </div>\r\n</ng-container>","import { Component, Input, EventEmitter, Output, OnInit } from '@angular/core';\r\nimport { EventsView, EventsType } from '../../../interfaces/constants';\r\nimport { INotApplied } from '../interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'event-totals',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: ['totals.scss']\r\n})\r\n\r\nexport class EventTotalsComponent implements OnInit {\r\n\t@Input()\r\n\tpublic appliedWater: number;\r\n\r\n\t@Input()\r\n\tpublic rainfall: number;\r\n\r\n\t@Input()\r\n\tpublic appliedN: number;\r\n\r\n\t@Input()\r\n\tpublic appliedFertilizer: number;\r\n\r\n\t@Input()\r\n\tpublic numSoilSamples: number;\r\n\r\n\t@Input()\r\n\tpublic numCuttings: number;\r\n\r\n\t@Input()\r\n\tpublic numTissueSamples: number;\r\n\r\n\t@Input()\r\n\tpublic numNotApplied: INotApplied;\r\n\r\n\t@Input()\r\n\tpublic numIrrigationEvents: number;\r\n\r\n\t@Input()\r\n\tpublic numFertilizationEvents: number;\r\n\r\n\t@Input()\r\n\tpublic recommendedFertilizer: number;\r\n\r\n\t@Input()\r\n\tpublic eventType: EventsType;\r\n\r\n\t@Input()\r\n\tpublic view: EventsView;\r\n\r\n\t@Input()\r\n\tpublic hasFlowmeterFileName: boolean;\r\n\r\n\t@Input()\r\n\tpublic isNDependent: boolean;\r\n\r\n\t@Input()\r\n\tpublic hasFloodEvents: boolean;\r\n\r\n\t@Input()\r\n\tpublic hasCutEvents: boolean;\r\n\r\n\t@Input()\r\n\tpublic totalRecommendedWater: number;\r\n\r\n\t@Output()\r\n\tprivate onOpenRainfallDataModal: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n\t@Output()\r\n\tprivate onOpenFlowmeterDataModal: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n\tpublic EventsViewEnum = EventsView;\r\n\tpublic EventsTypeEnum = EventsType;\r\n\r\n\tngOnInit() {\r\n\t}\r\n\r\n\tpublic openRainfallDataModal(): void {\r\n\t\tthis.onOpenRainfallDataModal.emit();\r\n\t}\r\n\r\n\tpublic openFlowmeterDataModal(): void {\r\n\t\tthis.onOpenFlowmeterDataModal.emit();\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\r\n\r\n    <i class=\"fa fa-calculator\"></i>\r\n    <h4 mat-dialog-title>\r\n        {{'Recalculate' | translate }} {{'Planting' | translate }}?\r\n    </h4>\r\n\r\n    <div mat-dialog-content>\r\n        <div class=\"bk-planting-modal__content--responsive\">\r\n            <div class=\"bk-recalculate-text\">\r\n                {{ 'recalculation text' | translate }}\r\n            </div>\r\n        </div>\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)=\"cancel($event)\">\r\n            {{ cancelText | translate }}\r\n        </button>\r\n        <button class=\"bk-button bk-button--medium\"\r\n            (click)=\"recalculate()\">\r\n            {{'Recalculate Recommendations' | translate }}\r\n        </button>\r\n    </div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { RecalculatingComponent } from './recalculating.component';\r\n\r\nexport interface RecalculateModelConfig {\r\n\tplantingId: number,\r\n\tcancelText?: string,\r\n}\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-recalculate-modal',\r\n\ttemplateUrl: 'planting-recalculate-modal.component.html',\r\n\tstyleUrls: [ 'planting-recalculate-modal.scss' ]\r\n})\r\n\r\nexport class PlantingRecalculateModalComponent implements OnInit {\r\n\r\n\tpublic cancelText: string;\r\n\tprivate plantingId: number;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<PlantingRecalculateModalComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: RecalculateModelConfig) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tif (this._data) {\r\n\t\t\tthis.plantingId = this._data.plantingId;\r\n\t\t\tthis.cancelText = this._data.cancelText ? this._data.cancelText : 'Cancel';\r\n\t\t}\r\n\r\n\t\tif (!this.plantingId) {\r\n\t\t\tthrow new Error('no planting ID');\r\n\t\t}\r\n\t}\r\n\r\n\tpublic recalculate(): void {\r\n\t\tlet data: RecalculateModelConfig;\r\n\r\n\t\tdata = {\r\n\t\t\tplantingId: this.plantingId\r\n\t\t};\r\n\r\n\t\tthis._dialogRef.close();\r\n\r\n\t\tthis._dialog.open(RecalculatingComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tmaxWidth: 'unset',\r\n\t\t\tdata: data\r\n\t\t});\r\n\t}\r\n\r\n\tpublic cancel(e: MouseEvent): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","<div class=\"bk-recalculating__dialog\">\r\n\t<i class=\"fa fa-calculator\"></i>\r\n\t<h1>\r\n\t\t{{'Please Wait' | translate }}...\r\n\t</h1>\r\n\r\n\t<div class=\"bk-recalculating__container\">\r\n\t\t<span class=\"bk-loader\"></span>\r\n\t\t<span class=\"bk-recalculating__message\">\r\n\t\t\t{{'Recalculating Planting Text' | translate }} ...\r\n\t\t</span>\r\n\t</div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { PlantingService } from '../planting-settings/service';\r\nimport { UpdateService } from '../../services/update.service';\r\n\r\nimport { IPlanting } from '../planting-settings/interfaces';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { eNotificationTypes } from '../../interfaces/constants';\r\n\r\nexport interface RecalculateModelConfig {\r\n\tplantingId: number,\r\n\tcancelText: string,\r\n\tisUserInitiated: boolean\r\n}\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'recalculating',\r\n\ttemplateUrl: 'recalculating.component.html',\r\n\tstyleUrls: [ 'recalculating.component.scss' ]\r\n})\r\n\r\nexport class RecalculatingComponent implements OnInit {\r\n\r\n\tprivate plantingId: number;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialogRef: MatDialogRef<RecalculatingComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: RecalculateModelConfig,\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}\r\n\r\n\tngOnInit(): void {\r\n\t\tif (this._data) {\r\n\t\t\tthis.plantingId = this._data.plantingId;\r\n\t\t}\r\n\r\n\t\tif (!this.plantingId) {\r\n\t\t\tthrow new Error('no planting ID');\r\n\t\t}\r\n\r\n\t\tthis.recalculate();\r\n\t}\r\n\r\n\tpublic async recalculate(): Promise<void> {\r\n\t\tlet res: IPlanting;\r\n\r\n\t\tres = await this.plantingService.recalculatePlanting(this.plantingId);\r\n\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\tthis._dialogRef.close();\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, this.plantingId);\r\n\t\tthis.updateService.setPlantingsUpdated(this.updateService.currentRanchId, new Date()); // update views if needed\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","import { FormBuilder, Validators } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { FormValidation } from '../../classes/formValidation';\r\nimport { IDripApplicationRate, IMicroSprinklerSettingViewModel, IPlantingSettingsCalculatorSettings,\r\n\tISprinklerApplicationRateViewModel } from './interfaces';\r\n\r\nexport type CompostFields = 'Amount' | 'ApplicationMethod' | 'Id' |\r\n\t'LotPlantingId' | 'N';\r\n\r\nexport type CoverCropFields = 'Id' | 'IncorporationMethod' |\r\n\t'LegumeCoverCropStand' | 'LotPlantingId';\r\n\r\nexport type DripApplicationRateFields = 'Id' | 'BedWidth' | 'DripLinesPerBed'\r\n\t| 'EmitterDischargeRate' | 'EmittersPerTree' | 'InRowTreeSpacing'\r\n\t| 'LotPlantingId' | 'RowSpacing' | 'TapeDischargeRate' | 'TreesPerAcre'\r\n\t| 'UseTreesPerAcre';\r\n\r\nexport type ManureNFields = 'Id' | 'LotPlantingId' | 'TypePriorYear' |\r\n\t'RatePriorYear' | 'TypeTwoYearsAgo' | 'RateTwoYearsAgo';\r\n\r\n\r\nexport type MicroSprinklerFields =  'BetweenRowTreeSpacing' | 'ColorId'\t|\r\n\t'FlowRate' | 'InRowTreeSpacing' | 'ManufacturerId' | 'MicroSprinklerId' |\r\n\t'MicroSprinklersPerTree' | 'ModelId' | 'PressureName' | 'SeriesId' |\r\n\t'UseFlowRate';\r\n\r\nexport type SprinklerSettingFields = 'HeadSpacing' | 'Id' | 'LotPlantingId' |\r\n\t'NozzleDiameter' | 'NozzlePressure' |  'PipeSpacing' | 'Type';\r\n\r\nexport class CalculatorSettingsForm {\r\n\tprivate _fb: FormBuilder;\r\n\tprivate _form: FormGroup;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic get dripApp(): { [key in DripApplicationRateFields]: AbstractControl } {\r\n\t\treturn (this._form.get('DripApplicationRate') as FormGroup).controls as\r\n\t\t\t{ [key in DripApplicationRateFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get microSprinkler(): { [key in MicroSprinklerFields]: AbstractControl } {\r\n\t\treturn (this._form.get('MicroSprinklerSetting') as FormGroup).controls as\r\n\t\t\t{ [key in MicroSprinklerFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(fb: FormBuilder, $subscription: Subject<boolean>) {\r\n\t\tthis._fb = fb;\r\n\t\tthis._subscriptions$ = $subscription;\r\n\t}\r\n\r\n\tpublic initialize(calculatorSettings: IPlantingSettingsCalculatorSettings, isTree: boolean): FormGroup {\r\n\t\tlet sprinkler: ISprinklerApplicationRateViewModel;\r\n\t\tlet microSprinkler: IMicroSprinklerSettingViewModel;\r\n\t\tlet drip: IDripApplicationRate;\r\n\r\n\t\tif (!calculatorSettings) {\r\n\t\t\tthrow new Error('calculationSettings is empty');\r\n\t\t}\r\n\r\n\t\tsprinkler = calculatorSettings.SprinklerApplicationRate;\r\n\t\tmicroSprinkler = calculatorSettings.MicroSprinklerSetting;\r\n\t\tdrip = calculatorSettings.DripApplicationRate;\r\n\r\n\t\tthis._form = this._fb.group({\r\n\t\t\tCompostN: this._fb.group({\r\n\t\t\t\tAmount: [calculatorSettings.CompostN.Amount],\r\n\r\n\t\t\t\tApplicationMethod: [calculatorSettings.CompostN.ApplicationMethod ?\r\n\t\t\t\t\tcalculatorSettings.CompostN.ApplicationMethod : 0],\r\n\r\n\t\t\t\tId: [calculatorSettings.CompostN.Id],\r\n\t\t\t\tLotPlantingId: [calculatorSettings.CompostN.LotPlantingId],\r\n\r\n\t\t\t\tN: [calculatorSettings.CompostN.N],\r\n\t\t\t}),\r\n\t\t\tCoverCrop: this._fb.group({\r\n\t\t\t\tId: [calculatorSettings.CoverCrop.Id],\r\n\t\t\t\tLotPlantingId: [calculatorSettings.CoverCrop.LotPlantingId],\r\n\r\n\t\t\t\tLegumeCoverCropStand: [calculatorSettings.CoverCrop.LegumeCoverCropStand ?\r\n\t\t\t\t\tcalculatorSettings.CoverCrop.LegumeCoverCropStand : 0],\r\n\r\n\t\t\t\tIncorporationMethod: [calculatorSettings.CoverCrop.IncorporationMethod ?\r\n\t\t\t\t\tcalculatorSettings.CoverCrop.IncorporationMethod : 0]\r\n\t\t\t}),\r\n\t\t\tDripApplicationRate: this._fb.group({\r\n\t\t\t\tId: [drip.Id],\r\n\t\t\t\tLotPlantingId: [drip.LotPlantingId],\r\n\t\t\t\tEmitterDischargeRate: [drip.EmitterDischargeRate],\r\n\t\t\t\tEmittersPerTree: [drip.EmittersPerTree],\r\n\t\t\t\tRowSpacing: [drip.RowSpacing],\r\n\t\t\t\tInRowTreeSpacing: [drip.InRowTreeSpacing],\r\n\t\t\t\tTreesPerAcre: [drip.TreesPerAcre],\r\n\r\n\t\t\t\tUseTreesPerAcre: [drip.UseTreesPerAcre ?\r\n\t\t\t\t\tdrip.UseTreesPerAcre : false],\r\n\r\n\t\t\t\tBedWidth: [drip.BedWidth ? drip.BedWidth : 64],\r\n\r\n\t\t\t\tDripLinesPerBed: [drip.DripLinesPerBed ?\r\n\t\t\t\t\tdrip.DripLinesPerBed : 2],\r\n\r\n\t\t\t\tTapeDischargeRate: [drip.TapeDischargeRate ?\r\n\t\t\t\t\tdrip.TapeDischargeRate : 0.45],\r\n\t\t\t}),\r\n\t\t\tManureN: this._fb.group({\r\n\t\t\t\tId: [calculatorSettings.ManureN.Id],\r\n\t\t\t\tLotPlantingId: [calculatorSettings.ManureN.LotPlantingId],\r\n\t\t\t\tRatePriorYear: [calculatorSettings.ManureN.RatePriorYear],\r\n\t\t\t\tRateTwoYearsAgo: [calculatorSettings.ManureN.RateTwoYearsAgo],\r\n\t\t\t\tTypePriorYear: [calculatorSettings.ManureN.TypePriorYear],\r\n\t\t\t\tTypeTwoYearsAgo: [calculatorSettings.ManureN.TypeTwoYearsAgo],\r\n\t\t\t}),\r\n\t\t\tMicroSprinklerSetting: this._fb.group({\r\n\t\t\t\tBetweenRowTreeSpacing: [microSprinkler.BetweenRowTreeSpacing ?\r\n\t\t\t\t\tmicroSprinkler.BetweenRowTreeSpacing : 15],\r\n\r\n\t\t\t\tFlowRate: [microSprinkler.FlowRate ? microSprinkler.FlowRate : null],\r\n\t\t\t\tId: [microSprinkler.Id],\r\n\r\n\t\t\t\tInRowTreeSpacing: [microSprinkler.InRowTreeSpacing ?\r\n\t\t\t\t\tmicroSprinkler.InRowTreeSpacing : 12],\r\n\r\n\t\t\t\tLotPlantingId: [microSprinkler.LotPlantingId],\r\n\t\t\t\tMicroSprinklerId: [microSprinkler.MicroSprinklerId],\r\n\t\t\t\tMicroSprinklersPerTree: [microSprinkler.MicroSprinklersPerTree ?\r\n\t\t\t\t\tmicroSprinkler.MicroSprinklersPerTree : 1, [FormValidation.integerValidator()]],\r\n\r\n\t\t\t\tUseFlowRate: [microSprinkler.UseFlowRate ?\r\n\t\t\t\t\tmicroSprinkler.UseFlowRate : false],\r\n\r\n\t\t\t\t// fields that won't be saved\r\n\t\t\t\tColorId: [ null ],\r\n\t\t\t\tManufacturerId: [ null ],\r\n\t\t\t\tModelId: [ null ],\r\n\t\t\t\tPressureName: [ null ],\r\n\t\t\t\tSeriesId: [ null ],\r\n\t\t\t}),\r\n\t\t\tSprinklerApplicationRate: this._fb.group({\r\n\t\t\t\tHeadSpacing: [sprinkler.HeadSpacing ? sprinkler.HeadSpacing : 30],\r\n\t\t\t\tId: [sprinkler.Id ? sprinkler.Id : 1],\r\n\t\t\t\tNozzleDiameter: [sprinkler.NozzleDiameter ? sprinkler.NozzleDiameter : 1],\r\n\t\t\t\tNozzlePressure: [sprinkler.NozzlePressure ? sprinkler.NozzlePressure : 45],\r\n\t\t\t\tLotPlantingId: [sprinkler.LotPlantingId],\r\n\t\t\t\tPipeSpacing: [sprinkler.PipeSpacing ? sprinkler.PipeSpacing : 30],\r\n\t\t\t\tType: [sprinkler.Type]\r\n\t\t\t})\r\n\t\t});\r\n\r\n\t\tthis._bindValueChangesTrees();\r\n\r\n\t\treturn this._form;\r\n\t}\r\n\r\n\t/**\r\n\t * Note: We don't call this method on form initialization because calculator\r\n\t * fields are only required when the calculators are open\r\n\t */\r\n\tprivate _configureFlowRateValidation(): void {\r\n\t\t// if UseFlowRate is true (or undefined), microSprinklerId (and other fields) should be null and not required.\r\n\t\t// if UseFlowRate is false, microSprinklerId (and other fields) should not be null, and should be required.\r\n\t\tif (this.microSprinkler.UseFlowRate.value === true) {\r\n\t\t\tFormValidation.clearValidator(this.microSprinkler.ManufacturerId);\r\n\t\t\tFormValidation.clearValidator(this.microSprinkler.ColorId);\r\n\t\t\tFormValidation.clearValidator(this.microSprinkler.PressureName);\r\n\t\t\tFormValidation.clearValidator(this.microSprinkler.SeriesId);\r\n\t\t\tFormValidation.clearValidator(this.microSprinkler.MicroSprinklerId);\r\n\r\n\t\t\tthis.microSprinkler.FlowRate.setValidators([Validators.required,\r\n\t\t\t\tFormValidation.greaterThanValidator(0)]);\r\n\t\t} else {\r\n\t\t\tthis.microSprinkler.ManufacturerId.setValidators(Validators.required);\r\n\t\t\tthis.microSprinkler.ColorId.setValidators(Validators.required);\r\n\t\t\tthis.microSprinkler.PressureName.setValidators(Validators.required);\r\n\t\t\tthis.microSprinkler.SeriesId.setValidators(Validators.required);\r\n\t\t\tthis.microSprinkler.MicroSprinklerId.setValidators(Validators.required);\r\n\r\n\t\t\tFormValidation.clearValidator(this.microSprinkler.FlowRate);\r\n\t\t\tthis.microSprinkler.FlowRate.setValue(0, { emitEvent: false} );\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _bindValueChangesTrees(): void {\r\n\t\tthis.microSprinkler.UseFlowRate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._configureFlowRateValidation();\r\n\t\t});\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\t<div class=\"cm-progress-bullets\">\r\n\t\t<span *ngFor=\"let astep of steps\">\r\n\t\t\t<span class=\"cm-progress-bullets__bullet\" [ngStyle]=\"{color: astep > step ? '#BEB9B9' : '#636363'}\">\r\n\t\t\t\t&bull;\r\n\t\t\t</span>\r\n\t\t</span>\r\n\t</div>\r\n\t<h4 mat-dialog-title>\r\n\t\t{{ 'Create' | translate }} {{ 'Planting' | translate }} <span class=\"cm-breadcrumb__backslash\">/</span> {{ title | translate }}\r\n\t</h4>\r\n\t<ng-container *ngIf=\"step === 1\">\r\n\t\t<planting-create-step1\r\n\t\t\t[form]=\"form\"\r\n\t\t\t[commodityTypes]=\"commodityTypes\"\r\n\t\t\t[cropTypesBus]=\"cropTypesBus\"\r\n\t\t\t[lotsBus]=\"lotsBus\"\r\n\t\t\t[harvestOnceBus]=\"harvestOnceBus\"\r\n\t\t\t(onCancel)=\"close()\"\r\n\t\t\t(nextStep)=\"nextStep($event);\">\r\n\t\t</planting-create-step1>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"step === 2\">\r\n\t\t<planting-create-step2\r\n\t\t\t[form]=\"form\"\r\n\t\t\t[plantingSettingsFormBuilder]=\"plantingSettingsFormBuilder\"\r\n\t\t\t[soilErrorBus]=\"soilErrorBus\"\r\n\t\t\t[markersBus]=\"markersBus\"\r\n\t\t\t[lotCoordinatesBus]=\"lotCoordinatesBus\"\r\n\t\t\t(onCancel)=\"close()\"\r\n\t\t\t(nextStep)=\"nextStep($event);\">\r\n\t\t</planting-create-step2>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"step === 3\">\r\n\t\t<planting-create-step3\r\n\t\t\t[form]=\"form\"\r\n\t\t\t[vigorOptions]=\"vigorOptions\"\r\n\t\t\t[ageOfCropBus]=\"ageOfCropBus\"\r\n\t\t\t(onCancel)=\"close()\"\r\n\t\t\t(nextStep)=\"nextStep($event);\">\r\n\t\t</planting-create-step3>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"step === 4\">\r\n\t\t<planting-create-step4\r\n\t\t\t[form]=\"form\"\r\n\t\t\t(onCancel)=\"close()\"\r\n\t\t\t(nextStep)=\"nextStep($event);\">\r\n\t\t</planting-create-step4>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"step === 5\">\r\n\t\t<planting-create-step5\r\n\t\t\t[form]=\"form\"\r\n\t\t\t[isSavingBus]=\"isSavingBus\"\r\n\t\t\t(onCancel)=\"close()\"\r\n\t\t\t(onSubmit)=\"submit()\"\r\n\t\t\t(nextStep)=\"nextStep($event);\">\r\n\t\t</planting-create-step5>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"fc.IsNDependent.value && step === 6\">\r\n\t\t<planting-create-step6\r\n\t\t\t[form]=\"form\"\r\n\t\t\t[formWells]=\"formWells\"\r\n\t\t\t[isSavingBus]=\"isSavingBus\"\r\n\t\t\t(onCancel)=\"close()\"\r\n\t\t\t(onSubmit)=\"submit()\"\r\n\t\t\t(nextStep)=\"nextStep($event);\">\r\n\t\t</planting-create-step6>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"fc.IsTree.value && step === 7\">\r\n\t\t<planting-create-step7\r\n\t\t\t[form]=\"form\"\r\n\t\t\t[isSavingBus]=\"isSavingBus\"\r\n\t\t\t(onCancel)=\"close()\"\r\n\t\t\t(onSubmit)=\"submit()\"\r\n\t\t\t(nextStep)=\"nextStep($event);\">\r\n\t\t</planting-create-step7>\r\n\t</ng-container>\r\n</div>","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ICommodityType } from '../../../models/commodity-type/interfaces';\r\nimport { ICropType } from '../../../models/crop-type/interfaces';\r\nimport { ISelectedListItem } from '../interfaces';\r\nimport { ISelectOptionBoolean, ISelectOptions } from '../../../interfaces/abstract';\r\nimport { ICoordinates } from '../../shared/interfaces';\r\nimport { PlantingSettingsFormBuilder } from '../plantingSettingsFormBuilder';\r\nimport { eSoilWebCrawErrors } from '../../../interfaces/constants';\r\nimport { CropTypeFormFields } from '../../crop-types/cropTypeFormBuilder';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-create-dialog',\r\n\ttemplateUrl: 'planting-create-dialog.html',\r\n\tstyleUrls: [ 'planting-create-dialog.scss']\r\n})\r\n\r\nexport class PlantingCreateDialog implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic formWells: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic commodityTypes: ICommodityType[]; // commodity type dropdown\r\n\r\n\t@Input()\r\n\tpublic cropTypesBus: BehaviorSubject<ICropType[]>; // crop types dropdown\r\n\r\n\t@Input()\r\n\tpublic cropTypeLoadedBus: BehaviorSubject<void>;\r\n\r\n\t@Input()\r\n\tpublic lotsBus: BehaviorSubject<ISelectedListItem[]>;\r\n\r\n\t@Input()\r\n\tpublic ageOfCropBus: BehaviorSubject<ISelectOptions[]>;\r\n\r\n\t@Input()\r\n\tpublic vigorOptions: ISelectOptionBoolean[];\r\n\r\n\t@Input()\r\n\tpublic harvestOnceBus: BehaviorSubject<boolean>;\r\n\r\n\t@Input()\r\n\tpublic markersBus: BehaviorSubject<ICoordinates[]>;\r\n\r\n\t@Input()\r\n\tpublic soilErrorBus: BehaviorSubject<eSoilWebCrawErrors>;\r\n\r\n\t@Input()\r\n\tpublic isSavingBus: BehaviorSubject<boolean>;\r\n\r\n\t@Input()\r\n\tpublic lotCoordinatesBus: BehaviorSubject<string>;\r\n\r\n\t@Input()\r\n\tpublic plantingSettingsFormBuilder: PlantingSettingsFormBuilder;\r\n\r\n\t@Output()\r\n\tpublic onCancel: EventEmitter<void>;\r\n\r\n\t@Output()\r\n\tpublic onSubmit: EventEmitter<void>;\r\n\r\n\tpublic title: string;\r\n\tpublic step = 1;\r\n\tpublic steps: number[] = [1, 2, 3, 4, 5, 6, 7];\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.form.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t) {\r\n\t\tthis.onCancel = new EventEmitter<void>();\r\n\t\tthis.onSubmit = new EventEmitter<void>();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.title = this._getTitle();\r\n\r\n\t\tthis.cropTypeLoadedBus.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (this.fc.IsTree.value) {\r\n\t\t\t\tthis.steps = [1, 2, 3, 4, 5, 6, 7];\r\n\t\t\t} else if (this.fc.IsStressable.value) {\r\n\t\t\t\tthis.steps = [1, 2, 3, 4, 5, 6];\r\n\t\t\t} else {\r\n\t\t\t\tthis.steps = [1, 2, 3, 4, 5];\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\t//\r\n\t}\r\n\r\n\tpublic nextStep(step: number) {\r\n\t\tthis.step = step;\r\n\t\tthis.title = this._getTitle();\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tthis.onCancel.emit();\r\n\t}\r\n\r\n\tpublic submit(): void {\r\n\t\tthis.onSubmit.emit();\r\n\t}\r\n\r\n\tprivate _getTitle(): string {\r\n\t\tswitch (this.step) {\r\n\t\t\tcase 1:\r\n\t\t\t\treturn 'Basic Information';\r\n\t\t\tcase 2:\r\n\t\t\t\treturn 'Location Setting';\r\n\t\t\tcase 3:\r\n\t\t\t\treturn 'Miscellaneous Settings';\r\n\t\t\tcase 4:\r\n\t\t\t\treturn 'Deficit Irrigation';\r\n\t\t\tcase 5:\r\n\t\t\t\treturn 'Irrigation Methods';\r\n\t\t\tcase 6:\r\n\t\t\t\treturn 'Nitrogen Contribution from Water';\r\n\t\t\tcase 7:\r\n\t\t\t\treturn 'Seasonal N Requirement';\r\n\t\t}\r\n\t}\r\n}\r\n","<div *ngIf=\"form\"\r\n\tmat-dialog-content>\r\n\r\n\t<form [formGroup]=form\r\n\t\tclass=\"bk-form cm-planting-create-form\">\r\n\r\n\t\t<mat-form-field appearance=\"fill\"\r\n\t\t\tclass=\"mat-form-field--one-line mat-form-field--short cm-irrigation-dialog__deficit-ui__input\">\r\n\r\n\t\t\t<mat-label>\r\n\t\t\t\t{{'Planting Name' | translate }}\r\n\t\t\t</mat-label>\r\n\r\n\t\t\t<input matInput\r\n\t\t\t\trequired\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tformControlName=\"Name\"/>\r\n\r\n\t\t\t<mat-error *ngIf=\"f.Name.invalid && (f.Name.dirty || f.Name.touched)\">\r\n\t\t\t\t{{'Planting Name cannot be empty or longer than 128 characters' | 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  appearance=\"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  appearance=\"fill\"\r\n\t\t\tclass=\"mat-form-field--one-line mat-form-field--short\">\r\n\r\n\t\t\t<mat-label>{{'Crop Type' | 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\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<div class=\"bk-clearfix\">\r\n\t\t\t<mat-form-field *ngIf=\"f.CropTypeId.value\"\r\n\t\t\t\tappearance=\"fill\"\r\n\t\t\t\tclass='bk-mat-date-field bk-mat-date-field--first'>\r\n\t\t\t\t<mat-label>\r\n\t\t\t\t\t<span *ngIf=\"!fc.IsPerennial.value\">\r\n\t\t\t\t\t\t{{'Wet Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA && fc.IsPerennial.value\">\r\n\t\t\t\t\t\t{{'Leaf Out Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{'Start Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-label>\r\n\t\t\t\t<input matInput [matDatepicker]=\"wetDatePicker\"\r\n\t\t\t\t\tformControlName=\"WetDate\"\r\n\t\t\t\t\trequired>\r\n\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"wetDatePicker\"></mat-datepicker-toggle>\r\n\t\t\t\t<mat-datepicker #wetDatePicker></mat-datepicker>\r\n\r\n\t\t\t\t<mat-hint align=\"start\">\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{ 'Alfalfa Start Date Help Text' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA && fc.IsPerennial.value\">\r\n\t\t\t\t\t\t{{ 'Almond Leaf Out Date Help Text' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-hint>\r\n\r\n\t\t\t\t<mat-error *ngIf=\"f.WetDate.invalid && (f.WetDate.dirty\r\n\t\t\t\t\t|| f.WetDate.touched)\">\r\n\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.wetDateNotSameYearAsHarvestDate\">\r\n\t\t\t\t\t\t{{ \"For tree crops, planting start and end dates must be in the same year\" | translate }}.\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.cutEventsBeforeWetDate\">\r\n\t\t\t\t\t\t{{'Planting Wet Date Cut Date Error Text' | translate }}.\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.endDateOnOrAfterHarvestDate\">\r\n\t\t\t\t\t\t{{'Planting Wet Date Error Text' | translate }}.\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.invalidDate\">\r\n\t\t\t\t\t\t{{'This date is in an invalid format' | translate}}.\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.required\">\r\n\t\t\t\t\t\t{{'This field is required' | translate }}.\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t\t<mat-form-field *ngIf=\"f.CropTypeId.value\"\r\n\t\t\t\tappearance=\"fill\"\r\n\t\t\t\tclass='bk-mat-date-field'>\r\n\t\t\t\t<mat-label>\r\n\t\t\t\t\t<span *ngIf=\"fc.IsPerennial.value && f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{'End of Season Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<span *ngIf=\"harvestOnce && !fc.IsPerennial.value\">\r\n\t\t\t\t\t\t{{'Harvest Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<span *ngIf=\"!harvestOnce && !fc.IsPerennial.value\">\r\n\t\t\t\t\t\t{{'End of Crop Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{'End Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-label>\r\n\t\t\t\t<input matInput [matDatepicker]=\"harvestDatePicker\"\r\n\t\t\t\t\tformControlName=\"HarvestDate\"\r\n\t\t\t\t\trequired>\r\n\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"harvestDatePicker\"></mat-datepicker-toggle>\r\n\t\t\t\t<mat-datepicker #harvestDatePicker></mat-datepicker>\r\n\t\t\t\t<mat-hint align=\"start\">\r\n\t\t\t\t\t<span *ngIf=\"fc.IsPerennial.value && f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{ 'End of Season Date Help Text' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{ 'Alfalfa End Date Help Text' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-hint>\r\n\t\t\t\t<mat-error *ngIf=\"f.HarvestDate.invalid && (f.HarvestDate.dirty\r\n\t\t\t\t\t|| f.HarvestDate.touched)\">\r\n\t\t\t\t\t<span *ngIf=\"f.HarvestDate.errors.required\">\r\n\t\t\t\t\t\t{{ 'This field is required' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"!f.HarvestDate.errors.required && f.HarvestDate.errors.mustBeAfterWetDate\">\r\n\t\t\t\t\t\t{{ 'Planting end date must be before the start date' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"!f.HarvestDate.errors.require && wetDateNotSameYearAsHarvestDate\">\r\n\t\t\t\t\t\t{{ 'Planting start and end dates must be in the same year' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\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\r\n\t\t\t<mat-label>{{'Lot' | translate }}</mat-label>\r\n\r\n\t\t\t<mat-select required\r\n\t\t\t\tformControlName=\"LotId\">\r\n\r\n\t\t\t\t<mat-option *ngFor=\"let lot of lots\"\r\n\t\t\t\t\t[value]=\"lot.Value\">\r\n\t\t\t\t\t{{ lot.Text }}\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\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 appearance=\"fill\"\r\n\t\tclass=\"mat-form-field--one-line mat-form-field--short\">\r\n\r\n\t\t\t<mat-label>\r\n\t\t\t\t{{'Acres' | translate }}\r\n\t\t\t</mat-label>\r\n\r\n\t\t\t<input matInput\r\n\t\t\t\ttype=\"number\"\r\n\t\t\t\tname=\"Acres\"\r\n\t\t\t\tformControlName=\"Acres\"/>\r\n\r\n\t\t\t<mat-error *ngIf=\"f.Acres.invalid && (f.Acres.dirty || f.Acres.touched)\">\r\n\t\t\t\t{{'Not a valid number' | translate }}\r\n\t\t\t</mat-error>\r\n\r\n\t\t</mat-form-field>\r\n\t</form>\r\n</div>\r\n<div mat-dialog-actions\r\n\talign=\"end\">\r\n\t<button class=\"bk-button__delete\"\r\n\t\t(click)=\"cancel()\">\r\n\t\t{{'Cancel' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\t[disabled]=\"stepForm && !stepForm.valid\"\r\n\t\t(click)=\"next()\"\r\n\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t{{ 'Next Step' | translate }}\r\n\t</button>\r\n</div>","import { Component, Input, OnDestroy, OnInit, EventEmitter, Output} from '@angular/core';\r\nimport { PlantingSettingFields } from '../plantingSettingFields';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ICommodityType } from '../../../models/commodity-type/interfaces';\r\nimport { ICropType } from '../../../models/crop-type/interfaces';\r\nimport { CropTypeFormFields } from '../../crop-types/cropTypeFormBuilder';\r\nimport { eCommodityTypes } from '../../../interfaces/constants';\r\nimport { ISelectedListItem } from '../interfaces';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-create-step1',\r\n\ttemplateUrl: 'planting-create-step1.html',\r\n\tstyleUrls: [ 'planting-create-step1.scss']\r\n})\r\n\r\nexport class PlantingCreateStep1Component implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic commodityTypes: ICommodityType[]; // commodity type dropdown\r\n\r\n\t@Input()\r\n\tpublic cropTypesBus: BehaviorSubject<ICropType[]>; // crop types dropdown\r\n\r\n\t@Input()\r\n\tpublic lotsBus: BehaviorSubject<ISelectedListItem[]>;\r\n\r\n\t@Input()\r\n\tpublic harvestOnceBus: BehaviorSubject<boolean>;\r\n\r\n\t@Output()\r\n\tpublic nextStep: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n\t@Output()\r\n\tpublic onCancel: EventEmitter<void>;\r\n\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\tpublic harvestOnce = true;\r\n\tpublic cropTypes: ICropType[];\r\n\tpublic lots: ISelectedListItem[];\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic stepForm: FormGroup;\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.form.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t) {\r\n\t\tthis.onCancel = new EventEmitter<void>();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.lotsBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis.lots = data;\r\n\t\t});\r\n\r\n\t\tthis.cropTypesBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis.cropTypes = data;\r\n\t\t});\r\n\r\n\t\tthis.harvestOnceBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis.harvestOnce = data;\r\n\t\t});\r\n\r\n\t\tthis._initializeForms();\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tprivate _initializeForms(): void {\r\n\t\tthis.stepForm = this._fb.group({});\r\n\r\n\t\tthis.stepForm.addControl('Name', this.f.Name);\r\n\t\tthis.stepForm.addControl('CommodityTypeId', this.f.CommodityTypeId);\r\n\t\tthis.stepForm.addControl('CropTypeId', this.f.CropTypeId);\r\n\t\tthis.stepForm.addControl('WetDate', this.f.WetDate);\r\n\t\tthis.stepForm.addControl('HarvestDate', this.f.HarvestDate);\r\n\t\tthis.stepForm.addControl('LotId', this.f.LotId);\r\n\t\tthis.stepForm.addControl('Acres', this.f.Acres);\r\n\t}\r\n\r\n\tpublic next() {\r\n\t\tthis.nextStep.emit(2);\r\n\t}\r\n\r\n\tpublic cancel() {\r\n\t\tthis.onCancel.emit();\r\n\t}\r\n}\r\n","<div *ngIf=\"form\"\r\n\tmat-dialog-content>\r\n\r\n\t<form [formGroup]=stepForm\r\n\t\tclass=\"bk-form\">\r\n\r\n\t\t<p>\r\n\t\t\t{{'Planting map instructions' | translate }} Choose an accurate coordinate to get better irrigation recommendations.\r\n\t\t</p>\r\n\r\n\t\t<div class=\"bk-modal__right-instructions\">\r\n\t\t\t<div class=\"bk-marker bk-marker--planting\">\r\n\t\t\t\t<svg-planting-icon></svg-planting-icon>\r\n\t\t\t</div>\r\n\t\t\t{{'Planting' | translate }}\r\n\t\t\t<div class=\"bk-marker bk-marker--lot\">\r\n\t\t\t\t<svg-lot-filled-marker></svg-lot-filled-marker>\r\n\t\t\t</div>\r\n\t\t\t{{'Lot Map Instructions 2' | translate }}\r\n\t\t</div>\r\n\t\t<div class=\"bk-modal__map-container map-container\">\r\n\t\t\t<agm-map #map\r\n\t\t\t\t(mapClick)=\"clickMap($event)\"\r\n\t\t\t\t(mapReady)=\"mapReady($event)\"\r\n\t\t\t\t[zoom]=\"10\"\r\n\t\t\t\t[mapTypeId]=\"'hybrid'\"\r\n\t\t\t\t[fullscreenControl]=\"true\">\r\n\r\n\t\t\t\t<agm-marker *ngFor=\"let marker of markers\"\r\n\t\t\t\t\t[iconUrl]=\"'../assets/images/icons/map_marker-planting.png'\"\r\n\t\t\t\t\t[latitude]=\"marker.lat\"\r\n\t\t\t\t\t[longitude]=\"marker.lng\">\r\n\t\t\t\t</agm-marker>\r\n\r\n\t\t\t\t<agm-marker\r\n\t\t\t\t\t[iconUrl]=\"'../assets/images/icons/map_marker-lot.png'\"\r\n\t\t\t\t\t[latitude]=\"markerLot.lat\"\r\n\t\t\t\t\t[longitude]=\"markerLot.lng\">\r\n\t\t\t\t</agm-marker>\r\n\r\n\t\t\t\t<map-control #mapControl></map-control>\r\n\t\t\t</agm-map>\r\n\t\t</div>\r\n\r\n\t\t<br>\r\n\t\t<p>{{ 'Alternatively, enter coordinates into the text field below' | translate }}:</p>\r\n\r\n\t\t<mat-form-field appearance=\"outline\"\r\n\t\t\tclass=\"cm-outline-input\">\r\n\r\n\t\t\t<input matInput\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tformControlName=\"Coordinates\"/>\r\n\r\n\t\t\t<mat-error *ngIf=\"f.Coordinates.invalid && (f.Coordinates.dirty || f.Coordinates.touched)\">\r\n\t\t\t\t{{'Coordinates are invalid' | translate }}\r\n\t\t\t</mat-error>\r\n\t\t</mat-form-field>\r\n\r\n\t\t<div *ngIf=\"plantingSettingsFormBuilder.coordinateExplanation  || soilError\"\r\n\t\t\tclass=\"bk-clearfix bk-location-warning\">\r\n\t\t\t<i class=\"fa fa-warning\"></i>\r\n\t\t\t{{ plantingSettingsFormBuilder.coordinateExplanation }}\r\n\t\t\t\r\n\t\t\t<span *ngIf=\"soilError === soilErrorEnum.ParseError || \r\n\t\t\t\tsoilError === soilErrorEnum.OutOfRange\">\r\n\t\t\t\t{{'There is no soil data available for this location. Please try different coordinates' | translate }}\r\n\t\t\t</span>\r\n\t\t</div>\r\n\t</form>\r\n</div>\r\n<div mat-dialog-actions\r\n\talign=\"end\">\r\n\t<button class=\"bk-button__delete\"\r\n\t\t(click)=\"cancel()\">\r\n\t\t{{'Cancel' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\tclass=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n\t\t(click)=\"back()\">\r\n\t\t{{'Back' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\t[disabled]=\"stepForm && !stepForm.valid\"\r\n\t\t(click)=\"next()\"\r\n\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t{{ 'Next Step' | translate }}\r\n\t</button>\r\n</div>","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { PlantingSettingFields } from '../plantingSettingFields';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { eSoilWebCrawErrors } from '../../../interfaces/constants';\r\nimport { IAgmMapClick, ICoordinates } from '../../shared/interfaces';\r\nimport { AgmMap } from '@agm/core';\r\nimport { Coordinates } from '../../../classes/Coordinates';\r\nimport { MapControlDirective } from '../../../directives/map-control.directive';\r\nimport { PlantingSettingsFormBuilder } from '../plantingSettingsFormBuilder';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-create-step2',\r\n\ttemplateUrl: 'planting-create-step2.html',\r\n\tstyleUrls: [ 'planting-create-step2.scss']\r\n})\r\n\r\nexport class PlantingCreateStep2Component implements OnInit, OnDestroy {\r\n\t@ViewChild(AgmMap, { static: false }) public map: AgmMap;\r\n\t@ViewChild(MapControlDirective, { static: false }) private mapControl: MapControlDirective;\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic markersBus: BehaviorSubject<ICoordinates[]>;\r\n\r\n\t@Input()\r\n\tpublic lotCoordinatesBus: BehaviorSubject<string>;\r\n\r\n\t@Input()\r\n\tpublic plantingSettingsFormBuilder: PlantingSettingsFormBuilder;\r\n\r\n\t@Input()\r\n\tpublic soilErrorBus: BehaviorSubject<eSoilWebCrawErrors>;\r\n\r\n\t@Output()\r\n\tpublic nextStep: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n\t@Output()\r\n\tpublic onCancel: EventEmitter<void>;\r\n\r\n\tpublic markers: ICoordinates[];\r\n\tpublic markerLot: ICoordinates;\r\n\tpublic soilErrorEnum = eSoilWebCrawErrors;\r\n\tpublic soilError: eSoilWebCrawErrors;\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic stepForm: FormGroup;\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tprivate _lotCoordinateString: string;\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t) {\r\n\t\tthis.onCancel = new EventEmitter<void>();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.markers = [];\r\n\r\n\t\tthis.lotCoordinatesBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tlet lotCenter: Coordinates;\r\n\r\n\t\t\tthis._lotCoordinateString = data;\r\n\r\n\t\t\tlotCenter = new Coordinates(data);\r\n\r\n\t\t\tthis.markerLot = {\r\n\t\t\t\tlat: lotCenter.lat,\r\n\t\t\t\tlng: lotCenter.lng\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\tthis.markersBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tif (data) {\r\n\t\t\t\tthis.markers = data;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.soilErrorBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis.soilError = data;\r\n\t\t});\r\n\r\n\t\tthis._initializeForms();\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic mapReady() {\r\n\t\tthis._centerMapOnCoords(this._lotCoordinateString);\r\n\t}\r\n\r\n\tpublic clickMap(event: IAgmMapClick) {\r\n\t\tlet coordinates: Coordinates;\r\n\r\n\t\tcoordinates = new Coordinates(event.coords.lat + ',' + event.coords.lng);\r\n\r\n\t\tthis.f.Coordinates.setValue(coordinates.toString());\r\n\t\tthis.f.Coordinates.markAsTouched();\r\n\t}\r\n\r\n\tpublic back() {\r\n\t\tthis.nextStep.emit(1);\r\n\t}\r\n\r\n\tpublic next()  {\r\n\t\tthis.nextStep.emit(3);\r\n\t}\r\n\r\n\tpublic cancel() {\r\n\t\tthis.onCancel.emit();\r\n\t}\r\n\r\n\tprivate _centerMapOnCoords(coords: string) {\r\n\t\tif (!this.map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.map.triggerResize().then(() => {\r\n\t\t\tlet coordinates = new Coordinates(coords);\r\n\t\t\tthis._centerMap(coordinates.lat, coordinates.lng);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _centerMap(lat: number, lng: number): void {\r\n\t\tif (!this.mapControl) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.mapControl.centerMap(lat, lng);\r\n\t\tthis.mapControl.setZoom(15);\r\n\t}\r\n\r\n\tprivate _initializeForms(): void {\r\n\t\tthis.stepForm = this._fb.group({});\r\n\r\n\t\tthis.stepForm.addControl('Coordinates', this.f.Coordinates);\r\n\t}\r\n}\r\n","<div *ngIf=\"form\"\r\n\tmat-dialog-content>\r\n\r\n\t<form [formGroup]=stepForm>\r\n\r\n\t\t<mat-form-field *ngIf=\"fc.IsPerennial.value && f.CommodityTypeId.value !== COMMODITY_TYPES.CANEBERRY\"\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 required\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<mat-form-field *ngIf=\"fc.IsTree.value\"\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>{{'Vigor' | translate }}</mat-label>\r\n\r\n\t\t\t<mat-select required\r\n\t\t\t\tformControlName=\"IsHighVigor\">\r\n\r\n\t\t\t\t<mat-option *ngFor=\"let vigorOption of vigorOptions\"\r\n\t\t\t\t\t[value]=\"vigorOption.key\">\r\n\t\t\t\t\t{{ vigorOption.value | translate }}\r\n\t\t\t\t</mat-option>\r\n\r\n\t\t\t</mat-select>\r\n\t\t</mat-form-field>\r\n\r\n\t\t<mat-form-field *ngIf=\"!fc.IsTree.value && f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\"\r\n\t\t\tappearance=\"fill\"\r\n\t\t\tclass=\"mat-form-field--one-line mat-form-field--short\"\r\n>\t\t\t<mat-label>{{'Crop Total N Uptake' | translate }}</mat-label>\r\n\t\t\t<input matInput\r\n\t\t\t\ttype=\"number\"\r\n\t\t\t\trequired\r\n\t\t\t\t[formControl]=\"fc.MaxUptake\" />\r\n\t\r\n\t\t\t<span matSuffix>\r\n\t\t\t\t<i \t*ngIf=\"fc.UptakeFactor.value > 0\"\r\n\t\t\t\t\tclass=\"fa fa-calculator bk-clickable\"\r\n\t\t\t\t\tmatTooltip=\"{{ 'Crop Total N Uptake Calculator' | translate }}\"\r\n\t\t\t\t\t(click)=\"openMaxUptakeCalculator($event)\">\r\n\t\t\t\t</i>\r\n\t\t\t</span>\r\n\t\t\t<span matSuffix>\r\n\t\t\t\t{{ 'lbs N/acre' | translate}}\r\n\t\t\t</span>\r\n\t\t</mat-form-field>\r\n\r\n\r\n\t\t<p>\r\n\t\t\t{{ 'Enter Leaching Requirement Text' | translate }}.\r\n\t\t</p>\r\n\r\n\t\t<mat-slider name=\"LeechingFactorPct\"\r\n\t\t\tclass=\"cm-width-60percent\"\r\n\t\t\tformControlName=\"LeechingFactorPct\"\r\n\t\t\tmin=\"0\"\r\n\t\t\tmax=\"50\"\r\n\t\t\tstep=\"1\"\r\n\t\t\taria-label=\"unit(s)\"\r\n\t\t\tthumbLabel\r\n\t\t\t[displayWith]=\"formatLabel\">\r\n\t\t\t<input matSliderThumb>\r\n\t\t</mat-slider>\r\n\t\t<span><strong>{{ f.LeechingFactorPct.value }}%</strong></span>\r\n\t\t<div class=\"bk-custom-saturation-ui__legend\">\r\n\t\t\t<span class=\"bk-legend--end\">0%</span>\r\n\t\t\t<span class=\"bk-legend-middle\">&nbsp;</span>\r\n\t\t\t<span class=\"bk-legend--end\">50%</span>\r\n\t\t</div>\r\n\t\t\r\n\t\t<div *ngIf=\"fc.IsMacroTunnelEnabled.value\" \r\n\t\t\tclass=\"bk-form-group\">\r\n\t\t\t<macro-tunnel\r\n\t\t\t\t[form]=\"form.get('MacroTunnelSettings')\"\r\n\t\t\t\t[wetDateControl]=\"f.WetDate\"\r\n\t\t\t\t[harvestDateControl]=\"f.HarvestDate\">\r\n\t\t\t</macro-tunnel>\r\n\t\t</div>\r\n\r\n\t\t<ng-container *ngIf=\"fc.IsTree.value && fc.PreHarvestSenesce.value\">\r\n\t\t\t<mat-form-field appearance=\"fill\">\r\n\t\t\t\t<mat-label>\r\n\t\t\t\t\t{{'Leaf Senesce' | translate }}\r\n\t\t\t\t</mat-label>\r\n\t\t\t\t<input matInput [matDatepicker]=\"LeafSenesceDatePicker\"\r\n\t\t\t\t\t[formControl]=\"fc.LeafSenesceDate\"\r\n\t\t\t\t\trequired>\r\n\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"LeafSenesceDatePicker\"></mat-datepicker-toggle>\r\n\t\t\t\t<mat-datepicker #LeafSenesceDatePicker></mat-datepicker>\r\n\t\t\t\t<mat-hint>\r\n\t\t\t\t\tEnter a date when crop begins to senesce (usually late season)\r\n\t\t\t\t</mat-hint>\r\n\t\t\t\t<mat-error *ngIf=\"fc.LeafSenesceDate.invalid && (fc.LeafSenesceDate.dirty\r\n\t\t\t\t\t|| fc.LeafSenesceDate.touched)\">\r\n\t\t\t\t\t{{'Leaf senesce date range error text' | translate }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</ng-container>\r\n\t</form>\r\n</div>\r\n<div mat-dialog-actions\r\n\talign=\"end\">\r\n\t<button class=\"bk-button__delete\"\r\n\t\t(click)=\"cancel()\">\r\n\t\t{{'Cancel' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\tclass=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n\t\t(click)=\"back()\">\r\n\t\t{{'Back' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\t[disabled]=\"(stepForm && !stepForm.valid)\"\r\n\t\t(click)=\"next()\"\r\n\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t{{ 'Next Step' | translate }}\r\n\t</button>\r\n</div>","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { PlantingSettingFields } from '../plantingSettingFields';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { CropTypeFormFields } from '../../crop-types/cropTypeFormBuilder';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ISelectOptionBoolean, ISelectOptions } from '../../../interfaces/abstract';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { eCommodityTypes } from '../../../interfaces/constants';\r\nimport { DateUtility } from '../../../classes/dateUtility';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { MaxUptakeCalculatorComponent } from '../sections/max-uptake-calculator/max-uptake-calculator';\r\nimport { SharedUpdateService } from '../../shared/dialogs/update.service';\r\nimport { DIALOG_HIDE_CLASS } from '../../shared/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-create-step3',\r\n\ttemplateUrl: 'planting-create-step3.html',\r\n\tstyleUrls: [ 'planting-create-step3.scss']\r\n})\r\n\r\nexport class PlantingCreateStep3Component implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic ageOfCropBus: BehaviorSubject<ISelectOptions[]>;\r\n\r\n\t@Input()\r\n\tpublic vigorOptions: ISelectOptionBoolean[];\r\n\r\n\t@Output()\r\n\tpublic nextStep: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n\t@Output()\r\n\tpublic onCancel: EventEmitter<void>;\r\n\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\tpublic ageOfCropOptions: ISelectOptions[];\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\tpublic minDate: Date;\r\n\r\n\tpublic stepForm: FormGroup;\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.form.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<PlantingCreateStep3Component>,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService\r\n\t) {\r\n\t\tthis.onCancel = new EventEmitter<void>();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.ageOfCropBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis.ageOfCropOptions = data;\r\n\t\t});\r\n\r\n\t\tthis.minDate = DateUtility.addDays(this.f.WetDate.value, 1);\r\n\r\n\t\tthis.f.WetDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.minDate = DateUtility.addDays(this.f.WetDate.value, 1);\r\n\t\t});\r\n\r\n\t\tthis._initializeForms();\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\t//\r\n\t}\r\n\r\n\tpublic back() {\r\n\t\tthis.nextStep.emit(2);\r\n\t}\r\n\r\n\tpublic next()  {\r\n\t\tif (this.fc.IsTree.value || this.fc.IsStressable.value) {\r\n\t\t\tthis.nextStep.emit(4);\r\n\t\t} else {\r\n\t\t\tthis.nextStep.emit(5);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic cancel() {\r\n\t\tthis.onCancel.emit();\r\n\t}\r\n\r\n\tpublic openMaxUptakeCalculator(e: MouseEvent): void {\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\r\n\t\tthis._dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\r\n\t\tlet dialogConfig: MatDialogConfig = {\r\n\t\t\tdata: {\r\n\t\t\t\tform: this.form.get('CropSettings'),\r\n\t\t\t\tcontrol: this.fc.MaxUptake\r\n\t\t\t},\r\n\t\t\twidth: '600px',\r\n\t\t\tdisableClose: true\r\n\t\t}\r\n\r\n\t\tthis._dialog.open(MaxUptakeCalculatorComponent, dialogConfig);\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\tprivate _initializeForms(): void {\r\n\t\tthis.stepForm = this._fb.group({});\r\n\r\n\t\tif (this.fc.IsMacroTunnelEnabled.value) {\r\n\t\t\tthis.stepForm.addControl('MacroTunnelSettings',\r\n\t\t\t\tthis.form.get('MacroTunnelSettings'));\r\n\t\t}\r\n\r\n\t\tif (this.fc.IsTree.value) {\r\n\t\t\tthis.stepForm.addControl('MaxUptake', this.fc.MaxUptake);\r\n\t\t}\r\n\r\n\t\tthis.stepForm.addControl('AgeOfCrop', this.f.AgeOfCrop);\r\n\t\tthis.stepForm.addControl('IsHighVigor', this.f.IsHighVigor);\r\n\t\tthis.stepForm.addControl('LeechingFactorPct', this.f.LeechingFactorPct);\r\n\t\tthis.stepForm.addControl('LeafSenesceDate', this.fc.LeafSenesceDate);\r\n\t}\r\n}\r\n","<div *ngIf=\"form\"\r\n\tmat-dialog-content>\r\n\r\n\t<form [formGroup]=stepForm>\r\n\t\t<irrigation-deficit\r\n\t\t\t[parentForm]=\"form\">\r\n\t\t</irrigation-deficit>\r\n\t</form>\r\n</div>\r\n<div mat-dialog-actions\r\n\talign=\"end\">\r\n\t<button class=\"bk-button__delete\"\r\n\t\t(click)=\"cancel()\">\r\n\t\t{{'Cancel' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\tclass=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n\t\t(click)=\"back()\">\r\n\t\t{{'Back' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\t[disabled]=\"(stepForm && !stepForm.valid)\"\r\n\t\t(click)=\"next()\"\r\n\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t{{ ($any(f.ControlPoints).controls.length > 0 ?  'Next Step' : 'Skip') | translate }}\r\n\t</button>\r\n</div>","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { PlantingSettingFields } from '../plantingSettingFields';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { CropTypeFormFields } from '../../crop-types/cropTypeFormBuilder';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-create-step4',\r\n\ttemplateUrl: 'planting-create-step4.html',\r\n\tstyleUrls: [ 'planting-create-step4.scss']\r\n})\r\n\r\nexport class PlantingCreateStep4Component implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\t@Output()\r\n\tpublic nextStep: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n\t@Output()\r\n\tpublic onCancel: EventEmitter<void>;\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic stepForm: FormGroup;\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.form.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t) {\r\n\t\tthis.onCancel = new EventEmitter<void>();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._initializeForms();\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\t//\r\n\t}\r\n\r\n\tpublic back() {\r\n\t\tthis.nextStep.emit(3);\r\n\t}\r\n\r\n\tpublic next()  {\r\n\t\tthis.nextStep.emit(5);\r\n\t}\r\n\r\n\tpublic cancel() {\r\n\t\tthis.onCancel.emit();\r\n\t}\r\n\r\n\tprivate _initializeForms(): void {\r\n\t\tthis.stepForm = this._fb.group({});\r\n\r\n\t\tthis.stepForm.addControl('IsStressEnabled', this.fc.IsStressEnabled);\r\n\t\tthis.stepForm.addControl('ControlPoints', this.f.ControlPoints);\r\n\t}\r\n}\r\n","<div *ngIf=\"form\"\r\n\tmat-dialog-content>\r\n\r\n\t<form [formGroup]=stepForm>\r\n\r\n\t\t<irrigation-methods\r\n\t\t\t[parentForm]=\"form\"\r\n\t\t\t(inEditMode)=\"updateIrrigationMethodUIState($event)\">\r\n\t\t</irrigation-methods>\r\n\t</form>\r\n</div>\r\n<div mat-dialog-actions\r\n\talign=\"end\">\r\n\t<button class=\"bk-button__delete\"\r\n\t\t(click)=\"cancel()\">\r\n\t\t{{'Cancel' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\tclass=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n\t\t(click)=\"back()\">\r\n\t\t{{'Back' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\t*ngIf=\"fc.IsNDependent.value\"\r\n\t\t[disabled]=\"(stepForm && !stepForm.valid) || isIrrigationMethodUIInEditMode\"\r\n\t\t(click)=\"next()\"\r\n\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t{{ 'Next Step' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\t*ngIf=\"!fc.IsNDependent.value\"\r\n\t\t[disabled]=\"stepForm && !stepForm.valid\"\r\n\t\t(click)=\"finish()\"\r\n\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t{{(isSaving ? 'Prefetching ET': 'Finish') | translate }}\r\n\t\t<img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n\t</button>\r\n</div>","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { PlantingSettingFields } from '../plantingSettingFields';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { CropTypeFormFields } from '../../crop-types/cropTypeFormBuilder';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-create-step5',\r\n\ttemplateUrl: 'planting-create-step5.html',\r\n\tstyleUrls: [ 'planting-create-step5.scss']\r\n})\r\n\r\nexport class PlantingCreateStep5Component implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic isSavingBus: BehaviorSubject<boolean>;\r\n\r\n\t@Output()\r\n\tpublic nextStep: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n\t@Output()\r\n\tpublic onCancel: EventEmitter<void>;\r\n\r\n\t@Output()\r\n\tpublic onSubmit: EventEmitter<void>;\r\n\r\n\tpublic isSaving: boolean;\r\n\tpublic isIrrigationMethodUIInEditMode: boolean;\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic stepForm: FormGroup;\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.form.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t) {\r\n\t\tthis.onCancel = new EventEmitter<void>();\r\n\t\tthis.onSubmit = new EventEmitter<void>();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._initializeForms();\r\n\r\n\t\tthis.isSavingBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis.isSaving = data;\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\t//\r\n\t}\r\n\r\n\tpublic back() {\r\n\t\tif (this.fc.IsTree.value || this.fc.IsStressable.value) {\r\n\t\t\tthis.nextStep.emit(4);\r\n\t\t} else {\r\n\t\t\tthis.nextStep.emit(3);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic next()  {\r\n\t\tthis.nextStep.emit(6);\r\n\t}\r\n\r\n\tpublic cancel() {\r\n\t\tthis.onCancel.emit();\r\n\t}\r\n\r\n\tpublic finish() {\r\n\t\tthis.onSubmit.emit();\r\n\t}\r\n\r\n\r\n\tpublic updateIrrigationMethodUIState(state: boolean) {\r\n\t\tthis.isIrrigationMethodUIInEditMode = state;\r\n\t}\r\n\r\n\tprivate _initializeForms(): void {\r\n\t\tthis.stepForm = this._fb.group({});\r\n\r\n\t\tthis.stepForm.addControl('IrrigationMethod', this.f.IrrigationMethods);\r\n\t}\r\n}\r\n","<div *ngIf=\"form\"\r\n\tmat-dialog-content>\r\n\r\n\t<form [formGroup]=stepForm\r\n\t\tclass=\"bk-form\">\r\n\t\t\r\n\t\t<planting-wells *ngIf=\"fc.IsNDependent.value\"\r\n\t\t\t[form]=\"formWells\">\r\n\t\t</planting-wells>\r\n\t\t<br>\r\n\t</form>\r\n</div>\r\n<div mat-dialog-actions\r\n\talign=\"end\">\r\n\t<button class=\"bk-button__delete\"\r\n\t\t(click)=\"cancel()\">\r\n\t\t{{'Cancel' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\tclass=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n\t\t(click)=\"back()\">\r\n\t\t{{'Back' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\t*ngIf=\"fc.IsTree.value\"\r\n\t\t[disabled]=\"stepForm && !stepForm.valid\"\r\n\t\t(click)=\"next()\"\r\n\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t{{ 'Next Step' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\t*ngIf=\"!fc.IsTree.value\"\r\n\t\t[disabled]=\"stepForm && !stepForm.valid\"\r\n\t\t(click)=\"finish()\"\r\n\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t{{(isSaving ? 'Prefetching ET': 'Finish') | translate }}\r\n\t\t<img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n\t</button>\r\n</div>","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { PlantingSettingFields } from '../plantingSettingFields';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { CropTypeFormFields } from '../../crop-types/cropTypeFormBuilder';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-create-step6',\r\n\ttemplateUrl: 'planting-create-step6.html',\r\n\tstyleUrls: [ 'planting-create-step6.scss']\r\n})\r\n\r\nexport class PlantingCreateStep6Component implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic formWells: FormGroup;\r\n\r\n\t@Output()\r\n\tpublic nextStep: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n\t@Output()\r\n\tpublic onCancel: EventEmitter<void>;\r\n\r\n\t@Output()\r\n\tpublic onSubmit: EventEmitter<void>;\r\n\r\n\t@Input()\r\n\tpublic isSavingBus: BehaviorSubject<boolean>;\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic isSaving: boolean;\r\n\tpublic stepForm: FormGroup;\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.form.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t) {\r\n\t\tthis.onCancel = new EventEmitter<void>();\r\n\t\tthis.onSubmit = new EventEmitter<void>();\r\n\t\tthis.isSaving = false;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.isSavingBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis.isSaving = data;\r\n\t\t});\r\n\r\n\t\tthis._initializeForms();\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic back() {\r\n\t\tthis.nextStep.emit(5);\r\n\t}\r\n\r\n\tpublic next()  {\r\n\t\tthis.nextStep.emit(7);\r\n\t}\r\n\r\n\tpublic finish() {\r\n\t\tthis.onSubmit.emit();\r\n\t}\r\n\r\n\tpublic cancel() {\r\n\t\tthis.onCancel.emit();\r\n\t}\r\n\r\n\tprivate _initializeForms(): void {\r\n\t\tthis.stepForm = this._fb.group({});\r\n\r\n\t\tthis.stepForm.addControl('formWells', this.formWells);\r\n\t}\r\n}\r\n","<div *ngIf=\"form\"\r\n\tmat-dialog-content>\r\n\r\n\t<form [formGroup]=\"stepForm\"\r\n\t\tclass=\"bk-form\">\r\n\t\t\r\n\t\t<div class=\"bk-seasonal-n-calculator\"\r\n            *ngIf=\"fc.IsTree.value\">\r\n\r\n            <n-calculator-simple [plantingSettingsForm]=\"form\"\r\n                [form]=\"f.CropSettings.get('NCalculator')\"\r\n                [calculatorSettings]=\"f.CalculatorSettings\">\r\n            </n-calculator-simple>\r\n            \r\n        </div> <!-- almond calculator UI FINISH -->\r\n\t</form>\r\n</div>\r\n<div mat-dialog-actions\r\n\talign=\"end\">\r\n\t<button class=\"bk-button__delete\"\r\n\t\t(click)=\"cancel()\">\r\n\t\t{{'Cancel' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\tclass=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n\t\t(click)=\"back()\">\r\n\t\t{{'Back' | translate }}\r\n\t</button>\r\n\t<button mat-button\r\n\t\t[disabled]=\"stepForm && !stepForm.valid\"\r\n\t\t(click)=\"finish()\"\r\n\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t{{(isSaving ? 'Prefetching ET': 'Finish') | translate }}\r\n\t\t<img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n\t</button>\r\n</div>","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { PlantingSettingFields } from '../plantingSettingFields';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { CropTypeFormFields } from '../../crop-types/cropTypeFormBuilder';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-create-step7',\r\n\ttemplateUrl: 'planting-create-step7.html',\r\n\tstyleUrls: [ 'planting-create-step7.scss' ]\r\n})\r\n\r\nexport class PlantingCreateStep7Component implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\t@Output()\r\n\tpublic nextStep: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n\t@Output()\r\n\tpublic onCancel: EventEmitter<void>;\r\n\r\n\t@Output()\r\n\tpublic onSubmit: EventEmitter<void>;\r\n\r\n\t@Input()\r\n\tpublic isSavingBus: BehaviorSubject<boolean>;\r\n\r\n\tpublic isSaving: boolean;\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.form.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic stepForm: FormGroup;\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t) {\r\n\t\tthis.onCancel = new EventEmitter<void>();\r\n\t\tthis.onSubmit = new EventEmitter<void>();\r\n\t\tthis.isSaving = false;\r\n\t\tthis.stepForm = this._fb.group({});\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.isSavingBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis.isSaving = data;\r\n\t\t});\r\n\r\n\t\tthis._initializeForms();\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\tthis._subscriptions$.next(true);\r\n\t\tthis._subscriptions$.complete();\r\n\t}\r\n\r\n\tpublic back() {\r\n\t\tthis.nextStep.emit(6);\r\n\t}\r\n\r\n\tpublic finish()  {\r\n\t\t// Allow the user to save even if the form is invalid, to force an error message\r\n\t\t// if there are any\r\n\t\tthis.onSubmit.emit();\r\n\t}\r\n\r\n\tpublic cancel() {\r\n\t\tthis.onCancel.emit();\r\n\t}\r\n\r\n\tprivate _initializeForms(): void {\r\n\t\tthis.stepForm.addControl('NCalculator', this.f.CropSettings.get('NCalculator'));\r\n\t}\r\n}\r\n","import { FormBuilder, ValidatorFn, Validators } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { FormValidation } from '../../classes/formValidation';\r\nimport { eCommodityTypes } from '../../interfaces/constants';\r\nimport { ICommodityType, YieldUnitId } from '../../models/commodity-type/interfaces';\r\nimport { ICropType, ICropTypeViewModel, IVegetativeNDemand } from '../../models/crop-type/interfaces';\r\nimport { PREVIOUS_CROP_NO_RESIDUE_ID } from '../../services/constants';\r\nimport { CropTypeFormBuilder } from '../crop-types/cropTypeFormBuilder';\r\nimport { IPreviousCropViewModel } from './interfaces';\r\nimport { Planting } from './planting';\r\nimport { PlantingSettingsValidator } from './plantingSettingValidator';\r\nimport { NCalculatorFields } from './sections/nitrogen-calculator/n-calculator';\r\nimport { TonsConverter } from './tonsConverter';\r\n\r\nexport interface CropSettingsInitializeConfig {\r\n\tAgeOfCrop: number,\r\n\tIsCoverCropEnabled: boolean,\r\n\tIsStressEnabled: boolean,\r\n\tLeafSenesceDate: Date,\r\n\tPrevCropDays: number,\r\n\tPreviousCropTypeId: number,\r\n\tStressEndDate: Date,\r\n\tStressStartDate: Date,\r\n\tYieldTarget: number,\r\n\tYieldUnitId: YieldUnitId,\r\n\tWetDateControl: AbstractControl,\r\n\tHarvestDateControl: AbstractControl\r\n}\r\n\r\nexport class CropSettingsFormBuilder extends CropTypeFormBuilder {\r\n\r\n\tprivate _previousCropTypes: IPreviousCropViewModel[];\r\n\tpublic cropTypes: ICropType[];\r\n\tprivate _wetDateControl: AbstractControl;\r\n\tprivate _harvestDateControl: AbstractControl;\r\n\r\n\tpublic get nc(): { [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\tconstructor(fb: FormBuilder, commodityTypes: ICommodityType[],\r\n\t\tpreviousCropTypes: IPreviousCropViewModel[], cropTypes: ICropType[],\r\n\t\t$subscription: Subject<boolean>) {\r\n\r\n\t\tsuper(fb, commodityTypes, $subscription);\r\n\t\tthis._previousCropTypes = previousCropTypes;\r\n\t\tthis._subscriptions$ = $subscription;\r\n\t\tthis.cropTypes = cropTypes;\r\n\t}\r\n\r\n\t/**\r\n\t * The fields defined in this class are exposed in the crop settings view\r\n\t * @param ct\r\n\t * @returns\r\n\t */\r\n\tpublic initialize(cropSettings: ICropTypeViewModel, p: CropSettingsInitializeConfig): FormGroup {\r\n\r\n\t\tthis._wetDateControl = p.WetDateControl;\r\n\t\tthis._harvestDateControl = p.HarvestDateControl;\r\n\r\n\t\tthis.form = this._fb.group({\r\n\t\t\t...(super.initializeForm(cropSettings).controls),\r\n\t\t\t// custom fields\r\n\t\t\tDefaultCropTypeId: [cropSettings.DefaultCropTypeId, [\r\n\t\t\t\tPlantingSettingsValidator.mustBeValidDefaultCropTypeId(this.cropTypes)]],\r\n\t\t\tIsCoverCropEnabled: [p.IsCoverCropEnabled],\r\n\r\n\t\t\tIsStressEnabled: [p.IsStressEnabled !== undefined &&\r\n\t\t\t\tp.IsStressEnabled !== null ? p.IsStressEnabled : null],\r\n\r\n\t\t\tLeafSenesceDate: [p.LeafSenesceDate],\r\n\t\t\tPrevCropDays: [p.PrevCropDays, [PlantingSettingsValidator.mustBeAnInteger()]],\r\n\t\t\tPreviousCropTypeId: [p.PreviousCropTypeId ? p.PreviousCropTypeId : PREVIOUS_CROP_NO_RESIDUE_ID ],\r\n\t\t\tStressEndDate: [p.StressEndDate],\r\n\t\t\tStressStartDate: [p.StressStartDate],\r\n\t\t\t/// internal fields\r\n\t\t\tPerennialCanopyIndex: [null],\r\n\t\t\tRootDepthIndex: [null],\r\n\t\t\tVegetativeIndex: [null]\r\n\t\t});\r\n\r\n\t\tFormValidation.setValidator(this.f.IsStressEnabled, [FormValidation.requiredIfTree(this.f.IsTree)]);\r\n\r\n\t\tthis._initializeStressDates();\r\n\t\tthis._setupConditionalRules();\r\n\r\n\t\tthis.nc.YieldTarget.setValue(p.YieldTarget); // used for strawberry and trees\r\n\r\n\t\tthis.nc.YieldTargetDisplayed.setValue(TonsConverter.converLbsToTargetUnit(p.YieldUnitId,\r\n\t\t\tp.YieldTarget));\r\n\r\n\t\tif (this.f.IsTree.value) {\r\n\t\t\tthis._initializeLeafSenesceDate(this._wetDateControl.value, this._harvestDateControl.value);\r\n\t\t}\r\n\r\n\t\tthis._bindFormValueChanges();\r\n\t\tthis.updateArrayIndexes(p.AgeOfCrop);\r\n\r\n\t\treturn this.form;\r\n\t}\r\n\r\n\tpublic updateArrayIndexes(ageOfCrop: number): void {\r\n\t\tthis.f.PerennialCanopyIndex.setValue(this.getPerennialCanopyIndex(ageOfCrop));\r\n\t\tthis.f.RootDepthIndex.setValue(this.getPerennialRootDepthIndex(ageOfCrop));\r\n\t\tthis.f.VegetativeIndex.setValue(this.getVegetativeNDemandIndex(ageOfCrop));\r\n\t}\r\n\r\n\tprivate _setupConditionalRules(): void {\r\n\t\tif (this.f.IsTree.value) {\r\n\t\t\tFormValidation.setValidator(this.f.IsCoverCropEnabled, [Validators.required]);\r\n\t\t} else {\r\n\t\t\tFormValidation.clearValidator(this.f.IsCoverCropEnabled);\r\n\t\t}\r\n\r\n\t\tthis.setStressValidators();\r\n\t\tthis.updateStressValidators();\r\n\t\tthis._setPreviousCropValidation();\r\n\t}\r\n\r\n\t/***\r\n\t * If the user chooses a previous crop type, prevCropDays field should be required\r\n\t */\r\n\tprivate _setPreviousCropValidation(): void {\r\n\t\tFormValidation.setValidator(this.f.PrevCropDays,\r\n\t\t\t[PlantingSettingsValidator.mustBeAnInteger(), Validators.required]);\r\n\r\n\t\tif (this.f.IsTree.value) {\r\n\t\t\tthis.f.PrevCropDays.disable();\r\n\t\t} else if (this.f.CommodityTypeId.value === eCommodityTypes.ALFALFA) {\r\n\t\t\tthis.f.PrevCropDays.disable();\r\n\t\t} else if (!this.f.PreviousCropTypeId.value ||\r\n\t\t\tthis.f.PreviousCropTypeId.value === PREVIOUS_CROP_NO_RESIDUE_ID) {\r\n\r\n\t\t\tthis.f.PrevCropDays.disable();\r\n\t\t} else {\r\n\t\t\tthis.f.PrevCropDays.enable();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Called by parent form plantingSettingsFormBuilder\r\n\t */\r\n\tpublic setStressValidators(): void {\r\n\t\t/**\r\n\t\tFormValidation.setValidator(this.f.WaterStressStart, [Validators.required]);\r\n\t\t\tFormValidation.setValidator(this.f.WaterStressEnd, [Validators.required]);\r\n\r\n\t\tFormValidation.setValidator(this.f.StressStartDate,\r\n\t\t\t[FormValidation.maxDateValidatorWithControl(this.f.StressEndDate, true),\r\n\t\t\tFormValidation.minDateValidatorWithControl(this._wetDateControl)]);\r\n\r\n\t\tFormValidation.setValidator(this.f.StressEndDate,\r\n\t\t\t[FormValidation.minDateValidatorWithControl(this.f.StressStartDate, true),\r\n\t\t\tFormValidation.maxDateValidatorWithControl(this._harvestDateControl, true)]);\r\n\r\n\t\tFormValidation.setValidator(this.f.StressStart, [Validators.required,\r\n\t\t\tFormValidation.greaterThanValidator(0),\r\n\t\t\tValidators.max(1),\r\n\t\t\tthis._StressStartMustBeBeforeStressEnd(this.form)]);\r\n\r\n\t\tFormValidation.setValidator(this.f.StressEnd, [Validators.required,\r\n\t\t\tFormValidation.greaterThanValidator(0),\r\n\t\t\tValidators.max(1),\r\n\t\t\tthis._StressStartMustBeBeforeStressEnd(this.form)]);\r\n\t\t\t**/\r\n\t}\r\n\r\n\t/**\r\n\t * This method should be called if the user changes the commodity type or\r\n\t * if the user flips the IsStressEnabled field\r\n\t */\r\n\tpublic updateStressValidators() {\r\n\t\tif ((this.f.IsStressable.value && !this.f.IsTree.value) ||\r\n\t\t\t(this.f.IsTree.value && this.f.IsStressEnabled.value)) {\r\n\t\t\t/**\r\n\t\t\t * If crop is stressable and not tree, stress fields are required.\r\n\t\t\t * If tree, stress values are required if user chooses to stress the crop\r\n\t\t\t */\r\n\r\n\t\t\tthis.f.WaterStressStart.enable();\r\n\t\t\tthis.f.WaterStressEnd.enable();\r\n\t\t\tthis.f.StressStartDate.enable();\r\n\t\t\tthis.f.StressEndDate.enable();\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.WaterStressStart.disable();\r\n\t\t\tthis.f.WaterStressEnd.disable();\r\n\t\t\tthis.f.StressStart.disable();\r\n\t\t\tthis.f.StressEnd.disable();\r\n\t\t\tthis.f.StressStartDate.disable();\r\n\t\t\tthis.f.StressEndDate.disable();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _bindFormValueChanges(): void {\r\n\t\tthis.f.PreviousCropTypeId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._setPreviousCropValidation();\r\n\t\t\tthis._updatePrevCropKValues();\r\n\t\t});\r\n\r\n\t\tthis.f.CommodityTypeId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.determineCropProperties(this.f.CommodityTypeId.value);\r\n\t\t\tthis._setupConditionalRules();\r\n\t\t\tthis.setupConditionalValidators();\r\n\t\t});\r\n\r\n\t\tthis.f.IsStressEnabled.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.updateStressValidators();\r\n\t\t});\r\n\r\n\t\tthis.f.IsCoverCropEnabled.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (this.f.IsCoverCropEnabled.value) {\r\n\t\t\t\tfor (let seasonKC of (this.f.SeasonalKCs as FormArray).controls) {\r\n\t\t\t\t\tseasonKC.get('Density').setValidators([Validators.required]);\r\n\t\t\t\t\tseasonKC.get('Cover').setValidators([Validators.required]);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (let seasonKC of (this.f.SeasonalKCs as FormArray).controls) {\r\n\t\t\t\t\tseasonKC.get('Density').clearValidators();\r\n\t\t\t\t\tseasonKC.get('Cover').clearValidators();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate  _updatePrevCropKValues(): void {\r\n\t\tlet crop: IPreviousCropViewModel;\r\n\r\n\t\tif (!this._previousCropTypes || this._previousCropTypes.length === 0) {\r\n\t\t\tthrow new Error('previous crop types array is empty');\r\n\t\t}\r\n\r\n\t\tif (!this.f.IsNDependent.value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcrop = this._previousCropTypes.filter(x => x.Id === this.f.PreviousCropTypeId.value)[0];\r\n\r\n\t\tif (!crop) {\r\n\t\t\tthrow new Error('invalid previous crop type Id');\r\n\t\t}\r\n\r\n\t\tthis.f.PrevCropK.setValue(crop.PrevCropK);\r\n\t\tthis.f.CropMineralizationRate.setValue(crop.CropMineralizationRate);\r\n\t}\r\n\r\n\tprivate _StressStartMustBeBeforeStressEnd(fg: FormGroup): ValidatorFn {\r\n\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (!fg.get('IsStressable').value || !fg.get('IsStressEnabled').value) {\r\n\t\t\t\tvalid = true;\r\n\t\t\t} else {\r\n\t\t\t\tif (fg.get('StressStart').value >= fg.get('StressEnd').value) {\r\n\t\t\t\t\tvalid = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalid = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn valid ? null : {'stressDatesOutOfSequence': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n     * Separated this code into a function because we may need a subscription to\r\n     * ping this when crop type changes. Different crop types will have different\r\n     * stress parameters\r\n     */\r\n\tprivate _initializeStressDates() {\r\n\r\n\t\tif (!this.f.IsStressable.value) {\r\n\t\t\treturn; // not stressable crop, so do nothing\r\n\t\t}\r\n\r\n\t\tif (!this.f.StressStartDate.value) {\r\n\t\t\tthis.f.StressStartDate.setValue(\r\n\t\t\t\tPlanting.convertPercentageIntoDate(this._wetDateControl.value,\r\n\t\t\t\t\tthis._harvestDateControl.value,\r\n\t\t\t\t\tthis.f.StressStart.value)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (!this.f.StressEndDate.value) {\r\n\t\t\tthis.f.StressEndDate.setValue(\r\n\t\t\t\tPlanting.convertPercentageIntoDate(\r\n\t\t\t\t\tthis._wetDateControl.value, this._harvestDateControl.value,\r\n\t\t\t\t\tthis.f.StressEnd.value)\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _initializeLeafSenesceDate(wetDate: Date, harvestDate: Date) {\r\n\t\tif (this.f.LeafSenesceDate.value || !this.f.IsTree.value || !wetDate ||\r\n\t\t\t!harvestDate) {\r\n\t\t\t// do not modify if leaf senesce date is already set. Only relevant for\r\n\t\t\t// trees. Can't be calculated without wet date or harvest date\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.f.LeafSenesceDate.setValue(\r\n\t\t\tPlanting.convertPercentageIntoDate(wetDate,\r\n\t\t\t\tharvestDate, this.f.LeafSenesce.value)\r\n\t\t);\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-dialog__event\">\r\n\t<button (click)=\"cancel()\"\r\n\t\ttype=\"button\"\r\n\t\tclass=\"bk-button bk-dialog__close\">\r\n\t\t<span>&times;</span>\r\n\t</button>\r\n\r\n\t<div class=\"cm-dialog__double-header-section\">\r\n\t\t<h4 class=\"bk-modal__header-title\">\r\n\t\t\t{{ 'Duplicate' | translate }} {{ 'Planting' | translate }}\r\n\t\t</h4>\r\n\t\t<div class=\"bk-modal__header-subtitle\">\r\n\t\t\t{{'Crop Type' | translate }}: {{ cropTypeName }}\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n\t<div *ngIf=\"form\"\r\n\t\tmat-dialog-content>\r\n\r\n\t\t<form [formGroup]=form\r\n\t\t\tclass=\"bk-form cm-planting-create-form\">\r\n\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 cm-irrigation-dialog__deficit-ui__input\">\r\n\r\n\t\t\t\t<mat-label>\r\n\t\t\t\t\t{{'Planting Name' | translate }}\r\n\t\t\t\t</mat-label>\r\n\r\n\t\t\t\t<input matInput\r\n\t\t\t\t\trequired\r\n\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\tformControlName=\"Name\"/>\r\n\t\t\t\t<mat-hint align=\"start\">{{ 'Original name' | translate }}: {{ plantingName }}</mat-hint>\r\n\t\t\t\t<mat-error *ngIf=\"f.Name.invalid && (f.Name.dirty || f.Name.touched)\">\r\n\t\t\t\t\t{{'Planting Name cannot be empty or longer than 128 characters' | translate }}\r\n\t\t\t\t</mat-error>\r\n\r\n\t\t\t</mat-form-field>\r\n\r\n\t\t\t<mat-form-field *ngIf=\"f.CropTypeId.value\"\r\n\t\t\t\tappearance=\"fill\"\r\n\t\t\t\tclass='bk-mat-date-field bk-mat-date-field--first'>\r\n\t\t\t\t<mat-label>\r\n\t\t\t\t\t<span *ngIf=\"!fc.IsPerennial.value\">\r\n\t\t\t\t\t\t{{'Wet Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA && fc.IsPerennial.value\">\r\n\t\t\t\t\t\t{{'Leaf Out Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{'Start Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-label>\r\n\t\t\t\t<input matInput [matDatepicker]=\"wetDatePicker\"\r\n\t\t\t\t\tformControlName=\"WetDate\"\r\n\t\t\t\t\trequired>\r\n\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"wetDatePicker\"></mat-datepicker-toggle>\r\n\t\t\t\t<mat-datepicker #wetDatePicker></mat-datepicker>\r\n\r\n\t\t\t\t<mat-hint align=\"start\">\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{ 'Alfalfa Start Date Help Text' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA && fc.IsPerennial.value\">\r\n\t\t\t\t\t\t{{ 'Almond Leaf Out Date Help Text' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-hint>\r\n\r\n\t\t\t\t<mat-error *ngIf=\"f.WetDate.invalid && (f.WetDate.dirty\r\n\t\t\t\t\t|| f.WetDate.touched)\">\r\n\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.wetDateNotSameYearAsHarvestDate\">\r\n\t\t\t\t\t\t{{ \"For tree crops, planting start and end dates must be in the same year\" | translate }}.\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.cutEventsBeforeWetDate\">\r\n\t\t\t\t\t\t{{'Planting Wet Date Cut Date Error Text' | translate }}.\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.endDateOnOrAfterHarvestDate\">\r\n\t\t\t\t\t\t{{'Planting Wet Date Error Text' | translate }}.\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.invalidDate\">\r\n\t\t\t\t\t\t{{'This date is in an invalid format' | translate}}.\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.required\">\r\n\t\t\t\t\t\t{{'This field is required' | translate }}.\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t\t<mat-form-field *ngIf=\"f.CropTypeId.value\"\r\n\t\t\t\tappearance=\"fill\"\r\n\t\t\t\tclass='bk-mat-date-field'>\r\n\t\t\t\t<mat-label>\r\n\t\t\t\t\t<span *ngIf=\"fc.IsPerennial.value && f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{'End of Season Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<span *ngIf=\"harvestOnce && !fc.IsPerennial.value\">\r\n\t\t\t\t\t\t{{'Harvest Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<span *ngIf=\"!harvestOnce && !fc.IsPerennial.value\">\r\n\t\t\t\t\t\t{{'End of Crop Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{'End Date' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-label>\r\n\t\t\t\t<input matInput [matDatepicker]=\"harvestDatePicker\"\r\n\t\t\t\t\tformControlName=\"HarvestDate\"\r\n\t\t\t\t\trequired>\r\n\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"harvestDatePicker\"></mat-datepicker-toggle>\r\n\t\t\t\t<mat-datepicker #harvestDatePicker></mat-datepicker>\r\n\t\t\t\t<mat-hint align=\"start\">\r\n\t\t\t\t\t<span *ngIf=\"fc.IsPerennial.value && f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{ 'End of Season Date Help Text' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t{{ 'Alfalfa End Date Help Text' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-hint>\r\n\t\t\t\t<mat-error *ngIf=\"f.HarvestDate.invalid && (f.HarvestDate.dirty\r\n\t\t\t\t\t|| f.HarvestDate.touched)\">\r\n\t\t\t\t\t<span *ngIf=\"f.HarvestDate.errors.required\">\r\n\t\t\t\t\t\t{{ 'This field is required' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"!f.HarvestDate.errors.required && f.HarvestDate.errors.mustBeAfterWetDate\">\r\n\t\t\t\t\t\t{{ 'Planting end date must be before the start date' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"!f.HarvestDate.errors.require && wetDateNotSameYearAsHarvestDate\">\r\n\t\t\t\t\t\t{{ 'Planting start and end dates must be in the same year' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t\t<br>\r\n\r\n\t\t\t<mat-form-field *ngIf=\"fc.IsPerennial.value && f.CommodityTypeId.value !== COMMODITY_TYPES.CANEBERRY\"\r\n\t\t\t\tappearance=\"fill\"\r\n\t\t\t\tclass=\"mat-form-field--one-line mat-form-field--short\">\r\n\r\n\t\t\t\t<mat-label>{{'Age of Crop' | translate }}</mat-label>\r\n\r\n\t\t\t\t<mat-select required\r\n\t\t\t\t\tformControlName=\"AgeOfCrop\">\r\n\r\n\t\t\t\t\t<mat-option *ngFor=\"let ageOfCropOption of ageOfCropOptions\"\r\n\t\t\t\t\t\t[value]=\"ageOfCropOption.key\">\r\n\t\t\t\t\t\t{{ ageOfCropOption.value }}\r\n\t\t\t\t\t</mat-option>\r\n\r\n\t\t\t\t</mat-select>\r\n\r\n\t\t\t\t<mat-error *ngIf=\"f.AgeOfCrop.invalid && (f.AgeOfCrop.dirty || f.AgeOfCrop.touched)\">\r\n\t\t\t\t\t{{'Age of crop is required' | translate }}\r\n\t\t\t\t</mat-error>\r\n\r\n\t\t\t</mat-form-field>\r\n\r\n\t\t\t<ng-container *ngIf=\"fc.IsTree.value\">\r\n\t\t\t\t<mat-form-field appearance=\"fill\">\r\n\t\t\t\t\t<mat-label>\r\n\t\t\t\t\t\t{{'Leaf Senesce' | translate }}\r\n\t\t\t\t\t</mat-label>\r\n\t\t\t\t\t<input matInput [matDatepicker]=\"LeafSenesceDatePicker\"\r\n\t\t\t\t\t\t[formControl]=\"fc.LeafSenesceDate\"\r\n\t\t\t\t\t\trequired>\r\n\t\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"LeafSenesceDatePicker\"></mat-datepicker-toggle>\r\n\t\t\t\t\t<mat-datepicker #LeafSenesceDatePicker></mat-datepicker>\r\n\t\t\t\t\t<mat-hint>\r\n\t\t\t\t\t\tEnter a date when crop begins to senesce (usually late season)\r\n\t\t\t\t\t</mat-hint>\r\n\t\t\t\t\t<mat-error *ngIf=\"fc.LeafSenesceDate.invalid && (fc.LeafSenesceDate.dirty\r\n\t\t\t\t\t\t|| fc.LeafSenesceDate.touched)\">\r\n\t\t\t\t\t\t{{'Leaf senesce date range error text' | translate }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t</ng-container>\r\n\r\n\t\t\t<div *ngIf=\"fc.IsStressable.value\"\r\n\t\t\t\tclass=\"cm-light\">\r\n\t\t\t\t<h5 class=\"bk-clearfix\">\r\n\t\t\t\t\t{{'Stress Factors' | translate }}\r\n\t\t\t\t</h5>\r\n\t\t\r\n\t\t\t\t<mat-radio-group *ngIf=\"fc.IsTree.value\"\r\n\t\t\t\t\taria-label=\"\"\r\n\t\t\t\t\tname=\"IsStressEnabled\"\r\n\t\t\t\t\t[formControl]=\"fc.IsStressEnabled\">\r\n\t\t\r\n\t\t\t\t\t<mat-radio-button [value]=\"true\"\r\n\t\t\t\t\t\tname=\"IsStressEnabled\">\r\n\t\t\t\t\t\t{{'Enable Stress' | translate}}\r\n\t\t\t\t\t</mat-radio-button>\r\n\t\t\r\n\t\t\t\t\t<mat-radio-button [value]=\"false\"\r\n\t\t\t\t\t\tclass=\"mat-radio-button--left-margin\"\r\n\t\t\t\t\t\tname=\"IsStressEnabled\">\r\n\t\t\t\t\t\t{{'Disable stress' | translate}}\r\n\t\t\t\t\t</mat-radio-button>\r\n\t\t\t\t</mat-radio-group>\r\n\t\t\r\n\t\t\t\t<ng-container *ngIf=\"(fc.IsTree.value && fc.IsStressEnabled.value) ||\r\n\t\t\t\t\t!fc.IsTree.value\">\r\n\t\t\r\n\t\t\t\t\t<irrigation-deficit\r\n\t\t\t\t\t\t[parentForm]=\"form\">\r\n\t\t\t\t\t</irrigation-deficit>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div *ngIf=\"fc.IsMacroTunnelEnabled.value\" \r\n\t\t\t\tclass=\"bk-form-group cm-light\">\r\n\t\t\t\t<h5>{{'Macro Tunnel' | translate }}</h5>\r\n\t\t\t\t<macro-tunnel\r\n\t\t\t\t\t[form]=\"form.get('MacroTunnelSettings')\"\r\n\t\t\t\t\t[wetDateControl]=\"f.WetDate\"\r\n\t\t\t\t\t[harvestDateControl]=\"f.HarvestDate\">\r\n\t\t\t\t</macro-tunnel>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t</div>\r\n\t<div mat-dialog-actions\r\n\t\talign=\"end\">\r\n\t\t<button class=\"bk-button__delete\"\r\n\t\t\t(click)=\"cancel()\">\r\n\t\t\t{{'Cancel' | translate }}\r\n\t\t</button>\r\n\t\t<button mat-button\r\n\t\t\t[disabled]=\"stepForm && !stepForm.valid\"\r\n\t\t\t(click)=\"submit()\"\r\n\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\">\r\n\t\t\t{{(isSaving ? 'Prefetching ET': 'Finish') | translate }}\r\n\t\t<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, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ICropType } from '../../../models/crop-type/interfaces';\r\nimport { ISelectOptions } from '../../../interfaces/abstract';\r\nimport { CropTypeFormFields } from '../../crop-types/cropTypeFormBuilder';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { PlantingSettingFields } from '../plantingSettingFields';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { eCommodityTypes } from '../../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'duplicate-planting-dialog',\r\n\ttemplateUrl: 'duplicate-planting-dialog.html',\r\n\tstyleUrls: [ 'duplicate-planting-dialog.scss']\r\n})\r\n\r\nexport class DuplicatePlantingDialog implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic cropTypesBus: BehaviorSubject<ICropType[]>; // crop types dropdown\r\n\r\n\t@Input()\r\n\tpublic isSavingBus: BehaviorSubject<boolean>;\r\n\r\n\t@Input()\r\n\tpublic ageOfCropBus: BehaviorSubject<ISelectOptions[]>;\r\n\r\n\t@Output()\r\n\tpublic onCancel: EventEmitter<void>;\r\n\r\n\t@Output()\r\n\tpublic onSubmit: EventEmitter<void>;\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.form.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic cropTypeName: string;\r\n\tpublic plantingName: string; // original planting name\r\n\tpublic ageOfCropOptions: ISelectOptions[];\r\n\tpublic isSaving: boolean;\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\r\n\tpublic stepForm: FormGroup;\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t) {\r\n\t\tthis.onCancel = new EventEmitter<void>();\r\n\t\tthis.onSubmit = new EventEmitter<void>();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.plantingName = this.f.Name.value;\r\n\t\tthis.f.Name.setValue(null);\r\n\t\tthis.f.Name.markAsUntouched();\r\n\r\n\t\tif (this.f.MacroTunnelSettings.get('endDate').value !== null) {\r\n\t\t\tthis.f.MacroTunnelSettings.get('endDate').markAsTouched();\r\n\t\t}\r\n\r\n\t\tif (this.f.MacroTunnelSettings.get('startDate').value !== null) {\r\n\t\t\tthis.f.MacroTunnelSettings.get('startDate').markAsTouched();\r\n\t\t}\r\n\r\n\t\tthis.isSavingBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis.isSaving = data;\r\n\t\t});\r\n\r\n\t\tthis.ageOfCropBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tthis.ageOfCropOptions = data;\r\n\t\t});\r\n\r\n\t\tthis._setCropTypeName();\r\n\t\tthis._initializeForms();\r\n\t}\r\n\r\n\tngOnDestroy(): void {\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.onCancel.emit();\r\n\t}\r\n\r\n\tpublic submit(): void {\r\n\t\tthis.onSubmit.emit();\r\n\t}\r\n\r\n\tprivate _initializeForms(): void {\r\n\t\tthis.stepForm = this._fb.group({});\r\n\r\n\t\tif (this.fc.IsMacroTunnelEnabled.value) {\r\n\t\t\tthis.stepForm.addControl('MacroTunnelSettings',\r\n\t\t\t\tthis.form.get('MacroTunnelSettings'));\r\n\t\t}\r\n\r\n\t\tthis.stepForm.addControl('Name', this.f.Name);\r\n\t\tthis.stepForm.addControl('WetDate', this.f.WetDate);\r\n\t\tthis.stepForm.addControl('HarvestDate', this.f.HarvestDate);\r\n\t\tthis.stepForm.addControl('AgeOfCrop', this.f.AgeOfCrop);\r\n\t\tthis.stepForm.addControl('IsStressEnabled', this.fc.IsStressEnabled);\r\n\t\tthis.stepForm.addControl('ControlPoints', this.f.ControlPoints);\r\n\t\tthis.stepForm.addControl('LeafSenesceDate', this.fc.LeafSenesceDate);\r\n\t}\r\n\r\n\tprivate _setCropTypeName(): void {\r\n\t\tthis.cropTypesBus.pipe(takeUntil(this._subscriptions$)).subscribe((data) => {\r\n\t\t\tlet cropType: ICropType;\r\n\t\t\tlet cropTypes: ICropType[];\r\n\r\n\t\t\tcropTypes = data;\r\n\r\n\t\t\tif (!cropTypes || cropTypes.length === 0) {\r\n\t\t\t\tthrow new Error('crop types are empty');\r\n\t\t\t}\r\n\r\n\t\t\tcropType = cropTypes.find(x => x.Id === this.fc.DefaultCropTypeId.value);\r\n\r\n\t\t\tif (!cropType) {\r\n\t\t\t\tthrow new Error('Crop type match not found');\r\n\t\t\t}\r\n\r\n\t\t\tthis.cropTypeName = cropType.Name;\r\n\t\t});\r\n\t}\r\n}\r\n","/**\r\n * Planting setting views\r\n */\r\nexport enum PSView {\r\n\tMAIN_SETTINGS = 1,\r\n\tIRRIGATION_SETTINGS,\r\n\tSOIL_SETTINGS,\r\n};\r\n\r\nexport interface IErrorLookupItem {\r\n\tTitle: string,\r\n\tLocationId: PSView\r\n}\r\n\r\n/**\r\n * Calculator settings fields are not included because it should be impossible\r\n * for invalid values to be saved.\r\n *\r\n * For brevity, crop setting view is not specified.\r\n */\r\nexport const errorLookupMap: Map<string, IErrorLookupItem> = new Map<string, IErrorLookupItem>([\r\n\t['AgeOfCrop', { Title: 'Age of Crop', LocationId: PSView.MAIN_SETTINGS }],\r\n\t['CommodityTypeId', { Title: 'Commodity', LocationId: PSView.MAIN_SETTINGS}],\r\n\t['CropTypeId', { Title: 'Crop Type', LocationId: PSView.MAIN_SETTINGS} ],\r\n\t['DefaultSoilTypeId', { Title: 'Soil Type', LocationId: PSView.SOIL_SETTINGS}],\r\n\t['DripApplicationRate', { Title: 'Drip Application Rate', LocationId: PSView.IRRIGATION_SETTINGS}],\r\n\t['DripDistUniformPct', { Title: 'Drip Distribution Uniformity', LocationId: PSView.IRRIGATION_SETTINGS}],\r\n\t['FloodDistUniformityPct', { Title: 'Flood Distribution Uniformity', LocationId: PSView.IRRIGATION_SETTINGS}],\r\n\t['GerminationSprinklerPct', { Title: 'Germination Sprinkler Distribution Uniformity', LocationId: PSView.IRRIGATION_SETTINGS}],\r\n\t['LeechingFactorPct', { Title: 'Leaching Requirement', LocationId: PSView.IRRIGATION_SETTINGS}],\r\n\t['LotId', { Title: 'Lot', LocationId: PSView.MAIN_SETTINGS}],\r\n\t['MicroSprinklerApplicationRate', { Title: 'Micro Sprinkler Application Rate', LocationId: PSView.IRRIGATION_SETTINGS}],\r\n\t['MicroSprinklerDistUniformityPct', { Title: 'Micro Sprinkler Distribution Uniformity', LocationId: PSView.IRRIGATION_SETTINGS}],\r\n\t['Name', { Title: 'Planting Name', LocationId: PSView.MAIN_SETTINGS}],\r\n\t['ObstructionDepth', { Title: 'Root Depth Obstruction', LocationId: PSView.SOIL_SETTINGS}],\r\n\t['SprinklerApplicationRate', { Title: 'Sprinkler Application Rate', LocationId: PSView.IRRIGATION_SETTINGS}],\r\n\t['SprinklerDistUniformityPct', { Title: 'Sprinkler Distribution Uniformity', LocationId: PSView.IRRIGATION_SETTINGS}],\r\n\t['YieldActual', { Title: 'Actual Yield', LocationId: PSView.MAIN_SETTINGS}],\r\n\t['startDate', { Title: 'Macro Tunnel Start Date', LocationId: PSView.IRRIGATION_SETTINGS}],\r\n\t['endDate', { Title: 'Macro Tunnel End Date', LocationId: PSView.IRRIGATION_SETTINGS}],\r\n\t['LeafSenesceDate', { Title: 'Leaf Senesce', LocationId: null}],\r\n\t['PreviousCropTypeId', { Title: 'Previous Crop Type', LocationId: null}],\r\n\t['PrevCropDays', { Title: 'Days Since Incorporating Previous Crop Residues', LocationId: null}],\r\n\t['StressEndDate', { Title: 'StressEnd', LocationId: null}],\r\n\t['StressStartDate', { Title: 'StressStart', LocationId: null}],\r\n\t['BasalKC', { Title: 'Basal Kc', LocationId: null}],\r\n\t['CanopyA', { Title: 'Canopy development coefficient A', LocationId: null}],\r\n\t['CanopyB', { Title: 'Canopy development coefficient B', LocationId: null}],\r\n\t['CanopyC', { Title: 'Canopy development coefficient C', LocationId: null}],\r\n\t['CanopyD', { Title: 'Canopy development coefficient D', LocationId: null}],\r\n\t['CanopyE', { Title: 'Canopy development coefficient E', LocationId: null}],\r\n\t['CanopyF', { Title: 'Canopy development coefficient F', LocationId: null}],\r\n\t['CanopyIntercept', { Title: 'Canopy Kc Intercept', LocationId: null}],\r\n\t['CanopyGMax', { Title: 'Maximum Canopy', LocationId: null}],\r\n\t['CanopyMaxFraction', { Title: 'Fraction of Crop Cycle for Max Canopy', LocationId: null}],\r\n\t['CanopyMin', { Title: 'Minimum Canopy', LocationId: null}],\r\n\t['CompostN', { Title: 'Compost N Credits', LocationId: null}],\r\n\t['CoverCropN', { Title: 'Cover Crop N Credit', LocationId: null}],\r\n\t['CropMineralizationRate', { Title: 'Initial Crop Mineralization Rate', LocationId: null}],\r\n\t['CropSensitivity', { Title: 'Crop Sensitivity', LocationId: null}],\r\n\t['ExcessiveSummerLeafN', { Title: 'Excessive Summer Leaf N', LocationId: null}],\r\n\t['FertilizerUseEfficiency', { Title: 'Fertilizer N Use Efficiency', LocationId: null}],\r\n\t['FertA', { Title: 'N Uptake Coef. A', LocationId: null}],\r\n\t['FertB', { Title: 'N Uptake Coef. B', LocationId: null}],\r\n\t['FertYo', { Title: 'N Uptake Coef. Yo', LocationId: null}],\r\n\t['GermDays', { Title: 'Minimum Rooting Depth Time', LocationId: null}],\r\n\t['HarvestIntervalFraction', { Title: 'Harvest interval', LocationId: null}],\r\n\t['InadequateSummerLeafN', { Title: 'Inadequate Summer Leaf N', LocationId: null}],\r\n\t['Kccov_int', { Title: 'Kccov int', LocationId: null}],\r\n\t['Kccov_quad', { Title: 'Kccov quad', LocationId: null}],\r\n\t['Kccov_slope', { Title: 'Kccov slope', LocationId: null}],\r\n\t['ManureN', { Title: 'Manure N Credits', LocationId: null}],\r\n\t['MaxDays', { Title: 'Max. Rooting Depth Time', LocationId: null}],\r\n\t['MaxNRec', { Title: 'Maximum N Recommendation', LocationId: null}],\r\n\t['MaxRootDepth', { Title: 'Maximum Root Depth', LocationId: null}],\r\n\t['MaxUptake', { Title: 'Crop Total N Uptake', LocationId: null}],\r\n\t['MinRootDepth', { Title: 'Minimum Root Depth', LocationId: null}],\r\n\t['NFertilizerAdjustment', { Title: 'Leaf N Fertilizer Adjustment', LocationId: null}],\r\n\t['NFertilizerFactorA', { Title: 'N Fertilizer Factor A', LocationId: null}],\r\n\t['NFertilizerFactorB', { Title: 'N Fertilizer Factor B', LocationId: null}],\r\n\t['NFertilizerFactorC', { Title: 'N Fertilizer Factor C', LocationId: null}],\r\n\t['NFertilizerFactorD', { Title: 'N Fertilizer Factor D', LocationId: null}],\r\n\t['NUptakeThreshold', { Title: 'N Uptake Threshold', LocationId: null}],\r\n\t['PrevCropK', { Title: 'Previous Crop K', LocationId: null}],\r\n\t['RootDepthThreshold', { Title: 'Root Depth Threshold', LocationId: null}],\r\n\t['SoilNRatioA', { Title: 'Soil N Ratio A', LocationId: null}],\r\n\t['SoilNRatioB', { Title: 'Soil N Ratio B', LocationId: null}],\r\n\t['SoilNRatioC', { Title: 'Soil N Ratio C', LocationId: null}],\r\n\t['SoilNThreshold', { Title: 'Early Soil N Threshold', LocationId: null}],\r\n\t['SoilNThresholdFraction', { Title: 'Mid Soil N Threshold Fraction (fraction of crop cycle)', LocationId: null}],\r\n\t['SoilNThresholdFractionMid', { Title: 'Late Soil N Threshold Fraction (fraction of crop cycle)', LocationId: null}],\r\n\t['SoilNThresholdLate', { Title: 'Late Soil N Threshol', LocationId: null}],\r\n\t['StrawberryFertilizationInterval', { Title: 'Fertilization Interval', LocationId: null}],\r\n\t['TargetTension1', { Title: 'Target Soil Tension 1ft', LocationId: null}],\r\n\t['TargetTension2', { Title: 'Target Soil Tension 2ft', LocationId: null}],\r\n\t['TargetTension3', { Title: 'Target Soil Tension 3ft', LocationId: null}],\r\n\t['TargetTension4', { Title: 'Target Soil Tension 4ft', LocationId: null}],\r\n\t['TreeInterceptCoefficient', { Title: 'Tree Intercept Coefficient', LocationId: null}],\r\n\t['TreeIlr4Coefficient', { Title: 'ilr4', LocationId: null}],\r\n\t['TreeIlr8Coefficient', { Title: 'ilr8', LocationId: null}],\r\n\t['TreeIlrProductCoefficient', { Title: 'ilr4 X ilr8', LocationId: null}],\r\n\t['TreeLeafNCoefficient', { Title: 'Spring Leaf N', LocationId: null}],\r\n\t['UptakeConstant', { Title: 'Crop Max N Uptake constant', LocationId: null}],\r\n\t['UptakeFactor', { Title: 'Crop N Uptake', LocationId: null}],\r\n\t['YieldTarget', { Title: 'Estimated Yield', LocationId: null}],\r\n\t['Type', { Title: 'Sprinkler Type in the Sprinkler Application Rate calculator in the Irrigation Settings is missing',\r\n\t\tLocationId: PSView.IRRIGATION_SETTINGS}],\r\n]);\r\n","<form *ngIf=\"form\" [formGroup]=form>\r\n    <h4 class=\"bk-modal__section-title\">\r\n        {{'Calculate Micro Sprinkler Application Rate' | translate }}\r\n    </h4>\r\n    \r\n    <div class=\"bk-form-group\">\r\n        <div class=\"bk-modal__right-collapse\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'In Row Tree Spacing' | translate}}\r\n            </label>\r\n            <input class=\"bk-modal__field--with-unit bk-input--x-short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"1\"\r\n                required\r\n                name=\"InRowTreeSpacing\"\r\n                formControlName=\"InRowTreeSpacing\"/>\r\n            <div class=\"bk-modal__field-unit\">\r\n                {{'ft' | translate}}\r\n            </div>\r\n        </div>\r\n        <div class=\"bk-modal__right-collapse\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Between Row Tree Spacing' | translate}}\r\n            </label>\r\n            <input class=\"bk-modal__field--with-unit bk-input--x-short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"1\"\r\n                required\r\n                name=\"BetweenRowTreeSpacing\"\r\n                formControlName=\"BetweenRowTreeSpacing\"/>\r\n            <div class=\"bk-modal__field-unit\">\r\n                {{'ft' | translate}}\r\n            </div>\r\n        </div>\r\n        <div class=\"bk-modal__right-collapse\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Micro Sprinklers per Tree' | translate}}\r\n            </label>\r\n            <input class=\"bk-modal__field--with-unit bk-input--x-short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"1\"\r\n                required\r\n                name=\"MicroSprinklersPerTree\"\r\n                formControlName=\"MicroSprinklersPerTree\"/>\r\n        </div>\r\n    </div>\r\n\r\n    <mat-radio-group aria-label=\"\"\r\n        name=\"UseFlowRate\"\r\n        formControlName=\"UseFlowRate\">\r\n\r\n        <mat-radio-button [value]=\"false\"\r\n            name=\"useFlowRate\">\r\n            {{'Choose microsprinkler from a list' | translate}}\r\n        </mat-radio-button>\r\n\r\n        <mat-radio-button [value]=\"true\"\r\n            class=\"mat-radio-button--left-margin\"\r\n            name=\"useFlowRate\">\r\n            {{'Enter flow rate manually' | translate}}\r\n        </mat-radio-button>\r\n        \r\n    </mat-radio-group>\r\n    <ng-container *ngIf=\"f.UseFlowRate.value === true\">\r\n        <label class=\"bk-modal__label\">\r\n            {{'Flow Rate' | translate}}\r\n        </label>\r\n        <input class=\"bk-modal__field--with-unit bk-input--x-short bk-modal__field\"\r\n            type=\"number\"\r\n            step=\"1\"\r\n            required\r\n            name=\"FlowRate\"\r\n            formControlName=\"FlowRate\"/>\r\n        <div class=\"bk-modal__field-unit\">\r\n            {{'gallons/hour' | translate}}\r\n        </div>\r\n    </ng-container>\r\n    <ng-container *ngIf=\"f.UseFlowRate.value === false\">\r\n        <div class=\"bk-col-6\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Manufacturer' | translate }}\r\n            </label>\r\n\r\n            <select class=\"bk-input--full bk-select--medium bk-modal__field\"\r\n                formControlName=\"ManufacturerId\"\r\n                required\r\n                name=\"Manufacturer\">\r\n                <option value=\"\" selected>\r\n                    {{'Select One' | translate }}\r\n                </option>\r\n                <option *ngFor=\"let manufacturer of manufacturers\"\r\n                    [ngValue]=\"manufacturer.Id\">\r\n                    {{manufacturer.Name}}\r\n                </option>\r\n            </select>\r\n        </div>\r\n\r\n        <div class=\"bk-col-6\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Series' | translate }} / {{ 'Model' | translate }}\r\n            </label>\r\n\r\n            <select class=\"bk-input--full bk-select--medium bk-modal__field\"\r\n                formControlName=\"SeriesId\"\r\n                required\r\n                name=\"Series\">\r\n\r\n                <option value=\"\" selected>\r\n                    {{'Select One' | translate }}\r\n                </option>\r\n                <option *ngFor=\"let series of seriesList\"\r\n                    [ngValue]=\"series.Id\">\r\n                    {{series.Name}}\r\n                </option>\r\n            </select>\r\n        </div>\r\n        \r\n        <div class=\"bk-col-6\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Color' | translate }} / {{'Nozzle' | translate}}\r\n            </label>\r\n\r\n            <select class=\"bk-input--full bk-select--medium bk-modal__field\"\r\n                formControlName=\"ColorId\"\r\n                required\r\n                name=\"Color\">\r\n\r\n                <option value=\"\" selected>\r\n                    {{'Select One' | translate }}\r\n                </option>\r\n                <option *ngFor=\"let color of colors\"\r\n                    [ngValue]=\"color.Id\">\r\n                    {{color.Name}}\r\n                </option>\r\n            </select> \r\n        </div>\r\n        \r\n        <div class=\"bk-col-6\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Pressure' | translate }} (psi)\r\n            </label>\r\n\r\n            <select class=\"bk-input--full bk-select--medium bk-modal__field\"\r\n                formControlName=\"PressureName\"\r\n                required\r\n                name=\"PressureName\">\r\n\r\n                <option value=\"\" selected>\r\n                    {{'Select One' | translate }}\r\n                </option>\r\n\r\n                <option *ngFor=\"let pressure of pressures\"\r\n                    [ngValue]=\"pressure.Name\">\r\n                    {{pressure.Name}}\r\n                </option>\r\n            </select>\r\n        </div>\r\n    </ng-container>\r\n\r\n    <div class=\"bk-modal__section-buttons\">\r\n        <button *ngIf=\"f.UseFlowRate.value === false\"\r\n            class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"reset()\">\r\n            {{ 'Reset' | translate }}\r\n        </button>\r\n        <button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"cancel($event)\">\r\n            {{'Cancel' | translate }}\r\n        </button>\r\n        <button class=\"bk-button bk-button--medium\"\r\n            [disabled]='form.invalid'\r\n            (click)=\"calculate($event)\">\r\n            {{'Calculate' | translate }}\r\n        </button>\r\n    </div>\r\n</form>","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nimport { IMicroSprinkler, IMicroSprinklerMeta } from '../../../models/micro-sprinkler/interfaces';\r\nimport { IMicroSprinklerSettingViewModel } from '../interfaces';\r\nimport { MicroSprinklerFields } from '../calculatorSettingsForm';\r\nimport { MicroSprinklerService } from '../../../models/micro-sprinkler/service';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { SharedUpdateService } from '../../shared/dialogs/update.service';\r\n\r\nexport interface IMicroSprinklerFilterGroup {\r\n\tManufacturer: IMicroSprinkler[],\r\n\tModel: IMicroSprinkler[],\r\n\tSeries: IMicroSprinkler[],\r\n\tColor: IMicroSprinkler[],\r\n\tPressure: IMicroSprinkler[]\r\n}\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'micro-sprinkler',\r\n\ttemplateUrl: 'micro-sprinkler.html'\r\n})\r\n\r\nexport class MicroSprinklerComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic form: FormGroup;\r\n\r\n\t/// used to display a more robust dropdown\r\n\tpublic microSprinklersFilteredGroup: IMicroSprinklerFilterGroup = {\r\n\t\tManufacturer: null,\r\n\t\tModel: null,\r\n\t\tSeries: null,\r\n\t\tColor: null,\r\n\t\tPressure: null\r\n\t}\r\n\r\n\tprivate _control: AbstractControl;\r\n\tprivate microSprinklers: IMicroSprinkler[]; // database of all micro sprinklers\r\n\t\t// used to populate dropdowns\r\n\r\n\tpublic manufacturers: IMicroSprinklerMeta[];\r\n\tpublic models: IMicroSprinklerMeta[];\r\n\tpublic seriesList: IMicroSprinklerMeta[];\r\n\tpublic colors: IMicroSprinklerMeta[];\r\n\tpublic pressures: IMicroSprinklerMeta[];\r\n\r\n\tprivate PROPERTIES = {\r\n\t\tMANUFACTURER: 'Manufacturer',\r\n\t\tSERIES: 'Series',\r\n\t\tMODEL: 'Model',\r\n\t\tCOLOR: 'Color',\r\n\t\tPRESSURE: 'Pressure'\r\n\t};\r\n\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tprivate _initialValues: IMicroSprinklerSettingViewModel;\r\n\r\n\tpublic get f(): { [key in MicroSprinklerFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in MicroSprinklerFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: {\r\n\t\t\tform: FormGroup, control: AbstractControl },\r\n\r\n\t\tprivate _dialogRef: MatDialogRef<MicroSprinklerComponent>,\r\n\t\tprivate microSprinklerService: MicroSprinklerService,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.form = this._data.form;\r\n\t\tthis._control = this._data.control;\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._initialValues = this.form.value;\r\n\t\tthis._bindValueChanges();\r\n\r\n\t\tthis.microSprinklerService.list().then(response => {\r\n\t\t\tif (response) {\r\n\t\t\t\tthis.microSprinklers = response;\r\n\t\t\t}\r\n\r\n\t\t\t// setup default values - reduces need to validate\r\n\r\n\t\t\tthis.filterDropdowns();\r\n\t\t\tthis._initializeMicroSprinklerModel();\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(e: MouseEvent): void {\r\n\t\tlet result: number;\r\n\r\n\t\tif (this.f.UseFlowRate.value) {\r\n\t\t\tresult = MicroSprinklerService.calculate(this.f.FlowRate.value,\r\n\t\t\t\tthis.f.InRowTreeSpacing.value, this.f.BetweenRowTreeSpacing.value,\r\n\t\t\t\tthis.f.MicroSprinklersPerTree.value);\r\n\t\t} else {\r\n\t\t\tlet microSprinkler: IMicroSprinkler;\r\n\r\n\t\t\tmicroSprinkler = this._findMicroSprinkler(this.microSprinklers, this.f.ManufacturerId.value,\r\n\t\t\t\tthis.f.SeriesId.value, this.f.ColorId.value, this.f.PressureName.value);\r\n\r\n\t\t\tif (!microSprinkler) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tresult = MicroSprinklerService.calculate(microSprinkler.ApplicationRate,\r\n\t\t\t\tthis.f.InRowTreeSpacing.value, this.f.BetweenRowTreeSpacing.value,\r\n\t\t\t\tthis.f.MicroSprinklersPerTree.value);\r\n\r\n\t\t\tthis.f.MicroSprinklerId.setValue(microSprinkler.Id);\r\n\t\t}\r\n\r\n\t\tresult = Number(result.toFixed(2));\r\n\t\tthis._control.setValue(result);\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tpublic cancel(e: MouseEvent): void {\r\n\t\tthis.form.reset(this._initialValues);\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tpublic filterDropdowns(): void {\r\n\t\tthis.microSprinklersFilteredGroup.Manufacturer = this._filterDropdown(this.PROPERTIES.MANUFACTURER, this.microSprinklers);\r\n\t\tthis.microSprinklersFilteredGroup.Series = this._filterDropdown(this.PROPERTIES.SERIES, this.microSprinklers);\r\n\t\tthis.microSprinklersFilteredGroup.Color = this._filterDropdown(this.PROPERTIES.COLOR, this.microSprinklers);\r\n\t\tthis.microSprinklersFilteredGroup.Pressure = this._filterDropdown(this.PROPERTIES.PRESSURE, this.microSprinklers);\r\n\r\n\t\tthis._createDropdowns(this.microSprinklersFilteredGroup);\r\n\t}\r\n\r\n\tpublic reset(): void {\r\n\t\tthis.f.ManufacturerId.setValue(null);\r\n\t\tthis.f.SeriesId.setValue(null);\r\n\t\tthis.f.ColorId.setValue(null);\r\n\t\tthis.f.PressureName.setValue(null);\r\n\t\tthis.filterDropdowns();\r\n\t}\r\n\r\n\tprivate _closeDialog() {\r\n\t\tthis._sharedUpdateService.cancel();\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\t/**\r\n     * Redraw dropdowns when user chooses a dropdown option\r\n     * @param group\r\n     */\r\n\tprivate _createDropdowns(group: IMicroSprinklerFilterGroup): void {\r\n\t\tlet colorsUnsorted: IMicroSprinklerMeta[];\r\n\r\n\t\tthis.manufacturers = this._createMetaArray(group.Manufacturer, this.PROPERTIES.MANUFACTURER);\r\n\t\tthis.seriesList = this._createMetaArray(group.Series, this.PROPERTIES.SERIES);\r\n\t\tcolorsUnsorted = this._createMetaArray(group.Color, this.PROPERTIES.COLOR);\r\n\r\n\t\tif (colorsUnsorted && colorsUnsorted.length > 0) {\r\n\t\t\tthis.colors = colorsUnsorted.sort((a, b) => {\r\n\t\t\t\treturn (a.Name < b.Name) ? -1 : (a.Name > b.Name) ? 1 : 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.pressures = this._createMetaArray(group.Pressure, this.PROPERTIES.PRESSURE)\r\n\t}\r\n\r\n\t/**\r\n     * Create dropdown array\r\n     * @param microSprinklers\r\n     * @param fieldName\r\n     */\r\n\tprivate _createMetaArray(microSprinklers: IMicroSprinkler[], fieldName: string): IMicroSprinklerMeta[] {\r\n\r\n\t\tlet result: IMicroSprinklerMeta[];\r\n\t\tlet reverseMap: Map<string, string>;\r\n\r\n\t\tresult = new Array();\r\n\t\treverseMap = new Map<string, string>();\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\r\n\t\t\tswitch (fieldName) {\r\n\t\t\t\tcase this.PROPERTIES.MANUFACTURER:\r\n\t\t\t\t\tif (!reverseMap.get(microSprinkler.Manufacturer.Id.toString())) {\r\n\t\t\t\t\t\treverseMap.set(microSprinkler.Manufacturer.Id.toString(), microSprinkler.Manufacturer.Name);\r\n\t\t\t\t\t\tresult.push(microSprinkler.Manufacturer);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase this.PROPERTIES.SERIES:\r\n\t\t\t\t\tif (!reverseMap.get(microSprinkler.Series.Id.toString())) {\r\n\t\t\t\t\t\treverseMap.set(microSprinkler.Series.Id.toString(), microSprinkler.Series.Name);\r\n\t\t\t\t\t\tresult.push(microSprinkler.Series);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase this.PROPERTIES.COLOR:\r\n\t\t\t\t\tif (!reverseMap.get(microSprinkler.Color.Id.toString())) {\r\n\t\t\t\t\t\treverseMap.set(microSprinkler.Color.Id.toString(), microSprinkler.Color.Name);\r\n\t\t\t\t\t\tresult.push(microSprinkler.Color);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase this.PROPERTIES.PRESSURE:\r\n\t\t\t\t\tif (!reverseMap.get((<IMicroSprinklerMeta> microSprinkler.Pressure).Name)) {\r\n\t\t\t\t\t\treverseMap.set(microSprinkler.Pressure.Name, microSprinkler.Pressure.Name);\r\n\t\t\t\t\t\tresult.push(microSprinkler.Pressure);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _filterDropdown(fieldName: string, microSprinklers: IMicroSprinkler[]): IMicroSprinkler[] {\r\n\t\tlet result: IMicroSprinkler[];\r\n\t\tlet manufacturerId: number;\r\n\t\tlet colorId: number;\r\n\t\tlet seriesId: number;\r\n\t\tlet modelId: number;\r\n\t\tlet pressureName: string;\r\n\r\n\t\tresult = microSprinklers;\r\n\r\n\t\tmanufacturerId = this.f.ManufacturerId.value;\r\n\t\tmodelId = this.f.ModelId.value;\r\n\t\tcolorId = this.f.ColorId.value;\r\n\t\tseriesId = this.f.SeriesId.value;\r\n\t\tpressureName = this.f.PressureName.value;\r\n\r\n\t\tswitch (fieldName) {\r\n\t\t\tcase this.PROPERTIES.MANUFACTURER:\r\n\t\t\t\tresult = seriesId ? result.filter(x => x.Series.Id === seriesId) : result;\r\n\t\t\t\tresult = colorId ? result.filter(x => x.Color.Id === colorId) : result;\r\n\t\t\t\tresult = pressureName ? result.filter(x => x.Pressure.Name === pressureName) : result;\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.PROPERTIES.SERIES:\r\n\t\t\t\tresult = manufacturerId ? result.filter(x => x.Manufacturer.Id === manufacturerId) : result;\r\n\t\t\t\tresult = colorId ? result.filter(x => x.Color.Id === colorId) : result;\r\n\t\t\t\tresult = pressureName ? result.filter(x => x.Pressure.Name === pressureName) : result;\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.PROPERTIES.COLOR:\r\n\t\t\t\tresult = manufacturerId ? result.filter(x => x.Manufacturer.Id === manufacturerId) : result;\r\n\t\t\t\tresult = seriesId ? result.filter(x => x.Series.Id === seriesId) : result;\r\n\t\t\t\tresult = pressureName ? result.filter(x => x.Pressure.Name === pressureName) : result;\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.PROPERTIES.PRESSURE:\r\n\t\t\t\tresult = manufacturerId ? result.filter(x => x.Manufacturer.Id === manufacturerId) : result;\r\n\t\t\t\tresult = seriesId ? result.filter(x => x.Series.Id === seriesId) : result;\r\n\t\t\t\tresult = colorId ? result.filter(x => x.Color.Id === colorId) : result;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _findMicroSprinkler(microSprinklers: IMicroSprinkler[], manufacturerId: number,\r\n\t\tseriesId: number, colorId: number,\r\n\t\tpressure: string): IMicroSprinkler {\r\n\r\n\t\tlet result: IMicroSprinkler;\r\n\r\n\t\tif (!microSprinklers || !manufacturerId || !seriesId || !colorId || !pressure) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tresult = microSprinklers.filter(x => x.Pressure.Name === pressure && x.Manufacturer.Id ===\r\n\t\t\tmanufacturerId && x.Series.Id === seriesId && x.Color.Id === colorId)[0];\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _bindValueChanges(): void {\r\n\t\tthis.f.ManufacturerId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.filterDropdowns();\r\n\t\t});\r\n\r\n\t\tthis.f.ModelId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.filterDropdowns();\r\n\t\t});\r\n\r\n\t\tthis.f.ColorId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.filterDropdowns();\r\n\t\t});\r\n\r\n\t\tthis.f.PressureName.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.filterDropdowns();\r\n\t\t});\r\n\r\n\t\tthis.f.SeriesId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.filterDropdowns();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Initialize form fields specific to configuring a specific microsprinkler,\r\n\t */\r\n\tprivate _initializeMicroSprinklerModel(): void {\r\n\t\tlet microSprinkler: IMicroSprinkler;\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\tif (!this.f.MicroSprinklerId.value) { // this is unselected by default\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmicroSprinkler = this.microSprinklers.find(x => x.Id ===\r\n\t\t\tthis.f.MicroSprinklerId.value);\r\n\r\n\t\tif (!microSprinkler) {\r\n\t\t\tthrow new Error('microsprfinkler not found');\r\n\t\t}\r\n\r\n\t\tif (this.manufacturers && this.manufacturers.length > 0 && microSprinkler.Manufacturer) {\r\n\t\t\tthis.f.ManufacturerId.setValue(microSprinkler.Manufacturer.Id);\r\n\t\t\tthis.filterDropdowns();\r\n\t\t}\r\n\r\n\t\tif (this.seriesList && this.seriesList.length > 0 && microSprinkler.Series) {\r\n\t\t\tthis.f.SeriesId.setValue(microSprinkler.Series.Id);\r\n\t\t\tthis.filterDropdowns();\r\n\t\t}\r\n\r\n\t\tif (this.colors && this.colors.length > 0 && microSprinkler.Color) {\r\n\t\t\tthis.f.ColorId.setValue(microSprinkler.Color.Id);\r\n\t\t\tthis.filterDropdowns();\r\n\t\t}\r\n\r\n\t\tif (this.pressures && this.pressures.length > 0 && microSprinkler.Pressure) {\r\n\t\t\tthis.f.PressureName.setValue(microSprinkler.Pressure.Name);\r\n\t\t\tthis.filterDropdowns();\r\n\t\t}\r\n\t}\r\n}\r\n","<style>\r\n    agm-map {\r\n        height: 300px;\r\n    }\r\n</style>\r\n\r\n<ng-container *ngIf=\"form && !f.Id.value && !isDuplicate\">\r\n\t<div *ngIf=\"allowClickOutside\"\r\n\t\t[hidden]=\"loadingData\"\r\n\t\tclass=\"bk-dialog\">\r\n\r\n\t\t<planting-create-dialog\r\n\t\t\t[form]=\"form\"\r\n\t\t\t[vigorOptions]=\"vigorOptions\"\r\n\t\t\t[commodityTypes]=\"commodityTypes\"\r\n\t\t\t[cropTypesBus]=\"cropTypesBus\"\r\n\t\t\t[cropTypeLoadedBus]=\"cropTypeLoadedBus\"\r\n\t\t\t[lotsBus]=\"lotsBus\"\r\n\t\t\t[harvestOnceBus]=\"harvestOnceBus\"\r\n\t\t\t[markersBus]=\"markersBus\"\r\n\t\t\t[soilErrorBus]=\"soilErrorBus\"\r\n\t\t\t[lotCoordinatesBus]=\"lotCoordinatesBus\"\r\n\t\t\t[isSavingBus]=\"isSavingBus\"\r\n\t\t\t[formWells]=\"formWells\"\r\n\t\t\t[plantingSettingsFormBuilder]=\"plantingSettingsFormBuilder\"\r\n\t\t\t(onCancel)=\"onClose()\"\r\n\t\t\t(onSubmit)=\"create()\"\r\n\t\t\t[ageOfCropBus]=\"ageOfCropBus\">\r\n\t\t</planting-create-dialog>\r\n\t</div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"form && !f.Id.value && isDuplicate\">\r\n\t<div *ngIf=\"allowClickOutside\"\r\n\t\t[hidden]=\"loadingData\"\r\n\t\tclass=\"bk-dialog\">\r\n\r\n\t\t<duplicate-planting-dialog\r\n\t\t\t[form]=\"form\"\r\n\t\t\t[cropTypesBus]=\"cropTypesBus\"\r\n\t\t\t[ageOfCropBus]=\"ageOfCropBus\"\r\n\t\t\t[isSavingBus]=\"isSavingBus\"\r\n\t\t\t(onCancel)=\"onClose()\"\r\n\t\t\t(onSubmit)=\"create()\">\r\n\t\t</duplicate-planting-dialog>\r\n\t</div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"allowClickOutside && (form && f.Id.value)\"\r\n\t[hidden]=\"loadingData\"\r\n\tclass=\"bk-dialog modal-lg bk-planting-modal\"\r\n\t[ngClass]=\"{'bk-modal--medium': isModalSizeMedium(), 'bk-modal--xlarge': isModalSizeXLarge(),\r\n\t'bk-modal__planting--datepicker-open': datePickerOpen }\">\r\n\r\n\t<form *ngIf=\"form\" [formGroup]=\"form\">\r\n\t\t<button *ngIf=\"!deletingPlanting\"\r\n\t\t\t(click)=\"close()\"\r\n\t\t\ttype=\"button\"\r\n\t\t\tclass=\"bk-button bk-dialog__close\">\r\n\r\n\t\t\t&times;\r\n\t\t</button>\r\n\r\n\r\n\t\t<h4 mat-dialog-title>\r\n\t\t\t<ng-container *ngIf=\"!inEditMode\">\r\n\t\t\t{{'Add' | translate }} {{'Planting' | translate }}\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container *ngIf=\"inEditMode && !deletingPlanting\">\r\n\t\t\t{{(isDuplicate ? 'Duplicate Planting' : 'Planting Settings') | translate }}\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container *ngIf=\"inEditMode && deletingPlanting\">\r\n\t\t\t{{'Delete' | translate }} {{'Planting' | translate }}?\r\n\t\t\t</ng-container>\r\n\t\t</h4>\r\n\r\n\t\t<div mat-dialog-content\r\n\t\t\tclass=\"bk-modal__body\"\r\n\t\t\t[class.bk-modal__hidden]=\"deletingPlanting\" \r\n\t\t\t[ngClass]=\"{ 'bk-planting-modal__body bk-modal__body--white bk-modal__scroll-area' : !deletingPlanting }\">\r\n\r\n\t\t\t<div class=\"left-content-container bk-planting-modal__left\">\r\n\r\n\t\t\t\t<div class=\"bk-modal__left bk-planting-modal__left--full-width\">\r\n\r\n\t\t\t\t\t<label class=\"bk-modal__label\"\r\n\t\t\t\t\t\tfor=\"plantingName\">\r\n\t\t\t\t\t\t{{'Planting Name' | translate }}\r\n\t\t\t\t\t</label>\r\n\r\n\t\t\t\t\t<input class=\"bk-input--full bk-modal__field\"\r\n\t\t\t\t\t\ttype=\"text\" \r\n\t\t\t\t\t\tid=\"plantingName\"\r\n\t\t\t\t\t\tformControlName=\"Name\">\r\n\r\n\t\t\t\t\t<div *ngIf=\"f.Name.invalid && (f.Name.dirty || f.Name.touched)\"\r\n\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t{{'Planting Name cannot be empty or longer than 128 characters' | translate }}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"bk-modal__commodity-fields\">\r\n\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\" for=\"commodityType\">\r\n\t\t\t\t\t\t\t{{'Commodity' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\r\n\t\t\t\t\t\t<select class=\"bk-input--full bk-select--medium bk-modal__field\"\r\n\t\t\t\t\t\t\tid=\"commodityType\"\r\n\t\t\t\t\t\t\tformControlName=\"CommodityTypeId\">\r\n\r\n\t\t\t\t\t\t\t<option [ngValue]=\"null\" disabled selected>\r\n\t\t\t\t\t\t\t\t{{'Select One' | translate }}\r\n\t\t\t\t\t\t\t</option>\r\n\r\n\t\t\t\t\t\t\t<option *ngFor=\"let commodityType of commodityTypes\"\r\n\t\t\t\t\t\t\t\t[ngValue]=\"commodityType.Id\">\r\n\t\t\t\t\t\t\t\t{{commodityType.Name | translate}}\r\n\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t<div *ngIf=\"f.CommodityTypeId.invalid && (f.CommodityTypeId.dirty || f.CommodityTypeId.touched)\"\r\n\t\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t\t{{'Cannot be empty. Please select an option.' | translate }}\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t<ng-container *ngIf=\"f.CommodityTypeId.value\">\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\" for=\"cropType\">\r\n\t\t\t\t\t\t\t\t{{'Crop Type' | translate }}\r\n\t\t\t\t\t\t\t</label>\r\n\r\n\t\t\t\t\t\t\t<select class=\"bk-input--full bk-select--medium bk-modal__field\"\r\n\t\t\t\t\t\t\t\tid=\"cropType\"\r\n\t\t\t\t\t\t\t\tformControlName=\"CropTypeId\">\r\n\r\n\t\t\t\t\t\t\t\t<option [ngValue]=\"null\" disabled selected>\r\n\t\t\t\t\t\t\t\t\t{{'Select One' | translate }}\r\n\t\t\t\t\t\t\t\t</option>\r\n\r\n\t\t\t\t\t\t\t\t<option *ngFor=\"let cropType of cropTypes\"\r\n\t\t\t\t\t\t\t\t\t[ngValue]=\"cropType.Id\">\r\n\t\t\t\t\t\t\t\t\t{{cropType.Name}}\r\n\t\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t<div *ngIf=\"f.CropTypeId.invalid && (f.CropTypeId.dirty || f.CropTypeId.touched)\"\r\n\t\t\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t\t\t{{'Cannot be empty. Please select an option.' | translate }}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<!--commodity type icon (see wireframe)-->\r\n\t\t\t\t\t<div class=\"bk-commodity-icon\">\r\n\t\t\t\t\t\t<ng-container *ngIf=\"commodityIconUrl\">\r\n\t\t\t\t\t\t\t<!--commodityIconUrl is a link to an image for the current commodity\r\n\t\t\t\t\t\t\twhen you change the dropdown the image should display here -->\r\n\t\t\t\t\t\t\t<img class=\"bk-commodity-icon--image\" width=\"80\" height=\"80\"\r\n\t\t\t\t\t\t\t\tsrc=\"/assets/images/crops/{{commodityIconUrl}}\" />\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<ng-container *ngIf=\"fc.IsPerennial.value && f.CommodityTypeId.value !== COMMODITY_TYPES.CANEBERRY\">\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\" for=\"ageOfCrop\">\r\n\t\t\t\t\t\t\t{{'Age of Crop' | translate}}\r\n\t\t\t\t\t\t</label>\r\n\r\n\t\t\t\t\t\t<select class=\"bk-input--full bk-select--medium bk-modal__field\"\r\n\t\t\t\t\t\t\tname=\"AgeOfCrop\"\r\n\t\t\t\t\t\t\tid=\"ageOfCrop\"\r\n\t\t\t\t\t\t\tformControlName=\"AgeOfCrop\">\r\n\r\n\t\t\t\t\t\t\t<option [ngValue]=\"null\">Select One</option>\r\n\t\t\t\t\t\t\t<option \r\n\t\t\t\t\t\t\t\t*ngFor=\"let ageOfCropOption of ageOfCropOptions\"\r\n\t\t\t\t\t\t\t\t[ngValue]=\"ageOfCropOption.key\">\r\n\t\t\t\t\t\t\t\t{{ageOfCropOption.value}}\r\n\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t<div *ngIf=\"f.AgeOfCrop.invalid && (f.AgeOfCrop.dirty || f.AgeOfCrop.touched)\"\r\n\t\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t\t{{'Age of crop is required' | translate }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t<ng-container *ngIf=\"fc.IsTree.value \">\r\n\r\n\t\t\t\t\t\t<ng-container *ngIf=\"f.Id.value\" >\r\n\t\t\t\t\t\t\t<!-- this field is hidden on CREATE to simplify the creation process -->\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\" for=\"YieldActualDisplayed\">\r\n\t\t\t\t\t\t\t\t{{'Actual' | translate }} {{'Yield' | translate }} (Optional)\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\r\n\t\t\t\t\t\t\t<input class=\"bk-input--short bk-modal__field bk-modal__field--with-unit\"\r\n\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\tformControlName=\"YieldActualDisplayed\"\r\n\t\t\t\t\t\t\t\tid=\"YieldActualDisplayed\"\r\n\t\t\t\t\t\t\t\tname=\"YieldActualDisplayed\"\r\n\t\t\t\t\t\t\t\tminNumber=\"0\"\r\n\t\t\t\t\t\t\t\tstep=\"0.01\"/>\r\n\r\n\t\t\t\t\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.YieldUnitId.value === YIELD_UNIT_IDS.LBS\">\r\n\t\t\t\t\t\t\t\t\t{{'lbs' | translate }}/{{'acre' | translate}}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.YieldUnitId.value === YIELD_UNIT_IDS.TONS\">\r\n\t\t\t\t\t\t\t\t\t{{'tons' | translate }}/{{'acre' | translate}}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\" for=\"vigor\">\r\n\t\t\t\t\t\t\t{{'Vigor' | translate }}\r\n\t\t\t\t\t\t</label>\r\n\r\n\t\t\t\t\t\t<select class=\"bk-input--full bk-select--medium bk-modal__field\"\r\n\t\t\t\t\t\t\tid=\"vigor\"\r\n\t\t\t\t\t\t\tformControlName=\"IsHighVigor\">\r\n\r\n\t\t\t\t\t\t\t<option *ngFor=\"let vigorOption of vigorOptions\"\r\n\t\t\t\t\t\t\t\t[ngValue]=\"vigorOption.key\">\r\n\t\t\t\t\t\t\t\t{{vigorOption.value | translate}}\r\n\t\t\t\t\t\t\t</option>\r\n\t\t\t\t\t\t</select>\r\n\r\n\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t<div class=\"bk-clearfix\">\r\n\t\t\t\t\t\t<mat-form-field *ngIf=\"f.CropTypeId.value\"\r\n\t\t\t\t\t\t\tappearance=\"fill\"\r\n\t\t\t\t\t\t\tclass='bk-mat-date-field bk-mat-date-field--first'>\r\n\t\t\t\t\t\t\t<mat-label>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"!fc.IsPerennial.value\">\r\n\t\t\t\t\t\t\t\t\t{{'Wet Date' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA && fc.IsPerennial.value\">\r\n\t\t\t\t\t\t\t\t\t{{'Leaf Out Date' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t\t\t\t{{'Start Date' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</mat-label>\r\n\t\t\t\t\t\t\t<input matInput [matDatepicker]=\"wetDatePicker\"\r\n\t\t\t\t\t\t\t\tname=\"wetDatePicker\"\r\n\t\t\t\t\t\t\t\tformControlName=\"WetDate\"\r\n\t\t\t\t\t\t\t\trequired>\r\n\t\t\t\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"wetDatePicker\"></mat-datepicker-toggle>\r\n\t\t\t\t\t\t\t<mat-datepicker #wetDatePicker></mat-datepicker>\r\n\r\n\t\t\t\t\t\t\t<mat-hint align=\"start\">\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t\t\t\t{{ 'Alfalfa Start Date Help Text' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA && fc.IsPerennial.value\">\r\n\t\t\t\t\t\t\t\t\t{{ 'Almond Leaf Out Date Help Text' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</mat-hint>\r\n\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"f.WetDate.invalid && (f.WetDate.dirty\r\n\t\t\t\t\t\t\t\t|| f.WetDate.touched)\">\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.wetDateNotSameYearAsHarvestDate\">\r\n\t\t\t\t\t\t\t\t\t{{ \"For tree crops, planting start and end dates must be in the same year\" | translate }}.\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.cutEventsBeforeWetDate\">\r\n\t\t\t\t\t\t\t\t\t{{'Planting Wet Date Cut Date Error Text' | translate }}.\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.endDateOnOrAfterHarvestDate\">\r\n\t\t\t\t\t\t\t\t\t{{'Planting Wet Date Error Text' | translate }}.\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.invalidDate\">\r\n\t\t\t\t\t\t\t\t\t{{'This date is in an invalid format' | translate}}.\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.WetDate.errors.required\">\r\n\t\t\t\t\t\t\t\t\t{{'This field is required' | translate }}.\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t<mat-form-field *ngIf=\"f.CropTypeId.value\"\r\n\t\t\t\t\t\t\tappearance=\"fill\"\r\n\t\t\t\t\t\t\tclass='bk-mat-date-field'>\r\n\t\t\t\t\t\t\t<mat-label>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"fc.IsPerennial.value && f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t\t\t\t{{'End of Season Date' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"harvestOnce && !fc.IsPerennial.value\">\r\n\t\t\t\t\t\t\t\t\t{{'Harvest Date' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"!harvestOnce && !fc.IsPerennial.value\">\r\n\t\t\t\t\t\t\t\t\t{{'End of Crop Date' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t\t\t\t{{'End Date' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</mat-label>\r\n\t\t\t\t\t\t\t<input matInput [matDatepicker]=\"harvestDatePicker\"\r\n\t\t\t\t\t\t\t\tformControlName=\"HarvestDate\"\r\n\t\t\t\t\t\t\t\trequired>\r\n\t\t\t\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"harvestDatePicker\"></mat-datepicker-toggle>\r\n\t\t\t\t\t\t\t<mat-datepicker #harvestDatePicker></mat-datepicker>\r\n\t\t\t\t\t\t\t<mat-hint align=\"start\">\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"fc.IsPerennial.value && f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t\t\t\t{{ 'End of Season Date Help Text' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n\t\t\t\t\t\t\t\t\t{{ 'Alfalfa End Date Help Text' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</mat-hint>\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"f.HarvestDate.invalid && (f.HarvestDate.dirty\r\n\t\t\t\t\t\t\t\t|| f.HarvestDate.touched)\">\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"f.HarvestDate.errors.required\">\r\n\t\t\t\t\t\t\t\t\t{{ 'This field is required' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"!f.HarvestDate.errors.required && f.HarvestDate.errors.mustBeAfterWetDate\">\r\n\t\t\t\t\t\t\t\t\t{{ 'Planting end date must be before the start date' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"!f.HarvestDate.errors.require && wetDateNotSameYearAsHarvestDate\">\r\n\t\t\t\t\t\t\t\t\t{{ 'Planting start and end dates must be in the same year' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<label class=\"bk-modal__label\" for=\"lotId\">\r\n\t\t\t\t\t\t{{'Lot' | translate }}\r\n\t\t\t\t\t</label>\r\n\r\n\t\t\t\t\t<select class=\"bk-input--full bk-select--medium bk-modal__field\"\r\n\t\t\t\t\tid=\"lotId\"\r\n\t\t\t\t\t\tformControlName=\"LotId\">\r\n\r\n\t\t\t\t\t\t<option [ngValue]=\"null\" disabled selected>\r\n\t\t\t\t\t\t\t{{'Select One' | translate }}\r\n\t\t\t\t\t\t</option>\r\n\r\n\t\t\t\t\t\t<option *ngFor=\"let lot of lots\"\r\n\t\t\t\t\t\t\t[ngValue]=\"lot.Value\">\r\n\t\t\t\t\t\t\t{{lot.Text}}\r\n\t\t\t\t\t\t</option>\r\n\t\t\t\t\t</select>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<div *ngIf=\"f.LotId.invalid && (f.LotId.dirty || f.LotId.touched)\"\r\n\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t{{'Cannot be empty. Please select an option.' | translate }}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<label class=\"bk-modal__label\" for=\"acres\">\r\n\t\t\t\t\t\t{{'Acres' | translate }}\r\n\t\t\t\t\t</label>\r\n\r\n\t\t\t\t\t<input class=\"bk-input--full bk-modal__field\"\r\n\t\t\t\t\t\tid=\"acres\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tname=\"Acres\"\r\n\t\t\t\t\t\tformControlName=\"Acres\"\r\n\t\t\t\t\t\tstep=\"0.01\"/>\r\n\r\n\t\t\t\t\t<div *ngIf=\"f.Acres.invalid && (f.Acres.dirty || f.Acres.touched)\"\r\n\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t{{'Not a valid number' | translate }}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<label class=\"bk-modal__label\" for=\"coordinates\">\r\n\t\t\t\t\t\t{{'Coordinates' | translate }}\r\n\t\t\t\t\t</label>\r\n\r\n\t\t\t\t\t<input class=\"bk-modal__field-planting-coordinates bk-modal__field\"\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tid=\"coordinates\"\r\n\t\t\t\t\t\tformControlName=\"Coordinates\"/>\r\n\r\n\t\t\t\t\t<button [class.bk-button-icon--selected]=\"rightContent == 'MapPicker'\"\r\n\t\t\t\t\t\tclass=\"bk-button bk-button--green-text bk-modal__field-icon--map bk-modal__field-icon--right\"\r\n\t\t\t\t\t\t(click)=\"setRightContent('MapPicker')\">\r\n\t\t\t\t\t\t<i class=\"fa fa-map-marker\"></i>\r\n\t\t\t\t\t</button>\r\n\r\n\t\t\t\t\t<div *ngIf=\"f.Coordinates.invalid && (f.Coordinates.dirty || f.Coordinates.touched)\"\r\n\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t{{'Coordinates are invalid' | translate }}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div *ngIf=\"plantingSettingsFormBuilder.coordinateExplanation  || soilError\"\r\n\t\t\t\t\t\tclass=\"bk-clearfix bk-location-warning\">\r\n\t\t\t\t\t\t<i class=\"fa fa-warning\"></i>\r\n\t\t\t\t\t\t{{ plantingSettingsFormBuilder.coordinateExplanation }}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t<span *ngIf=\"soilError === soilErrorEnum.ParseError || \r\n\t\t\t\t\t\t\tsoilError === soilErrorEnum.OutOfRange\">\r\n\t\t\t\t\t\t\t{{'There is no soil data available for this location. Please try different coordinates' | translate }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div *ngIf=\"f.CommodityTypeId.value\" \r\n\t\t\t\t\t\tclass=\"bk-planting-modal__setting-row bk-planting-modal__setting-row--full\"\r\n\t\t\t\t\t\t(click)=\"setRightContent('IrrigationSettings')\">\r\n\t\t\t\t\t\t{{'Irrigation Settings' | translate }}\r\n\t\t\t\t\t\t<button [class.bk-button-icon--selected]=\"rightContent == 'IrrigationSettings'\"\r\n\t\t\t\t\t\t\tclass=\"bk-button bk-planting-modal__setting-button\">\r\n\t\t\t\t\t\t\t<i class=\"fa fa-ellipsis-v\"></i>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"f.Coordinates.value\" \r\n\t\t\t\t\t\tclass=\"bk-planting-modal__setting-row bk-planting-modal__setting-row--full\"\r\n\t\t\t\t\t\t(click)=\"setRightContent('SoilSettings')\">\r\n\t\t\t\t\t\t{{'Soil Settings' | translate }}\r\n\t\t\t\t\t\t<button [class.bk-button-icon--selected]=\"rightContent == 'SoilSettings'\"\r\n\t\t\t\t\t\t\tclass=\"bk-button bk-planting-modal__setting-button\">\r\n\t\t\t\t\t\t\t<i class=\"fa fa-ellipsis-v\"></i>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"f.CommodityTypeId.value\" \r\n\t\t\t\t\t\tclass=\"bk-planting-modal__setting-row bk-planting-modal__setting-row--full\"\r\n\t\t\t\t\t\t(click)=\"setRightContent('CropSettings')\">\r\n\t\t\t\t\t\t{{'Crop Settings' | translate }}\r\n\t\t\t\t\t\t<button [class.bk-button-icon--selected]=\"rightContent == 'CropSettings'\"\r\n\t\t\t\t\t\tclass=\"bk-button bk-planting-modal__setting-button\">\r\n\t\t\t\t\t\t\t<i class=\"fa fa-ellipsis-v\"></i>\r\n\t\t\t\t\t\t</button>\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\t<div class=\"right-content-container bk-modal__right bk-planting-modal__right\"\r\n\t\t\t\t[class.bk-planting-modal__right--hidden]=\"!rightContent\">\r\n\r\n\t\t\t\t<div class=\"bk-modal__map-container--planting bk-modal__triangle--left\"\r\n\t\t\t\t\t[class.bk-modal__map--show]=\"rightContent == 'MapPicker'\">\r\n\r\n\t\t\t\t\t<div class=\"bk-modal__right-instructions\">\r\n\t\t\t\t\t\t{{'Planting map instructions' | translate }}\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"bk-modal__right-instructions\">\r\n\t\t\t\t\t\t<div class=\"bk-marker bk-marker--planting\">\r\n\t\t\t\t\t\t\t<svg-planting-icon></svg-planting-icon>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{{'Planting' | translate }}\r\n\t\t\t\t\t\t<div class=\"bk-marker bk-marker--ranch\">\r\n                            <svg-ranch-marker></svg-ranch-marker>\r\n                        </div>\r\n\t\t\t\t\t\t{{'Ranch Location' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"bk-modal__map-container map-container\">\r\n\t\t\t\t\t\t<agm-map #map\r\n\t\t\t\t\t\t\t(mapClick)=\"clickMap($event)\"\r\n\t\t\t\t\t\t\t[zoom]=\"10\"\r\n\t\t\t\t\t\t\t[mapTypeId]=\"'hybrid'\"\r\n\t\t\t\t\t\t\t[fullscreenControl]=\"true\">\r\n\r\n\t\t\t\t\t\t\t<agm-marker *ngFor=\"let marker of markers\"\r\n\t\t\t\t\t\t\t\t[iconUrl]=\"'../assets/images/icons/map_marker-planting.png'\"\r\n\t\t\t\t\t\t\t\t[latitude]=\"marker.lat\"\r\n\t\t\t\t\t\t\t\t[longitude]=\"marker.lng\">\r\n\t\t\t\t\t\t\t</agm-marker>\r\n\r\n\t\t\t\t\t\t\t<agm-marker *ngFor=\"let marker of ranchCenter\"\r\n\t\t\t\t\t\t\t\t[iconUrl]=\"'../assets/images/icons/map_marker-ranch-v2.png'\"\r\n\t\t\t\t\t\t\t\t[latitude]=\"marker.lat\"\r\n\t\t\t\t\t\t\t\t[longitude]=\"marker.lng\">\r\n\t\t\t\t\t\t\t</agm-marker>\r\n\r\n\t\t\t\t\t\t\t<map-control #mapControl></map-control>\r\n\t\t\t\t\t\t</agm-map>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div *ngIf=\"f.CommodityTypeId.value\" \r\n\t\t\t\t\tclass=\"bk-planting-modal__setting-row bk-planting-modal__setting-row--short\"\r\n\t\t\t\t\t(click)=\"setRightContent('IrrigationSettings')\">\r\n\r\n\t\t\t\t\t{{'Irrigation Settings' | translate }}\r\n\t\t\t\t\t<button [class.bk-button-icon--selected]=\"rightContent == 'IrrigationSettings'\"\r\n\t\t\t\t\t\tclass=\"bk-button bk-planting-modal__setting-button bk-planting-modal__setting-button--short\">\r\n\t\t\t\t\t\t<i class=\"fa fa-ellipsis-v\"></i>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- Irrigation Settings -->\r\n\r\n\t\t\t\t<div *ngIf=\"rightContent == 'IrrigationSettings'\"\r\n\t\t\t\t\tclass=\"bk-modal__triangle--left bk-modal__triangle--planting-irrigation\">\r\n\r\n\t\t\t\t\t<h4 class=\"bk-modal__section-title\">\r\n\t\t\t\t\t\t{{'Irrigation Settings' | translate }}\r\n\t\t\t\t\t</h4>\r\n\r\n\t\t\t\t\t<ng-container *ngIf=\"fc.IsNDependent.value\">\r\n\t\t\t\t\t\t<h5>\r\n\t\t\t\t\t\t\t{{'Blending of Water from Various Water Sources' | translate }}\r\n\t\t\t\t\t\t</h5>\r\n\t\t\t\t\t\t<planting-wells *ngIf=\"fc.IsNDependent.value\"\r\n\t\t\t\t\t\t\t[form]=\"formWells\">\r\n\t\t\t\t\t\t</planting-wells>\r\n\t\r\n\t\t\t\t\t\t<hr/>\r\n\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t<div *ngIf=\"fc.IsMacroTunnelEnabled.value\" \r\n\t\t\t\t\t\tclass=\"bk-form-group\">\r\n\t\t\t\t\t\t<br><br>\r\n\t\t\t\t\t\t<div class=\"bk-modal__section-subtitle\">\r\n\t\t\t\t\t\t\t{{'Macro Tunnel' | translate }}\r\n\t\t\t\t\t\t\t<info-icon [title]=\"'Macro Tunnel Help Text'\"></info-icon>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<macro-tunnel\r\n\t\t\t\t\t\t\t[form]=\"form.get('MacroTunnelSettings')\"\r\n\t\t\t\t\t\t\t[wetDateControl]=\"f.WetDate\"\r\n\t\t\t\t\t\t\t[harvestDateControl]=\"f.HarvestDate\">\r\n\t\t\t\t\t\t</macro-tunnel>\r\n\t\t\t\t\t\t<hr/>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<h5 class=\"bk-clearfix\">\r\n\t\t\t\t\t\t{{ 'Irrigation Methods' | translate }}\r\n\t\t\t\t\t</h5>\r\n\t\t\t\t\t<irrigation-methods\r\n\t\t\t\t\t\t[parentForm]=\"form\"\r\n\t\t\t\t\t\t(inEditMode)=\"updateIrrigationMethodUIState($event)\">\r\n\t\t\t\t\t</irrigation-methods>\r\n\t\t\t\t\t<hr/>\r\n\r\n\t\t\t\t\t<ng-container *ngIf=\"fc.IsStressable.value\">\r\n\t\t\t\t\t\t<h5 class=\"bk-clearfix\">\r\n\t\t\t\t\t\t\t{{'Stress Factors' | translate }} <!-- <info-icon [title]=\"'Water Stress Help Text'\"></info-icon> -->\r\n\t\t\t\t\t\t</h5>\r\n\t\t\t\t\r\n\t\t\t\t\t\t<mat-radio-group *ngIf=\"fc.IsTree.value\"\r\n\t\t\t\t\t\t\taria-label=\"\"\r\n\t\t\t\t\t\t\tname=\"IsStressEnabled\"\r\n\t\t\t\t\t\t\t[formControl]=\"fc.IsStressEnabled\">\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t<mat-radio-button [value]=\"true\"\r\n\t\t\t\t\t\t\t\tname=\"IsStressEnabled\">\r\n\t\t\t\t\t\t\t\t{{'Enable Stress' | translate}}\r\n\t\t\t\t\t\t\t</mat-radio-button>\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t<mat-radio-button [value]=\"false\"\r\n\t\t\t\t\t\t\t\tclass=\"mat-radio-button--left-margin\"\r\n\t\t\t\t\t\t\t\tname=\"IsStressEnabled\">\r\n\t\t\t\t\t\t\t\t{{'Disable stress' | translate}}\r\n\t\t\t\t\t\t\t</mat-radio-button>\r\n\t\t\t\t\t\t</mat-radio-group>\r\n\t\t\t\t\r\n\t\t\t\t\t\t<ng-container *ngIf=\"(fc.IsTree.value && fc.IsStressEnabled.value) ||\r\n\t\t\t\t\t\t\t!fc.IsTree.value\">\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t<irrigation-deficit\r\n\t\t\t\t\t\t\t\t[parentForm]=\"form\">\r\n\t\t\t\t\t\t\t</irrigation-deficit>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t<hr class=\"cm-thicker-bottom\"/>\r\n\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t<h5>\r\n\t\t\t\t\t\t{{ 'Other Irrigation Settings' | translate }}\r\n\t\t\t\t\t</h5>\r\n\r\n\t\t\t\t\t<div class=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\" for=\"GerminationSprinklerPct\">\r\n\t\t\t\t\t\t\t{{'Germination Sprinkler Distribution Uniformity' | translate }} \r\n\t\t\t\t\t\t\t<info-icon [title]=\"'Germination Sprinkler Distribution Uniformity Help Text'\"></info-icon>\r\n\t\t\t\t\t\t</label>\r\n\r\n\t\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\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tstep=\"0.01\"\r\n\t\t\t\t\t\t\tformControlName=\"GerminationSprinklerPct\"\r\n\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\tid=\"GerminationSprinklerPct\"\r\n\t\t\t\t\t\t\tname=\"GerminationSprinklerPct\"/>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t<div class=\"bk-modal__field-unit\">%</div>\r\n\t\t\t\t\t\t<div *ngIf=\"f.GerminationSprinklerPct.invalid && (f.GerminationSprinklerPct.dirty || f.GerminationSprinklerPct.touched)\"\r\n\t\t\t\t\t\t\tclass=\"bk-invalid-field\">\r\n\t\t\t\t\t\t\t{{'Field is required' | translate }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"bk-modal__right-two-col\">\r\n\t\t\t\t\t\t<label class=\"bk-modal__label\" for=\"LeechingFactorPct\">\r\n\t\t\t\t\t\t\t{{'Leaching Requirement' | translate }} \r\n\t\t\t\t\t\t\t<info-icon [title]=\"'Leaching Requirement Help Text'\"></info-icon>\r\n\t\t\t\t\t\t</label>\r\n\t\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\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tstep=\"0.01\"\r\n\t\t\t\t\t\t\tformControlName=\"LeechingFactorPct\"\r\n\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\tid=\"LeechingFactorPct\"\r\n\t\t\t\t\t\t\tname=\"LeechingFactorPct\"/>\r\n\t\t\t\t\t\t<div class=\"bk-modal__field-unit\">%</div>\r\n\t\t\t\t\t\t<div *ngIf=\"f.LeechingFactorPct.invalid && (f.LeechingFactorPct.dirty || f.LeechingFactorPct.touched)\"\r\n\t\t\t\t\t\t\tclass=\"bk-invalid-field\">\r\n\t\t\t\t\t\t\t{{'Field is required' | translate }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<ng-container *ngIf=\"fc.IsTree.value\">\r\n\t\t\t\t\t\t<div class=\"bk-modal__section-subtitle bk-clearfix\">\r\n\t\t\t\t\t\t\t{{'Wet Area' | translate }} \r\n\t\t\t\t\t\t\t<info-icon [title]=\"'Default Wet Area Help Text'\"></info-icon>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t<div class=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\" for=\"WetAreaMicroSprinkler\">\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\r\n\t\t\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\t\t\ttype=\"number\" step=\"0.01\"\r\n\t\t\t\t\t\t\t\t[formControl]=\"fc.WetAreaMicroSprinkler\"\r\n\t\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t\tid=\"WetAreaMicroSprinkler\"\r\n\t\t\t\t\t\t\t\tname=\"WetAreaMicroSprinkler\"/>\r\n\r\n\t\t\t\t\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t\t\t\t\t%\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div *ngIf=\"fc.WetAreaMicroSprinkler.invalid && (fc.WetAreaMicroSprinkler.dirty || fc.WetAreaMicroSprinkler.touched)\"\r\n\t\t\t\t\t\t\t\tclass=\"bk-invalid-field\">\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"fc.WetAreaMicroSprinkler.errors.mustBeAnInteger\">\r\n\t\t\t\t\t\t\t\t\t{{'Please enter an integer instead of a decimal' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"!fc.WetAreaMicroSprinkler.errors.mustBeAnInteger\">\r\n\t\t\t\t\t\t\t\t\t{{'Please enter a number between 0 and 100' | translate }}\r\n\t\t\t\t\t\t\t\t</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<div class=\"bk-modal__right-two-col\">\r\n\r\n\t\t\t\t\t\t\t<label class=\"bk-modal__label\" for=\"WetAreaDrip\">\r\n\t\t\t\t\t\t\t\t{{'Drip' | translate }}\r\n\t\t\t\t\t\t\t</label>\r\n\r\n\t\t\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\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[formControl]=\"fc.WetAreaDrip\"\r\n\t\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t\tid=\"WetAreaDrip\"\r\n\t\t\t\t\t\t\t\tname=\"WetAreaDrip\"/>\r\n\r\n\t\t\t\t\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t\t\t\t\t%\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div *ngIf=\"fc.WetAreaDrip.invalid && (fc.WetAreaDrip.dirty || fc.WetAreaDrip.touched)\"\r\n\t\t\t\t\t\t\t\tclass=\"bk-invalid-field\">\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"fc.WetAreaDrip.errors.mustBeAnInteger\">\r\n\t\t\t\t\t\t\t\t\t{{'Please enter an integer instead of a decimal' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"!fc.WetAreaDrip.errors.mustBeAnInteger\">\r\n\t\t\t\t\t\t\t\t\t{{'Please enter a number between 0 and 100' | translate }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div *ngIf=\"f.Coordinates.value\" \r\n\t\t\t\t\tclass=\"bk-planting-modal__setting-row bk-planting-modal__setting-row--short\"\r\n\t\t\t\t\t(click)=\"setRightContent('SoilSettings')\">\r\n\r\n\t\t\t\t\t{{'Soil Settings' | translate }}\r\n\t\t\t\t\t<button [class.bk-button-icon--selected]=\"rightContent == 'SoilSettings'\"\r\n\t\t\t\t\t\tclass=\"bk-button bk-planting-modal__setting-button bk-planting-modal__setting-button--short\">\r\n\t\t\t\t\t\t<i class=\"fa fa-ellipsis-v\"></i>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"bk-modal__triangle--left bk-modal__triangle--planting-soil\" [hidden]=\"rightContent != 'SoilSettings'\">\r\n\t\t\t\t\t<soil-properties-table *ngIf=\"soilPropertiesFormBuilder.form\"\r\n\t\t\t\t\t\t[soilPropertiesFormBuilder]=\"soilPropertiesFormBuilder\"\r\n\t\t\t\t\t\t[soilWebProperties]=\"soilPropertiesFormBuilder.soilWebProperties\"\r\n\t\t\t\t\t\t[maxRootDepth]=\"getMaxRootDepth()\">\r\n\t\t\t\t\t</soil-properties-table>\r\n\r\n\t\t\t\t\t<div class=\"bk-modal__checkbox--obstruction-depth bk-clearfix\">\r\n\r\n\t\t\t\t\t\t<input type=\"checkbox\"\r\n\t\t\t\t\t\t\tid=\"ShowObstructionDepth\"\r\n\t\t\t\t\t\t\tformControlName=\"ShowObstructionDepth\"/>\r\n\r\n\t\t\t\t\t\t<div class=\"bk-modal__checkbox--label\">\r\n\t\t\t\t\t\t\t<div>{{ 'Root Depth Obstruction' | translate }} <info-icon [title]=\"'Root Depth Obstruction Help Text'\"></info-icon></div>\r\n\t\t\t\t\t\t\t<div class=\"bk-modal__checkbox--sub-label\">({{ 'Root Depth Obstruction Details' | translate }})</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div *ngIf=\"f.ShowObstructionDepth.value\"\r\n\t\t\t\t\t\tclass=\"bk-obstruction-depth-form\">\r\n\t\t\t\t\t\t<input class=\"bk-input--short bk-modal__field bk-modal__field--left-col bk-modal-obstruction-depth\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tstep=\"0.1\"\r\n\t\t\t\t\t\t\tformControlName=\"ObstructionDepth\"\r\n\t\t\t\t\t\t\tname=\"obstructionDepth\">\r\n\t\t\t\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t\t\t\t{{'ft' | translate }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div *ngIf=\"f.ObstructionDepth.invalid && (f.ObstructionDepth.dirty || f.ObstructionDepth.touched)\"\r\n\t\t\t\t\t\t\tclass=\"bk-invalid-text\">\r\n\t\t\t\t\t\t\t{{'Root Depth Obstruction must greater than 0 and less than 4' | translate }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div *ngIf=\"f.CommodityTypeId.value\" \r\n\t\t\t\t\tclass=\"bk-planting-modal__setting-row bk-planting-modal__setting-row--short\"\r\n\t\t\t\t\t(click)=\"setRightContent('CropSettings')\">\r\n\t\t\t\t\t{{'Crop Settings' | translate }}\r\n\t\t\t\t\t<button [class.bk-button-icon--selected]=\"rightContent == 'CropSettings'\"\r\n\t\t\t\t\t\tclass=\"bk-button bk-planting-modal__setting-button\r\n\t\t\t\t\t\tbk-planting-modal__setting-button--short\">\r\n\t\t\t\t\t\t<i class=\"fa fa-ellipsis-v\"></i>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"bk-modal__triangle--left bk-modal__triangle--planting-crop\"\r\n\t\t\t\t\t*ngIf=\"rightContent == 'CropSettings'\">\r\n\t\t\t\t\t\r\n\t\t\t\t\t<crop-settings\r\n\t\t\t\t\t\t[parentForm]=\"form\"\r\n\t\t\t\t\t\t[commodityTypes]=\"commodityTypes\"\r\n\t\t\t\t\t\t[previousCropTypes]=\"previousCropTypes\"\r\n\t\t\t\t\t\t[calculatorSettings]=\"form.get('CalculatorSettings')\"\r\n\t\t\t\t\t\t[form]=\"form.get('CropSettings')\"\r\n\t\t\t\t\t\t[isAdmin]=\"userService.isAdmin\">\r\n\t\t\t\t\t</crop-settings>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div mat-dialog-content class=\"bk-modal__body bk-planting-modal__body bk-modal__body--white bk-modal__scroll-area\" *ngIf=\"deletingPlanting\">\r\n\t\t\t<div class=\"bk-planting-modal__content--responsive\">\r\n\t\t\t\t{{'Delete Planting Text Line 1' | translate }} <strong>{{f.Name.value}}</strong>?\r\n\t\t\t\t{{'Delete Planting Text Line 2' | translate }}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div mat-dialog-actions align=\"end\"\r\n\t\t\t*ngIf=\"!deletingPlanting\">\r\n\t\t\t<button class=\"bk-button__delete\"\r\n\t\t\t\t*ngIf=\"inEditMode && !isDuplicate\" \r\n\t\t\t\t(click)=\"showDelete($event)\">\r\n\t\t\t\t{{'Delete' | translate }}\r\n\t\t\t</button>\r\n\t\t\t<button mat-button class=\"bk-button bk-button--medium bk-button--text-only\r\n\t\t\t\tbk-dialog__button--secondary\"\r\n\t\t\t\t(click)=\"onClose()\">\r\n\t\t\t\t{{'Cancel' | translate }}\r\n\t\t\t</button>\r\n\t\t\t<button mat-button class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n\t\t\t\t*ngIf=\"!inEditMode || isDuplicate\"\r\n\t\t\t\t(click)=\"create()\">\r\n\t\t\t\t{{(isSaving ? 'Prefetching ET': 'Add') | translate }}\r\n\t\t\t\t<img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n\t\t\t</button>\r\n\t\t\t<button mat-button class=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n\t\t\t\t*ngIf=\"inEditMode && !isDuplicate\"\r\n\t\t\t\t[disabled]=\"isIrrigationMethodUIInEditMode\"\r\n\t\t\t\t(click)=\"update()\">\r\n\t\t\t\t{{ (isSaving ? 'Saving' : 'Save') | translate }}\r\n\t\t\t\t<img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\r\n\t\t<div mat-dialog-actions\r\n\t\t\talign=\"end\"\r\n\t\t\t*ngIf=\"deletingPlanting\">\r\n\t\t\t<button mat-button\r\n\t\t\t\tclass=\"bk-button bk-button--medium bk-button--text-only bk-dialog__button--secondary\"\r\n\t\t\t\t(click)=\"hideDelete($event)\">\r\n\t\t\t\t{{'Cancel' | translate }}\r\n\t\t\t</button>\r\n\t\t\t<button mat-button\r\n\t\t\t\tclass=\"bk-button bk-button--medium bk-dialog__button--primary\"\r\n\t\t\t\t*ngIf=\"inEditMode && permissions && permissions.UserCanEditPlanting\"\r\n\t\t\t\t(click)=\"delete()\">\r\n\r\n\t\t\t\t{{ 'Delete' | translate }}\r\n\t\t\t</button>\r\n\t\t\t<img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n\t\t</div>\r\n\t</form>\r\n</div>\r\n\r\n<div *ngIf=\"allowClickOutside && loadingData\" class=\"modal-dialog modal-lg bk-modal bk-planting-modal bk-modal--medium bk-planting-modal__loader\">\r\n\t<modal-loader [title]=\"'Loading Planting Data'\" (close)=\"confirmClose()\"></modal-loader>\r\n</div>\r\n","import { Component, ViewChild, OnInit, Inject, OnDestroy } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport * as jQuery from 'jquery';\r\n\r\nimport * as _ from 'underscore';\r\nimport { AgmMap } from '@agm/core';\r\nimport { MapControlDirective } from '../../directives/map-control.directive';\r\n\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { PlantingService } from './service';\r\nimport { SoilTypeService } from '../../models/soil-type/service';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport { RanchService } from '../ranch-settings/service';\r\n\r\nimport { Modal } from '../../classes/modal';\r\nimport { AbstractModalComponent } from '../shared/abstract-modal/main';\r\nimport { UserService } from '../../models/user/service';\r\nimport { CommodityService } from '../../models/commodity-type/service';\r\nimport { CropTypeService } from '../../models/crop-type/service';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { ICropType, ICropTypeViewModel } from '../../models/crop-type/interfaces';\r\n\r\nimport {\r\n\tIPlanting, ISelectedListItem, IPlantingValidationResult,\r\n\tILotPlantingWithEventsJSON, IPreviousCropViewModel, ISprinklerApplicationRateViewModel,\r\n} from './interfaces';\r\nimport { eCommodityTypes, eNotificationTypes, eSoilWebCrawErrors } from '../../interfaces/constants';\r\nimport { ISelectOptions, ISelectOptionBoolean } from '../../interfaces/abstract'\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { CropSettingsComponent } from './sections/crop-settings';\r\nimport { ICommodityType, YieldUnitId } from '../../models/commodity-type/interfaces';\r\nimport { PlantingAdvancedEdit } from './plantingAdvancedEdit';\r\nimport { IRanchPermissions, IRanchLotJSONModel } from '../ranch-settings/interfaces';\r\nimport { CMError, httpStatusCodes } from '../../interfaces/interfaces';\r\nimport { CaspDialogComponent } from '../casp-dialog/casp-dialog';\r\nimport { CaspService } from '../casp-dialog/casp.service';\r\nimport { CookieService } from '../../services/cookie.service';\r\nimport { CASPNotNowCookieName, PREVIOUS_CROP_NO_RESIDUE_ID } from '../../services/constants';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ICoordinates, IAgmMapClick } from '../shared/interfaces';\r\nimport { ISoilLayer } from '../../models/soil-type/interfaces';\r\nimport { Coordinates } from '../../classes/Coordinates';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { PlantingSettingsFormBuilder } from './plantingSettingsFormBuilder';\r\nimport { PlantingSettingFields } from './plantingSettingFields';\r\nimport { CropTypeFormFields } from '../crop-types/cropTypeFormBuilder';\r\nimport { IPlantingSettingsForm } from './planting-settings-form.interfaces';\r\nimport { PlantingValidationNotifier } from './plantingValidationNotifier';\r\nimport { NCalculatorFields } from './sections/nitrogen-calculator/n-calculator';\r\nimport { SharedKeepDiscardDialog } from '../shared/dialogs/keep-discard-dialog';\r\nimport { SharedUpdateService } from '../shared/dialogs/update.service';\r\nimport { PlantingWellsDataFetcher } from './sections/plantingWellsDataFetcher';\r\nimport { PlantingWellService } from '../../models/planting-well/service';\r\nimport { CustomSoilPropertiesFormBuilder } from '../soil-properties-table/customSoilPropertiesFormBuilder';\r\nimport { TonsConverter } from './tonsConverter';\r\nimport { TranslateService } from '../localization/service';\r\nimport { DIALOG_HIDE_CLASS } from '../shared/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-dialog',\r\n\ttemplateUrl: 'planting-dialog.html',\r\n\tstyleUrls: [ 'planting-dialog.scss']\r\n})\r\n\r\nexport class PlantingDialog extends AbstractModalComponent implements OnInit, OnDestroy {\r\n\t@ViewChild(AgmMap, { static: false }) public map: AgmMap;\r\n\t@ViewChild(MapControlDirective, { static: false }) private mapControl: MapControlDirective;\r\n\t@ViewChild(CropSettingsComponent, { static: false }) public cropSettingsComponent: CropSettingsComponent;\r\n\r\n\tpublic ageOfCropOptions: ISelectOptions[];\r\n\tpublic commodityIconUrl: string;\r\n\tpublic commodityTypes: ICommodityType[]; // commodity type dropdown\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\tpublic cropTypes: ICropType[]; // crop types dropdown\r\n\tpublic deletingPlanting = false;\r\n\tpublic form: FormGroup;\r\n\tpublic formWells: FormGroup; // form group for wells\r\n\tpublic harvestOnce = true;\r\n\tpublic inEditMode = false;\r\n\tpublic isAdmin = false;\r\n\tpublic isDuplicate = false;\r\n\tpublic isSaving = false; // true => saving in progress; false => not saving, or saving complete\r\n\tpublic isWetDateValid = true;\r\n\tpublic loadingData = true;\r\n\tpublic lots: ISelectedListItem[]; // lots dropdown\r\n\tpublic markers: ICoordinates[] = new Array();\r\n\tpublic permissions: IRanchPermissions;\r\n\tpublic previousCropTypes: IPreviousCropViewModel[]; // previous crop types dropdown\r\n\tpublic ranchCenter: ICoordinates[] = new Array();\r\n\tpublic rightContent: string;\r\n\tpublic showLoader = false;\r\n\tpublic soilError: eSoilWebCrawErrors;\r\n\tpublic soilErrorEnum = eSoilWebCrawErrors;\r\n\tpublic YIELD_UNIT_IDS = YieldUnitId;\r\n\r\n\tpublic vigorOptions: ISelectOptionBoolean[] = [\r\n\t\t{ key: false, value: 'Low' },\r\n\t\t{ key: true, value: 'High' }\r\n\t];\r\n\r\n\tprivate _plantingCache: IPlantingSettingsForm; // original planting values\r\n\t\t// used to prompt users to recalculate\r\n\r\n\tpublic plantingSettingsFormBuilder: PlantingSettingsFormBuilder;\r\n\tpublic soilPropertiesFormBuilder: CustomSoilPropertiesFormBuilder;\r\n\tprivate _plantingWellsDataFetcher: PlantingWellsDataFetcher;\r\n\tprivate _ranchGuid: string;\r\n\tpublic isIrrigationMethodUIInEditMode: boolean;\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic cropTypesBus = new BehaviorSubject<ICropType[]>(null);\r\n\tpublic lotsBus = new BehaviorSubject<ISelectedListItem[]>(null);\r\n\tpublic ageOfCropBus = new BehaviorSubject<ISelectOptions[]>(null);\r\n\tpublic harvestOnceBus = new BehaviorSubject<boolean>(null);\r\n\tpublic markersBus = new BehaviorSubject<ICoordinates[]>(null);\r\n\tpublic soilErrorBus = new BehaviorSubject<eSoilWebCrawErrors>(null);\r\n\tpublic lotCoordinatesBus = new BehaviorSubject<string>(null);\r\n\tpublic cropTypeLoadedBus = new BehaviorSubject<void>(null);\r\n\tpublic isSavingBus = new BehaviorSubject<boolean>(false);\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.form.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fnc(): { [key in NCalculatorFields]: AbstractControl } {\r\n\t\treturn (this.form.get('CropSettings').get('NCalculator') as\r\n\t\t\tFormGroup).controls as { [key in NCalculatorFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tprivate _caspService: CaspService,\r\n\t\tprivate _cropTypeService: CropTypeService,\r\n\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: {\r\n\t\t\tid: number,\r\n\t\t\tisDuplicate: boolean,\r\n\t\t\tpermissions: IRanchPermissions },\r\n\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<PlantingDialog>,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _notificationService: NotificationService,\r\n\t\tprivate _plantingService: PlantingService,\r\n\t\tprivate _plantingWellService: PlantingWellService,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t\tprivate _soilService: SoilTypeService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\t// private _translatePipe: TranslatePipe,\r\n\t\tprivate _validateService: ValidateService,\r\n\t\tpublic userService: UserService,\r\n\t\tprivate _translateService: TranslateService\r\n\t\t\t// public to send data to crop settings component\r\n\t\t) {\r\n\r\n\t\tsuper(_updateService);\r\n\t\tthis.setModalCloseFunction(this.confirmClose);\r\n\r\n\t\tif (this._data) {\r\n\t\t\tthis.permissions = this._data.permissions;\r\n\t\t}\r\n\r\n\t\tthis.isDuplicate = this._data.isDuplicate;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.allowClickOutside = true;\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.rightContent = null; // initially, the right section is closed\r\n\r\n\t\t/// Mat dialog-specific click outside code\r\n\t\tthis._dialogRef.backdropClick().pipe(takeUntil(this._subscriptions$)).subscribe((e: MouseEvent) => {\r\n\r\n\t\t\tif (this.preventClose(e)) {\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\tthis.onClose();\r\n\t\t\t}\r\n\t\t});\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((response) => {\r\n\r\n\t\t\tthis.confirmClose();\r\n\t\t});\r\n\r\n\t\tif (this._data.id) {\r\n\t\t\tthis.inEditMode = true;\r\n\t\t\tthis._getEditModel(this._data.id);\r\n\r\n\t\t} else {\r\n\t\t\tthis.inEditMode = false;\r\n\t\t\tthis._getCreateModel();\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(e: MouseEvent): void {\r\n\t\tthis.stopEventPropagation(e);\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tpublic cancelRecalculation(e: MouseEvent): void {\r\n\t\tthis.cancel(e);\r\n\t\tthis._openCaspDialog();\r\n\t}\r\n\r\n\t/**\r\n\t * Method triggered when user types into the coordinates input field\r\n\t */\r\n\tprivate _onCoordinatesUpdated(): void {\r\n\t\tlet coordinates: Coordinates;\r\n\r\n\t\tthis.soilError = null;\r\n\t\tthis.soilErrorBus.next(this.soilError);\r\n\r\n\t\tcoordinates = new Coordinates(this.f.Coordinates.value);\r\n\r\n\t\tthis._placeMarker();\r\n\r\n\t\tthis.soilPropertiesFormBuilder.initializeWithCoordinates(coordinates.toString(),\r\n\t\t\tthis._soilService).then((res) => {\r\n\r\n\t\t\t\tthis.soilError = res;\r\n\t\t\t\tthis.soilErrorBus.next(this.soilError);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tpublic updateIrrigationMethodUIState(state: boolean) {\r\n\t\tthis.isIrrigationMethodUIInEditMode = state;\r\n\t}\r\n\r\n\tpublic clickMap(event: IAgmMapClick): void {\r\n\t\tlet coordinates: Coordinates;\r\n\t\tthis.soilError = null;\r\n\t\tthis.soilErrorBus.next(this.soilError);\r\n\r\n\t\tcoordinates = new Coordinates(event.coords.lat + ',' + event.coords.lng);\r\n\r\n\t\tthis.f.Coordinates.setValue(coordinates.toString());\r\n\t\tthis.f.Coordinates.markAsTouched();\r\n\t}\r\n\r\n\tpublic confirmClose(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tpublic create(): boolean {\r\n\t\tlet validationResult: IPlantingValidationResult;\r\n\t\tlet notifier: PlantingValidationNotifier;\r\n\t\tlet soilLayers: ISoilLayer[];\r\n\t\tlet model: IPlantingSettingsForm;\r\n\r\n\t\tthis.isSavingBus.next(false);\r\n\r\n\t\tnotifier = new PlantingValidationNotifier(this.form,\r\n\t\t\tthis._notificationService, null);\r\n\r\n\t\tthis.form.updateValueAndValidity();\r\n\r\n\t\tif (!this.form.valid) {\r\n\t\t\tnotifier.notify();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvalidationResult = this._validateExtraFeatures();\r\n\r\n\t\tif (validationResult.isValid === false) {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\tmessage: validationResult.message\r\n\t\t\t});\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tsoilLayers = this.soilPropertiesFormBuilder.cullRedundantFields();\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\t\tthis.isSavingBus.next(true);\r\n\r\n\t\tmodel = this.form.getRawValue() as IPlantingSettingsForm;\r\n\t\tmodel.CropSettings.NCalculator = this.form.get('CropSettings').get('NCalculator').value;\r\n\r\n\t\tthis._plantingService.create(model, soilLayers)\r\n\t\t\t.then((res: CMError | ILotPlantingWithEventsJSON) => {\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t\tthis.isSavingBus.next(false);\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\tthis._displayServerUnresponsiveMessage();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet errorResponse = res as CMError;\r\n\t\t\t\tlet lotPlantingWithEvents = res as ILotPlantingWithEventsJSON;\r\n\r\n\t\t\t\tif (errorResponse.code && errorResponse.code !== httpStatusCodes.success) {\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: errorResponse.message\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._ranchService.plantings.add(lotPlantingWithEvents);\r\n\r\n\t\t\t\tthis._ranchService.updateActivePlantingCount();\r\n\r\n\t\t\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date());\r\n\r\n\t\t\t\t// add new wells here\r\n\r\n\t\t\t\tthis.f.Id.setValue(lotPlantingWithEvents.Id);\r\n\t\t\t\tthis._plantingWellsDataFetcher.save(this.f.Id.value);\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\r\n\t\treturn true; // this will execute out of order.. used for unit testing\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\r\n\t\tif (!this._ranchService || !this._ranchService.plantings) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._ranchService.plantings.delete(this.f.Id.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._plantingService.deletePlanting(this.f.Id.value)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.isSaving = false;\r\n\r\n\t\t\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date());\r\n\t\t\t\tthis._ranchService.updateActivePlantingCount();\r\n\t\t\t\tthis._dialogRef.close();\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Return the smaller of obstruction depth and max root depth\r\n\t * @returns\r\n\t */\r\n\tpublic getMaxRootDepth(): number {\r\n\t\tif (this.fc.MaxRootDepth.invalid) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!this.f.ObstructionDepth || this.f.ObstructionDepth.invalid) {\r\n\t\t\treturn this.fc.MaxRootDepth.value;\r\n\t\t} else {\r\n\t\t\tif (this.f.ObstructionDepth < this.fc.MaxRootDepth.value) {\r\n\t\t\t\treturn this.f.ObstructionDepth.value;\r\n\t\t\t} else {\r\n\t\t\t\treturn this.fc.MaxRootDepth.value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic hideDelete(e: MouseEvent): void {\r\n\t\tthis.deletingPlanting = false;\r\n\t\tthis.stopEventPropagation(e);\r\n\t}\r\n\r\n\tprotected preventClose(e?: MouseEvent): boolean {\r\n\t\t// check to see if \"Today\" button on datepicker was click, this caused modal to close\r\n\t\tif (e && e.target && ((e.target as HTMLElement).innerText === 'Today' ||\r\n\t\t\t(e.target as HTMLElement).className === 'headertodaybtn headertodaybtnenabled' ||\r\n\t\t\t(e.target as HTMLElement).className === 'mydpicon icon-mydptoday')) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn this.loadingData || this.deletingPlanting;\r\n\t}\r\n\r\n\tpublic scrollToTop(): void {\r\n\t\tModal.resetVerticalPosition();\r\n\t}\r\n\r\n\tprivate _onCommodityTypeSelected(): void {\r\n\t\tlet commodityType: ICommodityType;\r\n\r\n\t\tif (this.f.CommodityTypeId.invalid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.fc.CommodityTypeId.setValue(this.f.CommodityTypeId.value);\r\n\t\tthis._setCommodityImage(this.f.CommodityTypeId.value);\r\n\r\n\t\tcommodityType = CommodityService.getCommodityType(this.commodityTypes,\r\n\t\t\tthis.f.CommodityTypeId.value);\r\n\r\n\t\tthis.f.YieldUnitId.setValue(commodityType.YieldUnitId);\r\n\r\n\t\tif (commodityType) {\r\n\t\t\tthis.harvestOnce = commodityType.HarvestOnce;\r\n\t\t\tthis.harvestOnceBus.next(this.harvestOnce);\r\n\t\t}\r\n\r\n\t\tthis._cropTypeService.getByRanch(this._ranchGuid, this.f.CommodityTypeId.value)\r\n\t\t\t.then((res) => {\r\n\r\n\t\t\tif (!res || !res.length) {\r\n\t\t\t\tthis._displayServerUnresponsiveMessage();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.cropTypes = res;\r\n\t\t\tthis.cropTypesBus.next(this.cropTypes);\r\n\t\t\tthis.plantingSettingsFormBuilder.updateCropTypes(this.cropTypes);\r\n\r\n\t\t\tif (res.length > 1) {\r\n\t\t\t\tthis.f.CropTypeId.setValue(null);\r\n\t\t\t} else {\r\n\t\t\t\t// if there's only one result, auto set dropdown to the single result\r\n\t\t\t\tthis.f.CropTypeId.setValue(res[0].Id);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _displayServerUnresponsiveMessage(): void {\r\n\t\tthis._notificationService.generateNotifcation({\r\n\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\tmessage: 'Server could not be reached. Please check your internet connection and try again'\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _onLotSelected() {\r\n\t\tif (this.f.LotId.invalid) {\r\n\t\t\t// nothing selected\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._ranchService.getEditRanchLotData(this.f.LotId.value)\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\tthis._displayServerUnresponsiveMessage();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lotCoordinatesBus.next(res.Coordinates);\r\n\r\n\t\t\t\tthis.soilError = null;\r\n\t\t\t\tthis.soilErrorBus.next(this.soilError);\r\n\r\n\t\t\t\tthis.f.ObstructionDepth.setValue(res.ObstructionDepth);\r\n\t\t\t\tthis.plantingSettingsFormBuilder.configureShowObstructionDepthOnLoad();\r\n\r\n\t\t\t\t// on planting create, we fetch the soil type associated with a lot, which gets cloned and associated\r\n\t\t\t\t// with a planting in the backend\r\n\t\t\t\tthis._soilService.getSoilPropertiesByLot(this.f.LotId.value)\r\n\t\t\t\t\t.then((response) => {\r\n\t\t\t\t\t\tif (!response) {\r\n\t\t\t\t\t\t\tthis._displayServerUnresponsiveMessage();\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.soilPropertiesFormBuilder = new CustomSoilPropertiesFormBuilder(this._fb,\r\n\t\t\t\t\t\t\tresponse.CustomSoilLayers, this._subscriptions$);\r\n\r\n\t\t\t\t\t\tthis.soilPropertiesFormBuilder.initializeWithStaticData(response.SoilWebProperties);\r\n\t\t\t\t\t});\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic setRightContent(view: string) {\r\n\t\tModal.resetVerticalPosition();\r\n\r\n\t\tif (view === this.rightContent) {\r\n\t\t\tthis.rightContent = null;\r\n\t\t} else {\r\n\t\t\tthis.rightContent = view;\r\n\r\n\t\t\tif (view === 'MapPicker') {\r\n\t\t\t\tif (this.f.Coordinates.valid) {\r\n\t\t\t\t\tthis._centerMapOnCoords(this.f.Coordinates.value);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._centerMapOnRanch();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (view === 'SoilSettings') {\r\n\t\t\t\t// TODO: Make sure soil table properties is prepped\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n     * Show delete popup\r\n     * @param e\r\n     */\r\n\tpublic showDelete(e: MouseEvent): void {\r\n\t\tthis.deletingPlanting = true;\r\n\t\tthis.stopEventPropagation(e);\r\n\t}\r\n\r\n\tpublic submit() {\r\n\t\tif (this.inEditMode) {\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\tpublic update(): boolean {\r\n\t\tlet validationResult: IPlantingValidationResult;\r\n\t\tlet notifier: PlantingValidationNotifier;\r\n\t\tlet soilLayers: ISoilLayer[];\r\n\r\n\t\tnotifier = new PlantingValidationNotifier(this.form,\r\n\t\t\tthis._notificationService, null);\r\n\r\n\t\tthis.form.updateValueAndValidity();\r\n\r\n\t\tif (this.form.invalid) {\r\n\t\t\tnotifier.notify();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvalidationResult = this._validateExtraFeatures();\r\n\r\n\t\tif (validationResult.isValid === false) {\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\tmessage: validationResult.message\r\n\t\t\t});\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tsoilLayers = this.soilPropertiesFormBuilder.cullRedundantFields();\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._plantingService.update(this.form.value as IPlantingSettingsForm, soilLayers)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tlet error: CMError;\r\n\t\t\t\tlet data: ILotPlantingWithEventsJSON;\r\n\t\t\t\tlet iPlanting: IPlanting;\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\tthis._displayServerUnresponsiveMessage();\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\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\t\tmessage: error.message\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (error.code === httpStatusCodes.angularError) {\r\n\t\t\t\t\t\tthrow new Error(error.message);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdata = res as ILotPlantingWithEventsJSON;\r\n\r\n\t\t\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\t\t// one data storage here to check, not two\r\n\r\n\t\t\t\tif (!this._ranchService || !this._ranchService.plantings) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tiPlanting = this._ranchService.plantings.convertData(data);\r\n\t\t\t\tthis._ranchService.plantings.edit(iPlanting);\r\n\r\n\t\t\t\tthis._updateService.setPlantingsUpdated(this._updateService.currentRanchId, new Date());\r\n\t\t\t\tthis._ranchService.updateActivePlantingCount();\r\n\r\n\t\t\t\tif (this.formWells.touched) {\r\n\t\t\t\t\tthis._plantingWellsDataFetcher.save(this.f.Id.value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._postPlantingSaveCheck();\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic updateDripApplicationRate(v: number): void {\r\n\t\tthis.f.DripApplicationRate.setValue(v);\r\n\t}\r\n\r\n\tpublic updateSprinklerApplicationRate(v: number): void {\r\n\t\tthis.f.SprinklerApplicationRate.setValue(this._validateService.convertToFloat(v, 2));\r\n\t}\r\n\r\n\tpublic isModalSizeMedium(): boolean {\r\n\t\treturn this.deletingPlanting ||\r\n\t\t\tthis.rightContent === null;\r\n\t}\r\n\r\n\tpublic isModalSizeXLarge(): boolean {\r\n\t\treturn this.rightContent !== null;\r\n\t}\r\n\r\n\t/**\r\n\t * emitter method that captures results returned by the calculator component\r\n\t * @param applicationRate\r\n\t */\r\n\tpublic updateMicroSprinklerApplicationRate(applicationRate: number): void {\r\n\t\tthis.f.MicroSprinklerApplicationRate.setValue(applicationRate);\r\n\t}\r\n\r\n\tprivate _processLotsData(data: IRanchLotJSONModel[]): ISelectedListItem[] {\r\n\t\tlet lots: ISelectedListItem[];\r\n\r\n\t\tlots = new Array();\r\n\r\n\t\tif (!data || data.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfor (let lot of data) {\r\n\t\t\tlots.push({\r\n\t\t\t\tValue: lot.Id,\r\n\t\t\t\tText: lot.Name,\r\n\t\t\t\tSelected: false\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn lots;\r\n\t}\r\n\r\n\tprivate _preparePreviousCropTypes(records: IPreviousCropViewModel[]): void {\r\n\t\tthis.previousCropTypes = records.filter(x => x.Id !== PREVIOUS_CROP_NO_RESIDUE_ID);\r\n\t}\r\n\r\n\tprivate _getCreateModel() {\r\n\r\n\t\tthis.userService.userIsAdmin().then(res => this.isAdmin = res);\r\n\r\n\t\tthis._plantingService.getAddPlantingData()\r\n\t\t\t.then(res => {\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\tthis._displayServerUnresponsiveMessage();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!res.Metadata) {\r\n\t\t\t\t\tthrow new Error('Meta data missing');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._ranchGuid = res.Metadata.RanchGuid;\r\n\t\t\t\tthis.commodityTypes = res.Metadata.CommodityTypes;\r\n\t\t\t\tthis.lots = res.Metadata.Lots;\r\n\t\t\t\tthis.lotsBus.next(this.lots);\r\n\r\n\t\t\t\tthis._preparePreviousCropTypes(res.Metadata.PrevCropTypes);\r\n\r\n\t\t\t\tthis.loadingData = false;\r\n\t\t\t\tModal.resize();\r\n\r\n\t\t\t\tthis.plantingSettingsFormBuilder = new PlantingSettingsFormBuilder(this._fb, this._plantingService,\r\n\t\t\t\t\tthis._subscriptions$);\r\n\r\n\t\t\t\tthis.form = this.plantingSettingsFormBuilder.initialize(res, null);\r\n\t\t\t\tthis._bindValueChanges();\r\n\r\n\t\t\t\tthis._plantingWellsDataFetcher = new PlantingWellsDataFetcher(this._ranchService,\r\n\t\t\t\t\tthis._plantingWellService, this._fb, this._subscriptions$);\r\n\r\n\t\t\t\tthis._plantingWellsDataFetcher.onPlantingCreate().then((response) => {\r\n\t\t\t\t\tif (response) {\r\n\t\t\t\t\t\tthis.formWells = response;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\t\t\tmessage: 'Fetching wells failed. Please try reloading planting settings.'\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 (this.lots.length === 1) {\r\n\t\t\t\t\tthis.f.LotId.setValue(this.lots[0].Value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.soilPropertiesFormBuilder = new CustomSoilPropertiesFormBuilder(this._fb,\r\n\t\t\t\t\tnull, this._subscriptions$);\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n     *\r\n     * @param id\r\n     */\r\n\tprivate _getEditModel(id: number) {\r\n\t\tthis.userService.userIsAdmin().then(res => this.isAdmin = res);\r\n\r\n\t\tthis._plantingService.getEditModel(id).then((res) => {\r\n\t\t\tif (!res) {\r\n\t\t\t\tthis._displayServerUnresponsiveMessage();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!res.Metadata) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.lots = this._processLotsData(this._ranchService.currentRanchLots);\r\n\r\n\t\t\tthis.soilPropertiesFormBuilder = new CustomSoilPropertiesFormBuilder(this._fb,\r\n\t\t\t\tres.SoilProperties.CustomSoilLayers, this._subscriptions$);\r\n\r\n\t\t\tthis.soilPropertiesFormBuilder.initializeWithStaticData(res.SoilProperties.SoilWebProperties);\r\n\t\t\tthis.commodityTypes = res.Metadata.CommodityTypes;\r\n\t\t\tthis._preparePreviousCropTypes(res.Metadata.PrevCropTypes);\r\n\t\t\tthis._ranchGuid = res.Metadata.RanchGuid;\r\n\r\n\t\t\tthis._cropTypeService.getByRanch(this._ranchGuid,\r\n\t\t\t\tres.PlantingBasicInfoViewModel.CommodityTypeId).then(cropTypes => {\r\n\r\n\t\t\t\tlet commodityTypeMatch: ICommodityType;\r\n\r\n\t\t\t\tthis.cropTypes = cropTypes;\r\n\t\t\t\tthis.cropTypesBus.next(this.cropTypes);\r\n\r\n\t\t\t\tthis.plantingSettingsFormBuilder = new PlantingSettingsFormBuilder(this._fb, this._plantingService,\r\n\t\t\t\t\tthis._subscriptions$);\r\n\r\n\t\t\t\tthis.form = this.plantingSettingsFormBuilder.initialize(res, this.cropTypes);\r\n\t\t\t\tthis._bindValueChanges();\r\n\t\t\t\tthis.form.markAsDirty();\r\n\r\n\t\t\t\tif (this.isDuplicate) { // wipe planting ID if we're duplicating planting\r\n\t\t\t\t\tthis.f.Id.setValue(null);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._setCommodityImage(this.f.CommodityTypeId.value);\r\n\t\t\t\tthis.ageOfCropOptions = PlantingAdvancedEdit.generateAgeOfCropDropdown(this.fc.MaxAge.value,\r\n\t\t\t\t\tthis._translateService);\r\n\r\n\t\t\t\tthis.ageOfCropBus.next(this.ageOfCropOptions);\r\n\r\n\t\t\t\tcommodityTypeMatch = CommodityService.getCommodityType(this.commodityTypes,\r\n\t\t\t\t\tthis.f.CommodityTypeId.value);\r\n\r\n\t\t\t\tif (!commodityTypeMatch) {\r\n\t\t\t\t\tthrow new Error('commodity type not found in commodity type array');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.harvestOnce = commodityTypeMatch.HarvestOnce;\r\n\t\t\t\tthis._plantingCache = this.form.value; // save original\r\n\t\t\t\t\t// form for recalculation check\r\n\r\n\t\t\t\tif (this.f.Coordinates.valid) {\r\n\t\t\t\t\tthis._placeMarker();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.loadingData = false;\r\n\t\t\t\tModal.resize();\r\n\r\n\t\t\t\t/** load the planting settings form **/\r\n\t\t\t\tthis._setCropId(this.cropTypes, this.fc.DefaultCropTypeId.value);\r\n\r\n\t\t\t\tthis._plantingWellsDataFetcher = new PlantingWellsDataFetcher(this._ranchService,\r\n\t\t\t\t\tthis._plantingWellService, this._fb, this._subscriptions$);\r\n\r\n\t\t\t\tif (this.isDuplicate) {\r\n\t\t\t\t\tthis._plantingWellsDataFetcher.onPlantingEdit(id, true).then((response) => {\r\n\t\t\t\t\t\tif (response) {\r\n\t\t\t\t\t\t\tthis.formWells = response;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\t\t\t\tmessage: 'Fetching wells failed. Please try again.'\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} else {\r\n\t\t\t\t\tthis._plantingWellsDataFetcher.onPlantingEdit(this.f.Id.value, false).then((response) => {\r\n\t\t\t\t\t\tif (response) {\r\n\t\t\t\t\t\t\tthis.formWells = response;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\t\t\t\tmessage: 'Fetching wells failed. Please try again.'\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});\r\n\t}\r\n\r\n\tprivate _setCommodityImage(id: number): void {\r\n\t\tfor (let commodity of this.commodityTypes) {\r\n\t\t\tif (commodity.Id === id) {\r\n\t\t\t\tthis.commodityIconUrl = commodity.IconPath;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * on edit, auto-select the appropriate crop type in the crop type\r\n\t * dropdown\r\n\t * @param cropTypes\r\n\t * @param defaultCropTypeId\r\n\t */\r\n\tprivate _setCropId(cropTypes: ICropType[], defaultCropTypeId: number): void {\r\n\r\n\t\tif (!cropTypes) {\r\n\t\t\tthrow new Error('crop types are empty');\r\n\t\t}\r\n\r\n\t\tif (cropTypes.find(x => x.Id === defaultCropTypeId)) {\r\n\t\t\tthis.f.CropTypeId.setValue(defaultCropTypeId, { emitEvent: false });\r\n\t\t\t// on load, prevent cropTypeId update to fetch crop data and\r\n\t\t\t// overwrite existing data\r\n\t\t} else {\r\n\t\t\tthis.f.CropTypeId.setValue(null, { emitEvent: false });\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _openCaspDialog(): void {\r\n\t\tif (this.f.CommodityTypeId.value !== 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\tprivate _postPlantingSaveCheck(): void {\r\n\t\tthis._dialogRef.close();\r\n\r\n\t\tif (this._shouldRecalculate()) {\r\n\t\t\tthis._recalculatePlanting();\r\n\t\t} else {\r\n\t\t\tthis._openCaspDialog();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _recalculatePlanting(): void {\r\n\t\tthis._plantingService.recalculatePlanting(this.f.Id.value).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}\r\n\r\n\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.UPDATE,\r\n\t\t\t\tmessage: 'The planting was recalculated'\r\n\t\t\t});\r\n\r\n\t\t\tthis._ranchService.plantings.replacePlantingEvents(res.Events, this.f.Id.value);\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\t/**\r\n\t * This method is triggered when user chooses a crop type\r\n     * Note: We're making a wasteful AJAX Call here instead of looking up the name\r\n     * in croptypes array\r\n     */\r\n\tprivate _getCropType() {\r\n\t\tif (this.f.CropTypeId.value === null) {\r\n\t\t\t// do nothing??\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._cropTypeService.getCropModel(this.f.CropTypeId.value)\r\n\t\t\t.then((res: ICropTypeViewModel) => {\r\n\r\n\t\t\t\tif (!res) {\r\n\t\t\t\t\tthis._displayServerUnresponsiveMessage();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tres.DefaultCropTypeId = this.f.CropTypeId.value;\r\n\t\t\t\tthis.plantingSettingsFormBuilder.reloadCropType(res);\r\n\t\t\t\tthis.cropTypeLoadedBus.next();\r\n\r\n\t\t\t\tthis.ageOfCropOptions = PlantingAdvancedEdit.generateAgeOfCropDropdown(this.fc.MaxAge.value,\r\n\t\t\t\t\tthis._translateService);\r\n\r\n\t\t\t\tthis.ageOfCropBus.next(this.ageOfCropOptions);\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _centerMapOnRanch(): void {\r\n\t\tif (!this.map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.map.triggerResize().then(() => {\r\n\t\t\tthis._ranchService.getRanchBasicInfo()\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (!res) {\r\n\t\t\t\t\t\tthis._notificationService.generateNotifcation({\r\n\t\t\t\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\t\t\t\tmessage: 'Failed to retrieve ranch coordinates. Please try again.'\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\r\n\t\t\t\t\tlet lat = Number(res.Coordinates.split(',')[0]);\r\n\t\t\t\t\tlet lng = Number(res.Coordinates.split(',')[1]);\r\n\t\t\t\t\tthis.ranchCenter.push({ lat: lat, lng: lng });\r\n\t\t\t\t\tthis._centerMap(lat, lng);\r\n\t\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _centerMapOnCoords(coords: string) {\r\n\t\tif (!this.map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.map.triggerResize().then(() => {\r\n\t\t\tlet coordinates = new Coordinates(coords);\r\n\t\t\tthis._centerMap(coordinates.lat, coordinates.lng);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _bindValueChanges(): void {\r\n\t\tthis.f.CropTypeId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._getCropType();\r\n\t\t});\r\n\r\n\t\tthis.f.LotId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._onLotSelected();\r\n\t\t});\r\n\r\n\t\tthis.f.Coordinates.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.soilError = null;\r\n\t\t\tthis.soilErrorBus.next(this.soilError);\r\n\t\t\tthis._onCoordinatesUpdated();\r\n\t\t});\r\n\r\n\t\tthis.f.CommodityTypeId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._onCommodityTypeSelected();\r\n\t\t});\r\n\r\n\t\tthis.f.YieldActualDisplayed.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.f.YieldActual.setValue(TonsConverter.convertDisplayedUnitToLbs(this.f.YieldUnitId.value,\r\n\t\t\t\tthis.f.YieldActualDisplayed.value));\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _centerMap(lat: number, lng: number): void {\r\n\t\tif (!this.mapControl) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.mapControl.centerMap(lat, lng);\r\n\t\tthis.mapControl.setZoom(15);\r\n\t}\r\n\r\n\tprivate _placeMarker() {\r\n\t\tlet coordinates: Coordinates;\r\n\r\n\t\tcoordinates = new Coordinates(this.f.Coordinates.value);\r\n\r\n\t\tif (!coordinates.lat || !coordinates.lng) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.markers = new Array();\r\n\r\n\t\tthis.markers.push({\r\n\t\t\tlat: coordinates.lat,\r\n\t\t\tlng: coordinates.lng\r\n\t\t});\r\n\r\n\t\tthis.markersBus.next(this.markers);\r\n\t}\r\n\r\n\t/**\r\n\t * A method for validating features that are not a part of reactive form\r\n\t * @returns\r\n\t */\r\n\tprivate _validateExtraFeatures(): IPlantingValidationResult {\r\n\t\tlet result: IPlantingValidationResult;\r\n\r\n\t\tresult = {\r\n\t\t\tisValid: false,\r\n\t\t\tmessage: 'Something went wrong. Please check your planting settings.'\r\n\t\t};\r\n\r\n\t\tif (this.fc.IsNDependent.value && (!this.formWells || this.formWells.valid === false)) {\r\n\t\t\tresult.message = 'Well information in the Irrigation Settings section is incorrect.';\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tif (this.soilError) {\r\n\t\t\tresult.message = 'There\\'s a problem with soil settings data.';\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tif (this.soilPropertiesFormBuilder.form.invalid) {\r\n\t\t\tresult.message = 'Soil properties are not valid.';\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tresult.isValid = true;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Detects deep difference between two objects\r\n\t * @param o\r\n\t * @param b\r\n\t * @returns\r\n\t */\r\n\tpublic difference(o: any, b: any) {\r\n\t\tconst changes = (object: any, base: any): any => (\r\n\t\t\t_.pick(\r\n\t\t\t\t_.mapObject(object, (value: any, key: any) => (\r\n\t\t\t\t\t(!_.isEqual(value, base[key])) ?\r\n\t\t\t\t\t((_.isObject(value) && _.isObject(base[key])) ? changes(value, base[key]) : value) :  null\r\n\t\t\t\t)),\r\n\t\t\t\t(value: any) => (value !== null)\r\n\t\t\t)\r\n\t\t);\r\n\r\n\t\treturn changes(o, b);\r\n\t}\r\n\t/**\r\n\t * A method to determine if the user should be prompted to recalculate\r\n\t * @returns true if non-trivial changes were made to planting\r\n\t */\r\n\tprivate _shouldRecalculate(): boolean {\r\n\t\tlet result: boolean;\r\n\t\tlet plantingOriginal: IPlantingSettingsForm;\r\n\t\tlet plantingUpdated: IPlantingSettingsForm;\r\n\r\n\t\tconst IRRELEVANT_FIELDS: string[] = ['Name', 'LotId', 'Acres',\r\n\t\t\t'CropTypeId', 'YieldActual', 'DripApplicationRate', 'SprinklerApplicationRate',\r\n\t\t\t'MicroSprinklerApplicationRate']; // CropTypeId originally holds the planting cropType\r\n\t\t\t\t// ID but is replaced with the default CropType Id. The field\r\n\t\t\t\t// is ignored during saving\r\n\r\n\t\tplantingOriginal = jQuery.extend(true, {}, this._plantingCache);\r\n\t\tplantingOriginal = _.omit(plantingOriginal, IRRELEVANT_FIELDS);\r\n\r\n\t\tplantingUpdated = jQuery.extend(true, {}, this.form.value);\r\n\t\tplantingUpdated = _.omit(plantingUpdated, IRRELEVANT_FIELDS);\r\n\r\n\t\tresult = !_.isEqual(plantingOriginal, plantingUpdated);\r\n\r\n\t\tif (this.soilPropertiesFormBuilder.hasChangesbeenMade()) {\r\n\t\t\tresult = true;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic onClose(): void {\r\n\t\tif ((this.form && this.form.touched) || (this.formWells && this.formWells.touched) ||\r\n\t\t\tthis.soilPropertiesFormBuilder && this.soilPropertiesFormBuilder.form\r\n\t\t\t&& this.soilPropertiesFormBuilder.form.dirty) {\r\n\r\n\t\t\tthis._showKeepDiscard();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.confirmClose();\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\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","import { AsyncValidatorFn, FormBuilder, Validators } from '@angular/forms';\r\nimport { FormValidation } from '../../classes/formValidation';\r\nimport { IPlantingAdvancedEdit, IPlantingBasicInfoViewModel,\r\n\tIPlantingSettingsCalculatorSettings, IPlantingSettingsViewModel,\r\n\tLotPlantingDeficitControlPoint, LotPlantingIrrigationMethods } from './interfaces';\r\nimport { PlantingSettingFields } from './plantingSettingFields';\r\nimport { CropTypeFormFields } from '../crop-types/cropTypeFormBuilder';\r\nimport { CropSettingsFormBuilder } from './cropSettingsFormBuilder';\r\nimport { PlantingService } from './service';\r\nimport { from, Observable, of, Subject } from 'rxjs';\r\nimport { eCommodityTypes, eIrrigationMethods } from '../../interfaces/constants';\r\nimport { Planting } from './planting';\r\nimport { Coordinates } from '../../classes/Coordinates';\r\nimport { CMError } from '../../interfaces/interfaces';\r\nimport { ICropType, ICropTypeViewModel } from '../../models/crop-type/interfaces';\r\nimport { PlantingSettingsValidator } from './plantingSettingValidator';\r\nimport { MacroTunnelFields, MacroTunnelsForm } from './sections/macro-tunnel-form';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { CalculatorSettingsForm } from './calculatorSettingsForm';\r\nimport { NCalculatorFields } from './sections/nitrogen-calculator/n-calculator';\r\nimport { DEFAULT_MINERALIZATION_RATE, PREVIOUS_CROP_NO_RESIDUE_ID } from '../../services/constants';\r\nimport { TonsConverter } from './tonsConverter';\r\nimport { IrrigationDeficitType } from './sections/irrigation-deficit/irrigation-deficit';\r\n\r\nexport class PlantingSettingsFormBuilder {\r\n\r\n\tpublic coordinateExplanation: string; // detailed explanation about the validity of planting coordinates\r\n\tprivate _originalCoordinateString: string; // used to prevent multiple async calls\r\n\tprivate _cropSettingsForm: CropSettingsFormBuilder;\r\n\tprivate _calculatorSettingsForm: CalculatorSettingsForm;\r\n\tprivate _fb: FormBuilder;\r\n\tprivate _form: FormGroup;\r\n\tprivate _macroTunnelsForm: MacroTunnelsForm;\r\n\tprivate _service: PlantingService;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tprivate _defaultDeficitType: number = null;\r\n\tprivate APPLICATION_RATE = 'ApplicationRate';\r\n\tprivate DU = 'DU';\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this._form.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this._form.get('CropSettings') as FormGroup).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('CropSettings').get('NCalculator') as FormGroup).controls as\r\n\t\t\t{ [key in NCalculatorFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get mtf(): { [key in MacroTunnelFields]: AbstractControl } {\r\n\t\treturn (this._form.get('MacroTunnelSettings') as FormGroup).controls as { [key in MacroTunnelFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(fb: FormBuilder, plantingService: PlantingService, $subscription: Subject<boolean>) {\r\n\t\tthis._fb = fb;\r\n\t\tthis._service = plantingService;\r\n\t\tthis._subscriptions$ = $subscription;\r\n\t}\r\n\r\n\tpublic initialize(planting: IPlantingAdvancedEdit, cropTypes: ICropType[]): FormGroup {\r\n\t\tlet basic: IPlantingBasicInfoViewModel;\r\n\t\tlet settings: IPlantingSettingsViewModel;\r\n\t\tlet calculator: IPlantingSettingsCalculatorSettings;\r\n\t\tlet cropSettingsFormGroup: FormGroup;\r\n\r\n\t\tbasic = planting.PlantingBasicInfoViewModel;\r\n\t\tsettings = planting.PlantingSettingsViewModel;\r\n\t\tcalculator = planting.CalculatorSettings;\r\n\r\n\t\tthis._calculatorSettingsForm = new CalculatorSettingsForm(this._fb, this._subscriptions$);\r\n\r\n\t\tthis._cropSettingsForm = new CropSettingsFormBuilder(this._fb, planting.Metadata.CommodityTypes,\r\n\t\t\tplanting.Metadata.PrevCropTypes, cropTypes, this._subscriptions$);\r\n\r\n\t\t// initialize cropSettingsFormGroup before the main form, since the main form validation depends on\r\n\t\t// crop settings. cropSettingsFromGroup is acced using this.fc\r\n\r\n\t\tthis._macroTunnelsForm = new MacroTunnelsForm(this._fb);\r\n\r\n\t\tthis._form = this._fb.group({\r\n\t\t\tAcres: [settings.Acres > 0 ? settings.Acres : null, [Validators.required,\r\n\t\t\t\tValidators.min(0.001), Validators.max(10000)]],\r\n\t\t\tAgeOfCrop: [basic.AgeOfCrop, [Validators.min(0), Validators.required]],\r\n\t\t\tCommodityTypeId: [basic.CommodityTypeId, [Validators.required,\r\n\t\t\t\tFormValidation.greaterThanValidator(0)]],\r\n\r\n\t\t\tCoordinates: [settings.Coordinates, {updateOn: 'blur'}],\r\n\t\t\tCropTypeId: [basic.CropTypeId, [Validators.required, FormValidation.greaterThanValidator(0)]],\r\n\t\t\tDeficitType: [ null ],\r\n\r\n\t\t\tDripApplicationRate: [settings.DripApplicationRate, [FormValidation.greaterThanValidator(0),\r\n\t\t\t\tValidators.max(10)]],\r\n\r\n\t\t\tDripDistUniformPct: [settings.DripDistUniformPct, [Validators.required,\r\n\t\t\t\tValidators.min(0), Validators.max(100)]],\r\n\t\t\tFloodDistUniformityPct: [settings.FloodDistUniformityPct, [Validators.required,\r\n\t\t\t\tFormValidation.greaterThanValidator(0)]],\r\n\t\t\tGerminationSprinklerPct: [settings.GerminationSprinklerPct, [Validators.required,\r\n\t\t\t\tValidators.min(0), Validators.max(100)]],\r\n\t\t\tHarvestDate: [basic.HarvestDate],\r\n\t\t\tId: [planting.Id],\r\n\t\t\tControlPoints: this._fb.array([]),\r\n\t\t\tIrrigationMethods: this._fb.array([]),\r\n\t\t\tIsHighVigor: [settings.IsHighVigor ? settings.IsHighVigor : true, [Validators.required]],\r\n\t\t\tIsSpatialEnabled: [settings.IsSpatialEnabled],\r\n\t\t\tLeechingFactorPct: [settings.LeechingFactorPct, [Validators.required]],\r\n\t\t\tLotId: [basic.LotId, [Validators.required]],\r\n\t\t\tMicroSprinklerApplicationRate: [settings.MicroSprinklerApplicationRate, [Validators.required,\r\n\t\t\t\tFormValidation.greaterThanValidator(0), Validators.max(10)]],\r\n\t\t\tMicroSprinklerDistUniformityPct: [settings.MicroSprinklerDistUniformityPct, [Validators.required,\r\n\t\t\t\tValidators.min(0), Validators.max(100)]],\r\n\t\t\tName: [basic.PlantingName, [Validators.required, Validators.maxLength(128)]],\r\n\t\t\t// Obstruction Depth is set up elsewhere\r\n\t\t\tObstructionDepth: [settings.ObstructionDepth],\r\n\t\t\tShowObstructionDepth: [false],\r\n\r\n\t\t\tSprinklerApplicationRate: [settings.SprinklerApplicationRate, [\r\n\t\t\t\tFormValidation.greaterThanValidator(0),\r\n\t\t\t\tValidators.max(10)\r\n\t\t\t]],\r\n\r\n\t\t\tSprinklerDistUniformityPct: [settings.SprinklerDistUniformityPct,\r\n\t\t\t\t[Validators.required, Validators.min(0), Validators.max(100)]],\r\n\r\n\t\t\tWetDate: [basic.WetDate, { updateOn: 'blur'}],\r\n\t\t\tYieldActual: [settings.YieldActual, [Validators.min(0)]],\r\n\t\t\tYieldUnitId: [settings.CommodityTypeYieldUnitId],\r\n\t\t\tYieldActualDisplayed: [TonsConverter.converLbsToTargetUnit(settings.CommodityTypeYieldUnitId,\r\n\t\t\t\tsettings.YieldActual)]\r\n\t\t});\r\n\r\n\t\tcropSettingsFormGroup = this._cropSettingsForm.initialize(planting.CropTypeViewModel, {\r\n\t\t\tAgeOfCrop: basic.AgeOfCrop,\r\n\t\t\tIsCoverCropEnabled: settings.IsCoverCropEnabled,\r\n\t\t\tIsStressEnabled: settings.IsStressEnabled,\r\n\t\t\tLeafSenesceDate: settings.LeafSenesceDate,\r\n\t\t\tPrevCropDays: settings.PrevCropDays,\r\n\t\t\tPreviousCropTypeId: settings.PreviousCropTypeId,\r\n\t\t\tStressEndDate: settings.StressEndDate,\r\n\t\t\tStressStartDate: settings.StressStartDate,\r\n\t\t\tYieldTarget: settings.YieldTarget,\r\n\t\t\tYieldUnitId: settings.CommodityTypeYieldUnitId,\r\n\t\t\tWetDateControl: this.f.WetDate,\r\n\t\t\tHarvestDateControl: this.f.HarvestDate\r\n\t\t});\r\n\r\n\t\tthis._form.addControl('CropSettings', cropSettingsFormGroup);\r\n\r\n\t\tthis._form.addControl('CalculatorSettings',\r\n\t\t\tthis._calculatorSettingsForm.initialize(planting.CalculatorSettings,\r\n\t\t\t\tthis.fc.IsTree.value));\r\n\r\n\t\t// validators that depend on this.form\r\n\r\n\t\tthis.f.Coordinates.setValidators([Validators.required,\r\n\t\t\tPlantingSettingsValidator.coordinatesContainLatLng()]);\r\n\r\n\t\tthis.f.Coordinates.setAsyncValidators(this._coordinatesInSupportedArea(this._form));\r\n\r\n\t\tthis.f.HarvestDate.setValidators([Validators.required,\r\n\t\t\tFormValidation.isDate,\r\n\t\t\tPlantingSettingsValidator.mustBeAfterWetDate(this._form),\r\n\t\t\tPlantingSettingsValidator.mustBeOnSameYearAsHarvestDate(this._form)]);\r\n\r\n\t\tthis.f.WetDate.setValidators([Validators.required, FormValidation.isDate,\r\n\t\t\tPlantingSettingsValidator.mustBeBeforeHarvestDate(this._form)]);\r\n\r\n\t\tthis.f.WetDate.setAsyncValidators(this._cutEventsBeforeWetDateMustNotExist(this._form));\r\n\r\n\t\tthis.f.ObstructionDepth.setValidators([FormValidation.greaterThanValidator(0),\r\n\t\t\tFormValidation.lessThanValidator(4),\r\n\t\t\tPlantingSettingsValidator.requiredIfObstructionUIEnabled(this._form)]);\r\n\r\n\t\tthis.setupConditionalRules(this.fc.IsTree.value,\r\n\t\t\tthis.f.CommodityTypeId.value);\r\n\r\n\t\tthis._defaultDeficitType = settings.DeficitType;\r\n\r\n\t\tthis.f.DeficitType.setValue(settings.DeficitType ? settings.DeficitType : IrrigationDeficitType.POINT_TO_POINT);\r\n\r\n\t\tthis._form.addControl('MacroTunnelSettings', this._macroTunnelsForm.initialize({\r\n\t\t\tplantingId: planting.Id,\r\n\t\t\tstartDate: settings.MacroTunnelStartDate,\r\n\t\t\tendDate: settings.MacroTunnelEndDate,\r\n\t\t\tisEnabled: settings.IsMacroTunnelEnabled,\r\n\t\t\tisFullSeason: settings.IsMacroTunnelFullSeason,\r\n\t\t\twetDateControl: this.f.WetDate,\r\n\t\t\tharvestDateControl: this.f.HarvestDate\r\n\t\t}));\r\n\r\n\t\tif (this.fc.PreviousCropTypeId.value === PREVIOUS_CROP_NO_RESIDUE_ID) {\r\n\t\t\tthis.fc.CropMineralizationRate.setValue(DEFAULT_MINERALIZATION_RATE);\r\n\t\t}\r\n\r\n\t\tthis.configureShowObstructionDepthOnLoad();\r\n\t\tthis._setupIrrigationMethods(settings.IrrigationMethods);\r\n\t\tthis._setupDeficitControlPoints(settings.ControlPoints);\r\n\t\tthis._bindValueChanges();\r\n\t\tthis._blindCropSettingsValueChanges();\r\n\r\n\t\tFormValidation.clearValidator(this.fc.StressEnd);\r\n\t\tFormValidation.clearValidator(this.fc.StressStart);\r\n\t\tFormValidation.clearValidator(this.fc.WaterStressStart);\r\n\t\tFormValidation.clearValidator(this.fc.WaterStressEnd);\r\n\r\n\t\treturn this._form;\r\n\t}\r\n\r\n\tprivate _setupDeficitControlPoints(controlPoints: LotPlantingDeficitControlPoint[]) {\r\n\r\n\t\tif (!controlPoints || controlPoints.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcontrolPoints.forEach(e => {\r\n\t\t\tlet i: number;\r\n\r\n\t\t\t(this.f.ControlPoints as FormArray).push(this._constructDeficitControlPointRow(e));\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _constructDeficitControlPointRow(controlPoint: LotPlantingDeficitControlPoint): FormGroup {\r\n\t\tlet row: FormGroup;\r\n\r\n\t\trow = this._fb.group({\r\n\t\t\tDate: [ new Date(controlPoint.Date), [Validators.required, FormValidation.mustBeOnOrAfterDate(this.f.WetDate),\r\n\t\t\t\tFormValidation.mustBeOnOrBeforeDate(this.f.HarvestDate)] ],\r\n\t\t\tCropETPercentage: [ controlPoint.CropETPercentage, [ Validators.required,\r\n\t\t\t\tValidators.min(0), Validators.max(100), FormValidation.integerValidator()] ],\r\n\t\t\tInUse: [ false ]\r\n\t\t});\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\tprivate _setupIrrigationMethods(irrigationMethods: LotPlantingIrrigationMethods[]) {\r\n\t\tFormValidation.setValidator(this.f.IrrigationMethods,\r\n\t\t\t[PlantingSettingsValidator.arrayMustContainItem(this.f.IrrigationMethods as FormArray)]);\r\n\r\n\t\tif (!irrigationMethods || irrigationMethods.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tirrigationMethods.forEach(e => {\r\n\t\t\tlet i: number;\r\n\r\n\t\t\t(this.f.IrrigationMethods as FormArray).push(this._constructIrrigationMethodRow(e));\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Based on planting settings, create a row in the form\r\n\t * @param irrigationMethodId\r\n\t * @returns\r\n\t */\r\n\tprivate _constructIrrigationMethodRow(irrigationMethod: LotPlantingIrrigationMethods): FormGroup {\r\n\t\tlet row: FormGroup;\r\n\r\n\t\trow = this._fb.group({\r\n\t\t\tIrrigationMethodId: [ irrigationMethod.IrrigationMethodId ],\r\n\t\t\tInUse: [ irrigationMethod.InUse ]\r\n\t\t})\r\n\r\n\t\tswitch (irrigationMethod.IrrigationMethodId) {\r\n\t\t\tcase eIrrigationMethods.DRIP:\r\n\t\t\t\trow.addControl(this.APPLICATION_RATE, this.f.DripApplicationRate);\r\n\t\t\t\trow.addControl(this.DU, this.f.DripDistUniformPct);\r\n\t\t\t\treturn row;\r\n\t\t\tcase eIrrigationMethods.MICRO_SPRINKLER:\r\n\t\t\t\trow.addControl(this.APPLICATION_RATE, this.f.MicroSprinklerApplicationRate);\r\n\t\t\t\trow.addControl(this.DU, this.f.MicroSprinklerDistUniformityPct);\r\n\t\t\t\treturn row;\r\n\t\t\tcase eIrrigationMethods.FLOOD:\r\n\t\t\t\trow.addControl(this.DU, this.f.FloodDistUniformityPct);\r\n\t\t\t\treturn row;\r\n\t\t\tcase eIrrigationMethods.SPRINKLER:\r\n\t\t\t\trow.addControl(this.APPLICATION_RATE, this.f.SprinklerApplicationRate);\r\n\t\t\t\trow.addControl(this.DU, this.f.SprinklerDistUniformityPct);\r\n\t\t\t\treturn row;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic setupConditionalRules(isTree: boolean, commodityTypeId: number): void {\r\n\r\n\t\tif (isTree || commodityTypeId === eCommodityTypes.ALFALFA) {\r\n\t\t\t// age of crop is used for trees and alfalfa, but not caneberries\r\n\t\t\tthis.f.AgeOfCrop.enable();\r\n\t\t} else {\r\n\t\t\tthis.f.AgeOfCrop.disable();\r\n\t\t}\r\n\r\n\t\tif (isTree) {\r\n\t\t\tthis.f.IsHighVigor.enable();\r\n\r\n\t\t} else {\r\n\t\t\tthis.f.IsHighVigor.disable();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Reload crop type form when user chooses a different crop type\r\n\t * @param ct\r\n\t */\r\n\tpublic reloadCropType(ct: ICropTypeViewModel) {\r\n\t\tthis.f.CropSettings = this._cropSettingsForm.initialize(ct, {\r\n\t\t\tAgeOfCrop: this.f.AgeOfCrop ? this.f.AgeOfCrop.value : null,\r\n\t\t\tIsCoverCropEnabled: this.fc.IsCoverCropEnabled ? this.fc.IsCoverCropEnabled.value : null,\r\n\t\t\tIsStressEnabled: this.fc.IsStressEnabled ? this.fc.IsStressEnabled.value : null,\r\n\t\t\tLeafSenesceDate: this.fc.LeafSenesceDate ? this.fc.LeafSenesceDate.value : null,\r\n\t\t\tPrevCropDays: null,\r\n\t\t\tPreviousCropTypeId: this.fc.PreviousCropTypeId.value,\r\n\t\t\tStressEndDate: this.fc.StressEndDate ? this.fc.StressEndDate.value : null,\r\n\t\t\tStressStartDate: this.fc.StressStartDate ? this.fc.StressStartDate.value : null,\r\n\t\t\tYieldTarget: this.fnc && this.fnc.YieldTarget ? this.fnc.YieldTarget.value : null,\r\n\t\t\tYieldUnitId: this.f.YieldUnitId ? this.f.YieldUnitId.value : null,\r\n\t\t\tWetDateControl: this.f.WetDate,\r\n\t\t\tHarvestDateControl: this.f.HarvestDate\r\n\t\t});\r\n\r\n\t\tthis._blindCropSettingsValueChanges();\r\n\t\tthis.setupConditionalRules(this.fc.IsTree.value, this.fc.CommodityTypeId.value);\r\n\r\n\t\tthis.f.DeficitType.setValue(this._defaultDeficitType ? this._defaultDeficitType :\r\n\t\t\tIrrigationDeficitType.POINT_TO_POINT);\r\n\r\n\t\tif (this.fc.PreviousCropTypeId.value === PREVIOUS_CROP_NO_RESIDUE_ID) {\r\n\t\t\tthis.fc.CropMineralizationRate.setValue(DEFAULT_MINERALIZATION_RATE);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic configureShowObstructionDepthOnLoad() {\r\n\t\tthis.f.ShowObstructionDepth.setValue(this.f.ObstructionDepth.value > 0 ?\r\n\t\t\ttrue : false, { emitEvent: false });\r\n\t}\r\n\r\n\tpublic updateCropTypes(cropTypes: ICropType[]): void {\r\n\t\tthis._cropSettingsForm.cropTypes = cropTypes;\r\n\t}\r\n\r\n\t/**\r\n\t * This validation check triggers if the planting is being edited (already created)\r\n\t * and the commodity type is alfalfa. It prevents the user from choosing a\r\n\t * wet date which falls after existing cut events.\r\n\t * @param fg\r\n\t * @returns\r\n\t */\r\n\tprivate _cutEventsBeforeWetDateMustNotExist(fg: FormGroup): AsyncValidatorFn {\r\n\t\treturn (control: AbstractControl): Observable<{[key: string]: any} | null> => {\r\n\t\t\tif (!fg.get('Id').value) {\r\n\t\t\t\treturn from(of(null).toPromise());\r\n\t\t\t} else if (fg.get('CommodityTypeId').value !== eCommodityTypes.ALFALFA) {\r\n\t\t\t\treturn from(of(null).toPromise());\r\n\t\t\t}\r\n\r\n\t\t\treturn from(this._service.isWetDateValid(fg.get('Id').value, control.value).then((resp) => {\r\n\t\t\t\tlet valid: boolean;\r\n\r\n\t\t\t\tvalid = resp;\r\n\r\n\t\t\t\treturn valid ? null : {'cutEventsBeforeWetDate': {value: control.value}};\r\n\t\t\t}));\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Checks whether coordinates are in states where weather stations and spatial\r\n\t * ET are supported\r\n\t * @param fg\r\n\t * @returns\r\n\t */\r\n\tprivate _coordinatesInSupportedArea(fg: FormGroup): AsyncValidatorFn {\r\n\t\treturn (control: AbstractControl): Observable<{[key: string]: any} | null> => {\r\n\t\t\tlet coordinates: Coordinates;\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tif (this._originalCoordinateString) {\r\n\t\t\t\t// prevent multiple async calls\r\n\t\t\t\tif (this._originalCoordinateString === control.value) {\r\n\t\t\t\t\tif (control.valid || control.pending) {\r\n\t\t\t\t\t\treturn from(of(null).toPromise());\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._originalCoordinateString = control.value;\r\n\t\t\tcoordinates = new Coordinates(control.value);\r\n\r\n\t\t\treturn from(this._service.isLocationValid(coordinates.lat, coordinates.lng,\r\n\t\t\t\tfg.get('IsSpatialEnabled').value).then((resp) => {\r\n\r\n\t\t\t\tif (resp && (resp as CMError).message) {\r\n\t\t\t\t\tvalid = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalid = true;\r\n\t\t\t\t\tthis.coordinateExplanation = resp as string;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn valid ? null : { 'coordinateInvalid': {value: control.value}};\r\n\t\t\t}));\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _bindValueChanges(): void {\r\n\r\n\t\tthis.f.AgeOfCrop.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._cropSettingsForm.updateArrayIndexes(this.f.AgeOfCrop.value);\r\n\t\t});\r\n\r\n\t\tthis.f.CommodityTypeId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.setupConditionalRules(this.fc.IsTree.value, this.f.CommodityTypeId.value);\r\n\t\t});\r\n\r\n\t\tthis.f.Coordinates.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (this.f.Coordinates.value === '') {\r\n\t\t\t\tthis.f.Coordinates.setValue(null, { emitEvent: false});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.f.HarvestDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.f.WetDate.updateValueAndValidity({ emitEvent: false });\r\n\r\n\t\t\tif (this.fc.IsTree.value) {\r\n\t\t\t\tthis._updateLeafSenesce();\r\n\t\t\t}\r\n\r\n\t\t\tthis.mtf.startDate.updateValueAndValidity();\r\n\t\t\tthis.mtf.endDate.updateValueAndValidity();\r\n\t\t});\r\n\r\n\t\tthis.f.WetDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (!this.f.HarvestDate.value) {\r\n\t\t\t\tthis.f.HarvestDate.setValue(Planting.setHarvestDateFromDaysToEndDate(this.fc.DaysToEndDate.value,\r\n\t\t\t\t\tthis.f.WetDate.value, this.fc.IsPerennial.value));\r\n\t\t\t}\r\n\r\n\t\t\tif (this.fc.IsTree.value) {\r\n\t\t\t\tthis._updateLeafSenesce();\r\n\t\t\t}\r\n\r\n\t\t\tthis.mtf.startDate.updateValueAndValidity();\r\n\t\t\tthis.mtf.endDate.updateValueAndValidity();\r\n\t\t});\r\n\r\n\t\tthis.f.ShowObstructionDepth.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (this.f.ShowObstructionDepth.value === false) {\r\n\t\t\t\tthis.f.ObstructionDepth.setValue(null);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _blindCropSettingsValueChanges(): void {\r\n\t\tthis.fc.LeafSenesceDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._onLeafSenesceDateChanged();\r\n\t\t});\r\n\r\n\t\tthis.fc.StressEndDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\t// if the date is changed, update percentage\r\n\t\t\tthis.fc.StressEnd.setValue(Planting.convertDateIntoPercentage(this.f.WetDate.value, this.f.HarvestDate.value,\r\n\t\t\t\tthis.fc.StressEndDate.value), { emitEvent: false });\r\n\r\n\t\t\tthis._form.updateValueAndValidity();\r\n\t\t\tthis.fc.StressStart.updateValueAndValidity();\r\n\t\t});\r\n\r\n\t\tthis.fc.StressStartDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\t// if the date is changed, update stress percentage\r\n\t\t\tthis.fc.StressStart.setValue(Planting.convertDateIntoPercentage(this.f.WetDate.value, this.f.HarvestDate.value,\r\n\t\t\t\tthis.fc.StressStartDate.value), {emitEvent: false});\r\n\r\n\t\t\tthis._form.updateValueAndValidity();\r\n\t\t\tthis.fc.StressEnd.updateValueAndValidity();\r\n\t\t});\r\n\r\n\t\tthis.fc.PerennialRootDepths.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.updateCropTypeRootDepths();\r\n\t\t});\r\n\r\n\t\tthis.fc.PerennialCanopies.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.updateCropTypeCanopies();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _onLeafSenesceDateChanged() {\r\n\t\tthis.fc.LeafSenesce.setValue(Planting.convertDateIntoPercentage(this.f.WetDate.value, this.f.HarvestDate.value,\r\n\t\t\tthis.fc.LeafSenesceDate.value), { emitEvent: false}\r\n\t\t);\r\n\r\n\t\tthis._form.updateValueAndValidity(); // recalculate the form without going into a circular loop, which\r\n\t\t\t// emitEvent prevents\r\n\t}\r\n\r\n\tprivate _updateLeafSenesce() {\r\n\t\tthis.fc.LeafSenesceDate.setValue(Planting.convertPercentageIntoDate(this.f.WetDate.value, this.f.HarvestDate.value,\r\n\t\t\tthis.fc.LeafSenesce.value), { emitEvent: false });\r\n\r\n\t\tthis._form.updateValueAndValidity();\r\n\t}\r\n\r\n\t/**\r\n\t * note: this method guarantees that the stress start/end dates are within date range,\r\n\t * as long as the stressStart and stressEnd values are valid\r\n\t *\r\n\t * Warning: No longer doing this because there are too many possibilities for error\r\n\t */\r\n\tprivate _updateStressDates() {\r\n\t\tif (!this.fc.StressStart || !this.fc.StressEnd) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.fc.StressStartDate.value || this.fc.StressEndDate.value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.f.WetDate.value || !this.f.HarvestDate.value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.fc.StressStartDate.setValue(\r\n\t\t\tPlanting.convertPercentageIntoDate(this.f.WetDate.value, this.f.HarvestDate.value,\r\n\t\t\t\tthis.fc.StressStart.value), { emitEvent: false }\r\n\t\t);\r\n\r\n\t\tthis.fc.StressEndDate.setValue(\r\n\t\t\tPlanting.convertPercentageIntoDate(this.f.WetDate.value, this.f.HarvestDate.value,\r\n\t\t\t\tthis.fc.StressEnd.value), { emitEvent: false }\r\n\t\t);\r\n\r\n\t\tthis.fc.StressEndDate.updateValueAndValidity();\r\n\t\tthis.fc.StressEndDate.markAsTouched();\r\n\r\n\t\tthis.fc.StressStartDate.updateValueAndValidity();\r\n\t\tthis.fc.StressStartDate.markAsTouched();\r\n\t}\r\n\r\n\t/**\r\n     * Use perennialRootDepth array and age to update CropTypeViewModel, for saving\r\n     */\r\n\tpublic updateCropTypeRootDepths(): void {\r\n\t\tlet rootDepth: AbstractControl;\r\n\r\n\t\tif (this.fc.RootDepthIndex.value === null ||\r\n\t\t\tthis.fc.PerennialRootDepths === null) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\trootDepth = (this.fc.PerennialRootDepths as FormArray).\r\n\t\t\tcontrols[this.fc.RootDepthIndex.value];\r\n\r\n\t\tif (!rootDepth) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.fc.MaxRootDepth.setValue(rootDepth.get('Max').value);\r\n\t\tthis.fc.MinRootDepth.setValue(rootDepth.get('Min').value);\r\n\t}\r\n\r\n\t/**\r\n\t * Use perennialCanopies array and age to update CropTypeViewModel, for saving\r\n\t */\r\n\tpublic updateCropTypeCanopies(): void {\r\n\t\tlet match: AbstractControl;\r\n\r\n\t\tif (this.fc.PerennialCanopyIndex.value === null ||\r\n\t\t\tthis.fc.PerennialCanopies === null) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmatch = (this.fc.PerennialCanopies as FormArray).\r\n\t\t\tcontrols[this.fc.PerennialCanopyIndex.value];\r\n\r\n\t\tif (!match) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.fc.CanopyA.setValue(match.get('CanopyA').value);\r\n\t\tthis.fc.CanopyB.setValue(match.get('CanopyB').value);\r\n\t\tthis.fc.CanopyE.setValue(match.get('CanopyE').value);\r\n\t\tthis.fc.CanopyMaxFraction.setValue(match.get('CanopyMaxFraction').value);\r\n\t\tthis.fc.CanopyGMax.setValue(match.get('CanopyGMax').value);\r\n\t}\r\n}\r\n","import { eCommodityTypes, eNotificationTypes } from '../../interfaces/constants';\r\nimport { TranslatePipe } from '../../pipes/translate.pipe';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { CropTypeFormFields } from '../crop-types/cropTypeFormBuilder';\r\nimport { errorLookupMap, PSView } from './errorFieldLookupTable';\r\nimport { PlantingSettingFields } from './plantingSettingFields';\r\nimport { MacroTunnelFields } from './sections/macro-tunnel-form';\r\n\r\nexport class PlantingValidationNotifier {\r\n\tprivate _form: FormGroup;\r\n\tprivate _service: NotificationService;\r\n\tprivate _translatePipe: TranslatePipe;\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this._form.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this._form.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get mtf(): { [key in MacroTunnelFields]: AbstractControl } {\r\n\t\treturn (this._form.get('MacroTunnelSettings') as FormGroup).controls as { [key in MacroTunnelFields]: AbstractControl };\r\n\t}\r\n\r\n\t/**\r\n\t * constructor\r\n\t * @param form\r\n\t * @param notificationService\r\n\t * @param translateService optional during unit testing\r\n\t */\r\n\tconstructor(form: FormGroup, notificationService: NotificationService,\r\n\t\ttranslateService: TranslatePipe = null) {\r\n\t\tthis._form = form;\r\n\t\tthis._service = notificationService;\r\n\t\tthis._translatePipe = translateService;\r\n\t}\r\n\r\n\t/**\r\n\t * Notifies the user of validation errors using natural language\r\n\t * This method does not perform any validation\r\n\t * @returns\r\n\t */\r\n\tpublic notify(): void {\r\n\t\tlet message: string;\r\n\r\n\t\tmessage = this._getIssueString();\r\n\r\n\t\tif (message) {\r\n\t\t\tthis._service.generateNotifcation({\r\n\t\t\t\ttype: eNotificationTypes.ERROR,\r\n\t\t\t\tmessage: message\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getIssueString(): string {\r\n\t\tlet result: string;\r\n\r\n\t\tif (this.f.CropTypeId.invalid) {\r\n\t\t\treturn 'Crop Type is invalid';\r\n\t\t} else if (this.f.HarvestDate.invalid) {\r\n\t\t\treturn this._getHarvestDateTranslation() + ' is invalid';\r\n\t\t} else if (this.f.WetDate.invalid) {\r\n\t\t\treturn this._getWetDateTranslation() + ' is invalid';\r\n\t\t} else if (this.fc.PrevCropDays.invalid && this.fc.PrevCropDays.errors.mustBeAnInteger) {\r\n\t\t\treturn 'In crop settings, Previous Crop Days field must be an integer instead of a decimal';\r\n\t\t}\r\n\r\n\t\tresult = this.getFormIssueString(this._form);\r\n\r\n\t\tif (result) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getHarvestDateTranslation(): string {\r\n\t\tif (this.fc.IsPerennial.value && this.f.CommodityTypeId.value !== eCommodityTypes.ALFALFA) {\r\n\t\t\treturn 'End of Season Date';\r\n\t\t} else if (!this.fc.IsPerennial.value) {\r\n\t\t\treturn 'Harvest Date';\r\n\t\t} else if (this.f.CommodityTypeId.value === eCommodityTypes.ALFALFA) {\r\n\t\t\treturn 'End Date';\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getWetDateTranslation(): string {\r\n\t\tif (!this.fc.IsPerennial.value) {\r\n\t\t\treturn 'Wet Date';\r\n\t\t} else if (this.f.CommodityTypeId.value !== eCommodityTypes.ALFALFA) {\r\n\t\t\treturn 'Leaf Out Date';\r\n\t\t} else {\r\n\t\t\treturn 'Start Date';\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Translate form field using localization dictionary\r\n\t * @param field form field name\r\n\t * @returns translated field name\r\n\t */\r\n\tprivate _translateField(field: string): string {\r\n\t\tlet result: string;\r\n\t\tlet location: string;\r\n\r\n\t\tlocation = '';\r\n\r\n\t\tif (errorLookupMap.get(field)) {\r\n\t\t\tif (errorLookupMap.get(field).LocationId) {\r\n\t\t\t\tswitch (errorLookupMap.get(field).LocationId) {\r\n\t\t\t\t\tcase PSView.SOIL_SETTINGS:\r\n\t\t\t\t\t\tlocation = 'soil settings';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase PSView.IRRIGATION_SETTINGS:\r\n\t\t\t\t\t\tlocation = 'irrigation settings';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult = errorLookupMap.get(field).Title;\r\n\t\t\t} else {\r\n\t\t\t\tlocation = 'crop settings';\r\n\t\t\t\tresult = errorLookupMap.get(field).Title;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tresult = field;\r\n\t\t}\r\n\r\n\t\tresult = this._translatePipe ? this._translatePipe.transform(result) : result;\r\n\r\n\t\tif (location) {\r\n\t\t\tresult = result + ' in ' + location;\r\n\t\t}\r\n\r\n\t\treturn result;\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 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 fieldLabel: string;\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\tif (control.errors) {\r\n\t\t\t\t\tfieldLabel = this._translateField(field);\r\n\r\n\t\t\t\t\tif (control.errors.required) {\r\n\t\t\t\t\t\treturn fieldLabel + ' is required.';\r\n\t\t\t\t\t} else if (control.errors.requiredForPerennials) {\r\n\t\t\t\t\t\treturn fieldLabel + ' is required for perennial crops.';\r\n\t\t\t\t\t} else if (control.errors.stressDatesOutOfSequence) {\r\n\t\t\t\t\t\treturn fieldLabel + ' date is out of sequence.';\r\n\t\t\t\t\t} else if (control.errors.validDefaultCropTypeId) {\r\n\t\t\t\t\t\treturn fieldLabel + ' is invalid. The chosen crop type is not a valid choice.';\r\n\t\t\t\t\t} else if (control.errors.numberGreaterThan) {\r\n\t\t\t\t\t\treturn fieldLabel + ' must be greater than ' +\r\n\t\t\t\t\t\t\tcontrol.errors.numberGreaterThan.target + '.';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fieldLabel + ' is invalid.';\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn fieldLabel + ' is invalid.';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","<h4 class=\"bk-modal__section-title\">\r\n    {{'Crop Settings' | translate }}\r\n</h4>\r\n\r\n<div class=\"bk-planting-modal__crop-settings-links\">\r\n    <a  href=\"javascript:void(0);\"\r\n        (click)=\"toggleShowAdvancedCropSettings($event)\">\r\n\r\n        {{(showAdvancedCropSettings ? 'Hide All Settings' : 'Show All Settings') | translate }}\r\n\r\n        <i class=\"fa bk-modal__dropdown-link-icon\"\r\n            [ngClass]=\"{'fa-angle-down' : !showAdvancedCropSettings,\r\n            'fa-angle-up': showAdvancedCropSettings }\">\r\n        </i>\r\n    </a>\r\n</div>\r\n\r\n<form *ngIf=\"form\" [formGroup]=\"form\">\r\n    <ng-container *ngIf=\"f.IsNDependent.value\">\r\n\r\n        <div class=\"bk-seasonal-n-calculator\"\r\n            *ngIf=\"f.IsTree.value\">\r\n\r\n            <div class=\"bk-clearfix bk-seasonal-n-calculator__divider\"></div>\r\n\r\n            <n-calculator [plantingSettingsForm]=\"parentForm\"\r\n                [form]=\"nCalculatorForm\"\r\n                [calculatorSettings]=\"calculatorSettings\">\r\n            </n-calculator>\r\n            \r\n        </div> <!-- almond calculator UI FINISH -->\r\n\r\n        <ng-container *ngIf=\"!f.IsTree.value\">\r\n\r\n            <div class=\"bk-modal__section-subtitle bk-clearfix\">\r\n                {{'N Uptake Factors' | translate }}\r\n            </div>\r\n\r\n            <div class=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Crop Total N Uptake' | translate }} \r\n                    <info-icon [title]=\"'Crop Total N Uptake Help Text'\"></info-icon>\r\n                </label>\r\n\r\n                <input class=\"bk-field--has-calculation bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"MaxUptake\"\r\n                    required\r\n                    name=\"MaxUptake\"/>\r\n                \r\n                <i *ngIf=\"f.UptakeFactor.value > 0\"\r\n                    class=\"bk-calculation-icon fa fa-calculator\"\r\n                    (click)=\"openMaxUptakeCalculator($event)\"></i>\r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                </div>\r\n                <div *ngIf=\"f.MaxUptake.invalid && (f.MaxUptake.dirty || f.MaxUptake.touched)\"\r\n                    class=\"bk-invalid-field\">{{'Field is required' | translate }}\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"bk-modal__right-two-col\">\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Maximum N Recommendation' | translate }} \r\n                    <info-icon [title]=\"'Maximum N Recommendation Help Text'\"></info-icon>\r\n                </label>\r\n\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"MaxNRec\"\r\n                    required\r\n                    minNumber=\"0.01\"\r\n                    name=\"MaxNRec\"/>\r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                </div>\r\n\r\n                <div *ngIf=\"f.MaxNRec.invalid && (f.MaxNRec.dirty || f.MaxNRec.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required and must be greater than 0' | translate }}\r\n                </div>\r\n            </div>\r\n        </ng-container>\r\n\r\n        <!--- AlL SETTINGS section -->\r\n\r\n        <ng-container *ngIf=\"showAdvancedCropSettings\">\r\n\r\n            <ng-container *ngIf=\"f.IsTree.value\">\r\n\r\n                <ng-container *ngIf=\"cCalc !== calculatorEnum.PISTACHIO\">\r\n                    <div class=\"bk-modal__section-subtitle bk-clearfix\">\r\n                        {{'Additional Tree N Parameters' | translate }}\r\n                    </div>\r\n\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'Inadequate Summer Leaf N' | translate }}\r\n                        <info-icon [title]=\"'Inadequate Summer Leaf N Help Text'\"></info-icon>\r\n                    </label>\r\n        \r\n                    <input class=\"bk-input--short bk-modal__field bk-modal__field--with-unit\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        required\r\n                        formControlName=\"InadequateSummerLeafN\"\r\n                        name=\"InadequateSummerLeafN\"/>\r\n        \r\n                    <div class=\"bk-modal__field-unit\">\r\n                        (%)\r\n                    </div>\r\n        \r\n                    <div *ngIf=\"f.InadequateSummerLeafN.invalid &&\r\n                        (f.InadequateSummerLeafN.dirty ||\r\n                        f.InadequateSummerLeafN.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n        \r\n                    <label class=\"bk-modal__label\">\r\n                        {{'Excessive Summer Leaf N' | translate }}\r\n                        <info-icon [title]=\"'Excessive Summer Leaf N Help Text'\"></info-icon>\r\n                    </label>\r\n        \r\n                    <input class=\"bk-input--short bk-modal__field bk-modal__field--with-unit\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"ExcessiveSummerLeafN\"\r\n                        required\r\n                        name=\"ExcessiveSummerLeafN\"/>\r\n        \r\n                    <div class=\"bk-modal__field-unit\">\r\n                        (%)\r\n                    </div>\r\n        \r\n                    <div *ngIf=\"f.ExcessiveSummerLeafN.invalid &&\r\n                        (f.ExcessiveSummerLeafN.dirty ||\r\n                        f.ExcessiveSummerLeafN.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n                </ng-container>                \r\n\r\n    \r\n                <label class=\"bk-modal__label\">\r\n                    {{'Leaf N Fertilizer Adjustment' | translate }}\r\n                    <info-icon [title]=\"'Leaf N Fertilizer Adjustment Help Text'\"></info-icon>\r\n                </label>\r\n    \r\n                <input class=\"bk-input--short bk-modal__field bk-modal__field--with-unit\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"NFertilizerAdjustment\"\r\n                    required\r\n                    name=\"NFertilizerAdjustment\"/>\r\n    \r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                </div>\r\n    \r\n                <div *ngIf=\"f.NFertilizerAdjustment.invalid &&\r\n                    (f.NFertilizerAdjustment.dirty ||\r\n                    f.NFertilizerAdjustment.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n    \r\n                <label class=\"bk-modal__label\">\r\n                    {{'Fertilizer N Use Efficiency' | translate }}\r\n                    <info-icon [title]=\"'Fertilizer N Use Efficiency Help Text'\"></info-icon>\r\n                </label>\r\n    \r\n                <input class=\"bk-input--short bk-modal__field bk-modal__field--with-unit\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"FertilizerUseEfficiency\"\r\n                    required\r\n                    name=\"FertilizerUseEfficiency\"/>\r\n    \r\n                <div class=\"bk-modal__field-unit\">\r\n                    (%)\r\n                </div>\r\n    \r\n                <div *ngIf=\"f.FertilizerUseEfficiency.invalid &&\r\n                    (f.FertilizerUseEfficiency.dirty ||\r\n                    f.FertilizerUseEfficiency.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n\r\n                <div class=\"bk-form-group\" *ngIf=\"f.VegetativeNDemands &&\r\n                    f.VegetativeIndex.value !== null\">\r\n                    <div *ngIf=\"!pf.IsHighVigor.value\"\r\n                        class=\"bk-modal__right-four-col\">\r\n\r\n                        <label class=\"bk-modal__label\">\r\n                            {{'Low Vigor' | translate }}\r\n                            <info-icon [title]=\"'Vigor Help Text'\"></info-icon>\r\n                        </label>\r\n    \r\n                        <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                            type=\"number\"\r\n                            step=\"0.01\"\r\n                            [formControl]=\"f.VegetativeNDemands.controls[f.VegetativeIndex.value].get('Low')\"\r\n                            required\r\n                            name=\"VigorLow\"/>\r\n                    </div>\r\n                    <div *ngIf=\"pf.IsHighVigor.value\"\r\n                        class=\"bk-modal__right-four-col\">\r\n\r\n                        <label class=\"bk-modal__label\">\r\n                            {{'High Vigor' | translate }}\r\n                            <info-icon [title]=\"'High Vigor Help Text'\"></info-icon>\r\n                        </label>\r\n            \r\n                        <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                            type=\"number\"\r\n                            step=\"0.01\"\r\n                            [formControl]=\"f.VegetativeNDemands.controls[f.VegetativeIndex.value].get('High')\"\r\n                            required\r\n                            name=\"VigorHigh\"/>\r\n                    </div>\r\n                </div>\r\n\r\n                <div class=\"bk-form-group\"\r\n                    *ngIf=\"f.ShouldShowTreeCoefficients.value && isAdmin\">\r\n\r\n                    <div class=\"bk-modal__section-subtitle bk-clearfix\">\r\n                        {{'Tree Coefficients' | translate }}\r\n                    </div>\r\n\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'Intercept' | translate }}\r\n                        <info-icon [title]=\"'Tree Intercept Help Text'\"></info-icon>\r\n                    </label>\r\n        \r\n                    <input class=\"bk-input--short bk-modal__field bk-modal__field--with-unit\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"TreeInterceptCoefficient\"\r\n                        required\r\n                        name=\"TreeInterceptCoefficient\"/>\r\n        \r\n                    <div *ngIf=\"f.TreeInterceptCoefficient.invalid &&\r\n                        (f.TreeInterceptCoefficient.dirty ||\r\n                        f.TreeInterceptCoefficient.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'Spring Leaf N' | translate }}\r\n                        <info-icon [title]=\"'Tree Leaf N Help Text'\"></info-icon>\r\n                    </label>\r\n        \r\n                    <input class=\"bk-input--short bk-modal__field bk-modal__field--with-unit\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"TreeLeafNCoefficient\"\r\n                        required\r\n                        name=\"TreeLeafNCoefficient\"/>\r\n        \r\n                    <div *ngIf=\"f.TreeLeafNCoefficient.invalid &&\r\n                        (f.TreeLeafNCoefficient.dirty ||\r\n                        f.TreeLeafNCoefficient.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'ilr4' | translate }}\r\n                        <info-icon [title]=\"'ilr4 Help Text'\"></info-icon>\r\n                    </label>\r\n        \r\n                    <input class=\"bk-input--short bk-modal__field bk-modal__field--with-unit\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"TreeIlr4Coefficient\"\r\n                        required\r\n                        name=\"TreeIlr4Coefficient\"/>\r\n        \r\n                    <div *ngIf=\"f.TreeIlr4Coefficient.invalid &&\r\n                        (f.TreeIlr4Coefficient.dirty ||\r\n                        f.TreeIlr4Coefficient.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'ilr8' | translate }}\r\n                        <info-icon [title]=\"'ilr8 Help Text'\"></info-icon>\r\n                    </label>\r\n        \r\n                    <input class=\"bk-input--short bk-modal__field bk-modal__field--with-unit\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"TreeIlr8Coefficient\"\r\n                        required\r\n                        name=\"TreeIlr8Coefficient\"/>\r\n        \r\n                    <div *ngIf=\"f.TreeIlr8Coefficient.invalid &&\r\n                        (f.TreeIlr8Coefficient.dirty ||\r\n                        f.TreeIlr8Coefficient.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'ilr4 X ilr8' | translate }}\r\n                        <info-icon [title]=\"'ilr8 Product Help Text'\"></info-icon>\r\n                    </label>\r\n        \r\n                    <input class=\"bk-input--short bk-modal__field bk-modal__field--with-unit\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"TreeIlrProductCoefficient\"\r\n                        required\r\n                        name=\"TreeIlrProductCoefficient\"/>\r\n        \r\n                    <div *ngIf=\"f.TreeIlr8Coefficient.invalid &&\r\n                        (f.TreeIlr8Coefficient.dirty ||\r\n                        f.TreeIlr8Coefficient.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n                </div>\r\n\r\n                <table class=\"bk-form__table\"\r\n                    *ngIf=\"fnc.TreeNutrientThresholds.controls.length > 0\">\r\n                    <thead>\r\n                        <th>\r\n                            &nbsp;\r\n                        </th>\r\n                        <th>\r\n                            {{ 'Default' | translate }}\r\n                        </th>\r\n                        <th>\r\n                            {{ 'Threshold' | translate }}\r\n                        </th>\r\n                    </thead>\r\n                    <tbody>\r\n                        <tr *ngFor=\"let threshold of fnc.TreeNutrientThresholds.controls; let i = index\">\r\n                            <td>\r\n                                <label>\r\n                                    {{ threshold.get('NutrientSymbol').value }} ({{ threshold.get('NutrientUnit').value }})\r\n                                </label>\r\n                            </td>\r\n                            <td>\r\n                                <input class=\"bk-form__input-text--float\"\r\n                                    type=\"number\"\r\n                                    name=\"treeNutrientThresholdSeasonAverage{{i}}\"\r\n                                    [formControl]=\"threshold.get('SeasonAverage')\" />\r\n                            </td>\r\n                            <td>\r\n                                <input class=\"bk-form__input-text--float\"\r\n                                    type=\"number\"\r\n                                    name=\"treeNutrientThresholdThreshold{{i}}\"\r\n                                    [formControl]=\"threshold.get('Threshold')\" />\r\n                            </td>\r\n                        </tr>\r\n                    </tbody>\r\n                </table>\r\n                <table class=\"bk-form__table\"\r\n                    *ngIf=\"cCalc === calculatorEnum.ALMOND &&\r\n                    fnc.TreeNutrientThresholds.controls.length > 0\">\r\n                    <thead>\r\n                        <th>\r\n                            &nbsp;\r\n                        </th>\r\n                        <th>\r\n                            {{ 'Factor' | translate }}\r\n                        </th>\r\n                        <th>\r\n                            {{ 'Coefficient A' | translate }}\r\n                        </th>\r\n                        <th>\r\n                            {{ 'Coefficient B' | translate }}\r\n                        </th>\r\n                    </thead>\r\n                    <tbody>\r\n                        <ng-container *ngFor=\"let threshold of fnc.TreeNutrientThresholds.controls; let i = index\">\r\n                            <tr *ngIf=\"threshold.get('NutrientSymbol').value !== 'P' &&\r\n                                threshold.get('NutrientSymbol').value !== 'S'\">\r\n                                <td>\r\n                                    <label>\r\n                                        {{ threshold.get('NutrientSymbol').value }} ({{ threshold.get('NutrientUnit').value }})\r\n                                    </label>\r\n                                </td>\r\n                                <td>\r\n                                    <input class=\"bk-form__input-text--float\"\r\n                                        type=\"number\"\r\n                                        name=\"treeNutrientThresholdTissueFactor{{i}}\"\r\n                                        [formControl]=\"threshold.get('TissueFactor')\" />\r\n                                </td>\r\n                                <td>\r\n                                    <input class=\"bk-form__input-text--float\"\r\n                                        type=\"number\"\r\n                                        name=\"treeNutrientThresholdTissueCoefficientA{{i}}\"\r\n                                        [formControl]=\"threshold.get('TissueCoefficientA')\" />\r\n                                </td>\r\n                                <td>\r\n                                    <ng-container *ngIf=\"threshold.get('NutrientSymbol').value === 'N'\">\r\n                                        <input class=\"bk-form__input-text--float\"\r\n                                            type=\"number\"\r\n                                            name=\"treeNutrientThresholdTissueCoefficientB{{i}}\"\r\n                                            [formControl]=\"threshold.get('TissueCoefficientB')\" />\r\n                                    </ng-container> \r\n                                </td>\r\n                            </tr>\r\n                        </ng-container>\r\n                    </tbody>\r\n                </table>\r\n            </ng-container>\r\n\r\n            <div *ngIf='f.IsTree.value'\r\n                class=\"bk-modal__section-subtitle bk-clearfix\">\r\n                {{'N Uptake Factors' | translate }}\r\n            </div>\r\n\r\n            <div class=\"bk-form-group\">\r\n                <div class=\"bk-modal__right-four-col\">\r\n\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'N Uptake Coef.' | translate }} A \r\n                        <info-icon [title]=\"'N Uptake Coef A Help Text'\"></info-icon>\r\n                    </label>\r\n\r\n                    <input class=\"bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"FertA\"\r\n                        required\r\n                        name=\"FertA\"/>\r\n                    <div *ngIf=\"f.FertA.invalid && (f.FertA.dirty || f.FertA.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n\r\n                </div>\r\n                <div class=\"bk-modal__right-four-col\">\r\n\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'N Uptake Coef.' | translate }} B \r\n                        <info-icon [title]=\"'N Uptake Coef B Help Text'\"></info-icon>\r\n                    </label>\r\n\r\n                    <input class=\"bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"FertB\"\r\n                        required\r\n                        name=\"FertB\" />\r\n                    <div *ngIf=\"f.FertB.invalid && (f.FertB.dirty || f.FertB.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n\r\n                </div>\r\n                <div class=\"bk-modal__right-four-col\">\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'N Uptake Coef.' | translate }} Yo \r\n                        <info-icon [title]=\"'N Uptake Coef Yo Help Text'\"></info-icon>\r\n                    </label>\r\n\r\n                    <input class=\"bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"FertYo\"\r\n                        required\r\n                        name=\"FertYo\"/>\r\n                    <div *ngIf=\"f.FertYo.invalid && (f.FertYo.dirty || f.FertYo.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"bk-form-group\" *ngIf=\"!this.f.IgnoresNFactors.value\">\r\n                <div class=\"bk-modal__right-four-col\">\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'N Fertilizer Factor' | translate }} A \r\n                        <info-icon [title]=\"'N Fertilizer Factor A Help Text'\"></info-icon>\r\n                    </label>\r\n                    <input class=\"bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"NFertilizerFactorA\"\r\n                        required\r\n                        name=\"NFertilizerFactorA\"/>\r\n\r\n                    <div *ngIf=\"f.NFertilizerFactorA.invalid &&\r\n                        (f.NFertilizerFactorA.dirty || f.NFertilizerFactorA.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"bk-modal__right-four-col\">\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'N Fertilizer Factor' | translate }} B \r\n                        <info-icon [title]=\"'N Fertilizer Factor B Help Text'\"></info-icon>\r\n                    </label>\r\n                    <input class=\"bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"NFertilizerFactorB\"\r\n                        required\r\n                        name=\"NFertilizerFactorB\"/>\r\n                    <div *ngIf=\"f.NFertilizerFactorB.invalid &&\r\n                        (f.NFertilizerFactorB.dirty || f.NFertilizerFactorB.touched)\"\r\n                        class=\"bk-invalid-field\">{{'Field is required' | translate }}</div>\r\n                </div>\r\n                <div class=\"bk-modal__right-four-col\">\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'N Fertilizer Factor' | translate }} C \r\n                        <info-icon [title]=\"'N Fertilizer Factor C Help Text'\"></info-icon>\r\n                    </label>\r\n                    <input class=\"bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"NFertilizerFactorC\"\r\n                        required\r\n                        name=\"NFertilizerFactorC\" />\r\n                    <div *ngIf=\"f.NFertilizerFactorC.invalid &&\r\n                        (f.NFertilizerFactorC.dirty || f.NFertilizerFactorC.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"bk-modal__right-four-col\">\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'N Fertilizer Factor' | translate }} D \r\n                        <info-icon [title]=\"'N Fertilizer Factor D Help Text'\"></info-icon>\r\n                    </label>\r\n                    <input class=\"bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"NFertilizerFactorD\"\r\n                        required\r\n                        name=\"NFertilizerFactorD\" />\r\n                    <div *ngIf=\"f.NFertilizerFactorD.invalid &&\r\n                        (f.NFertilizerFactorD.dirty || f.NFertilizerFactorD.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <ng-container *ngIf=\"f.IsTree.value\">\r\n                <div class=\"bk-modal__right-two-col\">\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'Maximum N Recommendation' | translate }} \r\n                        <info-icon [title]=\"'Maximum N Recommendation Help Text'\"></info-icon>\r\n                    </label>\r\n    \r\n                    <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"MaxNRec\"\r\n                        required\r\n                        minNumber=\"0.01\"\r\n                        name=\"MaxNRec\"/>\r\n                    <div class=\"bk-modal__field-unit\">\r\n                        {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                    </div>\r\n    \r\n                    <div *ngIf=\"f.MaxNRec.invalid && (f.MaxNRec.dirty ||\r\n                        f.MaxNRec.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required and must be greater than 0' | translate }}\r\n                    </div>\r\n                </div>\r\n            </ng-container>\r\n\r\n            <div class=\"bk-form-group\" *ngIf=\"!this.f.IgnoresNFactors.value\">\r\n                <div class=\"bk-modal__right-four-col\">\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'Soil N Ratio' | translate }} A \r\n                        <info-icon [title]=\"'Soil N Ratio A Help Text'\"></info-icon>\r\n                    </label>\r\n                    <input class=\"bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"SoilNRatioA\"\r\n                        required\r\n                        name=\"SoilNRatioA\" />\r\n                    <div *ngIf=\"f.SoilNRatioA.invalid && (f.SoilNRatioA.dirty ||\r\n                        f.SoilNRatioA.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"bk-modal__right-four-col\">\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'Soil N Ratio' | translate }} B \r\n                        <info-icon [title]=\"'Soil N Ratio B Help Text'\"></info-icon>\r\n                    </label>\r\n                    <input class=\"bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"SoilNRatioB\"\r\n                        required\r\n                        name=\"SoilNRatioB\" />\r\n                    <div *ngIf=\"f.SoilNRatioB.invalid && (f.SoilNRatioB.dirty ||\r\n                        f.SoilNRatioB.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"bk-modal__right-four-col\">\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'Soil N Ratio' | translate }} C \r\n                        <info-icon [title]=\"'Soil N Ratio C Help Text'\"></info-icon>\r\n                    </label>\r\n                    <input class=\"bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"SoilNRatioC\"\r\n                        required\r\n                        name=\"SoilNRatioC\" />\r\n                    <div *ngIf=\"f.SoilNRatioC.invalid && (f.SoilNRatioC.dirty ||\r\n                        f.SoilNRatioC.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"bk-form-group\"\r\n                *ngIf='cCalc === calculatorEnum.STRAWBERRY ||\r\n                cCalc === calculatorEnum.TOMATO'>\r\n                <div class=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'N Uptake Threshold' | translate }} \r\n                        <info-icon [title]=\"'N Uptake Threshold Help Text'\"></info-icon>\r\n                    </label>\r\n                    <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"NUptakeThreshold\"\r\n                        required\r\n                        name=\"NUptakeThreshold\" />\r\n                    <div class=\"bk-modal__field-unit\">\r\n                        {{'lbs' | translate }} N/{{'day' | translate }}\r\n                    </div>\r\n                    <div *ngIf=\"f.NUptakeThreshold.invalid && (f.NUptakeThreshold.dirty ||\r\n                        f.NUptakeThreshold.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"bk-modal__right-two-col\">\r\n                    <label class=\"bk-modal__label\">\r\n                        {{'Fertilization Interval' | translate }} \r\n                        <info-icon [title]=\"'Fertilization Interval Help Text'\"></info-icon>\r\n                    </label>\r\n                    <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                        type=\"number\"\r\n                        step=\"0.01\"\r\n                        formControlName=\"StrawberryFertilizationInterval\"\r\n                        required\r\n                        minNumber=\"0.01\"\r\n                        name=\"StrawberryFertilizationInterval\" />\r\n                    <div class=\"bk-modal__field-unit\">\r\n                        {{'days' | translate }}\r\n                    </div>\r\n                    <div *ngIf=\"f.StrawberryFertilizationInterval.invalid &&\r\n                        (f.StrawberryFertilizationInterval.dirty ||\r\n                        f.StrawberryFertilizationInterval.touched)\"\r\n                        class=\"bk-invalid-field\">\r\n                        {{'Field is required' | translate }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"bk-form-group\">\r\n                \r\n                <label class=\"bk-modal__label\">\r\n                    {{ !f.IsTree.value ? ('Crop Max N Uptake slope factor' | translate) :\r\n                        ('Crop N Uptake' | translate) }} \r\n                    <info-icon [title]=\"'Crop Max N Uptake slope factor Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"UptakeFactor\"\r\n                    required\r\n                    name=\"UptakeFactor\"/>\r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'lbs' | translate }} N/{{'acre' | translate }}/\r\n                    <span *ngIf=\"!f.IsStressable.value\">\r\n                        {{'lbs' | translate }}\r\n                    </span>\r\n                    <span *ngIf=\"f.IsStressable.value\">\r\n                        {{'ton' | translate}}\r\n                    </span> {{'of marketable yield' | translate }}\r\n                </div>\r\n                <div *ngIf=\"f.UptakeFactor.invalid && (f.UptakeFactor.dirty ||\r\n                    f.UptakeFactor.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"bk-form-group\">\r\n                <ng-container *ngIf='!f.IsTree.value'>\r\n                    <div class=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n                        <label class=\"bk-modal__label\">\r\n                            {{'Crop Max N Uptake constant' | translate }} \r\n                            <info-icon [title]=\"'Crop Max N Uptake constant Help Text'\"></info-icon>\r\n                        </label>\r\n                        <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                            type=\"number\"\r\n                            step=\"0.01\"\r\n                            formControlName=\"UptakeConstant\"\r\n                            required\r\n                            name=\"UptakeConstant\" />\r\n                        <div class=\"bk-modal__field-unit\">\r\n                            {{'lbs' | translate }} N/{{'acre' | translate }}\r\n                        </div>\r\n                        <div *ngIf=\"f.UptakeConstant.invalid && (f.UptakeConstant.dirty ||\r\n                            f.UptakeConstant.touched)\"\r\n                            class=\"bk-invalid-field\">\r\n                            {{'Field is required' | translate }}\r\n                        </div>\r\n                    </div>\r\n                </ng-container>\r\n            </div>\r\n        </ng-container>\r\n\r\n    </ng-container>\r\n\r\n    <!-- previous crop -->\r\n    <div class=\"bk-form-group\" *ngIf=\"!f.IsTree.value && f.IsNDependent.value\">\r\n        <div class=\"bk-modal__section-subtitle\">{{ 'Previous Crop' | translate }} {{ 'Settings' | translate }}</div>\r\n        <label class=\"bk-modal__label\">\r\n            {{'Previous Crop' | translate }}\r\n            <info-icon [title]=\"'Planting setting: Soil Setting: Previous Crop Text'\"></info-icon>\r\n        </label>\r\n        <select class=\"bk-modal__field\"\r\n            name=\"PreviousCropTypeId\"\r\n            formControlName=\"PreviousCropTypeId\">\r\n            <option [ngValue]=\"residue_id\" selected>\r\n                {{'Select One' | translate}}\r\n            </option>\r\n            <ng-container *ngFor=\"let prevCropType of previousCropTypes\">\r\n                <option [ngValue]=\"prevCropType.Id\">\r\n                    {{prevCropType.Name | translate }}\r\n                </option>\r\n            </ng-container>\r\n        </select>\r\n    </div>\r\n\r\n    <ng-container *ngIf='!f.IsTree.value && f.IsNDependent.value\r\n        && showAdvancedCropSettings'>\r\n        <div *ngIf=\"f.PreviousCropTypeId.value && f.PreviousCropTypeId.value !== residue_id\"\r\n            class=\"bk-modal__right-two-col\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Initial Crop Mineralization Rate' | translate }} \r\n                <info-icon [title]=\"'Initial Crop Mineralization Rate Help Text'\"></info-icon>\r\n            </label>\r\n            <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"CropMineralizationRate\"\r\n                required\r\n                name=\"CropMineralizationRate\"/>\r\n            <div class=\"bk-modal__field-unit\">\r\n                {{'lbs' | translate }} N/{{'acre' | translate }}/{{'day' | translate }}\r\n            </div>\r\n            <div *ngIf=\"f.CropMineralizationRate.invalid &&\r\n                (f.CropMineralizationRate.dirty || f.CropMineralizationRate.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Field is required' | translate }}\r\n            </div>\r\n        </div>\r\n\r\n        <div *ngIf=\"f.PreviousCropTypeId.value && f.PreviousCropTypeId.value !== residue_id\" \r\n            class=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Previous Crop K' | translate }} \r\n                <info-icon [title]=\"'PrevCropK Help Text'\"></info-icon>\r\n            </label>\r\n            <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"PrevCropK\"\r\n                required\r\n                name=\"PrevCropK\"/>\r\n            <div *ngIf=\"f.PrevCropK.invalid && (f.PrevCropK.dirty ||\r\n                f.PrevCropK.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Field is required' | translate }}\r\n            </div>\r\n        </div>\r\n    </ng-container>\r\n\r\n    <ng-container *ngIf=\"!f.IsTree.value && f.IsNDependent.value && f.PreviousCropTypeId.value\r\n        && f.PreviousCropTypeId.value !== residue_id\">\r\n        <label class=\"bk-modal__label\">\r\n            {{'Days Since Incorporating Previous Crop Residues' | translate }} \r\n            <info-icon [title]=\"'Days Since Incorporating Previous Crop Residues Help Text'\"></info-icon>\r\n        </label>\r\n        <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n            type=\"number\"\r\n            name=\"PrevCropDays\"\r\n            formControlName=\"PrevCropDays\"/>\r\n    </ng-container>\r\n    \r\n    <!-- CANOPY -->\r\n\r\n    <div class=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n        <ng-container *ngIf=\"showAdvancedCropSettings\">\r\n            <div *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\"\r\n                class=\"bk-modal__section-subtitle\">\r\n                {{'Canopy' | translate }}\r\n            </div>\r\n\r\n            <label class=\"bk-modal__label\">\r\n                {{'Maximum Canopy' | translate }} \r\n                <info-icon [title]=\"'Maximum Canopy Help Text'\"></info-icon>\r\n            </label>\r\n\r\n            <input *ngIf=\"f.IsTree.value && f.PerennialCanopyIndex.value !== null\"\r\n                class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                required\r\n                [formControl]=\"f.PerennialCanopies.controls[f.PerennialCanopyIndex.value].get('CanopyGMax')\"\r\n                name=\"CanopyGMax\"/>\r\n\r\n            <input *ngIf=\"!f.IsTree.value\"\r\n                class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                required\r\n                formControlName=\"CanopyGMax\"\r\n                name=\"CanopyGMax\"/>\r\n\r\n            <div *ngIf=\"f.CanopyGMax.invalid && (f.CanopyGMax.dirty ||\r\n                f.CanopyGMax.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Maximum Canopy is required' | translate }}\r\n            </div>\r\n\r\n            <ng-container *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Minimum Canopy' | translate }} \r\n                    <info-icon [title]=\"'Minimum Canopy Help Text'\"></info-icon>\r\n                </label>\r\n        \r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    [maxNumber]=\"100\"\r\n                    [minNumber]=\"0\"\r\n                    name=\"CanopyMin\"\r\n                    formControlName=\"CanopyMin\"/>\r\n            </ng-container>\r\n        </ng-container>\r\n\r\n        <mat-form-field *ngIf=\"f.IsTree.value && f.PreHarvestSenesce.value\"\r\n            appearance=\"fill\"\r\n            class='mat-form-field--one-line mat-form-field--short bk-clearfix'>\r\n            <mat-label>\r\n                {{'Leaf Senesce' | translate }}\r\n            </mat-label>\r\n            <input matInput [matDatepicker]=\"LeafSenesceDatePicker\"\r\n                formControlName=\"LeafSenesceDate\"\r\n                required>\r\n            <mat-datepicker-toggle matSuffix [for]=\"LeafSenesceDatePicker\"></mat-datepicker-toggle>\r\n            <mat-datepicker #LeafSenesceDatePicker></mat-datepicker>\r\n            <mat-hint align=\"start\">\r\n                {{ 'Leaf Senesce Help Text' | translate }}\r\n            </mat-hint>\r\n            <mat-error *ngIf=\"f.LeafSenesceDate.invalid && (f.LeafSenesceDate.dirty\r\n                || f.LeafSenesceDate.touched)\">\r\n                {{'Leaf senesce date range error text' | translate }}\r\n            </mat-error>\r\n        </mat-form-field>\r\n\r\n        <ng-container *ngIf=\"showAdvancedCropSettings\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Canopy development coefficient' | translate }} A \r\n                <info-icon [title]=\"'Canopy development coefficient A Help Text'\"></info-icon>\r\n            </label>\r\n\r\n            <input *ngIf=\"f.IsPerennial.value && f.PerennialCanopyIndex.value !== null &&\r\n                f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\r\n                && f.CommodityTypeId.value !== COMMODITY_TYPES.CANEBERRY\" \r\n                class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                [formControl]=\"f.PerennialCanopies.controls[f.PerennialCanopyIndex.value].get('CanopyA')\"\r\n                required\r\n                name=\"CanopyA\" />\r\n\r\n            <input *ngIf=\"!f.IsPerennial.value ||\r\n                f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\r\n                || f.CommodityTypeId.value === COMMODITY_TYPES.CANEBERRY\"\r\n                class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"CanopyA\"\r\n                required\r\n                name=\"CanopyA\"/>\r\n\r\n            <label class=\"bk-modal__label\">\r\n                {{'Canopy Kc coefficient' | translate }} C \r\n                <info-icon [title]=\"'Canopy Kc coefficient C Help Text'\"></info-icon>\r\n            </label>\r\n\r\n            <input class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"CanopyC\"\r\n                required\r\n                name=\"CanopyC\"/>\r\n\r\n            <div *ngIf=\"f.CanopyC.invalid && (f.CanopyC.dirty || f.CanopyC.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Field is required' | translate }}\r\n            </div>\r\n\r\n            <ng-container *ngIf=\"f.IsStressable.value\">\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Canopy Kc coefficient' | translate }} E \r\n                    <info-icon [title]=\"'Canopy Kc coefficient E Help Text'\"></info-icon>\r\n                </label>\r\n\r\n                <input *ngIf=\"f.IsTree.value && f.PerennialCanopyIndex.value !== null\"\r\n                    class=\"bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    [formControl]=\"f.PerennialCanopies.controls[f.PerennialCanopyIndex.value].get('CanopyE')\"\r\n                    required\r\n                    name=\"CanopyE\"/>\r\n\r\n                <input *ngIf=\"!f.IsPerennial.value ||\r\n                    f.CommodityTypeId.value === COMMODITY_TYPES.CANEBERRY\" \r\n                    class=\"bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"CanopyE\"\r\n                    required\r\n                    name=\"CanopyE\"/>\r\n\r\n            </ng-container>\r\n\r\n            <!-- most stressable crops will use Early Fruit, as long as it uses a processing tomato calculator -->\r\n            <ng-container *ngIf=\"f.IsStressable.value && cCalc === calculatorEnum.TOMATO\">\r\n                <label class=\"bk-modal__label\">\r\n                    {{'EarlyFruit' | translate }} <info-icon [title]=\"'EarlyFruit Help Text'\"></info-icon>\r\n                </label>\r\n\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"EarlyFruit\"\r\n                    required\r\n                    name=\"EarlyFruit\"/>\r\n\r\n                <div *ngIf=\"f.EarlyFruit.invalid && (f.EarlyFruit.dirty ||\r\n                    f.EarlyFruit.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n            </ng-container>\r\n\r\n            <label class=\"bk-modal__label\">\r\n                {{'Canopy Kc Intercept' | translate }} <info-icon [title]=\"'Canopy Kc Intercept Help Text'\"></info-icon>\r\n            </label>\r\n\r\n            <input class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"CanopyIntercept\"\r\n                required\r\n                name=\"CanopyIntercept\"/>\r\n\r\n            <div *ngIf=\"f.CanopyIntercept.invalid && (f.CanopyIntercept.dirty ||\r\n                f.CanopyIntercept.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Field is required' | translate }}\r\n            </div>\r\n\r\n            <ng-container *ngIf=\"f.IsTree.value\">\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Kccov slope' | translate }}<info-icon [title]=\"'Kccov slope Help Text'\"></info-icon>\r\n                </label>\r\n\r\n                <input class=\"bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"Kccov_slope\"\r\n                    required\r\n                    name=\"Kccov_slope\"/>\r\n\r\n                <div *ngIf=\"f.Kccov_slope.invalid && (f.Kccov_slope.dirty ||\r\n                    f.Kccov_slope.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Kccov int' | translate }}<info-icon [title]=\"'Kccov int Help Text'\"></info-icon>\r\n                </label>\r\n\r\n                <input class=\"bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"Kccov_int\"\r\n                    required\r\n                    name=\"Kccov_int\"/>\r\n\r\n                <div *ngIf=\"f.Kccov_int.invalid && (f.Kccov_int.dirty ||\r\n                    f.Kccov_int.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n            </ng-container>\r\n        </ng-container>\r\n    </div>\r\n\r\n    <div *ngIf=\"showAdvancedCropSettings\"\r\n        class=\"bk-modal__right-two-col\">\r\n\r\n        <div class=\"bk-modal__section-subtitle--blank\"></div>\r\n\r\n        <ng-container *ngIf=\"f.CommodityTypeId.value !== COMMODITY_TYPES.ALFALFA\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Fraction of Crop Cycle for Max Canopy' | translate }} \r\n                <info-icon [title]=\"'Fraction of Crop Cycle for Max Canopy Help Text'\"></info-icon>\r\n            </label>\r\n\r\n            <input *ngIf=\"f.IsTree.value && f.PerennialCanopyIndex.value !== null\" \r\n                class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                [formControl]=\"f.PerennialCanopies.controls[f.PerennialCanopyIndex.value].get('CanopyMaxFraction')\"\r\n                required\r\n                name=\"CanopyMaxFraction\"/>\r\n\r\n            <input *ngIf=\"!f.IsTree.value\"\r\n                class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"CanopyMaxFraction\"\r\n                required\r\n                name=\"CanopyMaxFraction\"/>\r\n        </ng-container>\r\n\r\n        <label class=\"bk-modal__label\">\r\n            {{'Canopy development coefficient' | translate }} B \r\n            <info-icon [title]=\"'Canopy development coefficient B Help Text'\"></info-icon>\r\n        </label>\r\n\r\n        <input *ngIf=\"f.IsTree.value && f.PerennialCanopyIndex.value !== null\"\r\n            class=\"bk-input--short bk-modal__field\"\r\n            type=\"number\"\r\n            step=\"0.01\"\r\n            [formControl]=\"f.PerennialCanopies.controls[f.PerennialCanopyIndex.value].get('CanopyB')\"\r\n            required\r\n            name=\"CanopyB\" />\r\n\r\n        <input *ngIf=\"!f.IsTree.value\" \r\n            class=\"bk-input--short bk-modal__field\"\r\n            type=\"number\"\r\n            step=\"0.01\"\r\n            formControlName=\"CanopyB\"\r\n            required\r\n            name=\"CanopyB\" />\r\n\r\n        <label class=\"bk-modal__label\">\r\n            {{'Canopy Kc coefficient' | translate }} D \r\n            <info-icon [title]=\"'Canopy Kc coefficient D Help Text'\"></info-icon>\r\n        </label>\r\n\r\n        <input class=\"bk-input--short bk-modal__field\"\r\n            type=\"number\"\r\n            step=\"0.01\"\r\n            formControlName=\"CanopyD\"\r\n            required\r\n            name=\"CanopyD\"/>\r\n\r\n        <div *ngIf=\"f.CanopyD.invalid && (f.CanopyD.dirty || f.CanopyD.touched)\"\r\n            class=\"bk-invalid-field\">\r\n            {{'Field is required' | translate }}\r\n        </div>\r\n\r\n        <ng-container *ngIf=\"f.IsStressable.value\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Canopy Kc coefficient' | translate }} F \r\n                <info-icon [title]=\"'Canopy Kc coefficient F Help Text'\"></info-icon>\r\n            </label>\r\n\r\n            <input *ngIf=\"f.IsTree.value && f.PerennialCanopyIndex.value !== null\"\r\n                class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                [formControl]=\"f.PerennialCanopies.controls[f.PerennialCanopyIndex.value].get('CanopyF')\"\r\n                required\r\n                name=\"CanopyF\"/>\r\n\r\n            <input *ngIf=\"!f.IsPerennial.value ||\r\n                f.CommodityTypeId.value === COMMODITY_TYPES.CANEBERRY\"\r\n                class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"CanopyF\"\r\n                required\r\n                name=\"CanopyF\"/>\r\n\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"f.CommodityTypeId.value === COMMODITY_TYPES.ALFALFA\">\r\n            <label class=\"bk-modal__label\">\r\n                {{'Basal Kc' | translate }} <info-icon [title]=\"'Basal Kc Help Text'\"></info-icon>\r\n            </label>\r\n\r\n            <input class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"BasalKC\"\r\n                required\r\n                name=\"BasalKC\"/>\r\n\r\n            <div *ngIf=\"f.BasalKC.invalid && (f.BasalKC.dirty || f.BasalKC.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Field is required' | translate }}\r\n            </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"f.IsTree.value\">\r\n\r\n            <label class=\"bk-modal__label\">\r\n                {{'Kccov quad' | translate }}\r\n                <info-icon [title]=\"'Kccov quad Help Text'\"></info-icon>\r\n            </label>\r\n\r\n            <input class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"Kccov_quad\"\r\n                required\r\n                name=\"Kccov_quad\"/>\r\n\r\n            <div *ngIf=\"f.Kccov_quad.invalid && (f.Kccov_quad.dirty ||\r\n                f.Kccov_quad.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Field is required' | translate }}\r\n            </div>\r\n\r\n            <label class=\"bk-modal__label\">\r\n                {{'CovDensityFactor' | translate }}\r\n                <info-icon [title]=\"'CovDensityFactor Help Text'\"></info-icon>\r\n            </label>\r\n\r\n            <input class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"CovDensityFactor\"\r\n                required\r\n                name=\"CovDensityFactor\"/>\r\n\r\n            <div *ngIf=\"f.CovDensityFactor.invalid && (f.CovDensityFactor.dirty ||\r\n                f.CovDensityFactor.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Field is required' | translate }}\r\n            </div>\r\n        </ng-container>\r\n    </div>\r\n\r\n    <div class=\"bk-modal__right-two-col bk-modal__right-two-col--left\"\r\n        *ngIf=\"showAdvancedCropSettings && f.CommodityTypeId.value == COMMODITY_TYPES.ALFALFA\">\r\n        <label class=\"bk-modal__label\">\r\n            {{'Ni to Max Canopy' | translate }} \r\n            <info-icon [title]=\"'Ni to Max Canopy Help Text'\"></info-icon>\r\n        </label>\r\n\r\n        <ng-container *ngFor=\"let seasonalKC of f.SeasonalKCs.controls; let i = index\">\r\n            <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field bk-modal__field--clearfix\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                [formControl]=\"seasonalKC.get('NiToMaxCanopy')\"\r\n                required\r\n                name=\"NiToMaxCanopy{{i}}\"/>\r\n\r\n            <div class=\"bk-modal__field-unit\">\r\n                {{months[seasonalKC.get('Month').value - 1]}}\r\n            </div>\r\n        </ng-container>\r\n    </div>\r\n\r\n    <!-- Seasonal KC for Almonds -->\r\n\r\n    <div class=\"bk-clearfix\" *ngIf=\"f.IsTree.value\">\r\n\r\n        <div class=\"bk-modal__section-subtitle\">\r\n            {{ 'Cover Crop Settings' | translate }}\r\n        </div>\r\n\r\n        <div class=\"bk-modal__radio-buttons bk-n-contribution-ui__radio-buttons\">\r\n            <mat-radio-group\r\n                aria-label=\"\"\r\n                name=\"IsCoverCropEnabled\"\r\n                formControlName=\"IsCoverCropEnabled\">\r\n\r\n                <mat-radio-button [value]=\"true\"\r\n                    name=\"IsCoverCropEnabled\">\r\n                    {{'Use Cover Crops' | translate}}\r\n                </mat-radio-button>\r\n\r\n                <mat-radio-button class=\"mat-radio-button--left-margin\"\r\n                    [value]=\"false\"\r\n                    name=\"IsCoverCropEnabled\">\r\n                    {{'Do not Use Cover Crops' | translate}}\r\n                </mat-radio-button>\r\n            </mat-radio-group>\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"bk-modal__right-two-col bk-modal__right-two-col--left\"\r\n        *ngIf=\"f.IsTree.value && f.IsCoverCropEnabled.value === true\" [@slideInOut]>\r\n        <label class=\"bk-modal__label\">\r\n            {{'Cover' | translate }} <info-icon [title]=\"'Cover Help Text'\"></info-icon>\r\n        </label>\r\n\r\n        <ng-container *ngFor=\"let seasonalKC of f.SeasonalKCs.controls; let i = index\">\r\n            <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field bk-modal__field--clearfix\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                [formControl]=\"seasonalKC.get('Cover')\"\r\n                required\r\n                name=\"Cover{{i}}\"/>\r\n\r\n            <div class=\"bk-modal__field-unit\">\r\n                {{months[seasonalKC.get('Month').value - 1] | translate}}\r\n            </div>\r\n        </ng-container>\r\n    </div>\r\n\r\n    <div class=\"bk-modal__right-two-col\"\r\n        *ngIf=\"f.IsTree.value && f.IsCoverCropEnabled.value === true\" [@slideInOut]>\r\n        <label class=\"bk-modal__label\">\r\n            {{'Density' | translate }} \r\n            <info-icon [title]=\"'Density Help Text'\"></info-icon>\r\n        </label>\r\n\r\n        <ng-container *ngFor=\"let seasonalKC of f.SeasonalKCs.controls; let i = index\">\r\n\r\n            <select name=\"Density{{i}}\"\r\n                class=\"bk-input--full bk-select--medium bk-modal__field bk-select--medium-float-left\"\r\n                [formControl]=\"seasonalKC.get('Density')\">\r\n\r\n                <option *ngFor=\"let densityOption of densityOptions\"\r\n                    [ngValue]=\"densityOption.key\">\r\n                    {{densityOption.value | translate }}\r\n                </option>\r\n            </select>\r\n\r\n            <div class=\"bk-modal__field-unit\">\r\n                {{months[seasonalKC.get('Month').value - 1] | translate}}\r\n            </div>\r\n        </ng-container>\r\n    </div>\r\n\r\n    <!-- IRRIGATION FACTORS -->\r\n\r\n    <!-- Show for Almonds -->\r\n\r\n    <!-- SOIL FACTORS -->\r\n\r\n    <ng-container *ngIf=\"showAdvancedCropSettings\">\r\n        <div class=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n            <div class=\"bk-modal__section-subtitle\">\r\n                {{'Soil Factors' | translate }}\r\n            </div>\r\n\r\n            <ng-container *ngIf=\"f.IsNDependent.value &&\r\n                !f.IsTree.value\">\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Early Soil N Threshold' | translate }} \r\n                    <info-icon [title]=\"'Early Soil N Threshold Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"SoilNThreshold\"\r\n                    required\r\n                    name=\"SoilNThreshold\"/>\r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'ppm' | translate }}\r\n                </div>\r\n                <div *ngIf=\"f.SoilNThreshold.invalid && (f.SoilNThreshold.dirty ||\r\n                    f.SoilNThreshold.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Mid Soil N Threshold' | translate }} \r\n                    <info-icon [title]=\"'Mid Soil N Threshold Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"SoilNThresholdMid\"\r\n                    required\r\n                    name=\"SoilNThresholdMid\"/>\r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'ppm' | translate }}\r\n                </div>\r\n                <div *ngIf=\"f.SoilNThresholdMid.invalid &&\r\n                    (f.SoilNThresholdMid.dirty ||\r\n                    f.SoilNThresholdMid.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n\r\n                <label class=\"bk-modal__label\" for=\"SoilNThresholdFraction\">\r\n                    {{'Mid Soil N Threshold Fraction (fraction of crop cycle)' | translate }} \r\n                    <info-icon [title]=\"'Mid Soil N Threshold Fraction Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"SoilNThresholdFraction\"\r\n                    required\r\n                    id=\"SoilNThresholdFraction\"\r\n                    name=\"SoilNThresholdFraction\" />\r\n                <div *ngIf=\"f.SoilNThresholdFraction.invalid &&\r\n                    (f.SoilNThresholdFraction.dirty ||\r\n                    f.SoilNThresholdFraction.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n\r\n                <label class=\"bk-modal__label\" for=\"SoilNThresholdLate\">\r\n                    {{'Late Soil N Threshold' | translate }} \r\n                    <info-icon [title]=\"'Late Soil N Threshold Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"SoilNThresholdLate\"\r\n                    required\r\n                    id=\"SoilNThresholdLate\"\r\n                    name=\"SoilNThresholdLate\"/>\r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'ppm' | translate }}\r\n                </div>\r\n                <div *ngIf=\"f.SoilNThresholdLate.invalid &&\r\n                    (f.SoilNThresholdLate.dirty ||\r\n                    f.SoilNThresholdLate.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n\r\n                <label class=\"bk-modal__label\" for=\"SoilNThresholdFractionMid\">\r\n                    {{'Late Soil N Threshold Fraction (fraction of crop cycle)' | translate }} \r\n                    <info-icon [title]=\"'Late Soil N Threshold Fraction Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"SoilNThresholdFractionMid\"\r\n                    required\r\n                    id=\"SoilNThresholdFractionMid\"\r\n                    name=\"SoilNThresholdFractionMid\" />\r\n                <div *ngIf=\"f.SoilNThresholdFractionMid.invalid &&\r\n                    (f.SoilNThresholdFractionMid.dirty ||\r\n                    f.SoilNThresholdFractionMid.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n            </ng-container>\r\n\r\n            <label class=\"bk-modal__label\">\r\n                {{'Target Soil Tension (kPa)' | translate }} \r\n                <info-icon [title]=\"'Target Soil Tension Help Text'\"></info-icon>\r\n            </label>\r\n\r\n            <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field bk-modal__field--clearfix\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"TargetTension1\"\r\n                required\r\n                name=\"TargetTension1\"/>\r\n            <div class=\"bk-modal__field-unit\">\r\n                1 {{ 'ft' | translate }}\r\n            </div>\r\n            <div *ngIf=\"f.TargetTension1.invalid &&\r\n                (f.TargetTension1.dirty ||\r\n                f.TargetTension1.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Field is required' | translate }}\r\n            </div>\r\n\r\n            <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field bk-modal__field--clearfix\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"TargetTension2\"\r\n                required\r\n                name=\"TargetTension2\" />\r\n            <div class=\"bk-modal__field-unit\">\r\n                2 {{ 'ft' | translate }}\r\n            </div>\r\n            <div *ngIf=\"f.TargetTension2.invalid &&\r\n                (f.TargetTension2.dirty ||\r\n                f.TargetTension2.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Field is required' | translate }}\r\n            </div>\r\n\r\n            <ng-container *ngIf=\"f.MaxRootDepth.value > 2\">\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field bk-modal__field--clearfix\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"TargetTension3\"\r\n                    name=\"TargeTension3\" />\r\n                <div class=\"bk-modal__field-unit\">\r\n                    3 {{ 'ft' | translate }} ({{'Optional' | translate }})\r\n                </div>\r\n\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field bk-modal__field--clearfix\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    name=\"TargetTension4\"\r\n                    id=\"TargetTension4\"\r\n                    formControlName=\"TargetTension4\"/>\r\n                <div class=\"bk-modal__field-unit\">\r\n                    4 {{ 'ft' | translate }} ({{'Optional' | translate }})\r\n                </div>\r\n            </ng-container>\r\n        </div>\r\n\r\n        <div class=\"bk-modal__right-two-col\">\r\n            <div class=\"bk-modal__section-subtitle\">\r\n                {{'Crop Factors' | translate }}\r\n            </div>\r\n\r\n            <ng-container *ngIf=\"f.IsPerennial.value &&\r\n                f.CommodityTypeId.value !== COMMODITY_TYPES.CANEBERRY\r\n                && f.PerennialRootDepths &&\r\n                f.RootDepthIndex.value !== null\">\r\n                <label class=\"bk-modal__label\" for=\"perennialRootDepthMin\">\r\n                    {{'Minimum Root Depth' | translate }} \r\n                    <info-icon [title]=\"'Minimum Root Depth Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    [formControl]=\"f.PerennialRootDepths.controls[f.RootDepthIndex.value].get('Min')\"\r\n                    required\r\n                    id=\"perennialRootDepthMin\"\r\n                    name=\"perennialRootDepthMin\" />\r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'ft' | translate }}\r\n                </div>\r\n\r\n                <label class=\"bk-modal__label\" for=\"perennialRootDepthMax\">\r\n                    {{'Maximum Root Depth' | translate }} \r\n                    <info-icon [title]=\"'Maximum Root Depth Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    [formControl]=\"f.PerennialRootDepths.controls[f.RootDepthIndex.value].get('Max')\"\r\n                    required\r\n                    id=\"perennialRootDepthMax\"\r\n                    name=\"perennialRootDepthMax\" />\r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'ft' | translate }}\r\n                </div>\r\n            </ng-container>\r\n\r\n            <ng-container *ngIf=\"!f.IsPerennial.value || f.CommodityTypeId.value === COMMODITY_TYPES.CANEBERRY\">\r\n\r\n                <label class=\"bk-modal__label\" for=\"MinRootDepth\">\r\n                    {{'Minimum Root Depth' | translate }} \r\n                    <info-icon [title]=\"'Minimum Root Depth Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"MinRootDepth\"\r\n                    required\r\n                    id=\"MinRootDepth\"\r\n                    name=\"MinRootDepth\"/>\r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'ft' | translate }}\r\n                </div>\r\n                <div *ngIf=\"f.MinRootDepth.invalid && (f.MinRootDepth.dirty ||\r\n                    f.MinRootDepth.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n\r\n                <label class=\"bk-modal__label\" for=\"MaxRootDepth\">\r\n                    {{'Maximum Root Depth' | translate }} \r\n                    <info-icon [title]=\"'Maximum Root Depth Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"MaxRootDepth\"\r\n                    required\r\n                    id=\"MaxRootDepth\"\r\n                    name=\"MaxRootDepth\"/>\r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'ft' | translate }}\r\n                </div>\r\n                <div *ngIf=\"f.MaxRootDepth.invalid && (f.MaxRootDepth.dirty ||\r\n                    f.MaxRootDepth.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n            </ng-container>\r\n\r\n            <!--hide for alfalfa-->\r\n            <ng-container *ngIf=\"f.IsNDependent.value\">\r\n                <label class=\"bk-modal__label\" for=\"HarvestIntervalFraction\">\r\n                    {{'Harvest interval (fraction of crop cycle)' | translate }} \r\n                    <info-icon [title]=\"'Harvest interval Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"HarvestIntervalFraction\"\r\n                    required\r\n                    id=\"HarvestIntervalFraction\"\r\n                    name=\"HarvestIntervalFraction\"/>\r\n                <div *ngIf=\"f.HarvestIntervalFraction.invalid &&\r\n                    (f.HarvestIntervalFraction.dirty ||\r\n                    f.HarvestIntervalFraction.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n            </ng-container>\r\n\r\n            <ng-container *ngIf=\"f.IsNDependent.value && !f.IsTree.value\">\r\n                <label class=\"bk-modal__label\" for=\"RootDepthThreshold\">\r\n                    {{'Root Depth Threshold' | translate }} \r\n                    <info-icon [title]=\"'Root Depth Threshold Help Text'\"></info-icon>\r\n                </label>\r\n                <input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"RootDepthThreshold\"\r\n                    required\r\n                    id=\"RootDepthThreshold\"\r\n                    name=\"RootDepthThreshold\"/>\r\n\r\n                <div class=\"bk-modal__field-unit\">\r\n                    {{'ft' | translate }}\r\n                </div>\r\n                <div *ngIf=\"f.RootDepthThreshold.invalid &&\r\n                    (f.RootDepthThreshold.dirty ||\r\n                    f.RootDepthThreshold.touched)\"\r\n                    class=\"bk-invalid-field\">\r\n                    {{'Field is required' | translate }}\r\n                </div>\r\n            </ng-container>\r\n\r\n            <label class=\"bk-modal__label\" for=\"GermDays\">\r\n                {{'Min. Rooting Depth Time (fraction)' | translate }} \r\n                <info-icon [title]=\"'Min Rooting Depth Time Help Text'\"></info-icon>\r\n            </label>\r\n            <input class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"GermDays\"\r\n                required\r\n                id=\"GermDays\"\r\n                name=\"GermDays\"/>\r\n            <div *ngIf=\"f.GermDays.invalid && (f.GermDays.dirty || f.GermDays.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Field is required' | translate }}\r\n            </div>\r\n\r\n            <label class=\"bk-modal__label\" for=\"MaxDays\">\r\n                {{'Max. Rooting Depth Time (fraction)' | translate }} \r\n                <info-icon [title]=\"'Max Rooting Depth Time Help Text'\"></info-icon>\r\n            </label>\r\n            <input class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                step=\"0.01\"\r\n                formControlName=\"MaxDays\"\r\n                required\r\n                id=\"MaxDays\"\r\n                name=\"MaxDays\" />\r\n            <div *ngIf=\"f.MaxDays.invalid && (f.MaxDays.dirty || f.MaxDays.touched)\"\r\n                class=\"bk-invalid-field\">\r\n                {{'Field is required' | translate }}\r\n            </div>\r\n\r\n            <label class=\"bk-modal__label\" for=\"CropSensitivity\">\r\n                {{'Crop Sensitivity' | translate }} \r\n                <info-icon [title]=\"'Crop Sensitivity Help Text'\"></info-icon>\r\n            </label>\r\n            <input class=\"bk-input--short bk-modal__field\"\r\n                type=\"number\"\r\n                formControlName=\"CropSensitivity\"\r\n                [greaterThanNum]=\"0\"\r\n\t\t\t\t[maxNumber]=\"1\"\r\n                id=\"CropSensitivity\"\r\n                name=\"CropSensitivity\"/>\r\n        </div>\r\n    </ng-container>\r\n</form>\r\n","import { Component, OnInit, Input, OnDestroy } from '@angular/core';\r\nimport { IPreviousCropViewModel } from '../interfaces';\r\nimport { eCommodityTypes, eCalculators } from '../../../interfaces/constants';\r\nimport { ISelectOptions } from '../../../interfaces/abstract';\r\nimport { CropType } from '../../../models/crop-type/cropType';\r\nimport { Subject } from 'rxjs';\r\nimport { IMyDpOptions } from 'mydatepicker';\r\nimport { DateUtility } from '../../../classes/dateUtility';\r\nimport {\r\n\ttrigger,\r\n\tstyle,\r\n\tanimate,\r\n\ttransition,\r\n} from '@angular/animations';\r\nimport { ICommodityType } from '../../../models/commodity-type/interfaces';\r\nimport { IFertilizationEventGetSeasonalNUptakeModel } from '../../fertilization-event/interfaces';\r\n\r\nimport { CropTypeFormFields } from '../../crop-types/cropTypeFormBuilder';\r\nimport { PlantingSettingFields } from '../plantingSettingFields';\r\nimport { NCalculatorFields } from './nitrogen-calculator/n-calculator';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Planting } from '../planting';\r\nimport { PREVIOUS_CROP_NO_RESIDUE_ID } from '../../../services/constants';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { PlantingDialog } from '../planting-dialog';\r\nimport { MaxUptakeCalculatorComponent } from './max-uptake-calculator/max-uptake-calculator';\r\nimport { SharedUpdateService } from '../../shared/dialogs/update.service';\r\nimport { DIALOG_HIDE_CLASS } from '../../shared/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'crop-settings',\r\n\ttemplateUrl: 'crop-settings.html',\r\n\tstyleUrls: ['crop-settings.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 CropSettingsComponent implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic parentForm: FormGroup; // planting form\r\n\r\n\t@Input()\r\n\tpublic isAdmin: boolean;\r\n\r\n\t@Input()\r\n\tpublic commodityTypes: ICommodityType[];\r\n\r\n\t@Input()\r\n\tpublic previousCropTypes: IPreviousCropViewModel[];\r\n\r\n\t@Input()\r\n\tpublic calculatorSettings: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup; // crop settings form\r\n\r\n\tpublic showAdvancedCropSettings: boolean;\r\n\tpublic nCalculatorForm: FormGroup;\r\n\tpublic residue_id = PREVIOUS_CROP_NO_RESIDUE_ID;\r\n\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\tpublic calculatorEnum = eCalculators;\r\n\r\n\tpublic cCalc: number; // commodity type calculator\r\n\tpublic cropTypeClass = CropType;\r\n\tpublic readonly months: string[] = DateUtility.monthsAsStrings;\r\n\r\n\tpublic isCoverCropCalculatorVisible = false; // tracks visibility of cover crop calculator UI\r\n\tpublic isManureCalculatorVisible: boolean;\r\n\tpublic isCompostCalculatorVisible: boolean;\r\n\tpublic nCalculatorParams: IFertilizationEventGetSeasonalNUptakeModel;\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\tpublic datePickerOptions: IMyDpOptions = {\r\n\t\tshowClearDateBtn: false,\r\n\t\teditableDateField: false,\r\n\t\topenSelectorOnInputClick: true\r\n\t};\r\n\r\n\tpublic get pf(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.parentForm.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get f(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.form as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\t/**\r\n\t * N Calculator form fields\r\n\t */\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 _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<PlantingDialog>,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService) {\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.nCalculatorForm = this.form.get('NCalculator') as FormGroup;\r\n\r\n\t\tthis.cCalc = Planting.getCalculator(Planting.getCalculatorInterface(\r\n\t\t\tthis.pf.CommodityTypeId.value, this.commodityTypes));\r\n\r\n\t\tthis._bindValueChanges();\r\n\t\tthis.showAdvancedCropSettings = false;\r\n\t\tthis.isManureCalculatorVisible = false;\r\n\t\tthis.isCompostCalculatorVisible = false;\r\n\t}\r\n\r\n\tngOnDestroy() {\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 toggleShowAdvancedCropSettings(e: MouseEvent) {\r\n\t\tif (e) {\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\tthis.showAdvancedCropSettings = !this.showAdvancedCropSettings;\r\n\t}\r\n\r\n\tpublic openMaxUptakeCalculator(e: MouseEvent): void {\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\r\n\t\tthis._dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\r\n\t\tlet dialogConfig: MatDialogConfig = {\r\n\t\t\tdata: {\r\n\t\t\t\tform: this.form,\r\n\t\t\t\tcontrol: this.f.MaxUptake\r\n\t\t\t},\r\n\t\t\twidth: '600px',\r\n\t\t\tdisableClose: true\r\n\t\t}\r\n\r\n\t\tthis._dialog.open(MaxUptakeCalculatorComponent, dialogConfig);\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\tprivate _bindValueChanges(): void {\r\n\t\tthis.pf.CommodityTypeId.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.cCalc = Planting.getCalculator(Planting.getCalculatorInterface(\r\n\t\t\t\tthis.pf.CommodityTypeId.value, this.commodityTypes));\r\n\t\t});\r\n\t}\r\n}\r\n","<form [formGroup]=form>\r\n    <h4 class=\"bk-modal__section-title\">\r\n        {{'Calculate Drip Application Rate' | translate }}\r\n    </h4>\r\n\r\n    <label class=\"bk-modal__label\">\r\n        {{'Emitter Discharge Rate' | translate }}\r\n    </label>\r\n\r\n    <input class=\"bk-field--has-calculation bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n        type=\"number\"\r\n        step=\"0.01\"\r\n        formControlName=\"EmitterDischargeRate\"\r\n        required/>\r\n    <div class=\"bk-modal__field-unit\">\r\n        {{ 'gallons' | translate }}/{{ 'hour' | translate }}\r\n    </div>\r\n\t\r\n    <label class=\"bk-modal__label\">\r\n        {{'Emitters Per Tree' | translate }}\r\n    </label>\r\n\r\n    <input class=\"bk-field--has-calculation bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n        type=\"number\"\r\n        step=\"0.01\"\r\n        formControlName=\"EmittersPerTree\"\r\n        required/>\r\n\r\n    <div class=\"bk-clearfix\">\r\n        <mat-radio-group\r\n            aria-label=\"\"\r\n            name=\"useTreesPerAcre\"\r\n            formControlName=\"UseTreesPerAcre\">\r\n\r\n            <mat-radio-button [value]=\"false\"\r\n                name=\"useTreesPerAcre\">\r\n                {{'Row Spacing' | translate}}\r\n            </mat-radio-button>\r\n\r\n            <mat-radio-button class=\"mat-radio-button--left-margin\"\r\n                [value]=\"true\"\r\n                name=\"useTreesPerAcre\">\r\n                {{'Trees per Acre' | translate}}\r\n            </mat-radio-button>\r\n        </mat-radio-group>\r\n    </div>\r\n\r\n    <ng-container *ngIf=\"f.UseTreesPerAcre.value\">\r\n        <label class=\"bk-modal__label\">\r\n            {{'Trees Per Acre' | translate }}\r\n        </label>\r\n\r\n        <input class=\"bk-field--has-calculation bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n            type=\"number\"\r\n            step=\"0.01\"\r\n            formControlName=\"TreesPerAcre\"\r\n            required/>\r\n    </ng-container>\r\n\r\n    <ng-container *ngIf=\"f.UseTreesPerAcre.value === false\">\r\n        <label class=\"bk-modal__label\">\r\n            {{'Row Spacing' | translate }}\r\n        </label>\r\n\r\n        <input class=\"bk-field--has-calculation bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n            type=\"number\"\r\n            step=\"0.01\"\r\n            formControlName=\"RowSpacing\"\r\n            required/>\r\n        <div class=\"bk-modal__field-unit\">\r\n            {{ 'ft' | translate }}\r\n        </div>\r\n\r\n        <label class=\"bk-modal__label\">\r\n            {{'In Row Tree Spacing' | translate }}\r\n        </label>\r\n\r\n        <input class=\"bk-field--has-calculation bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n            type=\"number\"\r\n            step=\"0.01\"\r\n            formControlName=\"InRowTreeSpacing\"\r\n            required/>\r\n        <div class=\"bk-modal__field-unit\">\r\n            {{ 'ft' | translate }}\r\n        </div>\r\n    </ng-container>\r\n    \r\n\r\n\t<!-- footer -->\r\n\t\r\n    <div class=\"bk-modal__section-buttons\">\r\n        <button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"cancel($event)\">\r\n            {{'Cancel' | translate }}\r\n        </button>\r\n        <button class=\"bk-button bk-button--medium\"\r\n            [disabled]='form.invalid'\r\n            (click)=\"calculate($event)\">\r\n            {{'Calculate' | translate }}\r\n        </button>\r\n    </div>\r\n</form>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { FormValidation } from '../../../classes/formValidation';\r\nimport { DripApplicationRateFields } from '../calculatorSettingsForm';\r\nimport { IDripApplicationRate } from '../interfaces';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { SharedUpdateService } from '../../shared/dialogs/update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'drip-application-rate-tree',\r\n\ttemplateUrl: 'drip-application-rate-tree.html',\r\n\tstyleUrls: ['drip-application-rate-tree.scss']\r\n})\r\n\r\nexport class DripApplicationRateTreeComponent implements OnInit {\r\n\r\n\tprivate _control: AbstractControl;\r\n\tprivate _initialValues: IDripApplicationRate;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic form: FormGroup;\r\n\r\n\tpublic get f(): { [key in DripApplicationRateFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in DripApplicationRateFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: {\r\n\t\t\tform: FormGroup, control: AbstractControl },\r\n\r\n\t\tprivate _dialogRef: MatDialogRef<DripApplicationRateTreeComponent>,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t) {}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.form = this._data.form;\r\n\t\tthis._control = this._data.control;\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._initialValues = this.form.value;\r\n\t\tthis._setValidators();\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(e: MouseEvent): void {\r\n\t\tlet result: number;\r\n\r\n\t\tif (this.f.UseTreesPerAcre.value) {\r\n\t\t\tresult = this.f.EmitterDischargeRate.value *\r\n\t\t\t\tthis.f.TreesPerAcre.value * this.f.EmittersPerTree.value / 27154\r\n\t\t} else {\r\n\t\t\tresult = this.f.EmitterDischargeRate.value *\r\n\t\t\t\tthis.f.EmittersPerTree.value * 43560 / (this.f.RowSpacing.value\r\n\t\t\t\t* this.f.InRowTreeSpacing.value * 27154);\r\n\t\t}\r\n\r\n\t\tresult = Number(result.toFixed(2));\r\n\t\tthis._control.setValue(result);\r\n\t\tthis._clearValidators();\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tpublic cancel(e: MouseEvent): void {\r\n\t\tthis.form.reset(this._initialValues);\r\n\t\tthis._clearValidators();\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tprivate _setValidators(): void {\r\n\t\tthis.f.EmitterDischargeRate.setValidators(Validators.required);\r\n\t\tthis.f.EmittersPerTree.setValidators(Validators.required);\r\n\t\tthis.f.UseTreesPerAcre.setValidators(Validators.required);\r\n\r\n\t\tthis._setConditionalValidators();\r\n\t\tthis._bindValueChanges();\r\n\t}\r\n\r\n\tprivate _clearValidators(): void {\r\n\t\tFormValidation.clearValidator(this.f.EmitterDischargeRate);\r\n\t\tFormValidation.clearValidator(this.f.EmittersPerTree);\r\n\t\tFormValidation.clearValidator(this.f.RowSpacing);\r\n\t\tFormValidation.clearValidator(this.f.InRowTreeSpacing);\r\n\t\tFormValidation.clearValidator(this.f.UseTreesPerAcre);\r\n\t}\r\n\r\n\tprivate _setConditionalValidators(): void {\r\n\t\tif (this.f.UseTreesPerAcre.value) {\r\n\t\t\tthis.f.TreesPerAcre.setValidators(Validators.required);\r\n\t\t\tFormValidation.clearValidator(this.f.RowSpacing);\r\n\t\t\tFormValidation.clearValidator(this.f.InRowTreeSpacing);\r\n\t\t} else {\r\n\t\t\tthis.f.RowSpacing.setValidators(Validators.required);\r\n\t\t\tthis.f.InRowTreeSpacing.setValidators(Validators.required);\r\n\t\t\tFormValidation.clearValidator(this.f.TreesPerAcre);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _bindValueChanges(): void {\r\n\t\tthis.f.UseTreesPerAcre.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._setConditionalValidators();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _closeDialog() {\r\n\t\tthis._sharedUpdateService.cancel();\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","<form [formGroup]=form>\r\n\t<h4 class=\"bk-modal__section-title\">\r\n\t\t{{'Calculate Drip Application Rate' | translate }}\r\n\t</h4>\r\n\t<label class=\"bk-modal__label\">\r\n\t\t{{'Bed Width' | translate}}\r\n\t</label>\r\n\r\n\t<input class=\"bk-modal__field--with-unit bk-input--short\r\n\t\tbk-modal__field\"\r\n\t\ttype=\"number\"\r\n\t\trequired\r\n\t\tformControlName=\"BedWidth\" />\r\n\r\n\t<div class=\"bk-modal__field-unit\">\r\n\t\t{{'in' | translate}}\r\n\t</div>\r\n\r\n\t<mat-error *ngIf=\"f.BedWidth.invalid && (f.BedWidth.dirty\r\n\t\t|| f.BedWidth.touched)\">\r\n\t\t<span *ngIf=\"f.BedWidth.errors.valueNotAnInteger\"\r\n\t\t\tclass=\"bk-clearfix cm-error-warning\">\r\n\t\t\t{{ \"You must enter an integer in this field\" | translate }}.\r\n\t\t</span>\r\n\t</mat-error>\r\n\r\n\t<label class=\"bk-modal__label\">\r\n\t\t{{'Number of drip lines per bed' | translate}}\r\n\t</label>\r\n\r\n\t<input class=\"bk-input--short bk-modal__field\"\r\n\t\ttype=\"number\"\r\n\t\trequired\r\n\t\tformControlName=\"DripLinesPerBed\" />\r\n\r\n\t<mat-error *ngIf=\"f.DripLinesPerBed.invalid && (f.DripLinesPerBed.dirty\r\n\t\t|| f.DripLinesPerBed.touched)\">\r\n\t\t<span *ngIf=\"f.DripLinesPerBed.errors.valueNotAnInteger\"\r\n\t\tclass=\"cm-error-warning\">\r\n\t\t\t{{ \"You must enter an integer in this field\" | translate }}.\r\n\t\t</span>\r\n\t</mat-error>\r\n\t\r\n\t<label class=\"bk-modal__label\">\r\n\t\t{{'Tape Discharge Rate' | translate}}\r\n\t</label>\r\n\r\n\t<input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n\t\ttype=\"number\"\r\n\t\tstep=\"0.01\"\r\n\t\trequired\r\n\t\tformControlName=\"TapeDischargeRate\" />\r\n\r\n\t<div class=\"bk-modal__field-unit\">\r\n\t\t{{'gpm' | translate}}/100 {{'ft' | translate}}\r\n\t</div>\r\n\r\n\t<div class=\"bk-modal__section-buttons\">\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[disabled]=\"form.invalid\"\r\n\t\t\t(click)=\"calculate($event)\">\r\n\t\t\t{{'Calculate' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</form>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { IDripApplicationRate } from '../interfaces';\r\nimport { CalculateService } from '../../../services/calculate.service';\r\nimport { DripApplicationRateFields } from '../calculatorSettingsForm';\r\nimport { FormValidation } from '../../../classes/formValidation';\r\nimport { Validators } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { SharedUpdateService } from '../../shared/dialogs/update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'drip-application-rate',\r\n\ttemplateUrl: 'drip-application-rate.html',\r\n\tstyleUrls: ['drip-application-rate.scss']\r\n})\r\n\r\nexport class DripApplicationRateComponent implements OnInit {\r\n\r\n\tpublic form: FormGroup;\r\n\r\n\tpublic get f(): { [key in DripApplicationRateFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in DripApplicationRateFields]: AbstractControl };\r\n\t}\r\n\r\n\tprivate _control: AbstractControl;\r\n\tprivate _initialValues: IDripApplicationRate;\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: {\r\n\t\t\tform: FormGroup, control: AbstractControl },\r\n\r\n\t\tprivate _dialogRef: MatDialogRef<DripApplicationRateComponent>,\r\n\t\tprivate calculateService: CalculateService,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.form = this._data.form;\r\n\t\tthis._control = this._data.control;\r\n\t\tthis._initialValues = this.form.value; // save initial values\r\n\t\tthis._setValidators();\r\n\t}\r\n\r\n\tpublic calculate(e: MouseEvent): void {\r\n\t\tlet result: number;\r\n\r\n\t\tresult = this.calculateService.calculateDripApplicationRate(this.f.BedWidth.value,\r\n\t\t\tthis.f.DripLinesPerBed.value, this.f.TapeDischargeRate.value);\r\n\r\n\t\tresult = Number(result.toFixed(2));\r\n\t\tthis._control.setValue(result);\r\n\r\n\t\tthis._clearValidators();\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tpublic cancel(e: MouseEvent): void {\r\n\t\tthis.form.reset(this._initialValues);\r\n\t\tthis._clearValidators();\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tprivate _setValidators(): void {\r\n\t\tFormValidation.setValidator(this.f.BedWidth, [Validators.required, FormValidation.integerValidator()]);\r\n\t\tFormValidation.setValidator(this.f.DripLinesPerBed, [Validators.required, FormValidation.integerValidator()]);\r\n\t\tFormValidation.setValidator(this.f.TapeDischargeRate, [Validators.required]);\r\n\t}\r\n\r\n\tprivate _clearValidators(): void {\r\n\t\tFormValidation.clearValidator(this.f.BedWidth);\r\n\t\tFormValidation.clearValidator(this.f.DripLinesPerBed);\r\n\t\tFormValidation.clearValidator(this.f.TapeDischargeRate);\r\n\t}\r\n\r\n\tprivate _closeDialog() {\r\n\t\tthis._sharedUpdateService.cancel();\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","<p class=\"cm-form__instructions\">\r\n\tAdd one or more <strong>control points</strong>. Each control point specifies a date and a deficit amount.\r\n</p>\r\n\r\n<table *ngIf=\"f.ControlPoints && $any(f.ControlPoints).controls.length > 0\"\r\n\tclass=\"bk-form__table cm-irrigation-methods-ui__table\" class=\"cm-table__full-width\">\r\n\t<colgroup>\r\n\t\t<col span=\"1\" class=\"cm-irrigation-methods-ui__col1\">\r\n\t\t<col span=\"1\" class=\"cm-irrigation-methods-ui__col2\">\r\n\t\t<col span=\"1\" class=\"cm-irrigation-methods-ui__col4\">\r\n\t</colgroup>\r\n\t<thead>\r\n\t\t<th>\r\n\t\t\t{{ 'Date' | translate }}\r\n\t\t</th>\r\n\t\t<th>\r\n\t\t\t{{ '% Crop ET' | translate }}\r\n\t\t</th>\r\n\t\t<th>\r\n\t\t\t{{ 'Action' | translate }}\r\n\t\t</th>\r\n\t</thead>\r\n\t<tbody>\r\n\t\t<ng-container *ngFor=\"let control of f.ControlPoints.controls; let i = index\">\r\n\t\t\t<tr *ngIf=\"rowIndex === i\">\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<mat-form-field appearance=\"outline\"\r\n\t\t\t\t\t\tclass='cm-outline-input'>\r\n\t\t\t\t\t\t<input matInput [matDatepicker]=\"picker\"\r\n\t\t\t\t\t\t\t[formControl]=\"control.get(DATE)\"\r\n\t\t\t\t\t\t\t[min]=\"f.WetDate.value\"\r\n\t\t\t\t\t\t\t[max]=\"f.HarvestDate.value\"\r\n\t\t\t\t\t\t\trequired>\r\n\t\t\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n\t\t\t\t\t\t<mat-datepicker #picker></mat-datepicker>\r\n\t\t\t\t\t\t<mat-error *ngIf=\"control.get(DATE).invalid && (control.get(DATE).dirty || control.get(DATE).touched)\">\r\n\t\t\t\t\t\t\t{{ ' Deficit irrigation date error message ' | 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</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<mat-form-field appearance=\"outline\"\r\n\t\t\t\t\t\tclass=\"cm-outline-input cm-irrigation-methods-ui__input--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\trequired\r\n\t\t\t\t\t\t\t[formControl]=\"control.get(CROP_ET_PERCENTAGE)\" />\r\n\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</td>\r\n\t\t\t\t<td class=\"cm-irrigation-methods-ui__action\r\n\t\t\t\t\tcm-irrigation-methods-ui__action--editing\">\r\n\t\t\t\t\t<button type=\"button\"\r\n\t\t\t\t\t\tclass=\"cm-irrigation-methods-ui__action__button cm-irrigation-methods-ui__action__button--secondary\"\r\n\t\t\t\t\t\t(click)=\"cancelChanges($event)\">\r\n\t\t\t\t\t\t<mat-icon matTooltip=\"{{ 'Cancel' | translate }}\">close</mat-icon>\r\n\t\t\t\t\t</button>\r\n\r\n\t\t\t\t\t<button type=\"button\"\r\n\t\t\t\t\t\tclass=\"cm-irrigation-methods-ui__action__button cm-irrigation-methods-ui__action__button--primary\"\r\n\t\t\t\t\t\t(click)=\"confirm($event)\">\r\n\t\t\t\t\t\t<mat-icon matTooltip=\"{{ 'Confirm' | translate }}\">check</mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"rowIndex !== i\">\r\n\t\t\t\t<td>\r\n\t\t\t\t\t{{ control.get(DATE).value | date:'M/d/yyyy' }}\r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t{{ control.get(CROP_ET_PERCENTAGE).value }}\r\n\t\t\t\t</td>\r\n\t\t\t\t<td class=\"cm-irrigation-methods-ui__action\">\r\n\t\t\t\t\t<button type=\"button\"\r\n\t\t\t\t\t\t[disabled]=\"rowIndex !== null\"\r\n\t\t\t\t\t\tclass=\"cm-irrigation-methods-ui__action__button cm-irrigation-methods-ui__action__button--primary\"\r\n\t\t\t\t\t\t(click)=\"edit(i, $event)\">\r\n\t\t\t\t\t\t<mat-icon fontSet=\"material-icons-outlined\" matTooltip=\"{{ 'Edit' | translate }}\">edit</mat-icon>\r\n\t\t\t\t\t</button>\r\n\r\n\t\t\t\t\t<button type=\"button\"\r\n\t\t\t\t\t\t*ngIf=\"control.get(IN_USE).value !== true\"\r\n\t\t\t\t\t\t[disabled]=\"rowIndex !== null\"\r\n\t\t\t\t\t\tclass=\"cm-irrigation-methods-ui__action__button cm-irrigation-methods-ui__action__button--secondary\"\r\n\t\t\t\t\t\t(click)=\"delete(i, $event)\">\r\n\t\t\t\t\t\t<mat-icon matTooltip=\"{{ 'Delete' | translate }}\">delete</mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t</ng-container>\r\n\t</tbody>\r\n</table>\r\n\r\n<button\r\n\tclass=\"bk-button bk-create-button cm-irrigation-deficit__control_point_btn\"\r\n\t[disabled]=\"rowIndex !== null\"\r\n\t(click)=\"AddControlPoint()\">\r\n\t<span class=\"bk-data-table__plus-icon\">+</span> \r\n\t{{'Add Control Point' | translate }}\r\n</button>\r\n<br>\r\n\r\n<div class=\"bk-chart\" #irrigationDeficitChart></div>\r\n<div class=\"bk-modal__section-subtitle\">\r\n\t{{'Deficit Type' | translate }}\r\n</div>\r\n\r\n<mat-radio-group aria-label=\"\"\r\n\tname=\"DeficitType\"\r\n\tclass=\"cm-irrigation-deficit__radio-group\"\r\n\t[formControl]=\"f.DeficitType\">\r\n\r\n\t<mat-radio-button [value]=\"DEFICIT_TYPES.POINT_TO_POINT\"\r\n\t\tclass=\"cm-irrigation-deficit__radio-button\"\r\n\t\tname=\"DeficitType\">\r\n\t\t<span>{{'Point to Point' | translate}}</span>\r\n\t</mat-radio-button>\r\n\r\n\t<mat-radio-button [value]=\"DEFICIT_TYPES.STAGE_BASED\"\r\n\t\tclass=\"cm-irrigation-deficit__radio-button\"\r\n\t\tname=\"DeficitType\">\r\n\t\t<span>{{'Stage Based' | translate}}</span>\r\n\t</mat-radio-button>\r\n</mat-radio-group>","import { Component, Input, OnDestroy, OnInit, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { CropTypeFormFields } from '../../../crop-types/cropTypeFormBuilder';\r\nimport { PlantingSettingFields } from '../../plantingSettingFields';\r\nimport { FormValidation } from '../../../../classes/formValidation';\r\nimport { LotPlantingDeficitControlPointJSON } from '../../interfaces';\r\nimport { DateUtility } from '../../../../classes/dateUtility';\r\nimport { HighChartsService } from '../../../../classes/highCharts.service';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport * as moment from 'moment';\r\nimport { IHighChartCustomSeries } from '../../../available-water-chart/interfaces';\r\n\r\nexport enum IrrigationDeficitType {\r\n\tPOINT_TO_POINT = 1,\r\n\tSTAGE_BASED = 2,\r\n};\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'irrigation-deficit',\r\n\ttemplateUrl: 'irrigation-deficit.html',\r\n\tstyleUrls: ['irrigation-deficit.scss']\r\n})\r\n\r\nexport class IrrigationDeficitComponent implements OnInit, OnDestroy {\r\n\t@ViewChild('irrigationDeficitChart', { static: true }) private _irrigationDeficitChart: ElementRef;\r\n\r\n\t@Input()\r\n\tpublic parentForm: FormGroup;\r\n\r\n\t@Output()\r\n\tpublic inEditMode: EventEmitter<boolean>;\r\n\r\n\tpublic DEFICIT_TYPES = IrrigationDeficitType;\r\n\tpublic rowIndex: number; // current row being edited\r\n\r\n\tprivate editCache: {\r\n\t\tDate: Date,\r\n\t\tCropETPercentage: number\r\n\t\tInUse: boolean\r\n\t};\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.parentForm.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.parentForm.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic IN_USE = 'InUse';\r\n\tpublic DATE = 'Date';\r\n\tpublic CROP_ET_PERCENTAGE = 'CropETPercentage';\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tprivate _chartData: Highcharts.IndividualSeriesOptions[];\r\n\r\n\tconstructor(\r\n\t\tprivate _fb: FormBuilder,\r\n\t) {\r\n\t\t// make a shallow copy\r\n\t\tthis.inEditMode = new EventEmitter<boolean>();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.f.DeficitType.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._renderChart();\r\n\t\t});\r\n\r\n\t\tthis.fc.IsStressEnabled.setValue(true);\r\n\t\tthis.rowIndex = null;\r\n\t\tthis._sortFormFields();\r\n\t\tthis.inEditMode.emit(false);\r\n\t\tthis._renderChart();\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 _renderChart() {\r\n\t\tlet records: LotPlantingDeficitControlPointJSON[];\r\n\r\n\t\trecords = this.f.ControlPoints.value;\r\n\r\n\t\tif (records.length === 0) {\r\n\t\t\trecords = [\r\n\t\t\t\t{\r\n\t\t\t\t\tDate: this.f.WetDate.value,\r\n\t\t\t\t\tCropETPercentage: 100\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tDate: this.f.HarvestDate.value,\r\n\t\t\t\t\tCropETPercentage: 100\r\n\t\t\t\t}\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\tthis._convertToGraphData(records);\r\n\t\tHighChartsService.drawGraph(this._irrigationDeficitChart, this._chartData, [{\r\n\t\t\t\ttitle: {\r\n\t\t\t\t\ttext: '% Crop ET'\r\n\t\t\t\t}\r\n\t\t\t\t}],\r\n\t\t\t200);\r\n\t}\r\n\r\n\tprivate _convertToGraphData(records: LotPlantingDeficitControlPointJSON[]): void {\r\n\r\n\t\tlet temp: {\r\n\t\t\tcropETPercentage: IHighChartCustomSeries,\r\n\t\t};\r\n\r\n\t\ttemp = {\r\n\t\t\tcropETPercentage: {\r\n\t\t\t\tname: '% Crop ET',\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\tvalueDecimals: 0\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t}\r\n\r\n\t\trecords.sort((a, b) => {\r\n\t\t\tlet d1: Date;\r\n\t\t\tlet d2: Date;\r\n\r\n\t\t\td1 = a.Date;\r\n\t\t\td2 = b.Date;\r\n\r\n\t\t\treturn d1 < d2 ? -1 : d1 > d2 ? 1 : 0;\r\n\t\t});\r\n\r\n\t\tswitch (this.f.DeficitType.value) {\r\n\t\t\tcase IrrigationDeficitType.POINT_TO_POINT:\r\n\t\t\t\trecords = this._convertRecordsToPointToPoint(records);\r\n\t\t\t\tbreak;\r\n\t\t\tcase IrrigationDeficitType.STAGE_BASED:\r\n\t\t\t\trecords = this._convertRecordsToStageBased(records);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\trecords = [];\r\n\t\t}\r\n\r\n\t\tif (records && records.length > 0) {\r\n\t\t\tfor (let record of records) {\r\n\t\t\t\tlet utc: number;\r\n\r\n\t\t\t\t// validate date before trying to convert to UTC\r\n\t\t\t\tutc = DateUtility.DateToUTC(record.Date);\r\n\r\n\t\t\t\tif (utc === null) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttemp.cropETPercentage.data.push([utc, record.CropETPercentage]);\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.cropETPercentage);\r\n\t}\r\n\r\n\tprivate _convertRecordsToPointToPoint(records: LotPlantingDeficitControlPointJSON[]): LotPlantingDeficitControlPointJSON[] {\r\n\t\tlet result: LotPlantingDeficitControlPointJSON[];\r\n\t\tlet counter: number;\r\n\t\tlet onWetDate: boolean;\r\n\r\n\t\tresult = [];\r\n\t\tcounter = 1;\r\n\r\n\t\tif (moment(records[0].Date).isAfter(this.f.WetDate.value, 'days')) {\r\n\t\t\tresult.push({\r\n\t\t\t\tDate: this.f.WetDate.value,\r\n\t\t\t\tCropETPercentage: 100\r\n\t\t\t});\r\n\r\n\t\t\tonWetDate = false;\r\n\t\t} else {\r\n\t\t\tonWetDate = true;\r\n\t\t}\r\n\r\n\t\trecords.forEach(e => {\r\n\t\t\tif (counter === 1 && onWetDate === false) {\r\n\t\t\t\tresult.push({\r\n\t\t\t\t\tDate: e.Date,\r\n\t\t\t\t\tCropETPercentage: 100\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tresult.push({\r\n\t\t\t\tDate: e.Date,\r\n\t\t\t\tCropETPercentage: e.CropETPercentage\r\n\t\t\t});\r\n\r\n\t\t\tcounter++;\r\n\t\t});\r\n\r\n\t\tif (moment(records[records.length - 1].Date).isBefore(this.f.HarvestDate.value, 'days')\r\n\t\t\t&& records.length > 1) {\r\n\t\t\tresult.push({\r\n\t\t\t\tDate: records[records.length - 1].Date,\r\n\t\t\t\tCropETPercentage: 100\r\n\t\t\t});\r\n\r\n\t\t\tresult.push({\r\n\t\t\t\tDate: this.f.HarvestDate.value,\r\n\t\t\t\tCropETPercentage: 100\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tresult.push({\r\n\t\t\t\tDate: this.f.HarvestDate.value,\r\n\t\t\t\tCropETPercentage: records[records.length - 1].CropETPercentage\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _convertRecordsToStageBased(records: LotPlantingDeficitControlPointJSON[]): LotPlantingDeficitControlPointJSON[] {\r\n\t\tlet result: LotPlantingDeficitControlPointJSON[];\r\n\t\tlet counter: number;\r\n\t\tlet percentagePrevious: number;\r\n\t\tlet datePrevious: Date;\r\n\r\n\t\tresult = [];\r\n\t\tcounter = 1;\r\n\r\n\t\tresult.push({\r\n\t\t\tDate: this.f.WetDate.value,\r\n\t\t\tCropETPercentage: 100\r\n\t\t});\r\n\r\n\t\tpercentagePrevious = 100;\r\n\t\tdatePrevious = this.f.WetDate.value;\r\n\r\n\t\trecords.forEach(e => {\r\n\r\n\t\t\tresult.push({\r\n\t\t\t\tDate: e.Date,\r\n\t\t\t\tCropETPercentage: percentagePrevious\r\n\t\t\t});\r\n\r\n\t\t\tresult.push({\r\n\t\t\t\tDate: e.Date,\r\n\t\t\t\tCropETPercentage: e.CropETPercentage\r\n\t\t\t});\r\n\r\n\t\t\tpercentagePrevious = e.CropETPercentage;\r\n\t\t});\r\n\r\n\t\tif (records[records.length - 1].Date !== this.f.HarvestDate.value) {\r\n\t\t\tresult.push({\r\n\t\t\t\tDate: this.f.HarvestDate.value,\r\n\t\t\t\tCropETPercentage: records[records.length - 1].CropETPercentage\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _sortFormFields() {\r\n\t\t(this.f.ControlPoints as FormArray).controls.sort((a, b) => {\r\n\r\n\t\t\tlet d1: Date;\r\n\t\t\tlet d2: Date;\r\n\r\n\t\t\td1 = a.get(this.DATE).value;\r\n\t\t\td2 = b.get(this.DATE).value;\r\n\r\n\t\t\treturn d1 < d2 ? -1 : d1 > d2 ? 1 : 0;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers when the user clicks the \"Add Irrigation Method\" button.\r\n\t */\r\n\tpublic AddControlPoint() {\r\n\t\t// new row always get added at the end of the form\r\n\t\tlet form: FormGroup;\r\n\r\n\t\tform = this._fb.group({\r\n\t\t\tId: [ null ],\r\n\t\t\tLotPlantingId: [ this.f.Id.value ],\r\n\r\n\t\t\tDate: [ null, [Validators.required, FormValidation.mustBeOnOrAfterDate(this.f.WetDate),\r\n\t\t\t\tFormValidation.mustBeOnOrBeforeDate(this.f.HarvestDate)] ],\r\n\r\n\t\t\tCropETPercentage: [ null, [Validators.required, Validators.min(0),\r\n\t\t\t\tValidators.max(100), FormValidation.integerValidator()]],\r\n\t\t\tInUse: [ null ]\r\n\t\t});\r\n\r\n\t\t(this.f.ControlPoints as FormArray).push(form);\r\n\t\tthis.rowIndex = (this.f.ControlPoints as FormArray).controls.length - 1;\r\n\t\tthis.inEditMode.emit(true);\r\n\t}\r\n\r\n\t/**\r\n\t * Commit the current row. The row must be valid.\r\n\t */\r\n\tpublic confirm($event: MouseEvent) {\r\n\t\tlet control: AbstractControl;\r\n\t\tlet i: number;\r\n\r\n\t\t$event.stopPropagation();\r\n\t\tcontrol = (this.f.ControlPoints as FormArray).at(this.rowIndex);\r\n\r\n\t\tif (control.valid) {\r\n\t\t\tthis.rowIndex = null;\r\n\t\t} else {\r\n\t\t\tcontrol.markAsDirty();\r\n\t\t\t// possibly display an error warning\r\n\t\t}\r\n\r\n\t\tthis.editCache = null;\r\n\t\tthis.inEditMode.emit(false);\r\n\t\tthis._renderChart();\r\n\t}\r\n\r\n\t/**\r\n\t * This method should revert the current form control\r\n\t * to its original state. If the control was just created, remove it from the array.\r\n\t * If the control was being edited, revert to previous values.\r\n\t */\r\n\tpublic cancelChanges($event: MouseEvent) {\r\n\t\t$event.stopPropagation();\r\n\r\n\t\tif (this.editCache) {\r\n\t\t\tlet control: AbstractControl;\r\n\r\n\t\t\tcontrol = (this.f.ControlPoints as FormArray).controls[this.rowIndex];\r\n\r\n\t\t\tcontrol.get(this.DATE).setValue(this.editCache.Date);\r\n\t\t\tcontrol.get(this.CROP_ET_PERCENTAGE).setValue(this.editCache.CropETPercentage);\r\n\r\n\t\t\tthis.editCache = null;\r\n\t\t} else {\r\n\t\t\t(this.f.ControlPoints as FormArray).controls.splice(this.rowIndex, 1);\r\n\t\t}\r\n\r\n\t\tthis.rowIndex = null;\r\n\t\tthis.inEditMode.emit(false);\r\n\t}\r\n\r\n\tpublic edit(i: number, $event: MouseEvent) {\r\n\t\tlet control: AbstractControl;\r\n\r\n\t\t$event.stopPropagation();\r\n\r\n\t\tif (this.rowIndex !== null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.rowIndex = i;\r\n\t\tthis.inEditMode.emit(true);\r\n\r\n\t\tcontrol = (this.f.ControlPoints as FormArray).controls[i];\r\n\r\n\t\tthis.editCache = {\r\n\t\t\tDate: control.get(this.DATE).value,\r\n\t\t\tCropETPercentage: control.get(this.CROP_ET_PERCENTAGE).value,\r\n\t\t\tInUse: control.get(this.IN_USE).value\r\n\t\t};\r\n\t}\r\n\r\n\tpublic delete(i: number, $event: MouseEvent) {\r\n\t\t$event.stopPropagation();\r\n\t\t(this.f.ControlPoints as FormArray).controls.splice(i, 1);\r\n\t\tthis.f.ControlPoints.updateValueAndValidity(); // make sure there's at least one element\r\n\t\tthis._renderChart();\r\n\t}\r\n}\r\n","<button\r\n\tclass=\"bk-button bk-create-button\"\r\n\t[disabled]=\"rowIndex !== null || !irrigationMethodOptions || irrigationMethodOptions.length === 0\"\r\n\t(click)=\"addMethod()\">\r\n\t<span class=\"bk-data-table__plus-icon\">+</span> \r\n\t{{'Add Irrigation Method' | translate }}\r\n</button>\r\n\r\n<table *ngIf=\"f.IrrigationMethods && $any(f.IrrigationMethods).controls.length > 0\"\r\n\tclass=\"bk-form__table cm-irrigation-methods-ui__table\">\r\n\t<colgroup>\r\n\t\t<col span=\"1\" class=\"cm-irrigation-methods-ui__col1\">\r\n\t\t<col span=\"1\" class=\"cm-irrigation-methods-ui__col2\">\r\n\t\t<col span=\"1\" class=\"cm-irrigation-methods-ui__col3\">\r\n\t\t<col span=\"1\" class=\"cm-irrigation-methods-ui__col4\">\r\n\t</colgroup>\r\n\t<thead>\r\n\t\t<th>\r\n\t\t\t{{ 'Irrigation Method' | translate }}\r\n\t\t</th>\r\n\t\t<th>\r\n\t\t\t{{ 'Application Rate' | translate }} (in/hr)\r\n\t\t</th>\r\n\t\t<th>\r\n\t\t\t{{ 'Distribution Uniformity' | translate }} (%)\r\n\t\t</th>\r\n\t\t<th>\r\n\t\t\t{{ 'Action' | translate }}\r\n\t\t</th>\r\n\t</thead>\r\n\t<tbody>\r\n\t\t<ng-container *ngFor=\"let control of f.IrrigationMethods.controls; let i = index\">\r\n\t\t\t<tr *ngIf=\"rowIndex === i && irrigationMethodOptions.length > 0\">\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<mat-form-field  appearance=\"outline\"\r\n\t\t\t\t\t\tclass=\"cm-outline-input mat-form-field--one-line cm-irrigation-methods--dropdown\">\r\n\r\n\t\t\t\t\t\t<mat-select\r\n\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t[formControl]=\"control.get(IRRIGATION_METHOD_ID)\">\r\n\r\n\t\t\t\t\t\t\t<mat-option *ngFor=\"let option of irrigationMethodOptions\"\r\n\t\t\t\t\t\t\t\t[value]=\"option.Id\">\r\n\t\t\t\t\t\t\t\t{{ option.Text | translate }}\r\n\t\t\t\t\t\t\t</mat-option>\r\n\r\n\t\t\t\t\t\t</mat-select>\r\n\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<mat-form-field appearance=\"outline\"\r\n\t\t\t\t\t\tclass=\"cm-outline-input cm-irrigation-methods-ui__input--short\"\r\n\t\t\t\t\t\t*ngIf=\"control.get(IRRIGATION_METHOD_ID).value !== IRRIGATION_METHODS.FLOOD\">\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\trequired\r\n\t\t\t\t\t\t\t[formControl]=\"control.get(APPLICATION_RATE)\" />\r\n\t\t\t\t\r\n\t\t\t\t\t\t<span matSuffix>\r\n\t\t\t\t\t\t\t<i class=\"fa fa-calculator bk-clickable\"\r\n\t\t\t\t\t\t\t\t*ngIf=\"control.get(IRRIGATION_METHOD_ID).valid\"\r\n\t\t\t\t\t\t\t\tmatTooltip=\"{{ 'Application Rate Calculator' | translate }}\"\r\n\t\t\t\t\t\t\t\t(click)=\"openApplicationCalculator(control.get(IRRIGATION_METHOD_ID).value)\">\r\n\t\t\t\t\t\t\t</i>\r\n\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<mat-form-field\r\n\t\t\t\t\t\t*ngIf=\"control.get(DU)\"\r\n\t\t\t\t\t\tappearance=\"outline\"\r\n\t\t\t\t\t\tclass=\"cm-outline-input cm-irrigation-methods-ui__input--short\">\r\n\t\t\t\t\t\t\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\trequired\r\n\t\t\t\t\t\t\t[formControl]=\"control.get(DU)\" />\r\n\t\t\t\t\r\n\t\t\t\t\t\t<span matSuffix>\r\n\t\t\t\t\t\t\t%\r\n\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</td>\r\n\t\t\t\t<td class=\"cm-irrigation-methods-ui__action\r\n\t\t\t\t\tcm-irrigation-methods-ui__action--editing\">\r\n\t\t\t\t\t<button type=\"button\"\r\n\t\t\t\t\t\tclass=\"cm-irrigation-methods-ui__action__button cm-irrigation-methods-ui__action__button--secondary\"\r\n\t\t\t\t\t\t(click)=\"cancelChanges($event)\">\r\n\t\t\t\t\t\t<mat-icon matTooltip=\"{{ 'Cancel' | translate }}\">close</mat-icon>\r\n\t\t\t\t\t</button>\r\n\r\n\t\t\t\t\t<button type=\"button\"\r\n\t\t\t\t\t\t[disabled]=\"!control.valid\"\r\n\t\t\t\t\t\tclass=\"cm-irrigation-methods-ui__action__button cm-irrigation-methods-ui__action__button--primary\"\r\n\t\t\t\t\t\t(click)=\"confirm($event)\">\r\n\t\t\t\t\t\t<mat-icon matTooltip=\"{{ 'Confirm' | translate }}\">check</mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr *ngIf=\"rowIndex !== i\">\r\n\t\t\t\t<td>\r\n\t\t\t\t\t{{ getMethodName(control.get(IRRIGATION_METHOD_ID).value) | translate }}\r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<span *ngIf=\"control.get(APPLICATION_RATE)\">\r\n\t\t\t\t\t\t{{ control.get(APPLICATION_RATE).value }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t{{ control.get(DU).value }}\r\n\t\t\t\t</td>\r\n\t\t\t\t<td class=\"cm-irrigation-methods-ui__action\">\r\n\t\t\t\t\t<button type=\"button\"\r\n\t\t\t\t\t\t[disabled]=\"rowIndex !== null\"\r\n\t\t\t\t\t\tclass=\"cm-irrigation-methods-ui__action__button cm-irrigation-methods-ui__action__button--primary\"\r\n\t\t\t\t\t\t(click)=\"edit(i, $event)\">\r\n\t\t\t\t\t\t<mat-icon fontSet=\"material-icons-outlined\" matTooltip=\"{{ 'Edit' | translate }}\">edit</mat-icon>\r\n\t\t\t\t\t</button>\r\n\r\n\t\t\t\t\t<button type=\"button\"\r\n\t\t\t\t\t\t*ngIf=\"control.get(IN_USE).value !== true\"\r\n\t\t\t\t\t\t[disabled]=\"rowIndex !== null || f.IrrigationMethods.controls.length <= 1\"\r\n\t\t\t\t\t\tclass=\"cm-irrigation-methods-ui__action__button cm-irrigation-methods-ui__action__button--secondary\"\r\n\t\t\t\t\t\t(click)=\"delete(i, $event)\">\r\n\t\t\t\t\t\t<mat-icon matTooltip=\"{{ 'Delete' | translate }}\">delete</mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t</ng-container>\r\n\t</tbody>\r\n</table>\r\n<!--\r\n\tdisplaying this creates visual distraction\r\n<p class=\"cm-explanation\"\r\n\t*ngIf=\"f.IrrigationMethods && f.IrrigationMethods.controls.length > 0\">\r\n\t<strong>Distrubtion Uniformity:</strong> Enter the percentage value representing\r\n\tthe evenness of water application across your field. A higher percentage\r\n\tindicates more uniform water distribution. For example, 100% uniformity signifies\r\n\tperfect uniformity, ensuring equal water application throughout the field.\r\n</p>\r\n-->","import { Component, Input, OnDestroy, OnInit, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\r\nimport { eCommodityTypes, eIrrigationMethods } from '../../../interfaces/constants';\r\nimport { CropTypeFormFields } from '../../crop-types/cropTypeFormBuilder';\r\nimport { PlantingSettingFields } from '../plantingSettingFields';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { DripApplicationRateTreeComponent } from './drip-application-rate-tree';\r\nimport { DripApplicationRateComponent } from './drip-application-rate';\r\nimport { SprinklerApplicationRateComponent } from './sprinkler-calculator/sprinkler-application-rate';\r\nimport { MicroSprinklerComponent } from '../micro-sprinkler/micro-sprinkler';\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: 'irrigation-methods',\r\n\ttemplateUrl: 'irrigation-methods.html',\r\n\tstyleUrls: ['irrigation-methods.scss']\r\n})\r\n\r\nexport class IrrigationMethodsComponent implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic parentForm: FormGroup;\r\n\r\n\t@Output()\r\n\tpublic inEditMode: EventEmitter<boolean>;\r\n\r\n\tpublic rowIndex: number; // current row being edited\r\n\r\n\tpublic defaultIrrigationMethodOptions: {\r\n\t\tText: string,\r\n\t\tId: number\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 editCache: {\r\n\t\tIrrigationMethodId: number,\r\n\t\tApplicationRate: number,\r\n\t\tDU: number,\r\n\t\tInUse: boolean\r\n\t};\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.parentForm.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get f(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.parentForm.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic IN_USE = 'InUse';\r\n\tpublic IRRIGATION_METHOD_ID = 'IrrigationMethodId';\r\n\tpublic APPLICATION_RATE = 'ApplicationRate';\r\n\tpublic DU = 'DU';\r\n\tpublic IRRIGATION_METHODS = eIrrigationMethods;\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _cdr: ChangeDetectorRef,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<IrrigationMethodsComponent>,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t) {\r\n\t\tthis.irrigationMethodOptions = [\r\n\t\t\t{ Text: 'Drip', Id: eIrrigationMethods.DRIP },\r\n\t\t\t{ Text: 'Flood', Id: eIrrigationMethods.FLOOD },\r\n\t\t\t{ Text: 'Micro Sprinkler', Id: eIrrigationMethods.MICRO_SPRINKLER },\r\n\t\t\t{ Text: 'Sprinkler', Id: eIrrigationMethods.SPRINKLER }\r\n\t\t];\r\n\r\n\t\t// make a shallow copy\r\n\t\tthis.defaultIrrigationMethodOptions = this.irrigationMethodOptions.slice(0, this.irrigationMethodOptions.length);\r\n\t\tthis.inEditMode = new EventEmitter<boolean>();\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.rowIndex = null;\r\n\t\t// this._modifyOptionsBasedOnCommodityType();\r\n\t\tthis._sortFormFields();\r\n\r\n\t\t(this.f.IrrigationMethods as FormArray).controls.forEach((x) => {\r\n\t\t\tthis._updateIrrigationOptions(x.get(this.IRRIGATION_METHOD_ID).value);\r\n\t\t});\r\n\r\n\t\tthis.inEditMode.emit(false);\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 _sortFormFields() {\r\n\t\t(this.f.IrrigationMethods as FormArray).controls.sort((a, b) => {\r\n\t\t\tlet nameA: string;\r\n\t\t\tlet nameB: string;\r\n\r\n\t\t\tnameA = this.getMethodName(a.get(this.IRRIGATION_METHOD_ID).value);\r\n\t\t\tnameB = this.getMethodName(b.get(this.IRRIGATION_METHOD_ID).value);\r\n\r\n\t\t\treturn nameA < nameB ? -1 : nameA > nameB ? 1 : 0;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers when the user clicks the \"Add Irrigation Method\" button.\r\n\t */\r\n\tpublic addMethod() {\r\n\t\t// new row always get added at the end of the form\r\n\t\tlet form: FormGroup;\r\n\r\n\t\tform = this._fb.group({\r\n\t\t\tIrrigationMethodId: [ null, [ Validators.required ] ],\r\n\t\t\tApplicationRate: [ null ],\r\n\t\t\tDU: [ null, [ Validators.required ] ],\r\n\t\t\tInUse: [ null ]\r\n\t\t});\r\n\r\n\t\tform.get(this.IRRIGATION_METHOD_ID).valueChanges.subscribe(() => {\r\n\t\t\tform.removeControl(this.APPLICATION_RATE);\r\n\t\t\tform.removeControl(this.DU);\r\n\r\n\t\t\tswitch (form.get(this.IRRIGATION_METHOD_ID).value) {\r\n\t\t\t\tcase eIrrigationMethods.DRIP:\r\n\t\t\t\t\tform.addControl(this.APPLICATION_RATE, this.f.DripApplicationRate);\r\n\t\t\t\t\tform.addControl(this.DU, this.f.DripDistUniformPct);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase eIrrigationMethods.SPRINKLER:\r\n\t\t\t\t\tform.addControl(this.APPLICATION_RATE, this.f.SprinklerApplicationRate);\r\n\t\t\t\t\tform.addControl(this.DU, this.f.SprinklerDistUniformityPct);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase eIrrigationMethods.FLOOD:\r\n\t\t\t\t\tform.addControl(this.DU, this.f.FloodDistUniformityPct);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase eIrrigationMethods.MICRO_SPRINKLER:\r\n\t\t\t\t\tform.addControl(this.APPLICATION_RATE, this.f.MicroSprinklerApplicationRate);\r\n\t\t\t\t\tform.addControl(this.DU, this.f.MicroSprinklerDistUniformityPct);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tform.addControl(this.APPLICATION_RATE, this.f.DripApplicationRate);\r\n\t\t\t\t\tform.addControl(this.DU, this.f.DripDistUniformPct);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t(this.f.IrrigationMethods as FormArray).push(form);\r\n\t\tthis.rowIndex = (this.f.IrrigationMethods as FormArray).controls.length - 1;\r\n\t\tthis.inEditMode.emit(true);\r\n\t}\r\n\r\n\t/**\r\n\t * Commit the current row. The row must be valid.\r\n\t */\r\n\tpublic confirm($event: MouseEvent) {\r\n\t\tlet control: AbstractControl;\r\n\t\tlet i: number;\r\n\r\n\t\t$event.stopPropagation();\r\n\t\tcontrol = (this.f.IrrigationMethods as FormArray).at(this.rowIndex);\r\n\r\n\t\tif (control.valid) {\r\n\t\t\tthis.rowIndex = null;\r\n\t\t} else {\r\n\t\t\tcontrol.markAsDirty();\r\n\t\t\t// possibly display an error warning\r\n\t\t}\r\n\r\n\t\tthis._updateIrrigationOptions(control.get(this.IRRIGATION_METHOD_ID).value);\r\n\t\tthis.editCache = null;\r\n\t\tthis.inEditMode.emit(false);\r\n\t}\r\n\r\n\tprivate _updateIrrigationOptions(methodId: number) {\r\n\t\tlet i: number;\r\n\r\n\t\tif (!this.irrigationMethodOptions || this.irrigationMethodOptions.length === 0) {\r\n\t\t\t// prevent a null reference error\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ti = this.irrigationMethodOptions.findIndex(x => x.Id === methodId);\r\n\r\n\t\tif (i === -1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.irrigationMethodOptions.splice(i, 1);\r\n\t\tthis._cdr.detectChanges();\r\n\t}\r\n\r\n\t/**\r\n\t * This method should revert the current form control\r\n\t * to its original state. If the control was just created, remove it from the array.\r\n\t * If the control was being edited, revert to previous values.\r\n\t */\r\n\tpublic cancelChanges($event: MouseEvent) {\r\n\t\t$event.stopPropagation();\r\n\r\n\t\tif (this.editCache) {\r\n\t\t\tlet control: AbstractControl;\r\n\r\n\t\t\tcontrol = (this.f.IrrigationMethods as FormArray).controls[this.rowIndex];\r\n\r\n\t\t\tcontrol.get(this.IRRIGATION_METHOD_ID).setValue(this.editCache.IrrigationMethodId);\r\n\r\n\t\t\tif (this.editCache.IrrigationMethodId !== eIrrigationMethods.FLOOD && control.get(this.APPLICATION_RATE)) {\r\n\t\t\t\tcontrol.get(this.APPLICATION_RATE).setValue(this.editCache.ApplicationRate);\r\n\t\t\t}\r\n\r\n\t\t\tif (control.get(this.DU)) {\r\n\t\t\t\tcontrol.get(this.DU).setValue(this.editCache.DU);\r\n\t\t\t}\r\n\r\n\t\t\tthis.editCache = null;\r\n\t\t\tthis._updateIrrigationOptions(control.get(this.IRRIGATION_METHOD_ID).value);\r\n\t\t} else {\r\n\t\t\t(this.f.IrrigationMethods as FormArray).controls.splice(this.rowIndex, 1);\r\n\t\t\tthis._cdr.detectChanges();\r\n\t\t}\r\n\r\n\t\tthis.rowIndex = null;\r\n\t\tthis.inEditMode.emit(false);\r\n\t}\r\n\r\n\tpublic edit(i: number, $event: MouseEvent) {\r\n\t\tlet control: AbstractControl;\r\n\r\n\t\t$event.stopPropagation();\r\n\r\n\t\tif (this.rowIndex !== null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.addOptionBack(i);\r\n\t\tthis.rowIndex = i;\r\n\t\tthis.inEditMode.emit(true);\r\n\r\n\t\tcontrol = (this.f.IrrigationMethods as FormArray).controls[i];\r\n\r\n\t\tthis.editCache = {\r\n\t\t\tIrrigationMethodId: control.get(this.IRRIGATION_METHOD_ID).value,\r\n\t\t\tApplicationRate: control.get(this.IRRIGATION_METHOD_ID).value !== eIrrigationMethods.FLOOD ?\r\n\t\t\t\tcontrol.get(this.APPLICATION_RATE).value : null,\r\n\t\t\tDU: control.get(this.DU).value,\r\n\t\t\tInUse: control.get(this.IN_USE).value\r\n\t\t};\r\n\t}\r\n\r\n\tpublic delete(i: number, $event: MouseEvent) {\r\n\t\t$event.stopPropagation();\r\n\t\tthis.addOptionBack(i);\r\n\t\t(this.f.IrrigationMethods as FormArray).controls.splice(i, 1);\r\n\t\tthis.f.IrrigationMethods.updateValueAndValidity(); // make sure there's at least one element\r\n\t\tthis._cdr.detectChanges();\r\n\t}\r\n\r\n\tprivate addOptionBack(index: number) {\r\n\t\tlet irrigationMethodId: number;\r\n\r\n\t\tirrigationMethodId = (this.f.IrrigationMethods as FormArray).controls[index].get(this.IRRIGATION_METHOD_ID).value;\r\n\r\n\t\tthis.irrigationMethodOptions.push(this.defaultIrrigationMethodOptions.find(x => x.Id === irrigationMethodId));\r\n\r\n\t\tthis.irrigationMethodOptions = this.irrigationMethodOptions.sort((a, b) => {\r\n\t\t\treturn a.Text > b.Text ? -1 : a.Text < b.Text ? 1 : 0;\r\n\t\t});\r\n\r\n\t\tthis._cdr.detectChanges();\r\n\t}\r\n\r\n\tpublic getMethodName(id: number): string {\r\n\t\tswitch (id) {\r\n\t\t\tcase eIrrigationMethods.DRIP:\r\n\t\t\t\treturn 'Drip';\r\n\t\t\tcase eIrrigationMethods.SPRINKLER:\r\n\t\t\t\treturn 'Sprinkler';\r\n\t\t\tcase eIrrigationMethods.MICRO_SPRINKLER:\r\n\t\t\t\treturn 'Micro Sprinkler';\r\n\t\t\tcase eIrrigationMethods.FLOOD:\r\n\t\t\t\treturn 'Flood';\r\n\t\t}\r\n\t}\r\n\r\n\tpublic openApplicationCalculator(irrigationMethodId: number): void {\r\n\t\tthis._dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\r\n\t\tlet dialogConfig: MatDialogConfig = {\r\n\t\t\tdata: {\r\n\t\t\t\tform: null,\r\n\t\t\t\tcontrol: null,\r\n\t\t\t},\r\n\t\t\twidth: '600px',\r\n\t\t\tdisableClose: true\r\n\t\t};\r\n\r\n\t\tswitch (irrigationMethodId) {\r\n\t\t\tcase eIrrigationMethods.DRIP:\r\n\t\t\t\tdialogConfig.data.control = this.f.DripApplicationRate;\r\n\r\n\t\t\t\tif (this.fc.IsTree.value) {\r\n\t\t\t\t\tdialogConfig.data.form = this.parentForm.get('CalculatorSettings').get('DripApplicationRate');\r\n\t\t\t\t\tthis._dialog.open(DripApplicationRateTreeComponent, dialogConfig);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdialogConfig.data.form = this.parentForm.get('CalculatorSettings').get('DripApplicationRate');\r\n\t\t\t\t\tthis._dialog.open(DripApplicationRateComponent, dialogConfig);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase eIrrigationMethods.SPRINKLER:\r\n\t\t\t\tdialogConfig.data.form = this.parentForm.get('CalculatorSettings').get('SprinklerApplicationRate');\r\n\t\t\t\tdialogConfig.data.control = this.f.SprinklerApplicationRate;\r\n\t\t\t\tthis._dialog.open(SprinklerApplicationRateComponent, dialogConfig);\r\n\t\t\t\tbreak;\r\n\t\t\tcase eIrrigationMethods.MICRO_SPRINKLER:\r\n\t\t\t\tdialogConfig.data.form = this.parentForm.get('CalculatorSettings').get('MicroSprinklerSetting');\r\n\t\t\t\tdialogConfig.data.control = this.f.MicroSprinklerApplicationRate;\r\n\t\t\t\tthis._dialog.open(MicroSprinklerComponent, dialogConfig);\r\n\t\t\t\tbreak;\r\n\t\t\tcase eIrrigationMethods.FLOOD:\r\n\t\t\t\t// flood doesn't have a calculator\r\n\t\t\t\t// also doesn't have an application rate\r\n\t\t\t\tbreak;\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","import { FormBuilder, ValidatorFn } from '@angular/forms';\r\nimport { macroTunnelFields } from './macro-tunnel';\r\nimport * as moment from 'moment';\r\nimport { FormValidation } from '../../../classes/formValidation';\r\n\r\nexport type MacroTunnelFields = 'startDate' | 'endDate' | 'isEnabled' | 'isFullSeason';\r\n\r\nexport interface MacroTunnelParams {\r\n\tplantingId: number,\r\n\tstartDate: Date,\r\n\tendDate: Date,\r\n\tisEnabled: boolean,\r\n\tisFullSeason: boolean,\r\n\twetDateControl: AbstractControl,\r\n\tharvestDateControl: AbstractControl\r\n}\r\n\r\nexport class MacroTunnelsForm {\r\n\tprivate _fb: FormBuilder;\r\n\tprivate _form: FormGroup;\r\n\tpublic minEndDate: Date;\r\n\tpublic maxStartDate: Date;\r\n\r\n\tpublic get f(): { [key in MacroTunnelFields]: AbstractControl } {\r\n\t\treturn this._form.controls as { [key in MacroTunnelFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(fb: FormBuilder) {\r\n\t\tthis._fb = fb;\r\n\t}\r\n\r\n\tpublic initialize(settings: MacroTunnelParams): FormGroup {\r\n\t\tthis._form = this._fb.group({\r\n\t\t\tstartDate: [settings.startDate,\r\n\t\t\t\t[\r\n\t\t\t\t\tthis._startBeforeWetDateValidator(settings.wetDateControl),\r\n\t\t\t\t\tthis._startAfterHarvestDateValidator(settings.harvestDateControl)\r\n\t\t\t\t]\r\n\t\t\t],\r\n\t\t\tendDate: [settings.endDate,\r\n\t\t\t\tthis._harvestDateValidator(settings.harvestDateControl)\r\n\t\t\t],\r\n\t\t\tisEnabled: [settings.isEnabled ? settings.isEnabled : false],\r\n\t\t\tisFullSeason: [settings.isFullSeason !== null ? settings.isFullSeason : true]\r\n\t\t}, { validator: this._validateGroup });\r\n\r\n\t\tif (settings.plantingId) {\r\n\t\t\tthis._form.markAsDirty();\r\n\t\t}\r\n\r\n\t\tthis._setDateLimits();\r\n\r\n\t\tthis._form.valueChanges.subscribe(() => {\r\n\t\t\t// on change, alert planting\r\n\t\t\tthis._setDateLimits();\r\n\t\t});\r\n\r\n\t\treturn this._form;\r\n\t}\r\n\r\n\t/** we need this validator in addition to directive for the form to validate correctly */\r\n\tprivate _startBeforeWetDateValidator(fc: AbstractControl): ValidatorFn {\r\n\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 ? moment(fc.value).isSameOrBefore(control.value) : true;\r\n\r\n\t\t\treturn valid ? null : {'startDateBeforeWetDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _startAfterHarvestDateValidator(fc: 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 ? moment(fc.value).isAfter(control.value) : true;\r\n\r\n\t\t\treturn valid ? null : {'startDateAfterHarvestDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\t/** we need this validator in addition to directive for the form to validate correctly */\r\n\tprivate _harvestDateValidator(fc: 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 ? moment(fc.value).isSameOrAfter(control.value) : true;\r\n\r\n\t\t\treturn valid ? null : {'endDateAfterHarvestDate': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _validateGroup(g: FormGroup): void {\r\n\t\tlet startDate: AbstractControl = g.get(macroTunnelFields.startDate);\r\n\t\tlet endDate: AbstractControl = g.get(macroTunnelFields.endDate);\r\n\t\tlet isEnabled: AbstractControl = g.get(macroTunnelFields.isEnabled);\r\n\t\tlet isFullSeason: AbstractControl = g.get(macroTunnelFields.isFullSeason);\r\n\t\tlet error: { endDateBeforeStartDate: boolean } = { endDateBeforeStartDate: true };\r\n\r\n\t\tif (isEnabled.value === false || isFullSeason.value === true) {\r\n\t\t\tFormValidation.removeErrorFromContrl(startDate, 'conditionallyRequired');\r\n\t\t\tFormValidation.removeErrorFromContrl(endDate, 'conditionallyRequired');\r\n\t\t\treturn;\r\n\t\t} else {\r\n\t\t\t// conditionally require dates\r\n\t\t\tif (!startDate.value) {\r\n\t\t\t\tstartDate.setErrors( { 'conditionallyRequired': true });\r\n\t\t\t}\r\n\r\n\t\t\tif (!endDate.value) {\r\n\t\t\t\tendDate.setErrors( { 'conditionallyRequired': true });\r\n\t\t\t}\r\n\r\n\t\t\tif (moment(startDate.value).isSameOrAfter(endDate.value)) {\r\n\t\t\t\tstartDate.setErrors(error);\r\n\t\t\t\tendDate.setErrors(error);\r\n\t\t\t} else {\r\n\t\t\t\tFormValidation.removeErrorFromContrl(startDate, 'endDateBeforeStartDate');\r\n\t\t\t\tFormValidation.removeErrorFromContrl(endDate, 'endDateBeforeStartDate');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _setDateLimits(): void {\r\n\t\tlet start, end: Date;\r\n\r\n\t\tstart = this.f.startDate.value;\r\n\t\tend = this.f.endDate.value;\r\n\r\n\t\tif (start) {\r\n\t\t\tthis.minEndDate = moment(start).add(1, 'days').toDate();\r\n\t\t}\r\n\r\n\t\tif (end) {\r\n\t\t\tthis.maxStartDate = moment(end).subtract(1, 'days').toDate();\r\n\t\t}\r\n\t}\r\n}\r\n","<form [formGroup]=\"form\">\r\n\t<p class=\"cm-form__instructions\">\r\n\t\t{{'Does this planting use a macro tunnel?' | translate }} \r\n\t</p>\r\n\r\n\t<mat-radio-group\r\n\t\taria-label=\"\"\r\n\t\tname=\"isEnabled\"\r\n\t\tformControlName=\"isEnabled\">\r\n\r\n\t\t<mat-radio-button [value]=\"true\"\r\n\t\t\tname=\"isEnabled\">\r\n\t\t\t{{'Yes' | translate}}\r\n\t\t</mat-radio-button>\r\n\r\n\t\t<mat-radio-button class=\"mat-radio-button--left-margin\"\r\n\t\t\t[value]=\"false\"\r\n\t\t\tname=\"isEnabled\">\r\n\t\t\t{{'No' | translate}}\r\n\t\t</mat-radio-button>\r\n\t</mat-radio-group>\r\n\r\n\t<ng-container *ngIf=\"f.isEnabled.value\">\r\n\t\t<div class=\"bk-modal__section-subtitle\">{{'Length of Application' | translate }} </div>\r\n\t\t\r\n\t\t<mat-radio-group aria-label=\"\"\r\n\t\t\tname=\"isFullSeason\"\r\n\t\t\tformControlName=\"isFullSeason\">\r\n\t\t\r\n\t\t\t<mat-radio-button [value]=\"true\"\r\n\t\t\t\tname=\"isFullSeason\">\r\n\t\t\t\t{{'Entire Season' | translate}}\r\n\t\t\t</mat-radio-button>\r\n\t\t\r\n\t\t\t<mat-radio-button class=\"mat-radio-button--left-margin\"\r\n\t\t\t\t[value]=\"false\"\r\n\t\t\t\tname=\"isFullSeason\">\r\n\t\t\t\t{{'Pick a Date Range' | translate}}\r\n\t\t\t</mat-radio-button>\r\n\t\t</mat-radio-group>\r\n\r\n\t\t<!-- date range -->\r\n\r\n\t\t<div *ngIf=\"f.isFullSeason.value === false\"\r\n\t\t\tclass=\"bk-clearfix\">\r\n\r\n\t\t\t<mat-form-field appearance=\"fill\"\r\n\t\t\t\tclass='bk-mat-date-field bk-mat-date-field--first'>\r\n\t\t\t\t<mat-label>Start Date</mat-label>\r\n\t\t\t\t<input matInput [matDatepicker]=\"picker\"\r\n\t\t\t\t\t[min]=\"wetDateControl.value\"\r\n\t\t\t\t\t[max]=\"maxStartDate\"\r\n\t\t\t\t\tformControlName=\"startDate\">\r\n\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n\t\t\t\t<mat-datepicker #picker></mat-datepicker>\r\n\t\t\t\t<mat-error *ngIf=\"f.startDate.invalid && (f.startDate.dirty || f.startDate.touched)\">\r\n\t\t\t\t\t<span *ngIf=\"f.startDate.errors.startDateBeforeWetDate\">\r\n\t\t\t\t\t\t{{ 'Start date should be on or after wet date' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.startDate.errors.startDateAfterHarvestDate\">\r\n\t\t\t\t\t\t{{ 'Start date should be before harvest date' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.startDate.errors.conditionallyRequired\">\r\n\t\t\t\t\t\t{{ 'Start date is required' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.startDate.errors.endDateBeforeStartDate\">\r\n\t\t\t\t\t\t{{ 'Start date must be before end date' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\r\n\t\t\t<mat-form-field appearance=\"fill\"\r\n\t\t\t\tclass='bk-mat-date-field'>\r\n\t\t\t\t<mat-label>End Date</mat-label>\r\n\t\t\t\t<input matInput [matDatepicker]=\"picker2\"\r\n\t\t\t\t\t[max]=\"harvestDateControl.value\"\r\n\t\t\t\t\t[min]=\"minEndDate\"\r\n\t\t\t\t\tformControlName=\"endDate\">\r\n\t\t\t\t<mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n\t\t\t\t<mat-datepicker #picker2></mat-datepicker>\r\n\t\t\t\t<mat-error *ngIf=\"f.endDate.invalid && (f.endDate.dirty || f.endDate.touched)\">\r\n\t\t\t\t\t<span *ngIf=\"f.endDate.errors.matDatepickerMax\">\r\n\t\t\t\t\t\t{{ 'End date should be on or before harvest date' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.endDate.errors.conditionallyRequired\">\r\n\t\t\t\t\t\t{{ 'End date is required' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"f.endDate.errors.endDateBeforeStartDate\">\r\n\t\t\t\t\t\t{{ 'End date must be after start date' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t</ng-container>\r\n</form>","import { Component, OnInit, Input, OnDestroy } from '@angular/core';\r\nimport * as moment from 'moment';\r\nimport { FormGroup, AbstractControl } from '@angular/forms';\r\nimport { MacroTunnelFields } from './macro-tunnel-form';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nexport enum macroTunnelFields {\r\n\tstartDate = 'startDate',\r\n\tendDate = 'endDate',\r\n\tisEnabled = 'isEnabled',\r\n\tisFullSeason = 'isFullSeason'\r\n};\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'macro-tunnel',\r\n\ttemplateUrl: 'macro-tunnel.html',\r\n\tstyleUrls: [ 'macro-tunnel.scss']\r\n})\r\n\r\nexport class MacroTunnelComponent implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup; // macro tunnel form\r\n\r\n\t@Input()\r\n\tpublic wetDateControl: AbstractControl;\r\n\r\n\t@Input()\r\n\tpublic harvestDateControl: AbstractControl;\r\n\r\n\tpublic maxStartDate: Date;\r\n\tpublic minEndDate: Date;\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic get f(): { [key in MacroTunnelFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in MacroTunnelFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._setStartDateLimit();\r\n\t\tthis._setEndDateLimit();\r\n\t\tthis._bindValueChanges();\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 _bindValueChanges(): void {\r\n\t\tthis.harvestDateControl.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.f.startDate.markAsTouched();\r\n\t\t\tthis.f.endDate.markAsTouched();\r\n\t\t});\r\n\r\n\t\tthis.wetDateControl.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.f.startDate.markAsTouched();\r\n\t\t\tthis.f.endDate.markAsTouched();\r\n\t\t});\r\n\r\n\t\tthis.f.endDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._setStartDateLimit();\r\n\t\t});\r\n\r\n\t\tthis.f.startDate.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._setEndDateLimit();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _setEndDateLimit(): void {\r\n\t\tif (this.f.startDate.value) {\r\n\t\t\tthis.minEndDate = moment(this.f.startDate.value).add(1, 'days').toDate();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _setStartDateLimit(): void {\r\n\t\tif (this.f.endDate.value) {\r\n\t\t\tthis.maxStartDate = moment(this.f.endDate.value).subtract(1, 'days').toDate();\r\n\t\t}\r\n\t}\r\n}\r\n","<form [formGroup]=form>\r\n\t<h4 class=\"bk-modal__section-title\">\r\n\t\t{{'Calculate Max Uptake' | translate }}\r\n\t</h4>\r\n\t<label class=\"bk-modal__label\">\r\n\t\t{{'Expected Yield' | translate }} \r\n        <info-icon [title]=\"'Expected Yield Help Text'\"></info-icon>\r\n\t</label>\r\n\r\n\t<input class=\"bk-modal__field--with-unit bk-input--short\r\n\t\tbk-modal__field\"\r\n\t\ttype=\"number\"\r\n\t\tstep=\"0.01\"\r\n\t\trequired\r\n\t\t[formControl]=\"form.get('NCalculator').get('YieldTarget')\" />\r\n\r\n\t<div class=\"bk-modal__field-unit\"\r\n\t\t*ngIf=\"!f.IsStressable.value || cCalc !== calculatorEnum.TOMATO\">\r\n\t\t{{'lbs Fresh Weight/acre' | translate}}\r\n\t</div>\r\n\r\n\t<div class=\"bk-modal__field-unit\"\r\n\t\t*ngIf=\"f.IsStressable.value && cCalc === calculatorEnum.TOMATO\">\r\n\t\t{{'tons fruit/acre' | translate}}\r\n\t</div>\r\n\r\n\t<div class=\"bk-modal__section-buttons\">\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[disabled]=\"form.invalid\"\r\n\t\t\t(click)=\"calculate($event)\">\r\n\t\t\t{{'Calculate' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</form>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { NCalculatorFields } from '../nitrogen-calculator/n-calculator';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\nimport { CalculateService } from '../../../../services/calculate.service';\r\nimport { FormValidation } from '../../../../classes/formValidation';\r\nimport { CropTypeFormFields } from '../../../crop-types/cropTypeFormBuilder';\r\nimport { eCalculators } from '../../../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'max-uptake-calculator',\r\n\ttemplateUrl: 'max-uptake-calculator.html',\r\n})\r\n\r\nexport class MaxUptakeCalculatorComponent implements OnInit {\r\n\r\n\tpublic form: FormGroup;\r\n\tpublic calculatorEnum = eCalculators;\r\n\tpublic cCalc: number;\r\n\r\n\tpublic get f(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.form as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\t/**\r\n\t * N Calculator form fields\r\n\t */\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 _control: AbstractControl;\r\n\tprivate _initialValues: CropTypeFormFields;\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: {\r\n\t\t\tform: FormGroup, control: AbstractControl },\r\n\r\n\t\tprivate _dialogRef: MatDialogRef<MaxUptakeCalculatorComponent>,\r\n\t\tprivate _calculateService: CalculateService,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.form = this._data.form;\r\n\t\tthis.cCalc = this.f.CalculatorId.value;\r\n\t\tthis._control = this._data.control;\r\n\t\tthis._initialValues = this.form.value; // save initial values\r\n\t\tthis._setValidators();\r\n\t}\r\n\r\n\tpublic calculate(e: MouseEvent): void {\r\n\t\tlet result: number;\r\n\r\n\t\tif (!this.f.UptakeFactor.value) {\r\n\t\t\tresult = 0;\r\n\t\t} else {\r\n\t\t\tresult = this._calculateService.calculateTotalNUptake(\r\n\t\t\t\tthis.fnc.YieldTarget.value,\r\n\t\t\t\tthis.f.UptakeFactor.value, this.f.UptakeConstant.value);\r\n\t\t}\r\n\r\n\t\t// this._control = this.f.MaxUptake\r\n\t\tthis._control.setValue(result);\r\n\r\n\t\tthis._clearValidators();\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tpublic cancel(e: MouseEvent): void {\r\n\t\tthis.form.reset(this._initialValues);\r\n\t\tthis._clearValidators();\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tprivate _setValidators(): void {\r\n\t\tFormValidation.setValidator(this.fnc.YieldTarget, [Validators.required, FormValidation.integerValidator()]);\r\n\t}\r\n\r\n\tprivate _clearValidators(): void {\r\n\t\tFormValidation.clearValidator(this.fnc.YieldTarget);\r\n\t}\r\n\r\n\tprivate _closeDialog() {\r\n\t\tthis._sharedUpdateService.cancel();\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","<form [formGroup]=form>\r\n    <h4 class=\"bk-modal__section-title\">\r\n        {{'Calculate Compost N Credits' | translate }}\r\n    </h4>\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            {{'Compost Amount' | translate }}\r\n        </mat-label>\r\n        <input matInput\r\n            type=\"number\"\r\n            required\r\n            name=\"Amount\"\r\n            formControlName=\"Amount\" />\r\n        <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n            {{'tons' | translate }} /{{'acre' | translate }}\r\n        </span>\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            {{'N % from Compost Analysis' | translate }}\r\n        </mat-label>\r\n        <input matInput\r\n            type=\"number\"\r\n            required\r\n            name=\"N\"\r\n            formControlName=\"N\" />\r\n        <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n            %\r\n        </span>\r\n        <mat-error *ngIf=\"f.N.invalid && (f.N.dirty || f.N.touched)\">\r\n            {{'Field is invalid' | translate }}\r\n        </mat-error>\r\n    </mat-form-field>\r\n\r\n    <mat-form-field  appearance=\"fill\">\r\n\r\n        <mat-label>\r\n            {{'Application Method' | translate }}\r\n        </mat-label>\r\n\r\n        <mat-select required\r\n            name=\"ApplicationMethod\"\r\n            formControlName=\"ApplicationMethod\">\r\n\r\n            <mat-option *ngFor=\"let method of applicationMethods\"\r\n                [value]=\"method.key\">\r\n                {{method.value}}\r\n            </mat-option>\r\n\r\n        </mat-select>\r\n    </mat-form-field>\r\n\r\n    <!-- footer -->\r\n    <div class=\"bk-modal__section-buttons\">\r\n        <button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"cancel($event)\">\r\n            {{'Cancel' | translate }}\r\n        </button>\r\n        <button class=\"bk-button bk-button--medium\"\r\n            [disabled]='form.invalid'\r\n            (click)=\"calculate($event)\">\r\n            {{'Calculate' | translate }}\r\n        </button>\r\n    </div>\r\n</form>","import { Component, Output, OnInit, EventEmitter, Input, Inject } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { FormValidation } from '../../../../classes/formValidation';\r\nimport { ISelectOptions } from '../../../../interfaces/abstract';\r\nimport { CompostFields } from '../../calculatorSettingsForm';\r\nimport { ICompostNViewModel } from '../../interfaces';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'compost',\r\n\ttemplateUrl: 'compost.html'\r\n})\r\n\r\nexport class CompostComponent implements OnInit {\r\n\r\n\tpublic applicationMethods: ISelectOptions[] = [\r\n\t\t{ key: 0.6, value: 'Fresh, Incorporated' },\r\n\t\t{ key: 0.3, value: 'Fresh, Unincorporated' },\r\n\t\t{ key: 0.4, value: 'Medium Composted' },\r\n\t\t{ key: 0.2, value: 'Well Composted' },\r\n\t\t{ key: 0, value: 'N/A' },\r\n\t];\r\n\r\n\tpublic form: FormGroup;\r\n\r\n\tpublic get f(): { [key in CompostFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in CompostFields]: AbstractControl };\r\n\t}\r\n\r\n\tprivate _initialValues: ICompostNViewModel;\r\n\tprivate _control: AbstractControl;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialogRef: MatDialogRef<CompostComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { form: FormGroup, control: AbstractControl },\r\n\t\tprivate _sharedUpdateService: SharedUpdateService\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.form = this._data.form;\r\n\t\tthis._control = this._data.control;\r\n\t\tthis._initialValues = this.form.value;\r\n\t\tthis._setValidators();\r\n\t}\r\n\r\n\tpublic calculate(e: MouseEvent): void {\r\n\t\tlet result: number;\r\n\r\n\t\tresult = this.f.ApplicationMethod.value * this.f.Amount.value * 2000\r\n\t\t\t* this.f.N.value / 100;\r\n\r\n\t\tresult = parseFloat(result.toFixed(2));\r\n\r\n\t\tthis._control.setValue(result);\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tpublic cancel($event: MouseEvent): void {\r\n\t\tthis.form.reset(this._initialValues);\r\n\t\tthis._clearValidators();\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tprivate _closeDialog() {\r\n\t\tthis._sharedUpdateService.cancel();\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tprivate _setValidators(): void {\r\n\t\tthis.f.Amount.setValidators([ Validators.required, Validators.min(0)]);\r\n\r\n\t\tthis.f.ApplicationMethod.setValidators([Validators.required,\r\n\t\t\tValidators.min(0.1)]);\r\n\r\n\t\tthis.f.N.setValidators([Validators.required, Validators.min(0),\r\n\t\t\tValidators.max(100)]);\r\n\t}\r\n\r\n\tprivate _clearValidators(): void {\r\n\t\tFormValidation.clearValidator(this.f.Amount);\r\n\t\tFormValidation.clearValidator(this.f.ApplicationMethod);\r\n\t\tFormValidation.clearValidator(this.f.N);\r\n\t}\r\n}\r\n","<form [formGroup]=form>\r\n    <h4 class=\"bk-modal__section-title\">\r\n        {{'Calculate Legume Cover Crop N Credits' | translate }}\r\n    </h4>\r\n\r\n    <mat-form-field  appearance=\"fill\"\r\n        class=\"mat-form-field--one-line mat-form-field--short\">\r\n\r\n        <mat-label>\r\n            {{'Legume Cover Crop Stand' | translate }}\r\n        </mat-label>\r\n\r\n        <mat-select required\r\n            name=\"LegumeCoverCropStand\"\r\n            formControlName=\"LegumeCoverCropStand\">\r\n\r\n            <mat-option *ngFor=\"let standOption of standOptions\"\r\n                [value]=\"standOption.key\">\r\n                {{standOption.value}}\r\n            </mat-option>\r\n\r\n        </mat-select>\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\r\n        <mat-label>\r\n            {{'Incorporation Method' | translate }}\r\n        </mat-label>\r\n\r\n        <mat-select required\r\n            name=\"IncorporationMethod\"\r\n            formControlName=\"IncorporationMethod\">\r\n\r\n            <mat-option *ngFor=\"let incorporationMethodOption of incorporationMethodOptions\"\r\n                [value]=\"incorporationMethodOption.key\">\r\n                {{incorporationMethodOption.value}}\r\n            </mat-option>\r\n\r\n        </mat-select>\r\n    </mat-form-field>\r\n\r\n    <!-- footer -->\r\n    <div class=\"bk-modal__section-buttons\">\r\n        <button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"cancel($event)\">\r\n            {{'Cancel' | translate }}\r\n        </button>\r\n        <button class=\"bk-button bk-button--medium\"\r\n            [disabled]='form.invalid'\r\n            (click)=\"calculate($event)\">\r\n            {{'Calculate' | translate }}\r\n        </button>\r\n    </div>\r\n</form>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { ISelectOptions } from '../../../../interfaces/abstract';\r\nimport { ICoverCropViewModel } from '../../interfaces';\r\nimport { CoverCropFields } from '../../calculatorSettingsForm';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'cover-crop',\r\n\ttemplateUrl: 'cover-crop.html'\r\n})\r\n\r\nexport class CoverCropComponent implements OnInit {\r\n\r\n\tpublic standOptions: ISelectOptions[] = [\r\n\t\t{ key: 0, value: 'No Cover Crop' },\r\n\t\t{ key: 30, value: 'Poor Crop' },\r\n\t\t{ key: 70, value: 'Good Crop' },\r\n\t\t{ key: 120, value: 'Great Crop' },\r\n\t];\r\n\r\n\tpublic incorporationMethodOptions: ISelectOptions[] = [\r\n\t\t{ key: 0, value: 'N/A' },\r\n\t\t{ key: 0.7, value: 'Disc In' },\r\n\t\t{ key: 0.5, value: 'Mow Only' },\r\n\t];\r\n\r\n\tpublic get f(): { [key in CoverCropFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in CoverCropFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic form: FormGroup;\r\n\tprivate _control: AbstractControl;\r\n\r\n\tprivate _initialValues: ICoverCropViewModel;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialogRef: MatDialogRef<CoverCropComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { form: FormGroup, control: AbstractControl },\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.form = this._data.form;\r\n\t\tthis._control = this._data.control;\r\n\t\tthis._initialValues = this.form.value;\r\n\t}\r\n\r\n\tpublic calculate(e: MouseEvent): void {\r\n\t\tlet result: number;\r\n\r\n\t\tresult = this.f.LegumeCoverCropStand.value * this.f.IncorporationMethod.value;\r\n\t\tthis._control.setValue(result);\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tpublic cancel(e: MouseEvent): void {\r\n\t\tthis.form.reset(this._initialValues);\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tprivate _closeDialog() {\r\n\t\tthis._sharedUpdateService.cancel();\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","<form *ngIf=\"form\" [formGroup]=\"form\">\r\n    <h4 class=\"bk-modal__section-title\">\r\n        {{'Calculate Manure N Credits' | translate }}\r\n    </h4>\r\n\r\n    <div class=\"bk-modal__section-subtitle\">\r\n        {{ 'Prior Year' | translate }}\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\r\n        <mat-label>\r\n            {{'Manure Type' | translate }}\r\n        </mat-label>\r\n\r\n        <mat-select required\r\n            name=\"TypePriorYear\"\r\n            formControlName=\"TypePriorYear\">\r\n\r\n            <mat-option *ngFor=\"let manureTypeOption of manureTypeOptions\"\r\n                [value]=\"manureTypeOption.keys[0]\">\r\n                {{manureTypeOption.label}}\r\n            </mat-option>\r\n\r\n        </mat-select>\r\n    </mat-form-field>\r\n\r\n    <mat-form-field appearance=\"fill\">\r\n        <mat-label>\r\n            {{'Manure Rate' | translate }}\r\n        </mat-label>\r\n        <input matInput\r\n            type=\"number\"\r\n            required\r\n            name=\"manureRatePriorYear\"\r\n            formControlName=\"RatePriorYear\" />\r\n        <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n            {{'tons' | translate }} /{{'acre' | translate }}\r\n        </span>\r\n    </mat-form-field>\r\n\r\n    <div class=\"bk-modal__section-subtitle\">\r\n        {{ '2 Years Ago' | translate }}\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\r\n        <mat-label>\r\n            {{'Manure Type' | translate }}\r\n        </mat-label>\r\n\r\n        <mat-select required\r\n            name=\"manureTypeTwoYearsAgo\"\r\n            formControlName=\"TypeTwoYearsAgo\">\r\n\r\n            <mat-option *ngFor=\"let manureTypeOption of manureTypeOptions\"\r\n                [value]=\"manureTypeOption.keys[1]\">\r\n                {{manureTypeOption.label}}\r\n            </mat-option>\r\n\r\n        </mat-select>\r\n    </mat-form-field>\r\n\r\n    <mat-form-field appearance=\"fill\">\r\n        <mat-label>\r\n            {{'Manure Rate' | translate }}\r\n        </mat-label>\r\n        <input matInput\r\n            type=\"number\"\r\n            required\r\n            name=\"manureRateTwoYearsAgo\"\r\n            formControlName=\"RateTwoYearsAgo\" />\r\n        <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n            {{'tons' | translate }} /{{'acre' | translate }}\r\n        </span>\r\n    </mat-form-field>\r\n\r\n    <!-- footer -->\r\n    <div class=\"bk-modal__section-buttons\">\r\n        <button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"cancel($event)\">\r\n            {{'Cancel' | translate }}\r\n        </button>\r\n        <button class=\"bk-button bk-button--medium\"\r\n            [disabled]='form.invalid'\r\n            (click)=\"calculate($event)\">\r\n            {{'Calculate' | translate }}\r\n        </button>\r\n    </div>\r\n</form>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { ISelectoptionsMultiple } from '../../../../interfaces/abstract';\r\nimport { IManureNViewModel } from '../../interfaces';\r\nimport { AbstractControl, FormGroup, Validators } from '@angular/forms';\r\nimport { ManureNFields } from '../../calculatorSettingsForm';\r\nimport { FormValidation } from '../../../../classes/formValidation';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { CoverCropComponent } from './cover-crop';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'manure-calculator',\r\n\ttemplateUrl: 'manure.html'\r\n})\r\n\r\nexport class ManureComponent implements OnInit {\r\n\r\n\tpublic isValid: boolean;\r\n\r\n\tpublic manureTypeOptions: ISelectoptionsMultiple[] = [\r\n\t\t{ keys: [29, 0.3], label: 'Chicken Manure' },\r\n\t\t{ keys: [52, 2.6], label: 'Fresh Bovine Waste' },\r\n\t\t{ keys: [20, 7.5], label: 'Dry Corral Manure, 2.5%N' },\r\n\t\t{ keys: [10, 3], label: 'Dry Corral Manure, 1.5%N' },\r\n\t\t{ keys: [4, 1.6], label: 'Dry Corral Manure, 1.0%N' },\r\n\t\t{ keys: [18, 3.2], label: 'Liquid Sludge, 2.5%N' },\r\n\t\t{ keys: [0, 0], label: 'No Manure' },\r\n\t];\r\n\r\n\tpublic get f(): { [key in ManureNFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in ManureNFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic form: FormGroup;\r\n\tprivate _initialValues: IManureNViewModel; // cache initial values\r\n\tprivate _control: AbstractControl;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialogRef: MatDialogRef<CoverCropComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { form: FormGroup, control: AbstractControl },\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t) {}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.form = this._data.form;\r\n\t\tthis._control = this._data.control;\r\n\t\tthis._initialValues = this.form.value;\r\n\t\tthis._setValidators();\r\n\t}\r\n\r\n\tpublic calculate(e: MouseEvent): void {\r\n\t\tlet result: number;\r\n\r\n\t\tresult = this.f.RatePriorYear.value * this.f.TypePriorYear.value +\r\n\t\t\tthis.f.RateTwoYearsAgo.value * this.f.TypeTwoYearsAgo.value;\r\n\r\n\t\tresult = parseFloat(result.toFixed(2));\r\n\r\n\t\tthis._clearValidators();\r\n\t\tthis._control.setValue(result);\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tpublic cancel(e: MouseEvent): void {\r\n\t\tthis.form.reset(this._initialValues);\r\n\t\tthis._clearValidators();\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tprivate _closeDialog() {\r\n\t\tthis._sharedUpdateService.cancel();\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tprivate _setValidators(): void {\r\n\t\tthis.f.RatePriorYear.setValidators(Validators.min(0));\r\n\t\tthis.f.RateTwoYearsAgo.setValidators(Validators.min(0));\r\n\t\tthis.form.setValidators(this._manureValidator);\r\n\t}\r\n\r\n\tprivate _clearValidators(): void {\r\n\t\tFormValidation.clearValidator(this.f.RatePriorYear);\r\n\t\tFormValidation.clearValidator(this.f.RateTwoYearsAgo);\r\n\t\tFormValidation.clearValidator(this.form);\r\n\t}\r\n\r\n\tprivate _manureValidator(g: FormGroup): { noPositiveResult: boolean } {\r\n\t\tlet ratePriorYear: AbstractControl = g.get('RatePriorYear');\r\n\t\tlet typePriorYear: AbstractControl = g.get('TypePriorYear');\r\n\t\tlet rateTwoYearsAgo: AbstractControl = g.get('RateTwoYearsAgo');\r\n\t\tlet typeTwoYearsAgo: AbstractControl = g.get('TypeTwoYearsAgo');\r\n\t\tlet error: { noPositiveResult: boolean } = { noPositiveResult: true };\r\n\r\n\t\tif (ratePriorYear.value * typePriorYear.value > 0 ||\r\n\t\t\trateTwoYearsAgo.value * typeTwoYearsAgo.value > 0) {\r\n\r\n\t\t\tFormValidation.removeErrorFromContrl(typePriorYear, 'noPositiveResult');\r\n\t\t\tFormValidation.removeErrorFromContrl(ratePriorYear, 'noPositiveResult');\r\n\t\t\tFormValidation.removeErrorFromContrl(typeTwoYearsAgo, 'noPositiveResult');\r\n\t\t\tFormValidation.removeErrorFromContrl(rateTwoYearsAgo, 'noPositiveResult');\r\n\r\n\t\t\treturn;\r\n\t\t} else {\r\n\t\t\tif (ratePriorYear.value && ratePriorYear.valid) {\r\n\t\t\t\ttypePriorYear.setErrors(error);\r\n\t\t\t}\r\n\r\n\t\t\tif (typePriorYear.value) {\r\n\t\t\t\tratePriorYear.setErrors(error);\r\n\t\t\t}\r\n\r\n\t\t\tif (rateTwoYearsAgo.value && rateTwoYearsAgo.valid) {\r\n\t\t\t\ttypeTwoYearsAgo.setErrors(error);\r\n\t\t\t}\r\n\r\n\t\t\tif (typeTwoYearsAgo.value) {\r\n\t\t\t\trateTwoYearsAgo.setErrors(error);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","<form [formGroup]=\"form\">\r\n\t<mat-form-field appearance=\"fill\">\r\n\t\t<mat-label>\r\n\t\t\t{{'Estimated' | translate }} {{'Yield' | translate }}\r\n\t\t</mat-label>\r\n\t\t<input matInput\r\n\t\t\ttype=\"number\"\r\n\t\t\tname=\"YieldTargetDisplayed\"\r\n\t\t\tformControlName=\"YieldTargetDisplayed\" />\r\n\t\t<span matSuffix class=\"mat-form-field-suffix--padded\">\r\n\t\t\t<ng-container *ngIf=\"fp.YieldUnitId.value === YIELD_UNIT_IDS.LBS\">\r\n\t\t\t\t{{'lbs' | translate }}/{{'acre' | translate}}\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container *ngIf=\"fp.YieldUnitId.value === YIELD_UNIT_IDS.TONS\">\r\n\t\t\t\t{{'tons' | translate }}/{{'acre' | translate}}\r\n\t\t\t</ng-container>\r\n\t\t</span>\r\n\t\t<mat-hint>\r\n\t\t\t{{ 'Estimated Yield Help Text' | translate }}\r\n\t\t</mat-hint>\r\n\t\t<mat-error *ngIf=\"fc.MaxNRec.invalid && (fc.MaxNRec.dirty || fc.MaxNRec.touched)\">\r\n\t\t\t{{'Field is required and must be greater than 0' | translate }}\r\n\t\t</mat-error>\r\n\t</mat-form-field>\r\n\r\n\t<h4>\r\n\t\tSoil Amendments\r\n\t</h4>\r\n\t<p>Use the calculators below to estimate the nitrogen credit from amendments.\r\n\t\tThe nitrogen credit is used to fine tune the seasonal nitrogen requirement\r\n\t\tfor your planting.</p>\r\n\r\n\t<mat-form-field appearance=\"fill\"\r\n\t\tclass=\"mat-form-field--one-line mat-form-field--short\">\r\n\t\t<mat-label>\r\n\t\t\t{{'Manure N Credits' | translate }}\r\n\t\t</mat-label>\r\n\t\t<input matInput\r\n\t\t\ttype=\"number\"\r\n\t\t\trequired\r\n\t\t\tname=\"ManureN\"\r\n\t\t\tformControlName=\"ManureN\" />\r\n\r\n\t\t<span matSuffix class=\"mat-form-field-suffix--padded\">\r\n\t\t\t<i class=\"bk-calculation-icon fa fa-calculator\"\r\n\t\t\t\t(click)=\"openManureCalculator($event)\">\r\n\t\t\t</i>\r\n\t\t\t{{'lbs' | translate }} N/{{'acre' | translate }}\r\n\t\t</span>\r\n\t\t\r\n\t\t<mat-error *ngIf=\"f.ManureN.invalid && (f.ManureN.dirty || f.ManureN.touched)\">\r\n\t\t\t{{'Field is required' | translate }}\r\n\t\t</mat-error>\r\n\t</mat-form-field>\r\n\r\n\t<mat-form-field appearance=\"fill\"\r\n\t\tclass=\"mat-form-field--one-line mat-form-field--short\">\r\n\t\t<mat-label>\r\n\t\t\t{{'Compost N Credits' | translate }}\r\n\t\t</mat-label>\r\n\t\t<input matInput\r\n\t\t\ttype=\"number\"\r\n\t\t\trequired\r\n\t\t\tname=\"CompostN\"\r\n\t\t\tformControlName=\"CompostN\" />\r\n\r\n\t\t<span matSuffix class=\"mat-form-field-suffix--padded\">\r\n\t\t\t<i class=\"bk-calculation-icon fa fa-calculator\"\r\n\t\t\t\t(click)=\"openCompostCalculator($event)\">\r\n\t\t\t</i>\r\n\t\t\t{{'lbs' | translate }} N/{{'acre' | translate }}\r\n\t\t</span>\r\n\t\t\r\n\t\t<mat-error *ngIf=\"f.CompostN.invalid && (f.CompostN.dirty || f.CompostN.touched)\">\r\n\t\t\t{{'Field is required' | translate }}\r\n\t\t</mat-error>\r\n\t</mat-form-field>\r\n\r\n\t<mat-form-field appearance=\"fill\"\r\n\t\tclass=\"mat-form-field--one-line mat-form-field--short\">\r\n\t\t<mat-label>\r\n\t\t\t{{'Cover Crop N Credits' | translate }}\r\n\t\t</mat-label>\r\n\t\t<input matInput\r\n\t\t\ttype=\"number\"\r\n\t\t\trequired\r\n\t\t\tname=\"CoverCropN\"\r\n\t\t\tformControlName=\"CoverCropN\" />\r\n\r\n\t\t<span matSuffix class=\"mat-form-field-suffix--padded\">\r\n\t\t\t<i class=\"bk-calculation-icon fa fa-calculator\"\r\n\t\t\t\t(click)=\"openCoverCropCalculator($event)\">\r\n\t\t\t</i>\r\n\t\t\t{{'lbs' | translate }} N/{{'acre' | translate }}\r\n\t\t</span>\r\n\t\t\r\n\t\t<mat-error *ngIf=\"f.CoverCropN.invalid && (f.CoverCropN.dirty || f.CoverCropN.touched)\">\r\n\t\t\t{{'Field is required' | translate }}\r\n\t\t</mat-error>\r\n\t</mat-form-field>\r\n\r\n\t<ng-container *ngIf=\"fp.CommodityTypeId.value !== COMMODITY_TYPES.PISTACHIO && f.TreeNutrientThresholds.value &&\r\n\t\tf.TreeNutrientThresholds.value.length > 0\">\r\n\r\n\t\r\n\t\t<h4>{{'Spring Leaf Nutrient Values' | translate }}</h4>\r\n\t\t<p>\r\n\t\t\t{{ 'Spring Leaf Nutrient Values Help Text' | translate }}.\r\n\t\t</p>\r\n\r\n\t\t<div *ngFor=\"let nutrient of f.TreeNutrientThresholds.controls; let i = index\">\r\n\t\t\t<mat-form-field appearance=\"fill\">\r\n\t\t\t\t<mat-label>\r\n\t\t\t\t\t{{nutrient.get('NutrientName').value | translate }} ({{ nutrient.get('NutrientSymbol').value }})\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\t[formControl]=\"f.TreeNutrientThresholds.controls[i].get('Recorded')\" />\r\n\t\t\r\n\t\t\t\t<span matSuffix class=\"mat-form-field-suffix--padded\">\r\n\t\t\t\t\t{{ nutrient.get('NutrientUnit').value }}\r\n\t\t\t\t</span>\r\n\r\n\t\t\t\t<mat-error *ngIf=\"f.CoverCropN.invalid && (f.CoverCropN.dirty || f.CoverCropN.touched)\">\r\n\t\t\t\t\t{{'Field is required' | translate }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t</ng-container>\r\n</form>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { eCommodityTypes } from '../../../../interfaces/constants';\r\nimport { IFertilizationEventSeasonalNUptakeJSON } from '../../../fertilization-event/interfaces';\r\nimport { FertilizationEventService } from '../../../fertilization-event/service';\r\nimport { Subject } from 'rxjs';\r\nimport { CropTypeFormFields } from '../../../crop-types/cropTypeFormBuilder';\r\nimport { PlantingSettingFields } from '../../plantingSettingFields';\r\nimport { YieldUnitId } from '../../../../models/commodity-type/interfaces';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\nimport { NCalculatorComponent } from './n-calculator';\r\n\r\nexport type NCalculatorFields = 'YieldTarget' | 'YieldTargetDisplayed' |\r\n\t'ManureN' | 'CompostN' | 'CoverCropN' | 'TreeNutrientThresholds';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'n-calculator-simple',\r\n\ttemplateUrl: 'n-calculator-simple.html',\r\n\tstyleUrls: [ 'n-calculator-simple.scss']\r\n})\r\n\r\nexport class NCalculatorSimpleComponent extends NCalculatorComponent implements OnInit {\r\n\r\n\t@Input()\r\n\tpublic plantingSettingsForm: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic calculatorSettings: FormGroup; // used by child components\r\n\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\tpublic YIELD_UNIT_IDS = YieldUnitId;\r\n\r\n\tpublic get f(): { [key in NCalculatorFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in NCalculatorFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.plantingSettingsForm.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fp(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.plantingSettingsForm.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic isManureCalculatorVisible = false;\r\n\tpublic isCompostCalculatorVisible = false;\r\n\tpublic isCoverCropCalculatorVisible = false;\r\n\tpublic yieldUnit: string;\r\n\tpublic seasonalNRecommendationSummary: IFertilizationEventSeasonalNUptakeJSON = null;\r\n\r\n\tconstructor(\r\n\t\tprotected _dialog: MatDialog,\r\n\t\tprotected _dialogRef: MatDialogRef<NCalculatorComponent>,\r\n\t\tprotected _fertilizationEventService: FertilizationEventService,\r\n\t\tprotected _sharedUpdateService: SharedUpdateService\r\n\t) {\r\n\t\tsuper(_dialog, _dialogRef, _fertilizationEventService, _sharedUpdateService);\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._populate();\r\n\t\tthis._bindValueChanges();\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","<form [formGroup]=\"form\">\r\n\t<h2>\r\n\t\t{{'Seasonal N Requirement Calculator' | translate}}\r\n\t</h2>\r\n\r\n\t<!-- left column -->\r\n\r\n\t<div class=\"bk-modal__right-two-col bk-modal__right-two-col--left\">\r\n\t\t<label class=\"bk-modal__label\" for=\"YieldTargetDisplayed\">\r\n\t\t\t{{'Estimated' | translate }} {{'Yield' | translate }} ({{ 'Optional' | translate }})\r\n\t\t\t<info-icon [title]=\"'Estimated Yield Help Text'\"></info-icon>\r\n\t\t</label>\r\n\r\n\t\t<input class=\"bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n\t\t\ttype=\"number\"\r\n\t\t\tformControlName=\"YieldTargetDisplayed\"\r\n\t\t\tid=\"YieldTargetDisplayed\"\r\n\t\t\tname=\"YieldTargetDisplayed\"\r\n\t\t\tstep=\"0.01\"/>\r\n\r\n\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t<span *ngIf=\"fp.YieldUnitId.value === YIELD_UNIT_IDS.LBS\">\r\n\t\t\t\t{{'lbs' | translate }}/{{'acre' | translate}}\r\n\t\t\t</span>\r\n\t\t\t<span *ngIf=\"fp.YieldUnitId.value === YIELD_UNIT_IDS.TONS\">\r\n\t\t\t\t{{'tons' | translate }}/{{'acre' | translate}}\r\n\t\t\t</span>\r\n\t\t</div>\r\n\t\t\t\t\t\r\n\t\t<label class=\"bk-modal__label\" for=\"ManureN\">\r\n\t\t\t{{'Manure N Credits' | translate }}\r\n\t\t\t<info-icon [title]=\"'Manure N Credits Help Text'\"></info-icon>\r\n\t\t</label>\r\n\r\n\t\t<input class=\"bk-field--has-calculation bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n\t\t\ttype=\"number\"\r\n\t\t\tstep=\"0.01\"\r\n\t\t\tformControlName=\"ManureN\"\r\n\t\t\trequired\r\n\t\t\tid=\"ManureN\"\r\n\t\t\tname=\"ManureN\" />\r\n\t\t\r\n\t\t<i class=\"bk-calculation-icon fa fa-calculator\"\r\n\t\t\t(click)=\"openManureCalculator($event)\">\r\n\t\t</i>\r\n\r\n\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t{{'lbs' | translate }} N/{{'acre' | translate }}\r\n\t\t</div>\r\n\t\t<div *ngIf=\"f.ManureN.invalid && (f.ManureN.dirty || f.ManureN.touched)\"\r\n\t\t\tclass=\"bk-invalid-field\">{{'Field is required' | translate }}</div>\r\n\r\n\t\t<label class=\"bk-modal__label\" for=\"CompostN\">\r\n\t\t\t{{'Compost N Credits' | translate }}\r\n\t\t\t<info-icon [title]=\"'Compost N Credits Help Text'\"></info-icon>\r\n\t\t</label>\r\n\r\n\t\t<input class=\"bk-field--has-calculation bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n\t\t\ttype=\"number\"\r\n\t\t\tstep=\"0.01\"\r\n\t\t\tformControlName=\"CompostN\"\r\n\t\t\trequired\r\n\t\t\tid=\"CompostN\"\r\n\t\t\tname=\"CompostN\"/>\r\n\t\t\r\n\t\t<i class=\"bk-calculation-icon fa fa-calculator\"\r\n\t\t\t(click)=\"openCompostCalculator($event)\">\r\n\t\t</i>\r\n\r\n\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t{{'lbs' | translate }} N/{{'acre' | translate }}\r\n\t\t</div>\r\n\t\t<div *ngIf=\"f.CompostN.invalid && (f.CompostN.dirty || f.CompostN.touched)\"\r\n\t\t\tclass=\"bk-invalid-field\">\r\n\t\t\t{{'Field is required' | translate }}\r\n\t\t</div>\r\n\r\n\t\t<label class=\"bk-modal__label\" for=\"CoverCropN\">\r\n\t\t\t{{'Cover Crop N Credits' | translate }}\r\n\t\t\t<info-icon [title]=\"'Cover Crop N Credits Help Text'\"></info-icon>\r\n\t\t</label>\r\n\r\n\t\t<input class=\"bk-field--has-calculation bk-modal__field--with-unit bk-input--short bk-modal__field\"\r\n\t\t\ttype=\"number\"\r\n\t\t\tstep=\"0.01\"\r\n\t\t\tformControlName=\"CoverCropN\"\r\n\t\t\trequired\r\n\t\t\tid=\"CoverCropN\"\r\n\t\t\tname=\"CoverCropN\"/>\r\n\t\t\r\n\t\t<i class=\"bk-calculation-icon fa fa-calculator\"\r\n\t\t\t(click)=\"openCoverCropCalculator($event)\">   \r\n\t\t</i>\r\n\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t{{'lbs' | translate }} N/{{'acre' | translate }}\r\n\t\t</div>\r\n\t\t<div *ngIf=\"f.CoverCropN.invalid && (f.CoverCropN.dirty || f.CoverCropN.touched)\"\r\n\t\t\tclass=\"bk-invalid-field\">{{'Field is required' | translate }}</div>\r\n\t</div>\r\n\r\n\t<!-- Right Column -->\r\n\r\n\t<div class=\"bk-modal__right-two-col bk-modal__right-two-col--right\"\r\n\t\t*ngIf=\"fp.CommodityTypeId.value !== COMMODITY_TYPES.PISTACHIO && f.TreeNutrientThresholds.value &&\r\n\t\tf.TreeNutrientThresholds.value.length > 0\">\r\n\t\t<label class=\"bk-modal__label\">\r\n\t\t\t{{'Spring Leaf Nutrient Values' | translate }}\r\n\t\t\t<info-icon [title]=\"'Spring Leaf Nutrient Values Help Text'\"></info-icon>\r\n\t\t</label>\r\n\r\n\t\t<table class=\"bk-form__table bk-form__table--no-padding\">\r\n\t\t\t<thead>\r\n\t\t\t</thead>\r\n\t\t\t<tbody>\r\n\t\t\t\t<tr *ngFor=\"let nutrient of f.TreeNutrientThresholds.controls; let i = index\">\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<label for=\"nutrient_{{i}}\">\r\n\t\t\t\t\t\t\t{{nutrient.get('NutrientName').value | translate }} ({{ nutrient.get('NutrientSymbol').value }})\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<input class=\"bk-form__input-text--float\"\r\n\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\tid=\"nutrient_{{i}}\"\r\n\t\t\t\t\t\t\t[formControl]=\"f.TreeNutrientThresholds.controls[i].get('Recorded')\" />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t{{ nutrient.get('NutrientUnit').value }}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr *ngIf=\"seasonalNRecommendationSummary\">\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<label class=\"bk-spring-nutrient-ui__label\">\r\n\t\t\t\t\t\t\t{{ 'Predicted Summer Leaf N' | translate}}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td class=\"bk-spring-nutrient-ui__number\">\r\n\t\t\t\t\t\t<span [class.bk-spring-nutrient-ui__warning]=\"seasonalNRecommendationSummary.PredictedSummerLeafN\r\n\t\t\t\t\t\t\t< fc.InadequateSummerLeafN.value ||\r\n\t\t\t\t\t\t\tseasonalNRecommendationSummary.PredictedSummerLeafN\r\n\t\t\t\t\t\t\t> fc.ExcessiveSummerLeafN.value\"\r\n\r\n\t\t\t\t\t\t\t[class.bk-spring-nutrient-ui__valid]=\"seasonalNRecommendationSummary.PredictedSummerLeafN\r\n\t\t\t\t\t\t\t> fc.InadequateSummerLeafN.value &&\r\n\t\t\t\t\t\t\tseasonalNRecommendationSummary.PredictedSummerLeafN\r\n\t\t\t\t\t\t\t< fc.ExcessiveSummerLeafN.value\">\r\n\r\n\t\t\t\t\t\t\t{{ seasonalNRecommendationSummary.PredictedSummerLeafN | number: '1.2-2' }} % N\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t<i *ngIf=\"seasonalNRecommendationSummary.PredictedSummerLeafN\r\n\t\t\t\t\t\t\t< fc.InadequateSummerLeafN.value\"\r\n\t\t\t\t\t\t\tclass=\"fas fa-battery-quarter\"\r\n\t\t\t\t\t\t\tmatTooltip=\"Leaf adjustment value is {{fc.NFertilizerAdjustment.value}} lb N/acre,\r\n\t\t\t\t\t\t\tsince the summer leaf N is lower than {{fc.InadequateSummerLeafN.value}}%\">\r\n\t\t\t\t\t\t</i>\r\n\t\t\t\t\t\t<i *ngIf=\"seasonalNRecommendationSummary.PredictedSummerLeafN\r\n\t\t\t\t\t\t\t> fc.ExcessiveSummerLeafN.value\"\r\n\t\t\t\t\t\t\tclass=\"fas fa-battery-full\"\r\n\t\t\t\t\t\t\tmatTooltip=\"Leaf N adjustment value is negative {{fc.NFertilizerAdjustment.value}} lb N/acre,\r\n\t\t\t\t\t\t\tsince the summer leaf N is above {{fc.ExcessiveSummerLeafN.value}}%\"></i>\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<h2 class=\"bk-clearfix bk-planting-settings__tight-header\">\r\n\t\t{{'Seasonal N Requirement' | translate}}\r\n\t</h2>\r\n\r\n\t<ng-container *ngIf=\"seasonalNRecommendationSummary &&\r\n\t\tf.YieldTarget.value\">\r\n\r\n\t\t<span class=\"bk-seasonal-n-calculator__recommendation\">\r\n\t\t\t{{seasonalNRecommendationSummary.MaxUptake >= 0 ? seasonalNRecommendationSummary.MaxUptake : 0}}\r\n\t\t</span>\r\n\t\t<span class=\"bk-seasonal-n-calculator__unit\">\r\n\t\t\t{{ 'lbs' | translate}} N/{{'acre' | translate}}\r\n\t\t</span>\r\n\r\n\t\t<i [popper]=\"seasonalNRecommendationPopper\"\r\n\t\t\t[popperTrigger]=\"'click'\"\r\n\t\t\t[popperPlacement]=\"'top'\"\r\n\t\t\t[popperTimeoutAfterShow]=\"10000\"\r\n\t\t\tclass=\"bk-popper__icon fa fa-info-circle\">\r\n\t\t</i>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"!seasonalNRecommendationSummary ||\r\n\t\t!f.YieldTarget.value\">\r\n\r\n\t\t<span class=\"bk-seasonal-n-calculator__recommendation\">\r\n\t\t\tN/A\r\n\t\t\t<mat-icon class=\"bk-info-icon bk-info-icon__seasonalNRecommendation\"\r\n\t\t\t\t[popper]=\"seasonalNRecommendationNAPopper\"\r\n\t\t\t\t[popperTrigger]=\"'hover'\"\r\n\t\t\t\t[popperPlacement]=\"'top'\">\r\n\t\t\t\tinfo_outline\r\n\t\t\t</mat-icon>\r\n\t\t</span>\r\n\t</ng-container>\r\n</form>\r\n\r\n<popper-content #seasonalNRecommendationPopper>\r\n    <ng-container *ngIf=\"seasonalNRecommendationSummary\" >\r\n        <div class=\"bk-popper\">\r\n            <div class=\"bk-popper__header\">\r\n                {{ 'Calculation Summary' | translate }}:\r\n            </div>\r\n            <p class=\"bk-popper__p-small\">\r\n                {{ 'Seasonal N Requirement' | translate }} = ({{ 'Yield N Demand' | translate }} + {{ 'Vegetative N Demand' | translate }} +\r\n                {{ 'Leaf N Adjustment' | translate }} - {{ 'Manure N Credits' | translate }} - {{ 'Compost N Credits' | translate }} -\r\n                {{ 'Cover Crop N Credits' | translate }} ) * 100 / {{ 'Efficiency Factor' | translate }}\r\n            </p>\r\n            <p class=\"bk-popper__p-small\">\r\n                {{seasonalNRecommendationSummary.MaxUptake}} = ({{seasonalNRecommendationSummary.YieldNDemand}} +\r\n                {{seasonalNRecommendationSummary.VegetativeNDemand}} {{seasonalNRecommendationSummary.LeafNAdjustment > 0 ? '+' : ''}} \r\n                {{seasonalNRecommendationSummary.LeafNAdjustment}}\r\n                - {{seasonalNRecommendationSummary.ManureN}} - {{seasonalNRecommendationSummary.CompostN}}\r\n                - {{seasonalNRecommendationSummary.CoverCropN}}) * 100 / {{seasonalNRecommendationSummary.FertilizerUseEfficiency}}\r\n            </p>\r\n        </div>\r\n    </ng-container>\r\n</popper-content>\r\n<popper-content #seasonalNRecommendationNAPopper>\r\n    <div class=\"bk-popper\">\r\n        {{ 'Seasonal N Requirement Warning Text' | translate }}\r\n    </div>\r\n</popper-content>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { eCommodityTypes } from '../../../../interfaces/constants';\r\nimport { IFertilizationEventGetSeasonalNUptakeModel,\r\n\tIFertilizationEventSeasonalNUptakeJSON } from '../../../fertilization-event/interfaces';\r\nimport { FertilizationEventService } from '../../../fertilization-event/service';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\nimport { CropTypeFormFields } from '../../../crop-types/cropTypeFormBuilder';\r\nimport { PlantingSettingFields } from '../../plantingSettingFields';\r\nimport { YieldUnitId } from '../../../../models/commodity-type/interfaces';\r\nimport { TonsConverter } from '../../tonsConverter';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { CompostComponent } from './compost';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\nimport { CoverCropComponent } from './cover-crop';\r\nimport { ManureComponent } from './manure';\r\nimport { DIALOG_HIDE_CLASS } from '../../../shared/constants';\r\n\r\nexport type NCalculatorFields = 'YieldTarget' | 'YieldTargetDisplayed' |\r\n\t'ManureN' | 'CompostN' | 'CoverCropN' | 'TreeNutrientThresholds';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'n-calculator',\r\n\ttemplateUrl: 'n-calculator.html',\r\n\tstyleUrls: [ 'n-calculator.scss']\r\n})\r\n\r\nexport class NCalculatorComponent implements OnInit {\r\n\r\n\t@Input()\r\n\tpublic plantingSettingsForm: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\t@Input()\r\n\tpublic calculatorSettings: FormGroup; // used by child components\r\n\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\tpublic YIELD_UNIT_IDS = YieldUnitId;\r\n\r\n\tpublic get f(): { [key in NCalculatorFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in NCalculatorFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fc(): { [key in CropTypeFormFields]: AbstractControl } {\r\n\t\treturn (this.plantingSettingsForm.get('CropSettings') as FormGroup).controls as { [key in CropTypeFormFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic get fp(): { [key in PlantingSettingFields]: AbstractControl } {\r\n\t\treturn this.plantingSettingsForm.controls as { [key in PlantingSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tpublic isManureCalculatorVisible = false;\r\n\tpublic isCompostCalculatorVisible = false;\r\n\tpublic isCoverCropCalculatorVisible = false;\r\n\tpublic yieldUnit: string;\r\n\tpublic seasonalNRecommendationSummary: IFertilizationEventSeasonalNUptakeJSON = null;\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprotected _dialog: MatDialog,\r\n\t\tprotected _dialogRef: MatDialogRef<NCalculatorComponent>,\r\n\t\tprotected _fertilizationEventService: FertilizationEventService,\r\n\t\tprotected _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._populate();\r\n\t\tthis._bindValueChanges();\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\tprotected _populate(): void {\r\n\t\tswitch (this.fp.CommodityTypeId.value) {\r\n\t\t\tcase eCommodityTypes.ALMOND:\r\n\t\t\t\tthis.yieldUnit = 'kernel';\r\n\t\t\t\tbreak;\r\n\t\t\tcase eCommodityTypes.WALNUT:\r\n\t\t\t\tthis.yieldUnit = 'In-shell';\r\n\t\t\t\tbreak;\r\n\t\t\tcase eCommodityTypes.PISTACHIO:\r\n\t\t\t\tthis.yieldUnit = 'CPC Yield';\r\n\t\t\t\tbreak;\r\n\t\t\tcase eCommodityTypes.PRUNE:\r\n\t\t\t\tthis.yieldUnit = 'Dry';\r\n\t\t\t\tbreak;\r\n\t\t\tcase eCommodityTypes.PEAR:\r\n\t\t\t\tthis.yieldUnit = 'Wet Weight';\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthis.yieldUnit = '';\r\n\t\t}\r\n\r\n\t\tthis.calculateSeasonalN();\r\n\t}\r\n\r\n\tprotected _translateForm(): IFertilizationEventGetSeasonalNUptakeModel {\r\n\t\tlet result: IFertilizationEventGetSeasonalNUptakeModel;\r\n\r\n\t\tresult = {\r\n\t\t\t// crop settings\r\n\t\t\tExcessiveSummerLeafN: this.fc.ExcessiveSummerLeafN.value,\r\n\t\t\tFertilizerUseEfficiency: this.fc.FertilizerUseEfficiency.value,\r\n\t\t\tInadequateSummerLeafN: this.fc.InadequateSummerLeafN.value,\r\n\t\t\tNFertilizerAdjustment: this.fc.NFertilizerAdjustment.value,\r\n\t\t\tNUptakeFactor: this.fc.UptakeFactor.value,\r\n\r\n\t\t\tTreecoefficients: {\r\n\t\t\t\tIntercept: this.fc.TreeInterceptCoefficient.value,\r\n\t\t\t\tLeafN: this.fc.TreeLeafNCoefficient.value,\r\n\t\t\t\tIlr4: this.fc.TreeIlr4Coefficient.value,\r\n\t\t\t\tIlr8: this.fc.TreeIlr8Coefficient.value,\r\n\t\t\t\tIlrProduct: this.fc.TreeIlrProductCoefficient.value\r\n\t\t\t},\r\n\r\n\t\t\tVegetativeNDemands: this.fc.VegetativeNDemands.value,\r\n\r\n\t\t\t// calculator settings\r\n\r\n\t\t\tCompostN: this.f.CompostN.value,\r\n\t\t\tCoverCropN: this.f.CoverCropN.value,\r\n\t\t\tManureN: this.f.ManureN.value,\r\n\t\t\tTreeNutrientThresholds: this.f.TreeNutrientThresholds.value,\r\n\t\t\tYieldTarget: this.f.YieldTarget.value,\r\n\r\n\t\t\t// planting settings\r\n\r\n\t\t\tAgeOfCrop: this.fp.AgeOfCrop.value,\r\n\t\t\tCommodityTypeId: this.fp.CommodityTypeId.value,\r\n\t\t\tIsHighVigor: this.fp.IsHighVigor.value,\r\n\t\t};\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic calculateSeasonalN(): void {\r\n\t\tlet model: IFertilizationEventGetSeasonalNUptakeModel;\r\n\r\n\t\tmodel = this._translateForm();\r\n\r\n\t\tthis._fertilizationEventService.getSeasonalNUptake(model).then(response => {\r\n\t\t\tthis.seasonalNRecommendationSummary = response;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openCompostCalculator(e: MouseEvent): void {\r\n\t\tthis._dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\r\n\t\tthis._dialog.open(CompostComponent, {\r\n\t\t\tdata: {\r\n\t\t\t\tform: this.calculatorSettings.get('CompostN'),\r\n\t\t\t\tcontrol: this.f.CompostN\r\n\t\t\t},\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\tpublic openCoverCropCalculator(e: MouseEvent): void {\r\n\r\n\t\tthis._dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\r\n\t\tthis._dialog.open(CoverCropComponent, {\r\n\t\t\tdata: {\r\n\t\t\t\tform: this.calculatorSettings.get('CoverCrop'),\r\n\t\t\t\tcontrol: this.f.CoverCropN\r\n\t\t\t},\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\tpublic openManureCalculator(e: MouseEvent): void {\r\n\t\tthis._dialogRef.addPanelClass(DIALOG_HIDE_CLASS);\r\n\r\n\t\tthis._dialog.open(ManureComponent, {\r\n\t\t\tdata: {\r\n\t\t\t\tform: this.calculatorSettings.get('ManureN'),\r\n\t\t\t\tcontrol: this.f.ManureN\r\n\t\t\t},\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\tpublic updateCompostN(x: number): void {\r\n\t\tthis.f.CompostN.setValue(x);\r\n\t}\r\n\r\n\tpublic updateCoverCropN($event: number): void {\r\n\t\tthis.f.CoverCropN.setValue($event);\r\n\t}\r\n\r\n\tpublic updateManureN($event: number): void {\r\n\t\tthis.f.ManureN.setValue($event);\r\n\t}\r\n\r\n\tprotected _bindValueChanges(): void {\r\n\t\tthis.f.YieldTargetDisplayed.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.f.YieldTarget.setValue(\r\n\t\t\t\tTonsConverter.convertDisplayedUnitToLbs(this.fp.YieldUnitId.value, this.f.YieldTargetDisplayed.value));\r\n\t\t});\r\n\r\n\t\tthis.fc.ExcessiveSummerLeafN.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.fc.FertilizerUseEfficiency.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.fc.InadequateSummerLeafN.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.fc.NFertilizerAdjustment.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.fc.UptakeFactor.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (this.fc.IsTree.value) {\r\n\t\t\t\tthis.calculateSeasonalN();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.fc.TreeIlr4Coefficient.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.fc.TreeIlrProductCoefficient.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.fc.TreeIlr8Coefficient.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.fc.TreeInterceptCoefficient.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.fc.TreeLeafNCoefficient.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.fc.VegetativeNDemands.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.fp.AgeOfCrop.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.fp.IsHighVigor.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\r\n\t\tthis.form.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.calculateSeasonalN();\r\n\t\t});\r\n\t}\r\n}\r\n","<p>\r\n\t{{ 'Well UI Explanation' | translate }}\r\n</p>\r\n\r\n<form *ngIf=\"form\" [formGroup]=\"form\">\r\n\t<div *ngIf=\"!f.Wells || !f.Wells.controls || f.Wells.controls.length === 0\"\r\n\t\tclass=\"bk-n-contribution-ui__invalid-text bk-n-contribution-ui__invalid-text--no-wells\">\r\n\t\t{{ 'There are no water sources for this Ranch' | translate }}\r\n\t</div>\r\n\r\n\t<table class=\"bk-n-contribution-ui__table\">\r\n\t\t<thead class=\"bk-n-contribution-ui__table-head\">\r\n\t\t\t<tr>\r\n\t\t\t\t<th class=\"bk-n-contribution-ui__table-head--border bk-n-contribution-ui__table-column--well\r\n\t\t\t\t\tbk-n-contribution-ui__col1\">\r\n\t\t\t\t\t{{ 'Water Source' | translate }}\r\n\t\t\t\t</th>\r\n\t\t\t\t<th class=\"bk-n-contribution-ui__table-head--border bk-n-contribution-ui__table-column--ppm\r\n\t\t\t\t\tbk-n-contribution-ui__col2\">\r\n\t\t\t\t\t{{ 'N Concentration' | translate }}\r\n\t\t\t\t</th>\r\n\t\t\t\t<th class=\"bk-n-contribution-ui__table-head--border bk-n-contribution-ui__table-column--percentage\r\n\t\t\t\t\tbk-n-contribution-ui__col3\">\r\n\t\t\t\t\t{{ '% Used for Planting' | translate }}\r\n\t\t\t\t</th>\r\n\t\t\t</tr>\r\n\t\t</thead>\r\n\t\t<tbody class=\"bk-n-contribution-ui__table-body\">\r\n\t\t\t<tr *ngFor=\"let well of f.Wells.controls\">\r\n\t\t\t\t<td class=\"bk-n-contribution-ui__table-body--border\r\n\t\t\t\t\tbk-n-contribution-ui__td--values\">\r\n\t\t\t\t\t{{ well.get('Name').value }}\r\n\t\t\t\t</td>\r\n\t\t\t\t<td\tclass=\"bk-n-contribution-ui__table-body--border\r\n\t\t\t\t\tbk-n-contribution-ui__td--values\">\r\n\t\t\t\t\t{{ well.get('NitrogenPPM').value }} ppm\r\n\t\t\t\t</td>\r\n\t\t\t\t<td\tclass=\"bk-n-contribution-ui__table-body--border\r\n\t\t\t\t\tbk-n-contribution-ui__td--values\">\r\n\t\t\t\t\t<mat-slider\r\n\t\t\t\t\t\t[formControl]=\"well.get('Percentage')\"\r\n\t\t\t\t\t\tmin=\"0\"\r\n\t\t\t\t\t\tmax=\"100\"\r\n\t\t\t\t\t\tstep=\"5\"\r\n\t\t\t\t\t\taria-label=\"unit(s)\"\r\n\t\t\t\t\t\tthumbLabel\r\n\t\t\t\t\t\t[displayWith]=\"formatLabel\">\r\n\t\t\t\t\t\t<input matSliderThumb>\r\n\t\t\t\t\t</mat-slider>\r\n\t\t\t\t\t<span class=\"bk-n-contribution-ui__table__well-percentage\">\r\n\t\t\t\t\t\t{{ well.get('Percentage').value ? well.get('Percentage').value : 0 }} %\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t</tbody>\r\n\t</table>\r\n\r\n\t<table>\r\n\t\t<tbody>\r\n\t\t\t<tr>\r\n\t\t\t\t<td class=\"bk-footer__heading\">\r\n\t\t\t\t\t{{ 'Average PPM' | translate }}\r\n\t\t\t\t</td>\r\n\t\t\t\t<td class=\"bk-footer__value\">\r\n\t\t\t\t\t<span *ngIf=\"f.AveragePPM || f.AveragePPM === 0\">\r\n\t\t\t\t\t\t{{\tf.AveragePPM.value | number: '1.0-2'}} ppm\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span *ngIf=\"!f.AveragePPM && f.AveragePPM !== 0\">\r\n\t\t\t\t\t\tN/A ppm\r\n\t\t\t\t\t</span>\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 class=\"bk-footer__heading\">\r\n\t\t\t\t\t{{ 'Total' | translate }} %\r\n\t\t\t\t</td>\r\n\t\t\t\t<td class=\"bk-footer__value\">\r\n\t\t\t\t\t<span [ngClass]=\"{'cm-invalid': form.touched && f.TotalPercentage.value !== 100, 'cm-valid': f.TotalPercentage.value === 100 }\">\r\n\t\t\t\t\t\t{{ f.TotalPercentage.value }}% <i *ngIf=\"form.touched && form.invalid\" class=\"fa fa-warning\"></i>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t</tbody>\r\n\t</table>\r\n\r\n\t<!--\r\n\t<p *ngIf=\"f.TotalPercentage.value != 100 && form.touched\"\r\n\t\tclass=\"bk-clearfix bk-location-warning\">\r\n\r\n\t\t{{'Percentages must total 100' | translate}}.\r\n\t\t{{ 'You must' | translate }} <ng-container *ngIf=\"f.TotalPercentage.value < 100\">{{'add' | translate }} <b>{{ 100 - f.TotalPercentage.value}}%</b></ng-container>\r\n\t\t<ng-container *ngIf=\"f.TotalPercentage.value > 100\">{{'subtract' | translate}} <b>{{ f.TotalPercentage.value - 100 }}%</b></ng-container>\r\n\t</p>\r\n\t-->\r\n</form>","import { Component, Input, OnDestroy, OnInit, Output, EventEmitter } from '@angular/core';\r\nimport { PlantingWellsFields } from './plantingWellsFormBuilder';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-wells',\r\n\ttemplateUrl: 'planting-wells.html',\r\n\tstyleUrls: [ 'planting-wells.scss']\r\n})\r\n\r\nexport class PlantingWellsComponent implements OnInit, OnDestroy {\r\n\r\n\t@Input()\r\n\tpublic form: FormGroup;\r\n\r\n\tpublic get f(): { [key in PlantingWellsFields]: AbstractControl } {\r\n\t\treturn this.form.controls as\r\n\t\t\t{ [key in PlantingWellsFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor() {}\r\n\r\n\tngOnInit(): void {\r\n\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t}\r\n}\r\n","import { FormBuilder } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { ObjectUtility } from '../../../classes/objectUtility';\r\nimport { CMError } from '../../../interfaces/interfaces';\r\nimport { ILotPlantingWell } from '../../../models/planting-well/interfaces';\r\nimport { PlantingWellService } from '../../../models/planting-well/service';\r\nimport { IWell } from '../../../models/planting-well/well.interface';\r\nimport { RanchService } from '../../ranch-settings/service';\r\nimport { PlantingWellsFields, PlantingWellsFormBuilder } from './plantingWellsFormBuilder';\r\n\r\nexport class PlantingWellsDataFetcher {\r\n\r\n\tprivate _ranchService: RanchService;\r\n\tprivate _plantingWellService: PlantingWellService;\r\n\tprivate _form: FormGroup;\r\n\tprivate _fb: FormBuilder;\r\n\tprivate $subscription: Subject<boolean>;\r\n\tprivate _builder: PlantingWellsFormBuilder;\r\n\r\n\tpublic get f(): { [key in PlantingWellsFields]: AbstractControl } {\r\n\t\treturn this._form.controls as\r\n\t\t\t{ [key in PlantingWellsFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(ranchService: RanchService, plantingWellService: PlantingWellService,\r\n\t\tfb: FormBuilder, $sub: Subject<boolean>) {\r\n\r\n\t\tthis._ranchService = ranchService;\r\n\t\tthis._plantingWellService = plantingWellService;\r\n\t\tthis._fb = fb;\r\n\t\tthis.$subscription = $sub;\r\n\t\tthis._builder = new PlantingWellsFormBuilder(this._fb, this.$subscription);\r\n\t}\r\n\r\n\t/**\r\n\t * A method for retrieving a list of wells and building a form\r\n\t * @returns FormGroup, which is used to display the PlantingWellsComponent\r\n\t */\r\n\tpublic onPlantingCreate(): Promise<FormGroup> {\r\n\t\treturn this._ranchService.getRanchWells().then((ranchWells: IWell[]) => {\r\n\t\t\tthis._form = this._builder.initialize(this._convertRanchWellsToPlantingWells(ranchWells));\r\n\r\n\t\t\treturn this._form;\r\n\t\t}).catch(() => {\r\n\t\t\treturn null;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * A method for retrieving a list of wells (or creating a list, if it doesn't\r\n\t * already exist) for building a FormGroup for the PlantingWellsComponent\r\n\t * @param plantingId\r\n\t * @returns a FormGroup, which is used to display the PlantingWellsComponent\r\n\t */\r\n\tpublic onPlantingEdit(plantingId: number, isDuplicate: boolean): Promise<FormGroup> {\r\n\t\treturn this._plantingWellService.getLotPlantingtWells(plantingId).then((response) => {\r\n\t\t\tif (!response || response.length === 0) { // no wells are associated with this planting - so create wells association\r\n\t\t\t\treturn this._plantingWellService.createLotPlantingWells(plantingId).then((wells) => {\r\n\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\tthis._form = this._builder.initialize(wells);\r\n\r\n\t\t\t\t\treturn this._form;\r\n\t\t\t\t}).catch(() => {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis._form = this._builder.initialize(response);\r\n\r\n\t\t\t\tif (isDuplicate) {\r\n\t\t\t\t\t// when creating a duplicate planting, clear well Id fields so the parent planting's\r\n\t\t\t\t\t// wells don't get wrongly assigned to the duplicate planting.\r\n\t\t\t\t\t(this._form.get('Wells') as FormArray).controls.forEach(w => {\r\n\t\t\t\t\t\tlet idField: AbstractControl;\r\n\r\n\t\t\t\t\t\tidField = w.get('Id');\r\n\r\n\t\t\t\t\t\tif (idField !== null) {\r\n\t\t\t\t\t\t\tidField.setValue(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 this._form;\r\n\t\t\t}\r\n\t\t}).catch(() => {\r\n\t\t\treturn null;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n \t* When creating new plantings, add new wells\r\n \t*/\r\n\tpublic save(plantingId: number): Promise<CMError> {\r\n\t\tlet wellsArray: FormArray;\r\n\t\tlet wells: ILotPlantingWell[];\r\n\r\n\t\twellsArray = this.f.Wells as FormArray;\r\n\r\n\t\tif (!plantingId) {\r\n\t\t\tthrow new Error('planting ID is empty');\r\n\t\t}\r\n\r\n\t\tif (!wellsArray || wellsArray.controls.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\twells = wellsArray.value;\r\n\r\n\t\tfor (let well of wells) {\r\n\t\t\twell.LotPlantingId = plantingId;\r\n\t\t}\r\n\r\n\t\treturn this._plantingWellService.saveAllLotPlantingWells(wells);\r\n\t}\r\n\r\n\t/**\r\n\t * convert ranch wells to planting wells object structure, when creating\r\n\t * a planting\r\n\t * @param wells ranch wells\r\n\t * @returns\r\n\t */\r\n\tprivate _convertRanchWellsToPlantingWells(wells: IWell[]): ILotPlantingWell[] {\r\n\t\tlet result: ILotPlantingWell[];\r\n\r\n\t\tif (!wells || wells.length === 0) {\r\n\t\t\tthrow new Error('Ranch has no wells');\r\n\t\t}\r\n\r\n\t\tresult = [];\r\n\r\n\t\tfor (let ranchWell of wells) {\r\n\t\t\tlet well: ILotPlantingWell;\r\n\r\n\t\t\twell = ObjectUtility.copy(ranchWell);\r\n\t\t\twell.WellId = well.Id; // reference to ranch well Id, to retrieve PPM\r\n\t\t\twell.Id = null; // blank out Id because these are ranchwells Ids\r\n\t\t\twell.LotPlantingId = null; // unknown when creating a planting\r\n\t\t\tresult.push(well);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { FormValidation } from '../../../classes/formValidation';\r\nimport { ILotPlantingWell } from '../../../models/planting-well/interfaces';\r\n\r\nexport type PlantingWellsFields =  'AveragePPM' | 'TotalPercentage' | 'Wells';\r\n\r\nexport class PlantingWellsFormBuilder {\r\n\tprivate _fb: FormBuilder;\r\n\tprivate _form: FormGroup;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic get f(): { [key in PlantingWellsFields]: AbstractControl } {\r\n\t\treturn this._form.controls as\r\n\t\t\t{ [key in PlantingWellsFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(fb: FormBuilder, $subscription: Subject<boolean>) {\r\n\t\tthis._fb = fb;\r\n\t\tthis._subscriptions$ = $subscription;\r\n\t}\r\n\r\n\tpublic initialize(wells: ILotPlantingWell[]): FormGroup {\r\n\t\tthis._form = this._fb.group({\r\n\t\t\tWells: this._fb.array([], [FormValidation.formArrayMustNotBeEmpty()]),\r\n\t\t\tTotalPercentage: [0, [FormValidation.mustEqualValidator(100)]],\r\n\t\t\tAveragePPM: [0]\r\n\t\t});\r\n\r\n\t\tthis._addWellToForm(wells);\r\n\t\tthis._calculateTotalPercentage();\r\n\t\tthis._calculateAveragePPM();\r\n\t\tthis._bindValueChanges();\r\n\t\tthis._patchWellsPercentages();\r\n\r\n\t\treturn this._form;\r\n\t}\r\n\r\n\tprivate _addWellToForm(wells: ILotPlantingWell[]): void {\r\n\t\tif (!wells) {\r\n\t\t\tthrow new Error('no wells detected.');\r\n\t\t}\r\n\r\n\t\tfor (let well of wells) {\r\n\t\t\t(this.f.Wells as FormArray).\r\n\t\t\tpush(this._fb.group({\r\n\t\t\t\tId: well.Id,\r\n\t\t\t\twellId: well.WellId,\r\n\t\t\t\tRanchId: well.RanchId,\r\n\t\t\t\tLotPlantingId: well.LotPlantingId,\r\n\t\t\t\tName: well.Name,\r\n\t\t\t\tElectricalConductivity: well.ElectricalConductivity,\r\n\t\t\t\tNitrogenPPM: well.NitrogenPPM,\r\n\t\t\t\tCreatedDT: well.CreatedDT,\r\n\t\t\t\tLastUpdateDT: well.LastUpdateDT,\r\n\t\t\t\tDeleted: well.Deleted,\r\n\t\t\t\tPercentage: [well.Percentage, [Validators.min(0)]]\r\n\t\t\t}));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * If wells percentage is lower than 100, and if there is only one well,\r\n\t * set that well's percentage to 100. If there are more than one well,\r\n\t * do nothing and let the user configure the balance.\r\n\t */\r\n\tprivate _patchWellsPercentages(): void {\r\n\t\tlet wellsArray: FormArray;\r\n\r\n\t\twellsArray = this.f.Wells as FormArray;\r\n\r\n\t\tif (!wellsArray || wellsArray.controls.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.f.TotalPercentage.value === 100 || wellsArray.controls.length > 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\twellsArray.controls[0].get('Percentage').setValue(100);\r\n\t}\r\n\r\n\tprivate _calculateTotalPercentage(): void {\r\n\t\tlet result: number;\r\n\r\n\t\tresult = 0;\r\n\r\n\t\tif (!this.f.Wells || (this.f.Wells as FormArray).controls.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let wellControl of (this.f.Wells as FormArray).controls) {\r\n\t\t\tresult += wellControl.get('Percentage').value;\r\n\t\t}\r\n\r\n\t\tthis.f.TotalPercentage.setValue(result);\r\n\t}\r\n\r\n\tprivate _calculateAveragePPM(): void {\r\n\t\tlet result = 0;\r\n\t\tlet wellsArray: FormArray;\r\n\r\n\t\twellsArray = this.f.Wells as FormArray;\r\n\r\n\t\tif (!wellsArray || wellsArray.controls.length === 0) {\r\n\t\t\tthis.f.AveragePPM.setValue(0);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let wellControl of wellsArray.controls) {\r\n\t\t\tresult += wellControl.get('NitrogenPPM').value *\r\n\t\t\t\twellControl.get('Percentage').value / 100;\r\n\t\t}\r\n\r\n\t\tthis.f.AveragePPM.setValue(result);\r\n\t}\r\n\r\n\tprivate _bindValueChanges(): void {\r\n\t\tthis.f.Wells.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._calculateTotalPercentage();\r\n\t\t\tthis._calculateAveragePPM();\r\n\t\t});\r\n\t}\r\n}\r\n","<form [formGroup]=form>\r\n\t<h4 class=\"bk-modal__section-title\">\r\n\t\t{{'Calculate Sprinkler Application Rate' | translate }}\r\n\t</h4>\r\n\t<label class=\"bk-modal__label\">\r\n\t\t{{'Sprinkler Type' | translate}}\r\n\t</label>\r\n\t<select class=\"bk-modal__field\"\r\n\t\tformControlName=\"Type\">\r\n\r\n\t\t<option \r\n\t\t\t*ngFor=\"let sprinklerType of sprinklerTypes\"\r\n\t\t\t[ngValue]=\"sprinklerType.Id\">\r\n\t\t\t{{sprinklerType.Name}}\r\n\t\t</option>\r\n\t</select>\r\n\t<div class=\"bk-form-group\">\r\n\t\t<div class=\"bk-modal__right-four-col\">\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Nozzle Diameter' | translate}}\r\n\t\t\t</label>\r\n\t\t\t<select class=\"bk-modal__field--with-unit bk-modal__field\"\r\n\t\t\t\tformControlName=\"NozzleDiameter\">\r\n\r\n\t\t\t\t<option *ngFor='let nozzleDiameter of nozzleDiameters'\r\n\t\t\t\t\t[ngValue]='nozzleDiameter.id'>\r\n\t\t\t\t\t{{nozzleDiameter.name}}\r\n\t\t\t\t</option>\r\n\t\t\t</select>\r\n\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t{{'in' | translate}}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"bk-modal__right-four-col\">\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Nozzle Pressure' | translate}}\r\n\t\t\t</label>\r\n\t\t\t<select class=\"bk-modal__field--with-unit bk-modal__field\"\r\n\t\t\t\tformControlName=\"NozzlePressure\">\r\n\t\t\t\t<option [ngValue]=\"25\">25</option>\r\n\t\t\t\t<option [ngValue]=\"30\">30</option>\r\n\t\t\t\t<option [ngValue]=\"35\">35</option>\r\n\t\t\t\t<option [ngValue]=\"40\">40</option>\r\n\t\t\t\t<option [ngValue]=\"45\">45</option>\r\n\t\t\t\t<option [ngValue]=\"50\">50</option>\r\n\t\t\t\t<option [ngValue]=\"55\">55</option>\r\n\t\t\t\t<option [ngValue]=\"60\">60</option>\r\n\t\t\t\t<option [ngValue]=\"65\">65</option>\r\n\t\t\t</select>\r\n\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t{{'psi' | translate}}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"bk-modal__right-four-col\">\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Lateral Pipe Spacing' | translate}}\r\n\t\t\t</label>\r\n\t\t\t<input class=\"bk-modal__field--with-unit bk-input--x-short bk-modal__field\"\r\n\t\t\t\ttype=\"number\"\r\n\t\t\t\tstep=\"0.01\"\r\n\t\t\t\tformControlName=\"PipeSpacing\"/>\r\n\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t{{'ft' | translate}}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"bk-modal__right-four-col\">\r\n\t\t\t<label class=\"bk-modal__label\">\r\n\t\t\t\t{{'Sprinkler Head Spacing' | translate}}\r\n\t\t\t</label>\r\n\t\t\t<input class=\"bk-modal__field--with-unit bk-input--x-short bk-modal__field\"\r\n\t\t\t\ttype=\"number\"\r\n\t\t\t\tstep=\"0.01\"\r\n\t\t\t\tformControlName=\"HeadSpacing\"/>\r\n\t\t\t<div class=\"bk-modal__field-unit\">\r\n\t\t\t\t{{'ft' | translate}}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"bk-modal__section-buttons\">\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[disabled]=\"form.invalid\"\r\n\t\t\t(click)=\"calculate($event)\">\r\n\t\t\t{{'Calculate' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n</form>","import { Component,  OnInit, Inject } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { FormValidation } from '../../../../classes/formValidation';\r\nimport { CalculateService } from '../../../../services/calculate.service';\r\nimport { SprinklerSettingFields } from '../../calculatorSettingsForm';\r\nimport { ISprinklerApplicationRateViewModel } from '../../interfaces';\r\nimport { INozzleDiameter } from './interface';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'sprinkler-application-rate',\r\n\ttemplateUrl: 'sprinkler-application-rate.html'\r\n})\r\n\r\nexport class SprinklerApplicationRateComponent implements OnInit {\r\n\r\n\tpublic form: FormGroup;\r\n\r\n\tpublic nozzleDiameters: INozzleDiameter[] = [\r\n\t\t{ id: 1, value: 3 / 32, name: '3/32'},\r\n\t\t{ id: 2, value: 7 / 64, name: '7/64'},\r\n\t\t{ id: 3, value: 1 / 8, name: '1/8'},\r\n\t\t{ id: 4, value: 9 / 64, name: '9/64'},\r\n\t\t{ id: 5, value: 5 / 32, name: '5/32'}\r\n\t];\r\n\r\n\tpublic sprinklerTypes = [\r\n\t\t{ Id: 1, Name: 'Rainbird 20 JH'},\r\n\t\t{ Id: 2, Name: 'Weather Tec 10-20'}\r\n\t];\r\n\r\n\tpublic get f(): { [key in SprinklerSettingFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in SprinklerSettingFields]: AbstractControl };\r\n\t}\r\n\r\n\tprivate _control: AbstractControl;\r\n\tprivate _initialValues: ISprinklerApplicationRateViewModel;\r\n\r\n\tconstructor(\r\n\t\tprivate calculateService: CalculateService,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: {\r\n\t\t\tform: FormGroup, control: AbstractControl },\r\n\r\n\t\tprivate _dialogRef: MatDialogRef<SprinklerApplicationRateComponent>,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.form = this._data.form;\r\n\t\tthis._control = this._data.control;\r\n\t\tthis._initialValues = this.form.value; // save initial values\r\n\t\tthis._setValidators();\r\n\t}\r\n\r\n\tpublic calculate(e: MouseEvent): void {\r\n\t\tlet result: number;\r\n\r\n\t\tif (e) {\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\tresult = this.calculateService.calculateSprinklerApplicationRate(\r\n\t\t\tthis.f.Type.value,\r\n\t\t\tthis.nozzleDiameters.find(x => x.id === this.f.NozzleDiameter.value).value,\r\n\t\t\tthis.f.NozzlePressure.value,\r\n\t\t\tthis.f.PipeSpacing.value,\r\n\t\t\tthis.f.HeadSpacing.value\r\n\t\t);\r\n\r\n\t\tresult = Number(result.toFixed(2));\r\n\t\tthis._control.setValue(result);\r\n\t\tthis._clearValidators();\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tpublic cancel(e: MouseEvent): void {\r\n\t\tthis.form.reset(this._initialValues);\r\n\t\tthis._clearValidators();\r\n\t\tthis._closeDialog();\r\n\t}\r\n\r\n\tprivate _setValidators(): void {\r\n\t\tFormValidation.setValidator(this.f.HeadSpacing, [Validators.required]);\r\n\t\tFormValidation.setValidator(this.f.Id, [Validators.required]);\r\n\t\tFormValidation.setValidator(this.f.NozzleDiameter, [Validators.required]);\r\n\t\tFormValidation.setValidator(this.f.NozzlePressure, [Validators.required]);\r\n\t\tFormValidation.setValidator(this.f.PipeSpacing, [Validators.required]);\r\n\t\tFormValidation.setValidator(this.f.Type, [Validators.required]);\r\n\t}\r\n\r\n\tprivate _clearValidators(): void {\r\n\t\tFormValidation.clearValidator(this.f.HeadSpacing);\r\n\t\tFormValidation.clearValidator(this.f.Id);\r\n\t\tFormValidation.clearValidator(this.f.NozzleDiameter);\r\n\t\tFormValidation.clearValidator(this.f.NozzlePressure);\r\n\t\tFormValidation.clearValidator(this.f.PipeSpacing);\r\n\t\tFormValidation.clearValidator(this.f.Type);\r\n\t}\r\n\r\n\tprivate _closeDialog() {\r\n\t\tthis._sharedUpdateService.cancel();\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}\r\n","import { YieldUnitId } from '../../models/commodity-type/interfaces';\r\n\r\n/***\r\n * Service used to convert lbs to tons and vice versa\r\n */\r\nexport class TonsConverter {\r\n\tpublic static convertDisplayedUnitToLbs(yieldUnit: YieldUnitId, n: number): number {\r\n\t\tif (!yieldUnit || yieldUnit === YieldUnitId.LBS) {\r\n\t\t\treturn n;\r\n\t\t} else {\r\n\t\t\treturn this._convertTonsToLbs(n);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static converLbsToTargetUnit(targetUnit: YieldUnitId, n: number): number {\r\n\t\tif (!targetUnit || targetUnit === YieldUnitId.LBS) {\r\n\t\t\treturn n;\r\n\t\t} else {\r\n\t\t\treturn this._convertLbsToTons(n);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Convert lbs to tons\r\n\t * Truncate to 3 decimals to preserve user entered value through conversion\r\n\t * @param lbs\r\n\t * @returns tons\r\n\t */\r\n\tprivate static _convertLbsToTons(lbs: number): number {\r\n\t\treturn Number((lbs / 2000).toFixed(3))\r\n\t}\r\n\r\n\tprivate static _convertTonsToLbs(tons: number): number {\r\n\t\treturn Number((tons * 2000).toFixed(1));\r\n\t}\r\n}\r\n","<div class=\"bk-planting__event-row\"\r\n\t(click)=\"onOpenEvent(event.CutEvent.Id)\">\r\n\r\n\t<div class=\"bk-planting__event-row__date-column\">\r\n\t\t<div class=\"bk-planting__event-row__datebox\"\r\n\t\t\t[ngClass]=\"{'bk-planting__event-row__datebox--today': isToday}\">\r\n\t\t\t<div class=\"bk-planting__event-row__datebox__month\">\r\n\t\t\t\t{{ event.EventDate | localeMonth }}\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-planting__event-row__datebox__date\">\r\n\t\t\t\t{{ event.EventDate | date:'d'}}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n\t<div class=\"bk-planting__event-row__label\">\r\n\t\t<div class=\"bk-planting__event-row__icon bk-button--purple-icon\">\r\n\t\t\t<svg-sickle></svg-sickle>\r\n\t\t</div>\r\n\r\n\t\t<span class=\"bk-planting__event-row__label__name\"\r\n\t\t\t*ngIf=\"event.CutEvent.MaturityId\">\r\n\t\t\t{{ getMaturityName(event.CutEvent.MaturityId) | translate }}\r\n\t\t</span>\r\n\r\n\t\t<span class=\"bk-planting__event-row__label__name\"\r\n\t\t\t*ngIf=\"!event.CutEvent.MaturityId\">\r\n\t\t\t{{ 'Cutting' | translate }}\r\n\t\t</span>\r\n\t</div>\r\n\t<div class=\"bk-planting__event-row__measurements\">\r\n\r\n\t\t<span matTooltip=\"days since last cutting or planting start date\">\r\n\t\t\t<span class=\"bk-planting__event-row__amount\">{{ event.CutEvent.CutInterval}}</span> {{'days' | translate}}\r\n\t\t</span>\r\n\t</div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\nimport { EventUtility } from '../../../models/event/eventUtility';\r\n\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { RanchService } from '../../ranch-settings/service';\r\n\r\nimport { IMaturity } from '../../../models/maturity/interfaces';\r\nimport { IEventGroup } from '../../../models/event/interfaces';\r\nimport { RowBaseComponent } from './row-base';\r\nimport { EventsType } from '../../../interfaces/constants';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'cut-row',\r\n\ttemplateUrl: 'cut-row.html'\r\n})\r\n\r\nexport class CutRowComponent extends RowBaseComponent {\r\n\t@Input()\r\n\tpast: boolean;\r\n\r\n\t@Input()\r\n\tmaturities: IMaturity[];\r\n\r\n\tconstructor(\r\n\t\tprotected updateService: UpdateService,\r\n\t\tprotected ranchService: RanchService,\r\n\t\tprotected dialog: MatDialog) {\r\n\r\n\t\tsuper(updateService, ranchService, dialog);\r\n\t\tthis.eventType = EventsType.CUTTING;\r\n\t}\r\n\r\n\tpublic cuttingNotApplied(event: IEventGroup): boolean {\r\n\t\treturn !EventUtility.isCuttingApplied(event, this.past);\r\n\t}\r\n\r\n\tpublic getMaturityName(id: number): string {\r\n\t\tlet maturity: IMaturity;\r\n\r\n\t\tif (!this.maturities || this.maturities.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tmaturity = this.maturities.filter(x => x.Id === id)[0];\r\n\r\n\t\treturn maturity.Name;\r\n\t}\r\n}\r\n","<div *ngFor=\"let fertilizationEvent of event.Fertilization; let i = index;\"\r\n\tclass=\"bk-planting__event-row\"\r\n\t(click)=\"onOpenEvent(fertilizationEvent.Id)\">\r\n\r\n\t<div class=\"bk-planting__event-row__date-column\">\r\n\t\t<div class=\"bk-planting__event-row__datebox\"\r\n\t\t\t[ngClass]=\"{'bk-planting__event-row__datebox--today': isToday}\">\r\n\t\t\t<div class=\"bk-planting__event-row__datebox__month\">\r\n\t\t\t\t{{ event.EventDate | localeMonth }}\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-planting__event-row__datebox__date\">\r\n\t\t\t\t{{ event.EventDate | date:'d'}}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n\t<div class=\"bk-planting__event-row__label\">\r\n\t\t<div class=\"bk-planting__event-row__icon bk-button--black-icon\">\r\n\t\t\t<svg-fertilizer></svg-fertilizer>\r\n\t\t</div>\r\n\t\t<span class=\"bk-planting__event-row__label__name\">\r\n\t\t\t{{fertilizationEvent.FertilizerName}}\r\n\t\t</span>\r\n\t</div>\r\n\t<div class=\"bk-planting__event-row__measurements\">\r\n\t\t<ng-container *ngIf=\"!isFertilizationNA(fertilizationEvent)\">\r\n\t\t\t<span class=\"bk-planting__event-row__amount\">{{fertilizationEventClass.getFertilizerUnit(fertilizationEvent)\r\n\t\t\t\t| number: '1.0-1' | integerIfZero}} </span>\r\n\t\t\t<span *ngIf=\"fertilizationEvent.FormulationType == 'Wet'\">\r\n\t\t\t\t{{'gal' | translate }}/{{'acre' | translate }}\r\n\t\t\t</span>\r\n\t\t\t<span *ngIf=\"fertilizationEvent.FormulationType == 'Dry'\">\r\n\t\t\t\t{{'lbs' | translate }}/{{'acre' | translate }}\r\n\t\t\t</span>\r\n\t\t\t<i  *ngIf=\"eventUtility.shouldDisplayFertilizationWarning(fertilizationEvent, event.isPast)\"\r\n\t\t\t\tmatTooltip=\"{{'Enter an amount in the Fertilizer Applied field' | translate}}.\"\r\n\t\t\t\tclass=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n\t\t\t</i>\r\n\t\t</ng-container>\r\n\r\n\t\t<ng-container *ngIf=\"isFertilizationNA(fertilizationEvent)\">\r\n\t\t\t<span>N/A</span>\r\n\t\t</ng-container>\r\n\t</div>\r\n</div>\r\n","import { Component } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\nimport { FertilizationEvent } from '../../fertilization-event/fertilizationEvent';\r\n\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { RanchService } from '../../ranch-settings/service';\r\nimport { EventsType } from '../../../interfaces/constants';\r\nimport { IFertilizationEvent } from '../../fertilization-event/interfaces';\r\nimport { RowBaseComponent } from './row-base';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'fertilization-row',\r\n\ttemplateUrl: 'fertilization-row.html'\r\n})\r\n\r\nexport class FertilizationRowComponent extends RowBaseComponent {\r\n\r\n\tpublic fertilizationEventClass = FertilizationEvent;\r\n\r\n\tconstructor(\r\n\t\tprotected updateService: UpdateService,\r\n\t\tprotected ranchService: RanchService,\r\n\t\tprotected dialog: MatDialog) {\r\n\r\n\t\tsuper(updateService, ranchService, dialog);\r\n\t\tthis.eventType = EventsType.FERTILIZER;\r\n\t}\r\n\r\n\tpublic isFertilizationNA(event: IFertilizationEvent): boolean {\r\n\t\treturn FertilizationEvent.getFertilizerUnit(event) === -1;\r\n\t}\r\n}\r\n","<!-- irrigation events -->\r\n\r\n<div class=\"bk-planting__event-row\"\r\n    (click)=\"onOpenEvent(event.Irrigation.Id)\">\r\n    <div class=\"bk-planting__event-row__date-column\">\r\n        <div class=\"bk-planting__event-row__datebox\"\r\n            [ngClass]=\"{'bk-planting__event-row__datebox--today': isToday}\">\r\n            <div class=\"bk-planting__event-row__datebox__month\">\r\n                {{ event.EventDate | localeMonth }}\r\n            </div>\r\n            <div class=\"bk-planting__event-row__datebox__date\">\r\n                {{ event.EventDate | date:'d'}}\r\n            </div>\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"bk-planting__event-row__label\">\r\n         \r\n        <span *ngIf=\"!isRainfall && !isFlowmeter\"\r\n            class=\"bk-planting__event-row__icon bk-button--blue-icon\">\r\n            <svg-water></svg-water>\r\n        </span>\r\n        <span *ngIf=\"isRainfall\"\r\n            class=\"bk-planting__event-row__icon bk-button--rain-icon\">\r\n            <svg-rainfall></svg-rainfall>\r\n        </span>\r\n        <span *ngIf=\"isFlowmeter\"\r\n            class=\"bk-planting__event-row__icon bk-planting__event-row__icon--fa\">\r\n            <i class=\"fas fa-water\"></i>\r\n        </span>\r\n        <span class=\"bk-planting__event-row__label__name\">\r\n            {{event.Irrigation.IrrigationMethod | translate }}\r\n        </span>\r\n    </div>\r\n\r\n    <div class=\"bk-planting__event-row__measurements\">\r\n\r\n        <!-- not flood -->\r\n        <!-- in event snapshot, we'll always show hours, not inches -->\r\n\r\n        <ng-container *ngIf=\"!irrigationEvent.isNA(event.Irrigation, planting.WetDate) &&\r\n            event.Irrigation.IrrigationMethod !== irrigationMethodStrings.flood\">\r\n\r\n            <span *ngIf=\"event.Irrigation.IrrigationMethod !== irrigationMethodStrings.rainfall\">\r\n                <span class=\"bk-planting__event-row__amount\">{{irrigationEvent.getDisplayHours(event.Irrigation) | number: '1.0-1' | integerIfZero}}\r\n                </span> {{'hr' | translate }}\r\n            </span>\r\n            <span *ngIf=\"event.Irrigation.IrrigationMethod === irrigationMethodStrings.rainfall\">\r\n                <span class=\"bk-planting__event-row__amount\">{{getIrrigationValueRainfall(event) | number: '1.0-1' | integerIfZero }}\r\n                </span> {{'in' | translate }}\r\n            </span>\r\n            <i *ngIf=\"irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) !== ''\"\r\n                matTooltip=\"{{irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) }}\"\r\n                class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n            </i>\r\n        </ng-container>\r\n\r\n        <!-- Flood -->\r\n\r\n        <ng-container *ngIf=\"!irrigationEvent.isNA(event.Irrigation, planting.WetDate) &&\r\n            event.Irrigation.IrrigationMethod === irrigationMethodStrings.flood\">\r\n\r\n            <span class=\"bk-planting__event-row__amount\">{{ getFloodAmount(event) | number: '1.0-1' | integerIfZero}}</span>\r\n            <span> {{'in' | translate }}</span>\r\n\r\n            <i *ngIf=\"irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) !== ''\"\r\n                matTooltip=\"{{irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) }}\"\r\n                class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n            </i>\r\n        </ng-container>\r\n\r\n        <!-- NA -->\r\n\r\n        <ng-container *ngIf=\"irrigationEvent.isNA(event.Irrigation, planting.WetDate)\">\r\n            <!-- <div class=\"bk-spacer\"></div> -->\r\n            <span>N/A</span>\r\n            <i *ngIf=\"irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) !== ''\"\r\n                matTooltip=\"{{irrigationEvent.getWarningTextForAllTab(event, planting.CommodityTypeId) }}\"\r\n                class=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n            </i>\r\n        </ng-container>\r\n    </div>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\nimport { EventUtility } from '../../../models/event/eventUtility';\r\nimport { IrrigationEvent } from '../../irrigation-event/irrigationEvent';\r\n\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { RanchService } from '../../ranch-settings/service';\r\nimport { ValidateService } from '../../../services/validate.service';\r\n\r\nimport { IEventGroup } from '../../../models/event/interfaces';\r\nimport { IPlanting } from '../../planting-settings/interfaces';\r\nimport { eIrrigationMethods, EventContext, EventsType, irrigationMethodNames } from '../../../interfaces/constants';\r\nimport { RowBaseComponent } from './row-base';\r\nimport { TranslateService } from '../../localization/service';\r\nimport { EventGroup } from '../../../models/event/event';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'irrigation-row',\r\n\ttemplateUrl: 'irrigation-row.html',\r\n\tstyleUrls: ['irrigation-row.scss']\r\n})\r\n\r\nexport class IrrigationRowComponent extends RowBaseComponent implements OnInit {\r\n\r\n\tpublic irrigationMethodStrings = irrigationMethodNames;\r\n\tpublic isRainfall = false;\r\n\tpublic isFlowmeter = false;\r\n\tpublic irrigationEvent: IrrigationEvent;\r\n\tpublic planting: IPlanting;\r\n\tprivate _ts: TranslateService;\r\n\r\n\tconstructor(\r\n\t\tprotected updateService: UpdateService,\r\n\t\tprotected ranchService: RanchService,\r\n\t\tprotected dialog: MatDialog,\r\n\t\tprotected translateService: TranslateService) {\r\n\r\n\t\tsuper(updateService, ranchService, dialog);\r\n\t\tthis.eventType = EventsType.WATER;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tsuper.ngOnInit();\r\n\t\tthis.irrigationEvent = new IrrigationEvent(this.translateService);\r\n\t\tthis.isRainfall = this.event.Irrigation.IrrigationMethodId === eIrrigationMethods.RAINFALL;\r\n\t\tthis.isFlowmeter = this.event.Irrigation.HasFlowMeterData;\r\n\t\tthis.planting = this.ranchService.plantings.getPlantingById(Number(this.plantingId));\r\n\t}\r\n\r\n\t/**\r\n\t * This function is unnecessary\r\n\t * @param event\r\n\t */\r\n\tpublic getIrrigationValueRainfall(event: EventGroup): number {\r\n\t\treturn event.Irrigation.Rainfall + event.Irrigation.ContributingRainfall;\r\n\t}\r\n\r\n\tpublic getFloodAmount(event: IEventGroup): number {\r\n\t\tlet isCropManageRecommendation: boolean;\r\n\t\tlet inches: number;\r\n\t\tlet result: number;\r\n\r\n\t\tif (!event || !event.Irrigation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tisCropManageRecommendation = EventUtility.isCropManageRecommendationIrrigation(event, EventContext.SNAPSHOT);\r\n\r\n\t\t// show inches\r\n\t\tif (isCropManageRecommendation) {\r\n\t\t\treturn event.Irrigation.RecommendedIrrigationAmount;\r\n\t\t}\r\n\r\n\t\tif (ValidateService.isValidNumber(event.Irrigation.WaterApplied)) {\r\n\t\t\tinches = event.Irrigation.WaterApplied; // applied - show hours\r\n\t\t} else if (ValidateService.isValidNumber(event.Irrigation.ManagerAmountRecommendation)) {\r\n\t\t\tinches = event.Irrigation.ManagerAmountRecommendation; // manager recommendation - show hours\r\n\t\t}\r\n\r\n\t\tif (!ValidateService.isValidNumber(inches)) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tresult = IrrigationEvent.convertInchesToHours(inches, event.Irrigation.IrrigationMethodId,\r\n\t\t\tevent.Irrigation.SprinklerApplicationRate, event.Irrigation.DripApplicationRate);\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","<div class=\"bk-planting__events-date-filters\">\r\n    <a\r\n        class=\"bk-planting__events-date-filter-link\"\r\n        [ngClass]=\"{'bk-planting__events-date-filter-link--selected': isTaskTabActive}\">\r\n        {{'Tasks' | translate }}\r\n        <span *ngIf=\"overdueWarningTooltipText\"\r\n            matTooltip=\"{{overdueWarningTooltipText}}\"\r\n            class=\"bk-planting__applied-recommendation-count\">\r\n            {{tasks.overdue.length + tasks.today.length}}\r\n        </span>\r\n    </a>\r\n    <ng-container *ngIf=\"permissions && permissions.UserCanEditPlanting\">\r\n        <i class=\"far fa-calendar-plus\"\r\n            matTooltip=\"{{ 'Create a Task' | translate }}\"\r\n            (click)=\"toggleDropDown()\">\r\n        </i>\r\n\r\n        <ul *ngIf=\"isDropDownVisible\"\r\n            (clickOutside)=\"onEventMenuClickOutside($event)\"\r\n            class=\"bk-drop-menu bk-flex-table__drop-menu\r\n                bk-flex-table__drop-menu--events\">\r\n\r\n            <li class=\"bk-drop-menu__item bk-button--green-icon\"\r\n                (click)=\"createEvent(eventTypes.WATER, $event)\">\r\n                <svg-water></svg-water>\r\n                <label>\r\n                    {{'Irrigation' | translate }}\r\n                </label>\r\n            </li>\r\n            <li *ngIf=\"hasCutEvents\"\r\n                class=\"bk-drop-menu__item\"\r\n                (click)=\"createEvent(eventTypes.CUTTING, $event)\">\r\n\r\n                <img class=\"bk-button-set__cuttting-image\"\r\n                    src=\"../assets/images/icons/icon-sickle.svg\" />\r\n\r\n                <label class=\"bk-drop-menu__item__label\">\r\n                    {{'Cut Event' | translate}}\r\n                </label>\r\n            </li>\r\n\r\n            <li class=\"bk-drop-menu__item bk-button--black-icon\"\r\n                (click)=\"createEvent(eventTypes.FERTILIZER, $event)\">\r\n\r\n                <svg-fertilizer></svg-fertilizer>\r\n\r\n                <label>\r\n                    {{'Fertilization' | translate }}\r\n                </label>\r\n            </li>\r\n\r\n            <li class=\"bk-drop-menu__item bk-button--yellow-icon\"\r\n                (click)=\"createEvent(eventTypes.SOILSAMPLES, $event)\">\r\n\r\n                <svg-soil-sample></svg-soil-sample>\r\n\r\n                <label>\r\n                    {{'Soil Sample' | translate }}\r\n                </label>\r\n            </li>\r\n\r\n            <li class=\"bk-drop-menu__item bk-button--yellow-icon\"\r\n                (click)=\"createEvent(eventTypes.TISSUE_SAMPLE, $event)\">\r\n\r\n                <svg-tissue-sample></svg-tissue-sample>\r\n                \r\n                <label>\r\n                    {{'Tissue Sample' | translate }}\r\n                </label>\r\n            </li>\r\n        </ul>\r\n    </ng-container>\r\n</div>\r\n\r\n<div class=\"bk-planting__events\">\r\n    <!-- TASKS VIEW -->\r\n    <div *ngIf=\"tasks.overdue.length > 0\"\r\n        class=\"bk-planting__event-group\">\r\n        <h2>{{ 'INCOMPLETE TASKS' | translate }}<mat-icon \r\n            class=\"bk-info-icon\"\r\n            matTooltip=\"{{ 'To resolve a task, fill its applied amount field' | translate }}.\">\r\n            info_outline\r\n        </mat-icon></h2>\r\n        \r\n        <events-snapshot-row *ngFor=\"let task of tasks.overdue\"\r\n            [event]=\"task\"\r\n            [commodityTypeId]=\"commodityTypeId\"\r\n            [past]=\"true\"\r\n            [plantingId]=\"plantingId\"\r\n            [maturities]=\"maturities\">\r\n        </events-snapshot-row>            \r\n    </div>\r\n    <div *ngIf=\"tasks.today.length > 0\"\r\n        class=\"bk-planting__event-group\">\r\n        <h2>{{ 'DUE TODAY' | translate }}</h2>\r\n        \r\n        <events-snapshot-row *ngFor=\"let task of tasks.today\"\r\n            [event]=\"task\"\r\n            [commodityTypeId]=\"commodityTypeId\"\r\n            [past]=\"false\"\r\n            [plantingId]=\"plantingId\"\r\n            [maturities]=\"maturities\">\r\n        </events-snapshot-row>            \r\n    </div>\r\n    <div *ngIf=\"tasks.future.length > 0\"\r\n        class=\"bk-planting__event-group\">\r\n        <h2>{{ 'FUTURE TASKS' | translate }}</h2>\r\n        \r\n        <events-snapshot-row *ngFor=\"let task of tasks.future\"\r\n            [event]=\"task\"\r\n            [commodityTypeId]=\"commodityTypeId\"\r\n            [past]=\"false\"\r\n            [plantingId]=\"plantingId\"\r\n            [maturities]=\"maturities\">\r\n        </events-snapshot-row>            \r\n    </div>\r\n    <div *ngIf=\"tasks.completed.length > 0\"\r\n        class=\"bk-planting__event-group\">\r\n        <h2>{{ 'COMPLETED' | translate }}</h2>\r\n        \r\n        <events-snapshot-row *ngFor=\"let task of tasks.completed\"\r\n            [event]=\"task\"\r\n            [commodityTypeId]=\"commodityTypeId\"\r\n            [past]=\"true\"\r\n            [plantingId]=\"plantingId\"\r\n            [maturities]=\"maturities\">\r\n        </events-snapshot-row>            \r\n    </div>\r\n    <div *ngIf=\"tasks.overdue.length + tasks.completed.length +\r\n        tasks.today.length + + tasks.future.length === 0\"\r\n        class=\"bk-planting__event\">\r\n        <h3>{{ 'There are no tasks in this planting' | translate }}.</h3>\r\n        <p>{{ 'Click on the menu icon' | translate }} <i class=\"far fa-calendar-plus bk-icon--small\">\r\n        </i> {{ 'to start a new task' | translate }}.</p>\r\n    </div>\r\n</div>","import { Component, OnInit, Input, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\r\nimport { RanchService } from '../../ranch-settings/service';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { EventUtility } from '../../../models/event/eventUtility';\r\nimport { IMaturity } from '../../../models/maturity/interfaces';\r\nimport { IEventGroup } from '../../../models/event/interfaces';\r\nimport { DateUtility } from '../../../classes/dateUtility';\r\nimport { eIrrigationMethods, EventsType } from '../../../interfaces/constants';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { IRanchPermissions } from '../../ranch-settings/interfaces';\r\nimport { EventDialogUtility } from '../../../classes/eventDialogUtility';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'events-snapshot',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: [ 'main.scss']\r\n})\r\n\r\nexport class EventsSnapshotComponent implements OnInit, OnChanges, OnDestroy {\r\n\t@Input()\r\n\tcommodityTypeId: number;\r\n\r\n\t@Input()\r\n\teventGroups: IEventGroup[]; // events are pulled by parent view (plantings)\r\n\r\n\t@Input()\r\n\thasCutEvents: boolean;\r\n\r\n\t@Input()\r\n\tmaturities: IMaturity[];\r\n\r\n\t@Input()\r\n\tplantingId: number; // REFACTOR - should be a number\r\n\r\n\t@Input()\r\n\twetDate: Date;\r\n\r\n\tpublic eventTypes = EventsType;\r\n\tpublic isDropDownVisible = false;\r\n\tpublic isTaskTabActive = true;\r\n\tpublic overdueWarningTooltipText: string;\r\n\tpublic permissions: IRanchPermissions;\r\n\r\n\tpublic tasks: {\r\n\t\toverdue: IEventGroup[],\r\n\t\tfuture: IEventGroup[],\r\n\t\ttoday: IEventGroup[],\r\n\t\tcompleted: IEventGroup[]\r\n\t}\r\n\r\n\tprivate _eventDialogUtility: EventDialogUtility;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _dialog: MatDialog) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._parseEvents();\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.permissions = this._updateService.currentPermissions;\r\n\r\n\t\tthis._eventDialogUtility = new EventDialogUtility(this.plantingId, this.commodityTypeId,\r\n\t\t\tthis.permissions, this._dialog, this._ranchService);\r\n\r\n\t\tthis._updateService.RanchPlantingsPermissions$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(data => {\r\n\r\n\t\t\tthis.permissions = data;\r\n\t\t\tthis._eventDialogUtility.setPermissions(this.permissions);\r\n\t\t})\r\n\t\tthis._updateService.PlantingsUpdated$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\r\n\t\t\tthis._parseEvents();\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\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tthis._parseEvents();\r\n\t}\r\n\r\n\t/**\r\n\t * organize events for various views in event snapshot\r\n\t */\r\n\tprivate _parseEvents(): void {\r\n\t\tlet today: Date;\r\n\r\n\t\tthis.tasks = {\r\n\t\t\toverdue: [],\r\n\t\t\tfuture: [],\r\n\t\t\ttoday: [],\r\n\t\t\tcompleted: []\r\n\t\t};\r\n\r\n\t\ttoday = new Date();\r\n\r\n\t\tfor (let eventGroup of this.eventGroups) {\r\n\t\t\tlet organizedGroup: {\r\n\t\t\t\tcomplete: IEventGroup,\r\n\t\t\t\tincomplete: IEventGroup\r\n\t\t\t};\r\n\r\n\t\t\t// if an event has an applied amount => completed\r\n\t\t\t// if an event doesn't have an applied amount and in the past => overdue\r\n\t\t\t// else => todo\r\n\r\n\t\t\torganizedGroup = this._organizeEvents(eventGroup);\r\n\r\n\t\t\tif (organizedGroup.complete) {\r\n\t\t\t\tthis.tasks.completed.push(organizedGroup.complete);\r\n\t\t\t}\r\n\r\n\t\t\tif (organizedGroup.incomplete) {\r\n\t\t\t\tif (DateUtility.isFuture(eventGroup.EventDate)) {\r\n\t\t\t\t\tthis.tasks.future.push(organizedGroup.incomplete);\r\n\t\t\t\t} else if (DateUtility.isToday(eventGroup.EventDate)) {\r\n\t\t\t\t\tthis.tasks.today.push(organizedGroup.incomplete);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.tasks.overdue.push(organizedGroup.incomplete);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.overdueWarningTooltipText = this._getOverdueTooltipText();\r\n\r\n\t\tthis.tasks.overdue.sort((a, b) => {\r\n\t\t\treturn a.EventDate > b.EventDate ? -1 : a.EventDate < b.EventDate ? 1 : 0;\r\n\t\t});\r\n\r\n\t\tthis.tasks.completed.sort((a, b) => {\r\n\t\t\treturn a.EventDate > b.EventDate ? -1 : a.EventDate < b.EventDate ? 1 : 0;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @returns a string used to display tool tip text in the Tasks tab fab\r\n\t */\r\n\tprivate _getOverdueTooltipText(): string {\r\n\t\tlet result = '';\r\n\r\n\t\tif (this.tasks.today.length > 0) {\r\n\t\t\tresult += this.tasks.today.length.toString() + ' tasks due today. ';\r\n\t\t}\r\n\r\n\t\tif (this.tasks.overdue.length > 0) {\r\n\t\t\tresult += this.tasks.overdue.length.toString() + ' recommendations not applied';\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Determins if an IEventGroup object has content\r\n\t * @param eg\r\n\t * @returns\r\n\t */\r\n\tprivate _isEventGroupEmpty(eg: IEventGroup): boolean {\r\n\t\tif (!eg.Irrigation && (!eg.Fertilization || eg.Fertilization.length === 0)\r\n\t\t\t&& (!eg.SoilSamples || eg.SoilSamples.length === 0) &&\r\n\t\t\t(!eg.TissueSamples || eg.TissueSamples.length === 0) && !eg.CutEvent) {\r\n\r\n\t\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 toggleDropDown(): void {\r\n\t\tthis.isDropDownVisible = !this.isDropDownVisible;\r\n\t}\r\n\r\n\t/**\r\n\t * take an eventGroup on a specific event date and divide them into two groups\r\n\t * containing complete and incomplete events\r\n\t * @param eventsGroup\r\n\t * @returns incomplete and complete event groups\r\n\t */\r\n\tprivate _organizeEvents(eventsGroup: IEventGroup): { complete: IEventGroup, incomplete: IEventGroup} {\r\n\t\tlet result: {\r\n\t\t\tcomplete: IEventGroup,\r\n\t\t\tincomplete: IEventGroup\r\n\t\t};\r\n\r\n\t\tlet isPast: boolean;\r\n\t\tlet isOnOrBeforeWetDate: boolean;\r\n\r\n\t\tisOnOrBeforeWetDate = DateUtility.isOnOrBefore(eventsGroup.EventDate, this.wetDate);\r\n\r\n\t\tisPast = !DateUtility.isTodayOrFuture(eventsGroup.EventDate);\r\n\r\n\t\tresult = {\r\n\t\t\tcomplete: {\r\n\t\t\t\tIrrigation: null,\r\n\t\t\t\tFertilization: [],\r\n\t\t\t\tSoilSamples: [],\r\n\t\t\t\tCutEvent: null,\r\n\t\t\t\tTissueSamples: [],\r\n\t\t\t\tEventDate: eventsGroup.EventDate,\r\n\t\t\t\tRainfallWeather: null,\r\n\t\t\t\tisOnOrBeforeWetDate: isOnOrBeforeWetDate,\r\n\t\t\t\tisPast: isPast\r\n\t\t\t},\r\n\t\t\tincomplete: {\r\n\t\t\t\tIrrigation: null,\r\n\t\t\t\tFertilization: [],\r\n\t\t\t\tSoilSamples: [],\r\n\t\t\t\tCutEvent: null,\r\n\t\t\t\tTissueSamples: [],\r\n\t\t\t\tEventDate: eventsGroup.EventDate,\r\n\t\t\t\tRainfallWeather: null,\r\n\t\t\t\tisOnOrBeforeWetDate: isOnOrBeforeWetDate,\r\n\t\t\t\tisPast: isPast\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tif (eventsGroup.Irrigation) {\r\n\t\t\t// don't display rainfall events in task list\r\n\t\t\tif (eventsGroup.Irrigation.WaterApplied !== null ||\r\n\t\t\t\teventsGroup.Irrigation.IrrigationMethodId === eIrrigationMethods.RAINFALL) {\r\n\r\n\t\t\t\tresult.complete.Irrigation = eventsGroup.Irrigation;\r\n\r\n\t\t\t} else if (eventsGroup.Irrigation.IrrigationMethodId ===\r\n\t\t\t\teIrrigationMethods.GERMINATION_SPRINKLER && isOnOrBeforeWetDate) {\r\n\t\t\t\t// mark germination sprinkler events as complete, since they're auto-generated\r\n\t\t\t\t// and may not reflect actual irrigation\r\n\t\t\t\tresult.complete.Irrigation = eventsGroup.Irrigation;\r\n\t\t\t} else {\r\n\t\t\t\tresult.incomplete.Irrigation = eventsGroup.Irrigation;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (eventsGroup.CutEvent) {\r\n\t\t\tif (eventsGroup.isPast) {\r\n\t\t\t\tresult.complete.CutEvent = eventsGroup.CutEvent;\r\n\t\t\t} else {\r\n\t\t\t\tresult.incomplete.CutEvent = eventsGroup.CutEvent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._organizeFertilizationEvents(eventsGroup, result.complete, result.incomplete);\r\n\t\tthis._organizeSoilSamples(eventsGroup, result);\r\n\t\tthis._organizeTissueSamples(eventsGroup, result.complete, result.incomplete);\r\n\r\n\t\tif (this._isEventGroupEmpty(result.complete)) {\r\n\t\t\tresult.complete = null;\r\n\t\t}\r\n\r\n\t\tif (this._isEventGroupEmpty(result.incomplete)) {\r\n\t\t\tresult.incomplete = null;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _organizeFertilizationEvents(eventsGroup: IEventGroup, completed: IEventGroup,\r\n\t\tincomplete: IEventGroup): void {\r\n\r\n\t\tif (!eventsGroup || !eventsGroup.Fertilization || eventsGroup.Fertilization.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let fertilizationEvent of eventsGroup.Fertilization) {\r\n\t\t\tif (fertilizationEvent.FertilizerApplied !== null) {\r\n\t\t\t\tcompleted.Fertilization.push(fertilizationEvent);\r\n\t\t\t} else {\r\n\t\t\t\tincomplete.Fertilization.push(fertilizationEvent);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _organizeSoilSamples(eventsGroup: IEventGroup,\r\n\t\tresult: { complete: IEventGroup, incomplete: IEventGroup}): void {\r\n\r\n\t\tif (!eventsGroup || !eventsGroup.SoilSamples || eventsGroup.SoilSamples.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let index in eventsGroup.SoilSamples) {\r\n\t\t\tif (EventUtility.isSoilSampleApplied(eventsGroup, true, Number(index))) {\r\n\t\t\t\tresult.complete.SoilSamples.push(eventsGroup.SoilSamples[index]);\r\n\t\t\t} else {\r\n\t\t\t\tresult.incomplete.SoilSamples.push(eventsGroup.SoilSamples[index]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _organizeTissueSamples(eventsGroup: IEventGroup, completed: IEventGroup,\r\n\t\tincomplete: IEventGroup): void {\r\n\r\n\t\tif (!eventsGroup || !eventsGroup.TissueSamples || eventsGroup.TissueSamples.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let index in eventsGroup.TissueSamples) {\r\n\r\n\t\t\tif (eventsGroup.TissueSamples[index].NutrientDisplayText) {\r\n\t\t\t\tcompleted.TissueSamples.push(eventsGroup.TissueSamples[index]);\r\n\t\t\t} else {\r\n\t\t\t\tincomplete.TissueSamples.push(eventsGroup.TissueSamples[index]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic onEventMenuClickOutside($event: MouseEvent) {\r\n\t\tlet target: JQuery;\r\n\r\n\t\tif ($event) {\r\n\t\t\t$event.stopPropagation();\r\n\t\t\t$event.preventDefault();\r\n\t\t}\r\n\r\n\t\ttarget = jQuery($event.target);\r\n\r\n\t\tif (target.hasClass('fa-calendar-plus')) {\r\n\t\t\t// event add button\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('modal')) {\r\n\t\t\t// clicking on another popup's glaze\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('bk-button--medium')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('mat-button-wrapper')) {\r\n\t\t\t// mat dialog button\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (jQuery($event.target).closest('.modal-content').length > 0) { // inside another popup\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (jQuery($event.target).closest('.bk-dialog').length > 0) { // inside another popup\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (jQuery($event.target).closest('.cdk-overlay-container').length > 0) { // inside another popup\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isDropDownVisible = false;\r\n\t}\r\n\r\n\t/**\r\n     * similar to openModal, except it takes a slightly different type string\r\n     * and no id\r\n     * @param type\r\n     */\r\n\tpublic createEvent(type: EventsType, $event: MouseEvent) {\r\n\r\n\t\t$event.preventDefault();\r\n\t\t$event.stopPropagation();\r\n\r\n\t\tthis.isDropDownVisible = false;\r\n\r\n\t\tthis._eventDialogUtility.open(type, null);\r\n\t}\r\n}\r\n","import { Component, OnInit, Input, OnDestroy } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\nimport { EventUtility } from '../../../models/event/eventUtility';\r\n\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { RanchService } from '../../ranch-settings/service';\r\nimport { IEventGroup } from '../../../models/event/interfaces';\r\nimport { EventContext, EventsType } from '../../../interfaces/constants';\r\nimport { IRanchPermissions } from '../../ranch-settings/interfaces';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { EventDialogUtility } from '../../../classes/eventDialogUtility';\r\nimport { DateUtility } from '../../../classes/dateUtility';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'row-base',\r\n\ttemplate: ''\r\n})\r\n\r\nexport class RowBaseComponent implements OnInit, OnDestroy {\r\n\t@Input()\r\n\tplantingId: number; // REFACTOR - should be a number\r\n\r\n\t@Input()\r\n\tcommodityTypeId: number; // used by tissue sample events to fetch crop stages\r\n\r\n\t@Input()\r\n\tevent: IEventGroup;\r\n\r\n\tpublic eventType: EventsType;\r\n\tpublic context: EventContext = EventContext.SNAPSHOT;\r\n\tpublic eventUtility = EventUtility;\r\n\tpublic isToday = false; // used to highlight an event scheduled for today\r\n\r\n\tprotected eventDialogUtility: EventDialogUtility;\r\n\r\n\tprivate permissions: IRanchPermissions;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprotected updateService: UpdateService,\r\n\t\tprotected ranchService: RanchService,\r\n\t\tprotected dialog: MatDialog) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.permissions = this.updateService.currentPermissions;\r\n\t\tthis.isToday = DateUtility.isToday(this.event.EventDate);\r\n\r\n\t\tthis.eventDialogUtility = new EventDialogUtility(this.plantingId,\r\n\t\t\tthis.commodityTypeId, this.permissions, this.dialog, this.ranchService);\r\n\r\n\t\tthis.updateService.RanchPlantingsPermissions$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(data => {\r\n\r\n\t\t\tthis.permissions = data;\r\n\t\t\tthis.eventDialogUtility.setPermissions(this.permissions);\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 onOpenEvent(eventId: number): void {\r\n\t\tif (!this.eventType) {\r\n\t\t\tthrow new Error('eventType is not defined');\r\n\t\t}\r\n\r\n\t\tthis.eventDialogUtility.open(this.eventType, eventId);\r\n\t}\r\n}\r\n","<div class=\"bk-planting__event-row__date--mobile\">\r\n    {{ event.EventDate | date: 'MMM d' }}\r\n</div>\r\n<irrigation-row *ngIf=\"event.Irrigation\"\r\n    [plantingId]=\"plantingId\"\r\n    [commodityTypeId]=\"commodityTypeId\"\r\n    [event]=\"event\">\r\n</irrigation-row>\r\n\r\n<fertilization-row *ngIf=\"event.Fertilization && event.Fertilization.length > 0\"\r\n    [plantingId]=\"plantingId\"\r\n    [commodityTypeId]=\"commodityTypeId\"\r\n    [event]=\"event\">\r\n</fertilization-row>\r\n\r\n<soil-sample-row *ngIf=\"event.SoilSamples.length > 0\"\r\n    [plantingId]=\"plantingId\"\r\n    [past]=\"past\"\r\n    [commodityTypeId]=\"commodityTypeId\"\r\n    [event]=\"event\">\r\n</soil-sample-row>\r\n\r\n<tissue-sample-row *ngIf=\"event.TissueSamples.length > 0\"\r\n    [plantingId]=\"plantingId\"\r\n    [commodityTypeId]=\"commodityTypeId\"\r\n    [event]=\"event\">\r\n</tissue-sample-row>\r\n\r\n\r\n<cut-row *ngIf=\"event.CutEvent\"\r\n    [plantingId]=\"plantingId\"\r\n    [commodityTypeId]=\"commodityTypeId\"\r\n    [past]=\"past\"\r\n    [maturities]=\"maturities\"\r\n    [event]=\"event\">\r\n</cut-row>","import { Component, OnInit, Input } from '@angular/core';\r\nimport { IMaturity } from '../../../models/maturity/interfaces';\r\nimport { IEventGroup } from '../../../models/event/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'events-snapshot-row',\r\n\ttemplateUrl: 'row.html',\r\n\tstyleUrls: [ 'row.scss']\r\n})\r\n\r\nexport class EventsSnapshotRowComponent implements OnInit {\r\n\t@Input()\r\n\tplantingId: number; // REFACTOR - should be a number\r\n\r\n\t@Input()\r\n\tcommodityTypeId: number; // used by tissue sample events to fetch crop stages\r\n\r\n\t@Input()\r\n\tevent: IEventGroup;\r\n\r\n\t@Input()\r\n\tpast: boolean;\r\n\r\n\t@Input()\r\n\tmaturities: IMaturity[];\r\n\r\n\tconstructor() { }\r\n\r\n\tngOnInit(): void {\r\n\t}\r\n}\r\n","<div *ngFor=\"let sample of event.SoilSamples; let i = index;\"\r\n\tclass=\"bk-planting__event-row\"\r\n\t(click)=\"onOpenEvent(sample.Id)\">\r\n\r\n\t<div class=\"bk-planting__event-row__date-column\">\r\n\t\t<div class=\"bk-planting__event-row__datebox\"\r\n\t\t\t[ngClass]=\"{'bk-planting__event-row__datebox--today': isToday}\">\r\n\t\t\t<div class=\"bk-planting__event-row__datebox__month\">\r\n\t\t\t\t{{ event.EventDate | localeMonth }}\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-planting__event-row__datebox__date\">\r\n\t\t\t\t{{ event.EventDate | date:'d'}}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"bk-planting__event-row__label\">\r\n\t\t<div class=\"bk-planting__event-row__icon bk-button--yellow-icon\">\r\n\t\t\t<svg-soil-sample></svg-soil-sample>\r\n\t\t</div>\r\n\r\n\t\t<span class=\"bk-planting__event-row__label__name\">\r\n\t\t\t{{event.SoilSamples[i].SampleType | translate }}\r\n\t\t</span>\r\n\t</div>\r\n\t<div class=\"bk-planting__event-row__measurements\">\r\n\r\n\t\t<ng-container *ngIf=\"isNDependent\">\r\n\t\t\t<span class=\"bk-planting__event-row__amount\">{{getDisplayValue(event, i) | number: '1.0-1'}}\r\n\t\t\t</span>\r\n\t\t\t<span *ngIf=\"isSoilSampleApplied(event, i)\">{{'ppm' | translate }}\r\n\t\t\t</span>\r\n\t\t\t<span *ngIf=\"!isSoilSampleApplied(event, i)\">{{'ft' | translate}}\r\n\t\t\t</span>\r\n\t\t</ng-container>\r\n\r\n\t\t<ng-container *ngIf=\"!isNDependent\">\r\n\t\t\t<span class=\"bk-planting__event-row__amount\">{{sample.Depth | number: '1.0-1'}}</span>\r\n\t\t\t<span> {{'ft' | translate}}</span>\r\n\t\t</ng-container>\r\n\r\n\t\t<i matTooltip=\"Sample not taken\"\r\n\t\t\t*ngIf=\"shouldShowWarning(event, i)\"\r\n\t\t\tclass=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n\t\t</i>\r\n\t</div>\r\n</div>","import { Component, OnInit, Input, OnDestroy } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { RanchService } from '../../ranch-settings/service';\r\nimport { IEventGroup } from '../../../models/event/interfaces';\r\nimport { EventsType } from '../../../interfaces/constants';\r\nimport { RowBaseComponent } from './row-base';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'soil-sample-row',\r\n\ttemplateUrl: 'soil-sample-row.html'\r\n})\r\n\r\nexport class SoilSampleRowComponent extends RowBaseComponent implements OnInit, OnDestroy {\r\n\t@Input()\r\n\tpast: boolean;\r\n\r\n\tpublic isNDependent: boolean;\r\n\r\n\tconstructor(\r\n\t\tprotected updateService: UpdateService,\r\n\t\tprotected ranchService: RanchService,\r\n\t\tprotected dialog: MatDialog) {\r\n\r\n\t\tsuper(updateService, ranchService, dialog);\r\n\t\tthis.eventType = EventsType.SOILSAMPLES;\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tsuper.ngOnInit();\r\n\t\tthis.isNDependent = this.ranchService.getIsNDependent(Number(this.plantingId));\r\n\t}\r\n\r\n\t/// TODO: Replace with inline template call to EventUtility\r\n\tpublic getDisplayValue(event: IEventGroup, 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 (!this.past) { // future 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 (event.SoilSamples[index].SoilNitrateNPPM > 0) {\r\n\t\t\treturn event.SoilSamples[index].SoilNitrateNPPM;\r\n\t\t} else {\r\n\t\t\treturn event.SoilSamples[index].Depth;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic isSoilSampleApplied(event: IEventGroup, index: number): boolean {\r\n\t\tif (this.isNDependent) {\r\n\t\t\treturn event.SoilSamples[index].SoilNitrateNPPM > 0;\r\n\t\t} else {\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\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic shouldShowWarning(event: IEventGroup, index: number): boolean {\r\n\t\tif (this.past && !this.isSoilSampleApplied(event, index)) {\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 *ngFor=\"let sample of event.TissueSamples; let i = index;\"\r\n\tclass=\"bk-planting__event-row\"\r\n\t(click)=\"onOpenEvent(sample.Id)\">\r\n\r\n\t<div class=\"bk-planting__event-row__date-column\">\r\n\t\t<div class=\"bk-planting__event-row__datebox\"\r\n\t\t\t[ngClass]=\"{'bk-planting__event-row__datebox--today': isToday}\">\r\n\t\t\t<div class=\"bk-planting__event-row__datebox__month\">\r\n\t\t\t\t{{ event.EventDate | localeMonth }}\r\n\t\t\t</div>\r\n\t\t\t<div class=\"bk-planting__event-row__datebox__date\">\r\n\t\t\t\t{{ event.EventDate | date:'d'}}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n\t<div class=\"bk-planting__event-row__label\">\r\n\t\t<div class=\"bk-planting__event-row__icon bk-button--yellow-icon\">\r\n\t\t\t<svg-tissue-sample></svg-tissue-sample>\r\n\t\t</div>\r\n\t\t<span class=\"bk-planting__event-row__label__name\">\r\n\t\t\t{{ 'Tissue Sample' | translate }}\r\n\t\t</span>\r\n\t</div>\r\n\t<div class=\"bk-planting__event-row__measurements\">\r\n\r\n\t\t<ng-container *ngIf=\"sample.NutrientDisplayText\">\r\n\t\t\t<span \r\n\t\t\t\tclass=\"bk-planting__event-row__amount\">{{getPercentage(sample)}}\r\n\t\t\t</span>\r\n\t\t\t<span>\r\n\t\t\t\t{{getNutrientName(sample)}}\r\n\t\t\t</span>\r\n\t\t</ng-container>\r\n\t\t\r\n\t\t<span *ngIf=\"!sample.NutrientDisplayText\">N/A</span>\r\n\t\t<i *ngIf=\"tissueSampleEventClass.shouldShowWarningIcon(sample, event)\"\r\n\t\t\tmatTooltip=\"{{ 'Sample not taken.' | translate }}\"\r\n\t\t\tclass=\"bk-event-recommendation-not-applied-icon fa fa-warning\">\r\n\t\t</i>\r\n\t</div>\r\n</div>","import { Component } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { RanchService } from '../../ranch-settings/service';\r\nimport {  EventsType } from '../../../interfaces/constants';\r\nimport { TissueSampleEvent } from '../../tissue-sample-event/tissueSampleEvent';\r\nimport { RowBaseComponent } from './row-base';\r\nimport { Internal } from '../../tissue-sample-event/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'tissue-sample-row',\r\n\ttemplateUrl: 'tissue-sample-row.html'\r\n})\r\n\r\nexport class TissueSampleRowComponent extends RowBaseComponent {\r\n\r\n\tpublic tissueSampleEventClass = TissueSampleEvent;\r\n\r\n\tconstructor(\r\n\t\tprotected updateService: UpdateService,\r\n\t\tprotected ranchService: RanchService,\r\n\t\tprotected dialog: MatDialog) {\r\n\r\n\t\tsuper(updateService, ranchService, dialog);\r\n\t\tthis.eventType = EventsType.TISSUE_SAMPLE;\r\n\t}\r\n\r\n\tpublic getPercentage(te: Internal.ITissueSampleEvent): string {\r\n\t\tlet percentage: string;\r\n\t\tlet name: string;\r\n\r\n\t\t[percentage, name] = te.NutrientDisplayText.split(' ');\r\n\r\n\t\treturn percentage;\r\n\t}\r\n\r\n\tpublic getNutrientName(te: Internal.ITissueSampleEvent): string {\r\n\t\tlet percentage: string;\r\n\t\tlet name: string;\r\n\r\n\t\t[percentage, name] = te.NutrientDisplayText.split(' ');\r\n\r\n\t\treturn name;\r\n\t}\r\n}\r\n","<div class=\"plantings-container bk-plantings__container\">\r\n    <div class=\"bk-ranches__left bk-plantings__left\"\r\n        [ngClass]=\"{'bk-menu-responsive--hidden': !searchIsVisible}\"\r\n        (clickOutside)=\"handleClickOutsidePlantingSearch($event)\">\r\n\r\n        <planting-search\r\n            [type]=\"type\">\r\n        </planting-search>\r\n        <br>\r\n\r\n        <ng-container *ngIf=\"type === plantingTabValues.all\">\r\n            <label for=\"yearFilter\">Filter by Year</label>\r\n            <select class=\"bk-modal__field\"\r\n                (ngModelChange)=\"filterByYear($event);\"\r\n                id=\"yearFilter\"\r\n                [(ngModel)]=\"yearFilter\">\r\n                <option [ngValue]=\"null\" selected>{{'All' | translate}}</option>\r\n                <ng-container *ngFor=\"let yearOption of yearOptions\">\r\n                    <option [ngValue]=\"yearOption.key\">{{yearOption.value}}</option>\r\n                </ng-container>\r\n            </select>\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"lots && lots.length > 0\">\r\n            <div class=\"bk-plantings__sub-header\">\r\n                {{'Lots' | translate }}\r\n            </div>\r\n\r\n            <div *ngFor=\"let lot of lots\"\r\n                class=\"bk-plantings__filter-option\"\r\n                [ngClass]=\"{'bk-plantings__filter-option-selected' : lot.Selected,\r\n                    'bk-option--disabled': lot.Disabled}\"\r\n                (click)=\"onToggleLot(lot.Id)\">\r\n                {{lot.Name}}<i class=\"fa fa-check\"></i>\r\n            </div>\r\n        </ng-container>\r\n        \r\n        <ng-container *ngIf=\"commodityTypes && commodityTypes.length > 0\">\r\n            <div class=\"bk-plantings__sub-header\">\r\n                {{'Commodities' | translate }}\r\n            </div>\r\n\r\n            <div *ngFor=\"let type of commodityTypes\"\r\n                class=\"bk-plantings__filter-option\"\r\n                [ngClass]=\"{'bk-plantings__filter-option-selected' : type.Selected,\r\n                    'bk-option--disabled': type.Disabled}\"\r\n                (click)=\"onToggleCommodityType(type.Id)\">\r\n                {{type.Name | translate }}<i class=\"fa fa-check\"></i>\r\n            </div>\r\n        </ng-container>\r\n    </div>\r\n    <div class=\"planting-list-container bk-plantings__right\">\r\n        <ng-container *ngIf=\"plantingsAreReadyToDisplay()\">\r\n            <div *ngIf=\"noPlantings && type != 'FavoritePlantings' && permissions && permissions.UserCanEditPlanting\">\r\n\r\n                <a href=\"javascript:void(0);\"\r\n                    class=\"bk-tile bk-tile--add-new\"\r\n                    (click)=\"openPlantingModal()\">\r\n\r\n                    <span class=\"bk-tile--add-new__icon\">+</span>\r\n                    <span class=\"bk-tile--add-new__text\">\r\n                        {{'Create a planting' | translate }}\r\n                    </span>\r\n                </a>\r\n            </div>\r\n            <!-- Hide until permissions sorted out\r\n            <div *ngIf=\"noPlantings && type != 'FavoritePlantings' && (!permissions || !permissions.UserCanEditRanch)\">\r\n                <a href=\"javascript:void(0);\" matTooltip=\"{{'You dont have permission' | translate }}\" class=\"bk-tile bk-tile--add-new\">\r\n                    <span class=\"bk-tile--add-new__text\">{{'You dont have permission to add plantings for this ranch' | translate }}</span>\r\n                </a>\r\n            </div>\r\n            -->\r\n            <div *ngIf=\"(searchValue || filterValue) && plantings && plantings.length == 0\"\r\n                class=\"bk-empty-state\">\r\n                <h3>\r\n                    {{'No Plantings Found' | translate }}\r\n                </h3>\r\n                <div class=\"bk-empty-state__text\">\r\n                    {{'Try searching or filtering by a different term' | translate }}\r\n                </div>\r\n            </div>\r\n            <div *ngIf=\"noFavorites && type == 'FavoritePlantings'\" class=\"bk-empty-state\">\r\n                <h3>{{'No favorites yet' | translate }}...</h3>\r\n                <div class=\"bk-empty-state__text\">\r\n                    {{'Favorite Plantings Text 1' | translate }}<br />\r\n                    {{'Favorite Plantings Text 2' | translate }}\r\n                </div>\r\n                <i class=\"bk-empty-state__icon fa fa-star\"></i>\r\n            </div>\r\n\r\n            <!-- list of plantings DESKTOP / TABLET (landscape) -->\r\n            <div id=\"slide-in-panel\"\r\n                class=\"bk-slide-in-panel\"\r\n                *ngIf=\"isSlideInPanelVisible\"\r\n                [@slideInOut]>\r\n\r\n                <slide-in-panel\r\n                    [permissions]=\"permissions\"\r\n                    [plantingId]='slideInPanelPlantingId'\r\n                    (triggerPlantingSettings)=\"openPlantingModal($event)\"\r\n                    (triggerRecalculate)=\"openPlantingRecalculateModal($event)\"\r\n                    (triggerDuplicate)=\"openPlantingModal($event, true)\"\r\n                    (triggerFlowmeter)=\"openFlowmeterDataModal($event)\"\r\n                    (triggerRainfall)=\"openRainfallDataModal($event)\"\r\n                    (triggerSoilSensor)=\"openSoilMoistureDialog(eSoilMoistureViews.GRAPH, $event)\"\r\n                    (triggerCanopyCurve)=\"openCanopyDialog($event)\"\r\n                    (closing)=\"closeSlideInPanel()\">\r\n                </slide-in-panel>\r\n            </div>\r\n\r\n            <ng-container *ngIf=\"isArray(plantings) && isMobile === false\">\r\n                <div *ngIf=\"plantings && plantings.length > 0\"\r\n                    class=\"bk-flex-table bk-flex-table__header-row\"\r\n                    [ngClass]=\"{'bk-flex-table--grey' : isSlideInPanelVisible}\">\r\n                    \r\n                    <div class=\"bk-flex-table__cell bk-flex-table__cell--header bk-flex-table__col1\">\r\n                        {{ 'Planting' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-flex-table__cell bk-flex-table__cell--header bk-flex-table__col3\">\r\n                        {{ 'Commodity' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-flex-table__cell bk-flex-table__cell--header bk-flex-table__col4\">\r\n                        {{ 'Start Date' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-flex-table__cell bk-flex-table__cell--header bk-flex-table__col5\">\r\n                        {{ 'End Date' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-flex-table__cell bk-flex-table__cell--header bk-flex-table__col6\">\r\n                        {{ 'Planting Area' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-flex-table__cell bk-flex-table__cell--header bk-flex-table__col7\"></div>\r\n                </div>\r\n                <div class='bk-flex-table bk-flex-table__scroll-area'\r\n                    [ngClass]=\"{'bk-flex-table__scroll-area--scrolling' : isTableScrolling,\r\n                        'bk-flex-table--grey': isSlideInPanelVisible}\">\r\n                    <ng-container *ngFor=\"let planting of plantings\">\r\n                        <div class='bk-flex-table__cell bk-flex-table__col1'\r\n                            [ngClass]=\"{ 'bk-clickable': !isSlideInPanelVisible,\r\n                                'bk-flex-table--focused': slideInPanelPlantingId === planting.Id}\"\r\n                            (contextmenu)='togglePlantingMenu(planting, $event)'\r\n                            (click)=\"openSlideInPanel(planting)\">\r\n                            {{planting.Name}}\r\n\r\n                            <span class=\"bk-flex-table__upcoming-events-count\"\r\n                                matTooltip=\"You have {{planting.Counts.upcomingEvents}} upcoming event(s).\"\r\n                                *ngIf='planting.Counts && planting.Counts.upcomingEvents > 0'>\r\n                                {{planting.Counts.upcomingEvents}}\r\n                            </span>\r\n                            <i *ngIf=\"planting.Favorite\"\r\n                                class=\"fa fa-star\">\r\n                            </i>\r\n                        </div>\r\n                        <div class='bk-flex-table__cell bk-flex-table__col3'\r\n                            [ngClass]=\"{ 'bk-clickable': !isSlideInPanelVisible,\r\n                                'bk-flex-table--focused': slideInPanelPlantingId === planting.Id}\"\r\n                            (contextmenu)='togglePlantingMenu(planting, $event)'\r\n                            (click)=\"openSlideInPanel(planting)\">\r\n                            {{planting.CommodityTypeName | translate }}\r\n                        </div>\r\n                        <div class='bk-flex-table__cell bk-flex-table__col4'\r\n                            [ngClass]=\"{ 'bk-clickable': !isSlideInPanelVisible,\r\n                                'bk-flex-table--focused': slideInPanelPlantingId === planting.Id}\"\r\n                            (contextmenu)='togglePlantingMenu(planting, $event)'\r\n                            (click)=\"openSlideInPanel(planting)\">\r\n                            {{planting.WetDate | convertDotNetDate}}\r\n                        </div>\r\n                        <div class='bk-flex-table__cell bk-flex-table__col5'\r\n                            [ngClass]=\"{ 'bk-clickable': !isSlideInPanelVisible,\r\n                                'bk-flex-table--focused': slideInPanelPlantingId === planting.Id}\"\r\n                            (contextmenu)='togglePlantingMenu(planting, $event)'\r\n                            (click)=\"openSlideInPanel(planting)\">\r\n                             {{planting.HarvestDate | convertDotNetDate}}\r\n                        </div>\r\n                        <div class='bk-flex-table__cell bk-flex-table__col6'\r\n                            [ngClass]=\"{ 'bk-clickable': !isSlideInPanelVisible,\r\n                                'bk-flex-table--focused': slideInPanelPlantingId === planting.Id}\"\r\n                            (contextmenu)='togglePlantingMenu(planting, $event)'\r\n                            (click)=\"openSlideInPanel(planting)\">\r\n                            {{planting.RanchLot.Name}}\r\n                        </div>\r\n                        <div class=\"bk-flex-table__cell bk-flex-table__col7\">\r\n                            \r\n                        </div>\r\n                    </ng-container>\r\n                </div>\r\n            </ng-container>\r\n\r\n            <ng-container *ngIf=\"plantingSelected && !isMobile &&\r\n                permissions && permissions.UserCanEditPlanting\">\r\n\r\n                <ul class=\"bk-drop-menu bk-context-menu bk-planting__menu\">\r\n            \r\n                    <li class=\"bk-drop-menu__item\"\r\n                        (click)=\"openPlantingModal(plantingSelected.Id)\">\r\n            \r\n                        <i class=\"fa fa-gear\"></i>\r\n                        <label>{{'Planting Settings' | translate }}</label>\r\n                    </li>\r\n            \r\n                    <li class=\"bk-drop-menu__item\"\r\n                        (click)=\"openPlantingRecalculateModal(plantingSelected.Id)\">\r\n                        <i class=\"fa fa-calculator\"></i>\r\n                        <label>{{'Recalculate Planting' | translate }}</label>\r\n                    </li>\r\n            \r\n                    <li class=\"bk-drop-menu__item\"\r\n                        (click)=\"openPlantingModal(plantingSelected.Id, true)\">\r\n                        <i class=\"far fa-copy\"></i>\r\n                        <label>{{'Duplicate Planting' | translate }}</label>\r\n                    </li>\r\n            \r\n                    <li class=\"bk-drop-menu__item\"\r\n                        (click)=\"openRainfallDataModal(plantingSelected)\">\r\n                        <i class=\"fas fa-cloud-rain\"></i>\r\n                        <label>{{'Rainfall Data' | translate }}</label>\r\n                    </li>\r\n\r\n                    <li class=\"bk-drop-menu__item\"\r\n                        (click)=\"openETChart(plantingSelected)\">\r\n                        <i class=\"fas fa-chart-bar\"></i>\r\n                        <label>{{'ET Chart' | translate}}</label>\r\n                    </li>\r\n\r\n                    <li class=\"bk-drop-menu__item\"\r\n                        (click)=\"openCanopyDialog(plantingSelected)\">\r\n                        <i class=\"fas fa-chart-area\"></i>\r\n                        <label>{{'Canopy Curve' | translate}}</label>\r\n                    </li>\r\n\r\n                    <li class=\"bk-drop-menu__item\"\r\n                        (click)=\"openAppliedWaterChart(plantingSelected)\">\r\n                        <i class=\"fas fa-chart-bar\"></i>\r\n                        <label>{{'Applied Water Chart' | translate}}</label>\r\n                    </li>\r\n\r\n                    <li *ngIf=\"plantingSelected.CommodityTypeId !== COMMODITY_TYPES.ALFALFA\"\r\n                        class=\"bk-drop-menu__item\"\r\n                        (click)=\"openAppliedFertilizerChart(plantingSelected)\">\r\n                        <i class=\"fas fa-chart-bar\"></i>\r\n                        <label>{{'Applied Fertilizer' | translate}}</label>\r\n                    </li>\r\n\r\n                    <li class=\"bk-drop-menu__item\"\r\n                        (click)=\"openAvailableWaterChart(plantingSelected)\">\r\n                        <i class=\"fas fa-chart-bar\"></i>\r\n                        <label>{{'Soil Water Balance' | translate}}</label>\r\n                    </li>\r\n\r\n                    <li class=\"bk-drop-menu__item\"\r\n                        (click)=\"openFlowmeterDataModal(plantingSelected)\">\r\n                        <i class=\"fas fa-water\"></i>\r\n                        <label>{{'Flowmeter Data' | translate }}</label>\r\n                    </li>\r\n            \r\n                    <li class=\"bk-drop-menu__item\"\r\n                        (click)=\"openSoilMoistureDialog(eSoilMoistureViews.GRAPH, plantingSelected)\">\r\n                        <i class=\"fas fa-weight\"></i>\r\n                        <label>{{'Soil Sensors' | translate }}</label>\r\n                    </li>\r\n            \r\n                    <li class=\"bk-drop-menu__item\"\r\n                        *ngIf=\"!plantingSelected.Favorite\"\r\n                        (click)=\"addPlantingToFavorites(plantingSelected.Id)\">\r\n                        <i class=\"fa fa-star\"></i>\r\n                        <label>{{ 'Favorite Planting' | translate }}</label>\r\n                    </li>\r\n            \r\n                    <li *ngIf=\"plantingSelected.Favorite\"\r\n                        class=\"bk-drop-menu__item\"\r\n                        (click)=\"removePlantingFromFavorites(plantingSelected.Id)\">\r\n                        <i class=\"fa fa-star\"></i>\r\n                        <label>{{ 'Unfavorite Planting' | translate }}</label>\r\n                    </li>\r\n                </ul>\r\n            </ng-container>\r\n\r\n            <!-- list of plantings MOBILE -->\r\n\r\n            <ng-container *ngIf=\"isArray(plantings) && isMobile\">\r\n                <ng-container *ngFor=\"let planting of plantings\">\r\n                    <div *ngIf=\"!(!planting.Favorite && type == 'FavoritePlantings')\"\r\n                        class=\"bk-planting\"\r\n                        [class.bk-planting__fixed]=\"!planting.collapsed\">\r\n\r\n                        <div class=\"bk-ranch-tile__top\"\r\n                            (click)=\"expandPlanting(planting,$event)\">\r\n\r\n                            <i *ngIf=\"!planting.collapsed\"\r\n                                class=\"bk-planting__collapse-icon fa fa-times\"\r\n                                (click)=\"collapsePlanting(planting,$event)\">\r\n                            </i>\r\n\r\n                            <div class=\"bk-planting__header--center\">\r\n                                <i *ngIf=\"!planting.Favorite\"\r\n                                    class=\"bk-ranch__favorite fa fa-star-o\"\r\n                                    (click)=\"addPlantingToFavorites(planting.Id)\">\r\n                                </i>\r\n\r\n                                <i *ngIf=\"planting.Favorite\"\r\n                                    class=\"bk-ranch__favorite fa fa-star\"\r\n                                    (click)=\"removePlantingFromFavorites(planting.Id)\">\r\n                                </i>\r\n\r\n                                <div class=\"bk-ranch__header-text bk-planting__header-text\">\r\n                                    <div class=\"bk-planting__name\">\r\n                                        {{planting.Name}}\r\n                                    </div>\r\n                                    <div class=\"bk-planting__lot\">\r\n                                        {{planting.RanchLot.Name}}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <ng-container *ngIf=\"permissions && permissions.UserCanEditPlanting\">\r\n\r\n                                <i class=\"bk-planting__edit-icon fa fa-ellipsis-v\"\r\n                                    (click)=\"togglePlantingMenu(planting)\">\r\n                                </i>\r\n\r\n                                <ul *ngIf=\"planting.displayMenu\"\r\n                                    class=\"bk-drop-menu bk-planting__menu\">\r\n\r\n                                    <li class=\"bk-drop-menu__item\"\r\n                                        (click)=\"openPlantingModal(planting.Id)\">\r\n                                        {{'Planting Settings' | translate }}\r\n                                    </li>\r\n\r\n                                    <li class=\"bk-drop-menu__item\"\r\n                                        (click)=\"openPlantingRecalculateModal(planting.Id)\">\r\n                                        {{'Recalculate Planting' | translate }}\r\n                                    </li>\r\n\r\n                                    <li class=\"bk-drop-menu__item\"\r\n                                        (click)=\"openPlantingModal(planting.Id, true)\">\r\n                                        {{'Duplicate Planting' | translate }}\r\n                                    </li>\r\n\r\n                                    <li class=\"bk-drop-menu__item\"\r\n                                        (click)=\"openFlowmeterDataModal(planting)\">\r\n                                        {{'Flowmeter Data' | translate }}\r\n                                    </li>\r\n\r\n                                    <li class=\"bk-drop-menu__item\"\r\n                                        (click)=\"openRainfallDataModal(planting)\">\r\n                                        {{'Rainfall Data' | translate }}\r\n                                    </li>\r\n\r\n                                    <li class=\"bk-drop-menu__item\"\r\n                                        (click)=\"openETChart(planting)\">\r\n                                        <label>{{'ET Chart' | translate}}</label>\r\n                                    </li>\r\n\r\n                                    <li class=\"bk-drop-menu__item\"\r\n                                        (click)=\"openSoilMoistureDialog(eSoilMoistureViews.GRAPH,  planting)\">\r\n                                        {{'Soil Sensors' | translate }}\r\n                                    </li>\r\n\r\n                                    <li\r\n                                        class=\"bk-drop-menu__item\"\r\n                                        (click)=\"openCanopyDialog(planting)\">\r\n                                        {{'Canopy Curve' | translate}}\r\n                                    </li>\r\n                                </ul>\r\n                            </ng-container>\r\n                        </div>\r\n\r\n                        <div class=\"bk-planting__header bk-clearfix\"\r\n                            (click)=\"expandPlanting(planting,$event)\">\r\n                            <div class=\"bk-planting__header--content\"\r\n                                [class.bk-planting__header--content-no-border]=\"planting.collapsed\">\r\n\r\n                                <div *ngIf=\"planting.CropType\"\r\n                                    class=\"bk-planting__description\"\r\n                                    [class.bk-planting__description--collapsed]=\"planting.collapsed\">\r\n                                    {{planting.CropType.Name}}\r\n                                </div>\r\n\r\n                                <div class=\"bk-planting__dates\">\r\n                                    {{planting.WetDate | convertDotNetDate}} - {{planting.HarvestDate | convertDotNetDate}}\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div class=\"bk-planting__content--responsive\"\r\n                            [class.bk-planting__content--hidden]=\"planting.collapsed\">\r\n\r\n                            <div class=\"bk-planting__events-details--container\">\r\n\r\n                                <div *ngIf=\"planting.Events\"\r\n                                    class=\"bk-planting__events-snapshot--container\">\r\n\r\n                                    <events-snapshot [plantingId]=\"planting.Id\"\r\n                                        [wetDate]=\"planting.WetDate\"\r\n                                        [commodityTypeId]=\"planting.CommodityTypeId\"\r\n                                        [eventGroups]=\"planting.Events\"\r\n                                        [maturities]=\"maturities\">\r\n                                    </events-snapshot>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"bk-planting__footer bk-clearfix\">\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </ng-container>\r\n            </ng-container>\r\n        </ng-container>\r\n\r\n        <!-- Missing ranch settings -->\r\n        <div *ngIf=\"!loading && ranchValidationStates != null && !ranchValidationStates.Valid && permissions &&\r\n            permissions.UserCanEditRanch\"\r\n            class=\"bk-empty-state\">\r\n\r\n            <h3>\r\n                {{'Missing Ranch Settings' | translate }}\r\n            </h3>\r\n\r\n            <div class=\"bk-empty-state__text\">\r\n                <div class=\"bk-missing-values__list\">\r\n                    <div *ngFor=\"let value of ranchValidationStates.MissingValues\">\r\n                        {{value | translate}}\r\n                    </div>\r\n                </div>\r\n                <div class=\"bk-missing-values__prompt\">\r\n                    {{'Please go to the' | translate}} \r\n                    <a href=\"\" (click)=\"navigateToRanchSettings($event)\">\r\n                        {{ 'Ranch Settings' | translate }}\r\n                    </a> \r\n                    {{'to complete the Ranch setup' | translate}}\r\n                    </div>\r\n            </div>\r\n        </div>\r\n        <div *ngIf=\"showLoader()\"\r\n            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</div>","\r\nimport {fromEvent as observableFromEvent,  of, Subject } from 'rxjs';\r\nimport {debounceTime, takeUntil} from 'rxjs/operators';\r\nimport { Component, OnInit, Input, ViewChild, HostListener, OnDestroy } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\nimport * as jQuery from 'jquery';\r\nimport {\r\n\ttrigger,\r\n\tstyle,\r\n\tanimate,\r\n\ttransition,\r\n} from '@angular/animations';\r\n\r\nimport { BOKA, ISortable } from '../../classes/array';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { PlantingService } from '../planting-settings/service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { PlantingSearchComponent } from '../plantings/search/main';\r\n\r\nimport { CanopyDialog } from '../canopy-curve/canopy-dialog';\r\nimport { SoilMoistureDialog } from '../soil-moisture/soil-moisture-dialog';\r\nimport { PlantingDialog } from '../planting-settings/planting-dialog';\r\nimport { CutEventService } from '../cut-event/service';\r\nimport { CropType } from '../../models/crop-type/cropType';\r\n\r\nimport { ICurrentRanchLots } from '../../interfaces/interfaces';\r\nimport { IMaturity } from '../../models/maturity/interfaces';\r\nimport { IPlanting } from '../planting-settings/interfaces';\r\nimport { ISoilMoistureDialogParameters } from '../soil-moisture/soilMoisture.interface';\r\n\r\nimport {\r\n\tPlantingTabs, PlantingTabValues, EventsView, eSoilMoistureViews,\r\n\teCommodityTypes\r\n} from '../../interfaces/constants'\r\n\r\nimport { CommodityService } from '../../models/commodity-type/service';\r\nimport { ISelectOptions } from '../../interfaces/abstract';\r\nimport { ObjectUtility } from '../../classes/objectUtility';\r\nimport { PersistentDatabase } from '../../services/persistent-database';\r\nimport { IRanchLotJSONModel, IRanchPermissions, IRanchSettingsValidationStates } from '../ranch-settings/interfaces';\r\nimport { ICommodityType } from '../../models/commodity-type/interfaces';\r\nimport { ETChartComponent } from '../et-chart/et-chart';\r\nimport { LotSubscriptionService } from '../../services/subscriptions/lot.subscription';\r\nimport { FlowmeterChartDialog } from '../flowmeter-graph/main';\r\nimport { chartTypes } from '../flowmeter-graph/flowMeter';\r\nimport { AppliedWaterChartComponent } from '../applied-water-chart/applied-water-chart';\r\nimport { AvailableWaterChartComponent } from '../available-water-chart/available-water-chart';\r\nimport { FlowmeterSettingsComponent } from '../flowmeter-graph/flowmeter-settings';\r\nimport { AppliedFertilizerChartComponent } from '../applied-fertilizer-chart/applied-fertilizer-chart';\r\nimport { RainfallDataComponent } from '../rainfall-chart/main';\r\nimport { PlantingRecalculateModalComponent, RecalculateModelConfig }\r\n\tfrom '../planting-recalculate-modal/planting-recalculate-modal.component';\r\nimport { AllEventsModalComponent, AllEventsModalSettings } from '../events/main';\r\nimport { ArgumentNullError } from '../../classes/Errors/argumentNullError';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'plantings',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: ['main.scss'],\r\n\tanimations: [\r\n\t\ttrigger('slideInOut', [\r\n\t\t\ttransition(':enter', [\r\n\t\t\t\tstyle({ transform: 'translateX(200%)' }),\r\n\t\t\t\tanimate('200ms ease-in', style({ transform: 'translateX(0%)' }))\r\n\t\t\t]),\r\n\t\t\ttransition(':leave', [\r\n\t\t\t\tanimate('200ms ease-in', style({ transform: 'translateX(200%)' }))\r\n\t\t\t])\r\n\t\t])\r\n\t]\r\n})\r\n\r\nexport class PlantingsComponent implements OnInit, OnDestroy {\r\n\t@ViewChild(PlantingSearchComponent, { static: true }) private plantingSearchComponent: PlantingSearchComponent;\r\n\r\n\t@Input()\r\n\tpublic ranchId: string;\r\n\r\n\t@Input()\r\n\tpublic type: PlantingTabs; // PlantingTabs\r\n\r\n\tpublic EventsViewEnum = EventsView;\r\n\tpublic cropTypeClass = CropType;\r\n\tpublic COMMODITY_TYPES = eCommodityTypes;\r\n\tpublic plantingTabValues = PlantingTabValues; // make this visible to the template\r\n\r\n\tpublic originalPlantings: IPlanting[] = new Array();\r\n\tpublic plantings: IPlanting[] = new Array();\r\n\r\n\t/**\r\n\t * Planting list used for managing the commodity type and lot filters\r\n\t */\r\n\tpublic plantingsForFilter: IPlanting[];\r\n\r\n\tpublic plantingSelected: IPlanting; // planting selected in context menu\r\n\tpublic permissions: IRanchPermissions;\r\n\tpublic lots: IRanchLotJSONModel[] = new Array();\r\n\tpublic commodityTypes: ICommodityType[] = new Array();\r\n\tpublic searchIsVisible = false;\r\n\tpublic loading = true;\r\n\tpublic isMobile = false;\r\n\tpublic isTableScrolling: boolean = null;\r\n\tpublic noPlantings = false; // used in template\r\n\tpublic noFavorites = true; // used in template\r\n\tpublic isSlideInPanelVisible = false;\r\n\tpublic slideInPanelPlantingId: number = null;\r\n\r\n\t/**\r\n\t * true if there are filters applied to search results. false if no filters are active\r\n\t */\r\n\tpublic resultsAreFiltered = false;\r\n\r\n\tpublic searchValue = '';\r\n\tpublic ranchValidationStates: IRanchSettingsValidationStates;\r\n\tpublic eSoilMoistureViews = eSoilMoistureViews;\r\n\tpublic maturities: IMaturity[];\r\n\tpublic yearFilter: number;\r\n\r\n\tpublic yearOptions: ISelectOptions[] = [\r\n\t\t{ key: 0, value: 'This Year' },\r\n\t\t{ key: 1, value: 'Next Year' },\r\n\t\t{ key: -1, value: 'Last Year' },\r\n\t\t{ key: -2, value: '2 Years Ago' },\r\n\t\t{ key: -3, value: '3 Years Ago' },\r\n\t\t{ key: -4, value: 'Older than 3 Years' },\r\n\t];\r\n\r\n\tprivate _lotsOriginal: ICurrentRanchLots = null; // original lots data\r\n\tprivate _commodityTypeMap: ICommodityType[] = new Array(); // used for faster access\r\n\tprivate _loaded = false;\r\n\tprivate _shouldResetScrollposition = false;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tprivate _cachedMouseEvent: MouseEvent = null;\r\n\tprivate _updating = false;\r\n\tprivate _currentLotId: number;\r\n\tprivate _currentCommodityTypeId: number;\r\n\r\n\tconstructor(\r\n\t\tprivate _lotSubscriptionService: LotSubscriptionService,\r\n\t\tprivate _persistentDatabase: PersistentDatabase,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _commodityService: CommodityService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _plantingService: PlantingService,\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _cutEventService: CutEventService) {\r\n\r\n\t\tthis.commodityTypes = new Array(); // don't share this\r\n\t\tthis._commodityTypeMap = new Array(); // don't share this\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tlet __this = this;\r\n\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.ranchValidationStates = null;\r\n\t\tthis._updateService.setCurrentPage(null);\r\n\r\n\t\tif (!this.ranchId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._updateService.ranchIdSubscription$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(id => {\r\n\r\n\t\t\tthis.ranchId = id;\r\n\t\t})\r\n\r\n\t\tif (this.type === PlantingTabValues.active) {\r\n\t\t\tthis._cutEventService.listMaturities() // tucked into active plantings so maturity isn't loaded 3 times\r\n\t\t\t\t// TODO: Move this out of this call, since we don't display maturities in this view\r\n\t\t\t\t.then(maturities => this.maturities = maturities);\r\n\r\n\t\t\tthis._getActivePlantings().then(() => {\r\n\t\t\t\tthis._updateLots(this._lotsOriginal);\r\n\t\t\t\tthis._loaded = true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._adjustForMobile();\r\n\t\tthis._getLots();\r\n\r\n\t\tobservableFromEvent(window, 'resize').pipe(debounceTime(500))\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\r\n\t\t\tthis._adjustForMobile();\r\n\t\t})\r\n\r\n\t\tthis._updateService.plantingsTabClicked$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe((data: { tabName: string }): void => {\r\n\r\n\t\t\tif (__this._loaded === true) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tswitch (data.tabName) {\r\n\t\t\t\tcase 'Favorite Plantings':\r\n\t\t\t\t\tif (__this.type !== PlantingTabValues.favorites) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t__this._getFavoritePlantingsData().then(response => {\r\n\t\t\t\t\t\tthis._updateLots(this._lotsOriginal);\r\n\t\t\t\t\t\t__this._doOnDataLoad();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'All Plantings':\r\n\t\t\t\t\tif (__this.type !== PlantingTabValues.all) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t__this._getAllPlantingsData().then(response => {\r\n\t\t\t\t\t\tthis._updateLots(this._lotsOriginal);\r\n\t\t\t\t\t\t__this._doOnDataLoad();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.plantingSearchComponent.plantingSearchString$.pipe(takeUntil(this._subscriptions$)).subscribe(data => {\r\n\t\t\tthis.searchValue = data;\r\n\t\t\tthis._filterResults(this._currentCommodityTypeId, this._currentLotId, this.yearFilter, this.searchValue);\r\n\t\t\tthis.resultsAreFiltered = this._isFilterAppliedToSearchResults();\r\n\t\t\tthis._disableEmptyLots();\r\n\t\t\tthis._disableEmptyCommodityTypes();\r\n\t\t})\r\n\r\n\t\tthis._updateService.PlantingsUpdated$.pipe(takeUntil(this._subscriptions$)).subscribe((data: {ranchId: string, time: Date}) => {\r\n\r\n\t\t\tthis._updating = true;\r\n\r\n\t\t\tswitch (this.type) {\r\n\t\t\t\tcase PlantingTabValues.favorites:\r\n\t\t\t\t\tthis.plantings = ObjectUtility.copyArray(this._ranchService.plantings.favorites); // force view reload\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase PlantingTabValues.active:\r\n\t\t\t\t\tthis.plantings = ObjectUtility.copyArray(this._ranchService.plantings.active);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase PlantingTabValues.all:\r\n\t\t\t\t\tthis.plantings = ObjectUtility.copyArray(this._ranchService.plantings.all);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tthis.originalPlantings = this.plantings;\r\n\r\n\t\t\tif (data.ranchId === this.ranchId) {\r\n\r\n\t\t\t\tthis._setAvailableLots();\r\n\t\t\t\tthis._setAvailableCommodityTypes();\r\n\r\n\t\t\t\tif (this._currentCommodityTypeId) {\r\n\t\t\t\t\t// when a user updates a planting, rerun the filters and refresh the views,\r\n\t\t\t\t\t// in case lot or crop type changed and the filters are no longer valid\r\n\t\t\t\t\tthis.onToggleCommodityType(this._currentCommodityTypeId);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this._currentLotId) {\r\n\t\t\t\t\tthis.onToggleLot(this._currentLotId);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.noPlantings = this.plantings && this.plantings.length === 0 ? true : false;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis._shouldResetScrollposition = true;\r\n\t\t});\r\n\r\n\t\tthis._lotSubscriptionService.currentRanchLots$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe((data: ICurrentRanchLots) => {\r\n\r\n\t\t\t// gets updated when user updates a lot\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\tif (data.lots && data.lots.length > 0) {\r\n\t\t\t\tfor (let lot of data.lots) {\r\n\t\t\t\t\tlot.Selected = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis._lotsOriginal = data;\r\n\r\n\t\t\tthis._updateLots(data);\r\n\t\t});\r\n\r\n\t\tthis._updateService.displayPlantingsSearch$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.searchIsVisible = !this.searchIsVisible;\r\n\t\t});\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._updateService.plantingFavoritesUpdated$.pipe(takeUntil(this._subscriptions$)).\r\n\t\tsubscribe((data: {plantingId: number, favoriteId: number}) => {\r\n\t\t\tif (this.type === PlantingTabValues.favorites) {\r\n\r\n\t\t\t\tthis._getFavoritePlantingsData().then(res => {\r\n\t\t\t\t\tthis._onDataRetrieved();\r\n\t\t\t\t\tthis._checkFavoriteCount();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\tif (this.plantings && this.plantings.length > 0) {\r\n\t\t\t\tfor (let planting of this.plantings) {\r\n\t\t\t\t\tif (data.plantingId === planting.Id) {\r\n\t\t\t\t\t\tif (data.favoriteId) {\r\n\t\t\t\t\t\t\tplanting.Favorite = true;\r\n\t\t\t\t\t\t\tplanting.FavoriteId = data.favoriteId;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tplanting.Favorite = false\r\n\t\t\t\t\t\t\tplanting.FavoriteId = null;\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\r\n\t\t\tthis._checkFavoriteCount();\r\n\t\t});\r\n\r\n\t\tthis._updateService.missingRanchsettings$.pipe(takeUntil(this._subscriptions$)).subscribe(settings => {\r\n\t\t\tthis.ranchValidationStates = settings;\r\n\t\t});\r\n\r\n\t\tthis._updateService.SoilMoistureFileUpdated$.pipe(takeUntil(this._subscriptions$)).subscribe(updatedSoilMoistureFile => {\r\n\t\t\tif (!updatedSoilMoistureFile) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.plantings && this.plantings.length > 0) {\r\n\t\t\t\tfor (let planting of this.plantings) {\r\n\t\t\t\t\tif (planting.Id === updatedSoilMoistureFile.plantingId && updatedSoilMoistureFile.fileName) {\r\n\t\t\t\t\t\tplanting.HasSoilMoistureFileName = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// also updated original array because of filtering\r\n\t\t\tif (this.originalPlantings && this.originalPlantings.length > 0) {\r\n\t\t\t\tfor (let planting of this.originalPlantings) {\r\n\t\t\t\t\tif (planting.Id === updatedSoilMoistureFile.plantingId && updatedSoilMoistureFile.fileName) {\r\n\t\t\t\t\t\tplanting.HasSoilMoistureFileName = true;\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.yearFilter = null;\r\n\t}\r\n\r\n\tngAfterViewChecked() {\r\n\t\tthis._checkScrollArea();\r\n\r\n\t\tif (this._cachedMouseEvent !== null) {\r\n\t\t\tthis._adjustMenuPosition(this._cachedMouseEvent);\r\n\t\t\tthis._cachedMouseEvent = null; // prevent loops\r\n\t\t}\r\n\r\n\t\tif (this._shouldResetScrollposition) {\r\n\t\t\tthis._persistentDatabase.resetPlantingsViewScrollPosition();\r\n\t\t\tthis._shouldResetScrollposition = 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 _updateLots(data: ICurrentRanchLots): void {\r\n\t\tif (!data) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.plantings && this.plantings.length > 0 && data.lots &&\r\n\t\t\tdata.lots.length > 0) {\r\n\r\n\t\t\tthis.lots = this._filterLotsByPlantings(data.lots);\r\n\t\t}\r\n\r\n\t\tif (data.lot && data.lotId && this.type === 'ActivePlantings') { // block execution for Favorites and All to prevent over processing\r\n\t\t\tdata.lot.Id = data.lotId;\r\n\t\t\tthis._ranchService.plantings.updateLotNamesInPlantings(data.lot);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _adjustForMobile() {\r\n\t\tlet windowWidth = jQuery(window).width();\r\n\t\tif (windowWidth <= 540) {\r\n\t\t\tthis.isMobile = true;\r\n\t\t} else {\r\n\t\t\tthis.isMobile = false;\r\n\t\t}\r\n\r\n\t\tthis._checkScrollArea();\r\n\t}\r\n\r\n\t/**\r\n     * Check if plantings table has scroll\r\n     */\r\n\tprivate _checkScrollArea(): void {\r\n\t\tlet el: Element;\r\n\t\tlet scrollHeight, clientHeight: number;\r\n\t\tlet index: number;\r\n\r\n\t\tel = this._persistentDatabase.getScrollArea();\r\n\r\n\t\t// there are multiple tables in a single view file - active, favorite, and all\r\n\t\t// selected view is visisble; others are hidden\r\n\r\n\t\tif (!el) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tscrollHeight = el.scrollHeight;\r\n\t\tclientHeight = el.clientHeight;\r\n\r\n\t\tif (scrollHeight > clientHeight) {\r\n\t\t\tthis.isTableScrolling = true;\r\n\t\t} else {\r\n\t\t\tthis.isTableScrolling = false;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _doOnDataLoad() {\r\n\t\tthis._loaded = true;\r\n\r\n\t\tif (this._currentCommodityTypeId) {\r\n\t\t\tthis.onToggleCommodityType(this._currentCommodityTypeId);\r\n\t\t}\r\n\r\n\t\tif (this._currentLotId) {\r\n\t\t\tthis.onToggleLot(this._currentLotId);\r\n\t\t}\r\n\r\n\t\tthis._checkFavoriteCount();\r\n\t}\r\n\r\n\tprivate _setAvailableLots() {\r\n\t\tfor (let lot of this._ranchService.currentRanchLots) {\r\n\t\t\tlot.Selected = false;\r\n\t\t}\r\n\r\n\t\tif (!this._ranchService || !this._ranchService.plantings) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tswitch (this.type) {\r\n\t\t\tcase PlantingTabValues.active:\r\n\t\t\t\tthis.lots = this._filterLotsByPlantings(this._ranchService.currentRanchLots, this._ranchService.plantings.active);\r\n\t\t\t\tbreak;\r\n\t\t\tcase PlantingTabValues.all:\r\n\t\t\t\tthis.lots = this._filterLotsByPlantings(this._ranchService.currentRanchLots, this._ranchService.plantings.all);\r\n\t\t\t\tbreak;\r\n\t\t\tcase PlantingTabValues.favorites:\r\n\t\t\t\tthis.lots = this._filterLotsByPlantings(this._ranchService.currentRanchLots, this._ranchService.plantings.favorites);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _setAvailableCommodityTypes() {\r\n\t\tfor (let commodityType of this._commodityService.commodityTypes) {\r\n\t\t\tcommodityType.Selected = false;\r\n\t\t}\r\n\r\n\t\tif (!this._ranchService || !this._ranchService.plantings) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._createCommodityTypesMap(this._commodityService.commodityTypes);\r\n\r\n\t\tswitch (this.type) {\r\n\t\t\tcase PlantingTabValues.active:\r\n\t\t\t\tthis.commodityTypes = this._filterActiveCommodityTypes(this._ranchService.plantings.active);\r\n\t\t\t\tbreak;\r\n\t\t\tcase PlantingTabValues.all:\r\n\t\t\t\tthis.commodityTypes = this._filterActiveCommodityTypes(this._ranchService.plantings.all);\r\n\t\t\t\tbreak;\r\n\t\t\tcase PlantingTabValues.favorites:\r\n\t\t\t\tthis.commodityTypes = this._filterActiveCommodityTypes(this._ranchService.plantings.favorites);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic handleClickOutsidePlantingSearch(e: MouseEvent): void {\r\n\t\tlet container: Element = document.getElementsByClassName('bk-plantings__left')[0];\r\n\t\tlet clickedElement: Element;\r\n\r\n\t\tif (!this.searchIsVisible || !e || !e.target) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tclickedElement = <Element>e.target;\r\n\r\n\t\tif (!clickedElement) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (jQuery.contains(container, clickedElement) || clickedElement.className ===\r\n\t\t\t'bk-ranch-search__icon bk-ranch-search__icon--nav fa fa-search' ||\r\n\t\t\tclickedElement.className === 'bk-ranches__left bk-plantings__left') {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.searchIsVisible = false;\r\n\t}\r\n\r\n\t@HostListener('document:click', ['$event'])\r\n\t// @HostListener('document:touchstart', ['$event'])\r\n\t// disabled touch start due to error on mobile where touchstart triggered before openPlantingModel,\r\n\t// in which case planting setting never opened.\r\n\r\n\tprivate handleClick(e: MouseEvent): void {\r\n\t\tlet clicked: Element;\r\n\r\n\t\tif (e && e.target) {\r\n\t\t\tclicked = <Element>e.target;\r\n\t\t}\r\n\r\n\t\tif (!clicked) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (clicked.classList.contains('bk-planting__edit-icon')\r\n\t\t\t&& clicked.classList.contains('fa-ellipsis-v')) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// backup in case srcElement is not supported\r\n\t\tif ((clicked.parentElement && (clicked.parentElement.className ===\r\n\t\t\t\t'bk-drop-menu bk-context-menu bk-planting__menu' ||\r\n\t\t\t\tclicked.parentElement.className === 'bk-drop-menu bk-context-menu bk-planting__menu ng-star-inserted'))) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._clearMenus();\r\n\t}\r\n\r\n\tprivate _clearMenus(): void {\r\n\t\tthis.plantingSelected = null;\r\n\r\n\t\tif (!this.plantings) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let planting of this.plantings) {\r\n\t\t\tplanting.displayMenu = false;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tpublic openCanopyDialog(planting: IPlanting): void {\r\n\r\n\t\tlet commodityType: ICommodityType;\r\n\r\n\t\tif (!this._commodityService || !this._commodityService.commodityTypes ||\r\n\t\t\tthis._commodityService.commodityTypes.length === 0) {\r\n\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\tthis._hidePlantingMenu();\r\n\t\tthis._persistentDatabase.getPlantingsViewScrollPosition();\r\n\r\n\t\tcommodityType = this._commodityService.commodityTypes.filter(x => x.Id === planting.CommodityTypeId)[0];\r\n\r\n\t\tthis._dialog.open(CanopyDialog, {\r\n\t\t\twidth: '690px',\r\n\t\t\tdata: {\r\n\t\t\t\tplantingId: planting.Id,\r\n\t\t\t\tplantingName: planting.Name,\r\n\t\t\t\tcommodityTypeId: planting.CommodityTypeId,\r\n\t\t\t\tcommodityTypeCalculator: commodityType.CommodityTypeCalculator\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openSoilMoistureDialog(view: eSoilMoistureViews, planting: IPlanting): void {\r\n\t\tthis._hidePlantingMenu();\r\n\r\n\t\tlet params: ISoilMoistureDialogParameters = {\r\n\t\t\tview: view,\r\n\t\t\tplantingName: planting.Name,\r\n\t\t\tplantingId: planting.Id,\r\n\t\t\thasSoilMoistureFileName: planting.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\t/**\r\n\t * A method called in mobile view\r\n\t * @param planting\r\n\t * @param e\r\n\t * @returns\r\n\t */\r\n\tpublic expandPlanting(planting: IPlanting, e: MouseEvent): void {\r\n\t\tlet clicked: JQuery;\r\n\t\tlet windowWidth: number;\r\n\r\n\t\twindowWidth = jQuery(window).width();\r\n\r\n\t\tif (windowWidth > 540) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!planting || !planting.collapsed) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tclicked = jQuery(e.target);\r\n\r\n\t\tif (clicked.hasClass('bk-ranch__favorite fa fa-star-o') ||\r\n\t\t\tclicked.hasClass('bk-ranch__favorite fa fa-star')\r\n\t\t\t|| clicked.hasClass('bk-planting__edit-icon fa fa-ellipsis-v') ||\r\n\t\t\tclicked.hasClass('bk-drop-menu__item') || clicked.hasClass('bk-planting__collapse-icon')) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._plantingService.getSlideInPanel(planting.Id).then((data) => {\r\n\t\t\tthis._ranchService.plantings.edit(data);\r\n\t\t\tplanting.Events = data.Events;\r\n\r\n\t\t\tjQuery('.ranch-nav').addClass('bk-nav--hidden');\r\n\t\t\tjQuery('.bk-tab__container').addClass('bk-tab__container--full');\r\n\t\t\tjQuery('.bk-header__name-language-menu-icon').hide();\r\n\t\t\tclicked.closest('.planting-list-container').addClass('bk-plantings__right--fixed ');\r\n\t\t\tjQuery('.global-header').addClass('bk-header--hidden');\r\n\t\t\tjQuery('.bk-ranch-settings__container').addClass('bk-ranch-settings__container--planting-expanded');\r\n\r\n\t\t\tplanting.collapsed = false;\r\n\t\t})\r\n\t}\r\n\r\n\tpublic collapsePlanting(planting: IPlanting, e: MouseEvent): void {\r\n\t\tlet clicked: JQuery;\r\n\r\n\t\tclicked = jQuery(e.target);\r\n\r\n\t\tjQuery('.ranch-nav').removeClass('bk-nav--hidden');\r\n\t\tjQuery('.bk-tab__container').removeClass('bk-tab__container--full');\r\n\t\tjQuery('.bk-header__name-language-menu-icon').show();\r\n\t\tclicked.closest('.planting-list-container').removeClass('bk-plantings__right--fixed ');\r\n\t\tjQuery('.global-header').removeClass('bk-header--hidden');\r\n\t\tjQuery('.bk-ranch-settings__container').removeClass('bk-ranch-settings__container--planting-expanded');\r\n\t\tplanting.collapsed = true;\r\n\t}\r\n\r\n\t/***\r\n     * Return false to suppress browser action\r\n     */\r\n\tpublic togglePlantingMenu(planting: IPlanting, $event: MouseEvent): boolean {\r\n\t\tif (this.isSlideInPanelVisible) { // if slide out panel is open, do nothing\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis.plantingSelected = planting;\r\n\r\n\t\tfor (let entry of this.plantings) {\r\n\t\t\tif (entry.Id === planting.Id) {\r\n\t\t\t\tentry.displayMenu = !entry.displayMenu;\r\n\t\t\t} else {\r\n\t\t\t\tentry.displayMenu = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.isMobile === false) {\r\n\t\t\t// check for vertical positioning\r\n\t\t\tthis._cachedMouseEvent = $event; // cache mouse event, let angular life cycle update the view at the right time...\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprivate _adjustMenuPosition($event: MouseEvent): void {\r\n\t\tconst footerHeight = 42;\r\n\t\tconst menuHeight = 245;\r\n\t\tconst bottomPadding = 50;\r\n\t\tconst iconHeight = 14;\r\n\t\tconst filterSectionwidth = 250;\r\n\t\tlet topOffset = 127; // combined height of elements above table content row, not including table header height\r\n\t\tlet top: number; // calculated menu top position\r\n\t\tlet $menu, frame: JQuery;\r\n\t\tlet position: JQueryCoordinates;\r\n\r\n\t\t$menu = jQuery('.bk-context-menu');\r\n\r\n\t\tif ($menu.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttop = $event.clientY - topOffset;\r\n\t\t$menu.css('left', ($event.clientX - filterSectionwidth) + 'px');\r\n\t\t$menu.css('top', top + 'px');\r\n\r\n\t\t// frame = $menu.closest('.bk-plantings__right').find('.bk-flex-table__scroll-area');\r\n\r\n\t\t// detect bottom of scroll area and move the menu above the planting row, if needed\r\n\t\tif (top + topOffset + iconHeight + footerHeight + $menu.height() + bottomPadding > jQuery(window).height()) {\r\n\t\t\tposition = $menu.position();\r\n\t\t\t// $menu.css('top', frame.scrollTop() + position.top - menuHeight - iconHeight - 20 + 'px');\r\n\t\t\t$menu.css('top', position.top - menuHeight - iconHeight - 20 + 'px');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getLots(): void {\r\n\t\tlet currentRanchLots: IRanchLotJSONModel[];\r\n\r\n\t\tif (!this._ranchService) {\r\n\t\t\tthis._updating = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcurrentRanchLots = this._ranchService.currentRanchLots;\r\n\r\n\t\tif (!currentRanchLots || currentRanchLots.length === 0) {\r\n\t\t\tthis._updating = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this._updating) {\r\n\t\t\tfor (let lot of currentRanchLots) {\r\n\t\t\t\tif (!lot.Selected) {\r\n\t\t\t\t\tlot.Selected = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.lots = this._filterLotsByPlantings(currentRanchLots);\r\n\t\tthis._updating = false;\r\n\t}\r\n\r\n\tprivate async getCommodityTypes(): Promise<void> {\r\n\t\tif (!this._commodityService.commodityTypes ||\r\n\t\t\tthis._commodityService.commodityTypes.length === 0) {\r\n\t\t\tawait this._commodityService.list();\r\n\t\t}\r\n\r\n\t\tfor (let commodityType of this._commodityService.commodityTypes) {\r\n\t\t\tif (!commodityType.Selected) {\r\n\t\t\t\tcommodityType.Selected = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._createCommodityTypesMap(this._commodityService.commodityTypes);\r\n\r\n\t\tthis.commodityTypes = this._filterActiveCommodityTypes(this.plantings\t\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Create this.commodityTypeMap, a Commodity Type indexed by Id for easier retrieval\r\n\t *\r\n\t * @param commodityTypes\r\n\t */\r\n\tprivate _createCommodityTypesMap(commodityTypes: ICommodityType[]): void {\r\n\r\n\t\tif (!this._commodityTypeMap) {\r\n\t\t\tthrow new Error('Commodity type map is empty');\r\n\t\t}\r\n\r\n\t\tfor (let commodityType of commodityTypes) { // we don't check for type because if it goes into the loop it should exist\r\n\t\t\tthis._commodityTypeMap[commodityType.Id] = commodityType;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Filter the lots list using plantings that exist\r\n\t * @param lots\r\n\t * @param plantings\r\n\t * @returns\r\n\t */\r\n\tprivate _filterLotsByPlantings(lots: IRanchLotJSONModel[],\r\n\t\tplantings: IPlanting[] = this.plantings): IRanchLotJSONModel[] {\r\n\r\n\t\tlet result: IRanchLotJSONModel[];\r\n\r\n\t\tresult = new Array();\r\n\r\n\t\tif (!lots || lots.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!plantings || plantings.length === 0) {\r\n\t\t\treturn lots;\r\n\t\t}\r\n\r\n\t\tfor (let lot of lots) {\r\n\t\t\tfor (let planting of plantings) {\r\n\t\t\t\tif (!planting.RanchLot) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (lot.Id === planting.RanchLot.Id) {\r\n\t\t\t\t\tresult.push(jQuery.extend(true, {}, lot));\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 result;\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param plantings\r\n\t * @returns an array of commodityTypes\r\n\t */\r\n\tprivate _filterActiveCommodityTypes(plantings: IPlanting[]): ICommodityType[] {\r\n\r\n\t\tlet result: ICommodityType[] = new Array();\r\n\r\n\t\tif (!plantings || plantings.length === 0) {\r\n\t\t\t// plantings may be empty for favorites/all plantings tabs when they're not loaded\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tif (!this._commodityTypeMap) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tfor (let planting of plantings) {\r\n\t\t\tif (this._commodityTypeMap[planting.CommodityTypeId] === undefined) {\r\n\t\t\t\tthrow new Error('CommodityTypeMap undefined for ID ' + planting.CommodityTypeId)\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._commodityTypesContains(result, this._commodityTypeMap[planting.CommodityTypeId].Id)) {\r\n\t\t\t\tresult.push(jQuery.extend(true, {}, this._commodityTypeMap[planting.CommodityTypeId])); // do a deep copy\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult = BOKA.Array.sortByName(result as ISortable[], 'Name') as ICommodityType[];\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _commodityTypesContains(types: ICommodityType[], id: number): boolean {\r\n\t\tfor (let type of types) {\r\n\t\t\tif (type.Id === id) {\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\tprivate _getActivePlantings(setUpdated = true): Promise<void> {\r\n\t\tlet override: boolean;\r\n\r\n\t\tif (!this._updateService || !this._updateService.reload) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tif (!this._ranchService || !this._ranchService.plantings) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\toverride = this._updateService.reload.active;\r\n\t\tthis._updateService.reload.active = false;\r\n\r\n\t\treturn this._ranchService.getActivePlantingsWithFavorites(this.ranchId, override)\r\n\t\t\t.then((data: IPlanting[]) => {\r\n\r\n\t\t\t\tlet plantings: IPlanting[];\r\n\r\n\t\t\t\tif (setUpdated) {\r\n\t\t\t\t\tthis._updateService.setActivePlantingsLoaded(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tplantings = data as IPlanting[];\r\n\r\n\t\t\t\tif (plantings && plantings.length === 0) {\r\n\t\t\t\t\tthis._ranchService.plantings.active = new Array();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tBOKA.Array.sortByName(plantings, 'Name');\r\n\t\t\t\t\tthis._ranchService.plantings.active = plantings;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t\tthis.plantings = plantings;\r\n\t\t\t\tthis.originalPlantings = plantings;\r\n\r\n\t\t\t\tif (!this.plantings || this.plantings.length === 0 || this.plantings.length === undefined) {\r\n\t\t\t\t\tthis.noPlantings = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (override) {\r\n\t\t\t\t\tthis._handlePlantingsData(plantings);\r\n\t\t\t\t\tthis._onDataRetrieved();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.getCommodityTypes(); // call this after we fetch plantings\r\n\r\n\t\t\t\treturn;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _getFavoritePlantingsData(setUpdated = true): Promise<void> {\r\n\r\n\t\tlet override: boolean;\r\n\r\n\t\tif (!this._updateService || !this._updateService.reload) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tif (!this._ranchService || !this._ranchService.plantings) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\toverride = this._updateService.reload.favorites;\r\n\t\tthis._updateService.reload.favorites = false;\r\n\r\n\t\treturn this._ranchService.getFavoritePlantings(this.ranchId, override)\r\n\t\t\t.then(data => {\r\n\t\t\t\tif (setUpdated) {\r\n\t\t\t\t\tthis._updateService.setFavoritePlantingsLoaded(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tBOKA.Array.sortByName(data, 'Name');\r\n\t\t\t\tthis._ranchService.plantings.favorites = data as IPlanting[];\r\n\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t\tthis.plantings = data;\r\n\t\t\t\tthis.getCommodityTypes(); // call this after getting plantings\r\n\t\t\t\tthis.originalPlantings = data;\r\n\r\n\t\t\t\tif (!this.plantings || this.plantings.length === 0 || this.plantings.length === undefined) {\r\n\t\t\t\t\tthis.noPlantings = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (override) {\r\n\t\t\t\t\tthis._handlePlantingsData(data);\r\n\t\t\t\t\tthis._onDataRetrieved();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn;\r\n\t\t\t})\r\n\t}\r\n\r\n\tprivate _getAllPlantingsData(): Promise<void> {\r\n\r\n\t\tlet override: boolean;\r\n\r\n\t\tif (!this._updateService || !this._updateService.reload) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\tif (!this._ranchService || !this._ranchService.plantings) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\r\n\r\n\t\toverride = this._updateService.reload.all;\r\n\t\tthis._updateService.reload.all = false;\r\n\r\n\t\treturn this._ranchService.getAllPlantingsWithFavorites(this.ranchId, override)\r\n\t\t\t.then(data => {\r\n\t\t\t\tBOKA.Array.sortByName(data, 'Name');\r\n\t\t\t\tthis._ranchService.plantings.all = data as IPlanting[];\r\n\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t\tthis.plantings = <IPlanting[]>data;\r\n\t\t\t\tthis.getCommodityTypes(); // call this after we get plantings\r\n\t\t\t\tthis.originalPlantings = <IPlanting[]>data;\r\n\r\n\t\t\t\tif (!this.plantings || this.plantings.length === 0 || this.plantings.length === undefined) {\r\n\t\t\t\t\tthis.noPlantings = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (override) {\r\n\t\t\t\t\tthis._handlePlantingsData(data);\r\n\t\t\t\t\tthis._onDataRetrieved();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate _onDataRetrieved(): void {\r\n\t\tthis._addPlantingAttributes();\r\n\t\tthis._getLots();\r\n\t\tthis.getCommodityTypes();\r\n\r\n\t\tif (this._currentLotId) {\r\n\t\t\tthis.onToggleLot(this._currentLotId);\r\n\t\t}\r\n\r\n\t\tif (this._currentCommodityTypeId) {\r\n\t\t\tthis.onToggleCommodityType(this._currentCommodityTypeId);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _checkIfNoPlantings(data: IPlanting[]): boolean {\r\n\t\treturn !this.isArray(data) || data.length === 0;\r\n\t}\r\n\r\n\tprivate _handlePlantingsData(data: IPlanting[]) {\r\n\r\n\t\tthis.plantings = data;\r\n\t\tthis.originalPlantings = data;\r\n\t\tthis.noPlantings = this._checkIfNoPlantings(data);\r\n\t\tthis._checkFavoriteCount();\r\n\t}\r\n\r\n\tpublic isArray(arr: IPlanting[]): boolean {\r\n\t\tif (!arr) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn arr.constructor === Array;\r\n\t}\r\n\r\n\t/**\r\n     * Need to keep this in here for mobile view\r\n     * @param plantingId\r\n     * @param view\r\n     */\r\n\tpublic openEventsModal(plantingId: number, view: EventsView): void {\r\n\t\tlet planting: IPlanting;\r\n\t\tlet data: AllEventsModalSettings;\r\n\r\n\t\tthis._plantingService.resetEventTableSorting();\r\n\t\tplanting = this.plantings.find(x => x.Id === plantingId);\r\n\r\n\t\tdata = {\r\n\t\t\tplanting: {\r\n\t\t\t\tId: planting.Id,\r\n\t\t\t\tName: planting.Name,\r\n\t\t\t\tLotName: planting.RanchLot.Name,\r\n\t\t\t\tWetDate: planting.WetDate,\r\n\t\t\t\tHarvestDate: planting.HarvestDate,\r\n\t\t\t\tHasFlowMeterFileName: planting.HasFlowMeterFileName,\r\n\t\t\t\tCommodityTypeId: planting.CommodityTypeId,\r\n\t\t\t\tpermissions: this.permissions,\r\n\t\t\t},\r\n\t\t\tview: view\r\n\t\t}\r\n\r\n\t\tthis._dialog.open(AllEventsModalComponent, {\r\n\t\t\t// position: { top: '100px' },\r\n\t\t\tdata: data\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openPlantingModal(id?: number, isDuplicate = false): void {\r\n\t\tlet data: {\r\n\t\t\tid: number,\r\n\t\t\tisDuplicate: Boolean,\r\n\t\t\tpermissions: IRanchPermissions\r\n\t\t};\r\n\r\n\t\tdata = {\r\n\t\t\tid: id ? id : null,\r\n\t\t\tisDuplicate: isDuplicate,\r\n\t\t\tpermissions: this.permissions\r\n\t\t};\r\n\r\n\t\tthis._persistentDatabase.getPlantingsViewScrollPosition();\r\n\t\tthis._hidePlantingMenu();\r\n\r\n\t\tthis._dialog.open(PlantingDialog, {\r\n\t\t\tdisableClose: true,\r\n\t\t\twidth: id ? null : '700px',\r\n\t\t\tdata: data,\r\n\t\t\tmaxWidth: 'unset'\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openSlideInPanel(planting: IPlanting): void {\r\n\t\tthis.isSlideInPanelVisible = true;\r\n\t\tthis.slideInPanelPlantingId = planting.Id;\r\n\t\tplanting.IsSlideInOpen = true;\r\n\t}\r\n\r\n\tpublic closeSlideInPanel(): void {\r\n\t\tthis.isSlideInPanelVisible = false;\r\n\t\tthis.slideInPanelPlantingId = null;\r\n\t}\r\n\r\n\tpublic openPlantingRecalculateModal(id?: number): void {\r\n\t\tlet data: RecalculateModelConfig;\r\n\r\n\t\tthis._hidePlantingMenu();\r\n\r\n\t\tdata = {\r\n\t\t\tplantingId: null,\r\n\t\t\tcancelText: 'Cancel',\r\n\t\t}\r\n\r\n\t\tif (id) {\r\n\t\t\tdata.plantingId = id;\r\n\t\t}\r\n\r\n\t\tthis._persistentDatabase.getPlantingsViewScrollPosition();\r\n\r\n\t\tthis._dialog.open(PlantingRecalculateModalComponent, {\r\n\t\t\tdata: data,\r\n\t\t\tmaxWidth: 'unset'\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _addPlantingAttributes(): void {\r\n\t\tif (!this.plantings || this.plantings.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let planting of this.plantings) {\r\n\t\t\tplanting.displayMenu = false;\r\n\t\t\tplanting.collapsed = true;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * toggle the select lot\r\n\t * @param id lot ID to be toggled.\r\n\t */\r\n\tprivate _toggleSelectedLot(id: number): void {\r\n\t\tthis._currentLotId = null;\r\n\r\n\t\tif (!this.lots || this.lots.length === 0) {\r\n\t\t\tthrow new ArgumentNullError('lots array should not be empty');\r\n\t\t}\r\n\r\n\t\tfor (let lot of this.lots) {\r\n\t\t\tif (lot.Id === id) {\r\n\t\t\t\tif (!lot.Selected) {\r\n\t\t\t\t\tthis._currentLotId = id;\r\n\t\t\t\t\tlot.Selected = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._currentLotId = null;\r\n\t\t\t\t\tlot.Selected = false;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tlot.Selected = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Method for disabling commodity type / lot options when no plantings match.\r\n\t */\r\n\tprivate _disableEmptyCommodityTypes(): void {\r\n\t\tif (!this.commodityTypes || this.commodityTypes.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let commodityType of this.commodityTypes) {\r\n\t\t\tcommodityType.Disabled = this.plantingsForFilter.filter(x => x.CommodityTypeId === commodityType.Id).length === 0 ?\r\n\t\t\t\ttrue : false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Disables lots that, if clicked, will produce a zero result state.\r\n\t */\r\n\tprivate _disableEmptyLots(): void {\r\n\t\tfor (let lot of this.lots) {\r\n\t\t\tlot.Disabled = this.plantingsForFilter.filter(x => x.RanchLot.Id === lot.Id).length === 0 ?\r\n\t\t\t\ttrue : false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * FilterValue is used for displaying zero result state in the template\r\n\t * if commodity type or lot filters are active, this will return\r\n\t * @returns\r\n\t */\r\n\tprivate _isFilterAppliedToSearchResults(): boolean {\r\n\t\treturn this._currentCommodityTypeId || this._currentLotId ? true : false;\r\n\t}\r\n\r\n\t/**\r\n\t * Toggle the lot filter on and off\r\n\t * @param id\r\n\t */\r\n\tpublic onToggleLot(id: number): void {\r\n\t\tlet match: IRanchLotJSONModel;\r\n\r\n\t\tif (!this.lots) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmatch = this.lots.find(x => x.Id === id);\r\n\r\n\t\tif (!match || match.Disabled) {\r\n\t\t\t// lot filter is disabled if its disabled in the options because the lot is\r\n\t\t\t// not associated with a commodity filter that is currently active\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._toggleSelectedLot(id);\r\n\t\tthis._filterResults(this._currentCommodityTypeId, this._currentLotId, this.yearFilter, this.searchValue);\r\n\r\n\t\tthis._disableEmptyLots();\r\n\t\tthis._disableEmptyCommodityTypes();\r\n\t}\r\n\r\n\t/**\r\n     * triggers when user changes year filter\r\n     */\r\n\tpublic filterByYear(yearOffset: number): void {\r\n\t\tif (!this.originalPlantings) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._filterResults(this._currentCommodityTypeId, this._currentLotId, yearOffset, this.searchValue);\r\n\t\tthis.resultsAreFiltered = this._isFilterAppliedToSearchResults();\r\n\r\n\t\tthis._disableEmptyCommodityTypes();\r\n\t\tthis._disableEmptyLots();\r\n\t}\r\n\r\n\t/**\r\n\t * Filter plantings list based on various filters. The filters are combined\r\n\t */\r\n\tprivate _filterResults(commodityTypeId: number, lotId: number, yearOffset: number, query: string): void {\r\n\r\n\t\tlet now: Date;\r\n\t\tlet thisYear: number;\r\n\t\tlet targetYear: number;\r\n\t\tlet ranchLotIds: number[];\r\n\t\tlet commodityTypeIds: number[];\r\n\r\n\t\tnow = new Date();\r\n\t\tthisYear = now.getFullYear();\r\n\t\ttargetYear = thisYear + yearOffset;\r\n\r\n\t\tthis.plantings = this.originalPlantings.filter(data => (commodityTypeId > 0 ? data.CommodityTypeId === commodityTypeId : true)\r\n\t\t\t&& (lotId > 0 ? data.RanchLot.Id === lotId : true) &&\r\n\t\t\t(query ? data.Name.toLowerCase().includes(query.toLocaleLowerCase()) : true) &&\r\n\t\t\t(\r\n\t\t\t\tyearOffset === null ? true :\r\n\t\t\t\tyearOffset === -4 ? data.HarvestDate.getFullYear() <= targetYear :\r\n\t\t\t\t(data.WetDate.getFullYear() <= targetYear && data.HarvestDate.getFullYear() >= targetYear)\r\n\t\t\t)\r\n\t\t);\r\n\r\n\t\tranchLotIds = Array.from(new Set(this.originalPlantings.filter(data => data.CommodityTypeId === commodityTypeId\r\n\t\t\t&& (query ? data.Name.toLowerCase().includes(query.toLocaleLowerCase()) : true) &&\r\n\t\t\t(\r\n\t\t\t\tyearOffset === null ? true :\r\n\t\t\t\tyearOffset === -4 ? data.HarvestDate.getFullYear() <= targetYear :\r\n\t\t\t\t(data.WetDate.getFullYear() <= targetYear && data.HarvestDate.getFullYear() >= targetYear)\r\n\t\t\t)).map(planting => planting.RanchLot.Id)));\r\n\r\n\t\tcommodityTypeIds = Array.from(new Set(this.originalPlantings.filter(data => data.RanchLot.Id === lotId\r\n\t\t\t&& (query ? data.Name.toLowerCase().includes(query.toLocaleLowerCase()) : true) &&\r\n\t\t\t(\r\n\t\t\t\tyearOffset === null ? true :\r\n\t\t\t\tyearOffset === -4 ? data.HarvestDate.getFullYear() <= targetYear :\r\n\t\t\t\t(data.WetDate.getFullYear() <= targetYear && data.HarvestDate.getFullYear() >= targetYear)\r\n\t\t\t)).map(planting => planting.CommodityTypeId)));\r\n\r\n\t\tthis.plantingsForFilter = this.originalPlantings.filter(data => (commodityTypeIds.length > 0\r\n\t\t\t\t? commodityTypeIds.indexOf(data.CommodityTypeId) >= 0  : true)\r\n\t\t\t&& (ranchLotIds.length > 0 ? ranchLotIds.indexOf(data.RanchLot.Id) >= 0 : true) &&\r\n\t\t\t(query ? data.Name.toLowerCase().includes(query.toLocaleLowerCase()) : true) &&\r\n\t\t\t(\r\n\t\t\t\tyearOffset === null ? true :\r\n\t\t\t\tyearOffset === -4 ? data.HarvestDate.getFullYear() <= targetYear :\r\n\t\t\t\t(data.WetDate.getFullYear() <= targetYear && data.HarvestDate.getFullYear() >= targetYear)\r\n\t\t\t)\r\n\t\t);\r\n\r\n\t\tthis.resultsAreFiltered = true;\r\n\t}\r\n\r\n\t/**\r\n\t * what is the difference between this and this.resultsAreFiltered?\r\n\t * @returns\r\n\t */\r\n\tprivate _areFiltersSelected(): boolean {\r\n\t\tif (this.commodityTypes && this.commodityTypes.filter(x => x.Selected).length > 0) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this.lots && this.lots.filter(x => x.Selected).length > 0) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Enable disabled filters. Should only run if\r\n\t * _areFiltersSelected() call returns false.\r\n\t * Filters are disabled depending on whether the filter is a possible option for\r\n\t * other selected filters. For example, choosing lot \"A\" may disable strawberry\r\n\t * and potatoes if the lot \"A\" only has lettuce and almond plantings\r\n\t */\r\n\tprivate _enableFilters(): void {\r\n\t\tif (this.commodityTypes) {\r\n\t\t\tfor (let commodityType of this.commodityTypes) {\r\n\t\t\t\tcommodityType.Disabled = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.lots) {\r\n\t\t\tfor (let lot of this.lots) {\r\n\t\t\t\tlot.Disabled = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the selected state of the commodity type filters\r\n\t * @param commodityTypeId\r\n\t */\r\n\tprivate _updateSelectedCommodityTypeUI(commodityTypeId: number): void {\r\n\t\tthis._currentCommodityTypeId = null;\r\n\r\n\t\tfor (let type of this.commodityTypes) {\r\n\t\t\tif (type.Id === commodityTypeId) {\r\n\t\t\t\tif (!type.Selected) {\r\n\t\t\t\t\ttype.Selected = true;\r\n\t\t\t\t\tthis._currentCommodityTypeId = commodityTypeId;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttype.Selected = false;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\ttype.Selected = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * This is a public method for _toggleCommodityType method, which is also\r\n\t * called internally\r\n\t * @param id\r\n\t */\r\n\tpublic onToggleCommodityType(id: number) {\r\n\t\tlet match: ICommodityType;\r\n\r\n\t\tif (!this.commodityTypes || this.commodityTypes.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmatch = this.commodityTypes.find(x => x.Id === id);\r\n\r\n\t\tif (!match || match.Disabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._updateSelectedCommodityTypeUI(id);\r\n\t\tthis._filterResults(this._currentCommodityTypeId, this._currentLotId, this.yearFilter, this.searchValue);\r\n\t\tthis.resultsAreFiltered = this._isFilterAppliedToSearchResults();\r\n\r\n\t\tthis._disableEmptyLots();\r\n\t\tthis._disableEmptyCommodityTypes();\r\n\t}\r\n\r\n\tpublic openRainfallDataModal(planting: IPlanting): void {\r\n\t\tthis._persistentDatabase.getPlantingsViewScrollPosition();\r\n\r\n\t\tthis._dialog.open(RainfallDataComponent, {\r\n\t\t\tdata: {\r\n\t\t\t\tid: planting.Id,\r\n\t\t\t\tname: planting.Name\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._hidePlantingMenu();\r\n\t}\r\n\r\n\tpublic openAppliedWaterChart(planting: IPlanting): void {\r\n\t\tthis._persistentDatabase.getPlantingsViewScrollPosition();\r\n\t\tthis._hidePlantingMenu();\r\n\r\n\t\tthis._dialog.open(AppliedWaterChartComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\twidth: '900px',\r\n\t\t\tdata: {\r\n\t\t\t\tlotPlantingId: planting.Id,\r\n\t\t\t\tname: planting.Name,\r\n\t\t\t\tharvestDate: planting.HarvestDate\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openAppliedFertilizerChart(planting: IPlanting): void {\r\n\t\tthis._persistentDatabase.getPlantingsViewScrollPosition();\r\n\t\tthis._hidePlantingMenu();\r\n\r\n\t\tthis._dialog.open(AppliedFertilizerChartComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\twidth: '900px',\r\n\t\t\tdata: {\r\n\t\t\t\tlotPlantingId: planting.Id,\r\n\t\t\t\tname: planting.Name\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openAvailableWaterChart(planting: IPlanting): void {\r\n\t\tthis._persistentDatabase.getPlantingsViewScrollPosition();\r\n\t\tthis._hidePlantingMenu();\r\n\r\n\t\tthis._dialog.open(AvailableWaterChartComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\twidth: '1100px',\r\n\t\t\tdata: {\r\n\t\t\t\tlotPlantingId: planting.Id,\r\n\t\t\t\tname: planting.Name\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openETChart(planting: IPlanting): void {\r\n\t\tthis._persistentDatabase.getPlantingsViewScrollPosition();\r\n\t\tthis._hidePlantingMenu();\r\n\r\n\t\tthis._dialog.open(ETChartComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: {\r\n\t\t\t\tlotPlantingId: planting.Id,\r\n\t\t\t\tname: planting.Name\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openFlowmeterDataModal(planting: IPlanting): void {\r\n\r\n\t\tthis._persistentDatabase.getPlantingsViewScrollPosition();\r\n\t\tthis._hidePlantingMenu();\r\n\r\n\t\tif (planting.HasFlowMeterFileName) {\r\n\t\t\tthis._dialog.open(FlowmeterChartDialog, {\r\n\t\t\t\tdisableClose: true,\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tplantingId: planting.Id,\r\n\t\t\t\t\tplantingName: planting.Name,\r\n\t\t\t\t\tchartType: chartTypes.summary\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis._dialog.open(FlowmeterSettingsComponent, {\r\n\t\t\t\tdisableClose: true,\r\n\t\t\t\twidth: '695px',\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tlotPlantingId: planting.Id,\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic addPlantingToFavorites(id: number): void {\r\n\t\tthis._ranchService.addPlantingToFavorties(id)\r\n\t\t\t.then((res) => {\r\n\r\n\t\t\t\tthis._ranchService.plantings.favorite(id); // we do this outside of an update so it doesn't run three times\r\n\r\n\t\t\t\tfor (let planting of this.plantings) {\r\n\t\t\t\t\tif (id === planting.Id) {\r\n\t\t\t\t\t\tplanting.Favorite = true;\r\n\t\t\t\t\t\tplanting.FavoriteId = res.Id;\r\n\t\t\t\t\t\tthis._updateService.setPlantingFavoritesUpdated(planting.Id, res.Id);\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 _checkFavoriteCount() {\r\n\t\tthis.noFavorites = this.plantings && this.plantings.length === 0 && this.type === PlantingTabValues.favorites;\r\n\t}\r\n\r\n\tpublic removePlantingFromFavorites(id: number): void {\r\n\t\tlet favoriteId: number;\r\n\t\tfor (let planting of this.plantings) {\r\n\t\t\tif (id === planting.Id) {\r\n\t\t\t\tfavoriteId = planting.FavoriteId;\r\n\t\t\t\tif (favoriteId) {\r\n\t\t\t\t\tplanting.Favorite = false;\r\n\t\t\t\t\tplanting.FavoriteId = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (favoriteId) {\r\n\t\t\tthis._ranchService.removePlantingFromFavorites(favoriteId)\r\n\t\t\t\t.then(res => {\r\n\t\t\t\t\tthis._ranchService.plantings.unfavorite(id); // we do this outside of an update so it doesn't run 3 times\r\n\t\t\t\t\tthis._updateService.setPlantingFavoritesUpdated(id, null);\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _hidePlantingMenu(): void {\r\n\t\tfor (let planting of this.plantings) {\r\n\t\t\tplanting.displayMenu = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic showLoader(): boolean {\r\n\t\treturn this.loading || this.ranchValidationStates === null;\r\n\t}\r\n\r\n\tpublic plantingsAreReadyToDisplay(): boolean {\r\n\t\treturn !this.loading && this.ranchValidationStates != null && this.ranchValidationStates.Valid;\r\n\t}\r\n\r\n\tpublic navigateToRanchSettings(e: MouseEvent): void {\r\n\t\te.preventDefault();\r\n\t\tthis._updateService.setNavigateToRanchSettings();\r\n\t}\r\n}\r\n","<form [formGroup]=\"searchForm\" id=\"plantingSearchForm\">\r\n    <input *ngIf=\"type == 'ActivePlantings'\"\r\n        class=\"bk-ranch-search\"\r\n        placeholder=\"{{'Search Active Plantings' | translate }}\"\r\n        type=\"text\"\r\n        id=\"searchActivePlantings\"\r\n        formControlName=\"searchString\" />\r\n    <input *ngIf=\"type == 'FavoritePlantings'\"\r\n        class=\"bk-ranch-search\"\r\n        placeholder=\"{{'Search Favorite Plantings' | translate }}\"\r\n        type=\"text\"\r\n        id=\"searchFavoritePlantings\"\r\n        formControlName=\"searchString\" />\r\n    <input *ngIf=\"type == 'AllPlantings'\"\r\n        class=\"bk-ranch-search\"\r\n        placeholder=\"{{'Search All Plantings' | translate }}\"\r\n        type=\"text\"\r\n        id=\"searchAllPlantings\"\r\n        formControlName=\"searchString\" />\r\n</form>\r\n<i *ngIf=\"!hasSearchString\"\r\n    class=\"bk-ranch-search__icon fa fa-search\">\r\n</i>\r\n<i (click)=\"clear()\"\r\n    *ngIf=\"hasSearchString\"\r\n    class=\"bk-ranch-clear-search__icon fa fa-times-circle\">\r\n</i>\r\n\r\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'planting-search',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class PlantingSearchComponent implements OnInit, OnDestroy {\r\n\t@Input()\r\n\ttype: string;\r\n\r\n\tprivate plantingSearchString: Subject<string> = new Subject<string>();\r\n\tpublic plantingSearchString$ = this.plantingSearchString.asObservable();\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tpublic hasSearchString = false;\r\n\tpublic searchForm: FormGroup;\r\n\r\n\tconstructor(private formBuilder: FormBuilder, private updateService: UpdateService) {\r\n\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.searchForm = this.formBuilder.group({\r\n\t\t\tsearchString: ''\r\n\t\t})\r\n\r\n\t\tthis.searchForm.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(data => {\r\n\t\t\tthis.plantingSearchString.next(data.searchString);\r\n\r\n\t\t\tif (data.searchString.length > 0) {\r\n\t\t\t\tthis.hasSearchString = true;\r\n\t\t\t} else {\r\n\t\t\t\tthis.hasSearchString = false;\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\tngOnInit(): void {\r\n\t}\r\n\r\n\t/**\r\n     * Referenced by parent, so public...\r\n     */\r\n\tpublic clear(): void {\r\n\t\tthis.searchForm.patchValue({ searchString: '' });\r\n\t}\r\n}\r\n","<div mat-dialog-content *ngIf=\"isDataAvailable === false || !planting\">\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 *ngIf=\"isDataAvailable === true && planting\"\r\n    class=\"bk-slide-in-panel__wrapper\"\r\n    (clickOutside)=\"handleClickOutside($event)\">\r\n    <button class=\"bk-button bk-modal__close close\"\r\n        (click)=\"close()\"\r\n        type=\"button\">\r\n        <span>×</span>\r\n    </button>\r\n    <h2>\r\n        <i class=\"fa-star bk-clickable\"\r\n            [ngClass]=\"{ 'far': !planting.Favorite, 'fa': planting.Favorite }\"\r\n            (click)='planting.Favorite ? unfavorite() : favorite()'>\r\n        </i>\r\n        {{planting.Name}}\r\n    </h2>\r\n\r\n    <div class=\"bk-planting__header bk-clearfix\">\r\n        <div class=\"bk-planting__header--content\">\r\n                \r\n            <div class=\"bk-planting__dates\">\r\n                {{planting.WetDate | convertDotNetDate}} - {{planting.HarvestDate | convertDotNetDate}}\r\n                <div *ngIf=\"permissions && permissions.UserCanEditPlanting\"\r\n                    class=\"bk-slide-in-panel__menu\">\r\n                    \r\n                    <i class=\"fa fa-gear\" matTooltip=\"{{ 'Planting Settings' | translate }}\"\r\n                        (click)=\"openPlantingSettings()\">\r\n                    </i>\r\n\r\n                    <i class=\"fa fa-calculator\" matTooltip=\"{{ 'Recalculate Planting' | translate }}\"\r\n                        (click)=\"recalculate()\">\r\n                    </i>\r\n\r\n                    <i class=\"far fa-copy\" matTooltip=\"{{ 'Duplicate Planting' | translate }}\"\r\n                        (click)=\"duplicate()\">\r\n                    </i>\r\n\r\n                    <i class=\"far fa-chart-bar\" matTooltip=\"{{ 'Charts & Tables' | translate }}\"\r\n                        (click)=\"toggleDropDown()\"></i>\r\n\r\n                    <ul *ngIf=\"isDropDownVisible\"\r\n                        (clickOutside)=\"onChartsMenuClickOutside($event)\"\r\n                        class=\"bk-drop-menu bk-planting__menu\">\r\n\r\n                        <li class=\"bk-drop-menu__item\"\r\n                            (click)=\"showRainfall($event)\">\r\n                            {{'Rainfall Data' | translate }}\r\n                        </li>\r\n\r\n                        <li class='bk-drop-menu__item'\r\n                            (click)=\"openETChart($event)\">\r\n                            {{ 'ET Chart' | translate }}\r\n                        </li>\r\n\r\n                        <li class=\"bk-drop-menu__item\"\r\n                            (click)=\"showCanopyCurve($event)\">\r\n                            {{'Canopy Curve' | translate}}\r\n                        </li>\r\n\r\n                        <li class='bk-drop-menu__item'\r\n                            (click)=\"openAppliedWaterChart($event)\">\r\n                            {{ 'Applied Water Chart' | translate }}\r\n                        </li>\r\n\r\n                        <li *ngIf=\"!hasCutEvents\"\r\n                            class='bk-drop-menu__item'\r\n                            (click)=\"openAppliedFertilizerChart($event)\">\r\n                            {{ 'Applied Fertilizer' | translate }}\r\n                        </li>\r\n                        \r\n                        <li class='bk-drop-menu__item'\r\n                            (click)=\"openAvailableWaterChart($event)\">\r\n                            {{ 'Soil Water Balance' | translate }}\r\n                        </li>\r\n\r\n                        <li class=\"bk-drop-menu__item\"\r\n                            (click)=\"showFlowmeter($event)\">\r\n                            {{'Flowmeter Data' | translate }}\r\n                        </li>\r\n\r\n                        <li class=\"bk-drop-menu__item\"\r\n                            (click)=\"showSoilSensor($event)\">\r\n                            {{'Soil Sensors' | translate }}\r\n                        </li>\r\n                    </ul>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n\r\n    <ng-container *ngIf=\"planting.Events\">\r\n\r\n        <events-snapshot [plantingId]=\"planting.Id\"\r\n            [commodityTypeId]=\"planting.CommodityTypeId\"\r\n            [eventGroups]=\"planting.Events\"\r\n            [hasCutEvents]=\"hasCutEvents\"\r\n            [wetDate]=\"planting.WetDate\"\r\n            [maturities]=\"maturities\">\r\n        </events-snapshot>\r\n    </ng-container>\r\n\r\n    <div class=\"bk-planting__footer bk-clearfix\">\r\n        <div class=\"bk-button-set bk-button-set--right\">\r\n            <label class=\"bk-button-set__label\" for=\"events-list-button\">\r\n                {{'View all events by' | translate }}:\r\n            </label>\r\n            <button (click)=\"openEventsModal(EventsViewEnum.LIST)\"\r\n                id=\"events-list-button\"\r\n                class=\"bk-button bk-button-set__button bk-button--gray-icon\">\r\n                <i class=\"fa fa-list-ul\"></i>\r\n            </button>\r\n            <button (click)=\"openEventsModal(EventsViewEnum.TABLE)\"\r\n                class=\"bk-button bk-button-set__button bk-button--gray-icon\">\r\n                <i class=\"fa fa-table\"></i>\r\n            </button>\r\n            <button (click)=\"openCalendar()\"\r\n                class=\"bk-button bk-button-set__button bk-button--gray-icon\">\r\n                <i class=\"far fa-calendar\"></i>\r\n            </button>\r\n        </div>\r\n    </div>\r\n</div>","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { IPlanting } from '../../planting-settings/interfaces';\r\nimport { PlantingService } from '../../planting-settings/service';\r\nimport { CropType } from '../../../models/crop-type/cropType';\r\nimport { IMaturity } from '../../../models/maturity/interfaces';\r\nimport { CutEventService } from '../../cut-event/service';\r\nimport { EventsView } from '../../../interfaces/constants';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { RanchService } from '../../ranch-settings/service';\r\nimport { PersistentDatabase } from '../../../services/persistent-database';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ETChartComponent } from '../../et-chart/et-chart';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { AppliedWaterChartComponent } from '../../applied-water-chart/applied-water-chart';\r\nimport { AvailableWaterChartComponent } from '../../available-water-chart/available-water-chart';\r\nimport { AppliedFertilizerChartComponent } from '../../applied-fertilizer-chart/applied-fertilizer-chart';\r\nimport { CalendarComponent } from '../../calendar/calendar';\r\nimport { CalendarEventDialogData } from '../../calendar/interfaces';\r\nimport { AllEventsModalComponent, AllEventsModalSettings } from '../../events/main';\r\nimport { IRanchPermissions } from '../../ranch-settings/interfaces';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'slide-in-panel',\r\n\ttemplateUrl: 'slide-in-panel.html'\r\n})\r\n\r\n// shell dialog for cut event component\r\nexport class PlantingSlideInPanelComponent implements OnInit, OnDestroy {\r\n\t@Input()\r\n\tpublic plantingId: number;\r\n\r\n\t@Input()\r\n\tpublic permissions: IRanchPermissions;\r\n\r\n\t@Output()\r\n\tpublic closing: EventEmitter<null> = new EventEmitter<null>();\r\n\r\n\t@Output()\r\n\tpublic triggerPlantingSettings: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n\t@Output()\r\n\tpublic triggerRecalculate: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n\t@Output()\r\n\tpublic triggerDuplicate: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n\t@Output()\r\n\tpublic triggerFlowmeter: EventEmitter<IPlanting> = new EventEmitter<IPlanting>();\r\n\r\n\t@Output()\r\n\tpublic triggerRainfall: EventEmitter<IPlanting> = new EventEmitter<IPlanting>();\r\n\r\n\t@Output()\r\n\tpublic triggerSoilSensor: EventEmitter<IPlanting> = new EventEmitter<IPlanting>();\r\n\r\n\t@Output()\r\n\tpublic triggerCanopyCurve: EventEmitter<IPlanting> = new EventEmitter<IPlanting>();\r\n\r\n\tpublic planting: IPlanting;\r\n\tpublic maturities: IMaturity[];\r\n\tpublic isDataAvailable = false; // turns true when data for this component has loaded\r\n\tpublic EventsViewEnum = EventsView;\r\n\tpublic isDropDownVisible = false;\r\n\tpublic hasCutEvents = false;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tprivate dialog: MatDialog,\r\n\t\tprivate persistentDatabase: PersistentDatabase,\r\n\t\tprivate plantingService: PlantingService,\r\n\t\tprivate cutEventService: CutEventService,\r\n\t\tprivate updateService: UpdateService,\r\n\t\tprivate ranchService: RanchService) {\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.cutEventService.listMaturities() // maturities that show up in event snapshot\r\n\t\t\t.then(maturities => {\r\n\t\t\t\tthis.maturities = maturities\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tthis.plantingService.getSlideInPanel(this.plantingId).then((data) => {\r\n\r\n\t\t\tthis.planting = data;\r\n\r\n\t\t\tif (this.planting) {\r\n\t\t\t\tthis.hasCutEvents = CropType.hasCutEvents(this.planting.CommodityTypeId);\r\n\t\t\t}\r\n\r\n\t\t\tthis.isDataAvailable = true;\r\n\t\t\tthis.ranchService.plantings.edit(data);\r\n\t\t})\r\n\r\n\t\tthis.updateService.PlantingsUpdated$.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\r\n\t\t\tif (!this.ranchService || !this.ranchService.plantings) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.planting) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.planting = this.ranchService.plantings.getPlantingById(this.planting.Id); // refresh events\r\n\r\n\t\t\tif (!this.planting) {\r\n\t\t\t\t// assume planting was deleted, so close\r\n\t\t\t\tthis.close();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.hasCutEvents = CropType.hasCutEvents(this.planting.CommodityTypeId);\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\t//\r\n\t\tthis.closing.emit();\r\n\t}\r\n\r\n\tpublic favorite() {\r\n\t\tif (!this.planting) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.ranchService.addPlantingToFavorties(this.planting.Id)\r\n\t\t.then((res) => {\r\n\r\n\t\t\tthis.ranchService.plantings.favorite(this.planting.Id); // we do this outside of an update so it doesn't run three times\r\n\r\n\t\t\tthis.planting.Favorite = true;\r\n\t\t\tthis.planting.FavoriteId = res.Id;\r\n\t\t\tthis.updateService.setPlantingFavoritesUpdated(this.planting.Id, res.Id);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic unfavorite(): void {\r\n\r\n\t\tif (!this.planting || this.planting.FavoriteId === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.ranchService.removePlantingFromFavorites(this.planting.FavoriteId)\r\n\t\t.then(res => {\r\n\t\t\tthis.planting.Favorite = false;\r\n\t\t\tthis.planting.FavoriteId = null;\r\n\t\t\tthis.ranchService.plantings.unfavorite(this.planting.Id); // we do this outside of an update so it doesn't run 3 times\r\n\t\t\tthis.updateService.setPlantingFavoritesUpdated(this.planting.Id, null);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic toggleDropDown(): void {\r\n\t\tthis.isDropDownVisible = !this.isDropDownVisible;\r\n\t}\r\n\r\n\tpublic openPlantingSettings(): void {\r\n\t\tthis.triggerPlantingSettings.emit(this.planting.Id);\r\n\t}\r\n\r\n\tpublic recalculate(): void {\r\n\t\tthis.triggerRecalculate.emit(this.planting.Id);\r\n\t}\r\n\r\n\tpublic duplicate(): void {\r\n\t\tthis.triggerDuplicate.emit(this.planting.Id);\r\n\t}\r\n\r\n\tpublic showFlowmeter($event: MouseEvent): void {\r\n\t\t$event.stopPropagation();\r\n\t\t$event.preventDefault();\r\n\r\n\t\tthis.triggerFlowmeter.emit(this.planting);\r\n\t\tthis.isDropDownVisible = false;\r\n\t}\r\n\r\n\tpublic showRainfall($event: MouseEvent): void {\r\n\t\t$event.stopPropagation();\r\n\t\t$event.preventDefault();\r\n\r\n\t\tthis.triggerRainfall.emit(this.planting);\r\n\t\tthis.isDropDownVisible = false;\r\n\t}\r\n\r\n\tpublic showSoilSensor($event: MouseEvent): void {\r\n\t\t$event.stopPropagation();\r\n\t\t$event.preventDefault();\r\n\r\n\t\tthis.triggerSoilSensor.emit(this.planting);\r\n\t\tthis.isDropDownVisible = false;\r\n\t}\r\n\r\n\tpublic showCanopyCurve($event: MouseEvent): void {\r\n\t\t$event.stopPropagation();\r\n\t\t$event.preventDefault();\r\n\r\n\t\tthis.triggerCanopyCurve.emit(this.planting);\r\n\t\tthis.isDropDownVisible = false;\r\n\t}\r\n\r\n\tpublic openAppliedWaterChart($event: MouseEvent): void {\r\n\r\n\t\t$event.stopPropagation();\r\n\t\t$event.preventDefault();\r\n\r\n\t\tthis.dialog.open(AppliedWaterChartComponent, {\r\n\t\t\twidth: '900px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: {\r\n\t\t\t\tlotPlantingId: this.planting.Id,\r\n\t\t\t\tname: this.planting.Name,\r\n\t\t\t\tharvestDate: this.planting.HarvestDate\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.isDropDownVisible = false;\r\n\t}\r\n\r\n\tpublic openAppliedFertilizerChart($event: MouseEvent): void {\r\n\r\n\t\t$event.stopPropagation();\r\n\t\t$event.preventDefault();\r\n\r\n\t\tthis.dialog.open(AppliedFertilizerChartComponent, {\r\n\t\t\twidth: '900px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: {\r\n\t\t\t\tlotPlantingId: this.planting.Id,\r\n\t\t\t\tname: this.planting.Name\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.isDropDownVisible = false;\r\n\t}\r\n\r\n\tpublic openAvailableWaterChart($event: MouseEvent): void {\r\n\r\n\t\t$event.stopPropagation();\r\n\t\t$event.preventDefault();\r\n\r\n\t\tthis.dialog.open(AvailableWaterChartComponent, {\r\n\t\t\twidth: '1100px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: {\r\n\t\t\t\tlotPlantingId: this.planting.Id,\r\n\t\t\t\tname: this.planting.Name\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.isDropDownVisible = false;\r\n\t}\r\n\r\n\tpublic openETChart($event: MouseEvent): void {\r\n\r\n\t\t$event.stopPropagation();\r\n\t\t$event.preventDefault();\r\n\r\n\t\tthis.dialog.open(ETChartComponent, {\r\n\t\t\t// width: '500px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: {\r\n\t\t\t\tlotPlantingId: this.planting.Id,\r\n\t\t\t\tname: this.planting.Name\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.isDropDownVisible = false;\r\n\t}\r\n\r\n\tpublic openEventsModal(view: EventsView): void {\r\n\t\tlet data: AllEventsModalSettings;\r\n\r\n\t\tif (!this.planting || !this.planting.RanchLot) {\r\n\t\t\tthrow new Error('openEventsModal() - this.planting is empty');\r\n\t\t}\r\n\r\n\t\tdata = {\r\n\t\t\tplanting: {\r\n\t\t\t\tId: this.planting.Id,\r\n\t\t\t\tName: this.planting.Name,\r\n\t\t\t\tLotName: this.planting.RanchLot.Name,\r\n\t\t\t\tWetDate: this.planting.WetDate,\r\n\t\t\t\tHarvestDate: this.planting.HarvestDate,\r\n\t\t\t\tHasFlowMeterFileName: this.planting.HasFlowMeterFileName,\r\n\t\t\t\tCommodityTypeId: this.planting.CommodityTypeId,\r\n\t\t\t\tpermissions: this.permissions,\r\n\t\t\t},\r\n\t\t\tview: view\r\n\t\t}\r\n\r\n\t\tthis.persistentDatabase.getPlantingsViewScrollPosition();\r\n\r\n\t\tthis.dialog.open(AllEventsModalComponent, {\r\n\t\t\tminWidth: '1030px',\r\n\t\t\tdata: data\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openCalendar(): void {\r\n\t\tlet data: CalendarEventDialogData;\r\n\r\n\t\tdata = {\r\n\t\t\tlotPlantingId: this.planting.Id,\r\n\t\t\tname: this.planting.Name,\r\n\t\t\tcommodityTypeId: this.planting.CommodityTypeId,\r\n\t\t\tstartDate: this.planting.WetDate,\r\n\t\t\tendDate: this.planting.HarvestDate\r\n\t\t};\r\n\r\n\t\tthis.dialog.open(CalendarComponent, {\r\n\t\t\twidth: '1200px',\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: data\r\n\t\t});\r\n\t}\r\n\r\n\tpublic onChartsMenuClickOutside(e: MouseEvent): void {\r\n\t\tlet target: JQuery;\r\n\r\n\t\t// killing propagation here will prevent radios in other popups from working\r\n\r\n\t\ttarget = jQuery(e.target);\r\n\r\n\t\tif (target.hasClass('fa-chart-bar')) {\r\n\t\t\t// event add button\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('modal')) {\r\n\t\t\t// clicking on another popup's glaze\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('bk-button--medium')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('mat-button-wrapper')) {\r\n\t\t\t// mat dialog button\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.closest('.modal-content').length > 0) { // inside another popup\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.closest('.bk-dialog').length > 0) { // inside another popup\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.closest('.cdk-overlay-container').length > 0) { // inside another popup\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isDropDownVisible = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Traditional click outside will not work...\r\n\t * @param e\r\n\t */\r\n\tpublic handleClickOutside(e: MouseEvent): void {\r\n\t\tlet target: JQuery;\r\n\r\n\t\t// killing propagation here will prevent radios in other popups from working\r\n\r\n\t\ttarget = jQuery(e.target);\r\n\r\n\t\t// block click outside on these conditions...\r\n\t\tif (this.isDataAvailable === false) { //\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('modal')) {\r\n\t\t\t// clicking on another popup's glaze\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('mat-calendar-body-cell-content')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('bk-event-details__close')) { // hover panel closing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('bk-dialog__close')) {\r\n\t\t\t// clicking on a dialog's close button\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('bk-button__delete')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('bk-button--medium')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('bk-historical-ui__link')) {\r\n\t\t\t// irrigation event dialog historical UI link\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('bk-water-data-link')) {\r\n\t\t\treturn; // additional water data link\r\n\t\t}\r\n\r\n\t\tif (target.hasClass('mat-button-wrapper')) {\r\n\t\t\t// mat dialog button\r\n\t\t\treturn;\r\n\t\t} else if (target.hasClass('bk-dialog__canopy-table--add-row')) {\r\n\t\t\t// canopy curve UI, add row\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.closest('.modal-content').length > 0) { // inside another popup\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.closest('.bk-dialog').length > 0) { // inside another popup\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (target.closest('.cdk-overlay-container').length > 0) { // inside another material dialog\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.close();\r\n\t}\r\n}\r\n","\n        <div class=\"bk-ranch-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 { RanchNavComponent } from '../../plantings/top-nav/main';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ranch-tab',\r\n\ttemplate: `\r\n        <div class=\"bk-ranch-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 RanchTabComponent implements OnInit, TabInterface {\r\n\t@Input()\r\n\ttabTitle: string;\r\n\r\n\tselected = false;\r\n\r\n\tconstructor(private ranchNavComponent: RanchNavComponent) { }\r\n\r\n\tngOnInit() {\r\n\t\tthis.ranchNavComponent.addTab(this);\r\n\t}\r\n\r\n}\r\n","<div class=\"ranch-nav bk-nav\">\r\n    <!-- Plantings View Nav, top left -->\r\n    <div class=\"bk-nav__title-container\">\r\n        <h4 class=\"bk-nav__title bk-nav__title--ranch-settings\">\r\n            {{title}}\r\n        </h4>\r\n        <div class=\"bk-nav__settings-container\"\r\n            *ngIf=\"permissions && permissions.UserCanEditRanch && (!ranchSettings || !ranchSettings.selected)\"\r\n            (clickOutside)=\"displayMenu = false\">\r\n            <i class=\"bk-nav__settings-icon fa fa-gear\"\r\n                (click)=\"displayMenu = !displayMenu\"></i>\r\n            <ul class=\"bk-drop-menu bk-nav__settings-menu\"\r\n                [hidden]=\"!displayMenu\">\r\n                <li class=\"bk-drop-menu__item\"\r\n                    (click)=\"selectRanchSettings()\">\r\n                    {{'Ranch Settings' | translate }}\r\n                </li>\r\n                <li class=\"bk-drop-menu__item\"\r\n                    (click)=\"openRanchExportModal()\">\r\n                    {{'Export Ranch Data' | translate }}\r\n                </li>\r\n            </ul>\r\n        </div>\r\n    </div>\r\n\r\n\t<!-- Add Planting Button -->\r\n    <div *ngIf=\"!ranchSettings || !ranchSettings.selected\" \r\n        class=\"bk-nav__buttons\">\r\n        <button *ngIf=\"ranchIsValid\"\r\n            [disabled]=\"!permissions\"\r\n            class=\"bk-button bk-nav__button bk-button--small\"\r\n            (click)=\"openPlantingModal()\">\r\n            <span class=\"bk-nav__button-icon\">\r\n                +\r\n            </span>\r\n            <span class=\"bk-nav__button-text\">\r\n                {{'Add' | translate }} {{'Planting' | translate }}\r\n            </span>\r\n        </button>\r\n        <i class=\"bk-ranch-search__icon bk-ranch-search__icon--nav fa fa-search\" (click)=\"toggleDisplayPlantingsSearch()\"></i>\r\n    </div>\r\n\r\n    <div *ngIf=\"ranchSettings && ranchSettings.selected\" \r\n        class=\"bk-nav__buttons cm-nav-arrow\"\r\n        (click)=\"selectTab(tabs[0])\">\r\n\r\n        <button mat-button color=\"primary\">\r\n            {{'Back to Plantings' | translate }}\r\n            <mat-icon>arrow_forward</mat-icon>\r\n        </button>\r\n\r\n    </div>\r\n\r\n\t<!-- Add Planting Button END -->\r\n\r\n\t<!-- tablet width planting dropdown -->\r\n    <select *ngIf=\"!ranchSettings || !ranchSettings.selected\" \r\n        class=\"bk-nav__items--select\"\r\n        [(ngModel)]=\"selectedTab\"\r\n        id=\"plantingTabSelect\"\r\n        (ngModelChange)=\"selectTab(selectedTab)\">\r\n        <option [ngValue]=\"tab\" *ngFor=\"let tab of tabs\">\r\n            {{tab.tabTitle | translate}}\r\n        </option>\r\n    </select>\r\n\t<!-- tablet width planting dropdown END -->\r\n\r\n\t<!-- desktop planting tabs -->\r\n    <ul *ngIf=\"!ranchSettings || !ranchSettings.selected\"\r\n        class=\"bk-nav__items\">\r\n        <li [class.bk-nav__item--selected]=\"tab.selected\"\r\n            class=\"tab-element bk-nav__item\"\r\n            *ngFor=\"let tab of tabs\"\r\n            (click)=\"selectTab(tab)\">\r\n            {{tab.tabTitle | translate}}\r\n        </li>\r\n    </ul>\r\n\t<!-- desktop planting END-->\r\n</div>\r\n<div class=\"ranch-page-content bk-tab__container\">\r\n    <ng-container *ngIf=\"isRanchIdValid === false\">\r\n            <p class='bk-error-message'>\r\n                The ranch you're trying to view either doesn't exist or you don't have permission to view.\r\n                Please select another ranch from <a routerLink=\"/MyDashboard\">Ranches View.</a>\r\n            </p>\r\n        </ng-container>\r\n    <ng-content></ng-content>\r\n</div>","import { Component, Input, ViewChild, OnInit, OnDestroy } from '@angular/core';\r\nimport { NavInterface } from '../../../interfaces/nav.interface';\r\nimport { RanchTabComponent } from '../tab/main';\r\nimport { RanchSettingsComponent } from '../../ranch-settings/main';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { ValidateService } from '../../../services/validate.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { PlantingDialog } from '../../planting-settings/planting-dialog';\r\nimport { PersistentDatabase } from '../../../services/persistent-database';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { IRanchPermissions } from '../../ranch-settings/interfaces';\r\nimport { RanchExportModalComponent } from '../../ranch-export-modal/ranch-export-modal.component';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ranch-nav',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: ['main.scss']\r\n})\r\n\r\nexport class RanchNavComponent implements NavInterface, OnInit, OnDestroy {\r\n\ttabs: RanchTabComponent[] = [];\r\n\tranchSettings: RanchSettingsComponent;\r\n\r\n\t@Input()\r\n\tpublic title: string;\r\n\r\n\t@Input()\r\n\tpublic isRanchIdValid: boolean;\r\n\r\n\tdisplayMenu: boolean;\r\n\tdisplayPlantingsSearch = false;\r\n\tpublic selectedTab: RanchTabComponent;\r\n\tpublic permissions: IRanchPermissions;\r\n\tprivate showRanchSettings = false;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tpublic ranchIsValid = false;\r\n\r\n\tconstructor(private updateService: UpdateService,\r\n\t\tprivate persistentDatabase: PersistentDatabase,\r\n\t\tprivate validateService: ValidateService,\r\n\t\tprivate dialog: MatDialog) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.updateService.RanchPlantingsPermissions$.pipe(takeUntil(this._subscriptions$)).subscribe(data => {\r\n\t\t\tthis.permissions = data;\r\n\t\t\tthis.persistentDatabase.permissions = data;\r\n\t\t});\r\n\r\n\t\tthis.showRanchSettings = this.updateService.showRanchSettings;\r\n\r\n\t\tthis.updateService.missingRanchsettings$.pipe(takeUntil(this._subscriptions$)).subscribe(settings => {\r\n\t\t\tthis.ranchIsValid = settings.Valid;\r\n\t\t});\r\n\r\n\t\tthis.updateService.updatedRanch$.pipe(takeUntil(this._subscriptions$)).subscribe(ranch => {\r\n\r\n\t\t\tif (!ranch) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.title = ranch.Name;\r\n\t\t});\r\n\r\n\t\tthis.updateService.navigateToRanchSettings$.pipe(takeUntil(this._subscriptions$)).subscribe(temp => {\r\n\t\t\tthis.selectRanchSettings();\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 * This method is public because its called by another component\r\n\t */\r\n\tpublic addRanchSettings(ranchSettings: RanchSettingsComponent) {\r\n\t\tthis.ranchSettings = ranchSettings;\r\n\t\tthis.ranchSettings.toggleRanchSettings(this.showRanchSettings);\r\n\t\tthis.updateService.showRanchSettings = false;\r\n\t}\r\n\r\n\taddTab(tab: RanchTabComponent): void {\r\n\t\tif (!this.showRanchSettings) {\r\n\t\t\tif (!this.tabs.length) {\r\n\t\t\t\ttab.selected = true;\r\n\t\t\t\tthis.selectedTab = tab;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.tabs.push(tab);\r\n\t}\r\n\r\n\tpublic openPlantingModal(): void {\r\n\t\tlet data = {\r\n\t\t\tid: null as number\r\n\t\t};\r\n\r\n\t\tthis.dialog.open(PlantingDialog, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: data,\r\n\t\t\twidth: '700px',\r\n\t\t\tmaxWidth: 'unset'\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openRanchExportModal(): void {\r\n\t\tthis.dialog.open(RanchExportModalComponent,\r\n\t\t\t{\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tname: this.title\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tpublic selectRanchSettings(): void {\r\n\r\n\t\tthis.tabs.map((tab) => {\r\n\t\t\ttab.selected = false;\r\n\t\t})\r\n\t\tthis.ranchSettings.toggleRanchSettings(true);\r\n\t\tthis.displayMenu = false;\r\n\t}\r\n\r\n\tpublic selectTab(tab: RanchTabComponent): void {\r\n\t\tthis.ranchSettings.toggleRanchSettings(false);\r\n\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\tthis.selectedTab = tab;\r\n\t\tthis.persistentDatabase.selectedPlantingsTab = tab.tabTitle;\r\n\t\tthis.updateService.setPlantingsTabClicked(tab.tabTitle);\r\n\t}\r\n\r\n\tpublic toggleDisplayPlantingsSearch(): void {\r\n\t\tthis.displayPlantingsSearch = !this.displayPlantingsSearch;\r\n\t\tthis.updateService.setDisplayPlantingsSearch(this.displayPlantingsSearch);\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        &times;\r\n    </button>\r\n\r\n    <h4 mat-dialog-title>\r\n        {{plantingName}} - {{'Rainfall Data' | translate }}\r\n    </h4>\r\n\r\n    <div mat-dialog-content>\r\n        <form *ngIf=\"form\"\r\n            [formGroup]=\"form\">\r\n\r\n            <div>\r\n                <button *ngIf=\"hasPrevious()\"\r\n                    class=\"bk-button bk-button--small\"\r\n                    (click)=\"previousMonth($event)\">\r\n                    {{ 'Previous' | translate }}\r\n                </button>\r\n\r\n                <span class=\"bk-rainfall-chart__month\">\r\n                    {{displayMonth}}\r\n                </span>\r\n\r\n                <button *ngIf=\"hasNext()\"\r\n                    class=\"bk-button bk-button--small\"\r\n                    (click)=\"nextMonth($event)\">\r\n                    {{ 'Next' | translate }}\r\n                </button>\r\n            </div>\r\n\r\n            <p class=\"cm-rainfall-chart__zero-state\"\r\n                *ngIf=\"monthlyRainfallData.length === 0\">\r\n                <i class=\"fa fa-warning\"></i>\r\n                {{ 'Rainfall chart zero state text' | translate }}\r\n            </p>\r\n            <table *ngIf=\"monthlyRainfallData.length > 0\"\r\n                class=\"bk-modal__table\">\r\n\r\n                <thead>\r\n                    <tr>\r\n                        <th>\r\n                            {{'Date' | translate }}\r\n                        </th>\r\n                        <th>\r\n                            {{'Rainfall' | translate }} {{'inches' | translate}}\r\n                        </th>\r\n                        <th *ngFor=\"let station of rainfallData.WeatherStations\">\r\n                            {{station}}\r\n                        </th>\r\n                    </tr>\r\n                </thead>\r\n\r\n                <tbody>\r\n                    <ng-container *ngFor=\"let item of form.get('rainEvents').controls; let i = index\">\r\n                        <tr class=\"bk-modal__row\" >\r\n                            <td>\r\n                                {{ item.get('EventDate').value | date: 'M/d/yyyy' }}\r\n                            </td>\r\n                            <td>\r\n                                <input class=\"bk-input--short\"\r\n                                    type=\"number\"\r\n                                    step=\"0.01\"\r\n                                    (blur)=\"save(item)\"\r\n                                    [formControl]=\"item.get('RainfallAmount')\" />\r\n                            </td>\r\n                            <td *ngFor=\"let stationAmt of item.get('WeatherStationAmounts').value\">\r\n                                {{stationAmt}}\r\n                            </td>\r\n                        </tr>\r\n                    </ng-container>\r\n                </tbody>\r\n            </table>\r\n        </form>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n        <button *ngIf=\"monthlyRainfallData.length > 0 && hasRanchEditAccess === true\"\r\n            class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-button--float-left\"\r\n            (click)=\"resetRainfallData($event)\">\r\n            {{ (isResetting ? 'Resetting...' : 'Reset Rainfall Data') | translate }}\r\n            <img class='bk-button__loader' *ngIf='isResetting' src='/assets/images/loader-20px.gif'/>\r\n        </button>\r\n\r\n        <button class=\"bk-button bk-button--medium\"\r\n            (click)=\"close()\">\r\n            {{ 'Close' | translate }}\r\n        </button>\r\n    </div>\r\n</div>","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\r\nimport { PlantingService } from '../planting-settings/service';\r\nimport { ValidateService } from '../../services/validate.service';\r\nimport * as _ from 'underscore';\r\nimport { Modal } from '../../classes/modal';\r\nimport { DateUtility } from '../../classes/dateUtility';\r\nimport { PersistentDatabase } from '../../services/persistent-database';\r\nimport { RainfallDataViewModel, RainfallDataByMonth } from '../planting-settings/interfaces';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { RainWeatherEventPostModel, WeatherEventViewModel } from '../et-chart/interface';\r\nimport { RainfallChartForm } from './interface';\r\nimport { RainfallChartUpdateService } from './rainfall-chart.update.service';\r\nimport { PlantingRecalculatorService } from '../planting-recalculate-modal/plantingRecalculatorService';\r\nimport { TranslateService } from '../localization/service';\r\n\r\nexport type RainfallChartFields = 'Date' | 'Rainfall' | 'RainfallAmount' |\r\n\t'RainfallDate' | 'isFuture' | 'WeatherStationsRainfall';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'rainfall-data',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: [ 'main.scss']\r\n})\r\n\r\nexport class RainfallDataComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic displayMonth: string;\r\n\tpublic form: FormGroup;\r\n\tpublic hasRanchEditAccess: boolean;\r\n\tpublic isSaving = false;\r\n\tpublic isResetting = false;\r\n\tpublic loadingData = true;\r\n\tpublic monthlyRainfallData: RainfallDataByMonth[] = new Array();\r\n\r\n\tpublic plantingName: string;\r\n\tpublic rainfallData: RainfallDataViewModel;\r\n\r\n\tprivate _currentDate: Date;\r\n\tprivate _endDate: Date;\r\n\tprivate _plantingId: number;\r\n\tprivate _startDate: Date;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { id: number, name: string},\r\n\t\tprivate _dialogRef: MatDialogRef<RainfallDataComponent>,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _persistentDatabase: PersistentDatabase,\r\n\t\tprivate _plantingRecalculatorService: PlantingRecalculatorService,\r\n\t\tprivate _plantingService: PlantingService,\r\n\t\tprivate _updateService: RainfallChartUpdateService,\r\n\t\tprivate _translateService: TranslateService,\r\n\t\tprivate _validateService: ValidateService,\r\n\t\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis._clear();\r\n\r\n\t\tthis._configureClickOutside(this._subscriptions$, this._dialogRef);\r\n\r\n\t\tif (this._data) {\r\n\t\t\tthis._plantingId = this._data.id;\r\n\t\t\tthis.plantingName = this._data.name;\r\n\t\t}\r\n\r\n\t\tif (!this._persistentDatabase || !this._persistentDatabase.permissions) {\r\n\t\t\tthis.hasRanchEditAccess = false;\r\n\t\t} else {\r\n\t\t\tthis.hasRanchEditAccess = this._persistentDatabase.permissions.UserCanEditRanch;\r\n\t\t}\r\n\r\n\t\tthis._getRainfalldata(this._plantingId);\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\r\n\r\n\t\tthis._updateService.dialogClosed();\r\n\t}\r\n\r\n\tpublic confirmClose(): void {\r\n\t\tthis._dialogRef.close();\r\n\t\tthis._updateService.dialogClosed();\r\n\t}\r\n\r\n\tpublic hasNext(): boolean {\r\n\t\tlet today: Date;\r\n\r\n\t\tif (!this._currentDate || this._currentDate === null || !this._endDate || this._endDate === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!DateUtility.IsDate(this._currentDate) || !DateUtility.IsDate(this._endDate)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttoday = new Date();\r\n\r\n\t\tif (this._currentDate.getFullYear() > this._endDate.getFullYear()) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!(this._currentDate.getMonth() < this._endDate.getMonth()) && !(this._currentDate.getFullYear() < this._endDate.getFullYear())) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this._currentDate.getFullYear() > today.getFullYear()) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this._currentDate.getFullYear() < today.getFullYear()) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn this._currentDate.getMonth() < today.getMonth();\r\n\t}\r\n\r\n\tpublic hasPrevious(): boolean {\r\n\t\tif (!this._currentDate || this._currentDate === null || !this._startDate || this._startDate === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!DateUtility.IsDate(this._currentDate) || !DateUtility.IsDate(this._startDate)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this._currentDate.getFullYear() < this._startDate.getFullYear()) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this._currentDate.getFullYear() > this._startDate.getFullYear()) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn this._currentDate.getMonth() > this._startDate.getMonth();\r\n\t}\r\n\r\n\tprivate getMonth(date: Date): string {\r\n\t\tlet languageCode: string;\r\n\r\n\t\tlanguageCode = this._translateService.getStandardLanguageCode();\r\n\r\n\t\treturn date.toLocaleString(languageCode, { month: 'long'});\r\n\t}\r\n\r\n\tpublic async nextMonth(e: MouseEvent): Promise<void> {\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\r\n\t\tif (!DateUtility.IsDate(this._currentDate)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._currentDate.setMonth(this._currentDate.getMonth() + 1);\r\n\t\tthis.displayMonth = this.getMonth(this._currentDate) + ' - ' + this._currentDate.getFullYear();\r\n\t\tawait this._getMonthlyRainfallData(this._currentDate);\r\n\t\tthis._initializeForm(this.monthlyRainfallData);\r\n\t}\r\n\r\n\tpublic async previousMonth(e: MouseEvent): Promise<void> {\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\r\n\t\tif (!DateUtility.IsDate(this._currentDate)) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._currentDate.setMonth(this._currentDate.getMonth() - 1);\r\n\t\tthis.displayMonth = this.getMonth(this._currentDate) + ' - ' + this._currentDate.getFullYear();\r\n\t\tawait this._getMonthlyRainfallData(this._currentDate);\r\n\t\tthis._initializeForm(this.monthlyRainfallData);\r\n\t}\r\n\r\n\tpublic resetRainfallData(e: MouseEvent): Promise<void> {\r\n\t\tlet month: number;\r\n\t\tlet year: number;\r\n\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\r\n\t\tif (!this._currentDate || this._currentDate === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!DateUtility.IsDate(this._currentDate)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmonth = this._currentDate.getMonth() + 1;\r\n\t\tyear = this._currentDate.getFullYear();\r\n\r\n\t\tif (this.isResetting) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isResetting = true;\r\n\r\n\t\tthis._plantingService.resetRainfall(this._plantingId, month, year).then((res) => {\r\n\t\t\tthis._plantingRecalculatorService.processEventStream(res, this._plantingId);\r\n\r\n\t\t\tthis._getMonthlyRainfallData(this._currentDate).then(() => {\r\n\t\t\t\tthis.isResetting = false;\r\n\t\t\t\tthis._initializeForm(this.monthlyRainfallData);\r\n\t\t\t\tthis.form.markAsPristine();\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tpublic save(item: AbstractControl): void {\r\n\t\tlet rainRecord: RainWeatherEventPostModel;\r\n\r\n\t\tif (this.isSaving) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!item || item.get('RainfallAmount').value === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\trainRecord = {\r\n\t\t\tDate: item.get('EventDate').value,\r\n\t\t\tRain: item.get('RainfallAmount').value\r\n\t\t};\r\n\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis._plantingService.updateRainfall(this._plantingId, rainRecord).then((res) => {\r\n\t\t\tthis._plantingRecalculatorService.processEventStream(res, this._plantingId);\r\n\t\t\tthis.isSaving = false;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _clear(): void {\r\n\t\tthis._plantingId = null;\r\n\t\tthis.plantingName = null;\r\n\t\tthis._currentDate = null;\r\n\t\tthis._startDate = null;\r\n\t\tthis._endDate = null;\r\n\t\tthis.displayMonth = null;\r\n\t\tthis.rainfallData = null;\r\n\t\tthis.monthlyRainfallData = new Array();\r\n\t\tthis.loadingData = true;\r\n\t}\r\n\r\n\tprivate _configureClickOutside(subscriptions: Subject<boolean>,\r\n\t\tdialogRef: MatDialogRef<RainfallDataComponent>): void {\r\n\t\t// custom click outside behavior\r\n\t\tdialogRef.disableClose = true;\r\n\r\n\t\tdialogRef.backdropClick().pipe(takeUntil(subscriptions)).subscribe(() => {\r\n\t\t\tdialogRef.close();\r\n\t\t\tthis._updateService.dialogClosed();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _convertToWeatherEentViewModel(data: FormArray): WeatherEventViewModel[] {\r\n\t\tlet result: WeatherEventViewModel[];\r\n\r\n\t\tresult = [];\r\n\r\n\t\tfor (let control of data.controls) {\r\n\t\t\tlet item: RainfallChartForm;\r\n\r\n\t\t\tif (!control.dirty) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\titem = control.value;\r\n\r\n\t\t\tresult.push({\r\n\t\t\t\tEventDate: DateUtility.ConvertToUTC(item.EventDate),\r\n\t\t\t\tRainfallAmount: item.RainfallAmount,\r\n\t\t\t\tET: null\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 * Given a planting's start and end dates, find the most recent month that contains\r\n\t * valid rainfall data\r\n\t *\r\n\t * @param startDate\r\n\t * @param endDate\r\n\t */\r\n\tprivate _findMostRecentDate(startDate: Date, endDate: Date): Date {\r\n\t\tlet today: Date;\r\n\r\n\t\ttoday = new Date();\r\n\r\n\t\t// start date is after or on end date (invalid case)\r\n\t\tif (startDate.getTime() >= endDate.getTime()) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t// planting happened in the past\r\n\r\n\t\tif (today.getTime() > endDate.getTime()) {\r\n\t\t\treturn endDate;\r\n\t\t}\r\n\r\n\t\t// planting happens in the future\r\n\r\n\t\tif (today.getTime() < startDate.getTime()) {\r\n\t\t\treturn startDate;\r\n\t\t}\r\n\r\n\t\t// planting is happening now\r\n\r\n\t\treturn today;\r\n\t}\r\n\r\n\tprivate async _getMonthlyRainfallData(date: Date): Promise<void> {\r\n\t\tlet month: number;\r\n\t\tlet year: number;\r\n\t\tlet res: RainfallDataByMonth[];\r\n\r\n\t\tif (!date || date === null || !DateUtility.IsDate(date)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this._plantingId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmonth = date.getMonth() + 1;\r\n\t\tyear = date.getFullYear();\r\n\r\n\t\tres = await this._plantingService.getRainfallDataByMonth(this._plantingId, month, year);\r\n\r\n\t\tthis._processMonthlyRainfall(res);\r\n\t}\r\n\r\n\tprivate async _getRainfalldata(id: number): Promise<void> {\r\n\t\tlet res: RainfallDataViewModel;\r\n\t\tlet targetDate: Date;\r\n\r\n\t\tif (!id || id === null || !this._validateService.validateNumber(id)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tres = await this._plantingService.getRainfallData(id);\r\n\r\n\t\tif (!res || res === null || res === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.rainfallData = res;\r\n\r\n\t\tif (!this.rainfallData.StartDate || !this.rainfallData.EndDate) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._startDate = this.rainfallData.StartDate;\r\n\t\tthis._endDate = this.rainfallData.EndDate;\r\n\r\n\t\ttargetDate = this._findMostRecentDate(this._startDate, this._endDate);\r\n\t\tthis._setDisplayMonthString(targetDate);\r\n\r\n\t\tawait this._getMonthlyRainfallData(targetDate);\r\n\t\tthis._initializeForm(this.monthlyRainfallData);\r\n\t\tthis.loadingData = false;\r\n\t\tModal.resize();\r\n\t}\r\n\r\n\tprivate _initializeForm(data: RainfallDataByMonth[]): void {\r\n\t\tlet temp: FormGroup; // temp is used to avoid updating the form\r\n\t\t\t// multiple times that may trigger multile HTML redraws\r\n\r\n\t\ttemp = this._fb.group({\r\n\t\t\trainEvents: this._fb.array([])\r\n\t\t});\r\n\r\n\t\tfor (let item of data) {\r\n\t\t\t(temp.get('rainEvents') as FormArray).push(this._fb.group({\r\n\t\t\t\tEventDate: [item.RainfallDate], // item.Date converted to Date object\r\n\t\t\t\tRainfallAmount: [item.RainfallAmount],\r\n\t\t\t\tWeatherStationAmounts: [item.WeatherStationsRainfall] // used for reference\r\n\t\t\t}));\r\n\t\t}\r\n\r\n\t\tthis.form = temp;\r\n\t}\r\n\r\n\tprivate _processMonthlyRainfall(rawMontlyRainfallData: RainfallDataByMonth[]): void {\r\n\r\n\t\tlet temp: RainfallDataByMonth[];\r\n\t\tlet now: Date;\r\n\r\n\t\tif (!rawMontlyRainfallData) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttemp = new Array();\r\n\t\tnow = new Date();\r\n\t\tnow.setHours(0, 0, 0, 0);\r\n\r\n\t\tfor (let data of rawMontlyRainfallData) {\r\n\t\t\tif (!data) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (!data.Date || data.Date.split('/').length !== 3) {\r\n\t\t\t\tcontinue;\r\n\t\t\t} else {\r\n\t\t\t\tdata.RainfallDate = new Date(parseInt(data.Date.split('/')[2], 10),\r\n\t\t\t\t\tparseInt(data.Date.split('/')[0], 10) - 1, parseInt(data.Date.split('/')[1], 10));\r\n\r\n\t\t\t\tif (data.RainfallDate > now) {\r\n\t\t\t\t\tdata.isFuture = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdata.isFuture = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\ttemp.push(data);\r\n\t\t}\r\n\r\n\t\ttemp = temp.sort((a, b) => {\r\n\t\t\tif (a.RainfallDate.getTime() < b.RainfallDate.getTime()) {\r\n\t\t\t\treturn 1;\r\n\t\t\t} else if (a.RainfallDate.getTime() > b.RainfallDate.getTime()) {\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\tthis.monthlyRainfallData = temp;\r\n\t}\r\n\r\n\tprivate _setDisplayMonthString(date: Date): void {\r\n\t\tif (!date || date === null || !DateUtility.IsDate(date)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._currentDate = new Date();\r\n\t\tthis._currentDate.setMonth(date.getMonth());\r\n\t\tthis._currentDate.setFullYear(date.getFullYear());\r\n\t\tthis.displayMonth = this.getMonth(this._currentDate) + ' - ' + this._currentDate.getFullYear();\r\n\t}\r\n}\r\n","<div class=\"bk-dialog\">\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    <h4 mat-dialog-title\r\n        *ngIf=\"step == 1\">\r\n        {{'Export And Download Ranch Data' | translate }}\r\n    </h4>\r\n    <h4 mat-dialog-title\r\n        *ngIf=\"step == 2\">\r\n        {{'Preparing Ranch Data' | translate }}\r\n    </h4>\r\n    <h4 mat-dialog-title\r\n        *ngIf=\"step == 3\">\r\n        {{'Ranch Data Export Complete' | translate }}\r\n    </h4>\r\n\r\n    <div mat-dialog-content>\r\n        <div *ngIf=\"step == 1\">\r\n            <div class=\"bk-modal__paragraph\">\r\n                {{'Ranch Export Part 1 Text 1' | translate}}\r\n            </div>\r\n            <div class=\"bk-modal__paragraph bk-modal__paragraph--small\">\r\n                {{'Ranch Export Part 1 Text 2' | translate}}\r\n            </div>\r\n            <div class=\"bk-modal__paragraph bk-modal__paragraph--small\">\r\n                {{'Ranch Export Part 1 Text 3' | translate}}\r\n            </div>\r\n\r\n            <mat-radio-group\r\n                aria-label=\"\"\r\n                name=\"isByYear\"\r\n                (ngModelChange)=\"toggleYear($event)\" \r\n                [(ngModel)]=\"isByYear\">\r\n\r\n                <mat-radio-button [value]=\"false\"\r\n                    name=\"isByYear\">\r\n                    {{ 'Export All Plantings' | translate }}\r\n                </mat-radio-button>\r\n\r\n                <mat-radio-button class=\"mat-radio-button--left-margin\"\r\n                    [value]=\"true\"\r\n                    name=\"isByYear\">\r\n                    {{ 'Export by Year' | translate }}\r\n                </mat-radio-button>\r\n            </mat-radio-group>\r\n\r\n            <ng-container *ngIf=\"isByYear\">\r\n                <label class=\"bk-modal__label\">\r\n                    {{'Select a Year' | translate }}\r\n                </label>\r\n                <select class=\"bk-modal__field bk-select--medium\"\r\n                    [(ngModel)]=\"year\"\r\n                    (ngModelChange)=\"updateLots(year)\">\r\n\r\n                    <option value=\"0\" disabled>\r\n                        {{'Select One' | translate }}\r\n                    </option>\r\n\r\n                    <option *ngFor=\"let validYear of validYears\"\r\n                        [ngValue]=\"validYear\">\r\n                        {{validYear}}\r\n                    </option>\r\n                </select>\r\n            </ng-container>\r\n\r\n            <label class=\"bk-modal__label\">\r\n                {{ 'Planting Area' | translate}}\r\n            </label>\r\n\r\n            <select class=\"bk-modal__field bk-select--medium\"\r\n                [(ngModel)]=\"lotId\">\r\n            \r\n                <option value=\"0\" disabled>\r\n                    {{'All' | translate }}\r\n                </option>\r\n\r\n                <option *ngFor=\"let lot of lots\"\r\n                    [ngValue]=\"lot.Id\">\r\n                    {{lot.Name}}\r\n                </option>\r\n            </select>\r\n        </div>\r\n        <div *ngIf=\"step == 2\">\r\n            <div class=\"bk-modal__paragraph\">\r\n                {{'Ranch Export Part 2 Text 1' | translate}}\r\n            </div>\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        <div *ngIf=\"step == 3\">\r\n            <div class=\"bk-modal__paragraph\">\r\n                {{'Ranch Export Part 3 Text 1' | translate}}\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div mat-dialog-actions align=\"end\">\r\n        <button *ngIf=\"step == 1\"\r\n            class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"close()\">\r\n            {{'Cancel' | translate }}\r\n        </button>\r\n        <button *ngIf=\"step == 2\"\r\n            class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"cancel()\">\r\n            {{'Cancel' | translate }}\r\n        </button>\r\n        <button *ngIf=\"step == 3\"\r\n            class=\"bk-button bk-button--medium bk-button--text-only\"\r\n            (click)=\"close()\">\r\n            {{'Done' | translate }}\r\n        </button>\r\n        <button *ngIf=\"step == 1\"\r\n            [disabled]=\"isByYear === true && !year\"\r\n            class=\"bk-button bk-button--medium\"\r\n            (click)=\"startDataExport()\">\r\n            {{'Export And Download Data' | translate }}\r\n        </button>\r\n    </div>\r\n</div>","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { RanchService } from '../ranch-settings/service';\r\nimport { UpdateService } from '../../services/update.service';\r\nimport { IIdNamePair } from '../../interfaces/abstract';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ranch-export-modal',\r\n\ttemplateUrl: 'ranch-export-modal.component.html'\r\n})\r\n\r\nexport class RanchExportModalComponent implements OnInit {\r\n\tprivate ranchName = '';\r\n\tpublic step = 1;\r\n\tpublic isByYear = false;\r\n\tpublic year = 0;\r\n\tpublic validYears: number[] = null;\r\n\tpublic lots: IIdNamePair[] = null;\r\n\tpublic lotId = 0;\r\n\r\n\tconstructor(\r\n\t\tprivate _dialogRef: MatDialogRef<RanchExportModalComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { name: string },\r\n\t\tprivate ranchService: RanchService,\r\n\t\tprivate updateService: UpdateService) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.step = 1;\r\n\t\tthis.year = 0;\r\n\t\tthis.lotId = 0;\r\n\t\tthis.lots = null;\r\n\t\tthis.validYears = null;\r\n\t\tthis.isByYear = false;\r\n\r\n\t\tif (this._data) {\r\n\t\t\tthis.ranchName  = this._data.name;\r\n\t\t}\r\n\r\n\t\tthis.ranchService.getLotsMinimal(this.updateService.currentRanchId).then(response => {\r\n\t\t\tthis.lots = response;\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\tpublic cancel(): void {\r\n\t\tthis.updateService.cancelRanchDataExport = true;\r\n\t\tthis.close();\r\n\t}\r\n\r\n\tpublic toggleYear(isByYear: boolean): void {\r\n\t\tif (isByYear === true && this.validYears === null) {\r\n\t\t\tthis.ranchService.getExcelYears(this.updateService.currentRanchId).then(response => {\r\n\t\t\t\tthis.validYears = response;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n     * When user updates year, update lots list, user only sees lots that contain plantings\r\n     * @param year\r\n     */\r\n\tpublic updateLots(year: number): void {\r\n\t\tthis.ranchService.getLotsMinimal(this.updateService.currentRanchId, year).then(response => {\r\n\t\t\tthis.lots = response;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic startDataExport(): void {\r\n\t\tthis.step = 2;\r\n\t\tthis.ranchService.exportDataToExcel(this.ranchName, this.year, this.lotId)\r\n\t\t\t.then(response => {\r\n\t\t\t\tthis.step = 3;\r\n\t\t\t});\r\n\t}\r\n}\r\n","<ng-container *ngIf=\"selected\">\r\n    <!-- Header, top right -->\r\n    <div class=\"settings-head bk-ranch-settings-header\">\r\n        <h5 class=\"bk-ranch-settings-header__title bk-text--gray\">\r\n            {{'Settings' | translate }}\r\n        </h5>\r\n        <button class=\"bk-button bk-ranch-settings-header__button bk-button--gray-outline\"\r\n            (click)=\"openRanchModalComponent()\">\r\n            {{'Edit Info' | translate }}\r\n        </button>\r\n        <div *ngIf=\"basicInfo\"\r\n            class=\"bk-ranch-settings-header__links\">\r\n            <div class=\"bk-ranch-settings-header__meta\">\r\n                <i class=\"bk-ranch-settings-header__icon fa fa-map-marker cm-icon--with-text\"></i>\r\n                {{basicInfo.Coordinates}}\r\n            </div>\r\n            <div class=\"bk-ranch-settings-header__meta\">\r\n                <i class=\"bk-ranch-settings-header__icon fa fa-expand cm-icon--with-text\"></i>\r\n                {{basicInfo.Acres}} {{'Acres' | translate }}\r\n            </div>\r\n            <div class=\"bk-ranch-settings-header__name\"\r\n                matTooltip=\"Email ranch owner\"\r\n                (click)=\"openEmailModalComponent(basicInfo.RanchOwnerEmail, basicInfo.RanchOwnerFullName, $event)\">\r\n                <i class=\"bk-clickable bk-ranch-settings-header__icon cm-icon--with-text fa fa-envelope\">\r\n                </i>\r\n                <a href=\"javascript:void(0);\">\r\n                    {{basicInfo.RanchOwnerFullName}}\r\n                </a>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"bk-dashboard__container bk-ranch-settings__columns-container\">\r\n        <!-- Missing ranch setting warning text -->\r\n        <div class=\"bk-ranch-settings__validations\"\r\n            *ngIf=\"validationStates !== null && !validationStates.Valid\">\r\n            <i class=\"fa fa-warning\"></i>\r\n            <div class=\"bk-ranch-settings__validation-text\">\r\n                <h4 class=\"bk-ranch-settings__validation-title\">\r\n                    {{'Ranch Setup Text 1' | translate}}\r\n                </h4>\r\n                <h5 class=\"bk-ranch-settings__validation-subtitle\">\r\n                    {{'Ranch Setup Text 2' | translate}}\r\n                </h5>\r\n                <div class=\"bk-ranch-settings__validation-item\"\r\n                    *ngFor=\"let value of validationStates.MissingValues\">\r\n                    {{value | translate}}\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div class=\"settings-columns bk-ranch-settings__columns\">\r\n            <!-- ranch members -->\r\n            <div class=\"settings-column members-container\">\r\n                <div class=\"settings-area-well bk-tile bk-tile--border-top\">\r\n                    <div class=\"bk-tile__header\">\r\n                        <div class=\"bk-tile__header-count\">\r\n                            {{members?.length}}\r\n                        </div>\r\n                        <h4 class=\"bk-tile__header-title\">\r\n                            {{'Ranch Members' | translate }}\r\n                        </h4>\r\n                        \r\n                        <button class=\"bk-button bk-button--round bk-button--round-small bk-button--corner\"\r\n                            (click)=\"openAddMemberModal()\"\r\n                            matTooltip=\"{{'Add a Member' | translate }}\">\r\n                            +\r\n                        </button>\r\n                    </div>\r\n                    <div class=\"bk-tile__scroll-area\">\r\n                        <ng-container *ngIf=\"members\">\r\n                            <button *ngIf=\"members?.length == 0\"\r\n                                class=\"bk-button bk-button--center-top-margin\" \r\n                                (click)=\"openAddMemberModal()\">\r\n                                {{'Add a Member' | translate }}\r\n                            </button>\r\n                            <div class=\"member one-column-unit bk-tile__section\"\r\n                                *ngFor=\"let member of members | orderBy: autoSortMembers('UserFullName')\"\r\n                                (click)=\"openEditMemberModal(member)\">\r\n                                <div class=\"bk-tile__section-member-name\">\r\n                                    {{member.UserFullName}}\r\n                                </div>\r\n                                <div class=\"bk-tile__section-member-icon\"\r\n                                    matTooltip=\"Email {{member.UserFullName}}\"\r\n                                    (click)=\"openEmailModalComponent(member.Email, member.UserFullName, $event)\">\r\n                                    <i class=\"fa fa-envelope\"></i>\r\n                                </div>\r\n                            </div>\r\n                        </ng-container>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n\t\t\t<!-- lots -->\r\n            <div class=\"settings-column lots-container\">\r\n                <div class=\"settings-area-well bk-tile bk-tile--border-top\">\r\n\t\t\t\t\t<div class=\"bk-tile__header\">\r\n                        <div class=\"bk-tile__header-count\">\r\n                            {{lots?.length}}\r\n                        </div>\r\n\t\t\t\t\t\t<h4 class=\"bk-tile__header-title\">\r\n                            {{'Lots' | translate }}\r\n                        </h4>\r\n                        <!--\r\n\t\t\t\t\t\t<div class=\"bk-tile__header-icon\">\r\n\t\t\t\t\t\t\t<svg-lot></svg-lot>\r\n\t\t\t\t\t\t</div>\r\n                        -->\r\n\t\t\t\t\t\t<div class=\"bk-tile__header-subtitle\">\r\n\t\t\t\t\t\t\t{{'ranch settings tots text 1' | translate }}\r\n\t\t\t\t\t\t</div>\r\n                        <button class=\"bk-button bk-button--round bk-button--round-small bk-button--corner\"\r\n                            (click)=\"openLotModal()\"\r\n                            matTooltip=\"{{'Add a Lot' | translate }}\">\r\n                            +\r\n                        </button>\r\n\t\t\t\t\t</div>\r\n                    <div class=\"bk-tile__scroll-area\">\r\n                        <ng-container *ngIf=\"lots\">\r\n                            <button *ngIf=\"lots?.length == 0\"\r\n                                class=\"bk-button bk-button--center-top-margin\" \r\n                                (click)=\"openLotModal()\">\r\n                                {{'Add a Lot' | translate }}\r\n                            </button>\r\n                            <div class=\"lot two-column-unit bk-tile__section bk-tile__section-lot\"\r\n                                *ngFor=\"let lot of lots | orderBy: autoSortMLots('Name')\"\r\n                                (click)=\"openLotModal(lot.Id)\">\r\n                                <div class=\"bk-tile__section-label\">\r\n                                    {{lot.Name}}\r\n                                </div>\r\n                                <div class=\"bk-tile__section-text\">\r\n                                    {{lot.Acres}} {{'acres' | translate }}\r\n                                </div>\r\n                            </div>\r\n                        </ng-container>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n\t\t\t<!-- fertilizers -->\r\n            <div class=\"settings-column fertilizer-container\">\r\n                <div class=\"settings-area-well bk-tile bk-tile--border-top\">\r\n                    <div class=\"bk-tile__header\">\r\n                        <div class=\"bk-tile__header-count\">\r\n                            {{fertilizers?.length}}\r\n                        </div>\r\n                        <h4 class=\"bk-tile__header-title\">\r\n                            {{'Fertilizers' | translate }}\r\n                        </h4>\r\n                        \r\n                        <button class=\"bk-button bk-button--round bk-button--round-small bk-button--corner\"\r\n                            (click)=\"openFertilizerModal(true)\"\r\n                            matTooltip=\"{{'Add a Fertilizer' | translate }}\">\r\n                            +\r\n                        </button>\r\n                    </div>\r\n                    <div class=\"bk-tile__scroll-area\">\r\n                        <ng-container *ngIf=\"fertilizers\">\r\n                            <button *ngIf=\"fertilizers?.length == 0\"\r\n                                class=\"bk-button bk-button--center-top-margin\" \r\n                                (click)=\"openFertilizerModal(true)\">\r\n                                {{'Add a Fertilizer' | translate }}\r\n                            </button>\r\n                            <div [class.bk-tile__section--no-edit]=\"!fertilizer.Editable\"\r\n                                class=\"bk-tile__section one-column-unit\"\r\n                                *ngFor=\"let fertilizer of fertilizers | orderBy: autoSortFertlizers('Name')\"\r\n                                (click)=\"openFertilizerModal(fertilizer.Editable,fertilizer.Id)\">\r\n                                <div class=\"bk-tile__section-fertilizer-text\">\r\n                                    <div class=\"bk-tile__section-label\"\r\n                                        [class.bk-tile__section-label--no-edit]=\"!fertilizer.Editable\">\r\n                                        {{fertilizer.Name}}\r\n                                        <span class=\"bk-tile__section-label-text\"\r\n                                            *ngIf=\"fertilizer.FormulationType\">\r\n                                            {{fertilizer.FormulationType.Name}}\r\n                                        </span>\r\n                                    </div>\r\n                                    <div class=\"bk-tile__section-text\">\r\n                                        {{fertilizer.PercentageN}}% {{'Nitrogen' | translate }}\r\n                                    </div>\r\n                                    <div class=\"bk-tile__section-text\"\r\n                                        *ngIf=\"fertilizer.FormulationType && fertilizer.FormulationType.Id === eFertilizerFormulationTypes.WET\">\r\n                                        {{fertilizer.LbsPerGallon}} {{'Lbs/gal (liquid)' | translate }}\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"bk-tile__section-fertilizer-count-container\">\r\n                                    <div class=\"bk-tile__section-fertilizer-count-text\">\r\n                                        {{'Used' | translate }}\r\n                                    </div>\r\n                                    <div class=\"bk-tile__section-fertilizer-count content-needed\">\r\n                                        {{fertilizer.Usage}}\r\n                                    </div>\r\n                                    <div class=\"bk-tile__section-fertilizer-count-text\">\r\n                                        {{'Times' | translate }}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </ng-container>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <!-- Weather Stations -->\r\n            <div *ngIf=\"basicInfo && basicInfo.WeatherAPI_Id !== WeatherAPIs.OpenET\" \r\n                class=\"settings-column weather-and-wells-container\">\r\n                <div class=\"settings-area-well bk-tile bk-tile--border-top\">\r\n                    <div class=\"bk-tile__header\">\r\n                        <div class=\"bk-tile__header-count\">\r\n                            {{weatherStations?.length}}\r\n                        </div>\r\n                        <h4 class=\"bk-tile__header-title\">\r\n                            {{'Weather Stations' | translate }}\r\n                        </h4>\r\n                        <!--<div class=\"bk-tile__header-icon\">\r\n                            <svg-weather></svg-weather>\r\n                        </div>-->\r\n                        \r\n                        <div class=\"bk-clear\"></div>\r\n                        <div class=\"bk-tile__header-subtitle bk-tile__header-subtitle-stations\">\r\n                            <div class=\"bk-tile__header-subtitle-stations--part\"\r\n                                *ngIf=\"basicInfo\">\r\n                                <ng-container *ngIf=\"basicInfo.UseSpatialCIMIS\">\r\n                                    {{'ET data from Spatial CIMIS' | translate }}\r\n                                </ng-container>\r\n                                <ng-container *ngIf=\"!basicInfo.UseSpatialCIMIS\">\r\n                                    {{'ET data from weather station(s)' | translate }}\r\n                                </ng-container>\r\n                                <br />\r\n                                <ng-container *ngIf=\"basicInfo.UseCIMISAverageMode\">\r\n                                    <i>{{'Average mode' | translate }}</i>\r\n                                </ng-container>\r\n                                <ng-container *ngIf=\"!basicInfo.UseCIMISAverageMode\">\r\n                                    <i>{{'Sequential mode' | translate }}</i>\r\n                                </ng-container>\r\n                            </div>\r\n                            <div class=\"bk-tile__header-subtitle-stations--part bk-ranch-settings-cimis__icon-container\">\r\n                                <a href=\"javascript:void(0);\"\r\n                                    (click)=\"openCimisOptionsModal()\"\r\n                                    class=\"bk-ranch-settings-cimis__link\">\r\n                                    <i class=\"bk-ranch-settings-cimis__icon fa fa-pencil\"\r\n                                        matTooltip=\"Edit Weather Data options\"></i>\r\n                                </a>\r\n                            </div>\r\n                        </div>\r\n                        <button class=\"bk-button bk-button--round bk-button--round-small bk-button--corner\"\r\n                            (click)=\"openWeatherStationModal()\"\r\n                            matTooltip=\"{{'Add a Weather Station' | translate }}\">\r\n                            +\r\n                        </button>\r\n                    </div>\r\n                    <div class=\"bk-tile__scroll-area\"\r\n                        [dragula]=\"bagName\"\r\n                        [dragulaModel]=\"weatherStations\">\r\n                        <ng-container *ngIf=\"weatherStations\">\r\n                            <button *ngIf=\"weatherStations?.length == 0\"\r\n                                class=\"bk-button bk-button--center-top-margin\" \r\n                                (click)=\"openWeatherStationModal()\">\r\n                                {{'Add a Weather Station' | translate }}\r\n                            </button>\r\n                            <div matTooltip=\"Click to view or Click & Drag to re-order\"\r\n                                class=\"bk-tile__section weather-station one-column-unit\"\r\n                                *ngFor=\"let weatherStation of weatherStations;let i = index\"\r\n                                (click)=\"onWeatherStationEdit(weatherStation.Id)\">\r\n                                <div class=\"bk-tile__section-weather-number content-needed\">\r\n                                    {{i+1}}\r\n                                </div>\r\n                                <div class=\"bk-tile__section-weather-text\">\r\n                                    <div class=\"bk-tile__section-label\">\r\n                                        {{weatherStation.Name}} (#{{weatherStation.External_Id}})\r\n                                    </div>\r\n                                    <div class=\"bk-tile__section-text\">\r\n                                        {{weatherStation.NearestCity}}, {{weatherStation.County}} - {{weatherStation.Distance}} {{'miles away' | translate }}\r\n                                        <i *ngIf='weatherStation.ActiveStation &&\r\n                                            weatherStation.ActiveStation.Active === false'\r\n                                            class='fa fa-warning'\r\n                                            matTooltip='This weather station is deactivated'>\r\n                                        </i>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </ng-container>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <!-- Wells -->\r\n            <div class=\"settings-column weather-and-wells-container\">\r\n                <div class=\"settings-area-well bk-tile bk-tile--border-top\">\r\n                    <div class=\"bk-tile__header\">\r\n                        <div class=\"bk-tile__header-count\">\r\n                            {{wells?.length}}\r\n                        </div>\r\n                        <h4 class=\"bk-tile__header-title\">\r\n                            {{'Water Sources' | translate }}\r\n                        </h4>\r\n                        <!--<div class=\"bk-tile__header-icon\">\r\n                            <svg-well></svg-well>\r\n                        </div>\r\n                        -->\r\n                        \r\n                        <div class=\"bk-tile__header-subtitle\">\r\n                            {{'Includes Wells and Canals' | translate}}<BR>\r\n                            {{'Wells Text 1' | translate }}<br />\r\n                            {{'Wells Text 2' | translate }}\r\n                        </div>\r\n                        <button class=\"bk-button bk-button--round bk-button--round-small bk-button--corner\"\r\n                            (click)=\"openWellModal()\"\r\n                            matTooltip=\"{{'Add a Well' | translate }}\">+</button>\r\n                    </div>\r\n                    <div class=\"bk-tile__scroll-area\">\r\n                        <ng-container *ngIf=\"wells\">\r\n                            <button *ngIf=\"wells?.length == 0\"\r\n                                class=\"bk-button bk-button--center-top-margin\" \r\n                                (click)=\"openWellModal()\">\r\n                                {{'Add a Well' | translate }}\r\n                            </button>\r\n                            <div class=\"bk-tile__section well one-column-unit\"\r\n                                *ngFor=\"let well of wells;let i = index\"\r\n                                (click)=\"openWellModal(well.Id)\">\r\n                                <div class=\"bk-tile__section-weather-number\">\r\n                                    {{i+1}}\r\n                                </div>\r\n                                <div class=\"bk-tile__section-weather-text\">\r\n                                    <div class=\"bk-tile__section-label\">\r\n                                        {{well.Name}}\r\n                                    </div>\r\n                                    <div class=\"bk-tile__section-text\">\r\n                                        <span *ngIf=\"well.ElectricalConductivity !== null\">\r\n                                            {{well.ElectricalConductivity}} {{'dS/m' | translate }} - \r\n                                        </span>\r\n                                        {{well.NitrogenPPM}} {{'ppm' | translate }}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </ng-container>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <!-- commodity types -->\r\n            <div class=\"settings-column commodity-container\">\r\n                <div class=\"settings-area-well bk-tile bk-tile--border-top\">\r\n                    <div class=\"bk-tile__header\">\r\n                        <div class=\"bk-tile__header-count\">\r\n                            {{commodityTypes?.length}}\r\n                        </div>\r\n                        <h4 class=\"bk-tile__header-title\">\r\n                            {{'Commodities' | translate }}\r\n                        </h4>\r\n                        \r\n                        <button *ngIf=\"commodityTypes !== null && maxActiveCommodityTypes > commodityTypes.length\"\r\n                            class=\"bk-button bk-button--round bk-button--round-small bk-button--corner\"\r\n                            (click)=\"openCommodityTypeModal()\"\r\n                            matTooltip=\"{{'Add a Commodity Type' | translate }}\">+</button>\r\n                    </div>\r\n                    <div class=\"bk-tile__scroll-area\">\r\n                        <ng-container *ngIf=\"commodityTypes\">\r\n                            <button *ngIf=\"commodityTypes?.length == 0\"\r\n                                class=\"bk-button bk-button--center-top-margin\" \r\n                                (click)=\"openCommodityTypeModal()\">\r\n                                {{'Add a Commodity Type' | translate }}\r\n                            </button>\r\n                            <div class=\"bk-tile__section well one-column-unit\"\r\n                                *ngFor=\"let commodityType of commodityTypes\"\r\n                                (click)=\"openCommodityTypeModal(commodityType, commodityType.PlantingsCount)\">\r\n                                <div class=\"bk-tile__section-weather-text\">\r\n                                    <div class=\"bk-tile__section-label\">\r\n                                        {{commodityType.Name | translate}} <mat-icon class=\"bk-tile__section__mat-icon\"\r\n                                            matTooltip=\"This commodity type is experimental\"\r\n                                            *ngIf=\"!commodityType.IsActive\">construction</mat-icon>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </ng-container>\r\n                    </div>\r\n                </div>\r\n                <!-- <commodity-type-modal></commodity-type-modal> -->\r\n            </div>\r\n        </div>\r\n    </div>\r\n</ng-container> ","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\r\nimport { DragulaService } from 'ng2-dragula';\r\n\r\nimport { RanchNavComponent } from '../plantings/top-nav/main';\r\nimport { RanchService } from './service';\r\nimport { FertilizerModelService } from './modals/fertilizer/service';\r\nimport { UpdateService, IRanchSettings } from '../../services/update.service';\r\n\r\nimport { IRanchBasicInfoViewModel, ICIMISOptions, IRanchSettingsValidationStates, eRanchSettingNames,\r\n\tIRanchUserListItem, IWeatherStationCurrentModel, IRanchLotJSON, IRanchLotJSONModel } from './interfaces';\r\n\r\nimport { eFertilizerFormulationTypes, eWeatherAPIs } from '../../interfaces/constants';\r\nimport { ICommodityTypesRanchJSON } from '../../models/commodity-type/interfaces';\r\nimport { CommodityService } from '../../models/commodity-type/service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { CommodityTypeDialog } from './modals/commodityType/dialog';\r\nimport { CommodityTypeCreateDialog } from './modals/commodityType/create';\r\nimport { Subject } from 'rxjs';\r\nimport { IRanchLotModel } from './modals/lot/interfaces';\r\nimport { IWell } from '../../models/planting-well/well.interface';\r\nimport { EmailRanchOwnerDialog } from './modals/email/email';\r\nimport { FertilizerViewDialog } from './modals/fertilizer/fertilizer.view.dialog';\r\nimport { FertilizerEditDialog } from './modals/fertilizer/fertilizer.edit.dialog';\r\nimport { FertilizerCreateDialog } from './modals/fertilizer/fertilizer.create.dialog';\r\nimport { IFertilizer } from './modals/fertilizer/interfaces';\r\nimport { WeatherStationsService } from '../../models/weather-station-stats/service';\r\nimport { RanchDialog } from './modals/ranch/main';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { RanchWellModalComponent } from './modals/well/main';\r\nimport { RanchLotModalComponent } from './modals/lot/main';\r\nimport { RanchWeatherStationModalComponent } from './modals/weather-station/main';\r\nimport { CimisOptionsModalComponent } from './modals/cimis-options/main';\r\nimport { RanchMemberModalComponent } from './modals/member/main';\r\nimport { WeatherStationEditComponent } from './modals/weather-station/edit';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ranch-settings',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: ['main.css'],\r\n})\r\n\r\nexport class RanchSettingsComponent implements OnInit, OnDestroy {\r\n\t@Input()\r\n\tranchId: string; // this is ranch GUID, not Id\r\n\r\n\tselected = false; // if true, ranch settings is visible - controlled\r\n\t// by cogwheel\r\n\tmemberSort = false;\r\n\tlotSort = false;\r\n\tfertilizerSort = false;\r\n\r\n\tpublic basicInfo: IRanchBasicInfoViewModel;\r\n\tpublic maxActiveCommodityTypes: number; // number of active commodity types in the system\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic members: IRanchUserListItem[] = new Array();\r\n\tpublic lots: IRanchLotModel[] = new Array();\r\n\tpublic fertilizers: IFertilizer[] = new Array();\r\n\tpublic weatherStations: IWeatherStationCurrentModel[] = new Array();\r\n\tpublic wells: IWell[] = new Array();\r\n\tpublic commodityTypes: ICommodityTypesRanchJSON[] = new Array();\r\n\r\n\tpublic validationStates: IRanchSettingsValidationStates;\r\n\r\n\tprivate bagName: string;\r\n\r\n\tpublic eFertilizerFormulationTypes = eFertilizerFormulationTypes;\r\n\tpublic WeatherAPIs = eWeatherAPIs;\r\n\r\n\tconstructor(private ranchNavComponent: RanchNavComponent,\r\n\t\tprivate ranchService: RanchService,\r\n\t\tprivate _weatherStationService: WeatherStationsService,\r\n\t\tprivate commodityService: CommodityService,\r\n\t\tprivate fertilizerModelService: FertilizerModelService,\r\n\t\tprivate updateService: UpdateService,\r\n\t\tprivate dragulaService: DragulaService,\r\n\t\tprivate dialog: MatDialog,\r\n\t) {\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.updateService.RanchSettingsUpdated$.pipe(takeUntil(this._subscriptions$)).subscribe((updated: string) => {\r\n\t\t\tif (this.ranchId === this.updateService.currentRanchId) {\r\n\t\t\t\tswitch (updated) {\r\n\t\t\t\t\tcase eRanchSettingNames.users:\r\n\t\t\t\t\t\tthis.getRanchUsers();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase eRanchSettingNames.lots:\r\n\t\t\t\t\t\tthis.getRanchLots();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase eRanchSettingNames.wells:\r\n\t\t\t\t\t\tthis.getRanchWells();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase eRanchSettingNames.fertilizers:\r\n\t\t\t\t\t\tthis.getRanchFertilizers();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase eRanchSettingNames.weatherStations:\r\n\t\t\t\t\t\tthis.getRanchWeatherStations();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase eRanchSettingNames.commodityTypes:\r\n\t\t\t\t\t\tthis.getCommodityTypes();\r\n\t\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.updateService.CIMISOptionsUpdated$.pipe(takeUntil(this._subscriptions$)).subscribe((cimisOptions: ICIMISOptions) => {\r\n\t\t\tthis.basicInfo.UseSpatialCIMIS = cimisOptions.UseSpatialCIMIS;\r\n\t\t\tthis.basicInfo.UseCIMISAverageMode = cimisOptions.UseCIMISAverageMode;\r\n\t\t});\r\n\r\n\t\tthis.updateService.missingRanchsettings$.pipe(takeUntil(this._subscriptions$)).subscribe(settings => {\r\n\t\t\tthis.validationStates = settings;\r\n\t\t});\r\n\r\n\t\tthis.bagName = Date.now() + '-bag';\r\n\r\n\t\tthis.dragulaService.setOptions(this.bagName, {\r\n\t\t\trevertOnSpill: true\r\n\t\t});\r\n\r\n\t\tthis.dragulaService.dropModel.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis._weatherStationService.setPriorityOrder(this.weatherStations);\r\n\t\t});\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.selected = false;\r\n\t\tthis.ranchNavComponent.addRanchSettings(this);\r\n\r\n\t\tthis.validationStates = {\r\n\t\t\tMembers: null,\r\n\t\t\tFertilizers: null,\r\n\t\t\tLots: null,\r\n\t\t\tWeatherStations: null,\r\n\t\t\tWells: null,\r\n\t\t\tCommodityTypes: null,\r\n\t\t\tValid: null,\r\n\t\t\tMissingValues: []\r\n\t\t};\r\n\r\n\t\tthis.updateService.ranchSettings$.pipe(takeUntil(this._subscriptions$)).subscribe(settings => {\r\n\t\t\tthis.members = settings.members;\r\n\t\t\tthis.lots = settings.lots;\r\n\t\t\tthis.fertilizers = settings.fertilizers;\r\n\t\t\tthis.weatherStations = settings.weatherStations;\r\n\t\t\tthis.wells = settings.wells || new Array();\r\n\t\t})\r\n\r\n\t\tthis.updateService.updatedRanch$.pipe(takeUntil(this._subscriptions$)).subscribe(ranch => {\r\n\r\n\t\t\tif (!ranch) {\r\n\t\t\t\tthrow new Error('ranch data is empty after ranch is updated');\r\n\t\t\t} else if (!this.basicInfo) {\r\n\t\t\t\tthrow new Error('basicInfo is empty');\r\n\t\t\t}\r\n\r\n\t\t\tthis.basicInfo.Coordinates = ranch.Coordinates;\r\n\t\t\tthis.basicInfo.Acres = ranch.Acres;\r\n\t\t\tthis.basicInfo.WeatherAPI_Id = ranch.WeatherAPI_Id;\r\n\t\t\tthis._validateWeatherStations()\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy() {\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 openEmailModalComponent(email: string, recipient: string, event: Event) {\r\n\t\tevent.stopPropagation();\r\n\r\n\t\tthis.dialog.open(EmailRanchOwnerDialog, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: {\r\n\t\t\t\tto: email,\r\n\t\t\t\trecipientName: recipient\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * This is public because its referenced by other components\r\n\t * @param selected\r\n\t */\r\n\tpublic toggleRanchSettings(selected: boolean): void {\r\n\t\tthis.selected = selected;\r\n\r\n\t\tif (selected) {\r\n\t\t\tthis._getData();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic openRanchModalComponent() {\r\n\r\n\t\tthis.dialog.open(RanchDialog, {\r\n\t\t\twidth: '880px',\r\n\t\t\tdata: {\r\n\t\t\t\tId: this.updateService.currentRanchId,\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openAddMemberModal(): void {\r\n\t\tthis.dialog.open(RanchMemberModalComponent, {\r\n\t\t\twidth: '500px',\r\n\t\t\tdata: {}\r\n\t\t})\r\n\t}\r\n\r\n\tpublic openEditMemberModal(member: IRanchUserListItem): void {\r\n\t\tif (member.IsOwner) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.dialog.open(RanchMemberModalComponent, {\r\n\t\t\twidth: '500px',\r\n\t\t\tdata: member\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openLotModal(id?: number): void {\r\n\r\n\t\tthis.dialog.open(RanchLotModalComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\twidth: '880px',\r\n\t\t\tdata: {\r\n\t\t\t\tid: id\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openFertilizerModal(editable: boolean, id?: number): void {\r\n\r\n\t\tlet fertilizer: IFertilizer;\r\n\r\n\t\tif (id && this.fertilizers && this.fertilizers.length > 0) {\r\n\t\t\tfertilizer = this.fertilizers.filter(x => x.Id === id)[0];\r\n\t\t}\r\n\r\n\t\tif (editable && id) { // custom fertilizer\r\n\t\t\tthis.dialog.open(FertilizerEditDialog, {\r\n\t\t\t\twidth: '690px',\r\n\t\t\t\tposition: {\r\n\t\t\t\t\ttop: '100px'\r\n\t\t\t\t},\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tid: id,\r\n\t\t\t\t\tusage: fertilizer ? fertilizer.Usage : null\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else if (id) { // OOTB fertilizer - view only\r\n\t\t\tthis.dialog.open(FertilizerViewDialog, {\r\n\t\t\t\twidth: '690px',\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tid: id,\r\n\t\t\t\t\tusage: fertilizer ? fertilizer.Usage : null\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.dialog.open(FertilizerCreateDialog, {\r\n\t\t\t\twidth: '880px',\r\n\t\t\t\tdisableClose: true\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic openWellModal(id?: number) {\r\n\t\tlet wellsCount: number;\r\n\r\n\t\twellsCount = this.wells ? this.wells.length : 0;\r\n\r\n\t\tthis.dialog.open(RanchWellModalComponent, {\r\n\t\t\twidth: '500px',\r\n\t\t\tdata: {\r\n\t\t\t\tid: id,\r\n\t\t\t\tcount: wellsCount // number of wells associated with a ranch\r\n\t\t\t\t\t// used to prevent deletion if there are only one well in a ranch\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic onWeatherStationEdit(id: number): void {\r\n\t\tthis.dialog.open(WeatherStationEditComponent, {\r\n\t\t\tdata: {\r\n\t\t\t\tid: id\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openWeatherStationModal(id?: number) {\r\n\t\tthis.dialog.open(RanchWeatherStationModalComponent, {\r\n\t\t\twidth: '900px',\r\n\t\t\tdata: {\r\n\t\t\t\tid: id\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic openCommodityTypeModal(commodityType?: ICommodityTypesRanchJSON,\r\n\t\tplantingsCount?: number) {\r\n\r\n\t\tif (commodityType && commodityType.CommodityTypeId) {\r\n\t\t\tthis.dialog.open(CommodityTypeDialog, {\r\n\t\t\t\twidth: '400px',\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tranchGuid: this.ranchId,\r\n\t\t\t\t\tcommodityTypeId: commodityType.CommodityTypeId,\r\n\t\t\t\t\tplantingsCount: plantingsCount,\r\n\t\t\t\t\tcommodityTypeName: commodityType.Name\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.dialog.open(CommodityTypeCreateDialog, {\r\n\t\t\t\twidth: '400px',\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tranchGuid: this.ranchId,\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic autoSortMembers(field: string): string {\r\n\t\treturn this.memberSort ? '-' + field : field;\r\n\t}\r\n\r\n\tpublic sortMembers(descending: string): void {\r\n\t\tthis.memberSort = descending === 'false' ? false : true;\r\n\t}\r\n\r\n\tpublic autoSortMLots(field: string): string {\r\n\t\treturn this.lotSort ? '-' + field : field;\r\n\t}\r\n\r\n\tpublic sortLots(descending: string): void {\r\n\t\tthis.lotSort = descending === 'false' ? false : true;\r\n\t}\r\n\r\n\tpublic autoSortFertlizers(field: string): string {\r\n\t\treturn this.fertilizerSort ? '-' + field : field;\r\n\t}\r\n\r\n\tpublic sortFertilizers(descending: string): void {\r\n\t\tthis.fertilizerSort = descending === 'false' ? false : true;\r\n\t}\r\n\r\n\tpublic openCimisOptionsModal() {\r\n\t\tthis.dialog.open(CimisOptionsModalComponent, {});\r\n\t}\r\n\r\n\t/**\r\n     * Main function that retrieves all ranch data\r\n     */\r\n\tprivate _getData(): void {\r\n\t\tthis._getRanchBasicInfo().then(() => {\r\n\t\t\tthis.getRanchSettings();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getRanchBasicInfo(): Promise<void> {\r\n\t\treturn this.ranchService.getRanchBasicInfo().then(data => {\r\n\t\t\tthis.basicInfo = data;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate getRanchUsers(): void {\r\n\t\tthis.ranchService.getRanchUsers()\r\n\t\t\t.then(data => {\r\n\t\t\t\tthis.members = data;\r\n\t\t\t\tthis.updateService.ranchSettings.members = data;\r\n\t\t\t\tthis.updateService.updateRanchSettings();\r\n\t\t\t\tthis._validateUsers();\r\n\t\t\t})\r\n\t}\r\n\r\n\tprivate _convertRanchLotModels(models: IRanchLotModel[]) {\r\n\t\tlet result: IRanchLotJSONModel[];\r\n\r\n\t\tresult = [];\r\n\r\n\t\tif (!models || models.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let model of models) {\r\n\t\t\tresult.push({\r\n\t\t\t\tId: model.Id,\r\n\t\t\t\tName: model.Name,\r\n\t\t\t\tRanchId: model.RanchId,\r\n\t\t\t\tCoordinates: null,\r\n\t\t\t\tCreateDT: model.CreateDT,\r\n\t\t\t\tLastUpdateDT: model.LastUpdateDT,\r\n\t\t\t\tDeleted: model.Deleted,\r\n\t\t\t\tObstructionDepth: model.ObstructionDepth,\r\n\t\t\t\tAcres: model.Acres\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate getRanchLots(): void {\r\n\t\tthis.ranchService.getRanchLots()\r\n\t\t\t.then(data => {\r\n\t\t\t\tthis.lots = data;\r\n\t\t\t\tthis.ranchService.currentRanchLots = this._convertRanchLotModels(data);\r\n\t\t\t\tthis.updateService.ranchSettings.lots = data;\r\n\t\t\t\tthis.updateService.updateRanchSettings();\r\n\t\t\t\tthis._validateLots();\r\n\t\t\t})\r\n\t}\r\n\r\n\tprivate getCommodityTypes(): void {\r\n\t\tthis.commodityService.listByRanch(this.ranchId).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.commodityTypes = data.CommodityTypesRanch;\r\n\t\t\tthis.maxActiveCommodityTypes = data.Count;\r\n\t\t\tthis.updateService.ranchSettings.commodityTypes = this.commodityTypes;\r\n\t\t\tthis.updateService.updateRanchSettings();\r\n\t\t\tthis._validateCommodityTypes();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate getRanchFertilizers(): void {\r\n\t\tthis.fertilizerModelService.getByRanchId(this.ranchId)\r\n\t\t\t.then((data) => {\r\n\t\t\t\tif (data && data.length > 0) {\r\n\t\t\t\t\tthis.fertilizers = data;\r\n\t\t\t\t\tthis.updateService.ranchSettings.fertilizers = data; // cache data\r\n\t\t\t\t\tthis.updateService.updateRanchSettings();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.updateService.ranchSettings.fertilizers = new Array();\r\n\t\t\t\t\tthis.updateService.updateRanchSettings();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._validateFertilizers();\r\n\t\t\t})\r\n\t}\r\n\r\n\tprivate getRanchWeatherStations(): void {\r\n\t\tthis._weatherStationService.getRanchWeatherStations()\r\n\t\t\t.then(data => {\r\n\t\t\t\tthis.weatherStations = data;\r\n\t\t\t\tthis.updateService.ranchSettings.weatherStations = data;\r\n\t\t\t\tthis.updateService.updateRanchSettings();\r\n\t\t\t\tthis._validateWeatherStations();\r\n\t\t\t})\r\n\t}\r\n\r\n\tprivate getRanchWells(): void {\r\n\t\tthis.ranchService.getRanchWells()\r\n\t\t\t.then(data => {\r\n\t\t\t\tthis.wells = data || [];\r\n\t\t\t\tthis.updateService.ranchSettings.wells = this.wells;\r\n\t\t\t\tthis.updateService.updateRanchSettings();\r\n\t\t\t\tthis._validateWells();\r\n\t\t\t})\r\n\t}\r\n\r\n\tprivate getRanchSettings(): void {\r\n\t\tlet settings: IRanchSettings;\r\n\r\n\t\tsettings = this.updateService.ranchSettings;\r\n\r\n\t\tif (settings.members) {\r\n\t\t\tthis.members = settings.members;\r\n\t\t} else {\r\n\t\t\tthis.getRanchUsers();\r\n\t\t}\r\n\r\n\t\tif (settings.lots) {\r\n\t\t\tthis.lots = settings.lots;\r\n\t\t} else {\r\n\t\t\tthis.getRanchLots();\r\n\t\t}\r\n\r\n\t\tif (settings.fertilizers) { // checks cache\r\n\t\t\tthis.fertilizers = settings.fertilizers;\r\n\t\t} else {\r\n\t\t\tthis.getRanchFertilizers();\r\n\t\t}\r\n\r\n\t\tif (settings.weatherStations) {\r\n\t\t\tthis.weatherStations = settings.weatherStations;\r\n\t\t} else {\r\n\t\t\tthis.getRanchWeatherStations();\r\n\t\t}\r\n\r\n\t\tif (settings.wells) {\r\n\t\t\tthis.wells = settings.wells;\r\n\t\t} else {\r\n\t\t\tthis.getRanchWells();\r\n\t\t}\r\n\r\n\t\tif (settings.commodityTypes) {\r\n\t\t\tthis.commodityTypes = settings.commodityTypes;\r\n\t\t} else {\r\n\t\t\tthis.getCommodityTypes();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _validateSettings(): void {\r\n\t\tlet result = {\r\n\t\t\tvalid: true,\r\n\t\t\tmissingValues: new Array<string>()\r\n\t\t};\r\n\r\n\t\tif (!this.validationStates) {\r\n\t\t\tthrow new Error('settings not expected to be empty');\r\n\t\t}\r\n\r\n\t\tif (!this.validationStates.Members) {\r\n\t\t\tresult.valid = false;\r\n\t\t\tresult.missingValues.push('Members');\r\n\t\t}\r\n\r\n\t\tif (!this.validationStates.Lots) {\r\n\t\t\tresult.valid = false;\r\n\t\t\tresult.missingValues.push('Lots');\r\n\t\t}\r\n\r\n\t\tif (!this.validationStates.Fertilizers) {\r\n\t\t\tresult.valid = false;\r\n\t\t\tresult.missingValues.push('Fertilizers');\r\n\t\t}\r\n\r\n\t\tif (!this.validationStates.WeatherStations) {\r\n\t\t\tresult.valid = false;\r\n\t\t\tresult.missingValues.push('Weather Stations');\r\n\t\t}\r\n\r\n\t\tif (!this.validationStates.CommodityTypes) {\r\n\t\t\tresult.valid = false;\r\n\t\t\tresult.missingValues.push('Commodity Types');\r\n\t\t}\r\n\r\n\t\tif (!this.validationStates.Wells) {\r\n\t\t\tresult.valid = false;\r\n\t\t\tresult.missingValues.push('Wells');\r\n\t\t}\r\n\r\n\t\tthis.validationStates.Valid = result.valid;\r\n\t\tthis.validationStates.MissingValues = result.missingValues;\r\n\r\n\t\tthis.updateService.setMissingRanchSettings(this.validationStates);\r\n\t}\r\n\r\n\tprivate _validateUsers(): void {\r\n\t\tthis.validationStates.Members = this.members &&\r\n\t\t\tthis.members.length > 0 ? true : false;\r\n\r\n\t\tthis._validateSettings();\r\n\t}\r\n\r\n\tprivate _validateFertilizers(): void {\r\n\t\tthis.validationStates.Fertilizers = this.fertilizers\r\n\t\t\t&& this.fertilizers.length > 0 ? true : false;\r\n\r\n\t\tthis._validateSettings();\r\n\t}\r\n\r\n\tprivate _validateLots(): void {\r\n\t\tthis.validationStates.Lots = this.lots\r\n\t\t\t&& this.lots.length > 0 ? true : false;\r\n\r\n\t\tthis._validateSettings();\r\n\t}\r\n\r\n\tprivate _validateWeatherStations(): void {\r\n\t\tif (this.basicInfo && this.basicInfo.WeatherAPI_Id === eWeatherAPIs.OpenET) {\r\n\t\t\tthis.validationStates.WeatherStations = true;\r\n\t\t} else {\r\n\t\t\tthis.validationStates.WeatherStations = this.weatherStations\r\n\t\t\t\t&& this.weatherStations.filter(x => x.ActiveStation &&\r\n\t\t\t\tx.ActiveStation.Active).length > 0 ? true : false;\r\n\t\t}\r\n\r\n\t\tthis._validateSettings();\r\n\t}\r\n\r\n\tprivate _validateCommodityTypes(): void {\r\n\t\tthis.validationStates.CommodityTypes =\r\n\t\t\tthis.commodityTypes\r\n\t\t\t\t&& this.commodityTypes.length > 0 ? true : false;\r\n\r\n\t\tthis._validateSettings();\r\n\t}\r\n\r\n\tprivate _validateWells(): void {\r\n\t\tthis.validationStates.Wells =\r\n\t\t\tthis.wells && this.wells.length > 0 ? true : false;\r\n\r\n\t\tthis._validateSettings();\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=\"view === dialogViews.CREATE\"\r\n            class=\"bk-modal__header-title\">\r\n            {{'Add' | translate }} {{'Lot' | translate }}\r\n        </ng-container>\r\n        <ng-container *ngIf=\"view === dialogViews.UPDATE\"\r\n            class=\"bk-modal__header-title\">\r\n            {{'Edit' | translate }} {{'Lot' | translate }}\r\n        </ng-container>\r\n    </h4>\r\n\r\n    <div mat-dialog-content>\r\n        <form *ngIf=\"form\"\r\n            [formGroup]=\"form\">\r\n            <div class=\"bk-modal__left lot-form\"\r\n                *ngIf=\"f\">\r\n\r\n                <!-- Lot Name -->\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                        {{'Lot Name' | translate }}\r\n                    </mat-label>\r\n                    <input matInput \r\n                        formControlName=\"Name\"\r\n                        required\r\n                        type=\"text\"\r\n                        (click)=\"showMap()\">\r\n                    <mat-error *ngIf=\"f.Name.invalid && (f.Name.dirty || f.Name.touched)\">\r\n                        {{'Lot name cannot be empty' | translate }}\r\n                    </mat-error>\r\n                </mat-form-field>\r\n\r\n                    <!-- Coordinates -->\r\n                <div class=\"bk-flex-input-section\">\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=\"lot-coords\"\r\n                            type=\"text\"\r\n                            formControlName=\"Coordinates\"\r\n                            required\r\n                            (click)=\"showMap()\">\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                            <span *ngIf=\"f.Coordinates.errors.badLatLng\">\r\n                                {{'Coordinates are outside the US Warning' | translate }}\r\n                            </span>\r\n                            <span *ngIf=\"f.Coordinates.errors.noSoilData\">\r\n                                {{'There is no soil data available for this location. Please try different coordinates' | translate }}\r\n                            </span>\r\n                            <span *ngIf=\"f.Coordinates.errors.httpError\">\r\n                                {{'SoilWeb service is not currently responding. Please try again later.' | translate }}\r\n                            </span>\r\n                        </mat-error>\r\n                    </mat-form-field>\r\n                    <button\r\n                        [disabled]=\"!editingSoilType\"\r\n                        [class.bk-button-icon--selected]=\"!editingSoilType\"\r\n                        class=\"bk-button bk-button--green-text\r\n                        bk-modal__field-icon--lot-map bk-modal__field-icon--right\"\r\n                        (click)=\"showMap()\">\r\n\r\n                        <i class=\"fa fa-map-marker\"\r\n                            matTooltip=\"see the map\">\r\n                        </i>\r\n                    </button>\r\n                </div>\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                <!-- Acres -->\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                        {{'Size' | 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                        (click)=\"showMap()\">\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.numberGreaterThan\">\r\n                            {{ 'Acres must be greater than zero' | translate }}\r\n                        </ng-container>\r\n                        <ng-container *ngIf=\"f.Acres.errors.numberLessThan\">\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                <!-- soil type -->\r\n                <div *ngIf=\"!soilError\" \r\n                    class=\"bk-flex-input-section\">\r\n                    <div class=\"cm-ranchlot-dialog__soil-type-section\">\r\n                        <span class=\"cm-ranchlot-dialog__soil-type-label\">{{'Soil Type' | translate }}</span>\r\n                        <div class=\"cm-ranchlot-dialog__soil-type-name\">{{ soilTypeName }}</div>\r\n                    </div>\r\n\r\n                    <button [disabled]=\"editingSoilType || soilError\"\r\n                        [class.bk-button-icon--selected]=\"editingSoilType\"\r\n                        class=\"bk-button bk-button--green-text\r\n                        bk-modal__field-icon--soil bk-modal__field-icon--right\"\r\n                        (click)=\"showSoilProperties()\">\r\n\r\n                        <i class=\"fa fa-ellipsis-v\"\r\n                            matTooltip=\"Edit soil properties\">\r\n                        </i>\r\n                    </button>\r\n                </div>\r\n                <div *ngIf=\"f.ObstructionDepth.invalid\"\r\n                    class=\"bk-invalid-text bk-invalid-text--padded\">\r\n                    {{'Open soil settings to fix your obstruction depth' | translate }}\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"bk-modal__right\">\r\n                <div [hidden]=\"editingSoilType\"\r\n                    class=\"map-container bk-modal__triangle--left\r\n                    bk-modal__triangle--map\">\r\n                    <div class=\"bk-modal__right-instructions\">\r\n                        {{'Lot Map Instructions 1' | 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--lot\">\r\n                            <svg-lot-filled-marker></svg-lot-filled-marker>\r\n                        </div>\r\n                        {{'Lot Map Instructions 2' | translate }}\r\n                    </div>\r\n                    <div class=\"bk-modal__map-container\">\r\n                        <agm-map (mapReady)=\"mapReady($event);\"\r\n                             (mapClick)=\"mapClicked($event)\"\r\n                            [mapTypeId]=\"'hybrid'\"\r\n                            [fullscreenControl]=\"true\">\r\n\r\n                            <agm-marker *ngFor=\"let marker of markers\"\r\n                                [iconUrl]=\"'../assets/images/icons/map_marker-lot.png'\"\r\n                                [latitude]=\"marker.lat\"\r\n                                [longitude]=\"marker.lng\">\r\n                            </agm-marker>\r\n                            <agm-marker *ngIf=\"ranchLocation\"\r\n                                [iconUrl]=\"'../assets/images/icons/map_marker-ranch-v2.png'\"\r\n                                [latitude]=\"ranchLocation.lat\"\r\n                                [longitude]=\"ranchLocation.lng\">\r\n                            </agm-marker>\r\n                            <map-control></map-control>\r\n                        </agm-map>\r\n                    </div>\r\n                </div>\r\n\r\n                <div [hidden]=\"!editingSoilType\"\r\n                    class=\"soil-types-container bk-modal__triangle--left bk-modal__triangle--soil\">\r\n                    <soil-properties-table *ngIf=\"soilPropertiesFormBuilder.form\"\r\n                        [soilPropertiesFormBuilder]=\"soilPropertiesFormBuilder\"\r\n                        [soilWebProperties]=\"soilPropertiesFormBuilder.soilWebProperties\"\r\n                        [maxRootDepth]=\"f.ShouldUseObstructionDepth.value ?\r\n                            f.ObstructionDepth.value : null\">\r\n                    </soil-properties-table>\r\n\r\n                    <div class=\"bk-modal__checkbox--obstruction-depth bk-clearfix\" *ngIf=\"form\">\r\n                        <input type=\"checkbox\"\r\n                            formControlName=\"ShouldUseObstructionDepth\"\r\n                            id=\"ShouldUseObstructionDepth\"\r\n                            (change)=\"toggleObstructionDepth()\"/>\r\n                        <div class=\"bk-modal__checkbox--label\">\r\n                            <div>{{ 'Root Depth Obstruction' | translate }} <mat-icon matTooltip=\"{{ 'Root Depth Obstruction Help Text' | translate}}\" \r\n                                class=\"bk-info-icon\" >info_outline</mat-icon></div>\r\n                            <div class=\"bk-modal__checkbox--sub-label\">({{ 'Root Depth Obstruction Details' | translate }})</div>\r\n                        </div>\r\n                    </div>\r\n                    \r\n                    <!-- Root depth -->\r\n                    <!---->\r\n                    <mat-form-field appearance=\"fill\"\r\n                        *ngIf=\"f && f.ShouldUseObstructionDepth.value\"\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                        <input matInput \r\n                            formControlName=\"ObstructionDepth\"\r\n                            name=\"obstructionDepth\"\r\n                            step=\"0.01\"\r\n                            required\r\n                            type=\"number\"/>\r\n                        <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                            {{'ft' | translate }}\r\n                        </span>\r\n                        <mat-error *ngIf=\"f.ObstructionDepth.invalid &&\r\n                            (f.ObstructionDepth.dirty || f.ObstructionDepth.touched)\">\r\n                            {{'Root Depth Obstruction must greater than 0 and less than 4' | translate }}\r\n                        </mat-error>\r\n                    </mat-form-field>\r\n                </div>\r\n            </div>\r\n        </form>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n        <button \r\n            class=\"bk-button bk-button--medium bk-button--text-only\r\n            bk-button--float-left\"\r\n            *ngIf=\"view === dialogViews.UPDATE && form\"\r\n            (click)=\"onDelete($event)\"\r\n            [disabled]=\"isAssociatedWithPlanting\">\r\n            {{'Remove Lot' | translate }}\r\n            <i *ngIf=\"isAssociatedWithPlanting\"\r\n                matTooltip=\"{{'Cannot Delete Lot Warning' | translate }}\"\r\n                class=\"bk-recommendation__icon fa fa-info-circle\">\r\n            </i>\r\n        </button>\r\n        \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 [disabled]=\"isLotValid() === false\"\r\n            class=\"bk-button bk-button--medium\"\r\n            *ngIf=\"view === dialogViews.CREATE\"\r\n            (click)=\"create()\">\r\n            {{'Add Lot' | translate }}\r\n        </button>\r\n        <button [disabled]=\"isLotValid() === false\"\r\n            class=\"bk-button bk-button--medium\"\r\n            *ngIf=\"view === dialogViews.UPDATE\"\r\n            (click)=\"edit()\">\r\n            {{'Save' | translate }}\r\n        </button>\r\n    </div>\r\n</div>","import { Component, ViewChild, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { RanchService } from '../../service';\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { AgmMap } from '@agm/core';\r\nimport { of, Subject } from 'rxjs';\r\nimport { MapControlDirective } from '../../../../directives/map-control.directive';\r\nimport { ValidateService } from '../../../../services/validate.service';\r\nimport { Modal } from '../../../../classes/modal';\r\nimport { ILotEdit } from './interfaces';\r\nimport { eSoilWebCrawErrors } from '../../../../interfaces/constants';\r\nimport { IIdNamePair, eDialogViews } from '../../../../interfaces/abstract';\r\nimport { LotSubscriptionService } from '../../../../services/subscriptions/lot.subscription';\r\nimport { ICoordinates } from '../../../shared/interfaces';\r\nimport { IRanchBasicInfoViewModel } from '../../interfaces';\r\nimport { IAgmMapClick } from '../../../shared/interfaces';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { FormGroup, FormBuilder, Validators, AbstractControl, ValidatorFn } from '@angular/forms';\r\nimport { FormValidation } from '../../../../classes/formValidation';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { SharedKeepDiscardDialog } from '../../../shared/dialogs/keep-discard-dialog';\r\nimport { DeleteConfirmationComponent, DeleteConfirmationSettings } from '../../../shared/dialogs/delete-confirmation';\r\nimport { Coordinates } from '../../../../classes/Coordinates';\r\nimport { PlantingService } from '../../../planting-settings/service';\r\nimport { CMError } from '../../../../interfaces/interfaces';\r\nimport { CustomSoilPropertiesFormBuilder } from '../../../soil-properties-table/customSoilPropertiesFormBuilder';\r\nimport { SoilTypeService } from '../../../../models/soil-type/service';\r\nimport { DIALOG_HIDE_CLASS } from '../../../shared/constants';\r\n\r\nexport type ILotFields = 'Id' | 'Name' | 'Acres' | 'Coordinates' |\r\n\t'ObstructionDepth' | 'ShouldUseObstructionDepth' | 'DefaultSoilTypeId';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ranch-lot-modal',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: [ 'main.scss']\r\n})\r\n\r\nexport class RanchLotModalComponent implements OnInit, OnDestroy {\r\n\tpublic coordinateExplanation: string;\r\n\tpublic dialogViews = eDialogViews;\r\n\tpublic editingSoilType = false;\r\n\tpublic form: FormGroup;\r\n\tpublic isAssociatedWithPlanting: boolean = null;\r\n\tpublic isSaving: boolean;\r\n\tpublic loadingData = true;\r\n\t@ViewChild(AgmMap, { static: false }) public map: AgmMap;\r\n\tpublic markers: ICoordinates[] = new Array();\r\n\r\n\tpublic ranchLocation: ICoordinates;\r\n\tpublic soilTypeName: string;\r\n\tpublic soilError: eSoilWebCrawErrors;\r\n\tpublic view: eDialogViews;\r\n\tpublic viewCache: eDialogViews;\r\n\r\n\t// map defaults\r\n\tprivate _basicInfo: IRanchBasicInfoViewModel;\r\n\tprivate _lat = 38.53957267203905;\r\n\tprivate _lng = -121.73841498792171;\r\n\tprivate _lotId: number;\r\n\t@ViewChild(MapControlDirective, { static: false }) private _mapControl: MapControlDirective;\r\n\r\n\tpublic soilPropertiesFormBuilder: CustomSoilPropertiesFormBuilder;\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\tprivate _zoom = 12;\r\n\r\n\tpublic get f(): { [key in ILotFields]: AbstractControl } {\r\n\t\treturn this.form.controls as { [key in ILotFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { id: number},\r\n\t\tprivate _dialog: MatDialog,\r\n\t\tprivate _dialogRef: MatDialogRef<RanchLotModalComponent>,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _lotSubscriptionService: LotSubscriptionService,\r\n\t\tprivate _plantingService: PlantingService,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _sharedUpdateService: SharedUpdateService,\r\n\t\tprivate _soilTypeService: SoilTypeService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _validateService: ValidateService) {\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.ranchLocation = {\r\n\t\t\tlat: null,\r\n\t\t\tlng: null\r\n\t\t};\r\n\r\n\t\tthis._lotId = null;\r\n\t\tthis.soilError = null;\r\n\r\n\t\tif (this._data && this._data.id) {\r\n\t\t\tthis._lotId = this._data.id;\r\n\t\t\tthis.view = eDialogViews.UPDATE;\r\n\r\n\t\t\tthis._detectAssociatedPlantings(this._data.id);\r\n\t\t\tthis._getRanchData();\r\n\t\t\tthis._getEditLotData(this._data.id);\r\n\t\t} else {\r\n\t\t\tthis.view = eDialogViews.CREATE;\r\n\r\n\t\t\tthis._getRanchData().then(() => {\r\n\t\t\t\tthis._getAddLotData();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._setupPopupSubscriptions();\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\tpublic close() {\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._closeFinal();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic create(): void {\r\n\r\n\t\tlet lot: ILotEdit;\r\n\t\tlet guid: string;\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\tif (!this.soilPropertiesFormBuilder.form) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlot = this.form.value;\r\n\r\n\t\tguid = this._updateService.currentRanchId;\r\n\t\tlot = this._roundInputs(lot);\r\n\t\tlot.SoilLayers = this.soilPropertiesFormBuilder.cullRedundantFields();\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.addRanchLot(lot).then(() => {\r\n\t\t\tthis.isSaving = false;\r\n\t\t\tthis._updateAndClose(this._lotId, lot);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _delete(): void {\r\n\t\tthis._ranchService.deleteRanchLot(this._lotId)\r\n\t\t.then(() => {\r\n\t\t\tthis._updateAndClose(this._lotId, null);\r\n\t\t\tthis._sharedUpdateService.deleteComplete();\r\n\t\t});\r\n\t}\r\n\r\n\tpublic edit(): void {\r\n\r\n\t\tlet lot: ILotEdit;\r\n\t\tlet guid: string;\r\n\r\n\t\tlot = this.form.value;\r\n\t\tguid = this._updateService.currentRanchId;\r\n\r\n\t\tlot = this._roundInputs(lot);\r\n\t\tlot.SoilLayers = this.soilPropertiesFormBuilder.cullRedundantFields();\r\n\r\n\t\tif (!this.soilPropertiesFormBuilder.form) {\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._ranchService.editRanchLot(lot)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis._updateAndClose(this._lotId, lot)\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tpublic isLotValid(): boolean {\r\n\r\n\t\tif (!this.soilPropertiesFormBuilder || !this.soilPropertiesFormBuilder.form ||\r\n\t\t\tthis.soilPropertiesFormBuilder.form.invalid) {\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this.soilError) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn this.form && this.form.valid;\r\n\t}\r\n\r\n\t/**\r\n\t * This is called internally and from a template\r\n\t * @param coords\r\n\t */\r\n\tpublic lotCoordsChanged(): void {\r\n\r\n\t\tif (!this.f.Coordinates.valid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._placeMarkerString(this.f.Coordinates.value);\r\n\t\tthis.f.Coordinates.markAsTouched();\r\n\r\n\t\tthis.soilPropertiesFormBuilder.initializeWithCoordinates(this.f.Coordinates.value,\r\n\t\t\tthis._soilTypeService).then((res) => {\r\n\t\t\t\tthis.soilError = res;\r\n\r\n\t\t\t\tif (this.soilError) {\r\n\t\t\t\t\tthis.soilTypeName = null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.soilTypeName = this.soilPropertiesFormBuilder.soilWebProperties.Record.Name;\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     * function called ANYTIME you click on the map\r\n     * @param event\r\n     */\r\n\tpublic mapClicked(event: IAgmMapClick) {\r\n\t\tlet coords: Coordinates;\r\n\r\n\t\tthis.soilError = null;\r\n\t\tcoords = new Coordinates(event.coords.lat + ',' + event.coords.lng);\r\n\r\n\t\tthis.f.Coordinates.setValue(coords.toString());\r\n\t}\r\n\r\n\tpublic showMap(): void {\r\n\t\tthis.editingSoilType = false;\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param e used to stop propagation\r\n\t * @returns\r\n\t */\r\n\tpublic onDelete(e: MouseEvent): boolean {\r\n\t\tlet data: DeleteConfirmationSettings;\r\n\r\n\t\tif (this.isAssociatedWithPlanting) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!this.form) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tdata = {\r\n\t\t\tspecificName: this.f.Name.value,\r\n\t\t\tobjectName: null,\r\n\t\t\tadditionalMessage: null,\r\n\t\t};\r\n\r\n\t\tthis._dialog.open(DeleteConfirmationComponent, {\r\n\t\t\tdata: data,\r\n\t\t\tdisableClose: true,\r\n\t\t});\r\n\r\n\t\tthis._hide();\r\n\r\n\t\tif (e) {\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Method that triggers when user clicks the \"soil properties\" button\r\n\t */\r\n\tpublic showSoilProperties(): void {\r\n\t\tthis.editingSoilType = true;\r\n\t}\r\n\r\n\tpublic soilListContains(soilList: IIdNamePair[], id: number): boolean {\r\n\t\tfor (let soil of soilList) {\r\n\t\t\tif (soil.Id === id) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic submit() {\r\n\t\tif (this.view === eDialogViews.UPDATE) {\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\tpublic toggleObstructionDepth(): void {\r\n\t\tif (!this.f) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.f.ShouldUseObstructionDepth.value) {\r\n\t\t\tthis.f.ObstructionDepth.setValue(null);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _closeFinal(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tprivate _detectAssociatedPlantings(ranchLotId: number): Promise<void> {\r\n\t\treturn this._ranchService.isUsed(ranchLotId, this._updateService.currentRanchId).then(res => {\r\n\t\t\tthis.isAssociatedWithPlanting = res;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getAddLotData(): Promise<ILotEdit> {\r\n\t\treturn this._ranchService.getAddRanchLotData()\r\n\t\t.then(data => {\r\n\t\t\tdata.Coordinates = null;\r\n\t\t\tthis._initializeForm(data);\r\n\r\n\t\t\tthis.soilPropertiesFormBuilder = new CustomSoilPropertiesFormBuilder(this._fb,\r\n\t\t\t\tdata.SoilLayers, this._subscriptions$);\r\n\r\n\t\t\tthis.f.ShouldUseObstructionDepth.setValue(false);\r\n\t\t\tthis.loadingData = false;\r\n\t\t\tthis._resetMap();\r\n\r\n\t\t\treturn data;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getEditLotData(id: number): Promise<ILotEdit> {\r\n\t\treturn this._ranchService.getEditRanchLotData(id)\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\tdata.Id = id;\r\n\t\t\tthis._initializeForm(data);\r\n\r\n\t\t\tthis.soilPropertiesFormBuilder = new CustomSoilPropertiesFormBuilder(this._fb,\r\n\t\t\t\tdata.SoilLayers, this._subscriptions$);\r\n\r\n\t\t\tif (data.SoilWebProperties.Error) {\r\n\t\t\t\tthis.soilError = data.SoilWebProperties.Error;\r\n\t\t\t\tthis.soilTypeName = null;\r\n\t\t\t} else {\r\n\t\t\t\tthis.soilPropertiesFormBuilder.initializeWithStaticData(data.SoilWebProperties);\r\n\t\t\t\tthis.soilTypeName = data.SoilWebProperties.Record.Name;\r\n\t\t\t}\r\n\r\n\t\t\tthis.form.markAsDirty();\r\n\t\t\tthis.loadingData = false;\r\n\r\n\t\t\tthis._resetMap();\r\n\r\n\t\t\treturn data;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _getRanchData(): Promise<void> {\r\n\t\treturn this._ranchService.getRanchBasicInfo()\r\n\t\t.then((res) => {\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._basicInfo = res;\r\n\r\n\t\t\tif (this._basicInfo.Coordinates) {\r\n\t\t\t\tthis.ranchLocation = {\r\n\t\t\t\t\tlat: Number(this._basicInfo.Coordinates.split(',')[0]),\r\n\t\t\t\t\tlng: Number(this._basicInfo.Coordinates.split(',')[1])\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\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 _initializeForm(data: ILotEdit): void {\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tId: [data.Id],\r\n\t\t\tName: [data.Name, [Validators.required, Validators.maxLength(128)]],\r\n\t\t\tAcres: [data.Acres, [Validators.required, Validators.min(0.001),\r\n\t\t\t\tValidators.max(10000)]],\r\n\t\t\tShouldUseObstructionDepth: [data.ObstructionDepth > 0],\r\n\t\t\tObstructionDepth: [data.ObstructionDepth, [Validators.min(0.0000001), Validators.max(3.9999999)]],\r\n\t\t\tCoordinates: [data.Coordinates, { validators: [Validators.required,\r\n\t\t\t\tFormValidation.CoordinateStringIsValid(), this._validateBadLatLng(),\r\n\t\t\t\tthis._validateNoSoilData(), this._validateHTTPError()], updateOn: 'blur'}],\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.f.ShouldUseObstructionDepth.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tif (this.f.ShouldUseObstructionDepth.value) {\r\n\t\t\t\tthis.f.ObstructionDepth.setValidators([Validators.min(0.0000001), Validators.max(3.9999999)]);\r\n\t\t\t} else {\r\n\t\t\t\tthis.f.ObstructionDepth.clearValidators();\r\n\t\t\t\tthis.f.ObstructionDepth.setErrors(null);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.f.Coordinates.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.lotCoordsChanged();\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\tcoordinates = new Coordinates(this.f.Coordinates.value);\r\n\r\n\t\tif (!coordinates.lat || !coordinates.lng) {\r\n\t\t\treturn of(null).toPromise();\r\n\t\t}\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 _validateHTTPError(): ValidatorFn {\r\n\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = (this.soilError !== null && this.soilError === eSoilWebCrawErrors.ServerFailure) ?\r\n\t\t\t\tfalse : true;\r\n\r\n\t\t\treturn valid ? null : {'httpError': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _validateNoSoilData(): ValidatorFn {\r\n\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = (this.soilError !== null && this.soilError === eSoilWebCrawErrors.ParseError) ?\r\n\t\t\t\tfalse : true;\r\n\r\n\t\t\treturn valid ? null : {'noSoilData': {value: control.value}};\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _validateBadLatLng(): ValidatorFn {\r\n\r\n\t\treturn (control: AbstractControl): {[key: string]: any} | null => {\r\n\t\t\tlet valid: boolean;\r\n\r\n\t\t\tvalid = (this.soilError !== null && this.soilError === eSoilWebCrawErrors.OutOfRange) ?\r\n\t\t\t\tfalse : true;\r\n\r\n\t\t\treturn valid ? null : {'badLatLng': {value: control.value}};\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: Number(lat),\r\n\t\t\tlng: Number(lng)\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Update Google map markers\r\n\t * @param coords string representing geolocation coordinates\r\n\t */\r\n\tprivate _placeMarkerString(coords?: string): void {\r\n\t\tlet latLng: string[];\r\n\r\n\t\tif (coords && this._validateService.validateCoordinatesString(coords)) {\r\n\t\t\tthis.markers = new Array();\r\n\t\t\tlatLng = coords.split(',');\r\n\t\t\tthis._placeMarker(Number(latLng[0]), Number(latLng[1]));\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _recenterMap(lat: number, lng: number, zoom: number): void {\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.f && this.f.Coordinates.value) {\r\n\t\t\tthis._setMap(this.f.Coordinates.value);\r\n\t\t} else if (this._basicInfo && this._basicInfo.Coordinates) {\r\n\t\t\tthis._setMap(this._basicInfo.Coordinates);\r\n\t\t}\r\n\r\n\t\tModal.resize();\r\n\t}\r\n\r\n\tprivate _roundInputs(x: ILotEdit): ILotEdit {\r\n\t\tx.Acres = this._validateService.convertToFloat(x.Acres, 2);\r\n\r\n\t\treturn x;\r\n\t}\r\n\r\n\tpublic mapReady(): void {\r\n\t\tthis._resetMap();\r\n\t}\r\n\r\n\tprivate _setMap(coords: string): void {\r\n\t\tif (!this.map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.map.triggerResize().then(event => {\r\n\t\t\tlet lat, lng: number;\r\n\r\n\t\t\tif (!coords || coords === null || coords === undefined || !this._validateService.validateCoordinatesString(coords)) {\r\n\t\t\t\tthis._recenterMap(this._lat, this._lng, this._zoom);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlat = Number(coords.split(',')[0]);\r\n\t\t\tlng = Number(coords.split(',')[1]);\r\n\r\n\t\t\tthis._recenterMap(lat, lng, this._zoom);\r\n\r\n\t\t\tif (this.view === eDialogViews.UPDATE) {\r\n\t\t\t\tthis._placeMarker(lat, lng);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _setupPopupSubscriptions(): void {\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._closeFinal();\r\n\t\t})\r\n\r\n\t\tthis._sharedUpdateService.delete$\r\n\t\t\t.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\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\tprivate _show(): void {\r\n\t\tthis._dialogRef.removePanelClass(DIALOG_HIDE_CLASS);\r\n\t}\r\n\r\n\tprivate _updateAndClose(lotId: number, lot: ILotEdit): void {\r\n\r\n\t\tthis._updateService.setRanchSettingsUpdated('lots');\r\n\t\tthis._lotSubscriptionService.setCurrentRanchLots(this._updateService.currentRanchId, lotId, lot);\r\n\t\tthis._closeFinal();\r\n\t}\r\n}\r\n","<div class=\"bk-dialog bk-modal--short\">\r\n    <button type=\"button\"\r\n        *ngIf=\"!removingMember && !closingModal\"\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=\"!closingModal\">\r\n            <ng-container *ngIf=\"dialogMode === dialogModes.CREATE && !removingMember\">\r\n                {{'Add' | translate }} {{'Ranch Member' | translate }}\r\n            </ng-container>\r\n    \r\n            <ng-container *ngIf=\"dialogMode === dialogModes.UPDATE && !removingMember\">\r\n                {{'Edit' | translate }} {{'Ranch Member' | translate }}\r\n            </ng-container>\r\n\r\n            <ng-container *ngIf=\"removingMember\">\r\n                {{'Remove' | translate }} {{'Ranch Member' | translate }}\r\n            </ng-container>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"closingModal\">\r\n            {{'Changes not saved' | translate }}\r\n        </ng-container>\r\n    </h4>\r\n    \r\n    <div mat-dialog-content>\r\n\r\n        <form *ngIf=\"form\"\r\n            [formGroup]=\"form\">\r\n            <div *ngIf=\"!removingMember && !closingModal\">\r\n                <ng-container *ngIf=\"dialogMode === dialogModes.CREATE\">\r\n                    <mat-form-field class=\"mat-form-field--w3\" appearance=\"fill\">\r\n                        <mat-label>{{'Username' | translate }}</mat-label>\r\n                        <input type=\"text\"\r\n                               placeholder=\"Search for Ranch Member\"\r\n                               aria-label=\"Name\"\r\n                               matInput\r\n                               [formControl]=\"userControl\"\r\n                               [matAutocomplete]=\"auto\">\r\n                        <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn\"\r\n                            (onChange)=\"onUserSelected($event)\">\r\n                            <mat-option *ngFor=\"let user of usersFiltered | async\" [value]=\"user\">\r\n                                {{user.Name}}\r\n                            </mat-option>\r\n                        </mat-autocomplete>\r\n                      </mat-form-field>\r\n                </ng-container>\r\n                <div *ngIf=\"dialogMode === dialogModes.UPDATE\"\r\n                    class=\"cm-ranch-member-dialog__user-name\">\r\n                    <mat-icon>account_circle</mat-icon>{{form.get('name').value}}\r\n                </div>\r\n                <ng-container *ngIf=\"form.get('permissions').value.length > 0\">\r\n                    <h4 class=\"cm-dialog__h4--underline\">{{'Access Permissions' | translate }}</h4>\r\n                    <div class=\"cm-ranch-member-dialog__permission-row\"\r\n                        *ngFor=\"let feature of form.get('permissions').controls; let i = index\">\r\n\r\n                        <span class=\"cm-ranch-member-dialog--label\">\r\n                            {{feature.get('FeatureName').value | translate }}\r\n                        </span>\r\n\r\n                        <mat-radio-group aria-label=\"\"\r\n                            name=\"permission_{{feature.get('FeatureName').value}}\"\r\n                            id=\"permission_{{feature.get('FeatureName').value}}\"\r\n                            [formControl]=\"feature.get('PermissionId')\">\r\n\r\n                            <div class=\"bk-modal__cell\"\r\n                                *ngFor=\"let permission of permissionTypes\">\r\n\r\n                                    <mat-radio-button [value]=\"permission.PermissionId\"\r\n                                        name=\"permission_{{feature.get('FeatureName').value}}\"\r\n                                        [disabled]=\"permissionOptionDisabled(feature.get('FeatureName').value,\r\n                                        permission.PermissionName)\">\r\n                                        {{ permission.PermissionName | translate }}\r\n                                    </mat-radio-button>\r\n                            </div>\r\n                        </mat-radio-group>\r\n                    </div>\r\n                </ng-container>\r\n            </div>\r\n        </form>\r\n        <div *ngIf=\"removingMember && form\"\r\n            class=\"bk-modal__remove-text\">\r\n\r\n            {{'Remove Ranch Member Text' | translate }}: {{form.get('name').value}}?\r\n        </div>\r\n        <div *ngIf=\"closingModal\"\r\n            class=\"bk-modal__remove-text\">\r\n\r\n            {{'The changes you made were not saved. Discard changes?' | translate }}\r\n        </div>\r\n    </div>\r\n\r\n    <div mat-dialog-actions align=\"end\">\r\n        <div *ngIf=\"!removingMember && !closingModal\">\r\n            \r\n            <button class=\"bk-button bk-button--medium bk-button--text-only\r\n                bk-button--float-left\"\r\n                *ngIf=\"dialogMode === dialogModes.UPDATE\"\r\n                (click)=\"showRemoveMember($event)\">\r\n                \r\n                {{'Remove' | translate }} {{'Ranch Member' | translate }}\r\n            </button>\r\n\r\n            <button class=\"bk-button bk-button--text-only bk-button--medium\"\r\n                (click)=\"close()\">{{'Cancel' | translate }}\r\n            </button>\r\n\r\n            <button class=\"bk-button bk-button--medium\"\r\n                *ngIf=\"dialogMode === dialogModes.CREATE\"\r\n                (click)=\"addRanchMember()\"\r\n                [disabled]=\"!form || form.invalid\">\r\n                {{'Add' | translate }} {{'Ranch Member' | translate }}\r\n            </button>\r\n\r\n            <button class=\"bk-button bk-button--medium\"\r\n                *ngIf=\"dialogMode === dialogModes.UPDATE\"\r\n                (click)=\"editRanchMember()\">\r\n                {{'Save' | translate }}\r\n            </button>\r\n        </div>\r\n        <div *ngIf=\"removingMember && !closingModal\">\r\n            <button class=\"bk-button bk-button--text-only bk-button--medium\"\r\n                (click)=\"hideRemoveMember($event)\">\r\n                {{'Cancel' | translate }}\r\n            </button>\r\n            <button class=\"bk-button bk-button--medium\"\r\n                (click)=\"deleteRanchMember()\">\r\n                {{'Remove' | translate }} {{'Ranch Member' | translate }}\r\n            </button>\r\n        </div>\r\n        <div *ngIf=\"closingModal && !removingMember\">\r\n            <button class=\"bk-button bk-button--medium bk-button--text-only\"\r\n                (click)=\"cancelClose($event)\">\r\n                {{'Keep Editing' | translate }}\r\n            </button>\r\n            <button class=\"bk-button bk-button--medium\"\r\n                (click)=\"confirmClose()\">\r\n                {{'Discard' | translate }}\r\n            </button>\r\n        </div>\r\n    </div>\r\n</div>","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { RanchService } from '../../service';\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { PermissionsService } from '../../permissions.service';\r\nimport { Subject } from 'rxjs';\r\nimport { IUserSearchResult, IRanchFeatureEmptyPermissions, IRanchPermissionTypes,\r\n\tIRanchUserPermissionWithWebAPIViewModel, IRanchUserListItem } from '../../interfaces';\r\nimport { CMError } from '../../../../interfaces/interfaces';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\r\nimport { PersistentDatabase } from '../../../../services/persistent-database';\r\nimport { Router } from '@angular/router';\r\nimport { map, startWith, takeUntil } from 'rxjs/operators';\r\n\r\nexport enum eDialogModes {\r\n\tUPDATE = 1,\r\n\tCREATE = 2\r\n}\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ranch-member-modal',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: ['main.scss']\r\n})\r\n\r\nexport class RanchMemberModalComponent implements OnInit, OnDestroy {\r\n\t// for add functionality\r\n\tpublic closingModal = false;\r\n\tpublic form: FormGroup;\r\n\tpublic dialogMode: eDialogModes;\r\n\tpublic dialogModes = eDialogModes; // used in template\r\n\tpublic isSaving: boolean;\r\n\tpublic userControl = new FormControl(); // used for autocomplete\r\n\tpublic permissionTypes: IRanchPermissionTypes[] = new Array();\r\n\tpublic removingMember = false;\r\n\tpublic users: IUserSearchResult[] = new Array();\r\n\tpublic usersFiltered: Observable<IUserSearchResult[]>;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: IRanchUserListItem,\r\n\t\tprivate _dialogRef: MatDialogRef<RanchMemberModalComponent>,\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate _permissionsService: PermissionsService,\r\n\t\tprivate _persistentDatabase: PersistentDatabase,\r\n\t\tprivate _ranchService: RanchService,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\t) {\r\n\t}\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.isSaving = false;\r\n\t\tthis._subscriptions$ = new Subject();\r\n\t\tthis.permissionTypes = this._permissionsService.getRanchPermissionTypes();\r\n\r\n\t\tthis.removingMember = false;\r\n\r\n\t\tif (this._data && this._data.UserId) {\r\n\t\t\tthis.dialogMode = eDialogModes.UPDATE;\r\n\t\t\tthis.users = new Array();\r\n\t\t\tthis._getEditMemberData(this._data.UserId).then(() => {\r\n\t\t\t\tthis.form.get('name').setValue(this._data.UserFullName);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.dialogMode = eDialogModes.CREATE;\r\n\t\t\tthis._getAddMemberData();\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 async addRanchMember(): Promise<void> {\r\n\t\tif (!this.form) {\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\tawait this._ranchService.addRanchMember(this.form.get('userId').value);\r\n\t\tawait this.editRanchMember(); // save permissions\r\n\t\tthis.isSaving = false;\r\n\t}\r\n\r\n\tpublic cancelClose(): void {\r\n\t\tthis.closingModal = false;\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tif (this.form && this.form.touched) {\r\n\t\t\tthis.closingModal = true;\r\n\t\t} else {\r\n\t\t\tthis._dialogRef.close();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic confirmClose(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n\r\n\tpublic deleteRanchMember(): void {\r\n\t\tthis._ranchService.deleteRanchUser(this.form.get('userId').value)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.confirmClose();\r\n\r\n\t\t\t\tif (this.form.get('userId').value === this._persistentDatabase.user.Id) {\r\n\t\t\t\t\t// if the user deleted himself from the ranch, navigate\r\n\t\t\t\t\t// back to the Ranches view to avoid reloading ranch\r\n\t\t\t\t\t// settings and triggering an error\r\n\t\t\t\t\tthis._ranchService.removeFromRanches(this._updateService.currentRanchId);\r\n\t\t\t\t\tthis._router.navigate(['MyDashboard']);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._updateService.setRanchSettingsUpdated('users');\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Display user's name in the input box\r\n\t * @param user\r\n\t * @returns\r\n\t */\r\n\tpublic displayFn(user: IUserSearchResult): string {\r\n\t\treturn user && user.Name ? user.Name : '';\r\n\t}\r\n\r\n\tpublic async editRanchMember(): Promise<void> {\r\n\t\tawait this._permissionsService.editRanchMemberPermissions(this.form.get('userId').value, this.form.get('permissions').value);\r\n\t\tthis._updateService.setRanchSettingsUpdated('users');\r\n\t\tthis.confirmClose();\r\n\t}\r\n\r\n\tpublic hideRemoveMember(e: MouseEvent): void {\r\n\t\tthis.removingMember = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Disables permission options:\r\n\t * 1. if user ID isn't set, permissions are disabled until a user is chosen\r\n\t * 2. for ranch and planting, don't let users choose 'No Access'\r\n\t * @param featureName\r\n\t * @param permissionName\r\n\t */\r\n\tpublic permissionOptionDisabled(featureName: string, permissionName: string): boolean {\r\n\t\tif (this.form.get('userId').value == null) {\r\n\t\t\treturn true;\r\n\t\t} else if ((featureName === 'Ranch' || featureName === 'Planting') && permissionName === 'No Access') {\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 onUserChange(value: IUserSearchResult): void {\r\n\t\tif (!value) {\r\n\t\t\tthis._clearNewMember();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._setNewMember(value);\r\n\t}\r\n\r\n\tpublic showRemoveMember(e: MouseEvent): void {\r\n\t\tthis.removingMember = true;\r\n\t}\r\n\r\n\tprivate _clearNewMember() {\r\n\t\tthis._initializeForm(null, this._permissionsService.getRanchFeatureEmptyPermissions());\r\n\t}\r\n\r\n\tprivate _filter(value: string): IUserSearchResult[] {\r\n\t\tlet filterValue: string;\r\n\r\n\t\tfilterValue = value ? value.toLowerCase() : '';\r\n\r\n\t\tif (!this.users) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\treturn this.users.filter(u => u.Name.toLowerCase().includes(filterValue));\r\n\t}\r\n\r\n\tprivate async _getAddMemberData(): Promise<void> {\r\n\t\tlet data: IUserSearchResult[];\r\n\r\n\t\tdata = await this._ranchService.getAddRanchMembersList();\r\n\r\n\t\tthis.users = data;\r\n\r\n\t\tthis._initializeForm(null, this._permissionsService.getRanchFeatureEmptyPermissions());\r\n\r\n\t\tthis.usersFiltered = this.userControl.valueChanges.pipe(\r\n\t\t\tstartWith(''),\r\n\t\t\tmap(value => (typeof value === 'string' ? value : value.Name)),\r\n\t\t\tmap(value => this._filter(value)),\r\n\t\t);\r\n\r\n\t\tthis.userControl.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe((val) => {\r\n\t\t\tif (typeof val !== 'string') {\r\n\t\t\t\tthis.onUserChange(val);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate async _getEditMemberData(userId: string): Promise<void> {\r\n\t\tlet json: IRanchUserPermissionWithWebAPIViewModel | CMError;\r\n\t\tlet error: CMError;\r\n\t\tlet response: IRanchUserPermissionWithWebAPIViewModel;\r\n\r\n\t\tjson = await this._permissionsService.getRanchMemberPermissions(userId);\r\n\r\n\t\tif (!json) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\terror = json as CMError;\r\n\t\tresponse = json as IRanchUserPermissionWithWebAPIViewModel;\r\n\r\n\t\tif (error.message) {\r\n\r\n\t\t\treturn;\r\n\t\t} else {\r\n\t\t\tthis._initializeForm(userId, response.Site);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tprivate _initializeForm(userId?: string, permissions?: IRanchFeatureEmptyPermissions[]): void {\r\n\t\tlet temp: FormGroup;\r\n\r\n\t\ttemp = this._fb.group({\r\n\t\t\tuserId: [userId, Validators.required],\r\n\t\t\tname: [null],\r\n\t\t\tpermissions: this._fb.array([])\r\n\t\t});\r\n\r\n\t\tfor (let permission of permissions) {\r\n\t\t\t(temp.get('permissions') as FormArray).push(this._fb.group({\r\n\t\t\t\tFeatureId: [permission.FeatureId, Validators.required],\r\n\t\t\t\tFeatureName: [permission.FeatureName, Validators.required],\r\n\t\t\t\tPermissionId: [permission.PermissionId, Validators.required]\r\n\t\t\t}));\r\n\t\t}\r\n\r\n\t\tthis.form = temp;\r\n\t}\r\n\r\n\tprivate _setNewMember(searchResult: IUserSearchResult) {\r\n\t\tthis._initializeForm(searchResult.UserId, this._permissionsService.getRanchFeatureDefaultPermissions());\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-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=\"view === dialogViews.CREATE\">\r\n            {{'Add' | translate }} {{'Water Source' | translate }}\r\n        </ng-container>\r\n        <ng-container *ngIf=\"view === dialogViews.UPDATE\">\r\n            {{'Edit' | translate }} {{'Water Source' | translate }}\r\n        </ng-container>\r\n    </h4>\r\n \r\n    <div mat-dialog-content>\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>\r\n                    {{'Name' | translate }}\r\n                </mat-label>\r\n                <input matInput \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                    {{'Name cannot be empty or longer than 128 characters' | 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                    {{'Nitrate-N Concentration' | translate }}\r\n                </mat-label>\r\n                <input matInput\r\n                    id=\"NitrogenPPM\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    required\r\n                    formControlName=\"NitrogenPPM\"/>\r\n                <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                    {{'ppm' | translate }}\r\n                </span>\r\n\r\n                <mat-error *ngIf=\"f.NitrogenPPM.invalid &&\r\n                    (f.NitrogenPPM.dirty || f.NitrogenPPM.touched)\">\r\n                    {{'Not a valid number' | 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\r\n                <mat-label>\r\n                    {{'Electrical Conductivity' | translate }}\r\n                </mat-label>\r\n                <input matInput\r\n                    id=\"ElectricalConductivity\"\r\n                    type=\"number\"\r\n                    step=\"0.01\"\r\n                    formControlName=\"ElectricalConductivity\"/>\r\n                <span matSuffix class=\"mat-form-field-suffix--padded\">\r\n                    {{'dS/m' | translate }}\r\n                </span>\r\n\r\n                <mat-error *ngIf=\"f.ElectricalConductivity.invalid &&\r\n                    (f.ElectricalConductivity.dirty || f.ElectricalConductivity.touched)\">\r\n                    {{'Not a valid number' | translate }}\r\n                </mat-error>\r\n            </mat-form-field>  \r\n        </form>\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            bk-button--float-left\"\r\n            *ngIf=\"view === dialogViews.UPDATE\"\r\n            [disabled]=\"count <= 1\"\r\n            (click)=\"onDeleteConfirmationOpen()\">\r\n            {{'Remove' | translate }} {{'Water Source' | translate }}\r\n            <i *ngIf=\"count <= 1\"\r\n                matTooltip=\"{{'You cannot delete the only well associated with a ranch' | translate }}.\"\r\n                class=\"bk-recommendation__icon fa fa-info-circle\">\r\n            </i>\r\n        </button>\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        <button [disabled]=\"!this.form.valid\"\r\n            class=\"bk-button bk-button--medium\"\r\n            *ngIf=\"view === dialogViews.CREATE \"\r\n            (click)=\"addWell()\">\r\n            {{ (isSaving ? 'Adding' : 'Add') | translate }} {{'Water Source' | translate }}\r\n            <img class='bk-button__loader' *ngIf='isSaving' src='/assets/images/loader-20px.gif'/>\r\n        </button>\r\n        <button [disabled]=\"!this.form.valid\"\r\n            class=\"bk-button bk-button--medium\"\r\n            *ngIf=\"view === dialogViews.UPDATE\"\r\n            (click)=\"editWell()\">\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, OnInit, Inject } from '@angular/core';\r\nimport { RanchService } from '../../service';\r\nimport { UpdateService } from '../../../../services/update.service';\r\nimport { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { eDialogViews } from '../../../../interfaces/abstract';\r\nimport { BaseDialog } from '../../../shared/dialogs/base-dialog';\r\nimport { SharedUpdateService } from '../../../shared/dialogs/update.service';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'ranch-well-modal',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: ['main.css']\r\n})\r\n\r\nexport class RanchWellModalComponent extends BaseDialog implements OnInit {\r\n\tpublic count: number; // number of wells associated with a planting\r\n\tprivate wellId: number;\r\n\tpublic loadingData = true;\r\n\tpublic isSaving = false;\r\n\tpublic form: FormGroup;\r\n\tpublic wellName: string; // used in delete confirmation\r\n\r\n\tpublic fields = {\r\n\t\tId: 'Id',\r\n\t\tName: 'Name',\r\n\t\tElectricalConductivity: 'ElectricalConductivity',\r\n\t\tNitrogenPPM: 'NitrogenPPM'\r\n\t}\r\n\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\tpublic get f(): { [key: string]: AbstractControl } { return this.form.controls; } //\r\n\tpublic view: eDialogViews;\r\n\tpublic viewCache: eDialogViews;\r\n\tpublic dialogViews = eDialogViews;\r\n\r\n\tconstructor(\r\n\t\tprivate dialog: MatDialog,\r\n\t\tpublic dialogRef: MatDialogRef<RanchWellModalComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) private _data: { id: number, count: number},\r\n\t\tprivate _fb: FormBuilder,\r\n\t\tprivate ranchService: RanchService,\r\n\t\tprivate updateService: UpdateService,\r\n\t\tprivate sharedUpdateService: SharedUpdateService) {\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._initializeForm();\r\n\t\tthis._configureDeleteConfirmationText();\r\n\t\tsuper.ngOnInit();\r\n\r\n\t\tif (this._data) {\r\n\t\t\tthis.count = this._data.count;\r\n\r\n\t\t\tif (this._data.id) {\r\n\t\t\t\tthis.wellId = this._data.id;\r\n\t\t\t\tthis.view = eDialogViews.UPDATE;\r\n\t\t\t\tthis.getEditWellData(this._data.id);\r\n\t\t\t} else {\r\n\t\t\t\tthis.view = eDialogViews.CREATE;\r\n\t\t\t\tthis.loadingData = false;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.viewCache = this.view;\r\n\t}\r\n\r\n\tprivate _initializeForm(): void {\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tName: [null, [Validators.required, Validators.maxLength(128)]],\r\n\t\t\tElectricalConductivity: [null, [Validators.min(0.00001),\r\n\t\t\t\tValidators.max(2147483627)]],\r\n\t\t\tNitrogenPPM: [null, [Validators.required, Validators.min(0.0000001),\r\n\t\t\t\tValidators.max(2147483627)]]\r\n\t\t});\r\n\t}\r\n\r\n\tpublic submit() {\r\n\t\tif (this.view === eDialogViews.UPDATE) {\r\n\t\t\tthis.editWell();\r\n\t\t} else {\r\n\t\t\tthis.addWell();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate getEditWellData(id: number): void {\r\n\t\tthis.ranchService.getRanchWellEditData(id)\r\n\t\t\t.then(data => {\r\n\t\t\t\tthis.form.markAsDirty();\r\n\t\t\t\tthis.form.get(this.fields.Name).setValue(data.Name);\r\n\t\t\t\tthis.form.get(this.fields.ElectricalConductivity).setValue(data.ElectricalConductivity);\r\n\t\t\t\tthis.form.get(this.fields.NitrogenPPM).setValue(data.NitrogenPPM);\r\n\t\t\t\tthis.wellName = data.Name;\r\n\t\t\t\tthis.loadingData = false;\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic editWell(): void {\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.ranchService.editRanchWell(this.wellId, this.form.value)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.updateService.setRanchSettingsUpdated('wells');\r\n\t\t\t\tthis.dialogRef.close();\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic addWell(): void {\r\n\t\tthis.loadingData = true;\r\n\t\tthis.isSaving = true;\r\n\r\n\t\tthis.ranchService.addRanchWell(this.form.value)\r\n\t\t\t.then(() => {\r\n\t\t\t\tthis.updateService.setRanchSettingsUpdated('wells');\r\n\t\t\t\tthis.dialogRef.close();\r\n\t\t\t\tthis.isSaving = false;\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic delete(): void {\r\n\t\tthis.loadingData = true;\r\n\r\n\t\tthis.ranchService.deleteRanchWell(this.wellId)\r\n\t\t.then(() => {\r\n\t\t\tthis.updateService.setRanchSettingsUpdated('wells');\r\n\t\t\tthis.sharedUpdateService.deleteComplete();\r\n\t\t\tthis.close();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * used by parent class\r\n\t */\r\n\tprivate _configureDeleteConfirmationText(): void {\r\n\t\tthis._deleteConfirmationData = {\r\n\t\t\tobjectName: 'Water Source',\r\n\t\t\tspecificName: this.wellName,\r\n\t\t\tadditionalMessage: 'Are you sure you want to delete this water source?'\r\n\t\t};\r\n\t}\r\n}\r\n","<div class=\"bk-ranch-settings__container\"\r\n    [ngClass]=\"{'bk-dashboard__container--short' : persistentDatabase.isGlobalNotificationVisible}\">\r\n    \r\n    <ranch-nav *ngIf=\"isRanchIdValid !== undefined\"\r\n        [title]=\"title\"\r\n        [isRanchIdValid]=\"isRanchIdValid\">\r\n\r\n        <ranch-tab [tabTitle]=\"'Active Plantings'\">\r\n            <plantings *ngIf='isRanchIdValid'\r\n                [ranchId]=\"ranchId\"\r\n                [type]=\"'ActivePlantings'\">\r\n            </plantings>\r\n        </ranch-tab>\r\n        <ranch-tab [tabTitle]=\"'Favorite Plantings'\">\r\n            <plantings *ngIf='isRanchIdValid'\r\n                [ranchId]=\"ranchId\"\r\n                [type]=\"'FavoritePlantings'\">\r\n            </plantings>\r\n        </ranch-tab>\r\n        <ranch-tab [tabTitle]=\"'All Plantings'\">\r\n            <plantings *ngIf='isRanchIdValid'\r\n                [ranchId]=\"ranchId\"\r\n                [type]=\"'AllPlantings'\">\r\n            </plantings>\r\n        </ranch-tab>\r\n        <ranch-settings [ranchId]=\"ranchId\"></ranch-settings>\r\n    </ranch-nav>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { PermissionsService } from '../permissions.service';\r\nimport { navigationViews, UpdateService } from '../../../services/update.service';\r\nimport { CookieService } from '../../../services/cookie.service';\r\nimport { RanchService } from '../service';\r\nimport { PersistentDatabase } from '../../../services/persistent-database';\r\nimport { LotSubscriptionService } from '../../../services/subscriptions/lot.subscription';\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: 'ranch',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class RanchComponent implements OnInit {\r\n\tpublic ranchId: string;\r\n\tpublic title: string;\r\n\tpublic isRanchIdValid: boolean;\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tconstructor(\r\n\t\tpublic persistentDatabase: PersistentDatabase,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _route: ActivatedRoute,\r\n\t\tprivate _tokenService: TokenService,\r\n\t\tprivate _permissionsService: PermissionsService,\r\n\t\tprivate _updateService: UpdateService,\r\n\t\tprivate _cookieService: CookieService,\r\n\t\tprivate _lotSubscriptionService: LotSubscriptionService,\r\n\t\tprivate _ranchService: RanchService) {\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\r\n\t\t\tthis._ranchService.exists(params['id']).then((resp) => {\r\n\r\n\t\t\t\tif (!resp || resp.Exists === false) {\r\n\t\t\t\t\tthis.isRanchIdValid = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.ranchId = params['id'];\r\n\t\t\t\tthis.title = resp.Name;\r\n\r\n\t\t\t\tthis.isRanchIdValid = true;\r\n\t\t\t\tthis._updateService.setCurrentRanchId(this.ranchId);\r\n\t\t\t\tthis._lotSubscriptionService.setCurrentRanchLots(this.ranchId, null, null);\r\n\r\n\t\t\t\tthis._permissionsService.getRanchPlantingsPermissions(this.ranchId)\r\n\t\t\t\t\t.then((data) => {\r\n\r\n\t\t\t\t\t\tif (!data) {\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._updateService.setRanchPlantingsPermissions(data);\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\tthis._cookieService.setCurrentRanchCookie(this.ranchId);\r\n\t\t\t\tthis._updateService.setCurrentPage(navigationViews.RANCHES);\r\n\r\n\t\t\t\tthis._ranchService.getMissingSettings(this.ranchId).then((response) => {\r\n\t\t\t\t\tif (response) {\r\n\t\t\t\t\t\tthis._updateService.setMissingRanchSettings(response);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\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","import { EventsType } from '../../interfaces/constants';\r\nimport { IRanchPermissions } from './interfaces';\r\n\r\nexport class RanchPermissions {\r\n\r\n\tpublic static isEditable(permissions: IRanchPermissions, eventType: EventsType): boolean {\r\n\t\tif (!permissions) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tswitch (eventType) {\r\n\t\t\tcase EventsType.WATER:\r\n\t\t\t\tif (permissions.UserCanEditIrrigationEvent) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.FERTILIZER:\r\n\t\t\t\tif (permissions.UserCanEditFertilizationEvent) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.SOILSAMPLES:\r\n\t\t\t\tif (permissions.UserCanEditSoilSampleEvent) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.CUTTING:\r\n\t\t\t\tif (permissions.UserCanEditPlanting) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase EventsType.TISSUE_SAMPLE:\r\n\t\t\t\tif (permissions.UserCanEditPlanting) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n","import { Component, OnDestroy } from '@angular/core';\r\nimport * as _ from 'underscore';\r\nimport * as jQuery from 'jquery';\r\n\r\nimport { IEventGroup } from '../../../models/event/interfaces';\r\nimport { DateUtility } from '../../../classes/dateUtility';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { ObjectUtility } from '../../../classes/objectUtility';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'abstract-modal',\r\n\t// template never used because component never instantiated\r\n\ttemplate: `<ng-container></ng-container>`\r\n})\r\n\r\n// abstract component class\r\nexport class AbstractModalComponent implements OnDestroy {\r\n\tpublic closingModal = false; // REFACTOR - RENAME - is true if changes have been made in the form\r\n\tpublic originalObject: any = null;\r\n\tpublic isExitConfirmationEnabled = false; // when this is set, keep/discard confirmation prompt comes up\r\n\t// rename this - \"enabled\" sounds like a setting\r\n\tpublic allowClickOutside = false;\r\n\tpublic datePickerOpen = false;\r\n\t/*for Event modals only*/\r\n\tpublic originalEventDate: string = null;\r\n\tprotected _subscriptions$: Subject<boolean>;\r\n\r\n\t// pass instance of UpdateService as a parameter for modals implenting universal error handling\r\n\tconstructor(private updateSvc?: UpdateService, ) {\r\n\t\tif (!updateSvc) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.updateSvc.closeModalSubscription.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.modalCloseFunction();\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 setModalCloseFunction(modalCloseFcn: () => void): void {\r\n\t\tthis.modalCloseFunction = modalCloseFcn;\r\n\t}\r\n\r\n\tprotected modalCloseFunction(): void { }\r\n\r\n\tpublic checkForChanges(object: any): void {\r\n\t\tlet currentObject: any;\r\n\t\tlet areEqual = false;\r\n\r\n\t\tif (this.originalObject === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// fix to prevent incorrect change detection when comparing classes\r\n\t\tcurrentObject = jQuery.extend(true, {}, object);\r\n\r\n\t\tareEqual = ObjectUtility.AreEqual(this.originalObject, currentObject, null);\r\n\r\n\t\tif (areEqual) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isExitConfirmationEnabled = true;\r\n\t\tthis.originalObject = null;\r\n\t}\r\n\r\n\tpublic setOriginalObject(object: any, isEvent?: boolean): void {\r\n\t\tthis.originalObject = jQuery.extend(true, {}, object);\r\n\r\n\t\tif (isEvent) {\r\n\t\t\tthis.setOriginalEventDate(object as IEventGroup);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic setOriginalObjectArray(objectArray: any): void {\r\n\t\tif (!(objectArray instanceof Array)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet copyArr = new Array();\r\n\r\n\t\tfor (let obj of objectArray) {\r\n\t\t\tlet itemCopy = jQuery.extend(true, {}, obj);\r\n\t\t\tcopyArr.push(itemCopy);\r\n\t\t}\r\n\r\n\t\tthis.originalObject = copyArr;\r\n\t}\r\n\r\n\tpublic handleClickOutside(e: MouseEvent): void {\r\n\t\tthis.stopEventPropagation(e);\r\n\r\n\t\tif (this.preventClose(e)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.close();\r\n\t}\r\n\r\n\t/*override this*/\r\n\tprotected preventClose(e?: MouseEvent): boolean {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic close(): void {\r\n\t\tif (this.preventClose()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this.isExitConfirmationEnabled) {\r\n\t\t\tthis.confirmClose();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.closingModal = true;\r\n\t}\r\n\r\n\t/*override this*/\r\n\tpublic confirmClose(): void { }\r\n\r\n\tpublic cancelClose(e: MouseEvent): void {\r\n\t\tthis.closingModal = false;\r\n\t\tthis.stopEventPropagation(e);\r\n\t}\r\n\r\n\tpublic stopEventPropagation(e: MouseEvent): void {\r\n\t\tif (e && e !== null && e !== undefined && e instanceof MouseEvent) {\r\n\t\t\tif (typeof e.stopPropagation === 'function') {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t\tif (typeof e.preventDefault === 'function') {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic clearSettings(): void {\r\n\t\tthis.closingModal = false;\r\n\t\tthis.originalObject = null;\r\n\t\tthis.isExitConfirmationEnabled = false;\r\n\t\tthis.allowClickOutside = false;\r\n\t\tthis.datePickerOpen = false;\r\n\t\tthis.originalEventDate = null;\r\n\t}\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 setOriginalEventDate(event: IEventGroup): void {\r\n\t\tif (!event || !event.EventDate) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.originalEventDate = DateUtility.getmmddyyyyString(event.EventDate);\r\n\t}\r\n}\r\n","<div class=\"modal-content\">\r\n    <div class=\"modal-header bk-modal__header\">\r\n        <button type=\"button\"\r\n            class=\"bk-button bk-modal__close close\"\r\n            (click)=\"close.emit()\">\r\n            <span>&times;</span>\r\n        </button>\r\n        <h4 class=\"bk-modal__header-title\">{{title | translate }}</h4>\r\n    </div>\r\n    <div class=\"modal-body bk-modal__body\">\r\n        <div class=\"bk-loader__container\">\r\n            <div class=\"bk-loader\">{{'Loading' | translate }}...</div>\r\n        </div>\r\n    </div>\r\n    <div class=\"modal-footer bk-modal__footer\">\r\n        <button class=\"bk-button bk-button--medium\"\r\n            (click)=\"close.emit()\">\r\n            {{'Cancel' | translate }}\r\n        </button>\r\n    </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'modal-loader',\r\n\ttemplateUrl: 'main.html'\r\n})\r\n\r\nexport class ModalLoaderComponent {\r\n\t@Input()\r\n\ttitle: string;\r\n\r\n\t@Output()\r\n\tclose: EventEmitter<void> = new EventEmitter<void>();\r\n}\r\n","<div *ngIf=\"event && isCropManageRecommendation\"\r\n    class=\"bk-planting__event-row__measurements__icon bk-button--gray-icon\">\r\n    <i class=\"fa fa-leaf\" matTooltip=\"CropManage Recommendation\"></i>\r\n</div>\r\n\r\n<div *ngIf=\"event && !isCropManageRecommendation && !shouldShowFlowmeterIcon\"\r\n    class=\"bk-planting__event-row__measurements__icon\">\r\n    <!-- display a 20px wide space here -->\r\n</div>\r\n\r\n<div *ngIf=\"shouldShowFlowmeterIcon\"\r\n    class=\"bk-planting__event-row__measurements__icon bk-button--gray-icon\">\r\n    <i class=\"fas fa-water\"></i>\r\n</div>","import { Component, Input, OnInit, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\r\n\r\nimport { EventUtility } from '../../../models/event/eventUtility';\r\nimport { ValidateService } from '../../../services/validate.service';\r\nimport { UpdateService } from '../../../services/update.service';\r\nimport { Plantings } from '../../plantings/plantings';\r\n\r\nimport { IEventGroup, IEventUpdatedOptions } from '../../../models/event/interfaces';\r\nimport { EventContext, EventTypeNames } 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: 'user-icon',\r\n\ttemplateUrl: 'main.html',\r\n\tstyleUrls: ['main.scss']\r\n})\r\n\r\nexport class UserIconComponent implements OnInit, OnChanges, OnDestroy {\r\n\t@Input()\r\n\tpublic event: IEventGroup; // iEvent\r\n\r\n\t@Input()\r\n\tprivate eventType: string; // REFACTOR - this variable name is too generic - supposed to be eventType\r\n\t// can be 'Water', 'Fertilizer', or 'SoilSamples'\r\n\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\tpublic isCropManageRecommendation = true;\r\n\tpublic shouldShowFlowmeterIcon = false;\r\n\r\n\tconstructor(private updateService: UpdateService) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.evaluate();\r\n\t\tthis._subscriptions$ = new Subject();\r\n\r\n\t\tthis.updateService.EventUpdated$.pipe(takeUntil(this._subscriptions$)).subscribe((data: IEventUpdatedOptions) => {\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\tif (Plantings.idExistsInEvent(this.event, data.eventId)) {\r\n\t\t\t\tthis.evaluate();\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\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tthis.evaluate();\r\n\t}\r\n\r\n\tprivate evaluate(): void {\r\n\r\n\t\tthis.isCropManageRecommendation =\r\n\t\t\tEventUtility.shouldShowLeafIcon(this.event, this.eventType);\r\n\r\n\t\tif (this.event && this.eventType === EventTypeNames.WATER &&\r\n\t\t\t!this.isCropManageRecommendation && this.event.Irrigation &&\r\n\r\n\t\t\tthis.event.Irrigation.HasFlowMeterData) {\r\n\r\n\t\t\tthis.shouldShowFlowmeterIcon = true;\r\n\t\t} else {\r\n\t\t\tthis.shouldShowFlowmeterIcon = false;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n","import { FormBuilder, Validators } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { FormValidation } from '../../classes/formValidation';\r\nimport { eSoilWebCrawErrors } from '../../interfaces/constants';\r\nimport { ISoilLayer, ISoilWebProperties } from '../../models/soil-type/interfaces';\r\nimport { SoilTypeService } from '../../models/soil-type/service';\r\n\r\nexport type CustomSoilPropertiesFields = 'Layers';\r\n\r\nexport class CustomSoilPropertiesFormBuilder {\r\n\tprivate _fb: FormBuilder;\r\n\tprivate _customSoilLayers: ISoilLayer[]; // custom soil layer data with null values\r\n\tpublic diffs: ISoilLayer[]; // difference between custom soil layer (initial) and soil web\r\n\tprivate _subscriptions$: Subject<boolean>;\r\n\r\n\tpublic areSoilLayersCustomized: boolean;\r\n\tpublic form: FormGroup;\r\n\tpublic soilWebProperties: ISoilWebProperties; // this is accessed in a template\r\n\r\n\tpublic get f(): { [key in CustomSoilPropertiesFields]: AbstractControl } {\r\n\t\treturn this.form.controls as\r\n\t\t\t{ [key in CustomSoilPropertiesFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(fb: FormBuilder,\r\n\t\tcustomSoilLayers: ISoilLayer[],\r\n\t\t$subscription: Subject<boolean>) {\r\n\r\n\t\tthis._fb = fb;\r\n\t\tthis._subscriptions$ = $subscription;\r\n\t\tthis._customSoilLayers = customSoilLayers;\r\n\t}\r\n\r\n\tprivate _initialize(soilWebLayers: ISoilLayer[]): FormGroup {\r\n\t\tthis.diffs = this._generateDiffs(this._customSoilLayers, soilWebLayers);\r\n\r\n\t\tthis._customSoilLayers = this._normalizeCustomProperies(this._customSoilLayers,\r\n\t\t\tsoilWebLayers);\r\n\r\n\t\tthis.form = this._fb.group({\r\n\t\t\tLayers: this._fb.array([]),\r\n\t\t\tAverageMineralization: null\r\n\t\t});\r\n\r\n\t\tthis._addLayersToForm(this._customSoilLayers);\r\n\t\tthis._bindValueChanges();\r\n\t\tthis.areSoilLayersCustomized = this._areSoilPropertiesCustomized();\r\n\r\n\t\treturn this.form;\r\n\t}\r\n\r\n\tpublic hasChangesbeenMade(): boolean {\r\n\t\treturn this.form.dirty;\r\n\t}\r\n\r\n\t/**\r\n\t * Compares custom soil properties with soil web and generate an array containing\r\n\t * diffs of values\r\n\t * @param customSoilLayers\r\n\t * @param soilWebLayers\r\n\t * @returns\r\n\t */\r\n\tprivate _generateDiffs(customSoilLayers: ISoilLayer[], soilWebLayers: ISoilLayer[]): ISoilLayer[] {\r\n\t\tlet result: ISoilLayer[];\r\n\r\n\t\tresult = [];\r\n\r\n\t\tif (!customSoilLayers || customSoilLayers.length === 0 || !soilWebLayers || soilWebLayers.length === 0) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tfor (let customSoilLayer of customSoilLayers) {\r\n\t\t\tlet soilWebLayer: ISoilLayer;\r\n\t\t\tlet item: ISoilLayer;\r\n\r\n\t\t\tsoilWebLayer = soilWebLayers.find(x => x.Depth === customSoilLayer.Depth);\r\n\r\n\t\t\tresult.push({\r\n\t\t\t\tDepth: customSoilLayer.Depth,\r\n\t\t\t\tDensity: customSoilLayer.Density ? (soilWebLayer.Density - customSoilLayer.Density) : 0,\r\n\t\t\t\tSilt: customSoilLayer.Silt ? (soilWebLayer.Silt - customSoilLayer.Silt) : 0,\r\n\t\t\t\tSand: customSoilLayer.Sand ? (soilWebLayer.Sand - customSoilLayer.Sand) : 0,\r\n\t\t\t\tOrganic: customSoilLayer.Organic ? (soilWebLayer.Organic - customSoilLayer.Organic) : 0,\r\n\t\t\t\tTension: customSoilLayer.Tension ? (soilWebLayer.Tension - customSoilLayer.Tension) : 0,\r\n\t\t\t\tMineralization: customSoilLayer.Mineralization ? (soilWebLayer.Mineralization - customSoilLayer.Mineralization) : 0\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 * Method triggered when user either clicks on a map, or types in coordinates, or\r\n\t * if user clicks the \"Reset\" button\r\n\t * @param coordinates\r\n\t * @param source soil type source. 1 = certified, 0 = UC Davis. This should actually not be boolean\r\n\t * this field is typically not used unless user clicks the Reset link\r\n\t */\r\n\tpublic initializeWithCoordinates(coordinates: string, soilService: SoilTypeService): Promise<eSoilWebCrawErrors> {\r\n\r\n\t\treturn soilService.getSoilWebRecord(coordinates).then(data => {\r\n\t\t\tlet properties: ISoilWebProperties;\r\n\r\n\t\t\tproperties = data as ISoilWebProperties;\r\n\r\n\t\t\tif (properties.Error) {\r\n\t\t\t\tthis.soilWebProperties = properties;\r\n\t\t\t\treturn properties.Error as eSoilWebCrawErrors;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.form) {\r\n\t\t\t\tthis.soilWebProperties = properties;\r\n\t\t\t\tthis._initialize(this.soilWebProperties.Layers);\r\n\t\t\t} else {\r\n\t\t\t\tif (this._hasSoilTypeChanged(properties)) {\r\n\t\t\t\t\tthis.soilWebProperties = properties;\r\n\t\t\t\t\tthis.resetSoilProperties();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.soilWebProperties = properties;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic initializeWithStaticData(soilWebProperties: ISoilWebProperties): void {\r\n\r\n\t\tif (!soilWebProperties) {\r\n\t\t\tthrow new Error('soil web properties is null');\r\n\t\t}\r\n\r\n\t\tif (!this.form) {\r\n\t\t\tthis.soilWebProperties = soilWebProperties;\r\n\t\t\tthis._initialize(soilWebProperties.Layers);\r\n\t\t} else {\r\n\t\t\tif (this._hasSoilTypeChanged(soilWebProperties)) {\r\n\t\t\t\tthis.soilWebProperties = soilWebProperties;\r\n\t\t\t\tthis.resetSoilProperties();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Prunes custom soil layer values that match Soil Web values to\r\n\t * identify user edited values that are different than Soil Web values\r\n\t * for saving\r\n\t * @returns soil layers\r\n\t * @throws error if soil web layer isn't found\r\n\t */\r\n\tpublic cullRedundantFields(): ISoilLayer[] {\r\n\t\tlet result: ISoilLayer[];\r\n\r\n\t\tresult = this.f.Layers.value;\r\n\r\n\t\tfor (let layer of result) {\r\n\t\t\tlet soilWebLayer: ISoilLayer;\r\n\r\n\t\t\tsoilWebLayer = this.soilWebProperties.Layers.find(x => x.Depth === layer.Depth);\r\n\r\n\t\t\tif (!soilWebLayer) {\r\n\t\t\t\tthrow new Error('soil web layer not found');\r\n\t\t\t}\r\n\r\n\t\t\tlayer.Density = layer.Density === soilWebLayer.Density ? null : layer.Density;\r\n\t\t\tlayer.Mineralization = layer.Mineralization === soilWebLayer.Mineralization ? null : layer.Mineralization;\r\n\t\t\tlayer.Organic = layer.Organic === soilWebLayer.Organic ? null : layer.Organic;\r\n\t\t\tlayer.Sand = layer.Sand === soilWebLayer.Sand ? null : layer.Sand;\r\n\t\t\tlayer.Silt = layer.Silt === soilWebLayer.Silt ? null : layer.Silt;\r\n\t\t\tlayer.Tension = layer.Tension === soilWebLayer.Tension ? null : layer.Tension;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Resets\r\n\t * @throws Error if soil web layer is not found\r\n\t */\r\n\tpublic resetSoilProperties(): void {\r\n\r\n\t\tif (!this.soilWebProperties || !this.soilWebProperties.Layers ||\r\n\t\t\tthis.soilWebProperties.Layers.length === 0) {\r\n\r\n\t\t\tthrow new Error('soilWeb properties not found');\r\n\t\t}\r\n\r\n\t\tfor (let layerControl of (this.f.Layers as FormArray).controls) {\r\n\t\t\tlet soilWebLayer: ISoilLayer;\r\n\r\n\t\t\tsoilWebLayer = this.soilWebProperties.Layers.find(x => x.Depth === layerControl.get('Depth').value);\r\n\r\n\t\t\tif (!soilWebLayer) {\r\n\t\t\t\tthrow new Error('soil web layer not found');\r\n\t\t\t}\r\n\r\n\t\t\tlayerControl.get('Density').setValue(soilWebLayer.Density, { emitEvent: false });\r\n\t\t\tlayerControl.get('Sand').setValue(soilWebLayer.Sand, { emitEvent: false });\r\n\t\t\tlayerControl.get('Mineralization').setValue(soilWebLayer.Mineralization, { emitEvent: false });\r\n\t\t\tlayerControl.get('Organic').setValue(soilWebLayer.Organic, { emitEvent: false });\r\n\t\t\tlayerControl.get('Silt').setValue(soilWebLayer.Silt, { emitEvent: false });\r\n\t\t\tlayerControl.get('Tension').setValue(soilWebLayer.Tension, { emitEvent: false });\r\n\t\t}\r\n\r\n\t\tthis.areSoilLayersCustomized = false;\r\n\t\tthis.diffs = this._generateDiffs(this.soilWebProperties.Layers, this.soilWebProperties.Layers);\r\n\t}\r\n\r\n\t/**\r\n\t * Determines whether soilWeb soil type changed based on coKey.\r\n\t * Different coordinates may share the same soil properties.\r\n\t * @param data\r\n\t * @returns\r\n\t */\r\n\tprivate _hasSoilTypeChanged(data: ISoilWebProperties): boolean {\r\n\t\tif (!this.soilWebProperties || !this.soilWebProperties.Record) {\r\n\t\t\treturn false;\r\n\t\t} else if (!data || !data.Record) {\r\n\t\t\treturn false;\r\n\t\t} else if (this.soilWebProperties.Record.CoKey === data.Record.CoKey) {\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\tprivate _getBlankCustomLayers(): ISoilLayer[] {\r\n\t\tlet result: ISoilLayer[];\r\n\r\n\t\tresult = [\r\n\t\t\t{\r\n\t\t\t\tDepth: 1,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tDepth: 2,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tDepth: 3,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tDepth: 4\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 * A method used to fill custom soil layers with soil web layer data to remove null values\r\n\t * @param customLayers user customized soil properties\r\n\t * @param soilWebLayers soil properties from SoilWeb\r\n\t * @throws error if soil web layer doesn't exist\r\n\t */\r\n\tprivate _normalizeCustomProperies(customLayers: ISoilLayer[], soilWebLayers: ISoilLayer[]): ISoilLayer[] {\r\n\t\tif (!customLayers || customLayers.length === 0) {\r\n\t\t\tcustomLayers = this._getBlankCustomLayers();\r\n\t\t}\r\n\r\n\t\tfor (let layer of customLayers) {\r\n\t\t\tlet soilWebLayer: ISoilLayer;\r\n\r\n\t\t\tsoilWebLayer = soilWebLayers.find(x => x.Depth === layer.Depth);\r\n\r\n\t\t\tif (!soilWebLayer) {\r\n\t\t\t\tthrow new Error('Soil web layer not found');\r\n\t\t\t}\r\n\r\n\t\t\tlayer.Density = layer.Density ?  layer.Density : soilWebLayer.Density;\r\n\t\t\tlayer.Mineralization = layer.Mineralization ? layer.Mineralization : soilWebLayer.Mineralization;\r\n\t\t\tlayer.Organic = layer.Organic ? layer.Organic : soilWebLayer.Organic;\r\n\t\t\tlayer.Sand = layer.Sand ? layer.Sand : soilWebLayer.Sand;\r\n\t\t\tlayer.Silt = layer.Silt ? layer.Silt : soilWebLayer.Silt;\r\n\t\t\tlayer.Tension = layer.Tension ? layer.Tension : soilWebLayer.Tension;\r\n\t\t}\r\n\r\n\t\treturn customLayers;\r\n\t}\r\n\r\n\t/**\r\n\t * Add an array of custom soil layers to reactive form\r\n\t * @param layers\r\n\t * @throws Error if no layers are detected. Also throws an error if soil web layer match is not found\r\n\t */\r\n\tprivate _addLayersToForm(layers: ISoilLayer[]): void {\r\n\t\tif (!layers || layers.length === 0) {\r\n\t\t\tthrow new Error('no layers detected');\r\n\t\t}\r\n\r\n\t\tfor (let layer of layers) {\r\n\t\t\t(this.f.Layers as FormArray).push(this._fb.group({\r\n\t\t\t\tDepth: [layer.Depth, [Validators.required, Validators.min(1), Validators.max(4)]],\r\n\t\t\t\tSand: [layer.Sand, [Validators.required, FormValidation.greaterThanValidator(0)]],\r\n\t\t\t\tSilt: [layer.Silt, [Validators.required, FormValidation.greaterThanValidator(0)]],\r\n\t\t\t\tOrganic: [layer.Organic, [Validators.required, Validators.min(0)]],\r\n\t\t\t\tDensity: [layer.Density, [Validators.required, FormValidation.greaterThanValidator(0)]],\r\n\t\t\t\tTension: [layer.Tension, [Validators.required, FormValidation.greaterThanValidator(0)]],\r\n\t\t\t\tMineralization: [layer.Mineralization, [Validators.required, Validators.min(0)]]\r\n\t\t\t}));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Binds valueChanges to reactive form controls\r\n\t */\r\n\tprivate _bindValueChanges(): void {\r\n\t\tthis.f.Layers.valueChanges.pipe(takeUntil(this._subscriptions$)).subscribe(() => {\r\n\t\t\tthis.areSoilLayersCustomized = this._areSoilPropertiesCustomized();\r\n\t\t\tthis.diffs = this._generateDiffs(this.f.Layers.value, this.soilWebProperties.Layers);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Determines whether the user customized soil properties, based on differences\r\n\t * between the reactive form and properties from SoilWeb.\r\n\t * @throws Error if soil web layer is not found\r\n\t */\r\n\tprivate _areSoilPropertiesCustomized(): boolean {\r\n\r\n\t\tfor (let i = 1; i <= 4; i++) {\r\n\t\t\tlet soilWebLayer: ISoilLayer;\r\n\t\t\tlet customLayer: ISoilLayer;\r\n\r\n\t\t\tsoilWebLayer = this.soilWebProperties.Layers.find(x => x.Depth === i);\r\n\t\t\tcustomLayer = (this.f.Layers.value as ISoilLayer[]).find(x => x.Depth === i);\r\n\r\n\t\t\tif (!soilWebLayer) {\r\n\t\t\t\tthrow new Error('Soil web layer for depth not found');\r\n\t\t\t} else if (!customLayer) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._areSoilLayersEqual(soilWebLayer, customLayer)) {\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\tprivate _areSoilLayersEqual(a: ISoilLayer, b: ISoilLayer): boolean {\r\n\t\tif (a.Depth !== b.Depth) {\r\n\t\t\treturn false;\r\n\t\t} else if (a.Density !== b.Density) {\r\n\t\t\treturn false;\r\n\t\t} else if (a.Organic !== b.Organic) {\r\n\t\t\treturn false;\r\n\t\t} else if (a.Sand !== b.Sand) {\r\n\t\t\treturn false;\r\n\t\t} else if (a.Silt !== b.Silt) {\r\n\t\t\treturn false;\r\n\t\t} else if (a.Tension !== b.Tension) {\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","<ng-container *ngIf=\"soilWebProperties && soilWebProperties.Error\">\r\n    <h4 class=\"bk-soil-error-warning\">\r\n        <mat-icon>error</mat-icon>Soil data is not available for this location</h4>\r\n    <p class=\"bk-soil-error-warning\">\r\n        You may have entered invalid coordinates or the Soil Web server is currently\r\n        busy. Make sure your coordinates are in the United States. If your coordinates\r\n        are valid, please wait a few minutes, and try again.\r\n    </p>\r\n</ng-container>\r\n<form *ngIf=\"soilWebProperties && !soilWebProperties.Error\"\r\n    [formGroup]=\"soilPropertiesFormBuilder.form\">\r\n    <h4 class=\"bk-modal__right-title\">\r\n        {{soilWebProperties.Record.Name}}\r\n    </h4>\r\n    \r\n    <ng-container *ngIf=\"soilWebProperties.Record.Series\">\r\n        <span class=\"bk-soil-properties__label\">\r\n            {{'Soil Series' | translate }}\r\n        </span>\r\n        <div class=\"bk-soil-properties__label-div\">\r\n            {{ soilWebProperties.Record.Series }}\r\n        </div>\r\n    </ng-container>\r\n    \r\n    <ng-container *ngIf=\"soilWebProperties.Record.Texture\">\r\n        <span class=\"bk-soil-properties__label\">\r\n            {{'Soil Texture' | translate }}\r\n        </span>\r\n        <div class=\"bk-soil-properties__label-div\">\r\n            {{ soilWebProperties.Record.Texture }}\r\n        </div>\r\n    </ng-container>\r\n \r\n    <!--\r\n    <a *ngIf=\"soilWebProperties && soilWebProperties.Record && soilWebProperties.Record.CoKey\" \r\n        href=\"http://casoilresource.lawr.ucdavis.edu/soil_web/property_with_depth_table.php?cokey={{soilWebProperties.Record.CoKey}}\"\r\n        target=\"_blank\"\r\n        class=\"bk-soil-type__source-properties-link\">\r\n        {{'View Soil Properties' | translate }}\r\n    </a>\r\n    -->\r\n\r\n    <br>\r\n\r\n    <table class=\"bk-modal__table bk-modal__soil-table\">\r\n        <tr class=\"bk-modal__soil-table--row bk-modal__soil-table--head\">\r\n            <td class=\"bk-modal__soil-table--column-one\">\r\n                {{'Soil Composition' | translate }}\r\n            </td>\r\n            <ng-container *ngFor=\"let depth of depths\">\r\n                <td class=\"bk-modal__soil-table--columm\">\r\n                    {{ depth }} {{ 'ft' | translate }}\r\n                </td>\r\n            </ng-container>\r\n        </tr>\r\n\r\n        <tr *ngFor=\"let property of soilDisplayProperties\"\r\n            class=\"bk-modal__soil-table--row\">\r\n\r\n            <td class=\"bk-modal__soil-table--column-one\">\r\n                {{ property.display | translate }} ({{ property.unit }})\r\n            </td>\r\n            \r\n            <ng-container *ngFor=\"let layer of f.Layers.controls\">\r\n                <td *ngIf=\"(layer.get('Depth').value <= depths.length) && layer.get([property.key])\"\r\n                    class=\"bk-modal__soil-table--columm\">\r\n                    <span *ngIf=\"!isEditMode\">\r\n                        {{ layer.get([property.key]).value }}\r\n                    </span>\r\n                    \r\n                    <input *ngIf=\"isEditMode\"\r\n                        type=\"number\"\r\n                        class=\"bk-modal__soil-table--input\"\r\n                        [formControl]=\"layer.get([property.key])\"/>\r\n\r\n                    <span class=\"bk-soil-property-diff\">\r\n                        {{ getDiff(layer.get('Depth').value, property.key) | number: '1.0-2' }}&nbsp;\r\n                    </span>\r\n                </td>\r\n            </ng-container>\r\n        </tr>\r\n\r\n\r\n        <tr *ngIf=\"depths && depths.length > 0\"\r\n            class=\"bk-modal__soil-table--row\">\r\n            <td class=\"bk-modal__soil-table--column-one\">\r\n                {{ 'Mineralization' | translate }} lb/acre/day\r\n            </td>\r\n            <td class=\"bk-modal__soil-table--columm\"\r\n                [attr.colspan]=\"depths.length\">\r\n                <span *ngIf=\"!isEditMode\">\r\n                    {{ f.Layers.controls[0].get('Mineralization').value }}\r\n                </span>\r\n                <input *ngIf=\"isEditMode\"\r\n                    class=\"bk-modal__soil-table--input\"\r\n                    type=\"number\"\r\n                    [formControl]=\"f.Layers.controls[0].get('Mineralization')\"/>\r\n\r\n                <span class=\"bk-soil-property-diff\">\r\n                    {{ getDiff(1, 'Mineralization') | number: '1.0-2' }}&nbsp;\r\n                </span>\r\n            </td>\r\n        </tr>\r\n    </table>\r\n\r\n    <div class=\"bk-soil-properties-table__bottom_UI\">\r\n        <div *ngIf=\"soilPropertiesFormBuilder.areSoilLayersCustomized\"\r\n            (click)=\"resetSoilProperties($event)\"\r\n            class=\"bk-edit-link bk-float-right\"\r\n            matTooltip=\"Reset custom values to soil properties published on SoilWeb\">\r\n            <mat-icon>replay</mat-icon>\r\n            <span>\r\n                {{'Reset Soil Properties' | translate }}\r\n            </span>\r\n        </div>\r\n        <button mat-stroked-button\r\n            *ngIf=\"!isEditMode\"\r\n            (click)=\"enableEdit()\">\r\n            <mat-icon>edit_note</mat-icon> {{ 'Edit Soil Composition' | translate }}\r\n        </button>\r\n        <button mat-stroked-button\r\n            *ngIf=\"isEditMode\"\r\n            (click)=\"cancelEdit()\">\r\n            <mat-icon>keyboard_return</mat-icon> {{ 'Exit Edit Mode' | translate }}\r\n        </button>\r\n    </div>\r\n</form>","import { Component, Input, OnChanges, SimpleChange, OnInit } from '@angular/core';\r\nimport { SoilTypeService } from '../../models/soil-type/service';\r\nimport { ISoilLayer, ISoilLayerFields, ISoilProperty, ISoilTypeLayer, ISoilWebProperties } from '../../models/soil-type/interfaces';\r\nimport { CustomSoilPropertiesFields, CustomSoilPropertiesFormBuilder } from './customSoilPropertiesFormBuilder';\r\n\r\n@Component({\r\n\tmoduleId: module.id,\r\n\tselector: 'soil-properties-table',\r\n\ttemplateUrl: 'soil-properties-table.component.html',\r\n\tstyleUrls: [ 'soil-properties-table.component.scss' ]\r\n})\r\n\r\nexport class SoilPropertiesTableComponent implements OnInit, OnChanges {\r\n\t@Input()\r\n\tmaxRootDepth: number;\r\n\r\n\t@Input()\r\n\tsoilPropertiesFormBuilder: CustomSoilPropertiesFormBuilder;\r\n\r\n\t@Input()\r\n\tsoilWebProperties: ISoilWebProperties;\r\n\r\n\tpublic depths: number[];\r\n\tpublic isResetLinkVisible: boolean;\r\n\tpublic isEditMode = false; // if true, user can edit soil properties\r\n\tpublic soilPropertyDiffs: ISoilTypeLayer[]; // holds difference between customized values and Soil Web values\r\n\r\n\tpublic readonly soilDisplayProperties: ISoilProperty[] = this.soilService.soilProperties;\r\n\r\n\tpublic get f(): { [key in CustomSoilPropertiesFields]: AbstractControl } {\r\n\t\treturn this.soilPropertiesFormBuilder.form.controls as\r\n\t\t\t{ [key in CustomSoilPropertiesFields]: AbstractControl };\r\n\t}\r\n\r\n\tconstructor(private soilService: SoilTypeService) {\r\n\t}\r\n\r\n\tpublic ngOnInit(): void {\r\n\t\tthis._calculateVisibleTableColumns();\r\n\t}\r\n\r\n\t// force update location when parent location changes\r\n\tngOnChanges(changes: { [propKey: string]: SimpleChange }): void {\r\n\r\n\t\tif (changes['maxRootDepth']) {\r\n\t\t\tthis.maxRootDepth = changes['maxRootDepth'].currentValue;\r\n\t\t\tthis._calculateVisibleTableColumns();\r\n\t\t}\r\n\t}\r\n\r\n\t// Used to reset to soil model. If using certified will need to reset to certified\r\n\tpublic resetSoilProperties(e: MouseEvent): void {\r\n\t\te.stopPropagation();\r\n\t\tthis.soilPropertiesFormBuilder.resetSoilProperties();\r\n\t}\r\n\r\n\t/**\r\n\t * Determine number of columns in the table to show\r\n\t * TODO: Why is this only showing either 2 or 4 depths? What about 3?\r\n\t */\r\n\tprivate _calculateVisibleTableColumns(): void {\r\n\t\tif (!this.maxRootDepth) {\r\n\t\t\tthis.depths = [1, 2, 3, 4];\r\n\t\t} else if (this.maxRootDepth <= 2) {\r\n\t\t\tthis.depths = [1, 2];\r\n\t\t} else {\r\n\t\t\tthis.depths = [1, 2, 3, 4];\r\n\t\t}\r\n\t}\r\n\r\n\tpublic cancelEdit(): void {\r\n\t\tthis.isEditMode = false;\r\n\t}\r\n\r\n\tpublic enableEdit(): void {\r\n\t\tthis.isEditMode = true;\r\n\t}\r\n\r\n\t/**\r\n\t * Display a difference between the custom soil layer and soil web, if there's a difference\r\n\t * @param layer\r\n\t * @param key\r\n\t * @returns\r\n\t */\r\n\tpublic getDiff(depth: number, key: string): number {\r\n\t\tlet match: ISoilLayer;\r\n\t\tlet result: number;\r\n\r\n\t\tif (!this.soilPropertiesFormBuilder || !this.soilPropertiesFormBuilder.diffs) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (key === 'Mineralization') {\r\n\t\t\tdepth = 1;\r\n\t\t}\r\n\r\n\t\tmatch = this.soilPropertiesFormBuilder.diffs.find(x => x.Depth === depth);\r\n\r\n\t\tif (!match) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tswitch (key) {\r\n\t\t\tcase ISoilLayerFields.DENSITY:\r\n\t\t\t\tresult = match.Density;\r\n\t\t\t\tbreak;\r\n\t\t\tcase ISoilLayerFields.MINERALIZATION:\r\n\t\t\t\tresult = match.Mineralization;\r\n\t\t\t\tbreak;\r\n\t\t\tcase ISoilLayerFields.ORGANIC:\r\n\t\t\t\tresult = match.Organic;\r\n\t\t\t\tbreak;\r\n\t\t\tcase ISoilLayerFields.SAND:\r\n\t\t\t\tresult = match.Sand;\r\n\t\t\t\tbreak;\r\n\t\t\tcase ISoilLayerFields.SILT:\r\n\t\t\t\tresult = match.Silt;\r\n\t\t\t\tbreak;\r\n\t\t\tcase ISoilLayerFields.TENSION:\r\n\t\t\t\tresult = match.Tension;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tresult = result > 0 ? result : 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: '[greaterThanNum]',\r\n\tproviders: [{ provide: NG_VALIDATORS, useExisting: GreaterThanNumDirective, multi: true }]\r\n})\r\n\r\nexport class GreaterThanNumDirective implements Validator, OnChanges {\r\n\t@Input() greaterThanNum: number;\r\n\tprivate valFn = Validators.nullValidator;\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tconst change = changes['greaterThanNum'];\r\n\r\n\t\tif (change) {\r\n\t\t\tconst n: number = change.currentValue;\r\n\t\t\tthis.valFn = greaterThanNumValidator(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 greaterThanNumValidator(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 { 'greaterThanNum': { a: userInput } };\r\n\t\t}\r\n\t};\r\n}\r\n","import { CMError } from '../../interfaces/interfaces';\r\n\r\n/**\r\n * Angular mirror of C# SoilWebProperties\r\n */\r\nexport interface ISoilWebProperties {\r\n\tRecord: ISoilWebRecord,\r\n\tLayers: ISoilLayer[],\r\n\tError?: number\r\n}\r\n\r\nexport interface ISoilWebRecord {\r\n\tId: number,\r\n\tCoKey: string,\r\n\tName: string,\r\n\tSeries: string,\r\n\tTexture: string,\r\n}\r\n\r\n/**\r\n * Angular version of C# interface of the same name\r\n */\r\nexport interface ISoilLayer {\r\n\tDepth: number,\r\n\tSand?: number,\r\n\tSilt?: number,\r\n\tOrganic?: number,\r\n\tDensity?: number,\r\n\tTension?: number,\r\n\tMineralization?: number\r\n}\r\n\r\nexport enum ISoilLayerFields {\r\n\tSAND = 'Sand',\r\n\tSILT = 'Silt',\r\n\tORGANIC = 'Organic',\r\n\tDENSITY = 'Density',\r\n\tTENSION = 'Tension',\r\n\tMINERALIZATION = 'Mineralization'\r\n}\r\n\r\n/**\r\n * Soil data received from server when we choose a lot in planting settings\r\n */\r\nexport interface CombinedSoilProperties {\r\n\tSoilWebProperties: ISoilWebProperties,\r\n\tCustomSoilLayers: ISoilLayer[]\r\n}\r\n\r\nexport interface ISoilProperty {\r\n\tkey: string,\r\n\tdisplay: string,\r\n\tunit: string\r\n}\r\n\r\nexport interface ISoilTypeLayer {\r\n\tId: number,\r\n\tSoilTypeId: number,\r\n\tDepth: number,\r\n\tSand: number,\r\n\tSilt: number,\r\n\tOrganic: number,\r\n\tDensity: number,\r\n\tTension: number,\r\n\tMineralization: number\r\n}\r\n\r\nexport interface ISoilTypeService {\r\n\tgetSoilWebRecord(coords: string): Promise<ISoilWebProperties | CMError >,\r\n\tgetSoilPropertiesByLot(lotId: number): Promise<CombinedSoilProperties>,\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PersistentDatabase } from '../services/persistent-database';\r\nimport { UpdateService } from '../services/update.service';\r\nimport { CookieService } from '../services/cookie.service';\r\nimport { SharedModule } from './shared/shared.module';\r\nimport { RanchComponent } from '../components/ranch-settings/nav/main';\r\nimport { RanchNavComponent } from '../components/plantings/top-nav/main';\r\nimport { RanchTabComponent } from '../components/plantings/tab/main';\r\nimport { PlantingsComponent } from '../components/plantings/main';\r\nimport { RanchSettingsComponent } from '../components/ranch-settings/main';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { PlantingSearchComponent } from '../components/plantings/search/main';\r\nimport { PlantingSlideInPanelComponent } from '../components/plantings/slide-in-panel/slide-in-panel';\r\nimport { EventsSnapshotComponent } from '../components/plantings/events-snapshot/main';\r\nimport { ModalModule } from 'ngx-bootstrap';\r\nimport { DragulaService, DragulaModule } from 'ng2-dragula';\r\nimport { EventsSnapshotRowComponent } from '../components/plantings/events-snapshot/row';\r\nimport { RanchHomeRoutingModule } from './ranch-home.routing';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\nimport { PlantingDialog } from '../components/planting-settings/planting-dialog';\r\nimport { CropSettingsComponent } from '../components/planting-settings/sections/crop-settings';\r\nimport { ManureComponent } from '../components/planting-settings/sections/nitrogen-calculator/manure';\r\nimport { CompostComponent } from '../components/planting-settings/sections/nitrogen-calculator/compost';\r\nimport { CoverCropComponent } from '../components/planting-settings/sections/nitrogen-calculator/cover-crop';\r\nimport { RanchMemberModalComponent } from '../components/ranch-settings/modals/member/main';\r\n\r\nimport { RanchWellModalComponent } from '../components/ranch-settings/modals/well/main';\r\nimport { AllEventsModalComponent } from '../components/events/main';\r\n\r\nimport { RanchLotModalComponent } from '../components/ranch-settings/modals/lot/main';\r\nimport { RanchExportModalComponent } from '../components/ranch-export-modal/ranch-export-modal.component';\r\nimport { PlantingRecalculateModalComponent } from '../components/planting-recalculate-modal/planting-recalculate-modal.component';\r\n\r\nimport { AllEventsButtonsetComponent } from '../components/events/buttons/view-type-units/main';\r\nimport { EventsTableComponent } from '../components/events/table/main';\r\nimport { EventsListComponent } from '../components/events/list/main';\r\nimport { EventTotalsComponent } from '../components/events/totals/main';\r\n\r\nimport { RainfallDataComponent } from '../components/rainfall-chart/main';\r\nimport { EventTableFertilizerComponent } from '../components/events/table/fertilizer/main';\r\nimport { EventTableFertilizerNPKComponent } from '../components/events/table/npk/main';\r\nimport { IrrigationHoverPanelComponent } from '../components/events/table/irrigation-hover-panel/main';\r\nimport { EventTableTissueSamplesComponent } from '../components/events/table/tissue-samples/event-table.tissue-samples';\r\nimport { EventsListTissueSampleComponent } from '../components/events/list/events-list.tissue-sample';\r\n\r\nimport { IrrigationAmountHoverPanelComponent } from '../components/events/table/irrigation-hover-panel/amount';\r\nimport { IrrigationIntervalHoverPanelComponent } from '../components/events/table/irrigation-hover-panel/interval';\r\nimport { CaspDialogComponent } from '../components/casp-dialog/casp-dialog';\r\nimport { MacroTunnelComponent } from '../components/planting-settings/sections/macro-tunnel';\r\nimport { DripApplicationRateComponent } from '../components/planting-settings/sections/drip-application-rate';\r\nimport { DripApplicationRateTreeComponent } from '../components/planting-settings/sections/drip-application-rate-tree';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatSelectModule } from '@angular/material/select'\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { CalendarComponent } from '../components/calendar/calendar';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { EventMenuDialogComponent } from '../components/calendar/event-menu-dialog';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { EventTypeIconComponent } from '../components/calendar/event-type-icon';\r\nimport { NgxPopperModule } from 'ngx-popper';\r\nimport { EventHoverComponent } from '../components/calendar/event-hover';\r\nimport { CalendarEventComponent } from '../components/calendar/calendar-event';\r\nimport { RainfallChartUpdateService } from '../components/rainfall-chart/rainfall-chart.update.service';\r\nimport { FlowmeterChartUpdateService } from '../components/flowmeter-graph/flowmeter-chart.update.service';\r\nimport { NCalculatorComponent } from '../components/planting-settings/sections/nitrogen-calculator/n-calculator';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { PlantingWellsComponent } from '../components/planting-settings/sections/planting-wells';\r\nimport { MicroSprinklerComponent } from '../components/planting-settings/micro-sprinkler/micro-sprinkler';\r\nimport { SprinklerApplicationRateComponent } from\r\n\t'../components/planting-settings/sections/sprinkler-calculator/sprinkler-application-rate';\r\nimport { IrrigationRowComponent } from '../components/plantings/events-snapshot/irrigation-row';\r\nimport { FertilizationRowComponent } from '../components/plantings/events-snapshot/fertilization-row';\r\nimport { SoilSampleRowComponent } from '../components/plantings/events-snapshot/soil-sample-row';\r\nimport { TissueSampleRowComponent } from '../components/plantings/events-snapshot/tissue-sample-row';\r\nimport { CutRowComponent } from '../components/plantings/events-snapshot/cut-row';\r\nimport { RowBaseComponent } from '../components/plantings/events-snapshot/row-base';\r\nimport { RecalculatingComponent } from '../components/planting-recalculate-modal/recalculating.component';\r\nimport { PlantingCreateDialog } from '../components/planting-settings/creation/planting-create-dialog';\r\nimport { PlantingCreateStep1Component } from '../components/planting-settings/creation/planting-create-step1';\r\nimport { PlantingCreateStep2Component } from '../components/planting-settings/creation/planting-create-step2';\r\nimport { PlantingCreateStep3Component } from '../components/planting-settings/creation/planting-create-step3';\r\nimport { PlantingCreateStep4Component } from '../components/planting-settings/creation/planting-create-step4';\r\nimport { PlantingCreateStep5Component } from '../components/planting-settings/creation/planting-create-step5';\r\nimport { PlantingCreateStep6Component } from '../components/planting-settings/creation/planting-create-step6';\r\nimport { PlantingCreateStep7Component } from '../components/planting-settings/creation/planting-create-step7';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { NCalculatorSimpleComponent } from '../components/planting-settings/sections/nitrogen-calculator/n-calculator-simple';\r\nimport { IrrigationMethodsComponent } from '../components/planting-settings/sections/irrigation-methods';\r\nimport { IrrigationDeficitComponent } from '../components/planting-settings/sections/irrigation-deficit/irrigation-deficit';\r\nimport { DuplicatePlantingDialog } from '../components/planting-settings/duplicate-planting/duplicate-planting-dialog';\r\nimport { MaxUptakeCalculatorComponent } from '../components/planting-settings/sections/max-uptake-calculator/max-uptake-calculator';\r\n\r\n@NgModule({\r\n\timports: [\r\n\t\tMatDialogModule,\r\n\t\tMatDatepickerModule,\r\n\t\tMatFormFieldModule,\r\n\t\tMatInputModule,\r\n\t\tMatButtonModule,\r\n\t\tMatRadioModule,\r\n\t\tMatSelectModule,\r\n\t\tMatProgressSpinnerModule,\r\n\t\tCommonModule,\r\n\t\tSharedModule,\r\n\t\tReactiveFormsModule,\r\n\t\tFormsModule,\r\n\t\tModalModule,\r\n\t\tDragulaModule,\r\n\t\tRanchHomeRoutingModule,\r\n\t\tNgxPopperModule,\r\n\t\tMatAutocompleteModule,\r\n\t\tMatSliderModule\r\n\t],\r\n\tdeclarations: [\r\n\t\tRanchComponent,\r\n\t\tRanchNavComponent,\r\n\t\tRanchTabComponent,\r\n\t\tPlantingsComponent,\r\n\t\tRanchSettingsComponent,\r\n\t\tPlantingSearchComponent,\r\n\t\tPlantingSlideInPanelComponent,\r\n\t\tEventsSnapshotComponent,\r\n\t\tPlantingCreateStep1Component,\r\n\t\tPlantingCreateStep2Component,\r\n\t\tPlantingCreateStep3Component,\r\n\t\tIrrigationMethodsComponent,\r\n\t\tIrrigationDeficitComponent,\r\n\t\tPlantingCreateStep4Component,\r\n\t\tPlantingCreateStep5Component,\r\n\t\tPlantingCreateStep6Component,\r\n\t\tPlantingCreateStep7Component,\r\n\t\tEventsSnapshotRowComponent,\r\n\t\tIrrigationRowComponent,\r\n\t\tFertilizationRowComponent,\r\n\t\tSoilSampleRowComponent,\r\n\t\tTissueSampleRowComponent,\r\n\t\tCutRowComponent,\r\n\t\tRowBaseComponent,\r\n\t\tPlantingDialog,\r\n\t\tPlantingCreateDialog,\r\n\t\tDuplicatePlantingDialog,\r\n\t\tPlantingWellsComponent,\r\n\t\tCaspDialogComponent,\r\n\t\tCropSettingsComponent,\r\n\t\tMaxUptakeCalculatorComponent,\r\n\t\tNCalculatorComponent,\r\n\t\tNCalculatorSimpleComponent,\r\n\t\tMacroTunnelComponent,\r\n\t\tMicroSprinklerComponent,\r\n\t\tManureComponent,\r\n\t\tCompostComponent,\r\n\t\tCoverCropComponent,\r\n\t\tDripApplicationRateComponent,\r\n\t\tSprinklerApplicationRateComponent,\r\n\t\tDripApplicationRateTreeComponent,\r\n\t\tRanchMemberModalComponent,\r\n\t\tRanchWellModalComponent,\r\n\t\tAllEventsModalComponent,\r\n\t\tCalendarComponent,\r\n\t\tCalendarEventComponent,\r\n\t\tEventHoverComponent,\r\n\t\tEventTypeIconComponent,\r\n\t\tEventMenuDialogComponent,\r\n\t\tRanchLotModalComponent,\r\n\t\tRanchExportModalComponent,\r\n\t\tPlantingRecalculateModalComponent,\r\n\t\tRecalculatingComponent,\r\n\t\tRainfallDataComponent,\r\n\t\tAllEventsButtonsetComponent,\r\n\t\tEventsTableComponent,\r\n\t\tEventsListComponent,\r\n\t\tEventTotalsComponent,\r\n\t\tEventTableFertilizerComponent,\r\n\t\tEventTableFertilizerNPKComponent,\r\n\t\tIrrigationHoverPanelComponent,\r\n\t\tEventTableTissueSamplesComponent,\r\n\t\tEventsListTissueSampleComponent,\r\n\t\tIrrigationAmountHoverPanelComponent,\r\n\t\tIrrigationIntervalHoverPanelComponent,\r\n\t],\r\n\texports: [\r\n\t\tRanchComponent,\r\n\t],\r\n\tentryComponents: [\r\n\t\tPlantingDialog,\r\n\t\tPlantingCreateDialog,\r\n\t\tDuplicatePlantingDialog,\r\n\t\tCaspDialogComponent,\r\n\t\tRanchWellModalComponent,\r\n\t\tRanchLotModalComponent,\r\n\t\tCalendarComponent,\r\n\t\tEventMenuDialogComponent,\r\n\t\tRainfallDataComponent,\r\n\t\tRanchMemberModalComponent,\r\n\t\tPlantingRecalculateModalComponent,\r\n\t\tRecalculatingComponent,\r\n\t\tRanchExportModalComponent,\r\n\t\tAllEventsModalComponent,\r\n\t\tCompostComponent,\r\n\t\tCoverCropComponent,\r\n\t\tManureComponent,\r\n\t\tDripApplicationRateComponent,\r\n\t\tDripApplicationRateTreeComponent,\r\n\t\tSprinklerApplicationRateComponent,\r\n\t\tMicroSprinklerComponent,\r\n\t\tMaxUptakeCalculatorComponent\r\n\t]\r\n})\r\n\r\nexport class RanchHomeModule {\r\n\tstatic forRoot(): ModuleWithProviders {\r\n\t\treturn {\r\n\t\t\tngModule: RanchHomeModule,\r\n\t\t\tproviders: [\r\n\t\t\t\tPersistentDatabase,\r\n\t\t\t\tUpdateService,\r\n\t\t\t\tCookieService,\r\n\t\t\t\tDragulaService,\r\n\t\t\t\tRainfallChartUpdateService,\r\n\t\t\t\tFlowmeterChartUpdateService\r\n\t\t\t]\r\n\t\t}\r\n\t}\r\n}\r\n","import { Routes, RouterModule } from '@angular/router';\r\nimport { NgModule } from '@angular/core';\r\nimport { RanchComponent } from '../components/ranch-settings/nav/main';\r\n\r\nconst routes: Routes = [\r\n\t{ path: '', component: RanchComponent }\r\n];\r\n\r\n@NgModule({\r\n\timports: [RouterModule.forChild(routes)],\r\n\texports: [RouterModule]\r\n})\r\n\r\nexport class RanchHomeRoutingModule { }\r\n","/*\r\n * Example use\r\n *\t\tBasic Array of single type: *ngFor=\"let todo of todoService.todos | orderBy : '-'\"\r\n *\t\tMultidimensional Array Sort on single column: *ngFor=\"let todo of todoService.todos | orderBy : ['-status']\"\r\n *\t\tMultidimensional Array Sort on multiple columns: *ngFor=\"let todo of todoService.todos | orderBy : ['status', '-title']\"\r\n */\r\n\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({ name: 'orderBy', pure: false })\r\nexport class OrderBy implements PipeTransform {\r\n\r\n\tvalue: string[] = [];\r\n\r\n\tstatic _orderByComparator(a: string | number, b: string | number): number {\r\n\r\n\t\tlet x, y: number;\r\n\r\n\t\tif (a === null || typeof a === 'undefined') {\r\n\t\t\ta = '';\r\n\t\t}\r\n\r\n\t\tif (b === null || typeof b === 'undefined') {\r\n\t\t\tb = '';\r\n\t\t}\r\n\r\n\t\t// convert a and b to string\r\n\t\tif (typeof a !== 'string') {\r\n\t\t\ta = a.toString();\r\n\t\t}\r\n\r\n\t\tif (typeof b !== 'string') {\r\n\t\t\tb = b.toString();\r\n\t\t}\r\n\r\n\t\tx = parseFloat(a);\r\n\t\ty = parseFloat(b);\r\n\r\n\t\tif ((isNaN(x) || !isFinite(x)) || (isNaN(y) || !isFinite(y))) {\r\n\t\t\t// Isn't a number so lowercase the string to properly compare\r\n\t\t\tif (a.toLowerCase() < b.toLowerCase()) { return -1; }\r\n\t\t\tif (a.toLowerCase() > b.toLowerCase()) { return 1; }\r\n\t\t} else if (x < y) {\r\n\t\t\treturn -1;\r\n\t\t} else if (x > y) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\treturn 0; // equal each other\r\n\t}\r\n\r\n\ttransform(input: any, config = '+'): any {\r\n\r\n\t\t// make a copy of the input's reference\r\n\r\n\t\tif (!input || input.length === undefined) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis.value = [...input];\r\n\r\n\t\tlet value: string[] = this.value;\r\n\r\n\t\tif (!Array.isArray(value)) { return value; }\r\n\r\n\t\tif (!Array.isArray(config) || (Array.isArray(config) && config.length === 1)) {\r\n\t\t\tlet propertyToCheck: string = !Array.isArray(config) ? config : config[0];\r\n\t\t\tlet desc = propertyToCheck.substr(0, 1) === '-';\r\n\r\n\t\t\t// Basic array\r\n\t\t\tif (!propertyToCheck || propertyToCheck === '-' || propertyToCheck === '+') {\r\n\t\t\t\treturn !desc ? value.sort() : value.sort().reverse();\r\n\t\t\t} else {\r\n\t\t\t\tlet property: string = propertyToCheck.substr(0, 1) === '+' || propertyToCheck.substr(0, 1) === '-'\r\n\t\t\t\t\t? propertyToCheck.substr(1)\r\n\t\t\t\t\t: propertyToCheck;\r\n\r\n\t\t\t\treturn value.sort(function (a: any, b: any) {\r\n\t\t\t\t\treturn !desc\r\n\t\t\t\t\t\t? OrderBy._orderByComparator(a[property], b[property])\r\n\t\t\t\t\t\t: -OrderBy._orderByComparator(a[property], b[property]);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// Loop over property of the array in order and sort\r\n\t\t\treturn value.sort(function (a: any, b: any) {\r\n\t\t\t\tfor (let i = 0; i < config.length; i++) {\r\n\t\t\t\t\tlet desc = config[i].substr(0, 1) === '-';\r\n\t\t\t\t\tlet property = config[i].substr(0, 1) === '+' || config[i].substr(0, 1) === '-'\r\n\t\t\t\t\t\t? config[i].substr(1)\r\n\t\t\t\t\t\t: config[i];\r\n\r\n\t\t\t\t\tlet comparison = !desc\r\n\t\t\t\t\t\t? OrderBy._orderByComparator(a[property], b[property])\r\n\t\t\t\t\t\t: -OrderBy._orderByComparator(a[property], b[property]);\r\n\r\n\t\t\t\t\t// Don't return 0 yet in case of needing to sort by next property\r\n\t\t\t\t\tif (comparison !== 0) { return comparison; }\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn 0; // equal each other\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n"],"sourceRoot":"webpack:///"}