{"version":3,"mappings":"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","names":["ApDynGridColumnConfigBase","constructor","options","super","this","ApDynGridColumnControlType","key","width","field","undefined","showHeaderTitle","title","tooltip","filterable","Icon","ApNutrientDistributionComponent","nutrientDistributionStore","loginStore","formStore","fieldStore","mapStore","mapViewStore","roundNumericService","roundNumericPipe","nutrientService","areaUnitPipe","settingsStore","soilSampleFieldClassColorPipe","soilSampleClassNamePipe","translationService","soilSampleService","fieldFormatService","languageStore","dateService","statisticStore","fieldStatisticHistogramService","jobsStore","soilSampleDateStore","campaignYearStore","statisticService","elementService","of","ngOnInit","listenFieldNutrientDistributionsLoading$","combineLatest","Loading$","Listen","s","loading","pipe","map","loadingItems","some","x","_mapDistributionsToGrid","ngAfterContentInit","_onSelectionChanged","dynComponent","SelectedItems$","subscribe","d","_selectionChange","getMapViewMode","MapViewMode","showMapView","EnableDistributionView","_subscriptions","push","FirstSetting$","_settings","selectedYear","f","data","filter","campaignYear","fields","t","length","_","_readFieldGeomsOfCurrentLoadedFields","loadFieldNutrientDistributions","_currentFieldGeomIds","_gridBuilder","currentMenu","mapViewMenu","MapViewCurrentMenu","getSelectedItems","ngOnDestroy","removeStatisticData","DisableDistributionView","forEach","unsubscribe","e","_a","onCreate","openForm","component","ApNutrientPlanningComponent","Summary","Type","PlanningEntryComponentDataType","columns","ApDynGridStatusColumnConfig","class","description","pending","BlockedFieldIdsBuWsv$","pendingTooltip","BlockedFieldIdsBuWsvTooltip$","ApDynGridPropertyColumnConfig","headerFilterable","cssClass","sortIndex","filterType","FilterType","pipes","args","DigitsAfterDecimalPoint","hide","ApDynGridGroupColumnConfig","headerStyle","style","border","groupColumns","ApDynGridClassColorColumnConfig","GetElementStringByString","ApElementType","_classColorColumnWidth","_valueColumnWidth","formatCallback","dataItem","value","PIsGreaterE","APP_CONFIGURATION","KIsGreaterE","MgIsGreaterE","PhIsGreaterE","format","SelectedLanguage","DateFormat","ApDynGridEditColumnConfig","disabled","pager","ApDynGridPagerConfig","iconButtons","icon","callback","ApUtilService","exportAsXls","bind","tmp","FieldGeoms","geom","Id","_soilSampleClassName","transform","_soilClassColor","_areaUnitConvert","AreaUnit","items","itemsToSelect","changeSelectedField","toString","zoomFarmFields","getMapViewCurrentMenu","setTimeout","statisticData","Status","FieldId","a","Field","FieldName","c","_b","AreaHa","u","p","FieldGeom","_c","_d","Histograms","SourceItem","_getTitleForStatistic","generateHistogramStatistic","selectedItems","dataForTitles","totalItems","Area","Selected","z","generateFieldsAreaTitle","fileName","_getExportFilename","fieldGeometryIds","statisticDataExcelExport","customerExpr","SelectedFarm","CustomerNumber","toFarmDate","Date","translate","replace","items$","Distributions$","Dates$","dist","sampleDates","dis","fieldGeom","getFieldGeomById","FieldGeomId","getFieldByFieldGeomId","adminArea","Create","r","AdminArea","areaNumber","areaRound","area","roundAsNumber","newestSampleDate","getDateMidnight","classP","AvgClassP","classK","AvgClassK","classMG","AvgClassMg","classPH","AvgClassPh","pIsGreaterE","kIsGreaterE","mgIsGreaterE","phIsGreaterE","pValue","convertElementOxid","AvgP","ApElementOxydTypeEnum","MethodP","kValue","AvgK","MethodK","mgValue","AvgMg","MethodMg","phValue","AvgPh","pValueRounded","kValueRounded","mgValueRounded","phValueRounded","status","getStatus","NewestSampleDate","soilGroups","SoilGroups","Sort","join","StatusClass","StatusDesc","SoilGroup","FieldNumber","formatFieldNumber","ClassP","ClassK","ClassMg","ClassPh","StyleClassP","StyleClassK","StyleClassMg","StyleClassPh","PValue","KValue","MgValue","PhValue","PValueTooltip","formatClassificationTooltip","KValueTooltip","MgValueTooltip","PhValueTooltip","MethodPh","i0","selectors","ApDynComponentComponent","ctx","SoilSampleEdits","SoilSamplePlanningOverviewActions","SoilSamplePlanningReportStore","Store","backend","loaded","registerObservable","SoilSamplePlanningReportDownloadSuccess","SetLoadFinishState","download","Data","downloadSoilSamplePlanningReport","headline","bookname","reportData","SetLoadState","Mutate","DispatchBackend","SoilSamplePlanningReportDownload","Name","NetTypes","Value","ApCustomTypes","factory","ApSoilSamplePlanningOverviewComponent","soilSamplePlanningStore","cropRotationStore","soilSamplePlanningReportStore","EventEmitter","BehaviorSubject","min","I","getSelectedCampaignYear","Year","max","k","dateA","dateB","getTime","item","date","goIntoStatisticMenu","_previousMapViewMenu","_applyClicked","_onApplyClicked","_previousYear","_year$","next","_nextYear","history","Object","values","crops","crop","keys","years","reduce","b","concat","dates","Math","l","_cropRotationLimits$","isLoading$","planningLoading","soilSampleDatesLoading","campaignYearLoading","cropRotationLoading","fieldsLoading","cropRotation","soilSampleDates","plannings","i","fieldsJoinedWithSoilSamplePlanning","_areaTotal","SoilSamplePlanning","find","ssP","planning","getCurrentFieldGeom","organic","OrganicApplication","lastSamplingDate","indexOf","lastSamplingDateMidnight","m","toFarmDateFromUtc","toDate","plannedSamplingDate","PlannedSamplingdate","NrSNr","getFieldNumberAndSubNumber","Geom","LastSamplingDate","PlannedSamplingDate","getDateNoonToFarmTime","Crop","loadSoilSamplePlanning","shapeExport","downloadShapeExportZipped","debounceTime","delay","generateStats","SelectedFarm$","gridBuilder","fillWizardChoiceData","columns$","limits","ApDynGridColumnHideConfig","mapHide","selfHide","mode","sortDesc","headerButtons","nextClicked","nextDisabled","y","previousClicked","previousDisabled","getCropRotationGridConfigs","widthHidePriority","CurrentDateFormat","listMassEditing","ApRoleTypeService","User","_listMassEditing","apply","hasPermission","exportAsPdf","exportShape","iYear","pdfExport","year","unit","MainCropName","sYieldUnit","SecondCrop","SecondCropName","SecondCropYield","MainCropYield","yesNo","MainCropStraw","id","name","type","ApGridPagerType","label","getExportFilename","goIntoMapMenu","$event","modifiedPlannings","foundItems","foundItem","ObjectFactory","object","Description","UserId","ApGuidUtil","saveSoilSamplePlannings","zipContent","saveAs","Blob","Uint8Array","selectedGridItems","exportItems","SelectedCampaignYear","LastSampleDate","CropTypeNameMinus1","hasOwnProperty","CropTypeName","_e","CropTypeNamePlus1","C","_f","F","_g","CropTypeNamePlus2","S","_h","G","_j","DefaultStart","Key","exportFileName","dynGrid","contentRows","row","defaultFieldGeom","isNaN","parseFloat","FieldSubNumber","FieldSubnumber","FieldArea","CropTypeMinus1","h","CropType","CropTypePlus1","N","CropTypePlus2","T","_k","w","_l","dateToMoment","NextSampleDate","A","IsValidGeometry","_getReportColumnNames","Content","HeaderLabels","get","Rows","Header","bookName","selectionChange","Convert","columnNames","Map","selectedCampaignYear","set","emptyMessage","setStatisticData","ApStatsType","allItemsSelected","chartSets","Add","generateLastSamplingStat","generatePlannedSamplingStat","chartSet","axes","minX","maxX","chartLastSampling","titleX","categories","noteField","sort","compareDates","soilSampleItem","buYear","getFullYear","barData","Find","category","color","getStatBarColor","AddIfNotExists","calculateNoteTexts","chartPlannedSampling","plannedMonthYear","moment","barColor","chart","percentSum","areaSum","biggestValueIdx","biggestArea","percent","note","createNote","percentage","static","icons","preselect","option","index","text","onSubmit","ApNutrientManagementOverviewComponent","cropTypeStore","permissionPipe","rbStore","fieldNutrientDistributionStore","basicFertilisationSummariesStore","fertilizerStore","nutrientStatisticService","modalDialogStore","translationStore","nutrientStore","fertilizerService","baseFertilizationService","tooltipContentService","baseFertilizationCommonService","ApPermissions","_defaultRemain","P","K","Mg","CaO","Min","Max","loading$","historyLoading","cr","bfs","rb","_getItems","_getPager","_getBaseGrid","details$","_getDetailsGrid","_onCheckFieldEvent","_onCheckField","_onNavigateToReportEvent","_onNavigateToReport","fieldGeomId","skip","_onSelectedYearChanged","checkResult","_handleRbStoreCheckResult","_handleFieldStoreData","mapMenu","_onMapMenuChanged","FormClose$","_isOnCreatePressed","_handleLegendsAndLayers","Layers","OnLayerChange","revertLegends","isCreateNewAllowed","SampleRegions$","Summaries$","BlockedFieldIdsBuWsvCeIrRbFieldRaster$","cropRotationAttributes","_1","sampleRegions","bFS","jobFieldGeomIds","cropRotationAttribute","rbResult","FirstOrDefault","hasRbRaster","HasRbRaster","apps","PlanIds","summary","BasicFertilisationPlanBooks","includes","sampleDateObject","getGDStatusByCrAttribute","applications","planBook","fertilizer","getFertilizer","Product_Id","User_Appl_Unit","getFertilizerUnit","isBooked","L","BookedAt","Z","getFertilizerStatus","User_Appl_Mode","getFertilizerStatusDescription","IsBooked","Product","getFertilizerProductName","ProductId","ProductUnit","ProductTooltip","getProductContentInfoTooltip","Amount","User_Appl_Rate","AmountUnit","AmountValue","LeadNutrient","Q","Element","OutputDate","ApplicationDate","Nutrient","q","Operation_Mode","ApOperationMode","GetElementStringByIElement","Title","PlanNumber","CreatedAt","Remain2","CalculateElementOxidValueByGivenElementValue","getAverageNutrientFromStatistic","Statistic","ie","ee","calculateNElementByLeadElement","Average","ne","_statusCss","Nr","TNr","NrTNr","AreaOriginal","SampleDate","ColumnLoading","Contains","Remain1","getAverageRb","CrNeeds","CropRotationNeed","Applications","iconOptions","_onPdf","_onXls","PagerBuilder","detailsGridPopupOptions","_onShow","_onExport","_onBooking","_onUnbookBookedPlan","_onOneDelete","_onDownloadPackage","selectedLanguage","language","settings","setting","ApDynGridDetailsGridConfig","checkboxDisabled","FindTranslationForSelectedLanguage","User$","permission","user","BlockedFieldIdsBuWsvCeIrRbFieldRasterTooltip$","columnLoading","GetRoundNumericPipeConfig","_getCropRotationConfigs","redirectSummaryToShowView","redirectSummaryToExportView","bookPlanBooks","unbookSummaryPlanBook","deleteSummaryPlanBook","createNutrientPlanningPackage","_generateStats","loadBasicFertilisationSummaries","buttons","primary","busy","show","formConfig","fieldSets","ApDynformsConfigFieldset","legend","useMaxWidth","config","ApDynformsConfigTextarea","rows","JSON","stringify","setModalDialogData","Array","isArray","g","loadRb","itemsId","handleLegends","disableLayers","TaskManagementLayer","handleLayers","event","window","open","checkField","mainComponentSelectionAvailability","emptyTitle","Any","_generateTooltipForCrop","yearCrop","MainCrop","yieldTranslation","contentMessage","cropsRemoval","_getRemovalFromCrops","RemovalP","RemovalK","RemovalMg","cropRotationYield","expectedYield","removalP","removalK","removalMg","mainCrop","getDefaultCroptype","_calculateCropExtraction","MainwdP","SecwdP","MsRatio","MainwdK","SecwdK","MainwdMg","SecwdMg","secondCrop","CalculateElementOxidValueByElementType","isStrawRemoved","mainWd","secondWd","msRatio","xlsExportFileName","generatePrintFilename","pdfExportFileName","ApNutrientPNeedComponent","GridBuilderService","PlanBooksGrid","ApplicationDateTooltip","dynCssClass","ApplicationDateItalic","FieldsTooltip","FirstSetting","SumTooltip","ApNutrientManagementPlanningComponent","routerStore","nutrientManagementService","fieldArchiveStore","HistoryLoading$","_buildGrid","gridInitialized","itemToSelect","selectedSummaryId","setSelectedSummaryKey","gridPaging","setSelectedKeys","Visibility","NutrientPlanningLayer","routerStoreData","gridItems","gridItemsLoading","url","startsWith","queryParams","first","isBooking","action","TaskManagementAction","targetComponent","ApNutrientBookingComponent","targetGridItem","dataObject","FieldIdToSelect","navigate","_statisticUpdateRequested","emit","mapMode","selectedKeys","selectedSourceItem","selectedSummaries","onSelectionChange","gridOptions","_onOneShow","_onOneExport","_onOneReplan","_onOneBooking","_onOneDownloadPackage","pagerOptions","_onReplan","_onDelete","cropTypesNames","GetHistory$","gridUpdate$","summaries","cropRotationHistory","isGridUpdateAllowed","fieldArchiveLoaded","DeletedAt","getArea","sum","getCalculateSumFertilizer","productTooltip","_getProductId","fertilizerUnit","sumTooltip","planBookApplicationDates","getApplicationDatesData","state","_getCropType","Count","getPlanBooksFieldsCount","OperationMode","User_Operation_Mode","NewestDate","Tooltip","IsMoreThanOneUniqDate","Plannings","Note","Sum","SumUnit","getLeadNutrient","getMin","getMax","getAverageNutrientFromStatistics","FieldIds","getFieldIds","getFieldCropsTooltip","Croptype_Id","_generatePrintFilename","replanSummary","deleteSummary","chartConfigs","planBooks","flat","pB","chartConfig","generateStatChartConfig","routes","path","canActivate","ApPermissionGuard","login","layout","PageMode","operationModeService","_getColumns","gridPopupOptions","_onOneReset","BookedBy","bandIdX0","bandIdX1","bandIdX2","bandIdX3","GetOperationMode","BookDate","FindLast","_onReset","unbookPlanBooks","ApNutrientManagementBookingComponent","ApNutrientManagementRoutes","RouterModule","ApNutrientManagementModule","ApGetCropTypeNamePipe","imports","CommonModule","GridModule","ApCoreModule","ApIconModule","ApTranslationModule","ApUtilsModule","ButtonModule","PDFModule","PagerModule","BodyModule","HeaderModule","SharedModule","ExcelModule","PDFExportModule","ApTooltipModule","ApResponsiveTextModule","ApSectionHeaderModule","GroupModule","ApDynComponentModule","ApPermissionModule","ApSoilSampleService","soilSampleField","FieldPart","sampleDate","difference","getCampaignYear","getMonth","FieldStatisticHistogramService","landUseStore","soilGroupFormatService","soilSampleClassColorService","getHistogramStatistic","Reduce","target","_createStatistic","ChartSetValueType","selected","soilPlanningYears","fieldSoilPlanningYears","hist","el","val","Values","cells","Counters","dateName","_mapDate","found","FindIndex","fieldId","allCells","counters","fill","res","valueType","getStatisticAxesConfig","step","_mapSampleRegion","_mapSampleMethods","mapSingle","_mapLanduse","decimalPlaces","getColor","colorCode","meta","fieldYears","method","SampleMethods","Method","region","SampleRegions","Region","landuse","LandUse","parseInt"],"sources":["./src/app/ap-dyngrids/config/ap-dyn-grid-class-color-column-config.ts","./src/app/ap-interface/enums/layout/icon.enum.ts","./src/app/nutrient-management/components/ap-nutrient-distribution.component.ts","./src/app/nutrient-management/types/base-fertilization-soil-sampleplanning.types.ts","./src/app/stores/nutrients/soilsampleplanning-report.store.ts","./src/app/nutrient-management/components/ap-soilsampleplanning-overview.component.ts","./src/app/nutrient-management/components/configs/pager-builder.ts","./src/app/nutrient-management/components/ap-nutrient-management-overview.component.ts","./src/app/nutrient-management/components/ap-nutrient-p-need.component.ts","./src/app/nutrient-management/components/configs/plan-books-grid-builder.service.ts","./src/app/nutrient-management/components/ap-nutrient-management-planning.component.ts","./src/app/nutrient-management/ap-nutrient-management.routes.ts","./src/app/nutrient-management/components/ap-nutrient-management-booking.component.ts","./src/app/nutrient-management/ap-nutrient-management.module.ts","./src/app/nutrient-management/service/ap-soil-sample.service.ts","./src/app/services/data/field-statistic-histogram.service.ts"],"sourcesContent":["import {\n  ApDynGridColumnConfigBase,\n  ApDynGridColumnControlType,\n  ApDynGridColumnHideConfig,\n  IPipeDefinition\n} from './ap-dyn-grid-column-config-base';\n\nexport class ApDynGridClassColorColumnConfig extends ApDynGridColumnConfigBase {\n  public type = ApDynGridColumnControlType.ClassColor;\n  public field: string;\n  public showHeaderTitle: boolean;\n  public title: string;\n  public key: string;\n  public width: number;\n  public tooltip: string;\n  public filterable: boolean;\n\n  constructor(options: {\n    hide?: boolean | ApDynGridColumnHideConfig,\n    sortIndex?: number,\n    sortDesc?: boolean,\n    groupIndex?: number,\n    groupDesc?: boolean,\n    headerStyle?: any,\n    style?: any,\n    pdfExport?: boolean,\n    xlsExport?: boolean,\n    field?: string,\n    showHeaderTitle?: boolean,\n    title?: string,\n    class?: string,\n    key?: string,\n    description?: string,\n    width?: number,\n    tooltip?: string,\n    cssClass?: 'left' | 'right' | 'center',\n    pipes?: IPipeDefinition[],\n    tooltipPipes?: IPipeDefinition[],\n    filterable?: boolean,\n  } = {}) {\n    super(options);\n    this.key = options.key;\n    this.width = options.width;\n    this.field = options.field ? options.field : undefined;\n    this.showHeaderTitle = options.showHeaderTitle ? options.showHeaderTitle : false;\n    this.title = options.title ? options.title : ' ';\n    this.tooltip = options.tooltip ? options.tooltip : '';\n    this.filterable = options.filterable === false ? false : true; // default is true and can explicitly set to false in component\n  }\n}\n","export enum Icon {\n  Delete = 'delete',\n  Edit = 'Edit',\n  Print = 'print',\n  Save = 'save',\n  Source = 'source-code',\n  XLS = 'file-xls',\n  PDF = 'pdf',\n  Shape = 'shape'\n}\n","import {AfterContentInit, Component, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {combineLatest, Observable, of, Subscription}               from 'rxjs';\nimport {ApElementOxydTypeEnum, MapViewCurrentMenu, MapViewMode}    from '../../ap-interface';\nimport {\n  ApDynComponentComponent\n}                                                                  from '../../ap-dyncomponent/ap-dyncomponent.component';\nimport {\n  ApDynGridColumnConfigBase\n}                                                                  from '../../ap-dyngrids/config/ap-dyn-grid-column-config-base';\nimport {\n  ApDynGridPagerConfigBase\n}                                                                  from '../../ap-dyngrids/config/ap-dyn-grid-pager-config-base';\nimport {\n  AreaUnit,\n  AreaUnitConverterPipe,\n  GetRoundNumericPipe,\n  GetSoilSampleClassNamePipe,\n  GetSoilSampleFieldClassColorPipe\n}                                                                  from '../../ap-utils';\nimport {\n  ApDynGridPropertyColumnConfig,\n  FilterType\n}                                                                  from '../../ap-dyngrids/config/ap-dyn-grid-property-column-config';\nimport {\n  ApDynGridGroupColumnConfig\n}                                                                  from '../../ap-dyngrids/config/ap-dyn-grid-group-column-config';\nimport {\n  ApDynGridClassColorColumnConfig\n}                                                                  from '../../ap-dyngrids/config/ap-dyn-grid-class-color-column-config';\nimport {\n  ApDynGridEditColumnConfig\n}                                                                  from '../../ap-dyngrids/config/ap-dyn-grid-edit-column-config';\nimport {\n  ApDynGridPagerConfig\n}                                                                  from '../../ap-dyngrids/config/ap-dyn-grid-pager-config';\nimport {SettingsStore}                                             from '../../stores/base-data/settings.store';\nimport {FieldStore}                                                from '../../stores/farm/field.store';\nimport {\n  FieldNutrientDistributionStore\n}                                                                  from '../../stores/nutrients/field-nutrient-distributions.store';\nimport {MapViewStore}                                              from '../../stores/layout/mapview.store';\nimport {MapStore}                                                  from '../../stores/map/map.store';\nimport {filter, map}                                               from 'rxjs/operators';\nimport {\n  ApNutrientPlanningComponent\n}                                                                  from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning.component';\nimport {FormStore}                                                 from '../../stores/layout/form.store';\nimport {\n  ApDynGridStatusColumnConfig\n}                                                                  from '../../ap-dyngrids/config/ap-dyn-grid-status-column-config';\nimport {ApSoilSampleService}                                       from '../service/ap-soil-sample.service';\nimport {\n  GetRoundNumericService\n}                                                                  from '../../ap-utils/service/get-round-numeric.service';\nimport {\n  ApFieldFormatService\n}                                                                  from '../../ap-utils/service/ap-field-format.service';\nimport {ApDateService}                                             from '../../ap-core/services/ap-date-service';\nimport {LanguageStore}                                             from '../../stores/translation/language.store';\nimport {StatisticStore}                                            from '../../stores/statistic/statistic.store';\nimport {Create}                                                    from 'ts-tooling';\nimport {\n  IImageStyle\n}                                                                  from '../../ap-utils/service/get-soil-sample-class-color.service';\nimport {JobsStore}                                                 from '../../stores/administration/jobs.store';\nimport {\n  GetElementService\n}                                                                  from '../../ap-utils/service/ap-get-element.service';\nimport {ApNutrientService}                                         from '../../ap-utils/service/ap-nutrient.service';\nimport {APP_CONFIGURATION}                                         from '../../ap-core/config';\nimport {\n  ApElementType\n}                                                                  from '../../ap-interface/enums/ap-elements-type.enum';\nimport {CampaignYearStore}                                         from '../../stores/login/campaignyear.store';\nimport {Icon}                                                      from '../../ap-interface/enums/layout/icon.enum';\nimport {ApUtilService}                                             from '../../ap-utils/service/ap-util.service';\nimport {LoginStore}                                                from '../../stores/login/login.store';\nimport {\n  ApTranslationService\n}                                                                  from '../../ap-utils/service/ap-translation.service';\nimport {\n  IApFieldNutrientDistributionGrid\n}                                                                  from '../types/bese-fertilization-distribution.types';\nimport {\n  PlanningEntryComponentDataType\n}                                                                  from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning-configs/nutrient-planning-types';\nimport {\n  FieldStatisticHistogramService,\n  IFieldStatisticHistogramData\n}                                                                  from '../../services/data/field-statistic-histogram.service';\nimport {StatisticService}                                          from '../../services/data/statistic.service';\nimport IField = Data.FieldManagement.IField;\nimport ISettings = Data.BaseData.ISettings;\nimport {SoilSampleDateStore}                                       from '../../stores/nutrients/soilsampledate.store';\n\n@Component({\n  selector: 'ap-nutrients-distribution',\n  template: `\n    <ap-dyncomponent [caption]=\"'Global__NutrientDistribution'\"\n                     [canCreate]=\"true\"\n                     [canSearch]=\"true\"\n                     [headerIcon]=\"'ap-icon-base-fertilization'\"\n                     [filterTooltip]=\"'filterTooltip'\"\n                     [columns]=\"columns\"\n                     [items]=\"items$ | async\"\n                     [loading$]=\"listenFieldNutrientDistributionsLoading$\"\n                     [pager]=\"pager\"\n                     [groupable]=\"true\"\n                     [selectable]=\"{checkboxOnly: false, mode: 'multiple'}\"\n                     (create)=\"onCreate()\"\n    ></ap-dyncomponent>\n  `,\n  styles: []\n})\nexport class ApNutrientDistributionComponent implements OnInit, AfterContentInit, OnDestroy {\n  @ViewChild(ApDynComponentComponent, {static: true}) dynComponent: ApDynComponentComponent;\n  public columns: ApDynGridColumnConfigBase[] = [];\n  public items$: Observable<any[]> = of([]);\n  public pager: ApDynGridPagerConfigBase;\n  public listenFieldNutrientDistributionsLoading$: Observable<boolean> = of(true);\n\n  private _subscriptions: Subscription[] = [];\n  private _settings: ISettings;\n  private _currentFieldGeomIds: string[] = [];\n  private _onSelectionChanged: Subscription;\n  private _classColorColumnWidth = 45;\n  private _valueColumnWidth = 45;\n\n  constructor(private nutrientDistributionStore: FieldNutrientDistributionStore,\n              private loginStore: LoginStore,\n              private formStore: FormStore,\n              private fieldStore: FieldStore,\n              private mapStore: MapStore,\n              private mapViewStore: MapViewStore,\n              private roundNumericService: GetRoundNumericService,\n              private roundNumericPipe: GetRoundNumericPipe,\n              private nutrientService: ApNutrientService,\n              private areaUnitPipe: AreaUnitConverterPipe,\n              private settingsStore: SettingsStore,\n              private soilSampleFieldClassColorPipe: GetSoilSampleFieldClassColorPipe,\n              private soilSampleClassNamePipe: GetSoilSampleClassNamePipe,\n              private translationService: ApTranslationService,\n              private soilSampleService: ApSoilSampleService,\n              private fieldFormatService: ApFieldFormatService,\n              private languageStore: LanguageStore,\n              private dateService: ApDateService,\n              private statisticStore: StatisticStore,\n              private fieldStatisticHistogramService: FieldStatisticHistogramService,\n              private jobsStore: JobsStore,\n              private soilSampleDateStore: SoilSampleDateStore,\n              private campaignYearStore: CampaignYearStore,\n              private statisticService: StatisticService,\n              private elementService: GetElementService) {\n  }\n\n  public ngOnInit(): void {\n    this.listenFieldNutrientDistributionsLoading$ = combineLatest([\n      this.nutrientDistributionStore.Loading$,\n      this.fieldStore.Listen(s => s.loading)\n    ]).pipe(\n      map(loadingItems => loadingItems.some(x => x))\n    );\n    this._mapDistributionsToGrid();\n  }\n\n  public ngAfterContentInit(): void {\n    this._onSelectionChanged = this.dynComponent.SelectedItems$.subscribe(d => this._selectionChange(d));\n    if (this.mapViewStore.getMapViewMode() !== MapViewMode.NORMAL) {\n      this.mapViewStore.showMapView();\n    }\n    // disable drawing the crop colors and the selected style\n    this.mapStore.EnableDistributionView();\n    this._subscriptions.push(this.settingsStore.FirstSetting$.subscribe(s => this._settings = s));\n    this._subscriptions.push(combineLatest([\n        this.campaignYearStore.Listen(s => s.selectedYear),\n        this.fieldStore.Listen(f => f.data)\n      ]).pipe(\n        filter(([campaignYear, fields]) => campaignYear && fields && fields?.length > 0))\n        .subscribe(([_, fields]) => {\n          this._readFieldGeomsOfCurrentLoadedFields(fields);\n          this.nutrientDistributionStore.loadFieldNutrientDistributions(this._currentFieldGeomIds);\n        })\n    );\n    this._gridBuilder();\n    this._subscriptions.push(this.mapViewStore.Listen(d => d.currentMenu).subscribe(mapViewMenu => {\n      if (mapViewMenu === MapViewCurrentMenu.STATS) {\n        this._selectionChange(this.dynComponent.getSelectedItems() as IApFieldNutrientDistributionGrid[]);\n      }\n    }));\n  }\n\n  public ngOnDestroy(): void {\n    this.statisticStore.removeStatisticData();\n    // enable drawing the crop colors and the selected style\n    this.mapStore.DisableDistributionView();\n    this._subscriptions.forEach(d => d.unsubscribe());\n    this._onSelectionChanged?.unsubscribe();\n  }\n\n  public onCreate(): void {\n    this.formStore.openForm({\n      component: ApNutrientPlanningComponent,\n      data: {\n        Summary: null,\n        Type: PlanningEntryComponentDataType.Create\n      }\n    });\n  }\n\n  private _gridBuilder(): void {\n    this.columns = [\n      new ApDynGridStatusColumnConfig({\n        field: 'Status',\n        class: 'StatusClass',\n        description: 'StatusDesc',\n        showHeaderTitle: false,\n        filterable: true,\n        pending: this.jobsStore.BlockedFieldIdsBuWsv$,\n        pendingTooltip: this.jobsStore.BlockedFieldIdsBuWsvTooltip$\n      }),\n      new ApDynGridPropertyColumnConfig({\n        field: 'FieldNumber',\n        title: 'Global__NumberAbbr',\n        filterable: true,\n        width: 75,\n        headerFilterable: true\n      }),\n      new ApDynGridPropertyColumnConfig({\n        field: 'Field.FieldName',\n        title: 'Global__FieldName',\n        filterable: true,\n        width: 180,\n        headerFilterable: true,\n        cssClass: 'left',\n        sortIndex: 0\n      }),\n      new ApDynGridPropertyColumnConfig({\n        field: 'Area',\n        title: 'Global__Area',\n        filterable: true,\n        width: 60,\n        cssClass: 'right', filterType: FilterType.NUMBER,\n        headerFilterable: true,\n        pipes: [{\n          pipe: this.roundNumericPipe,\n          args: [\n            this._settings.DigitsAfterDecimalPoint\n          ]\n        }]\n      }),\n      new ApDynGridPropertyColumnConfig({\n        field: 'SoilGroup',\n        title: 'Nutrients__Soilgroup',\n        width: 80,\n        hide: true,\n        filterable: true,\n        filterType: FilterType.NUMBER_LIST,\n        headerFilterable: true\n      }),\n      new ApDynGridGroupColumnConfig({\n        headerStyle: {\n          'text-align': 'center'\n        },\n        style: {border: '1px solid #2c3237'},\n        title: 'Global__Avg_Class',\n        groupColumns: [\n          new ApDynGridClassColorColumnConfig({\n            field: 'StyleClassP',\n            title: this.elementService.GetElementStringByString(ApElementType.P),\n            key: 'ClassP',\n            width: this._classColorColumnWidth,\n            filterable: true,\n            tooltip: 'PValueTooltip',\n            cssClass: 'center'\n          }),\n          new ApDynGridClassColorColumnConfig({\n            field: 'StyleClassK',\n            title: this.elementService.GetElementStringByString(ApElementType.K),\n            key: 'ClassK',\n            width: this._classColorColumnWidth,\n            filterable: true,\n            tooltip: 'KValueTooltip',\n            cssClass: 'center'\n          }),\n          new ApDynGridClassColorColumnConfig({\n            field: 'StyleClassMg',\n            title: this.elementService.GetElementStringByString(ApElementType.Mg),\n            key: 'ClassMg',\n            width: this._classColorColumnWidth,\n            filterable: true,\n            tooltip: 'MgValueTooltip',\n            cssClass: 'center'\n          }),\n          new ApDynGridClassColorColumnConfig({\n            field: 'StyleClassPh',\n            title: 'Nutrients__Ph',\n            key: 'ClassPh',\n            width: this._classColorColumnWidth,\n            filterable: true,\n            tooltip: 'PhValueTooltip',\n            cssClass: 'center'\n          })\n        ]\n      }),\n      new ApDynGridGroupColumnConfig({\n        headerStyle: {\n          'text-align': 'center'\n        },\n        style: {border: '1px solid #2c3237'},\n        title: 'Global__Avg_Content',\n        hide: true,\n        groupColumns: [\n          new ApDynGridPropertyColumnConfig({\n            field: 'PValue',\n            title: this.elementService.GetElementStringByString(ApElementType.P),\n            width: this._valueColumnWidth,\n            hide: true,\n            formatCallback: (dataItem, value) => `${(dataItem?.PIsGreaterE ? '> ' : '')}${value}`,\n            filterable: true,\n            cssClass: 'right', filterType: FilterType.NUMBER,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [\n                APP_CONFIGURATION.SpecialDecimalPlaces.Distributions\n              ]\n            }]\n          }),\n          new ApDynGridPropertyColumnConfig({\n            field: 'KValue',\n            title: this.elementService.GetElementStringByString(ApElementType.K),\n            width: this._valueColumnWidth,\n            hide: true,\n            formatCallback: (dataItem, value) => `${(dataItem?.KIsGreaterE ? '> ' : '')}${value}`,\n            filterable: true,\n            cssClass: 'right',\n            filterType: FilterType.NUMBER,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [\n                APP_CONFIGURATION.SpecialDecimalPlaces.Distributions\n              ]\n            }]\n          }),\n          new ApDynGridPropertyColumnConfig({\n            field: 'MgValue',\n            title: this.elementService.GetElementStringByString(ApElementType.Mg),\n            width: this._valueColumnWidth,\n            hide: true,\n            formatCallback: (dataItem, value) => `${(dataItem?.MgIsGreaterE ? '> ' : '')}${value}`,\n            filterable: true,\n            cssClass: 'right',\n            filterType: FilterType.NUMBER,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [\n                APP_CONFIGURATION.SpecialDecimalPlaces.Distributions\n              ]\n            }]\n          }),\n          new ApDynGridPropertyColumnConfig({\n            field: 'PhValue',\n            title: 'Nutrients__Ph',\n            width: this._valueColumnWidth,\n            hide: true,\n            formatCallback: (dataItem, value) => `${(dataItem?.PhIsGreaterE ? '> ' : '')}${value}`,\n            filterable: true,\n            cssClass: 'right',\n            filterType: FilterType.NUMBER,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [\n                APP_CONFIGURATION.SpecialDecimalPlaces.Distributions\n              ]\n            }]\n          })\n        ]\n      }),\n      new ApDynGridPropertyColumnConfig({\n        title: 'Nutrients_Ips_Pages__LastBu',\n        field: 'NewestSampleDate',\n        format: this.languageStore.SelectedLanguage.DateFormat,\n        width: 80,\n        hide: true,\n        filterable: true,\n        filterType: FilterType.MONTH\n      }),\n      new ApDynGridEditColumnConfig({\n        disabled: true\n      })\n    ];\n    this.pager = new ApDynGridPagerConfig({\n      iconButtons: [\n        {\n          icon: Icon.XLS,\n          callback: ApUtilService.createEventEmitter(this.exportAsXls.bind(this), this._subscriptions),\n          tooltip: 'Global__Save_EXCEL'\n        }\n      ]\n    });\n  }\n\n  private _readFieldGeomsOfCurrentLoadedFields(fields: IField[]): void {\n    const tmp = [];\n    for (const field of fields) {\n      if (!field.FieldGeoms || typeof field.FieldGeoms !== typeof [] || field.FieldGeoms.length < 1) {\n        // skip Fields without Geometry\n        continue;\n      }\n      for (const geom of field.FieldGeoms) {\n        tmp.push(geom.Id);\n      }\n    }\n    this._currentFieldGeomIds = tmp;\n  }\n\n  private _soilSampleClassName(value: number): string {\n    return this.soilSampleClassNamePipe.transform(value);\n  }\n\n  private _soilClassColor(value: string): IImageStyle {\n    return this.soilSampleFieldClassColorPipe.transform(value, [false]);\n  }\n\n  private _areaUnitConvert(value: number): any {\n    return this.areaUnitPipe.transform(\n      value, [AreaUnit.SQUARE_METER, AreaUnit.HEKTAR]);\n  }\n\n  private _selectionChange(items: IApFieldNutrientDistributionGrid[]): void {\n    let itemsToSelect: IApFieldNutrientDistributionGrid[] = items;\n    if (itemsToSelect && itemsToSelect.length > 0) {\n      this.fieldStore.changeSelectedField(itemsToSelect.map(x => x.Id.toString()));\n    } else {\n      itemsToSelect = this.dynComponent.items as IApFieldNutrientDistributionGrid[];\n      this.fieldStore.changeSelectedField([]);\n      this.fieldStore.zoomFarmFields();\n    }\n    // calculate statistic only if user is on statistic tab\n    if (this.mapViewStore.getMapViewCurrentMenu() !== MapViewCurrentMenu.STATS) {\n      return;\n    }\n    setTimeout(() => {\n      this.statisticStore.removeStatisticData();\n      const statisticData = itemsToSelect.map(x => {\n        const item: IFieldStatisticHistogramData = {\n          Status: x.Status,\n          FieldId: x.Field?.Id,\n          FieldName: x.Field?.FieldName,\n          AreaHa: x.FieldGeom?.AreaHa ?? 0,\n          Histograms: x.SourceItem.Histograms\n        };\n        return item;\n      });\n      const title = this._getTitleForStatistic(itemsToSelect);\n      this.fieldStatisticHistogramService.generateHistogramStatistic(title, statisticData);\n    }, 0);\n  }\n\n  private _getTitleForStatistic(selectedItems: IApFieldNutrientDistributionGrid[]): string {\n    const totalItems = this.dynComponent.items as IApFieldNutrientDistributionGrid[];\n    const dataForTitles = totalItems.map(x => ({\n      AreaHa: x.Area,\n      Selected: selectedItems.some(z => z.Id === x.Id)\n    }));\n    return this.statisticService.generateFieldsAreaTitle(dataForTitles);\n  }\n\n  private exportAsXls(): void {\n    const fileName = this._getExportFilename();\n    const items = this.dynComponent.getSelectedItems() as IApFieldNutrientDistributionGrid[];\n    const fieldGeometryIds = items.map(x => x.FieldGeom.Id);\n    this.nutrientDistributionStore.statisticDataExcelExport(fileName, fieldGeometryIds);\n  }\n\n  private _getExportFilename(): string {\n    const customerExpr = this.loginStore.SelectedFarm?.CustomerNumber;\n    const dateExpr = this.dateService.toFarmDate(new Date()).format('YYMMDD');\n    const componentName = this.translationService.translate('Global__NutrientDistribution');\n    return `${dateExpr}_${componentName.replace(' ', '_')}_${customerExpr}`;\n  }\n\n  private _mapDistributionsToGrid(): void {\n    this.items$ = combineLatest([\n      this.nutrientDistributionStore.Distributions$,\n      this.soilSampleDateStore.Dates$\n    ]).pipe(\n      filter(([dist, sampleDates]) => !!dist && !!sampleDates),\n      map(([dist, sampleDates]) => {\n        return dist.map((dis: any) => {\n          const fieldGeom = this.fieldStore.getFieldGeomById(dis.FieldGeomId);\n          const field = this.fieldStore.getFieldByFieldGeomId(dis.FieldGeomId);\n          const adminArea = Create(fieldGeom?.AdminArea, 0);\n          const areaNumber = adminArea > 0 ? adminArea : '-';\n          let areaRound: string | number;\n          if (areaNumber !== '-') {\n            const area = this._areaUnitConvert(areaNumber);\n            areaRound = this.roundNumericService.roundAsNumber(area, this._settings.DigitsAfterDecimalPoint);\n          } else {\n            areaRound = '-';\n          }\n          const newestSampleDate = this.dateService.getDateMidnight(sampleDates[field?.Id as string]?.Date);\n          const classP = this._soilSampleClassName(dis.AvgClassP);\n          const classK = this._soilSampleClassName(dis.AvgClassK);\n          const classMG = this._soilSampleClassName(dis.AvgClassMg);\n          const classPH = this._soilSampleClassName(dis.AvgClassPh);\n          const pIsGreaterE = dis.AvgClassP > 8;\n          const kIsGreaterE = dis.AvgClassK > 8;\n          const mgIsGreaterE = dis.AvgClassMg > 8;\n          const phIsGreaterE = dis.AvgClassPh > 8;\n          const pValue = this.nutrientService.convertElementOxid(dis.AvgP, ApElementOxydTypeEnum.P, dis.MethodP);\n          const kValue = this.nutrientService.convertElementOxid(dis.AvgK, ApElementOxydTypeEnum.K, dis.MethodK);\n          const mgValue = this.nutrientService.convertElementOxid(dis.AvgMg, ApElementOxydTypeEnum.Mg, dis.MethodMg);\n          const phValue = dis.AvgPh;\n          const pValueRounded = this.roundNumericService.roundAsNumber(pValue, APP_CONFIGURATION.SpecialDecimalPlaces.Distributions);\n          const kValueRounded = this.roundNumericService.roundAsNumber(kValue, APP_CONFIGURATION.SpecialDecimalPlaces.Distributions);\n          const mgValueRounded = this.roundNumericService.roundAsNumber(mgValue, APP_CONFIGURATION.SpecialDecimalPlaces.Distributions);\n          const phValueRounded = this.roundNumericService.roundAsNumber(phValue, APP_CONFIGURATION.SpecialDecimalPlaces.Distributions);\n          const status = this.soilSampleService.getStatus(dis.NewestSampleDate);\n          const soilGroups = [...dis.SoilGroups].Sort().join(', ');\n          const translations = [\n            'Nutrients_Ips_Pages__StatusRed',\n            'Nutrients_Ips_Pages__StatusYellow',\n            'Nutrients_Ips_Pages__StatusGreen',\n          ];\n          const classes = [\n            'ap-status-red',\n            'ap-status-yellow',\n            'ap-status-green'\n          ];\n          return {\n            Id: field?.Id,\n            Status: status,\n            StatusClass: classes[status + 1],\n            StatusDesc: translations[status + 1],\n            SoilGroup: soilGroups,\n            SourceItem: dis,\n            FieldNumber: this.fieldFormatService.formatFieldNumber(field),\n            Field: field,\n            FieldGeom: fieldGeom,\n            Area: areaRound,\n            ClassP: classP,\n            ClassK: classK,\n            ClassMg: classMG,\n            ClassPh: classPH,\n            StyleClassP: this._soilClassColor(classP),\n            StyleClassK: this._soilClassColor(classK),\n            StyleClassMg: this._soilClassColor(classMG),\n            StyleClassPh: this._soilClassColor(classPH),\n            PValue: pValueRounded,\n            KValue: kValueRounded,\n            MgValue: mgValueRounded,\n            PhValue: phValueRounded,\n            PIsGreaterE: pIsGreaterE,\n            KIsGreaterE: kIsGreaterE,\n            MgIsGreaterE: mgIsGreaterE,\n            PhIsGreaterE: phIsGreaterE,\n            PValueTooltip: this.nutrientService.formatClassificationTooltip(dis.AvgP, pIsGreaterE, dis.MethodP),\n            KValueTooltip: this.nutrientService.formatClassificationTooltip(dis.AvgK, kIsGreaterE, dis.MethodK),\n            MgValueTooltip: this.nutrientService.formatClassificationTooltip(dis.AvgMg, mgIsGreaterE, dis.MethodMg),\n            PhValueTooltip: this.nutrientService.formatClassificationTooltip(dis.AvgPh, phIsGreaterE, dis.MethodPh),\n            NewestSampleDate: newestSampleDate,\n          } as IApFieldNutrientDistributionGrid;\n        });\n      })\n    );\n  }\n}\n","import {IGridData} from '../../ap-interface';\nimport IField = Data.FieldManagement.IField;\nimport ISoilSamplePlanning = Data.IpsPlanning.ISoilSamplePlanning;\nimport IGuid = System.IGuid;\n\n/**\n * enumeration for all possible types of mass edit within this component\n */\nexport enum SoilSampleEdits {\n  DeleteValues = 0,\n  ShapeExport = 1,\n  NextSample = 2,\n  OrgApplication = 3,\n  Description = 4,\n  PdfExport = 5,\n  XlsExport = 6,\n  NextSampleDelete = 7\n}\n\nexport interface ISspFieldJoin {\n  Id: IGuid;\n  Field: IField;\n  SoilSamplePlanning: ISoilSamplePlanning;\n}\n\nexport interface ISspFieldJoinGridData extends IGridData<ISspFieldJoin> {\n  Status: any;\n  StatusClass: any;\n  StatusDesc: any;\n  Geom: any;\n  Area: number;\n  LastSamplingDate: Date;\n  PlannedSamplingDate: any;\n  OrganicApplication: any;\n  Crop: any;\n}\n\nexport enum SoilSamplePlanningOverviewActions {\n  YES = 1,\n  NO = 0,\n}\n","import {IStateStore} from '../../ap-interface/interfaces/store';\nimport {Injectable}  from '@angular/core';\nimport {Store}       from '../index';\nimport {\n  ApCustomTypes,\n  NetTypes,\n  SoilSamplePlanningReportDownload,\n  SoilSamplePlanningReportDownloadSuccess\n}                    from 'invoker-transport';\nimport * as download from 'downloadjs';\nimport IReportData = Agriport.Excel.Factory.InputData.SoilSamplePlanningReport.IReportData;\nimport {ApSignalrService} from '../../ap-core/services/ap-signalr.service';\n\ninterface ISoilSamplePlanningReportStore extends IStateStore<string> {\n}\n\n@Injectable({providedIn: 'root'})\nexport class SoilSamplePlanningReportStore extends Store<ISoilSamplePlanningReportStore> {\n  constructor(public backend: ApSignalrService) {\n    super(backend, {\n      data: [],\n      loaded: false,\n      loading: false\n    });\n\n    backend.registerObservable(SoilSamplePlanningReportDownloadSuccess).subscribe(d => {\n      super.SetLoadFinishState();\n      download(d.Data[1], d.Data[0], 'application/excel');\n    });\n  }\n\n  public downloadSoilSamplePlanningReport(headline: string, bookname: string, reportData: IReportData): void {\n    super.SetLoadState();\n    super.Mutate(s => s.data, () => []);\n    this.DispatchBackend(new SoilSamplePlanningReportDownload([\n      {Name: 'headline', Type: NetTypes.STRING, Value: headline},\n      {Name: 'bookName', Type: NetTypes.STRING, Value: bookname},\n      {\n        Name: 'reportData',\n        Type: ApCustomTypes.Agriport_Excel_Factory_InputData_SoilSamplePlanningReport_ReportData,\n        Value: reportData\n      }\n    ]));\n  }\n}\n","import {SoilSamplePlanningStore}                                                 from '../../stores/nutrients/soilsampleplanning.store';\nimport {\n  SoilSamplePlanningReportStore\n}                                                                                from '../../stores/nutrients/soilsampleplanning-report.store';\nimport {AfterContentInit, Component, EventEmitter, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {BehaviorSubject, combineLatest, Observable, Subscription}                from 'rxjs';\nimport {find}                                                                    from 'lodash';\nimport {\n  ApGridPagerType,\n  ApStatsType,\n  IBarLineAreaChartData,\n  IBarLineAreaChartDataValue,\n  IGridPagerData,\n  IWizardChoiceData,\n  MapViewCurrentMenu,\n  MapViewMode\n}                                                                                from '../../ap-interface';\nimport * as moment                                                               from 'moment';\nimport {saveAs}                                                                  from '@progress/kendo-file-saver';\nimport {debounceTime, delay, filter, map}                                        from 'rxjs/operators';\nimport {\n  ApDynComponentComponent\n}                                                                                from '../../ap-dyncomponent/ap-dyncomponent.component';\nimport {\n  ApDynGridColumnConfigBase,\n  ApDynGridColumnHideConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-column-config-base';\nimport {\n  ApDynGridPagerConfigBase\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-pager-config-base';\nimport {\n  ApDynGridPropertyColumnConfig,\n  FilterType\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-property-column-config';\nimport {\n  ApDynGridEditColumnConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-edit-column-config';\nimport {\n  ApDynGridPagerConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-pager-config';\nimport {\n  ApDynGridStatusColumnConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-status-column-config';\nimport {ApGuidUtil, GetRoundNumericPipe}                                         from '../../ap-utils';\nimport {\n  SettingsStore\n}                                                                                from '../../stores/base-data/settings.store';\nimport {FieldStore}                                                              from '../../stores/farm/field.store';\nimport {\n  LanguageStore\n}                                                                                from '../../stores/translation/language.store';\nimport {\n  MapViewStore\n}                                                                                from '../../stores/layout/mapview.store';\nimport {\n  LoginStore\n}                                                                                from '../../stores/login/login.store';\nimport {\n  CampaignYearStore\n}                                                                                from '../../stores/login/campaignyear.store';\nimport {\n  ApDateService\n}                                                                                from '../../ap-core/services/ap-date-service';\nimport {Create, ObjectFactory}                                                   from 'ts-tooling';\nimport {\n  ApNutrientPlanningComponent\n}                                                                                from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning.component';\nimport {\n  FormStore\n}                                                                                from '../../stores/layout/form.store';\nimport {\n  ApSoilSampleService\n}                                                                                from '../service/ap-soil-sample.service';\nimport {\n  JobsStore\n}                                                                                from '../../stores/administration/jobs.store';\nimport {\n  IChartSet,\n  StatisticStore\n}                                                                                from '../../stores/statistic/statistic.store';\nimport {\n  SoilSampleDateStore\n}                                                                                from '../../stores/nutrients/soilsampledate.store';\nimport {\n  ApDynGridGroupColumnConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-group-column-config';\nimport {\n  CropRotationStore\n}                                                                                from '../../stores/farm/crop.rotation.store';\nimport {\n  ApTranslationService\n}                                                                                from '../../ap-utils/service/ap-translation.service';\nimport {\n  Icon\n}                                                                                from '../../ap-interface/enums/layout/icon.enum';\nimport {\n  ApUtilService\n}                                                                                from '../../ap-utils/service/ap-util.service';\nimport {\n  GetRoundNumericService\n}                                                                                from '../../ap-utils/service/get-round-numeric.service';\nimport {\n  ApRoleTypeService\n}                                                                                from '../../services/common/ap-role-type.service';\nimport {\n  ISspFieldJoinGridData,\n  SoilSampleEdits,\n  SoilSamplePlanningOverviewActions\n}                                                                                from '../types/base-fertilization-soil-sampleplanning.types';\nimport {\n  PlanningEntryComponentDataType\n}                                                                                from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning-configs/nutrient-planning-types';\nimport {\n  StatisticService\n}                                                                                from '../../services/data/statistic.service';\nimport ISettings = Data.BaseData.ISettings;\nimport IField = Data.FieldManagement.IField;\nimport ISoilSamplePlanning = Data.IpsPlanning.ISoilSamplePlanning;\nimport IContentRow = Agriport.Excel.Factory.InputData.SoilSamplePlanningReport.IContentRow;\nimport IReportData = Agriport.Excel.Factory.InputData.SoilSamplePlanningReport.IReportData;\nimport ISoilSamplePlanningExportData = Data.IpsPlanning.ISoilSamplePlanningExportData;\n\n/**\n * TODO EXCEL und PDF Export ermöglichen --> Jira Ticket angelegt https://jira.agricon.de/browse/APV49-826\n */\n\n@Component({\n  selector: 'ap-soilsampleplanning-overview',\n  template: `\n    <ap-dyncomponent [caption]=\"'Base__OrderPlanning'\"\n                     [canCreate]=\"false\"\n                     [canSearch]=\"true\"\n                     [headerIcon]=\"'ap-icon-base-fertilization'\"\n                     [filterTooltip]=\"'filterTooltip'\"\n                     [columns]=\"columns$ | async\"\n                     [items]=\"items$ | async\"\n                     [loading$]=\"isLoading$\"\n                     [pager]=\"pager\"\n                     [groupable]=\"true\"\n                     [pdfExportTitle]=\"'Base__OrderPlanning'\"\n                     [exportFileName]=\"exportFileName\"\n                     [selectable]=\"{checkboxOnly: false, mode: 'multiple'}\"\n                     (selectionChange)=\"selectionChange()\"\n                     (create)=\"onCreate()\"\n    ></ap-dyncomponent>`\n})\n\nexport class ApSoilSamplePlanningOverviewComponent implements OnInit, AfterContentInit, OnDestroy {\n  @ViewChild(ApDynComponentComponent, {static: true}) dynComponent: ApDynComponentComponent;\n  columns$: Observable<ApDynGridColumnConfigBase[]>;\n  items$: Observable<ISspFieldJoinGridData[]>;\n  pager: ApDynGridPagerConfigBase;\n  isLoading$: Observable<boolean>;\n  exportFileName = '';\n\n  public fieldsJoinedWithSoilSamplePlanning: any[] = [];\n  private _areaTotal = 0;\n  private _listMassEditing = [];\n  private _subscriptions: Array<Subscription> = [];\n  private _applyClicked = new EventEmitter<any>();\n  private _settings: ISettings;\n  private _previousMapViewMenu: MapViewCurrentMenu;\n  private _year$ = new BehaviorSubject<number>(undefined);\n  private _previousYear = new EventEmitter<void>();\n  private _nextYear = new EventEmitter<void>();\n  private _cropRotationLimits$ = new BehaviorSubject<{ min: number, max: number }>({\n    min: this.campaignYearStore?.getSelectedCampaignYear().Year,\n    max: this.campaignYearStore?.getSelectedCampaignYear().Year\n  });\n\n  /**\n   * Compares two dates\n   * @param dateA\n   * @param dateB\n   * @private\n   */\n  private static compareDates(dateA: Date, dateB: Date): number {\n    if (!dateA) {\n      return -1;\n    } else if (!dateB) {\n      return 1;\n    }\n    return dateA?.getTime() - dateB.getTime();\n  }\n\n  /**\n   * Calculates the statistic bar color depending on item's status\n   * @param item\n   * @param date\n   * @private\n   */\n  private static getStatBarColor(item: ISspFieldJoinGridData, date: Date): string {\n    if (!date) {\n      return '#2c3237';\n    } else {\n      switch (item.Status) {\n        case 0:\n          return '#fdce3e';\n        case 1:\n          return '#5ec232';\n        default:\n          return '#980000';\n      }\n    }\n  }\n\n  constructor(private soilSamplePlanningStore: SoilSamplePlanningStore,\n              private formStore: FormStore,\n              private loginStore: LoginStore,\n              private campaignYearStore: CampaignYearStore,\n              private mapViewStore: MapViewStore,\n              private translationService: ApTranslationService,\n              private fieldStore: FieldStore,\n              private languageStore: LanguageStore,\n              private roundNumericPipe: GetRoundNumericPipe,\n              private cropRotationStore: CropRotationStore,\n              private settingsStore: SettingsStore,\n              private soilSamplePlanningReportStore: SoilSamplePlanningReportStore,\n              private dateService: ApDateService,\n              private soilSampleService: ApSoilSampleService,\n              private soilSampleDateStore: SoilSampleDateStore,\n              private jobsStore: JobsStore,\n              private roundNumericService: GetRoundNumericService,\n              private statisticService: StatisticService,\n              private statisticStore: StatisticStore) {\n  }\n\n  ngOnInit(): void {\n    this.mapViewStore.goIntoStatisticMenu();\n    this._previousMapViewMenu = this.mapViewStore.getMapViewCurrentMenu();\n    this._subscriptions.push(this.settingsStore.FirstSetting$.subscribe(s => this._settings = s));\n    this._subscriptions.push(this._applyClicked.subscribe((e) => this._onApplyClicked(e)));\n    this._subscriptions.push(this._previousYear.subscribe(() => {\n      this._year$.next(this._year$.value - 1);\n    }));\n    this._subscriptions.push(this._nextYear.subscribe(() => {\n      this._year$.next(this._year$.value + 1);\n    }));\n    this._subscriptions.push(\n      combineLatest([\n        this.cropRotationStore.Listen(s => s.history).pipe(\n          map((history) => Object.values(history)),\n          filter((crops) => crops.length !== 0),\n          map((crops) => crops.map((crop) => Object.keys(crop).filter((key) => crop[key] !== null).map((key) => +key))),\n          map((years) => years.reduce((a, b) => a.concat(b)))),\n        this.campaignYearStore.Listen(s => s.selectedYear)\n      ]).pipe(\n        map(([dates, campaignYear]) => ({\n          min: Math.min(...dates, campaignYear.Year),\n          max: Math.max(...dates, campaignYear.Year)\n        }))).subscribe(l => this._cropRotationLimits$.next(l))\n    );\n    this.isLoading$ = combineLatest([\n      this.soilSamplePlanningStore.Listen(s => s.loading),\n      this.soilSampleDateStore.Listen(s => s.loading),\n      this.campaignYearStore.Listen(s => s.loading),\n      this.cropRotationStore.Listen(s => s.loading),\n      this.fieldStore.Listen(s => s.loading)]).pipe(\n      map(([planningLoading, soilSampleDatesLoading, campaignYearLoading, cropRotationLoading, fieldsLoading]) =>\n        planningLoading || soilSampleDatesLoading || campaignYearLoading || cropRotationLoading || fieldsLoading)\n    );\n    this._subscriptions.push(this.campaignYearStore.Listen(s => s.selectedYear).subscribe((campaignYear) => {\n      if (campaignYear) {\n        this._year$.next(campaignYear.Year - 1);\n      }\n    }));\n    this.items$ = combineLatest([\n      this.campaignYearStore.Listen(s => s.selectedYear),\n      this.cropRotationStore.Listen(s => s.history),\n      this.fieldStore.Listen(s => s.data),\n      this.soilSampleDateStore.Listen(s => s.dates),\n      this.soilSamplePlanningStore.Listen(s => s.data)]).pipe(\n      filter(([campaignYear, cropRotation, fields, soilSampleDates, plannings]) =>\n        fields?.length !== 0 && !!plannings && campaignYear?.Year > 0 && !!soilSampleDates && !!cropRotation),\n      map(([, cropRotation, fields, soilSampleDates, plannings]) => {\n        this.fieldsJoinedWithSoilSamplePlanning = [];\n        this._areaTotal = 0;\n        for (const field of fields) {\n          this.fieldsJoinedWithSoilSamplePlanning.push(\n            {\n              Id: field.Id,\n              Field: field,\n              SoilSamplePlanning: find(plannings, (ssP: any) => ssP && ssP.FieldId === field.Id) || {}\n            });\n        }\n        return this.fieldsJoinedWithSoilSamplePlanning.map(planning => {\n          const geom = this.fieldStore.getCurrentFieldGeom(planning.Field);\n          const area = Create(geom?.AdminArea, 0) / 10000;\n          if (area > 0) {\n            this._areaTotal = this._areaTotal + area;\n          }\n          const organic = planning?.SoilSamplePlanning?.OrganicApplication ? 'Global__Yes' : 'Global__No';\n          const lastSamplingDate = Object.keys(soilSampleDates).indexOf(planning.Id) >= 0 && soilSampleDates[planning.Id as string]\n            ? soilSampleDates[planning.Id as string]\n            : undefined;\n          const lastSamplingDateMidnight = !!lastSamplingDate?.Date\n            ? this.dateService.getDateMidnight(this.dateService.toFarmDateFromUtc(lastSamplingDate.Date).toDate())\n            : undefined;\n          const plannedSamplingDate = planning.SoilSamplePlanning.PlannedSamplingdate\n            ? this.dateService.toFarmDateFromUtc(planning.SoilSamplePlanning.PlannedSamplingdate).toDate()\n            : null;\n          const status = this.soilSampleService.getStatus(lastSamplingDateMidnight);\n          return {\n            Id: planning.Id,\n            SourceItem: planning,\n            NrSNr: this.fieldStore.getFieldNumberAndSubNumber(planning.Field),\n            Status: status,\n            StatusClass: status === 1\n              ? 'ap-status-green'\n              : status === 0 ? 'ap-status-yellow' : 'ap-status-red',\n            StatusDesc: status === 1\n              ? 'Nutrients_Ips_Pages__StatusGreen'\n              : status === 0 ? 'Nutrients_Ips_Pages__StatusYellow' : 'Nutrients_Ips_Pages__StatusRed',\n            Geom: geom,\n            Area: area,\n            LastSamplingDate: lastSamplingDateMidnight,\n            PlannedSamplingDate: plannedSamplingDate ? this.dateService.getDateNoonToFarmTime(plannedSamplingDate) : null,\n            OrganicApplication: this.translationService.translate(organic),\n            Crop: Object.keys(cropRotation).indexOf(planning.Id) >= 0 ? cropRotation[planning.Id as string] : null\n          } as ISspFieldJoinGridData;\n        });\n      }));\n    this.soilSamplePlanningStore.loadSoilSamplePlanning();\n    this._subscriptions.push(this.soilSamplePlanningStore.Listen(s => s.shapeExport).subscribe(data => {\n      if (data) {\n        this.downloadShapeExportZipped(data);\n      }\n    }));\n    this._subscriptions.push(this.items$.pipe(\n      debounceTime(500),\n      delay(1)).subscribe(_ => {\n      setTimeout(() => this.generateStats(), 0);\n    }));\n  }\n\n  ngAfterContentInit(): void {\n    this._subscriptions.push(this.loginStore.SelectedFarm$.subscribe(\n      () => this.soilSamplePlanningStore.loadSoilSamplePlanning()\n    ));\n\n    this.gridBuilder();\n    this.fillWizardChoiceData();\n    this.generateStats();\n  }\n\n  gridBuilder(): void {\n    this.columns$ = this._cropRotationLimits$.pipe(\n      filter((limits) => !!limits),\n      /*map((limits) => ({\n        limits\n      })),*/\n      map((limits) => [\n        new ApDynGridStatusColumnConfig({\n          field: 'Status',\n          showHeaderTitle: true,\n          class: 'StatusClass',\n          description: 'StatusDesc',\n          pending: this.jobsStore.BlockedFieldIdsBuWsv$,\n          pendingTooltip: this.jobsStore.BlockedFieldIdsBuWsvTooltip$,\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Global__NumberAbbr',\n          field: 'SourceItem.Field.FieldNumber',\n          filterable: true,\n          filterType: FilterType.NUMBER,\n          cssClass: 'right',\n          hide: true,\n          headerFilterable: true,\n          width: 60\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Global__FieldPartShort',\n          field: 'SourceItem.Field.FieldSubnumber',\n          filterable: true,\n          filterType: FilterType.NUMBER,\n          cssClass: 'right',\n          headerFilterable: true,\n          hide: true,\n          width: 60\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Global__NumberAbbr',\n          field: 'NrSNr',\n          filterable: true,\n          hide: new ApDynGridColumnHideConfig({\n            mapHide: false,\n            selfHide: this.mapViewStore.Listen(s => s.mode).pipe(map((m) => m !== MapViewMode.NORMAL)),\n          }),\n          width: 75,\n          headerFilterable: true\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Global__FieldName',\n          field: 'SourceItem.Field.FieldName',\n          filterable: true,\n          headerFilterable: true,\n          sortIndex: 0,\n          sortDesc: false,\n          width: 180,\n          cssClass: 'left',\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Global__Area_Unit',\n          field: 'Area',\n          headerFilterable: true,\n          width: 60,\n          cssClass: 'right', filterType: FilterType.NUMBER,\n          tooltip: (dataItem) => dataItem['Area'],\n          pipes: [{\n            pipe: this.roundNumericPipe,\n            args: [this._settings.DigitsAfterDecimalPoint]\n          }]\n        }),\n        new ApDynGridGroupColumnConfig({\n          style: 'text-align:center',\n          headerButtons: {\n            nextClicked: this._nextYear,\n            nextDisabled: this._year$.pipe(map((y) => y >= limits.max)),\n            previousClicked: this._previousYear,\n            previousDisabled: this._year$.pipe(map((y) => y <= limits.min)),\n          },\n          title: 'Global__Crop',\n          groupColumns: this.getCropRotationGridConfigs(limits),\n          width: 100,\n          hide: new ApDynGridColumnHideConfig({\n            widthHidePriority: 1\n          })\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Nutrients_Ips_Pages__LastBu',\n          field: 'LastSamplingDate',\n          filterable: true,\n          headerFilterable: true,\n          format: this.languageStore.CurrentDateFormat,\n          width: 80\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Nutrients_Ips_Pages__NextSample',\n          field: 'PlannedSamplingDate',\n          format: 'MM/YYYY',\n          filterable: true,\n          headerFilterable: true,\n          width: 80\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Nutrients_Ips_Pages__OrganicSample',\n          field: 'OrganicApplication',\n          filterable: true,\n          headerFilterable: true,\n          width: 80\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Nutrients_Ips_Pages__Note',\n          field: 'SourceItem.SoilSamplePlanning.Description',\n          filterable: true,\n          headerFilterable: true,\n          width: 180,\n          hide: true\n        }),\n        new ApDynGridEditColumnConfig({\n          disabled: true\n        })\n      ]));\n\n    this.pager = new ApDynGridPagerConfig({\n      listMassEditing: ApRoleTypeService.hasAgriconRole(this.loginStore.User) ? this._listMassEditing : null,\n      apply: this._applyClicked,\n      hasPermission: true,\n      iconButtons: [\n        {\n          icon: Icon.PDF,\n          callback: ApUtilService.createEventEmitter(this.exportAsPdf.bind(this), this._subscriptions),\n          tooltip: 'Global__Save_PDF'\n        },\n        {\n          icon: Icon.XLS,\n          callback: ApUtilService.createEventEmitter(this.exportAsXls.bind(this), this._subscriptions),\n          tooltip: 'Global__Save_EXCEL'\n        },\n        {\n          icon: Icon.Shape,\n          callback: ApUtilService.createEventEmitter(this.exportShape.bind(this), this._subscriptions),\n          tooltip: 'Nutrients_Ips_Pages__ShpExport'\n        },\n      ]\n    });\n  }\n\n  private getCropRotationGridConfigs(limits: { min: number, max: number }): ApDynGridColumnConfigBase[] {\n    const columns = [];\n    for (let iYear = limits.min; iYear <= limits.max + 3; ++iYear) {\n      columns.push(new ApDynGridPropertyColumnConfig({\n        title: `${iYear}`,\n        field: `Crop.${iYear}.MainCropName`,\n        filterable: true,\n        headerFilterable: iYear === this.campaignYearStore.getSelectedCampaignYear().Year,\n        width: 100,\n        pdfExport: iYear === this.campaignYearStore.getSelectedCampaignYear().Year || iYear === this.campaignYearStore.getSelectedCampaignYear().Year - 1 || iYear === this.campaignYearStore.getSelectedCampaignYear().Year + 1,\n        hide: new ApDynGridColumnHideConfig({\n          mapHide: false,\n          selfHide: combineLatest([this._year$, this.mapViewStore.Listen(s => s.mode)]).pipe(\n            map(([year, mode]) => {\n              if (mode !== MapViewMode.HIDE) {\n                // show middle year-column when map is visible\n                return iYear !== (year + 1);\n              } else {\n                // show all 3 croprotation years\n                return !(iYear >= year && iYear < year + 3);\n              }\n            }),\n          ),\n        }),\n        tooltip: ((dataItem) => {\n          const yesNo = (b: any) => this.translationService.translate(b ? 'LabelYes' : 'LabelNo');\n          const unit = this.translationService.translate('Global__UnitDtPerHa');\n\n          if (!dataItem || !dataItem['Crop'] || !dataItem['Crop'][iYear]) {\n            return '';\n          }\n\n          const c = dataItem['Crop'][iYear].MainCropName;\n          let s = '-';\n          let sYieldUnit = '-';\n          if (dataItem['Crop'][iYear].SecondCrop !== 0) {\n            s = dataItem['Crop'][iYear].SecondCropName;\n            sYieldUnit = dataItem['Crop'][iYear].SecondCropYield + ' ' + unit;\n          }\n\n          const mainCrop = `${this.translationService.translate('Nutrients_Pages_Popups__MainCrop')}: ${c}`;\n          const targetMain = `${this.translationService.translate('Global__Target')}: ${dataItem['Crop'][iYear].MainCropYield} ${unit}`;\n          const straw = `${this.translationService.translate('Nutrients_Pages__StrawRemoved')}: ${yesNo(dataItem['Crop'][iYear].MainCropStraw)}`;\n          const interTillage = `${this.translationService.translate('Nutrients_Pages_Popups__Intertillage')}: ${s}`;\n          const targetInter = `${this.translationService.translate('Global__Target')}: ${sYieldUnit}`;\n          const br = '<br>';\n          return `${mainCrop}${br}${targetMain}${br}${straw}${br}${interTillage}${br}${targetInter}`;\n        })\n      }));\n    }\n    return columns;\n  }\n\n  /**\n   * Fill mass edit wizzard\n   */\n  fillWizardChoiceData(): void {\n    this._listMassEditing.push(\n      {\n        id: SoilSampleEdits.DeleteValues,\n        name: this.translationService.translate('Nutrients_Ips_Pages__DeleteValues'),\n        type: ApGridPagerType.None,\n        values: null\n      } as IWizardChoiceData,\n      {\n        id: SoilSampleEdits.NextSampleDelete,\n        name: this.translationService.translate('Nutrients_Ips_Pages__NextSample_delete'),\n        type: ApGridPagerType.None,\n        values: null\n      } as IWizardChoiceData,\n      {\n        id: SoilSampleEdits.NextSample,\n        name: this.translationService.translate('Nutrients_Ips_Pages__NextSample'),\n        type: ApGridPagerType.CalenderMonthly,\n        values: null\n      } as IWizardChoiceData,\n      {\n        id: SoilSampleEdits.OrgApplication,\n        name: this.translationService.translate('Nutrients_Ips_Pages__OrganicSample'),\n        type: ApGridPagerType.DropDown,\n        values: [\n          {\n            id: SoilSamplePlanningOverviewActions.YES,\n            label: this.translationService.translate('Global__Yes'),\n          },\n          {\n            id: SoilSamplePlanningOverviewActions.NO,\n            label: this.translationService.translate('Global__No'),\n          }\n        ]\n      } as IWizardChoiceData,\n      {\n        id: SoilSampleEdits.Description,\n        name: this.translationService.translate('Nutrients_Ips_Pages__Note'),\n        type: ApGridPagerType.Text,\n        values: null\n      } as IWizardChoiceData\n    );\n  }\n\n  /**\n   * generates the filename for Excel, pdf and shape export.\n   */\n  public getExportFilename(): string {\n    const customerExpr = this.loginStore.SelectedFarm?.CustomerNumber;\n    const dateExpr = this.dateService.toFarmDate(new Date()).format('YYMMDD');\n    return `${dateExpr}_${this.translationService.translate('Base__OrderPlanning')}_${customerExpr}`;\n  }\n\n  ngOnDestroy(): void {\n    // go back to mapViewMode when user leaves Probenahmeplanung\n    if (this._previousMapViewMenu === MapViewCurrentMenu.MAP) {\n      this.mapViewStore.goIntoMapMenu();\n    }\n    this.statisticStore.removeStatisticData();\n    this._subscriptions.forEach(d => {\n      d.unsubscribe();\n    });\n  }\n\n  public onCreate(): void {\n    this.formStore.openForm({\n      component: ApNutrientPlanningComponent,\n      data: {\n        Summary: null,\n        Type: PlanningEntryComponentDataType.Create\n      }\n    });\n  }\n\n  private _onApplyClicked($event: IGridPagerData): void {\n    const modifiedPlannings: ISoilSamplePlanning[] = [];\n    const foundItems = (this.dynComponent.getSelectedItems() as ISspFieldJoinGridData[]).map(d => {\n      return d.SourceItem;\n    });\n\n    if (!foundItems || foundItems.length === 0) {\n      return;\n    }\n\n    for (const foundItem of foundItems) {\n      const item = ObjectFactory.Copy(foundItem);\n      (item.SoilSamplePlanning as ISoilSamplePlanning).FieldId = (item.Field as IField).Id;\n      switch ($event?.object?.id) {\n        case SoilSampleEdits.DeleteValues: {\n          (item.SoilSamplePlanning as ISoilSamplePlanning).Description = null;\n          (item.SoilSamplePlanning as ISoilSamplePlanning).PlannedSamplingdate = null;\n          (item.SoilSamplePlanning as ISoilSamplePlanning).OrganicApplication = null;\n          break;\n        }\n        case SoilSampleEdits.NextSample: {\n          // convert date from kendo (defaultz browser timezone) to farm timezone!\n          (item.SoilSamplePlanning as ISoilSamplePlanning).PlannedSamplingdate =\n            this.dateService.getDateNoonToFarmTime($event.value as Date, 1);\n          (item.SoilSamplePlanning as ISoilSamplePlanning).UserId = this.loginStore.UserId;\n          break;\n        }\n        case SoilSampleEdits.NextSampleDelete: {\n          (item.SoilSamplePlanning as ISoilSamplePlanning).PlannedSamplingdate = undefined;\n          (item.SoilSamplePlanning as ISoilSamplePlanning).UserId = this.loginStore.UserId;\n          break;\n        }\n        case SoilSampleEdits.OrgApplication: {\n          (item.SoilSamplePlanning as ISoilSamplePlanning).OrganicApplication =\n            ($event.value.id === SoilSamplePlanningOverviewActions.YES);\n          break;\n        }\n        case SoilSampleEdits.Description: {\n          (item.SoilSamplePlanning as ISoilSamplePlanning).Description = ($event.value as any);\n          break;\n        }\n        default:\n          return;\n      }\n\n      // In case no user has been assigned to that particular soilSamplePlanning\n      if ((item.SoilSamplePlanning as ISoilSamplePlanning).UserId == null) {\n        (item.SoilSamplePlanning as ISoilSamplePlanning).UserId = this.loginStore.UserId;\n      }\n\n      // Generate GUID for new soilSamplePlanning\n      if ((item.SoilSamplePlanning as ISoilSamplePlanning).Id == null) {\n        (item.SoilSamplePlanning as ISoilSamplePlanning).Id = ApGuidUtil.generateNewGuid();\n      }\n      modifiedPlannings.push((item.SoilSamplePlanning as ISoilSamplePlanning));\n    }\n\n    this.soilSamplePlanningStore.saveSoilSamplePlannings(modifiedPlannings);\n  }\n\n  /**\n   * When shape-export finished on backend this method is triggered\n   * to download the zip archive\n   */\n  private downloadShapeExportZipped(zipContent: ArrayBuffer): void {\n    saveAs(new Blob([new Uint8Array(zipContent)], {type: 'application/zip'}),\n      this.getExportFilename() + '.zip');\n  }\n\n  /**\n   * exports selected fields/plannings as shape\n   */\n  private exportShape(): void {\n    const selectedGridItems = this.dynComponent.getSelectedItems() as ISspFieldJoinGridData[];\n    if (!selectedGridItems || selectedGridItems.length === 0) {\n      return;\n    }\n    const exportItems: ISoilSamplePlanningExportData[] = selectedGridItems.map(d => {\n      const campaignYear = this.campaignYearStore.SelectedCampaignYear.Year;\n      return {\n        FieldId: d.SourceItem.Field?.Id,\n        LastSampleDate: d.LastSamplingDate,\n        CropTypeNameMinus1: d?.Crop?.hasOwnProperty(campaignYear - 1) ? d.Crop[campaignYear - 1]?.MainCropName : '',\n        CropTypeName: d?.Crop?.hasOwnProperty(campaignYear) ? d.Crop[campaignYear]?.MainCropName : '',\n        CropTypeNamePlus1: d?.Crop?.hasOwnProperty(campaignYear + 1) ? d.Crop[campaignYear + 1]?.MainCropName : '',\n        CropTypeNamePlus2: d?.Crop?.hasOwnProperty(campaignYear + 2) ? d.Crop[campaignYear + 2]?.MainCropName : ''\n      };\n    });\n    this.soilSamplePlanningStore.exportShape(\n      exportItems,\n      this.campaignYearStore.getSelectedCampaignYear().DefaultStart,\n      this.getExportFilename(),\n      this.languageStore?.SelectedLanguage?.Key);\n  }\n\n  private exportAsPdf(): void {\n    // const now = this._moment().format(this.languageStore.CurrentDateTimeFormat);\n    // const name = this.translationService.translate('Base_Pages__SampleFields');\n    this.exportFileName = this.getExportFilename();\n    this.dynComponent.dynGrid.exportAsPdf();\n  }\n\n  private exportAsXls(): void {\n    const contentRows: IContentRow[] = [];\n    const rows = this.dynComponent.getSelectedItems();\n    rows.forEach(row => {\n      const a = row as any;\n      if (a) {\n        const defaultFieldGeom = a.SourceItem?.Field?.FieldGeoms?.length > 0\n          ? a.SourceItem.Field.FieldGeoms[0]\n          : null;\n        const campaignYear = this.campaignYearStore.SelectedCampaignYear.Year;\n        contentRows.push({\n          FieldNumber: isNaN(parseFloat(a.SourceItem.Field.FieldNumber)) ? 0 : parseFloat(a.SourceItem.Field.FieldNumber),\n          FieldSubNumber: isNaN(parseFloat(a.SourceItem.Field.FieldSubnumber)) ? 0 : parseFloat(a.SourceItem.Field.FieldSubnumber),\n          FieldName: a.SourceItem.Field.FieldName,\n          FieldArea: this.roundNumericService.roundAsNumber(a.Area, this._settings.DigitsAfterDecimalPoint),\n          CropTypeMinus1: a?.Crop?.hasOwnProperty(campaignYear - 1) ? a?.Crop[campaignYear - 1]?.MainCropName : '',\n          CropType: a?.Crop?.hasOwnProperty(campaignYear) ? a.Crop[campaignYear]?.MainCropName : '',\n          CropTypePlus1: a?.Crop?.hasOwnProperty(campaignYear + 1) ? a.Crop[campaignYear + 1]?.MainCropName : '',\n          CropTypePlus2: a?.Crop?.hasOwnProperty(campaignYear + 2) ? a.Crop[campaignYear + 2]?.MainCropName : '',\n          LastSampleDate: a.LastSamplingDate ?\n            this.dateService.dateToMoment(a.LastSamplingDate).format(this.languageStore.CurrentDateFormat)\n            : '',\n          NextSampleDate: a.PlannedSamplingDate ?\n            this.dateService.dateToMoment(a.PlannedSamplingDate).format(this.languageStore.CurrentDateFormat)\n            : '',\n          OrganicApplication: a.OrganicApplication,\n          Description: a.SourceItem.SoilSamplePlanning.Description,\n          Status: defaultFieldGeom && defaultFieldGeom?.IsValidGeometry\n            ? this.translationService.translate('Global__Ok')\n            : this.translationService.translate('Global__No_Geometry_For_Harvest_Year')\n        });\n      }\n    });\n\n    const columns = this._getReportColumnNames();\n    const reportData: IReportData = {\n      Content: {\n        HeaderLabels: [\n          columns.get('FieldNumber'),\n          columns.get('FieldSubNumber'),\n          columns.get('FieldName'),\n          columns.get('FieldArea'),\n          columns.get('CropTypeMinus1'),\n          columns.get('CropType'),\n          columns.get('CropTypePlus1'),\n          columns.get('CropTypePlus2'),\n          columns.get('LastSampleDate'),\n          columns.get('NextSampleDate'),\n          columns.get('OrganicApplication'),\n          columns.get('Description'),\n          columns.get('Status')\n        ],\n        Rows: contentRows,\n      },\n      Header: {\n        FieldNumber: columns.get('FieldNumber'),\n        FieldSubNumber: columns.get('FieldSubNumber'),\n        FieldName: columns.get('FieldName'),\n        FieldArea: columns.get('FieldArea'),\n        CropTypeMinus1: columns.get('CropTypeMinus1'),\n        CropType: columns.get('CropType'),\n        CropTypePlus1: columns.get('CropTypePlus1'),\n        CropTypePlus2: columns.get('CropTypePlus2'),\n        LastSampleDate: columns.get('LastSampleDate'),\n        NextSampleDate: columns.get('NextSampleDate'),\n        OrganicApplication: columns.get('OrganicApplication'),\n        Description: columns.get('Description'),\n        Status: columns.get('Status')\n      }\n    };\n    const bookName = this.getExportFilename();\n    this.soilSamplePlanningReportStore.downloadSoilSamplePlanningReport(bookName, `${bookName}.xlsx`, reportData);\n  }\n\n  public selectionChange(): void {\n    if (this.mapViewStore.getMapViewMode() !== MapViewMode.HIDE && this.mapViewStore.getMapViewCurrentMenu() === MapViewCurrentMenu.MAP) {\n      const selectedItems = this.dynComponent.getSelectedItems() as ISspFieldJoinGridData[];\n      this.fieldStore.changeSelectedField(selectedItems.Convert((e: any) => e.Id));\n    }\n    this.generateStats();\n  }\n\n  private _getReportColumnNames(): Map<string, string> {\n    const columnNames = new Map<string, string>();\n    const selectedCampaignYear = this.campaignYearStore.SelectedCampaignYear.Year;\n    columnNames.set('FieldNumber', this.translationService.translate('Docu_Ini__Number'));\n    columnNames.set('FieldSubNumber', this.translationService.translate('Docu_Ini_Subnumber'));\n    columnNames.set('FieldName', this.translationService.translate('Global__FieldName'));\n    columnNames.set('FieldArea', this.translationService.translate('Global__Area_Unit'));\n    columnNames.set('CropTypeMinus1', this.translationService.translate('Global__CropType') + ` (${selectedCampaignYear - 1})`);\n    columnNames.set('CropType', this.translationService.translate('Global__CropType') + ` (${selectedCampaignYear})`);\n    columnNames.set('CropTypePlus1', this.translationService.translate('Global__CropType') + ` (${selectedCampaignYear + 1})`);\n    columnNames.set('CropTypePlus2', this.translationService.translate('Global__CropType') + ` (${selectedCampaignYear + 2})`);\n    columnNames.set('LastSampleDate', this.translationService.translate('Nutrients_Ips_Pages__LastBu'));\n    columnNames.set('NextSampleDate', this.translationService.translate('Nutrients_Ips_Pages__NextSample'));\n    columnNames.set('OrganicApplication', this.translationService.translate('Nutrients_Ips_Pages__OrganicSample'));\n    columnNames.set('Description', this.translationService.translate('Nutrients_Ips_Pages__Note'));\n    columnNames.set('Status', this.translationService.translate('Global__Status'));\n    return columnNames;\n  }\n\n  /**\n   * Generates the statistic diagrams for last sampling-dates and planned sampling dates\n   * @private\n   */\n  private generateStats(): void {\n    const emptyMessage = `${this.translationService.translate('Nutrients__StatisticsTitle')}\\n${this.translationService.translate('Base__OrderPlanning')}`;\n    let items = this.dynComponent.getSelectedItems() as ISspFieldJoinGridData[];\n    if (!items || items?.length === 0) {\n      items = this.dynComponent.items as ISspFieldJoinGridData[];\n    }\n    if (items?.length === 0) {\n      this.statisticStore.setStatisticData<IChartSet<IBarLineAreaChartData>>(\n        [], ApStatsType.GenericBars, '', emptyMessage\n      );\n      return;\n    }\n    const allItemsSelected = items.length === this.dynComponent.items?.length;\n    const chartSets: IChartSet<IBarLineAreaChartData>[] = [];\n    // generate each diagram/chart\n    chartSets.Add(this.generateLastSamplingStat(items, allItemsSelected));\n    chartSets.Add(this.generatePlannedSamplingStat(items, allItemsSelected));\n\n    // calculate min/max of both charts\n    for (const chartSet of chartSets) {\n      chartSet.axes.minX = 0;\n      chartSet.axes.maxX = Math.max(...chartSet.data.data.map(_ => _.value)) * 1.2;\n    }\n    const title = this._getTitleForStatistic(items);\n    this.statisticStore.setStatisticData<IChartSet<IBarLineAreaChartData>>(\n      chartSets, ApStatsType.GenericBars, title, emptyMessage\n    );\n  }\n\n  private _getTitleForStatistic(selectedItems: ISspFieldJoinGridData[]): string {\n    const totalItems = this.dynComponent.items as ISspFieldJoinGridData[];\n    const dataForTitles = totalItems.map(x => ({\n      AreaHa: x.Area,\n      Selected: selectedItems.some(z => z.Id === x.Id)\n    }));\n    return this.statisticService.generateFieldsAreaTitle(dataForTitles);\n  }\n\n  /**\n   * Generates bar chart configuration for last sampling date per year\n   * @param items the selected items\n   * @param allItemsSelected indicates if user selected all(or none) items in grid\n   * @private\n   */\n  private generateLastSamplingStat(items: ISspFieldJoinGridData[], allItemsSelected: boolean): IChartSet<IBarLineAreaChartData> {\n    const chartLastSampling: IChartSet<IBarLineAreaChartData> = {\n      axes: {titleX: 'Global__Area'},\n      data: {\n        data: [], categories: [],\n        title: `${this.translationService.translate('Global__Area')} / ${this.translationService.translate('Nutrients_Ips_Pages__LastBu')}`\n      },\n      noteField: 'note'\n    } as IChartSet<IBarLineAreaChartData>;\n    // sort items asc by last sampling date:\n    items = items.sort((a, b) => ApSoilSamplePlanningOverviewComponent.compareDates(a.LastSamplingDate, b.LastSamplingDate));\n    for (const soilSampleItem of items) {\n      // build categories by sampling year\n      const buYear = `${soilSampleItem.LastSamplingDate?.getFullYear() ?? '-'}`;\n      const barData = chartLastSampling.data?.data.Find(_ => _.category === buYear);\n      if (!barData) {\n        chartLastSampling.data.data.Add({\n          category: buYear,\n          value: soilSampleItem.Area,\n          color: ApSoilSamplePlanningOverviewComponent.getStatBarColor(soilSampleItem, soilSampleItem.LastSamplingDate),\n        } as IBarLineAreaChartDataValue);\n        chartLastSampling.data.categories.AddIfNotExists(buYear);\n      } else {\n        barData.value = barData.value + soilSampleItem.Area;\n      }\n    }\n    // calculate chart note texts\n    // this needs to be done as part of the post-processing\n    // when rounding the note's value it might lead to inconsistent results\n    // e.g. instead of 100% the sum of all % values might be 101% or 99%\n    // Here we adjust the values, so it matches the expectations\n    this.calculateNoteTexts(chartLastSampling, allItemsSelected);\n    return chartLastSampling;\n  }\n\n  /**\n   * Generates bar chart configuration for planned sampling date per month and year\n   * @param selectedItems the selected items\n   * @param allItemsSelected indicates if user selected all(or none) items in grid\n   * @private\n   */\n  private generatePlannedSamplingStat(selectedItems: ISspFieldJoinGridData[], allItemsSelected: boolean): IChartSet<IBarLineAreaChartData> {\n    // Build chart for planned samplings by date\n    const chartPlannedSampling: IChartSet<IBarLineAreaChartData> = {\n      axes: {titleX: 'Global__Area'},\n      data: {\n        data: [], categories: [],\n        title: `${this.translationService.translate('Global__Area')} / ${this.translationService.translate('Nutrients_Ips_Pages__NextSample')}`\n      },\n      noteField: 'note'\n    } as IChartSet<IBarLineAreaChartData>;\n    // sort items by planned sampling date asc\n    selectedItems = selectedItems.sort((a, b) => ApSoilSamplePlanningOverviewComponent.compareDates(a.PlannedSamplingDate, b.PlannedSamplingDate));\n    for (const soilSampleItem of selectedItems) {\n      // build categories by planned sampling month + year\n      // in case of samplings with different status for one planned sampling date\n      // a second bar will be displayed with the corresponding color\n      const plannedMonthYear = `${soilSampleItem.PlannedSamplingDate ? moment(soilSampleItem.PlannedSamplingDate).format('MM/YYYY') : '-'}`;\n      const barColor = '#2c3237';\n      const barData = chartPlannedSampling.data?.data.Find(_ => _.category === plannedMonthYear && _.color === barColor);\n      if (!barData) {\n        chartPlannedSampling.data.data.Add({\n          category: plannedMonthYear,\n          value: soilSampleItem.Area,\n          color: barColor,\n        } as IBarLineAreaChartDataValue);\n        chartPlannedSampling.data.categories.AddIfNotExists(plannedMonthYear);\n      } else {\n        barData.value = barData.value + soilSampleItem.Area;\n      }\n    }\n    // calculate chart note texts\n    // this needs to be done as part of the post-processing\n    // when rounding the note's value it might lead to inconsistent results\n    // e.g. instead of 100% the sum of all % values might be 101% or 99%\n    // Here we adjust the values, so it matches the expectations\n    this.calculateNoteTexts(chartPlannedSampling, allItemsSelected);\n    return chartPlannedSampling;\n  }\n\n  /**\n   * Generates the bar chart note shown on top of each bar\n   * @param chart the generated chart set\n   * @param allItemsSelected indicates if user selected all(or none) items in grid => only then an adjustment of percentages is need.\n   * @private\n   */\n  private calculateNoteTexts(chart: IChartSet<IBarLineAreaChartData>, allItemsSelected: boolean): void {\n    if (chart?.data?.data?.length <= 0) {\n      return;\n    }\n\n    let percentSum = 0;\n    let areaSum = 0;\n    let biggestValueIdx = 0;\n    let biggestArea = 0;\n    // we are going to adjust the element with the biggest value\n    for (let i = 0; i < chart.data.data.length; i++) {\n      const area = this.roundNumericService.roundAsNumber(chart.data.data[i].value, 0);\n      const percent = this.roundNumericService.roundAsNumber(area / this._areaTotal * 100, 0);\n      if (area > biggestArea) {\n        biggestArea = area;\n        biggestValueIdx = i;\n      }\n      percentSum += percent;\n      areaSum += area;\n      chart.data.data[i].note = this.createNote(percent, area);\n    }\n\n    // the adjustment of % only makes sense if all items in the grid are selected.\n    // otherwise the percentage will be raised to 100% even if only 1 row is selected in grid\n    if (!allItemsSelected) {\n      return;\n    }\n    // Adjust the biggest value that total sum matches 100% and the selected area\n    chart.data.data[biggestValueIdx].note = this.createNote(\n      this.roundNumericService.roundAsNumber(biggestArea / this._areaTotal * 100, 0) + 100 - percentSum,\n      biggestArea);\n  }\n\n  /**\n   * Creates the actual note text containing percentage and area values\n   * @param percentage the percentage value of the bar\n   * @param area the area value of the bar\n   * @private\n   */\n  private createNote(percentage: number, area: number): string {\n    return `${(area < 1 ? '<1' : area)} ${this.translationService.translate('Global__Area')}\\n` +\n      `(${(percentage < 1 ? '<1' : percentage)} %)`;\n  }\n}\n","import {ApDynGridPagerConfig, IDynGridWizardChoiceData} from '../../../ap-dyngrids/config/ap-dyn-grid-pager-config';\nimport {ApGridPagerType}                                from '../../../ap-interface';\nimport {Icon}                                           from '../../../ap-interface/enums/layout/icon.enum';\nimport {EventEmitter}                                   from '@angular/core';\n\nexport class PagerBuilder {\n  static NutrientManagementPager(options: { text: string, callback: EventEmitter<any> }[], icons: {\n    icon: Icon,\n    callback: EventEmitter<any>,\n    tooltip: string\n  }[]): ApDynGridPagerConfig {\n    return new ApDynGridPagerConfig({\n      preselect: false,\n      listMassEditing: options.map((option, index) =>\n        ({\n          id: index,\n          name: option.text,\n          type: ApGridPagerType.None,\n          onSubmit: option.callback,\n        } as IDynGridWizardChoiceData)),\n      iconButtons: icons.map((icon) =>\n        ({\n          icon: icon.icon,\n          callback: icon.callback,\n          tooltip: icon.tooltip\n        }),\n      )\n    });\n  }\n}\n","import {AfterContentInit, Component, EventEmitter, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {\n  ApDynComponentComponent\n}                                                                                from '../../ap-dyncomponent/ap-dyncomponent.component';\nimport {\n  ApDynGridColumnConfigBase,\n  ApDynGridColumnHideConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-column-config-base';\nimport {\n  ApDynGridEditColumnConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-edit-column-config';\nimport {\n  ApDynGridPropertyColumnConfig,\n  FilterType\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-property-column-config';\nimport {\n  ApDynGridGroupColumnConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-group-column-config';\nimport {\n  BehaviorSubject,\n  combineLatest,\n  Observable,\n  Subscription\n}                                                                                from 'rxjs';\nimport {\n  debounceTime,\n  delay,\n  filter,\n  map,\n  skip\n}                                                                                from 'rxjs/operators';\nimport {\n  CampaignYearStore\n}                                                                                from '../../stores/login/campaignyear.store';\nimport {\n  SettingsStore\n}                                                                                from '../../stores/base-data/settings.store';\nimport {\n  ApDynGridStatusColumnConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-status-column-config';\nimport {\n  LanguageStore\n}                                                                                from '../../stores/translation/language.store';\nimport {\n  ApDynGridDetailsGridConfig\n}                                                                                from '../../ap-dyngrids/config/details/ap-dyn-grid-details-grid-config';\nimport {\n  MapViewStore\n}                                                                                from '../../stores/layout/mapview.store';\nimport {\n  ApElementOxydTypeEnum,\n  ApStatsType,\n  MapViewCurrentMenu,\n  MapViewMode\n}                                                                                from '../../ap-interface';\nimport {\n  ApNutrientPlanningComponent\n}                                                                                from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning.component';\nimport {\n  FormStore\n}                                                                                from '../../stores/layout/form.store';\nimport {\n  ApDynGridPagerConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-pager-config';\nimport {\n  FieldStore\n}                                                                                from '../../stores/farm/field.store';\nimport {\n  SoilSampleDateStore\n}                                                                                from '../../stores/nutrients/soilsampledate.store';\nimport {\n  CropRotationStore,\n  CropRotationYield\n}                                                                                from '../../stores/farm/crop.rotation.store';\nimport {\n  ApTranslationService\n}                                                                                from '../../ap-utils/service/ap-translation.service';\nimport {\n  GetRoundNumericPipe\n}                                                                                from '../../ap-utils';\nimport {\n  JobsStore\n}                                                                                from '../../stores/administration/jobs.store';\nimport {\n  GetPermissionPipe\n}                                                                                from '../../ap-permission/pipes/get-permission.pipe';\nimport {\n  LoginStore\n}                                                                                from '../../stores/login/login.store';\nimport {\n  RbStore\n}                                                                                from '../../stores/nutrients/rb.store';\nimport {\n  BasicFertilisationSummariesStore\n}                                                                                from '../../stores/taskmanagement/basic.fertilisation.summaries.store';\nimport {\n  FertilizerStore\n}                                                                                from '../../stores/base-data/fertilizer.store';\nimport {\n  ApNutrientStatisticService\n}                                                                                from '../service/ap-nutrient-statistic.service';\nimport {\n  ModalDialogStore\n}                                                                                from '../../stores/dialog/modal.dialog.store';\nimport {\n  IModalDialogData\n}                                                                                from '../../ap-interface/interfaces/ap-modaldialog-data.interface';\nimport {\n  ApDynformsConfigFieldset\n}                                                                                from '../../ap-dynforms/config/ap-dynforms-config-fieldset';\nimport {\n  ApDynformsConfigTextarea\n}                                                                                from '../../ap-dynforms/config/ap-dynforms-config-textarea';\nimport {\n  ApDateService\n}                                                                                from '../../ap-core/services/ap-date-service';\nimport {\n  PagerBuilder\n}                                                                                from './configs/pager-builder';\nimport {\n  ApUtilService\n}                                                                                from '../../ap-utils/service/ap-util.service';\nimport {\n  Icon\n}                                                                                from '../../ap-interface/enums/layout/icon.enum';\nimport {\n  GetElementService\n}                                                                                from '../../ap-utils/service/ap-get-element.service';\nimport {\n  ApPermissions\n}                                                                                from 'invoker-transport';\nimport {\n  StatisticStore\n}                                                                                from '../../stores/statistic/statistic.store';\nimport {\n  TranslationStore\n}                                                                                from '../../stores/translation/translation.store';\nimport {\n  APP_CONFIGURATION\n}                                                                                from '../../ap-core/config';\nimport {\n  ApOperationMode\n}                                                                                from '../../ap-interface/enums/ap-operation-mode.enum';\nimport {\n  NutrientStore\n}                                                                                from '../../stores/nutrients/nutrient.store';\nimport {\n  ApElementType\n}                                                                                from '../../ap-interface/enums/ap-elements-type.enum';\nimport {\n  ApNutrientService\n}                                                                                from '../../ap-utils/service/ap-nutrient.service';\nimport {\n  ApRoleTypeService\n}                                                                                from '../../services/common/ap-role-type.service';\nimport {\n  FertilizerService\n}                                                                                from '../../services/data/fertilizer.service';\nimport {\n  ApTooltipContentService\n}                                                                                from '../../ap-utils/service/ap-tooltip-content.service';\nimport {\n  BaseFertilizationService\n}                                                                                from '../../services/data/base-fertilization.service';\nimport {\n  BaseFertilizationCommonService\n}                                                                                from '../service/base-fertilization-common.service';\nimport {\n  INutrientOverviewApplGridData,\n  INutrientOverviewGridData,\n  INutrientOverviewRemainGridData,\n  LimitsType\n}                                                                                from '../types/base-fertilization-overview.types';\nimport {\n  PlanningEntryComponentDataType\n}                                                                                from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning-configs/nutrient-planning-types';\nimport {\n  StatisticService\n}                                                                                from '../../services/data/statistic.service';\nimport {\n  FieldNutrientDistributionStore\n}                                                                                from '../../stores/nutrients/field-nutrient-distributions.store';\nimport {\n  CropTypeStore\n}                                                                                from '../../stores/base-data/crop.types.store';\nimport {\n  GetRoundNumericService\n}                                                                                from '../../ap-utils/service/get-round-numeric.service';\nimport {\n  MapStore\n}                                                                                from '../../stores/map/map.store';\nimport {\n  GetRoundNumericPipeConfig\n}                                                                                from '../../ap-utils/pipes/configs/get-round-numeric.pipe.config';\nimport IGuid = System.IGuid;\nimport IField = Data.FieldManagement.IField;\nimport ICampaignYear = Data.Authentication.ICampaignYear;\nimport IBasicFertilisationSummaries = Data.TaskManagement.IBasicFertilisationSummaries;\n\n@Component({\n  selector: 'ap-nutrient-management-overview',\n  template: `\n    <ap-dyncomponent [caption]=\"'Admin_Pages__Overview'\"\n                     [canSearch]=\"true\"\n                     [headerIcon]=\"'ap-icon-base-fertilization'\"\n                     [loading$]=\"loading$\"\n                     [columns]=\"columns$ | async\"\n                     [items]=\"items$ | async\"\n                     [details]=\"details$ | async\"\n                     [pager]=\"pager\"\n                     [canCreate]=\"isCreateNewAllowed()\"\n                     (create)=\"onCreate()\">\n    </ap-dyncomponent>\n  `,\n  styles: []\n})\nexport class ApNutrientManagementOverviewComponent implements OnInit, AfterContentInit, OnDestroy {\n  @ViewChild(ApDynComponentComponent, {static: true}) dynComponent: ApDynComponentComponent;\n  public columns$: Observable<ApDynGridColumnConfigBase[]>;\n  public details$: Observable<ApDynGridDetailsGridConfig>;\n  public loading$: Observable<boolean>;\n  public items$: Observable<INutrientOverviewGridData[]>;\n  public pager: ApDynGridPagerConfig;\n  public ApPermissions = ApPermissions;\n\n  private _cropRotationLimits$: BehaviorSubject<LimitsType>;\n  private _year$ = new BehaviorSubject<number>(undefined);\n  private _previousYear = new EventEmitter<void>();\n  private _nextYear = new EventEmitter<void>();\n  private _onCheckFieldEvent = new EventEmitter<any>();\n  private _onNavigateToReportEvent = new EventEmitter<any>();\n  private _subscriptions: Subscription[] = [];\n  private _defaultRemain: INutrientOverviewRemainGridData;\n  private _isOnCreatePressed = false;\n  private _statusCss = [\n    'ap-status-red',\n    'ap-status-yellow',\n    'ap-status-green',\n    'ap-status-grey',\n  ];\n\n  constructor(private campaignYearStore: CampaignYearStore,\n              private cropRotationStore: CropRotationStore,\n              private cropTypeStore: CropTypeStore,\n              private fieldStore: FieldStore,\n              private formStore: FormStore,\n              private languageStore: LanguageStore,\n              private mapViewStore: MapViewStore,\n              private roundNumericPipe: GetRoundNumericPipe,\n              private settingsStore: SettingsStore,\n              private soilSampleDateStore: SoilSampleDateStore,\n              private translationService: ApTranslationService,\n              private jobsStore: JobsStore,\n              private permissionPipe: GetPermissionPipe,\n              private loginStore: LoginStore,\n              private rbStore: RbStore,\n              private fieldNutrientDistributionStore: FieldNutrientDistributionStore,\n              private basicFertilisationSummariesStore: BasicFertilisationSummariesStore,\n              private fertilizerStore: FertilizerStore,\n              private nutrientStatisticService: ApNutrientStatisticService,\n              private statisticService: StatisticService,\n              private modalDialogStore: ModalDialogStore,\n              private dateService: ApDateService,\n              private mapStore: MapStore,\n              private elementService: GetElementService,\n              private statisticStore: StatisticStore,\n              private translationStore: TranslationStore,\n              private nutrientStore: NutrientStore,\n              private nutrientService: ApNutrientService,\n              private fertilizerService: FertilizerService,\n              private roundNumericService: GetRoundNumericService,\n              private baseFertilizationService: BaseFertilizationService,\n              private tooltipContentService: ApTooltipContentService,\n              private baseFertilizationCommonService: BaseFertilizationCommonService) {\n  }\n\n  public ngOnInit(): void {\n    this.fieldStore.changeSelectedField([]);\n    this.statisticStore.removeStatisticData();\n    const campaignYear = this.campaignYearStore.getSelectedCampaignYear();\n    this._defaultRemain = {P: null, K: null, Mg: null, CaO: null, N: null};\n    this._cropRotationLimits$ = new BehaviorSubject<LimitsType>({\n      Min: campaignYear.Year,\n      Max: campaignYear.Year\n    });\n    this._year$.next(campaignYear.Year);\n    this.loading$ = combineLatest([\n      this.fieldStore.Listen(s => s.loading),\n      this.soilSampleDateStore.Listen(s => s.loading),\n      this.cropRotationStore.Listen(s => s.historyLoading),\n      this.basicFertilisationSummariesStore.Listen(s => s.loading),\n      this.rbStore.Listen(s => s.loading)\n    ]).pipe(\n      map(([f, s, cr, bfs, rb]) => f || s || cr || bfs || rb)\n    );\n    this.items$ = this._getItems();\n    this.pager = this._getPager();\n    this.columns$ = this._getBaseGrid();\n    this.details$ = this._getDetailsGrid();\n  }\n\n  public ngAfterContentInit(): void {\n    this._subscriptions.push(this.dynComponent.SelectedItems$.pipe(\n      debounceTime(100),\n      delay(1)\n    ).subscribe(d => this._selectionChange(d)));\n    this._subscriptions.push(this._onCheckFieldEvent.subscribe(e => {\n      this._onCheckField(e.Geom.Id);\n    }));\n    this._subscriptions.push(this._onNavigateToReportEvent.subscribe(e => this._onNavigateToReport({\n      fieldGeomId: e.Geom.Id,\n      year: this.campaignYearStore.SelectedCampaignYear.Year,\n    })));\n    this._subscriptions.push(\n      this.campaignYearStore.Listen(s => s.selectedYear).pipe(skip(1)).subscribe((y) => this._onSelectedYearChanged(y))\n    );\n    this._subscriptions.push(\n      this.rbStore.Listen(s => s.checkResult).subscribe(checkResult => this._handleRbStoreCheckResult(checkResult))\n    );\n    this._subscriptions.push(\n      this.fieldStore.Listen(s => s.data).subscribe(fields => this._handleFieldStoreData(fields))\n    );\n    this._subscriptions.push(\n      this._previousYear.subscribe(() => this._year$.next(this._year$.value - 1))\n    );\n    this._subscriptions.push(\n      this._nextYear.subscribe(() => this._year$.next(this._year$.value + 1))\n    );\n    this._subscriptions.push(\n      this.mapViewStore.Listen(s => s.currentMenu).subscribe(mapMenu => this._onMapMenuChanged(mapMenu))\n    );\n    this._subscriptions.push(\n      combineLatest([\n        this.cropRotationStore.Listen(s => s.history).pipe(\n          map((history) => Object.values(history)),\n          filter((crops) => crops.length !== 0),\n          map((crops) => crops.map((crop) => Object.keys(crop).filter((key) => crop[key] !== null).map((key) => +key))),\n          map((years) => years.reduce((a, b) => a.concat(b)))),\n        this.campaignYearStore.Listen(s => s.selectedYear)\n      ]).pipe(\n        map(([dates, campaignYear]): LimitsType => ({\n          Min: Math.min(...dates, campaignYear.Year),\n          Max: Math.max(...dates, campaignYear.Year)\n        }))).subscribe(l => this._cropRotationLimits$.next(l))\n    );\n    this._subscriptions.push(this.formStore.FormClose$.subscribe(() => {\n      // trigger refresh of selection and map after entryComponent (e.g. 'NEW') closed\n      if (this._isOnCreatePressed) {\n        this._isOnCreatePressed = false;\n        this._handleLegendsAndLayers();\n      }\n    }));\n    this._subscriptions.push(this.mapStore.Layers.OnLayerChange.subscribe(() => {\n      this._handleLegendsAndLayers();\n    }));\n    this._handleLegendsAndLayers();\n  }\n\n  public ngOnDestroy(): void {\n    this.baseFertilizationCommonService.revertLegends();\n    this._subscriptions.forEach(s => s?.unsubscribe());\n    this.statisticStore.removeStatisticData();\n    this.fieldStore.changeSelectedField([]);\n  }\n\n  public onCreate(): void {\n    this.statisticStore.removeStatisticData();\n    this.formStore.openForm({\n      component: ApNutrientPlanningComponent,\n      data: {\n        Summary: null,\n        Type: PlanningEntryComponentDataType.Create\n      }\n    });\n    this._isOnCreatePressed = true;\n  }\n\n  public isCreateNewAllowed(): boolean {\n    return ApRoleTypeService.hasDeveloperRole(this.loginStore.User);\n  }\n\n  private _getItems(): Observable<INutrientOverviewGridData[]> {\n    return combineLatest([\n      this.fieldStore.Listen(s => s.data),\n      this.soilSampleDateStore.Listen(s => s.dates),\n      this.fieldNutrientDistributionStore.SampleRegions$,\n      this.cropRotationStore.Listen(s => s.history),\n      this.rbStore.Listen(s => s.rb),\n      this.basicFertilisationSummariesStore.Summaries$,\n      this.jobsStore.BlockedFieldIdsBuWsvCeIrRbFieldRaster$,\n      this.cropRotationStore.Listen(s => s.cropRotationAttributes),\n      this.loading$\n    ]).pipe(\n      filter(([fields, , , cropRotation, rb, , _, _1, loading]) =>\n        fields.length !== 0 && Object.keys(cropRotation).length !== 0 && !!rb && !loading),\n      map(([fields, soilSampleDates, sampleRegions, cropRotation, rb, bFS, jobFieldGeomIds, cropRotationAttributes]) => fields.map<INutrientOverviewGridData>((field) => {\n        const geom = this.fieldStore.getCurrentFieldGeom(field);\n        const cropRotationAttribute = cropRotationAttributes.find(x => x?.FieldGeomId === geom?.Id);\n        const area = geom != null && geom.AdminArea > 0 ? geom.AdminArea / 10000 : '-';\n        const rbResult = rb.FirstOrDefault(x => x.FieldGeomId === geom?.Id);\n        const hasRbRaster = cropRotationAttribute && cropRotationAttribute.HasRbRaster;\n        const apps = bFS.filter(_ => !(hasRbRaster && (!rbResult?.PlanIds || rbResult.PlanIds.length <= 0)))\n          .filter(summary => summary.BasicFertilisationPlanBooks.Find(x =>\n            (rbResult?.PlanIds != null && rbResult.PlanIds.length > 0)\n              ? rbResult.PlanIds.includes(x.Id)\n              : x.FieldId === field?.Id))\n          .map(summary => summary);\n        const sampleDateObject = Object.keys(soilSampleDates).length > 0 ? soilSampleDates[field.Id as string] : undefined;\n        const status = this.nutrientService.getGDStatusByCrAttribute(sampleDateObject, sampleRegions, cropRotationAttribute);\n        let applications: INutrientOverviewApplGridData[] = [];\n        if (!!apps || apps !== null) {\n          applications = [];\n          apps.forEach((summary: IBasicFertilisationSummaries) => {\n            const planBook = summary.BasicFertilisationPlanBooks.Find(\n              x => (rbResult?.PlanIds != null && rbResult.PlanIds.length > 0)\n                ? rbResult.PlanIds.includes(x.Id)\n                : x.FieldId === field?.Id);\n            const fertilizer = this.fertilizerStore.getFertilizer(planBook.Product_Id);\n            const unit = summary.User_Appl_Unit?.Id === 1\n              ? this.fertilizerService.getFertilizerUnit(fertilizer, true)\n              : this.translationService.translate(summary.User_Appl_Unit?.Key);\n            const isBooked = planBook?.BookedAt !== null;\n            applications.Add({\n              Id: planBook.Id,\n              Status: planBook.Status,\n              StatusClass: this.nutrientService.getFertilizerStatus(summary.User_Appl_Mode, isBooked)?.class,\n              StatusDesc: this.nutrientService.getFertilizerStatusDescription(summary.User_Appl_Mode, isBooked),\n              IsBooked: isBooked,\n              Product: this.fertilizerService.getFertilizerProductName(fertilizer),\n              ProductId: planBook.Product_Id,\n              ProductUnit: this.fertilizerService.getFertilizerUnit(fertilizer, false),\n              ProductTooltip: this.tooltipContentService.getProductContentInfoTooltip(planBook.Product_Id),\n              Amount: summary.User_Appl_Rate,\n              AmountUnit: unit,\n              AmountValue: summary.User_Appl_Rate,\n              LeadNutrient: planBook.Element?.Id as ApElementType,\n              OutputDate: new Date(planBook.ApplicationDate),\n              Nutrient: planBook.Operation_Mode?.Id === ApOperationMode.Const ? '-' : this.elementService.GetElementStringByIElement(planBook.Element),\n              Name: summary.Title,\n              PlanNumber: summary.PlanNumber,\n              CreatedAt: new Date(planBook.CreatedAt),\n              Remain2: {\n                P: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageNutrientFromStatistic(0, planBook.Statistic), ApElementOxydTypeEnum.P),\n                K: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageNutrientFromStatistic(1, planBook.Statistic), ApElementOxydTypeEnum.K),\n                Mg: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageNutrientFromStatistic(2, planBook.Statistic), ApElementOxydTypeEnum.Mg),\n                CaO: this.nutrientStatisticService.getAverageNutrientFromStatistic(3, planBook.Statistic),\n                N: this.baseFertilizationService.calculateNElementByLeadElement(planBook.Product_Id, planBook.Statistic)?.Average ?? ''\n              },\n              Field: field,\n              Area: (planBook.Area ?? 0) / 10000,\n              SourceItem: summary\n            });\n          });\n        }\n        return {\n          Id: field.Id,\n          Status: status[0],\n          StatusClass: this._statusCss[status[0] + 1],\n          StatusDesc: status[1],\n          Geom: geom,\n          Nr: field.FieldNumber,\n          TNr: field.FieldSubnumber,\n          NrTNr: this.fieldStore.getFieldNumberAndSubNumber(field),\n          Name: field.FieldName,\n          Area: area === '-' ? undefined : area,\n          AreaOriginal: area === '-' ? undefined : area.toString(10),\n          SampleDate: !!sampleDateObject?.Date ? this.dateService.getDateMidnight(sampleDateObject.Date) : undefined,\n          ColumnLoading: Object.keys(soilSampleDates).length > 0 && (rb.length === 0 || jobFieldGeomIds.Contains(field.Id.toString())),\n          Remain1: status[0] === 1 ? { /* Bei keinem definierten Fruchtfolgebedarf, darf auch kein RB angezeigt werden*/\n            P: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageRb(0, rbResult), ApElementOxydTypeEnum.P),\n            K: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageRb(1, rbResult), ApElementOxydTypeEnum.K),\n            Mg: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageRb(2, rbResult), ApElementOxydTypeEnum.Mg),\n            CaO: this.nutrientStatisticService.getAverageRb(3, rbResult),\n            N: 0\n          } : this._defaultRemain,\n          Remain2: status[0] === 1 ? {\n            P: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageRb(4, rbResult), ApElementOxydTypeEnum.P),\n            K: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageRb(5, rbResult), ApElementOxydTypeEnum.K),\n            Mg: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageRb(6, rbResult), ApElementOxydTypeEnum.Mg),\n            CaO: this.nutrientStatisticService.getAverageRb(7, rbResult),\n            N: 0\n          } : this._defaultRemain,\n          Crop: cropRotation[field.Id as string],\n          CrNeeds: cropRotationAttribute?.CropRotationNeed,\n          Applications: applications,\n          SourceItem: field,\n        } as INutrientOverviewGridData;\n      }))\n    );\n  }\n\n  private _getPager(): ApDynGridPagerConfig {\n    const iconOptions = [\n      {\n        icon: Icon.PDF,\n        callback: ApUtilService.createEventEmitter(this._onPdf.bind(this), this._subscriptions),\n        tooltip: 'Global__Save_PDF'\n      },\n      {\n        icon: Icon.XLS,\n        callback: ApUtilService.createEventEmitter(this._onXls.bind(this), this._subscriptions),\n        tooltip: 'Global__Save_EXCEL'\n      }\n    ];\n    return PagerBuilder.NutrientManagementPager([], iconOptions);\n  }\n\n  private _getDetailsGrid(): Observable<ApDynGridDetailsGridConfig> {\n    const detailsGridPopupOptions = new ApDynGridEditColumnConfig({\n      data: [\n        {\n          text: 'Global__Show',\n          callback: ApUtilService.createEventEmitter(this._onShow.bind(this), this._subscriptions)\n        },\n        {\n          text: 'Global__Export',\n          callback: ApUtilService.createEventEmitter(this._onExport.bind(this), this._subscriptions)\n        },\n        {\n          text: 'Admin_Pages_Popups__Book',\n          callback: ApUtilService.createEventEmitter(this._onBooking.bind(this), this._subscriptions),\n          disabled: (dataItem: INutrientOverviewApplGridData) => dataItem.IsBooked\n        },\n        {\n          text: 'Global__Planing_Reset',\n          callback: ApUtilService.createEventEmitter(this._onUnbookBookedPlan.bind(this), this._subscriptions),\n          disabled: (dataItem: INutrientOverviewApplGridData) => !dataItem.IsBooked\n        },\n        {\n          text: 'Global__Delete',\n          callback: ApUtilService.createEventEmitter(this._onOneDelete.bind(this), this._subscriptions),\n          disabled: (dataItem: INutrientOverviewApplGridData) => dataItem.IsBooked\n        },\n      ]\n    });\n    if (ApRoleTypeService.hasAgriconRole(this.loginStore.User)) {\n      detailsGridPopupOptions.data.push({\n        text: 'Global__Download',\n        callback: ApUtilService.createEventEmitter(this._onDownloadPackage.bind(this), this._subscriptions)\n      });\n    }\n    return combineLatest([\n      this.languageStore.Listen(s => s.selectedLanguage),\n      this.settingsStore.Listen(s => s.data),\n    ]).pipe(\n      map(([language, settings]) => ({language, setting: settings[0]})),\n      filter((p) => !!p.language && !!p.setting),\n      map((p) =>\n        new ApDynGridDetailsGridConfig({\n          field: 'Applications',\n          checkboxDisabled: true,\n          hide: (dataItem) => dataItem.Applications.length === 0,\n          columns: [\n            new ApDynGridStatusColumnConfig({\n              field: 'Status',\n              class: 'StatusClass',\n              description: 'StatusDesc'\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: 'Global__Product',\n              field: 'Product',\n              cssClass: 'left',\n              width: 100,\n              tooltip: (dataItem) => dataItem['ProductTooltip'],\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: 'Nutrients__FertilizationDate',\n              field: 'OutputDate',\n              format: p.language.DateFormat,\n              tooltip: (dataItem) => `${this.translationStore.FindTranslationForSelectedLanguage('Global__Task')}\n                  ${this.translationStore.FindTranslationForSelectedLanguage('Docu_Ini__Number')}:\n                  ${dataItem?.PlanNumber}`,\n              width: 80\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: `${this.translationService.translate('Nutrients__Average_Amount_Goods')} / ${this.translationService.translate('Global__Remaining_Need_Two_Short')}`,\n              field: 'Amount',\n              hide: false,\n              width: 60,\n              cssClass: 'right',\n              filterType: FilterType.NUMBER,\n              pipes: [\n                {\n                  pipe: this.roundNumericPipe,\n                  args: [0]\n                }\n              ]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: '',\n              field: 'AmountUnit',\n              width: 40,\n              hide: false,\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: 'AgriConnect__Nutrient',\n              field: 'Nutrient',\n              hide: true,\n              width: 60\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.P),\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              field: 'Remain2.P',\n              width: 60,\n              pipes: [\n                {\n                  pipe: this.roundNumericPipe,\n                  args: [\n                    0,\n                  ]\n                }\n              ]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.K),\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              field: 'Remain2.K',\n              width: 60,\n              pipes: [\n                {\n                  pipe: this.roundNumericPipe,\n                  args: [\n                    0,\n                  ]\n                }\n              ]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.Mg),\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              field: 'Remain2.Mg',\n              width: 60,\n              pipes: [\n                {\n                  pipe: this.roundNumericPipe,\n                  args: [\n                    0,\n                  ]\n                }\n              ]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: 'Global__NutrientCaO',\n              field: 'Remain2.CaO',\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              width: 60,\n              pipes: [\n                {\n                  pipe: this.roundNumericPipe,\n                  args: [\n                    0,\n                  ]\n                }\n              ]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: 'Global__NutrientN',\n              field: 'Remain2.N',\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              width: 60,\n              hide: true,\n              pipes: [\n                {\n                  pipe: this.roundNumericPipe,\n                  args: [\n                    0,\n                  ]\n                }\n              ]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: 'Global__Note',\n              field: 'Name',\n              hide: true,\n              cssClass: 'left',\n              width: 100\n            }),\n            detailsGridPopupOptions\n          ]\n        }))\n    );\n  }\n\n  private _getBaseGrid(): Observable<ApDynGridColumnConfigBase[]> {\n    return combineLatest([\n      this._cropRotationLimits$,\n      this.languageStore.Listen(s => s.selectedLanguage),\n      this.settingsStore.Listen(s => s.data),\n      this.permissionPipe.transform(ApPermissions.EDIT_FIELDS),\n      this.loginStore.User$,\n    ]).pipe(\n      filter(([limits, language, settings, permission, user]) => !!limits && !!language && !!settings[0] && !!permission && !!user),\n      map(([limits, language, settings, permission, user]) => ({\n        limits,\n        language,\n        setting: settings[0],\n        permission,\n        user\n      })),\n      map((p) => [\n        new ApDynGridStatusColumnConfig({\n          field: 'Status',\n          class: 'StatusClass',\n          description: 'StatusDesc',\n          pending: this.jobsStore.BlockedFieldIdsBuWsvCeIrRbFieldRaster$,\n          pendingTooltip: this.jobsStore.BlockedFieldIdsBuWsvCeIrRbFieldRasterTooltip$,\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Docu_Ini__Number',\n          field: 'Nr',\n          width: 60,\n          hide: true,\n          headerFilterable: true,\n          filterType: FilterType.NUMBER,\n          cssClass: 'right',\n          filterable: true\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Docu_Ini_Subnumber',\n          field: 'TNr',\n          width: 60,\n          hide: true,\n          filterType: FilterType.NUMBER,\n          cssClass: 'right',\n          filterable: true\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Docu_Ini__Number',\n          field: 'NrTNr',\n          width: 75,\n          filterable: true,\n          headerFilterable: true,\n          hide: new ApDynGridColumnHideConfig({\n            mapHide: false,\n            selfHide: this.mapViewStore.Listen(s => s.mode).pipe(map((m) => m !== MapViewMode.NORMAL)),\n          })\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Docu_Ini__Name',\n          field: 'Name',\n          headerFilterable: true,\n          filterable: true,\n          width: 180,\n          cssClass: 'left',\n          sortIndex: 0,\n          sortDesc: false,\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Docu_Ini__Area',\n          field: 'Area',\n          hide: true,\n          headerFilterable: true,\n          tooltip: (dataItem) => dataItem['AreaOriginal'],\n          filterType: FilterType.NUMBER,\n          width: 60,\n          cssClass: 'right',\n          pipes: [{\n            pipe: this.roundNumericPipe,\n            args: [p.setting.DigitsAfterDecimalPoint]\n          }]\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Global__SampleDate_Short',\n          field: 'SampleDate',\n          format: p.language.DateFormat,\n          hide: true,\n          headerFilterable: true,\n          filterable: true,\n          filterType: FilterType.KENDO_DATE_RANGE,\n          width: 80\n        }),\n        new ApDynGridGroupColumnConfig({\n          title: 'Nutrients__Average_RemainingNeed_1_kg_ha',\n          groupColumns: [\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.P),\n              field: 'Remain1.P',\n              width: 60,\n              headerFilterable: true,\n              columnLoading: 'ColumnLoading',\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullToEmptyReplaceConfig]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.K),\n              field: 'Remain1.K',\n              width: 60,\n              headerFilterable: true,\n              columnLoading: 'ColumnLoading',\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullToEmptyReplaceConfig]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.Mg),\n              field: 'Remain1.Mg',\n              width: 60,\n              headerFilterable: true,\n              columnLoading: 'ColumnLoading',\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullToEmptyReplaceConfig]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: 'Nutrients__CaO',\n              field: 'Remain1.CaO',\n              width: 60,\n              headerFilterable: true,\n              columnLoading: 'ColumnLoading',\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullToEmptyReplaceConfig]\n              }]\n            })\n          ],\n          hide: true\n        }),\n        new ApDynGridGroupColumnConfig({\n          title: 'Nutrients__Average_RemainingNeed_2_kg_ha',\n          groupColumns: [\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.P),\n              field: 'Remain2.P',\n              width: 60,\n              headerFilterable: true,\n              columnLoading: 'ColumnLoading',\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullToEmptyReplaceConfig]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.K),\n              field: 'Remain2.K',\n              width: 60,\n              headerFilterable: true,\n              columnLoading: 'ColumnLoading',\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullToEmptyReplaceConfig]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.Mg),\n              field: 'Remain2.Mg',\n              width: 60,\n              headerFilterable: true,\n              columnLoading: 'ColumnLoading',\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullToEmptyReplaceConfig]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: 'Nutrients__CaO',\n              field: 'Remain2.CaO',\n              width: 60,\n              headerFilterable: true,\n              columnLoading: 'ColumnLoading',\n              cssClass: 'right', filterType: FilterType.NUMBER,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullToEmptyReplaceConfig]\n              }]\n            })\n          ],\n        }),\n        new ApDynGridGroupColumnConfig({\n          title: 'Global__Crop',\n          style: 'text-align:center',\n          width: 100,\n          headerButtons: {\n            nextClicked: this._nextYear,\n            nextDisabled: this._year$.pipe(map((y) => y >= p.limits.Max)),\n            previousClicked: this._previousYear,\n            previousDisabled: this._year$.pipe(map((y) => y <= p.limits.Min)),\n          },\n          groupColumns: this._getCropRotationConfigs(p.limits),\n          hide: new ApDynGridColumnHideConfig({\n            widthHidePriority: 1\n          })\n        }),\n        new ApDynGridEditColumnConfig({\n            data: (() => {\n              const options = [];\n              if (ApRoleTypeService.hasAgriconRole(p.user)) {\n                options.Add({\n                  text: 'Global__Check_Data',\n                  callback: this._onCheckFieldEvent,\n                });\n                options.Add({\n                  text: 'Fertilisation__Report',\n                  callback: this._onNavigateToReportEvent,\n                });\n              }\n              return options;\n            })(),\n            disabled: !p.permission,\n          }\n        )\n      ])\n    );\n  }\n\n  private _onShow(dataItem: INutrientOverviewApplGridData): void {\n    this.baseFertilizationCommonService.redirectSummaryToShowView(dataItem.SourceItem.Id, dataItem.IsBooked,\n      'nutrients/overview', dataItem.Field.Id);\n  }\n\n  private _onExport(dataItem: INutrientOverviewApplGridData): void {\n    this.baseFertilizationCommonService.redirectSummaryToExportView(dataItem.SourceItem.Id, dataItem.IsBooked,\n      'nutrients/overview', dataItem.Field.Id);\n  }\n\n  private _onBooking(dataItem: INutrientOverviewApplGridData): void {\n    this.baseFertilizationCommonService.bookPlanBooks(dataItem.SourceItem, dataItem.Field.Id);\n  }\n\n  private _onUnbookBookedPlan(dataItem: INutrientOverviewApplGridData): void {\n    this.baseFertilizationCommonService.unbookSummaryPlanBook(dataItem.SourceItem, dataItem.Id);\n  }\n\n  private _onOneDelete(dataItem: INutrientOverviewApplGridData): void {\n    this.baseFertilizationCommonService.deleteSummaryPlanBook(dataItem.SourceItem, dataItem.Id);\n  }\n\n  private _onDownloadPackage(dataItem: INutrientOverviewApplGridData): void {\n    this.nutrientStore.createNutrientPlanningPackage(dataItem.SourceItem.Id);\n  }\n\n  private _onMapMenuChanged(mapMenu: MapViewCurrentMenu): void {\n    if (mapMenu === MapViewCurrentMenu.STATS) {\n      this._generateStats();\n    }\n  }\n\n  private _onSelectedYearChanged(campaignYear: ICampaignYear): void {\n    if (campaignYear) {\n      this.basicFertilisationSummariesStore.loadBasicFertilisationSummaries();\n      this._year$.next(campaignYear.Year);\n    }\n  }\n\n  private _handleRbStoreCheckResult(checkResult: string): void {\n    if (checkResult == null || checkResult === '') {\n      return;\n    }\n    const data = {\n      buttons: [{\n        key: 'apply',\n        text: 'Global__Ok',\n        primary: true,\n      }],\n      busy: false,\n      show: true,\n      title: this.translationService.translate('Global__Result_Check'),\n      formConfig: {\n        width: 500,\n        fieldSets: [\n          new ApDynformsConfigFieldset({\n            key: 'result',\n            legend: 'Global_IO_Values',\n            columns: 1,\n            useMaxWidth: true,\n            config: [\n              new ApDynformsConfigTextarea({\n                key: 'Output',\n                label: 'Global_Output',\n                rows: 12,\n                value: JSON.stringify(checkResult, null, 2)\n              })\n            ]\n          })]\n      }\n    } as IModalDialogData;\n    this.modalDialogStore.setModalDialogData(data);\n  }\n\n  private _handleFieldStoreData(fields: IField[]): void {\n    if (fields == null) {\n      return;\n    }\n    if (fields.length === 0) {\n      return;\n    }\n    const tmp = [];\n    for (const field of fields) {\n      if (!field.FieldGeoms || !Array.isArray(field.FieldGeoms) || field.FieldGeoms.length < 1) {\n        continue;\n      }\n      for (const geom of field.FieldGeoms.filter((g) => g?.Id != null)) {\n        // this.rbStore.createRb(geom.Id);\n        tmp.push(geom.Id);\n      }\n    }\n    this.rbStore.loadRb(tmp);\n  }\n\n  private _selectionChange(items: any[]): void {\n    if (items && items.length > 0) {\n      const itemsId = items.map(item => item?.Id?.toString());\n      this.fieldStore.changeSelectedField(itemsId);\n    } else {\n      this.fieldStore.changeSelectedField([]);\n      this.fieldStore.zoomFarmFields();\n    }\n    this._handleLegendsAndLayers();\n    this._generateStats();\n  }\n\n  private _handleLegendsAndLayers(): void {\n    const disableLegends = [\n      'NutrientPlanningLegend',\n      'TaskMgmtLegend'\n    ];\n    let selectedItems = this.dynComponent?.getSelectedItems()?.length ?? 0;\n    if (selectedItems <= 0) {\n      // Adding total amount of items of grid because component logic works in next way:\n      // If there is no data selected then we should use all data of grid for statistic, maps and legends\n      selectedItems = this.dynComponent?.items?.length ?? 0;\n    }\n    this.baseFertilizationCommonService.handleLegends(selectedItems, disableLegends);\n    const disableLayers = [this.mapStore.Layers.TaskManagementLayer?.name];\n    this.baseFertilizationCommonService.handleLayers(disableLayers, []);\n  }\n\n  private _onNavigateToReport(event: { fieldGeomId: string, year: number }): void {\n    window.open(`${APP_CONFIGURATION.MapFactory.Address}/reports/field/${event.fieldGeomId}/${event.year}?key=12345`, '_blank');\n  }\n\n  private _onCheckField(fieldGeomId: IGuid): void {\n    this.rbStore.checkField(fieldGeomId);\n    const data = {\n      buttons: [\n        {\n          key: 'apply',\n          text: 'Global__Ok',\n          primary: true,\n        }\n      ],\n      busy: true,\n      show: true,\n      title: this.translationService.translate('Global__Result_Check'),\n      formConfig: null,\n    } as IModalDialogData;\n    this.modalDialogStore.setModalDialogData(data);\n  }\n\n  /**\n   * build statistic tab if it is visible and selected\n   * @private\n   */\n  private _generateStats(): void {\n    if (this.mapViewStore.getMapViewCurrentMenu() !== MapViewCurrentMenu.STATS\n      || !this.baseFertilizationCommonService.mainComponentSelectionAvailability) {\n      return;\n    }\n    // put it on top of callstack to avoid lagging when user changes the selection\n    setTimeout(() => {\n      const emptyTitle = `${this.translationService.translate('Nutrients__StatisticsTitle')}\n    ${this.translationService.translate('Global__BasicFertilization')}\n    ${this.translationService.translate('Admin_Pages__Overview')}`;\n      let items = this.dynComponent.getSelectedItems() as INutrientOverviewGridData[];\n      if (!items.Any()) {\n        items = this.dynComponent.items as INutrientOverviewGridData[];\n      }\n      if (!items?.Any()) {\n        this.statisticStore.setStatisticData(\n          [], ApStatsType.BaseFertStats, '', emptyTitle\n        );\n        return;\n      }\n      const title = this._getTitleForStatistic(items);\n      this.statisticStore.setStatisticData<INutrientOverviewGridData>(\n        items, ApStatsType.BaseFertStats, title, emptyTitle\n      );\n    }, 100);\n  }\n\n  private _getTitleForStatistic(selectedItems: INutrientOverviewGridData[]): string {\n    const totalItems = this.dynComponent.items as INutrientOverviewGridData[];\n    const dataForTitles = totalItems.map(x => ({\n      AreaHa: x.Area,\n      Selected: selectedItems.some(z => z.Id === x.Id)\n    }));\n    return this.statisticService.generateFieldsAreaTitle(dataForTitles);\n  }\n\n  private _getCropRotationConfigs(limits: LimitsType): ApDynGridColumnConfigBase[] {\n    const columns = [];\n    for (let iYear = limits.Min; iYear <= limits.Max + 3; ++iYear) {\n      columns.push(new ApDynGridPropertyColumnConfig({\n        title: `${iYear}`,\n        field: `Crop.${iYear}.MainCropName`,\n        filterable: true,\n        headerFilterable: iYear === this.campaignYearStore.getSelectedCampaignYear().Year,\n        width: 100,\n        hide: new ApDynGridColumnHideConfig({\n          mapHide: false,\n          selfHide: combineLatest([this._year$, this.mapViewStore.Listen(s => s.mode)]).pipe(\n            map(([year, mode]) => {\n              if (year === iYear) {\n                return false;\n              }\n              return !(mode === MapViewMode.HIDE && iYear > year && iYear < year + 4);\n            }),\n          ),\n        }),\n        tooltip: ((dataItem: INutrientOverviewGridData) => this._generateTooltipForCrop(dataItem, iYear))\n      }));\n    }\n    return columns;\n  }\n\n  private _generateTooltipForCrop(dataItem: INutrientOverviewGridData, iYear: number): string {\n    if (!dataItem || !dataItem.Crop || !dataItem.Crop[iYear]) {\n      return '';\n    }\n    const yearCrop = dataItem.Crop[iYear];\n    if (yearCrop.MainCrop === 0 && yearCrop.SecondCrop === 0) {\n      return '';\n    }\n    const br = '<br>';\n    const unit = this.translationService.translate('Global__UnitDtPerHa');\n    const yieldTranslation = this.translationService.translate('Global__Target');\n    let contentMessage = '';\n    if (yearCrop.MainCrop !== 0) {\n      const mainCropName = `${this.translationService.translate('Nutrients_Pages_Popups__MainCrop')}: ${yearCrop.MainCropName}`;\n      contentMessage += `${mainCropName}${br}${yieldTranslation}: ${yearCrop.MainCropYield} ${unit}`;\n      if (yearCrop.MainCropStraw) {\n        contentMessage += `${br}${this.translationService.translate('Nutrients_Pages__StrawRemoved')}`;\n      }\n    }\n    if (yearCrop.SecondCrop !== 0) {\n      const secondCropName = `${this.translationService.translate('Nutrients_Pages_Popups__Intertillage')}: ${yearCrop.SecondCropName}`;\n      contentMessage += `${br}${secondCropName}${br}${yieldTranslation}: ${yearCrop.SecondCropYield} ${unit}`;\n    }\n    const cropsRemoval = this._getRemovalFromCrops(yearCrop);\n    const removalPMessage = `${this.elementService.GetElementStringByString(ApElementType.P)}: ${cropsRemoval.RemovalP}`;\n    const removalKMessage = `${this.elementService.GetElementStringByString(ApElementType.K)}: ${cropsRemoval.RemovalK}`;\n    const removalMgMessage = `${this.elementService.GetElementStringByString(ApElementType.Mg)}: ${cropsRemoval.RemovalMg}`;\n    return `${contentMessage}${br}${removalPMessage}${br}${removalKMessage}${br}${removalMgMessage}`;\n  }\n\n  private _getRemovalFromCrops(cropRotationYield: CropRotationYield)\n    : { RemovalP: number, RemovalK: number, RemovalMg: number } {\n    let expectedYield = 0;\n    let removalP = 0;\n    let removalK = 0;\n    let removalMg = 0;\n    const mainCrop = this.cropTypeStore.getDefaultCroptype(cropRotationYield.MainCrop);\n    if (cropRotationYield.MainCrop && mainCrop) {\n      removalP += this._calculateCropExtraction(cropRotationYield.MainCropStraw, mainCrop.MainwdP, mainCrop.SecwdP, mainCrop.MsRatio);\n      removalK += this._calculateCropExtraction(cropRotationYield.MainCropStraw, mainCrop.MainwdK, mainCrop.SecwdK, mainCrop.MsRatio);\n      removalMg += this._calculateCropExtraction(cropRotationYield.MainCropStraw, mainCrop.MainwdMg, mainCrop.SecwdMg, mainCrop.MsRatio);\n      expectedYield += cropRotationYield.MainCropYield;\n    }\n    const secondCrop = this.cropTypeStore.getDefaultCroptype(cropRotationYield.SecondCrop);\n    if (cropRotationYield.SecondCrop && secondCrop) {\n      removalP += secondCrop.MainwdP;\n      removalK += secondCrop.MainwdK;\n      removalMg += secondCrop.MainwdMg;\n      expectedYield += cropRotationYield.SecondCropYield;\n    }\n    return {\n      RemovalP: this.roundNumericService.roundAsNumber(\n        this.elementService.CalculateElementOxidValueByElementType(removalP * expectedYield, ApElementType.P)\n      ),\n      RemovalK: this.roundNumericService.roundAsNumber(\n        this.elementService.CalculateElementOxidValueByElementType(removalK * expectedYield, ApElementType.K)\n      ),\n      RemovalMg: this.roundNumericService.roundAsNumber(\n        this.elementService.CalculateElementOxidValueByElementType(removalMg * expectedYield, ApElementType.Mg)\n      )\n    };\n  }\n\n  private _calculateCropExtraction(isStrawRemoved: boolean, mainWd: number, secondWd: number, msRatio: number): number {\n    return isStrawRemoved ? mainWd + (secondWd * msRatio) : mainWd;\n  }\n\n  private _onXls(): void {\n    this.dynComponent.dynGrid.xlsExportFileName = this.generatePrintFilename();\n    this.dynComponent.dynGrid.exportAsXls();\n  }\n\n  private _onPdf(): void {\n    this.dynComponent.dynGrid.pdfExportFileName = this.generatePrintFilename();\n    this.dynComponent.dynGrid.exportAsPdf();\n  }\n\n  private generatePrintFilename(): string {\n    return this.dateService.toFarmDate(new Date()).format('YYYY-MM-DD') + '_' +\n      this.translationService.translate('Global__Plannings');\n  }\n}\n","import {Component, OnInit, ViewChild} from '@angular/core';\nimport {ApDynComponentComponent}      from '../../ap-dyncomponent/ap-dyncomponent.component';\nimport {ApDynGridColumnConfigBase}    from '../../ap-dyngrids/config/ap-dyn-grid-column-config-base';\nimport {ApDynGridEditColumnConfig}    from '../../ap-dyngrids/config/ap-dyn-grid-edit-column-config';\nimport {\n  ApNutrientPlanningComponent\n}                                     from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning.component';\nimport {FormStore}                    from '../../stores/layout/form.store';\nimport {\n  PlanningEntryComponentDataType\n}                                     from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning-configs/nutrient-planning-types';\n\n@Component({\n  selector: 'ap-nutrient-p-need',\n  template: `\n    <ap-dyncomponent [caption]=\"'Global__P_Need'\"\n                     [canCreate]=\"true\"\n                     [headerIcon]=\"'ap-icon-base-fertilization'\"\n                     [columns]=\"columns\"\n                     (create)=\"onCreate()\">\n    </ap-dyncomponent>\n  `,\n  styles: []\n})\nexport class ApNutrientPNeedComponent implements OnInit {\n  @ViewChild(ApDynComponentComponent) dynComponent;\n  columns: ApDynGridColumnConfigBase[] = [];\n\n  constructor(private formStore: FormStore) {\n  }\n\n  ngOnInit(): void {\n    this.gridBuilder();\n  }\n\n  gridBuilder(): void {\n    this.columns = [\n      new ApDynGridEditColumnConfig(\n        {\n          disabled: true\n        }\n      )\n    ];\n  }\n\n  public onCreate(): void {\n    this.formStore.openForm({\n      component: ApNutrientPlanningComponent,\n      data: {\n        Summary: null,\n        Type: PlanningEntryComponentDataType.Create\n      }\n    });\n  }\n}\n","import {EventEmitter, Injectable}    from '@angular/core';\nimport {ApDynGridStatusColumnConfig} from '../../../ap-dyngrids/config/ap-dyn-grid-status-column-config';\nimport {\n  ApDynGridPropertyColumnConfig,\n  FilterType\n}                                    from '../../../ap-dyngrids/config/ap-dyn-grid-property-column-config';\nimport {ApDynGridGroupColumnConfig}  from '../../../ap-dyngrids/config/ap-dyn-grid-group-column-config';\nimport {ApDynGridEditColumnConfig}   from '../../../ap-dyngrids/config/ap-dyn-grid-edit-column-config';\nimport {ApDynGridColumnConfigBase}   from '../../../ap-dyngrids/config/ap-dyn-grid-column-config-base';\nimport {LanguageStore}               from '../../../stores/translation/language.store';\nimport {GetRoundNumericPipe}         from '../../../ap-utils';\nimport {SettingsStore}               from '../../../stores/base-data/settings.store';\nimport {GetElementService}           from '../../../ap-utils/service/ap-get-element.service';\nimport {ApTranslationService}        from '../../../ap-utils/service/ap-translation.service';\nimport {ApElementType}               from '../../../ap-interface/enums/ap-elements-type.enum';\nimport {GetRoundNumericPipeConfig}   from '../../../ap-utils/pipes/configs/get-round-numeric.pipe.config';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class GridBuilderService {\n\n  constructor(private languageStore: LanguageStore,\n              private roundNumericPipe: GetRoundNumericPipe,\n              private settingsStore: SettingsStore,\n              private translationService: ApTranslationService,\n              private elementService: GetElementService) {\n  }\n\n  public PlanBooksGrid(options: { text: string, callback: EventEmitter<any> }[]): ApDynGridColumnConfigBase[] {\n    return [\n      new ApDynGridStatusColumnConfig({\n        field: 'Status',\n        class: 'StatusClass',\n        description: 'StatusDesc',\n        filterable: true,\n      }),\n      new ApDynGridPropertyColumnConfig({\n        field: 'ApplicationDate',\n        title: 'Nutrients__FertilizationDate',\n        tooltip: (dataItem) => dataItem.ApplicationDateTooltip,\n        dynCssClass: (dataItem) => dataItem.ApplicationDateItalic ? ' italic' : '',\n        hide: true,\n        width: 120,\n        filterable: true,\n        sortIndex: 1,\n        sortDesc: true,\n        format: this.languageStore.CurrentDateFormat\n      }),\n      new ApDynGridPropertyColumnConfig({\n        field: 'Product',\n        title: 'Global__Product',\n        width: 170,\n        filterable: true,\n        tooltip: (dataItem) => dataItem['ProductTooltip']\n      }),\n      new ApDynGridGroupColumnConfig({\n        title: `${this.translationService.translate('Nutrients__Average_Amount_Goods')} / ${this.translationService.translate('Global__Remaining_Need_Two_Short')}`,\n        headerStyle: {'text-align': 'center'},\n        groupColumns: [\n          new ApDynGridPropertyColumnConfig({\n            field: 'Amount',\n            width: 80,\n            cssClass: 'right',\n            filterType: FilterType.NUMBER,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [0]\n            }]\n          }),\n          new ApDynGridPropertyColumnConfig({\n            field: 'AmountUnit',\n            width: 60\n          })\n        ]\n      }),\n      new ApDynGridPropertyColumnConfig({\n        field: 'Count',\n        title: 'Global__Amount',\n        width: 70,\n        filterable: true,\n        tooltip: (dataItem) => dataItem?.FieldsTooltip,\n        cssClass: 'right',\n        filterType: FilterType.NUMBER\n      }),\n      new ApDynGridPropertyColumnConfig({\n        field: 'Area',\n        title: 'Global__Area_Unit',\n        width: 80,\n        filterable: true,\n        cssClass: 'right',\n        filterType: FilterType.NUMBER,\n        tooltip: (dataItem) => dataItem['AreaOriginal'],\n        pipes: [{\n          pipe: this.roundNumericPipe,\n          args: [this.settingsStore.FirstSetting.DigitsAfterDecimalPoint]\n        }]\n      }),\n      new ApDynGridGroupColumnConfig({\n        title: this.translationService.translate('Global__Sum_Goods'),\n        headerStyle: {'text-align': 'center'},\n        hide: true,\n        groupColumns: [\n          new ApDynGridPropertyColumnConfig({\n            field: 'Sum',\n            hide: true,\n            width: 90,\n            tooltip: (dataItem) => dataItem['SumTooltip'],\n            cssClass: 'right',\n            filterType: FilterType.NUMBER,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [0]\n            }]\n          }),\n          new ApDynGridPropertyColumnConfig({\n            field: 'SumUnit',\n            width: 60,\n            hide: true,\n          })\n        ]\n      }),\n      new ApDynGridPropertyColumnConfig({\n        field: 'LeadNutrient',\n        title: 'AgriConnect__Nutrient',\n        width: 90,\n        filterable: true\n      }),\n      new ApDynGridGroupColumnConfig({\n        title: 'Global__Average_Symbol_Nutrient_kg_ha',\n        groupColumns: [\n          new ApDynGridPropertyColumnConfig({\n            title: this.elementService.GetElementStringByString(ApElementType.P),\n            field: 'P',\n            cssClass: 'right',\n            filterType: FilterType.NUMBER,\n            width: 60,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [0, GetRoundNumericPipeConfig.NullAndZeroToEmptyReplaceConfig]\n            }]\n          }),\n          new ApDynGridPropertyColumnConfig({\n            title: this.elementService.GetElementStringByString(ApElementType.K),\n            field: 'K',\n            cssClass: 'right',\n            filterType: FilterType.NUMBER,\n            width: 60,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [0, GetRoundNumericPipeConfig.NullAndZeroToEmptyReplaceConfig]\n            }]\n          }),\n          new ApDynGridPropertyColumnConfig({\n            title: this.elementService.GetElementStringByString(ApElementType.Mg),\n            field: 'Mg',\n            cssClass: 'right',\n            filterType: FilterType.NUMBER,\n            width: 60,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [0, GetRoundNumericPipeConfig.NullAndZeroToEmptyReplaceConfig]\n            }]\n          }),\n          new ApDynGridPropertyColumnConfig({\n            title: 'Global__NutrientCaO',\n            field: 'CaO',\n            cssClass: 'right',\n            filterType: FilterType.NUMBER,\n            width: 60,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [0, GetRoundNumericPipeConfig.NullAndZeroToEmptyReplaceConfig]\n            }]\n          }),\n        ]\n      }),\n      new ApDynGridGroupColumnConfig({\n        title: 'Global__Good_ha',\n        hide: true,\n        groupColumns: [\n          new ApDynGridPropertyColumnConfig({\n            title: 'Min',\n            field: 'Min',\n            cssClass: 'right',\n            filterType: FilterType.NUMBER,\n            width: 70,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [0]\n            }]\n          }),\n          new ApDynGridPropertyColumnConfig({\n            title: 'Max',\n            field: 'Max',\n            cssClass: 'right',\n            filterType: FilterType.NUMBER,\n            width: 70,\n            pipes: [{\n              pipe: this.roundNumericPipe,\n              args: [0]\n            }]\n          }),\n        ]\n      }),\n      new ApDynGridPropertyColumnConfig({\n        field: 'Note',\n        title: 'Global__Note',\n        hide: true,\n        cssClass: 'left',\n        width: 100\n      }),\n      new ApDynGridEditColumnConfig({\n        data: options\n      })\n    ];\n  }\n}\n","import {AfterContentInit, Component, EventEmitter, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {combineLatest, Observable, Subscription}                                 from 'rxjs';\nimport {debounceTime, filter, first, map, skip}                                  from 'rxjs/operators';\nimport {\n  ApDynComponentComponent\n}                                                                                from '../../ap-dyncomponent/ap-dyncomponent.component';\nimport {\n  ApDynGridColumnConfigBase\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-column-config-base';\nimport {FormStore}                                                               from '../../stores/layout/form.store';\nimport {\n  ApNutrientPlanningComponent\n}                                                                                from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning.component';\nimport {\n  SettingsStore\n}                                                                                from '../../stores/base-data/settings.store';\nimport {\n  CampaignYearStore\n}                                                                                from '../../stores/login/campaignyear.store';\nimport {\n  BasicFertilisationSummariesStore\n}                                                                                from '../../stores/taskmanagement/basic.fertilisation.summaries.store';\nimport {\n  CropTypeStore\n}                                                                                from '../../stores/base-data/crop.types.store';\nimport {FieldStore}                                                              from '../../stores/farm/field.store';\nimport {\n  TranslationStore\n}                                                                                from '../../stores/translation/translation.store';\nimport {\n  FertilizerStore\n}                                                                                from '../../stores/base-data/fertilizer.store';\nimport {\n  ApDynGridPagerConfigBase\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-pager-config-base';\nimport {\n  GridBuilderService\n}                                                                                from './configs/plan-books-grid-builder.service';\nimport {\n  ApUtilService\n}                                                                                from '../../ap-utils/service/ap-util.service';\nimport {\n  ApNutrientBookingComponent\n}                                                                                from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-booking.component';\nimport {\n  GetElementService\n}                                                                                from '../../ap-utils/service/ap-get-element.service';\nimport {LoginStore}                                                              from '../../stores/login/login.store';\nimport {\n  RouterStore\n}                                                                                from '../../stores/router/router.store';\nimport {\n  StatisticStore\n}                                                                                from '../../stores/statistic/statistic.store';\nimport {\n  GetRoundNumericService\n}                                                                                from '../../ap-utils/service/get-round-numeric.service';\nimport {ApElementOxydTypeEnum, ApStatsType, MapViewCurrentMenu, MapViewMode}     from '../../ap-interface';\nimport {\n  ApNutrientStatisticService\n}                                                                                from '../service/ap-nutrient-statistic.service';\nimport {\n  ApDateService\n}                                                                                from '../../ap-core/services/ap-date-service';\nimport {\n  NutrientManagementService\n}                                                                                from '../service/nutrient-management.service';\nimport {\n  NutrientStore\n}                                                                                from '../../stores/nutrients/nutrient.store';\nimport {PagerBuilder}                                                            from './configs/pager-builder';\nimport {\n  Icon\n}                                                                                from '../../ap-interface/enums/layout/icon.enum';\nimport {\n  ApTooltipContentService\n}                                                                                from '../../ap-utils/service/ap-tooltip-content.service';\nimport {GetRoundNumericPipe}                                                     from '../../ap-utils';\nimport {\n  ApNutrientService\n}                                                                                from '../../ap-utils/service/ap-nutrient.service';\nimport {\n  ApTranslationService\n}                                                                                from '../../ap-utils/service/ap-translation.service';\nimport {\n  TaskManagementAction\n}                                                                                from '../../task-management/task-management.types';\nimport {\n  ApRoleTypeService\n}                                                                                from '../../services/common/ap-role-type.service';\nimport {\n  FertilizerService\n}                                                                                from '../../services/data/fertilizer.service';\nimport {\n  BaseFertilizationCommonService\n}                                                                                from '../service/base-fertilization-common.service';\nimport {MapStore}                                                                from '../../stores/map/map.store';\nimport {\n  CropRotationStore\n}                                                                                from '../../stores/farm/crop.rotation.store';\nimport {\n  PlanningEntryComponentDataType\n}                                                                                from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning-configs/nutrient-planning-types';\nimport {\n  FieldArchiveStore\n}                                                                                from '../../stores/farm/field-archive.store';\nimport {ObjectFactory}                                                           from 'ts-tooling';\nimport {\n  MapViewStore\n}                                                                                from '../../stores/layout/mapview.store';\nimport {\n  GenericChartConfig\n}                                                                                from '../../statistics/components/charts/ap-generic-chart.types';\nimport IBasicFertilisationSummaries = Data.TaskManagement.IBasicFertilisationSummaries;\nimport IBasicFertilisationPlanBooks = Data.TaskManagement.IBasicFertilisationPlanBooks;\n\n@Component({\n  selector: 'ap-nutrient-planning',\n  template: `\n    <ap-dyncomponent [caption]=\"'Global__Plannings'\"\n                     [canCreate]=\"(loading$ | async) === false\"\n                     [headerIcon]=\"'ap-icon-base-fertilization'\"\n                     [columns]=\"columns\"\n                     [loading$]=\"loading$\"\n                     [items]=\"items$ | async\"\n                     [pager]=\"pager\"\n                     (create)=\"onCreate()\"\n                     [selectable]=\"{checkboxOnly: false, mode: 'single'}\">\n    </ap-dyncomponent>\n  `,\n  styles: []\n})\nexport class ApNutrientManagementPlanningComponent implements OnInit, OnDestroy, AfterContentInit {\n  @ViewChild(ApDynComponentComponent, {static: true}) dynComponent: ApDynComponentComponent;\n  public columns: ApDynGridColumnConfigBase[] = [];\n  public items$: Observable<any[]>;\n  public pager: ApDynGridPagerConfigBase;\n  public loading$: Observable<boolean>;\n  private _statisticUpdateRequested = new EventEmitter<void>();\n\n  private _subscriptions: Subscription[] = [];\n  private _isOnCreatePressed = false;\n\n  constructor(private formStore: FormStore,\n              private settingsStore: SettingsStore,\n              private campaignYearStore: CampaignYearStore,\n              private basicFertilisationSummariesStore: BasicFertilisationSummariesStore,\n              private cropTypeStore: CropTypeStore,\n              private fieldStore: FieldStore,\n              private translationStore: TranslationStore,\n              private fertilizerStore: FertilizerStore,\n              private gridBuilder: GridBuilderService,\n              private elementService: GetElementService,\n              private loginStore: LoginStore,\n              private routerStore: RouterStore,\n              private statisticStore: StatisticStore,\n              private cropRotationStore: CropRotationStore,\n              private roundNumericService: GetRoundNumericService,\n              private nutrientStatisticService: ApNutrientStatisticService,\n              private dateService: ApDateService,\n              private nutrientManagementService: NutrientManagementService,\n              private nutrientStore: NutrientStore,\n              private tooltipContentService: ApTooltipContentService,\n              private roundNumericPipe: GetRoundNumericPipe,\n              private nutrientService: ApNutrientService,\n              private translationService: ApTranslationService,\n              private mapStore: MapStore,\n              private baseFertilizationCommonService: BaseFertilizationCommonService,\n              private fertilizerService: FertilizerService,\n              private fieldArchiveStore: FieldArchiveStore,\n              private mapViewStore: MapViewStore) {\n  }\n\n  public ngOnInit(): void {\n    this.statisticStore.removeStatisticData();\n    this.fieldStore.changeSelectedField([]);\n    this.loading$ = combineLatest([\n      this.fieldStore.Listen(s => s.loading),\n      this.cropTypeStore.Listen(s => s.loading),\n      this.basicFertilisationSummariesStore.Listen(s => s.loading),\n      this.cropRotationStore.HistoryLoading$\n    ]).pipe(\n      map(loadingItems => loadingItems.some(x => x))\n    );\n    this._buildGrid();\n  }\n\n  public ngAfterContentInit(): void {\n    // Auf Farm/EJ-Wechsel reagieren und Summaries neu laden\n    this._subscriptions.push(this.dynComponent.gridInitialized.subscribe(() => {\n      this._subscriptions.push(this.items$.subscribe(items => {\n        const itemToSelect = items.find(x => x.Id === this.baseFertilizationCommonService.selectedSummaryId);\n        if (itemToSelect) {\n          this.baseFertilizationCommonService.setSelectedSummaryKey(undefined);\n          this.dynComponent.dynGrid.gridPaging.setSelectedKeys([itemToSelect.Id]);\n        }\n      }));\n    }));\n    this._subscriptions.push(this.campaignYearStore.Listen(s => s.selectedYear).pipe(skip(1)).subscribe(() => {\n      this.basicFertilisationSummariesStore.loadBasicFertilisationSummaries();\n    }));\n    this._subscriptions.push(this.mapStore.Layers.OnLayerChange.subscribe(() => {\n      // in order to show the geometry of the planning we reuse the taskmanagement layer\n      this.mapStore.Layers.TaskManagementLayer.Visibility = this.mapStore.Layers.NutrientPlanningLayer?.Visibility;\n    }));\n    this._subscriptions.push(this.dynComponent.SelectedItems$.subscribe(_ => this._selectionChange()));\n    this._subscriptions.push(combineLatest([\n      this.routerStore.Listen(s => s),\n      this.items$,\n      this.basicFertilisationSummariesStore.Listen(s => s.loading)\n    ]).pipe(\n      filter(([routerStoreData, gridItems, gridItemsLoading]) =>\n        routerStoreData.url?.startsWith('/nutrients/planning') && routerStoreData.queryParams['id'] !== undefined && gridItems?.length !== 0 && !gridItemsLoading),\n      first(),\n    ).subscribe(([routerStoreData, gridItems]) => {\n      const isBooking = routerStoreData.queryParams['action'] === TaskManagementAction.Booking;\n      const targetComponent = isBooking ? ApNutrientBookingComponent : ApNutrientPlanningComponent;\n      let targetGridItem = gridItems.find(_ => _.Id === routerStoreData.queryParams['id']);\n      if (routerStoreData.queryParams['action'] === TaskManagementAction.Edit) {\n        targetGridItem = targetGridItem?.SourceItem;\n      }\n      const dataObject: any = isBooking\n        ? {Summary: targetGridItem, FieldIdToSelect: null}\n        : {\n          Summary: targetGridItem,\n          Type: targetGridItem ? PlanningEntryComponentDataType.Create : PlanningEntryComponentDataType.Edit\n        };\n      setTimeout(() => {\n        this.formStore.openForm({component: targetComponent, data: dataObject});\n        if (routerStoreData.queryParams['url']) {\n          this._subscriptions.push(this.formStore.FormClose$.subscribe(() => this.routerStore.navigate([routerStoreData.queryParams['url']])));\n        }\n      }, 0);\n    }));\n    this._subscriptions.push(this.formStore.FormClose$.subscribe(() => {\n      // trigger refresh of selection and map after entryComponent (e.g. 'NEW') closed\n      if (this._isOnCreatePressed) {\n        this._isOnCreatePressed = false;\n        setTimeout(() => {\n          this._handleLegendsAndLayers(this.dynComponent.getSelectedItems().length);\n          this._selectionChange();\n        }, 1);\n      }\n    }));\n    this._subscriptions.push(this.mapStore.Layers.OnLayerChange.subscribe(() => {\n      this._handleLegendsAndLayers(this.dynComponent.getSelectedItems().length);\n    }));\n    this._subscriptions.push(this._statisticUpdateRequested.pipe(\n      debounceTime(100)).subscribe(_ => this._generateStats()));\n    this._subscriptions.push(this.items$.subscribe(_ => this._statisticUpdateRequested.emit()));\n    this._subscriptions.push(\n      combineLatest([\n        this.mapViewStore.Listen(s => s.mode),\n        this.mapViewStore.Listen(s => s.currentMenu)\n      ]).subscribe(([mapMode, mapMenu]) => {\n          if (mapMode !== MapViewMode.HIDE && mapMenu === MapViewCurrentMenu.STATS) {\n            this._statisticUpdateRequested.emit();\n          }\n        }\n      ));\n  }\n\n  public ngOnDestroy(): void {\n    this.baseFertilizationCommonService.revertLegends();\n    this._subscriptions.forEach(s => s?.unsubscribe());\n    this.statisticStore.removeStatisticData();\n    this.fieldStore.changeSelectedField([]);\n  }\n\n  public onCreate(): void {\n    this.statisticStore.removeStatisticData();\n    if (this.dynComponent.dynGrid.gridPaging.selectedKeys.length !== 0) {\n      const selectedSourceItem = (this.dynComponent.dynGrid.gridPaging.items.find(x => x.Id === this.dynComponent.dynGrid.gridPaging.selectedKeys[0]) as any)?.SourceItem;\n      this.formStore.openForm({\n        component: ApNutrientPlanningComponent,\n        data: {\n          Summary: ObjectFactory.Copy(selectedSourceItem),\n          Type: PlanningEntryComponentDataType.Edit\n        }\n      });\n    } else {\n      this.formStore.openForm({\n        component: ApNutrientPlanningComponent,\n        data: {\n          Summary: null,\n          Type: PlanningEntryComponentDataType.Create\n        }\n      });\n    }\n\n    this._isOnCreatePressed = true;\n  }\n\n  private _selectionChange(): void {\n    if (!this.dynComponent?.dynGrid?.gridPaging) {\n      return;\n    }\n    const selectedSummaries = this.dynComponent.dynGrid.gridPaging.selectedItems;\n    if (selectedSummaries && selectedSummaries.length > 0) {\n      this.baseFertilizationCommonService.onSelectionChange(selectedSummaries[0]['SourceItem'] as IBasicFertilisationSummaries, false);\n    } else {\n      this.baseFertilizationCommonService.onSelectionChange(null, false);\n    }\n    this._statisticUpdateRequested.emit();\n  }\n\n  private _buildGrid(): void {\n    const gridOptions = [\n      {\n        text: 'Global__Show',\n        callback: ApUtilService.createEventEmitter(this._onOneShow.bind(this), this._subscriptions)\n      },\n      {\n        text: 'Global__Export',\n        callback: ApUtilService.createEventEmitter(this._onOneExport.bind(this), this._subscriptions)\n      },\n      {\n        text: 'Global__Replan',\n        callback: ApUtilService.createEventEmitter(this._onOneReplan.bind(this), this._subscriptions)\n      },\n      {\n        text: 'Admin_Pages_Popups__Book',\n        callback: ApUtilService.createEventEmitter(this._onOneBooking.bind(this), this._subscriptions)\n      },\n      {\n        text: 'Global__Delete',\n        callback: ApUtilService.createEventEmitter(this._onOneDelete.bind(this), this._subscriptions)\n      }\n    ];\n    if (ApRoleTypeService.hasAgriconRole(this.loginStore.User)) {\n      gridOptions.Add({\n        text: 'Global__Download',\n        callback: ApUtilService.createEventEmitter(this._onOneDownloadPackage.bind(this), this._subscriptions)\n      });\n    }\n    this.columns = this.gridBuilder.PlanBooksGrid(gridOptions);\n    const pagerOptions = [\n      {\n        text: 'Global__Export',\n        callback: ApUtilService.createEventEmitter(this._onExport.bind(this), this._subscriptions)\n      },\n      {\n        text: 'Admin_Pages_Popups__Book',\n        callback: ApUtilService.createEventEmitter(this._onBooking.bind(this), this._subscriptions)\n      },\n      {\n        text: 'Global__Replan',\n        callback: ApUtilService.createEventEmitter(this._onReplan.bind(this), this._subscriptions)\n      },\n      {\n        text: 'Global__Delete',\n        callback: ApUtilService.createEventEmitter(this._onDelete.bind(this), this._subscriptions)\n      }\n    ];\n    const iconOptions = [\n      {\n        icon: Icon.PDF,\n        callback: ApUtilService.createEventEmitter(this._onPdf.bind(this), this._subscriptions),\n        tooltip: 'Global__Save_PDF'\n      },\n      {\n        icon: Icon.XLS,\n        callback: ApUtilService.createEventEmitter(this._onXls.bind(this), this._subscriptions),\n        tooltip: 'Global__Save_EXCEL'\n      }\n    ];\n    this.pager = PagerBuilder.NutrientManagementPager(pagerOptions, iconOptions);\n\n    this.items$ = combineLatest([\n      this.basicFertilisationSummariesStore.Summaries$,\n      this.cropTypeStore.Listen(s => s.cropTypesNames),\n      this.fieldStore.Listen(s => s.data),\n      this.campaignYearStore.Listen(s => s.selectedYear),\n      this.cropRotationStore.GetHistory$,\n      this.baseFertilizationCommonService.gridUpdate$,\n      this.fieldArchiveStore.Listen(s => s.loaded)\n    ]).pipe(\n      filter(([summaries, cropTypesNames, fields,\n                campaignYear, cropRotationHistory, isGridUpdateAllowed, fieldArchiveLoaded]) => {\n        return !!summaries && !!cropTypesNames && !!fields && !!campaignYear && !!cropRotationHistory && isGridUpdateAllowed && fieldArchiveLoaded;\n      }),\n      map(([summaries, cropTypesNames]) => {\n        return summaries.filter(x => x.BasicFertilisationPlanBooks.some(planBook => !planBook.DeletedAt && !planBook.BookedAt))\n          .map((summary) => {\n            const area = this.nutrientManagementService.getArea(summary, false);\n            const sum = this.nutrientManagementService.getCalculateSumFertilizer(summary, false);\n            const productTooltip = this.tooltipContentService.getProductContentInfoTooltip(this._getProductId(summary));\n            const fertilizer = this.fertilizerStore.getFertilizer(this._getProductId(summary));\n            const fertilizerUnit = this.fertilizerService.getFertilizerUnit(fertilizer);\n            const sumTooltip = this.roundNumericPipe.transform(sum, this.settingsStore.FirstSetting.DigitsAfterDecimalPoint) + ' ' + fertilizerUnit;\n            const planBookApplicationDates = this.baseFertilizationCommonService.getApplicationDatesData(summary.BasicFertilisationPlanBooks, false);\n            return {\n              SourceItem: summary,\n              Id: summary.Id,\n              Status: this.nutrientService.getFertilizerStatus(summary.User_Appl_Mode, false)?.state,\n              StatusClass: this.nutrientService.getFertilizerStatus(summary.User_Appl_Mode, false)?.class,\n              StatusDesc: this.nutrientService.getFertilizerStatusDescription(summary.User_Appl_Mode, false),\n              Crop: cropTypesNames[this._getCropType(summary)],\n              Count: this.baseFertilizationCommonService.getPlanBooksFieldsCount(summary.BasicFertilisationPlanBooks, false),\n              Area: this.roundNumericService.roundAsNumber(area, this.settingsStore.FirstSetting.DigitsAfterDecimalPoint),\n              AreaOriginal: area.toString(10),\n              OperationMode: this.translationService.translate(summary.User_Operation_Mode?.Key),\n              Product: this.fertilizerService.getFertilizerProductName(fertilizer),\n              ProductTooltip: productTooltip,\n              ApplicationDate: planBookApplicationDates?.NewestDate,\n              ApplicationDateTooltip: planBookApplicationDates?.Tooltip,\n              ApplicationDateItalic: planBookApplicationDates?.IsMoreThanOneUniqDate,\n              Plannings: summary.BasicFertilisationPlanBooks,\n              Note: summary.Title,\n              Amount: summary.User_Appl_Rate,\n              AmountUnit: summary.User_Appl_Unit?.Id === 1 ? this.fertilizerService.getFertilizerUnit(fertilizer, true) : this.translationStore.FindTranslationForSelectedLanguage(summary.User_Appl_Unit?.Key),\n              Sum: sum,\n              SumUnit: fertilizerUnit,\n              SumTooltip: sumTooltip,\n              LeadNutrient: this.baseFertilizationCommonService.getLeadNutrient(summary),\n              Min: this.nutrientManagementService.getMin(summary, false),\n              Max: this.nutrientManagementService.getMax(summary, false),\n              BasicFertilisationPlanBooks: summary.BasicFertilisationPlanBooks,\n              P: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageNutrientFromStatistics(0, summary, false), ApElementOxydTypeEnum.P),\n              K: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageNutrientFromStatistics(1, summary, false), ApElementOxydTypeEnum.K),\n              Mg: this.elementService.CalculateElementOxidValueByGivenElementValue(this.nutrientStatisticService.getAverageNutrientFromStatistics(2, summary, false), ApElementOxydTypeEnum.Mg),\n              CaO: this.nutrientStatisticService.getAverageNutrientFromStatistics(3, summary, false),\n              Statistic: summary.Statistic,\n              PlanNumber: summary.PlanNumber,\n              FieldIds: this.baseFertilizationCommonService.getFieldIds(summary.BasicFertilisationPlanBooks, false),\n              FieldsTooltip: this.baseFertilizationCommonService.getFieldCropsTooltip(summary.BasicFertilisationPlanBooks, false)\n            };\n          });\n      })\n    );\n  }\n\n  private _getProductId(summary: IBasicFertilisationSummaries): number | null {\n    return summary.BasicFertilisationPlanBooks[0]?.Product_Id;\n  }\n\n  private _getCropType(summary: IBasicFertilisationSummaries): number | string {\n    return summary.BasicFertilisationPlanBooks[0]?.Croptype_Id ?? '';\n  }\n\n  private _handleLegendsAndLayers(selectedItems: number): void {\n    this.baseFertilizationCommonService.handleLegends(selectedItems ?? 0);\n    // in order to show the geometry of the planning we reuse the taskmanagement layer\n    this.mapStore.Layers.TaskManagementLayer.Visibility = this.mapStore.Layers.NutrientPlanningLayer?.Visibility;\n  }\n\n  private _onXls(): void {\n    this.dynComponent.dynGrid.xlsExportFileName = this._generatePrintFilename();\n    this.dynComponent.dynGrid.exportAsXls();\n  }\n\n  private _onPdf(): void {\n    this.dynComponent.dynGrid.pdfExportFileName = this._generatePrintFilename();\n    this.dynComponent.dynGrid.exportAsPdf();\n  }\n\n  private _generatePrintFilename(): string {\n    return this.dateService.toFarmDate(new Date()).format('YYYY-MM-DD') + '_' +\n      this.translationStore.FindTranslationForSelectedLanguage('Global__Plannings');\n  }\n\n  private _onExport(dataItem: any): void {\n    if (dataItem.items === null || dataItem.items === undefined) {\n      return;\n    }\n    this._onOneExport(dataItem.items[0]);\n  }\n\n  private _onOneExport(dataItem: any): void {\n    this.dynComponent.dynGrid.gridPaging.setSelectedKeys([dataItem.Id]);\n    this.baseFertilizationCommonService.redirectSummaryToExportView(dataItem.Id, false, 'nutrients/planning');\n  }\n\n  private _onBooking(dataItem: any): void {\n    if (dataItem.items === null || dataItem.items === undefined) {\n      return;\n    }\n    this._onOneBooking(dataItem.items[0]);\n  }\n\n  private _onOneBooking(dataItem: any): void {\n    this.dynComponent.dynGrid.gridPaging.setSelectedKeys([dataItem.Id]);\n    this.baseFertilizationCommonService.bookPlanBooks(dataItem.SourceItem);\n  }\n\n  private _onReplan(dataItem: any): void {\n    if (!dataItem?.items || dataItem.items.length <= 0) {\n      return;\n    }\n    this._onOneReplan(dataItem.items[0]);\n  }\n\n  private _onOneReplan(dataItem: any): void {\n    this.dynComponent.dynGrid.gridPaging.setSelectedKeys([dataItem.Id]);\n    this.baseFertilizationCommonService.replanSummary(dataItem.SourceItem);\n  }\n\n  private _onDelete(dataItem: any): void {\n    if (dataItem.items === null || dataItem.items === undefined) {\n      return;\n    }\n    this._onOneDelete(dataItem.items[0]);\n  }\n\n  private _onOneDelete(dataItem: any): void {\n    this.baseFertilizationCommonService.deleteSummary(dataItem.SourceItem);\n  }\n\n  private _onOneShow(dataItem: any): void {\n    this.dynComponent.dynGrid.gridPaging.setSelectedKeys([dataItem.Id]);\n    this.baseFertilizationCommonService.redirectSummaryToShowView(dataItem.Id, false, 'nutrients/planning');\n  }\n\n  private _onOneDownloadPackage(dataItem: any): void {\n    const summary = dataItem['SourceItem'] as IBasicFertilisationSummaries;\n    this.nutrientStore.createNutrientPlanningPackage(summary.Id);\n  }\n\n  /**\n   * Generates the statistic charts for the selected planbooks.\n   * Grouped by product (=series)\n   * Grouped by Month/Year (=category/y-axis)\n   * @private\n   */\n  private _generateStats(): void {\n    if (this.mapViewStore.getMapViewCurrentMenu() !== MapViewCurrentMenu.STATS || this.mapViewStore.getMapViewMode() === MapViewMode.HIDE) {\n      return;\n    }\n    const title = `${this.translationService.translate('Global__Planning')}`;\n    let items = this.dynComponent.getSelectedItems() as any[];\n    if (!items || items?.length === 0) {\n      items = this.dynComponent.items as any[];\n    }\n    if (!items || items?.length === 0) {\n      this.statisticStore.setStatisticData<GenericChartConfig>(\n        [], ApStatsType.GenericBars, title, title\n      );\n      return;\n    }\n\n    const chartConfigs: GenericChartConfig[] = [];\n    let planBooks = items?.map(item => item?.BasicFertilisationPlanBooks).flat() as IBasicFertilisationPlanBooks[];\n    planBooks = planBooks?.filter(pB => pB?.BookedAt == null && pB.DeletedAt == null);\n    const chartConfig = this.baseFertilizationCommonService.generateStatChartConfig(planBooks);\n    chartConfigs.push(chartConfig);\n\n    this.statisticStore.setStatisticData<GenericChartConfig>(\n      chartConfigs, ApStatsType.GenericChart, title, title\n    );\n  }\n}\n","import {Route, RouterModule}                   from '@angular/router';\nimport {NgModule}                              from '@angular/core';\nimport {PageMode}                              from '../ap-interface';\nimport {ApNutrientDistributionComponent}       from './components/ap-nutrient-distribution.component';\nimport {ApSoilSamplePlanningOverviewComponent} from './components/ap-soilsampleplanning-overview.component';\nimport {ApNutrientManagementOverviewComponent} from './components/ap-nutrient-management-overview.component';\nimport {ApPermissionGuard}                     from '../guards/ap-permission-guard.service';\nimport {ApNutrientPNeedComponent}              from './components/ap-nutrient-p-need.component';\nimport {ApNutrientManagementPlanningComponent} from './components/ap-nutrient-management-planning.component';\nimport {ApNutrientManagementBookingComponent}  from './components/ap-nutrient-management-booking.component';\n\nexport const routes: Route[] = [\n  {\n    path: 'nutrients-distribution',\n    component: ApNutrientDistributionComponent,\n    canActivate: [ApPermissionGuard],\n    data: {\n      login: true,\n      layout: PageMode.HALFSCREEN\n    },\n  },\n  {\n    path: 'overview',\n    component: ApNutrientManagementOverviewComponent,\n    canActivate: [ApPermissionGuard],\n    data: {\n      login: true,\n      layout: PageMode.HALFSCREEN\n    },\n  },\n  {\n    path: 'p-need',\n    component: ApNutrientPNeedComponent,\n    canActivate: [ApPermissionGuard],\n    data: {\n      login: true,\n      layout: PageMode.HALFSCREEN\n    },\n  },\n  {\n    path: 'planning',\n    component: ApNutrientManagementPlanningComponent,\n    canActivate: [ApPermissionGuard],\n    data: {\n      login: true,\n      layout: PageMode.HALFSCREEN\n    },\n  },\n  {\n    path: 'booking',\n    component: ApNutrientManagementBookingComponent,\n    canActivate: [ApPermissionGuard],\n    data: {\n      login: true,\n      layout: PageMode.HALFSCREEN\n    },\n  },\n  {\n    path: 'soil-sample-planning',\n    component: ApSoilSamplePlanningOverviewComponent,\n    canActivate: [ApPermissionGuard],\n    data: {\n      login: true,\n      layout: PageMode.HALFSCREEN\n    },\n  }\n];\n\n@NgModule({\n  imports: [\n    RouterModule.forChild(routes)\n  ],\n  exports: [RouterModule]\n})\nexport class ApNutrientManagementRoutes {\n}\n","import {AfterContentInit, Component, EventEmitter, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {\n  ApDynGridColumnConfigBase\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-column-config-base';\nimport {\n  ApDynGridEditColumnConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-edit-column-config';\nimport {\n  ApDynComponentComponent\n}                                                                                from '../../ap-dyncomponent/ap-dyncomponent.component';\nimport {\n  ApDynGridPropertyColumnConfig,\n  FilterType\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-property-column-config';\nimport {\n  ApDynGridGroupColumnConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-group-column-config';\nimport {\n  ApNutrientPlanningComponent\n}                                                                                from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning.component';\nimport {FormStore}                                                               from '../../stores/layout/form.store';\nimport {\n  ApDynGridPagerConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-pager-config';\nimport {\n  ApUtilService\n}                                                                                from '../../ap-utils/service/ap-util.service';\nimport {combineLatest, Observable, Subscription}                                 from 'rxjs';\nimport {\n  Icon\n}                                                                                from '../../ap-interface/enums/layout/icon.enum';\nimport {\n  LanguageStore\n}                                                                                from '../../stores/translation/language.store';\nimport {\n  ApDynGridStatusColumnConfig\n}                                                                                from '../../ap-dyngrids/config/ap-dyn-grid-status-column-config';\nimport {debounceTime, filter, map, skip}                                         from 'rxjs/operators';\nimport {\n  CampaignYearStore\n}                                                                                from '../../stores/login/campaignyear.store';\nimport {\n  SettingsStore\n}                                                                                from '../../stores/base-data/settings.store';\nimport {GetRoundNumericPipe}                                                     from '../../ap-utils';\nimport {\n  BasicFertilisationSummariesStore\n}                                                                                from '../../stores/taskmanagement/basic.fertilisation.summaries.store';\nimport {FieldStore}                                                              from '../../stores/farm/field.store';\nimport {\n  FertilizerStore\n}                                                                                from '../../stores/base-data/fertilizer.store';\nimport {\n  TranslationStore\n}                                                                                from '../../stores/translation/translation.store';\nimport {\n  GetElementService\n}                                                                                from '../../ap-utils/service/ap-get-element.service';\nimport {\n  GetOperationModeService\n}                                                                                from '../../ap-utils/service/ap-get-operationmode.service';\nimport {\n  ApDateService\n}                                                                                from '../../ap-core/services/ap-date-service';\nimport {\n  ApNutrientStatisticService\n}                                                                                from '../service/ap-nutrient-statistic.service';\nimport {PagerBuilder}                                                            from './configs/pager-builder';\nimport {\n  NutrientManagementService\n}                                                                                from '../service/nutrient-management.service';\nimport {ApElementOxydTypeEnum, ApStatsType, MapViewCurrentMenu, MapViewMode}     from '../../ap-interface';\nimport {\n  ApTooltipContentService\n}                                                                                from '../../ap-utils/service/ap-tooltip-content.service';\nimport {\n  NutrientStore\n}                                                                                from '../../stores/nutrients/nutrient.store';\nimport {LoginStore}                                                              from '../../stores/login/login.store';\nimport {\n  ApElementType\n}                                                                                from '../../ap-interface/enums/ap-elements-type.enum';\nimport {\n  ApNutrientService\n}                                                                                from '../../ap-utils/service/ap-nutrient.service';\nimport {\n  ApRoleTypeService\n}                                                                                from '../../services/common/ap-role-type.service';\nimport {\n  FertilizerService\n}                                                                                from '../../services/data/fertilizer.service';\nimport {\n  BaseFertilizationCommonService\n}                                                                                from '../service/base-fertilization-common.service';\nimport {MapStore}                                                                from '../../stores/map/map.store';\nimport {\n  CropRotationStore\n}                                                                                from '../../stores/farm/crop.rotation.store';\nimport {\n  PlanningEntryComponentDataType\n}                                                                                from '../../entry-components/ap-nutrients-management-entry-components/ap-nutrient-planning-configs/nutrient-planning-types';\nimport {\n  FieldArchiveStore\n}                                                                                from '../../stores/farm/field-archive.store';\nimport {\n  StatisticStore\n}                                                                                from '../../stores/statistic/statistic.store';\nimport {\n  GenericChartConfig\n}                                                                                from '../../statistics/components/charts/ap-generic-chart.types';\nimport {\n  MapViewStore\n}                                                                                from '../../stores/layout/mapview.store';\nimport {\n  ApTranslationService\n}                                                                                from '../../ap-utils/service/ap-translation.service';\nimport {\n  GetRoundNumericPipeConfig\n}                                                                                from '../../ap-utils/pipes/configs/get-round-numeric.pipe.config';\nimport IBasicFertilisationSummaries = Data.TaskManagement.IBasicFertilisationSummaries;\nimport IBasicFertilisationPlanBooks = Data.TaskManagement.IBasicFertilisationPlanBooks;\n\n@Component({\n  selector: 'ap-nutrient-booking',\n  template: `\n    <ap-dyncomponent [caption]=\"'Global__Bookings'\"\n                     [canCreate]=\"false\"\n                     [headerIcon]=\"'ap-icon-base-fertilization'\"\n                     [columns]=\"columns$ | async\"\n                     [items]=\"items$ | async\"\n                     [loading$]=\"loading$\"\n                     [pager]=\"pager\"\n                     (create)=\"onCreate()\"\n                     [selectable]=\"{checkboxOnly: false, mode: 'single'}\">\n    </ap-dyncomponent>\n  `,\n  styles: []\n})\nexport class ApNutrientManagementBookingComponent implements OnInit, OnDestroy, AfterContentInit {\n  @ViewChild(ApDynComponentComponent, {static: true}) dynComponent: ApDynComponentComponent;\n  public loading$: Observable<boolean>;\n  public items$: Observable<any>;\n  public columns$: Observable<ApDynGridColumnConfigBase[]>;\n  public pager: ApDynGridPagerConfig;\n  private _statisticUpdateRequested = new EventEmitter<void>();\n\n  private _subscriptions: Subscription[] = [];\n  private _isOnCreatePressed = false;\n\n  constructor(private mapStore: MapStore,\n              private formStore: FormStore,\n              private fieldStore: FieldStore,\n              private loginStore: LoginStore,\n              private languageStore: LanguageStore,\n              private settingsStore: SettingsStore,\n              private dateService: ApDateService,\n              private nutrientStore: NutrientStore,\n              private statisticStore: StatisticStore,\n              private fertilizerStore: FertilizerStore,\n              private translationStore: TranslationStore,\n              private cropRotationStore: CropRotationStore,\n              private campaignYearStore: CampaignYearStore,\n              private basicFertilisationSummariesStore: BasicFertilisationSummariesStore,\n              private elementService: GetElementService,\n              private nutrientService: ApNutrientService,\n              private operationModeService: GetOperationModeService,\n              private tooltipContentService: ApTooltipContentService,\n              private nutrientManagementService: NutrientManagementService,\n              private nutrientStatisticService: ApNutrientStatisticService,\n              private baseFertilizationCommonService: BaseFertilizationCommonService,\n              private fertilizerService: FertilizerService,\n              private roundNumericPipe: GetRoundNumericPipe,\n              private fieldArchiveStore: FieldArchiveStore,\n              private mapViewStore: MapViewStore,\n              private translationService: ApTranslationService) {\n  }\n\n  public ngOnInit(): void {\n    this.statisticStore.removeStatisticData();\n    this.fieldStore.changeSelectedField([]);\n    this.columns$ = this._getColumns();\n    this.pager = this._getPager();\n    this.items$ = this._getItems();\n    this.loading$ = combineLatest([\n      this.fieldStore.Listen(s => s.loading),\n      this.languageStore.Listen(s => s.loading),\n      this.settingsStore.Listen(s => s.loading),\n      this.basicFertilisationSummariesStore.Listen(s => s.loading),\n      this.cropRotationStore.HistoryLoading$\n    ]).pipe(\n      map(loadingItems => loadingItems.some(x => x))\n    );\n  }\n\n  public ngAfterContentInit(): void {\n    this._subscriptions.push(this.campaignYearStore.Listen(s => s.selectedYear).pipe(skip(1)).subscribe(() => {\n      this.basicFertilisationSummariesStore.loadBasicFertilisationSummaries();\n    }));\n    this._subscriptions.push(this.dynComponent.SelectedItems$.subscribe(_ => this._selectionChange()));\n    this._subscriptions.push(this.formStore.FormClose$.subscribe(() => {\n      // trigger refresh of selection and map after entryComponent (e.g. 'NEW') closed\n      if (this._isOnCreatePressed) {\n        this._isOnCreatePressed = false;\n        setTimeout(() => this._selectionChange(), 1);\n        this._handleLegendsAndLayers(this.dynComponent.getSelectedItems().length);\n      }\n    }));\n    this._subscriptions.push(this.mapStore.Layers.OnLayerChange.subscribe(() => {\n      this._handleLegendsAndLayers(this.dynComponent.getSelectedItems().length);\n    }));\n    this._subscriptions.push(this._statisticUpdateRequested.pipe(\n      debounceTime(100)).subscribe(_ => this._generateStats()));\n    this._subscriptions.push(this.items$.subscribe(_ => this._statisticUpdateRequested.emit()));\n    this._subscriptions.push(\n      combineLatest([\n        this.mapViewStore.Listen(s => s.mode),\n        this.mapViewStore.Listen(s => s.currentMenu)\n      ]).subscribe(([mapMode, mapMenu]) => {\n          if (mapMode !== MapViewMode.HIDE && mapMenu === MapViewCurrentMenu.STATS) {\n            this._statisticUpdateRequested.emit();\n          }\n        }\n      ));\n  }\n\n  public ngOnDestroy(): void {\n    this.baseFertilizationCommonService.revertLegends();\n    this._subscriptions.forEach(s => s?.unsubscribe());\n    this.statisticStore.removeStatisticData();\n    this.fieldStore.changeSelectedField([]);\n  }\n\n  public onCreate(): void {\n    this.statisticStore.removeStatisticData();\n    this.formStore.openForm({\n      component: ApNutrientPlanningComponent,\n      data: {\n        Summary: null,\n        Type: PlanningEntryComponentDataType.Create\n      }\n    });\n    this._isOnCreatePressed = true;\n  }\n\n  private _selectionChange(): void {\n    if (!this.dynComponent?.dynGrid?.gridPaging) {\n      return;\n    }\n    const selectedSummaries = this.dynComponent.dynGrid.gridPaging.selectedItems;\n    if (selectedSummaries && selectedSummaries.length > 0) {\n      this.baseFertilizationCommonService.onSelectionChange(selectedSummaries[0]['SourceItem'] as IBasicFertilisationSummaries, true);\n    } else {\n      this.baseFertilizationCommonService.onSelectionChange(null, true);\n    }\n    this._statisticUpdateRequested.emit();\n  }\n\n  private _getColumns(): Observable<ApDynGridColumnConfigBase[]> {\n    const gridPopupOptions = [\n      {\n        text: 'Global__Show',\n        callback: ApUtilService.createEventEmitter(this._onOneShow.bind(this), this._subscriptions)\n      },\n      {\n        text: 'Global__Reset',\n        callback: ApUtilService.createEventEmitter(this._onOneReset.bind(this), this._subscriptions)\n      },\n    ];\n\n    if (ApRoleTypeService.hasAgriconRole(this.loginStore.User)) {\n      gridPopupOptions.Add({\n        text: 'Global__Download',\n        callback: ApUtilService.createEventEmitter(this._onDownloadPackage.bind(this), this._subscriptions)\n      });\n    }\n\n    return combineLatest([\n      this.languageStore.Listen(s => s.selectedLanguage),\n      this.settingsStore.Listen(s => s.data),\n    ]).pipe(\n      filter(([language, settings]) => !!language && !!settings[0]),\n      map(([language, settings]) => ({language, setting: settings[0]})),\n      map((_) => [\n        new ApDynGridStatusColumnConfig({\n          field: 'Status',\n          class: 'StatusClass',\n          description: 'StatusDesc',\n          filterable: true\n        }),\n        new ApDynGridPropertyColumnConfig({\n          field: 'ApplicationDate',\n          title: 'Nutrients__FertilizationDate',\n          tooltip: (dataItem) => dataItem['ApplicationDateTooltip'],\n          dynCssClass: (dataItem) => dataItem['ApplicationDateItalic'] ? ' italic' : '',\n          hide: true,\n          width: 80,\n          filterable: true,\n          sortIndex: 1,\n          sortDesc: true,\n          format: this.languageStore.CurrentDateFormat\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Global__Product',\n          field: 'Product',\n          width: 100,\n          filterable: true,\n          tooltip: (dataItem) => dataItem['ProductTooltip']\n        }),\n        new ApDynGridGroupColumnConfig({\n          title: `${this.translationStore.FindTranslationForSelectedLanguage('Nutrients__Average_Amount_Goods')} / ${this.translationStore.FindTranslationForSelectedLanguage('Global__Remaining_Need_Two_Short')}`,\n          headerStyle: {'text-align': 'center'},\n          groupColumns: [\n            new ApDynGridPropertyColumnConfig({\n              field: 'Amount',\n              width: 60,\n              cssClass: 'right',\n              filterType: FilterType.NUMBER,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              field: 'AmountUnit',\n              width: 40\n            })\n          ]\n        }),\n        new ApDynGridPropertyColumnConfig({\n          field: 'Count',\n          title: 'Global__Amount',\n          width: 60,\n          filterable: true,\n          tooltip: (dataItem) => dataItem?.FieldsTooltip,\n          cssClass: 'right',\n          filterType: FilterType.NUMBER,\n        }),\n        new ApDynGridPropertyColumnConfig({\n          field: 'Area',\n          title: 'Global__Area_Unit',\n          width: 60,\n          headerFilterable: true,\n          cssClass: 'right',\n          filterType: FilterType.NUMBER,\n          tooltip: (dataItem) => dataItem['AreaOriginal'],\n          pipes: [{\n            pipe: this.roundNumericPipe,\n            args: [this.settingsStore.FirstSetting.DigitsAfterDecimalPoint]\n          }]\n        }),\n        new ApDynGridGroupColumnConfig({\n          title: this.translationStore.FindTranslationForSelectedLanguage('Global__Sum_Goods'),\n          headerStyle: {'text-align': 'center'},\n          hide: true,\n          groupColumns: [\n            new ApDynGridPropertyColumnConfig({\n              field: 'Sum',\n              hide: true,\n              width: 60,\n              tooltip: (dataItem) => dataItem['SumTooltip'],\n              cssClass: 'right',\n              filterType: FilterType.NUMBER,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              field: 'SumUnit',\n              width: 60,\n              hide: true\n            })\n          ]\n        }),\n        new ApDynGridPropertyColumnConfig({\n          field: 'LeadNutrient',\n          title: 'AgriConnect__Nutrient',\n          width: 80,\n          filterable: true\n        }),\n        new ApDynGridGroupColumnConfig({\n          title: 'Global__Average_Symbol_Nutrient_kg_ha',\n          groupColumns: [\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.P),\n              field: 'P',\n              cssClass: 'right',\n              filterType: FilterType.NUMBER,\n              width: 60,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullAndZeroToEmptyReplaceConfig]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.K),\n              field: 'K',\n              cssClass: 'right',\n              filterType: FilterType.NUMBER,\n              width: 60,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullAndZeroToEmptyReplaceConfig]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: this.elementService.GetElementStringByString(ApElementType.Mg),\n              field: 'Mg',\n              cssClass: 'right',\n              filterType: FilterType.NUMBER,\n              width: 60,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullAndZeroToEmptyReplaceConfig]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: 'Nutrients__CaO',\n              field: 'CaO',\n              cssClass: 'right',\n              filterType: FilterType.NUMBER,\n              width: 60,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0, GetRoundNumericPipeConfig.NullAndZeroToEmptyReplaceConfig]\n              }]\n            }),\n          ]\n        }),\n        new ApDynGridGroupColumnConfig({\n          title: 'Global__Good_ha',\n          hide: true,\n          groupColumns: [\n            new ApDynGridPropertyColumnConfig({\n              title: 'Min',\n              field: 'Min',\n              cssClass: 'right',\n              filterType: FilterType.NUMBER,\n              width: 60,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0]\n              }]\n            }),\n            new ApDynGridPropertyColumnConfig({\n              title: 'Max',\n              field: 'Max',\n              cssClass: 'right',\n              filterType: FilterType.NUMBER,\n              width: 60,\n              pipes: [{\n                pipe: this.roundNumericPipe,\n                args: [0]\n              }]\n            }),\n          ]\n        }),\n        new ApDynGridPropertyColumnConfig({\n          title: 'Global__Note',\n          field: 'Note',\n          hide: true,\n          cssClass: 'left',\n          width: 100\n        }),\n        new ApDynGridEditColumnConfig({\n          data: gridPopupOptions\n        })\n      ]));\n  }\n\n  private _getItems(): Observable<any> {\n    return combineLatest([\n      this.basicFertilisationSummariesStore.Summaries$,\n      this.fieldStore.Listen(s => s.data),\n      this.cropRotationStore.GetHistory$,\n      this.fieldArchiveStore.Listen(s => s.loaded)\n    ]).pipe(\n      filter(([summaries, fields, cropRotationHistory, fieldArchiveLoaded]) => {\n        return !!summaries && !!fields && !!cropRotationHistory && fieldArchiveLoaded;\n      }),\n      map(([summaries]) => {\n        return summaries.filter(_ => !!_.BasicFertilisationPlanBooks.Find(x => x.BookedBy != null)).map((summary) => {\n          const area = this.nutrientManagementService.getArea(summary, true);\n          const sum = this.nutrientManagementService.getCalculateSumFertilizer(summary, true);\n          const productTooltip = this.tooltipContentService.getProductContentInfoTooltip(this._getProductId(summary));\n          const fertilizer = this.fertilizerStore.getFertilizer(this._getProductId(summary));\n          const fertilizerUnit = this.fertilizerService.getFertilizerUnit(fertilizer);\n          const sumTooltip = this.roundNumericPipe.transform(sum, this.settingsStore.FirstSetting.DigitsAfterDecimalPoint) + ' ' + fertilizerUnit;\n          const bandIdX0 = this.nutrientStatisticService.getAverageNutrientFromStatistics(0, summary, true);\n          const bandIdX1 = this.nutrientStatisticService.getAverageNutrientFromStatistics(1, summary, true);\n          const bandIdX2 = this.nutrientStatisticService.getAverageNutrientFromStatistics(2, summary, true);\n          const bandIdX3 = this.nutrientStatisticService.getAverageNutrientFromStatistics(3, summary, true);\n          const planBookApplicationDates = this.baseFertilizationCommonService.getApplicationDatesData(summary.BasicFertilisationPlanBooks, true);\n          return {\n            Id: summary.Id,\n            SourceItem: summary,\n            Status: this.nutrientService.getFertilizerStatus(summary.User_Appl_Mode, true)?.state,\n            StatusClass: this.nutrientService.getFertilizerStatus(summary.User_Appl_Mode, true)?.class,\n            StatusDesc: this.nutrientService.getFertilizerStatusDescription(summary.User_Appl_Mode, true),\n            Count: this.baseFertilizationCommonService.getPlanBooksFieldsCount(summary.BasicFertilisationPlanBooks, true),\n            Area: area,\n            Product: this.fertilizerService.getFertilizerProductName(fertilizer),\n            ProductTooltip: productTooltip,\n            ApplicationDate: planBookApplicationDates.NewestDate,\n            ApplicationDateTooltip: planBookApplicationDates.Tooltip,\n            ApplicationDateItalic: planBookApplicationDates.IsMoreThanOneUniqDate,\n            Note: summary.Title,\n            Amount: summary.User_Appl_Rate,\n            AmountUnit: summary.User_Appl_Unit?.Id === 1\n              ? this.fertilizerService.getFertilizerUnit(fertilizer, true)\n              : this.translationStore.FindTranslationForSelectedLanguage(summary.User_Appl_Unit?.Key),\n            Sum: sum,\n            SumUnit: fertilizerUnit,\n            SumTooltip: sumTooltip,\n            LeadNutrient: this.baseFertilizationCommonService.getLeadNutrient(summary),\n            OperationMode: this.operationModeService.GetOperationMode(summary.User_Operation_Mode),\n            BookDate: this.dateService.getDateMidnight(summary.BasicFertilisationPlanBooks.FindLast(x => x.BookedBy != null).BookedAt),\n            P: this.elementService.CalculateElementOxidValueByGivenElementValue(bandIdX0, ApElementOxydTypeEnum.P),\n            K: this.elementService.CalculateElementOxidValueByGivenElementValue(bandIdX1, ApElementOxydTypeEnum.K),\n            Mg: this.elementService.CalculateElementOxidValueByGivenElementValue(bandIdX2, ApElementOxydTypeEnum.Mg),\n            CaO: bandIdX3,\n            Min: this.nutrientManagementService.getMin(summary, true),\n            Max: this.nutrientManagementService.getMax(summary, true),\n            Statistic: summary.Statistic,\n            PlanNumber: summary.PlanNumber,\n            FieldsTooltip: this.baseFertilizationCommonService.getFieldCropsTooltip(summary.BasicFertilisationPlanBooks, true)\n          };\n        });\n      })\n    );\n  }\n\n  private _getPager(): ApDynGridPagerConfig {\n    const pagerOptions = [\n      {\n        text: 'Global__Planing_Reset',\n        callback: ApUtilService.createEventEmitter(this._onReset.bind(this), this._subscriptions)\n      }\n    ];\n    const iconOptions = [\n      {\n        icon: Icon.PDF,\n        callback: ApUtilService.createEventEmitter(this._onPdf.bind(this), this._subscriptions),\n        tooltip: 'Global__Save_PDF'\n      },\n      {\n        icon: Icon.XLS,\n        callback: ApUtilService.createEventEmitter(this._onXls.bind(this), this._subscriptions),\n        tooltip: 'Global__Save_EXCEL'\n      }\n    ];\n    return PagerBuilder.NutrientManagementPager(pagerOptions, iconOptions);\n  }\n\n  private _getProductId(summary: IBasicFertilisationSummaries): number | null {\n    return summary.BasicFertilisationPlanBooks[0]?.Product_Id;\n  }\n\n  private _handleLegendsAndLayers(selectedItems: number): void {\n    this.baseFertilizationCommonService.handleLegends(selectedItems ?? 0);\n    // in order to show the geometry of the planning we reuse the taskmanagement layer\n    this.mapStore.Layers.TaskManagementLayer.Visibility = this.mapStore.Layers.NutrientPlanningLayer?.Visibility;\n  }\n\n  private _onDownloadPackage(dataItem: any): void {\n    const summary = dataItem['SourceItem'] as IBasicFertilisationSummaries;\n    this.nutrientStore.createNutrientPlanningPackage(summary.Id);\n  }\n\n  private _onXls(): void {\n    this.dynComponent.dynGrid.xlsExportFileName = this.generatePrintFilename();\n    this.dynComponent.dynGrid.exportAsXls();\n  }\n\n  private _onPdf(): void {\n    this.dynComponent.dynGrid.pdfExportFileName = this.generatePrintFilename();\n    this.dynComponent.dynGrid.exportAsPdf();\n  }\n\n  private generatePrintFilename(): string {\n    return this.dateService.toFarmDate(new Date()).format('YYYY-MM-DD') + '_' +\n      this.translationStore.FindTranslationForSelectedLanguage('Global__Plannings');\n  }\n\n  private _onReset(dataItem: any): void {\n    if (dataItem.items === null || dataItem.items === undefined) {\n      return;\n    }\n    this._onOneReset(dataItem.items[0]);\n  }\n\n  private _onOneShow(dataItem: any): void {\n    this.dynComponent.dynGrid.gridPaging.setSelectedKeys([dataItem.Id]);\n    this.baseFertilizationCommonService.redirectSummaryToShowView(dataItem.Id, true, 'nutrients/booking');\n  }\n\n  private _onOneReset(dataItem: any): void {\n    this.dynComponent.dynGrid.gridPaging.setSelectedKeys([dataItem.Id]);\n    this.baseFertilizationCommonService.unbookPlanBooks(dataItem.SourceItem, dataItem.Field?.Id);\n  }\n\n  /**\n   * Generates the statistic charts for the selected planbooks.\n   * Grouped by product (=series)\n   * Grouped by Month/Year (=category/y-axis)\n   * @private\n   */\n  private _generateStats(): void {\n    if (this.mapViewStore.getMapViewCurrentMenu() !== MapViewCurrentMenu.STATS || this.mapViewStore.getMapViewMode() === MapViewMode.HIDE) {\n      return;\n    }\n    const title = `${this.translationService.translate('Global__Bookings')}`;\n    let items = this.dynComponent.getSelectedItems() as any[];\n    if (!items || items?.length === 0) {\n      items = this.dynComponent.items as any[];\n    }\n    if (!items || items?.length === 0) {\n      this.statisticStore.setStatisticData<GenericChartConfig>(\n        [], ApStatsType.GenericBars, title, title\n      );\n      return;\n    }\n\n    const chartConfigs: GenericChartConfig[] = [];\n    let planBooks = items?.map(item => item?.SourceItem.BasicFertilisationPlanBooks).flat() as IBasicFertilisationPlanBooks[];\n    planBooks = planBooks?.filter(pB => pB?.BookedAt != null && pB.DeletedAt == null);\n\n    const chartConfig = this.baseFertilizationCommonService.generateStatChartConfig(planBooks);\n    chartConfigs.push(chartConfig);\n\n    this.statisticStore.setStatisticData<GenericChartConfig>(\n      chartConfigs, ApStatsType.GenericChart, title, title\n    );\n  }\n}\n","import {NgModule}                              from '@angular/core';\nimport {CommonModule}                          from '@angular/common';\nimport {ApNutrientManagementRoutes}            from './ap-nutrient-management.routes';\nimport {\n  BodyModule,\n  ExcelModule,\n  GridModule,\n  GroupModule,\n  HeaderModule,\n  PagerModule,\n  PDFModule,\n  SharedModule\n}                                              from '@progress/kendo-angular-grid';\nimport {ApCoreModule}                          from '../ap-core/ap-core.module';\nimport {ApIconModule}                          from '../icons/ap-icon.module';\nimport {ButtonModule}                          from '@progress/kendo-angular-buttons';\nimport {ApTranslationModule}                   from '../translation/ap-translation.module';\nimport {ApSoilSamplePlanningOverviewComponent} from './components/ap-soilsampleplanning-overview.component';\nimport {ApNutrientDistributionComponent}       from './components/ap-nutrient-distribution.component';\nimport {ApUtilsModule}                         from '../ap-utils';\nimport {PDFExportModule}                       from '@progress/kendo-angular-pdf-export';\nimport {ApTooltipModule}                       from '../ap-tooltip/ap-tooltip.module';\nimport {ApResponsiveTextModule}                from '../ap-responsive-text/ap-responsive-text.module';\nimport {ApSectionHeaderModule}                 from '../ap-section-header/ap-section-header.module';\nimport {ApDynComponentModule}                  from '../ap-dyncomponent/ap-dyncomponent.module';\nimport {ApNutrientManagementOverviewComponent} from './components/ap-nutrient-management-overview.component';\nimport {ApNutrientPNeedComponent}              from './components/ap-nutrient-p-need.component';\nimport {ApNutrientManagementPlanningComponent} from './components/ap-nutrient-management-planning.component';\nimport {ApNutrientManagementBookingComponent}  from './components/ap-nutrient-management-booking.component';\nimport {ApPermissionModule}                    from '../ap-permission/ap-permission.module';\nimport {ApGetCropTypeNamePipe}                 from './pipes/ap-get-croptype-name.pipe';\n\n@NgModule({\n  declarations: [\n    ApSoilSamplePlanningOverviewComponent,\n    ApNutrientDistributionComponent,\n    ApNutrientManagementOverviewComponent,\n    ApNutrientPNeedComponent,\n    ApNutrientManagementPlanningComponent,\n    ApNutrientManagementBookingComponent,\n    ApGetCropTypeNamePipe\n  ],\n  imports: [\n    CommonModule,\n    GridModule,\n    ApCoreModule,\n    ApIconModule,\n    ApNutrientManagementRoutes,\n    ApTranslationModule,\n    ApUtilsModule,\n    ButtonModule,\n    PDFModule,\n    PagerModule,\n    BodyModule,\n    HeaderModule,\n    SharedModule,\n    ExcelModule,\n    PDFExportModule,\n    ApTooltipModule,\n    ApResponsiveTextModule,\n    ApSectionHeaderModule,\n    GroupModule,\n    ApDynComponentModule,\n    ApPermissionModule\n  ],\n  exports: [ApGetCropTypeNamePipe],\n  providers: [ApGetCropTypeNamePipe]\n})\nexport class ApNutrientManagementModule {\n}\n","import {Injectable}        from '@angular/core';\nimport {CampaignYearStore} from '../../stores/login/campaignyear.store';\nimport ISoilSampleField = Data.Nutrients.ISoilSampleField;\n\n@Injectable({providedIn: 'root'})\nexport class ApSoilSampleService {\n  constructor(private campaignYearStore: CampaignYearStore) {\n  }\n\n  public getFieldNumberAndSubNumber(soilSampleField: ISoilSampleField): string {\n    if (soilSampleField.FieldNumber !== null) {\n      if (soilSampleField.FieldPart !== null) {\n        return `${soilSampleField.FieldNumber} - ${soilSampleField.FieldPart}`;\n      } else {\n        return `${soilSampleField.FieldNumber}`;\n      }\n    } else {\n      if (soilSampleField.FieldPart !== null) {\n        return `  - ${soilSampleField.FieldPart}`;\n      } else {\n        return '';\n      }\n    }\n  }\n\n  public getStatus(sampleDate: Date | string): number {\n    if (!sampleDate) {\n      return -1;\n    }\n    if (typeof sampleDate === typeof '') {\n      sampleDate = new Date(sampleDate as string);\n    }\n    const difference = this.campaignYearStore.getSelectedCampaignYear().Year - this.getCampaignYear(sampleDate as Date);\n    if (difference > 5) {\n      return -1;\n    } else if (difference > 3) {\n      return 0;\n    }\n    return 1;\n  }\n\n  public getCampaignYear(sampleDate: Date): number {\n    if (!sampleDate) {\n      return undefined;\n    }\n    if (sampleDate.getMonth() > 5) {\n      return sampleDate.getFullYear() + 1;\n    }\n    return sampleDate.getFullYear();\n  }\n}\n","import {Injectable}                                                     from '@angular/core';\nimport {ApStatsType, IBarLineAreaChartData, IBarLineAreaChartDataValue} from '../../ap-interface';\nimport {Create}                                                         from 'ts-tooling';\nimport {ChartSetValueType, IChartSet, StatisticStore}                   from '../../stores/statistic/statistic.store';\nimport {\n  TranslationStore\n}                                                                       from '../../stores/translation/translation.store';\nimport {SettingsStore}                                                  from '../../stores/base-data/settings.store';\nimport {ApDateService}                                                  from '../../ap-core/services/ap-date-service';\nimport {LandUseStore}                                                   from '../../stores/base-data/landuse.store';\nimport {\n  FieldNutrientDistributionStore\n}                                                                       from '../../stores/nutrients/field-nutrient-distributions.store';\nimport {\n  SoilGroupFormatService\n}                                                                       from '../../ap-utils/service/soil-group-format.service';\nimport {\n  GetSoilSampleClassColorService\n}                                                                       from '../../ap-utils/service/get-soil-sample-class-color.service';\nimport {GetSoilSampleClassNamePipe}                                     from '../../ap-utils';\nimport IGuid = System.IGuid;\nimport IHistogram = Data.Nutrients.IHistogram;\n\nexport interface IFieldStatisticHistogramData {\n  Status: number;\n  FieldId: IGuid;\n  FieldName: string;\n  AreaHa: number;\n  Histograms: IHistogram[];\n}\n\n@Injectable({providedIn: 'root'})\nexport class FieldStatisticHistogramService {\n  constructor(private settings: SettingsStore,\n              private landUseStore: LandUseStore,\n              private statisticStore: StatisticStore,\n              private translationStore: TranslationStore,\n              private fieldNutrientDistributionStore: FieldNutrientDistributionStore,\n              private dateService: ApDateService,\n              private soilGroupFormatService: SoilGroupFormatService,\n              private soilSampleClassColorService: GetSoilSampleClassColorService,\n              private soilSampleClassNamePipe: GetSoilSampleClassNamePipe) {\n  }\n\n  public generateHistogramStatistic(title: string, items: IFieldStatisticHistogramData[]): void {\n    if (!items || items.length <= 0) {\n      this.statisticStore.setStatisticData([], ApStatsType.Nutrients, '', title);\n      return;\n    }\n\n    this.statisticStore.setStatisticData(this.getHistogramStatistic(items), ApStatsType.Nutrients, title, 'Nutrient__Select_SoilSampleField');\n  }\n\n  public getHistogramStatistic(items: IFieldStatisticHistogramData[]): IChartSet<IBarLineAreaChartData>[] {\n    if (!items || items.length <= 0) {\n      return [];\n    }\n\n    const areaSum = items.Reduce((target, e) => Create(e.AreaHa, 0) + target, 0);\n    return [\n      ...this._createStatistic('Nutrient__Band_ClassP', ChartSetValueType.CLASS, areaSum, items),\n      ...this._createStatistic('Nutrient__Band_ClassK', ChartSetValueType.CLASS, areaSum, items),\n      ...this._createStatistic('Nutrient__Band_ClassMg', ChartSetValueType.CLASS, areaSum, items),\n      ...this._createStatistic('Nutrient__Band_ClassPh', ChartSetValueType.CLASS, areaSum, items),\n      ...this._createStatistic('Nutrient__Band_SoilPlanningYear', ChartSetValueType.DATE, areaSum, items),\n      ...this._createStatistic('Nutrient__Band_SoilGroup', ChartSetValueType.SOIL_GROUP, areaSum, items),\n      ...this._createStatistic('Nutrient__Band_Region', ChartSetValueType.REGION, areaSum, items),\n      ...this._createStatistic('Nutrient__Band_TypeOfUse', ChartSetValueType.LANDUSE, areaSum, items),\n      ...this._createStatistic('Nutrient__Band_MethodP', ChartSetValueType.METHOD, areaSum, items),\n      ...this._createStatistic('Nutrient__Band_MethodK', ChartSetValueType.METHOD, areaSum, items),\n      ...this._createStatistic('Nutrient__Band_MethodMg', ChartSetValueType.METHOD, areaSum, items),\n      ...this._createStatistic('Nutrient__Band_MethodPh', ChartSetValueType.METHOD, areaSum, items),\n    ];\n  }\n\n  private _createStatistic(name: string, type: ChartSetValueType, areaSum: number, selected: IFieldStatisticHistogramData[]): IChartSet<IBarLineAreaChartData>[] {\n    if (!selected || !selected.Any()) {\n      return [];\n    }\n    let soilPlanningYears: { date: number, category: number }[] = [];\n    let fieldSoilPlanningYears: { fieldId: IGuid, dates: { date: string, percent: number }[] }[] = [];\n    if (type === ChartSetValueType.DATE) {\n      soilPlanningYears = selected.Reduce((target, e) => {\n        const hist = e.Histograms.Find(el => el.Key === name);\n        if (!hist) {\n          return target;\n        }\n        for (const val of hist.Values) {\n          if (target.Any(el => el.category === e.Status && el.date === val)) {\n            continue;\n          }\n          target.Add({category: e.Status, date: val});\n        }\n        return target;\n      }, [] as { date: number, category: number }[]);\n      fieldSoilPlanningYears = selected.Reduce((target, e) => {\n        const hist = e.Histograms.Find(el => el.Key === name);\n        if (!hist) {\n          return target;\n        }\n        for (const key in hist.Values) {\n          if (!hist.Values.hasOwnProperty(key)) {\n            continue;\n          }\n          const year = hist.Values[key];\n          const cells = hist.Counters[key];\n          const dateName = this._mapDate(year);\n          const found = target.FindIndex(t => t.fieldId === e.FieldId);\n          if (found < 0) {\n            target.Add({\n              fieldId: e.FieldId,\n              dates: [\n                {\n                  date: dateName,\n                  percent: cells,\n                },\n              ],\n            });\n            continue;\n          }\n          if (!target[found].dates.Any(d => d.date === dateName)) {\n            target[found].dates.Add({\n              date: dateName,\n              percent: cells,\n            });\n          }\n        }\n        return target;\n      }, [] as { fieldId: IGuid, dates: { date: string, percent: number }[] }[]);\n      for (const item of fieldSoilPlanningYears) {\n        const allCells = item.dates.map(el => el.percent).Sum();\n        for (const date of item.dates) {\n          date.percent = date.percent * 100 / allCells;\n        }\n      }\n    }\n    let max = 0;\n    if (type === ChartSetValueType.CLASS) {\n      max = selected.Reduce((target, e) => {\n        const counters = e.Histograms.Find(el => el.Key === name).Counters;\n        for (const key in counters) {\n          if (!counters.hasOwnProperty(key)) {\n            continue;\n          }\n          if (counters[key] > 0 && counters.Sum() > 0) {\n            const tmp = counters[key] / counters.Sum();\n            target[key] += tmp * e.AreaHa;\n          }\n        }\n        return target;\n      }, new Array(selected[0].Histograms.Find(el => el.Key === name).Counters.length).fill(0))\n        .Max();\n      max = max + (20 * max / 100);\n    }\n    const res: IChartSet<IBarLineAreaChartData>[] = [];\n    for (const dis of selected) {\n      const hist = dis.Histograms.Find(e => e.Key === name);\n      if (!hist) {\n        continue;\n      }\n      res.Add({\n        valueType: type,\n        axes: this.soilSampleClassColorService.getStatisticAxesConfig(type, undefined, max),\n        step: 1,\n        data: {\n          title: name,\n          name,\n          categories: hist.Values.Convert((e: any) => {\n            switch (type) {\n              case ChartSetValueType.CLASS:\n                return this.soilSampleClassNamePipe.transform(e);\n              case ChartSetValueType.REGION:\n                return this._mapSampleRegion(e);\n              case ChartSetValueType.METHOD:\n                return this._mapSampleMethods(e);\n              case ChartSetValueType.SOIL_GROUP:\n                return this.soilGroupFormatService.mapSingle(e);\n              case ChartSetValueType.LANDUSE:\n                return this._mapLanduse(e);\n              case ChartSetValueType.DATE:\n                return dis.Status;\n              default:\n                return e.toString();\n            }\n          }),\n          data: hist.Counters.Convert((e: any) => {\n            switch (type) {\n              case ChartSetValueType.CLASS:\n                return {\n                  value: dis && e > 0 ?\n                    e / hist.Counters.Sum() * Create(dis.AreaHa, 0) :\n                    0,\n                } as IBarLineAreaChartDataValue;\n              default:\n                return {\n                  value: e,\n                } as IBarLineAreaChartDataValue;\n            }\n          }),\n        },\n        decimalPlaces: this.settings.FirstSetting.DigitsAfterDecimalPoint,\n        color: (p) => {\n          switch (type) {\n            case ChartSetValueType.CLASS:\n              return this.soilSampleClassColorService.getColor(p.category);\n            case ChartSetValueType.DATE:\n              switch (p) {\n                case -1:\n                  return '#980000';\n                case 0:\n                  return '#fdce3e';\n                case 1:\n                  return '#5ec232';\n                default:\n                  return undefined;\n              }\n            case ChartSetValueType.SOIL_GROUP:\n              return this.soilGroupFormatService.colorCode(p);\n            default:\n              return undefined;\n          }\n        },\n        meta: {\n          fieldId: dis.FieldId,\n          years: soilPlanningYears.map(item => {\n            return {category: item.category, date: this._mapDate(item.date)};\n          }),\n          // die fieldSoilPlanningYears werden nur 1x ausgelesen → nur 1x im Statistik objekt halten\n          // Objekt kann sonst sehr groß werden\n          fieldYears: res.length === 0 ? fieldSoilPlanningYears : undefined,\n          areaSum,\n        }\n      });\n    }\n    return res;\n  }\n\n  private _mapSampleMethods(value: number): string {\n    const method = this.fieldNutrientDistributionStore.SampleMethods.Find(e => e.Id === value);\n    if (!method) {\n      return value.toString();\n    }\n    return this.translationStore.FindTranslationForSelectedLanguage(method.Method);\n  }\n\n  private _mapSampleRegion(value: number): string {\n    const region = this.fieldNutrientDistributionStore.SampleRegions.Find(e => e.Id === value);\n    if (!region) {\n      return value.toString();\n    }\n    return this.translationStore.FindTranslationForSelectedLanguage(region.Region);\n  }\n\n  private _mapLanduse(value: number): string {\n    const landuse = this.landUseStore.LandUse.Find(e => e.Id === value);\n    if (!landuse) {\n      return value.toString();\n    }\n    return this.translationStore.FindTranslationForSelectedLanguage(landuse.Key);\n  }\n\n  private _mapDate(value: number): string {\n    return this.dateService.toFarmDate(new Date(parseInt(value.toString() + '000', 10))).format('YYYY');\n  }\n}\n"],"sourceRoot":"webpack:///","file":"739.25138cd6faae51c1.js"}