From a25dc9361083e546aa2706ae3042b8770e0ab1bb Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Thu, 16 Feb 2023 15:17:31 -0700 Subject: [PATCH] Viewer to Server --- .editorconfig | 1 + .gitignore | 2 +- .groovy | 266 - .vscode/launch.json | 53 +- .vscode/tasks.json | 104 +- Archive/.editorconfig | 243 + .../ApiControllers/AttachmentsController.cs | 10 +- .../ApiControllers/AwaitingDispoController.cs | 14 +- Archive/ApiControllers/InboundController.cs | 26 +- Archive/ApiControllers/ReactorsController.cs | 99 + Archive/ApiControllers/ToolTypesController.cs | 34 +- Archive/Controllers/ErrorHandlerController.cs | 4 +- Archive/Controllers/ExportController.cs | 13 +- Archive/Controllers/PagesController.cs | 12 +- Archive/Models/AppSettings.cs | 67 +- Archive/Models/Binder/AppSettings.cs | 33 + ...ive.csproj => OI.Metrology.Archive.csproj} | 37 +- Archive/Program.cs | 19 +- Archive/Repositories/MetrologyRepo.cs | 98 +- Archive/Services/AttachmentsService.cs | 28 +- Archive/Services/InboundDataService.cs | 22 +- .../Views/Pages/Reactor.cshtml | 305 +- Jenkinsfile | 266 - OI-Metrology.sln | 8 +- {Viewer => Server}/.vscode/launch.json | 8 +- .../.vscode/settings.json | 0 Server/.vscode/tasks.json | 75 + .../ApiControllers/AppSettingsController.cs | 23 + .../ApiControllers/AttachmentsController.cs | 33 +- .../ApiControllers/AwaitingDispoController.cs | 30 +- .../ClientSettingsController.cs | 29 + Server/ApiControllers/InboundController.cs | 78 + Server/ApiControllers/PinController.cs | 33 + .../ServiceShopOrderController.cs | 46 + Server/ApiControllers/ToolTypesController.cs | 110 + {Viewer => Server}/ApiLoggingMiddleware.cs | 13 +- .../Controllers/ErrorHandlerController.cs | 10 +- .../Controllers/ExportController.cs | 58 +- .../Controllers/PagesController.cs | 42 +- Server/Data/Mike/service-shop.json | 8035 +++++++++++++++++ .../Tests/GetAllServiceShopOrdersApi.json | 1 + Server/Data/Tests/GetAppSettingsApi.json | 1 + .../Data/Tests/GetAwaitingDispositionApi.json | 1742 ++++ .../GetBuildNumberAndGitCommitSevenApi.json | 1 + Server/Data/Tests/GetClientSettingsApi.json | 1 + Server/Data/Tests/GetDataApi.json | 1 + Server/Data/Tests/GetExportDataApi.json | 1 + Server/Data/Tests/GetHeaderFieldsApi.json | 89 + Server/Data/Tests/GetHeaderTitlesApi.json | 21 + Server/Data/Tests/GetHeadersApi.json | 1 + Server/Data/Tests/GetIpAddressApi.json | 0 Server/Data/Tests/GetPinnedTableApi.json | 6 + Server/Data/Tests/GetToolTypeMetadataApi.json | 334 + Server/Data/Tests/IndexApi.json | 29 + Server/Models/AppSettings.cs | 32 + Server/Models/Binder/AppSettings.cs | 113 + Server/OI.Metrology.Server.csproj | 110 + {Viewer => Server}/Program.cs | 48 +- Server/Properties/launchSettings.json | 31 + Server/Repositories/AppSettingsRepository.cs | 36 + .../Repositories/ClientSettingsRepository.cs | 36 + Server/Repositories/InboundRepository.cs | 88 + .../Repositories/MetrologyRepository.cs | 236 +- Server/Repositories/PinRepository.cs | 120 + .../ServiceShopOrderRepository.cs | 56 + Server/Repositories/ToolTypesRepository.cs | 340 + .../Services/AttachmentsService.cs | 54 +- .../Services/InboundDataService.cs | 29 +- .../Services}/SQLDbConnectionFactory.cs | 9 +- {Viewer => Server}/Views/Export/Index.cshtml | 6 +- Server/Views/Pages/AwaitingDispo.cshtml | 28 + {Viewer => Server}/Views/Pages/Home.cshtml | 0 Server/Views/Pages/RunHeaders.cshtml | 57 + Server/Views/Pages/RunInfo.cshtml | 85 + .../Views/Shared/_Layout.cshtml | 3 +- {Viewer => Server}/Views/_ViewImports.cshtml | 0 {Viewer => Server}/Views/_ViewStart.cshtml | 0 .../appsettings.Development.json | 34 +- {Viewer => Server}/appsettings.json | 6 +- {Viewer => Server}/compilerconfig.json | 0 .../compilerconfig.json.defaults | 0 .../wwwroot/igniteui/css/README.ja.md | 0 .../wwwroot/igniteui/css/README.md | 0 .../css/structure/fonts/jquery-ui.eot | Bin .../css/structure/fonts/jquery-ui.svg | 0 .../css/structure/fonts/jquery-ui.ttf | Bin .../css/structure/fonts/jquery-ui.woff | Bin .../css/structure/images/icon_sprite.png | Bin .../css/structure/images/igBrowserLogos.png | Bin .../css/structure/images/igGrid/blank.png | Bin .../images/igGrid/diagonals-medium.png | Bin .../images/igGrid/filter-icons-333333.png | Bin .../images/igGrid/filter-icons-FFFFFF.png | Bin .../igGrid/group-by-label-right-edge.png | Bin .../images/igGrid/indicators-icon-on.svg | 0 .../images/igGrid/indicators-icon.svg | 0 .../images/igGrid/overlay-icon-on.svg | 0 .../structure/images/igGrid/overlay-icon.svg | 0 .../structure/images/igGrid/touch-icons.png | Bin .../structure/images/igGrid/touch-icons.svg | 0 .../images/igHtmlEditor/arrow_collapse.png | Bin .../images/igHtmlEditor/arrow_expand.png | Bin .../images/igHtmlEditor/arrow_redo.png | Bin .../images/igHtmlEditor/arrow_undo.png | Bin .../images/igHtmlEditor/background_color.png | Bin .../structure/images/igHtmlEditor/check.png | Bin .../css/structure/images/igHtmlEditor/cut.png | Bin .../igHtmlEditor/decrease-font-size.png | Bin .../igHtmlEditor/html-editor-sprite.png | Bin .../structure/images/igHtmlEditor/html.png | Bin .../images/igHtmlEditor/html_add.png | Bin .../images/igHtmlEditor/html_delete.png | Bin .../structure/images/igHtmlEditor/html_go.png | Bin .../images/igHtmlEditor/html_valid.png | Bin .../images/igHtmlEditor/image_add.png | Bin .../igHtmlEditor/increase-font-size.png | Bin .../structure/images/igHtmlEditor/link.png | Bin .../images/igHtmlEditor/link_add.png | Bin .../images/igHtmlEditor/link_break.png | Bin .../images/igHtmlEditor/page_copy.png | Bin .../images/igHtmlEditor/page_paste.png | Bin .../igHtmlEditor/table-delete-column-icon.png | Bin .../igHtmlEditor/table-insert-column-icon.png | Bin .../structure/images/igHtmlEditor/table.png | Bin .../images/igHtmlEditor/table_row_delete.png | Bin .../images/igHtmlEditor/table_row_insert.png | Bin .../images/igHtmlEditor/text_align_center.png | Bin .../igHtmlEditor/text_align_justify.png | Bin .../images/igHtmlEditor/text_align_left.png | Bin .../images/igHtmlEditor/text_align_right.png | Bin .../images/igHtmlEditor/text_bold.png | Bin .../images/igHtmlEditor/text_color.png | Bin .../igHtmlEditor/text_horizontalrule.png | Bin .../images/igHtmlEditor/text_indent.png | Bin .../igHtmlEditor/text_indent_remove.png | Bin .../images/igHtmlEditor/text_italic.png | Bin .../images/igHtmlEditor/text_list_bullets.png | Bin .../images/igHtmlEditor/text_list_numbers.png | Bin .../igHtmlEditor/text_strikethrough.png | Bin .../images/igHtmlEditor/text_underline.png | Bin .../css/structure/images/igLoadingSmall.gif | Bin .../images/igPivot/dataselector-sprite.png | Bin .../structure/images/igPivot/kpi-icons.png | Bin .../images/igPivot/pivot-header-icons.png | Bin .../images/igPopover/igPopoverArrowBottom.png | Bin .../images/igPopover/igPopoverArrowLeft.png | Bin .../images/igPopover/igPopoverArrowRight.png | Bin .../images/igPopover/igPopoverArrowTop.png | Bin .../images/igPopover/igPopoverArrows.png | Bin .../images/igRating/ig-rating-touch.png | Bin .../images/igRating/ig-rating-touchx2.png | Bin .../css/structure/images/igScroll/up.png | Bin .../structure/images/igScroll/up_active.png | Bin .../images/igVideoPlayer/igBigPauseButton.png | Bin .../images/igVideoPlayer/igBigPlayButton.png | Bin .../images/igVideoPlayer/igLoadingSmall.gif | Bin .../images/igVideoPlayer/igPlayButton24.png | Bin .../images/igVideoPlayer/igPlayButton32.png | Bin .../images/igVideoPlayer/igPlayButton48.png | Bin .../images/igVideoPlayer/igVPBackground.png | Bin .../igVideoPlayer/igVPBookmarkSprite.png | Bin .../images/igVideoPlayer/igWarningIcon.png | Bin .../igniteui/css/structure/images/trial.png | Bin .../structure/images/ui-anim_basic_16x16.gif | Bin .../igniteui/css/structure/infragistics.css | 0 .../modules/infragistics.ui.barcode.css | 0 .../modules/infragistics.ui.bulletgraph.css | 0 .../modules/infragistics.ui.categorychart.css | 0 .../modules/infragistics.ui.chart.css | 0 .../modules/infragistics.ui.chart.legacy.css | 0 .../modules/infragistics.ui.colorpicker.css | 0 .../modules/infragistics.ui.combo.css | 0 .../modules/infragistics.ui.dialog.css | 0 .../modules/infragistics.ui.editors.css | 0 .../infragistics.ui.financialchart.css | 0 .../modules/infragistics.ui.grid.css | 0 .../modules/infragistics.ui.html5.css | 0 .../modules/infragistics.ui.htmleditor.css | 0 .../modules/infragistics.ui.layout.css | 0 .../modules/infragistics.ui.lineargauge.css | 0 .../structure/modules/infragistics.ui.map.css | 0 .../modules/infragistics.ui.notifier.css | 0 .../modules/infragistics.ui.pivot.css | 0 .../modules/infragistics.ui.popover.css | 0 .../modules/infragistics.ui.radialgauge.css | 0 .../modules/infragistics.ui.radialmenu.css | 0 .../modules/infragistics.ui.rating.css | 0 .../modules/infragistics.ui.scheduler.css | 0 .../modules/infragistics.ui.scroll.css | 0 .../modules/infragistics.ui.shapechart.css | 0 .../modules/infragistics.ui.shared.css | 0 .../modules/infragistics.ui.sparkline.css | 0 .../modules/infragistics.ui.splitbutton.css | 0 .../modules/infragistics.ui.splitter.css | 0 .../modules/infragistics.ui.spreadsheet.css | 0 .../modules/infragistics.ui.tilemanager.css | 0 .../modules/infragistics.ui.toolbar.css | 0 .../modules/infragistics.ui.toolbarbutton.css | 0 .../modules/infragistics.ui.tree.css | 0 .../modules/infragistics.ui.treegrid.css | 0 .../modules/infragistics.ui.upload.css | 0 .../modules/infragistics.ui.validator.css | 0 .../modules/infragistics.ui.videoplayer.css | 0 .../modules/infragistics.ui.zoombar.css | 0 .../css/structure/modules/licensing.css | 0 .../wwwroot/igniteui/css/themes/README.ja.md | 0 .../wwwroot/igniteui/css/themes/README.md | 0 .../css/themes/bootstrap3/README.ja.md | 0 .../igniteui/css/themes/bootstrap3/README.md | 0 .../themes/bootstrap3/default/framework.less | 0 .../bootstrap3/default/icons-styles.css | 0 .../default/ignite-ui-variables.less | 0 .../bootstrap3/default/images/icon_sprite.png | Bin .../images/igGrid/filter-icons-333333.png | Bin .../images/igGrid/filter-icons-FFFFFF.png | Bin .../default/images/igRating/ig-rating.png | Bin .../images/igSpreadsheet/ig-Spreadsheet.png | Bin .../images/igVideoPlayer/igVPBackground.png | Bin .../igVideoPlayer/igVPBookmarkSprite.png | Bin .../igVideoPlayer/igVideoPlayerIcons.png | Bin .../default/images/ui-anim_basic_16x16.gif | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_888888_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../bootstrap3/default/infragistics.theme.css | 0 .../default/infragistics.theme.less | 0 .../default/infragistics.theme.min.css | 0 .../css/themes/bootstrap3/default/mixins.less | 0 .../base/infragistics.ui.checkbox.less | 0 .../modules/infragistics.ui.chart.less | 0 .../infragistics.ui.chart.toolbar.less | 0 .../modules/infragistics.ui.combo.less | 0 .../modules/infragistics.ui.dialog.less | 0 .../modules/infragistics.ui.editors.less | 0 .../default/modules/infragistics.ui.grid.less | 0 .../modules/infragistics.ui.notifier.less | 0 .../modules/infragistics.ui.pivot.less | 0 .../modules/infragistics.ui.popover.less | 0 .../modules/infragistics.ui.rating.less | 0 .../modules/infragistics.ui.scheduler.less | 0 .../modules/infragistics.ui.splitter.less | 0 .../modules/infragistics.ui.spreadsheet.less | 0 .../modules/infragistics.ui.tilemanager.less | 0 .../default/modules/infragistics.ui.tree.less | 0 .../modules/infragistics.ui.treegrid.less | 0 .../modules/infragistics.ui.upload.less | 0 .../modules/infragistics.ui.videoplayer.less | 0 .../bootstrap3/default/modules/modules.less | 0 .../default/style-guide/style-guide | 0 .../default/style-guide/style-guide.css | 0 .../default/style-guide/style-guide.html | 0 .../themes/bootstrap3/default/variables.less | 0 .../themes/bootstrap3/flatly/framework.less | 0 .../themes/bootstrap3/flatly/icons-styles.css | 0 .../flatly/ignite-ui-variables.less | 0 .../bootstrap3/flatly/images/icon_sprite.png | Bin .../images/igGrid/filter-icons-333333.png | Bin .../images/igGrid/filter-icons-FFFFFF.png | Bin .../flatly/images/igRating/ig-rating.png | Bin .../images/igSpreadsheet/ig-Spreadsheet.png | Bin .../images/igVideoPlayer/igVPBackground.png | Bin .../igVideoPlayer/igVPBookmarkSprite.png | Bin .../igVideoPlayer/igVideoPlayerIcons.png | Bin .../flatly/images/ui-anim_basic_16x16.gif | Bin .../flatly/images/ui-icons_222222_256x240.png | Bin .../flatly/images/ui-icons_888888_256x240.png | Bin .../flatly/images/ui-icons_ffffff_256x240.png | Bin .../bootstrap3/flatly/infragistics.theme.css | 0 .../bootstrap3/flatly/infragistics.theme.less | 0 .../css/themes/bootstrap3/flatly/mixins.less | 0 .../base/infragistics.ui.checkbox.less | 0 .../flatly/modules/infragistics.ui.chart.less | 0 .../infragistics.ui.chart.toolbar.less | 0 .../flatly/modules/infragistics.ui.combo.less | 0 .../modules/infragistics.ui.dialog.less | 0 .../modules/infragistics.ui.editors.less | 0 .../flatly/modules/infragistics.ui.grid.less | 0 .../modules/infragistics.ui.notifier.less | 0 .../flatly/modules/infragistics.ui.pivot.less | 0 .../modules/infragistics.ui.popover.less | 0 .../modules/infragistics.ui.rating.less | 0 .../modules/infragistics.ui.scheduler.less | 0 .../modules/infragistics.ui.splitter.less | 0 .../modules/infragistics.ui.spreadsheet.less | 0 .../modules/infragistics.ui.tilemanager.less | 0 .../flatly/modules/infragistics.ui.tree.less | 0 .../modules/infragistics.ui.treegrid.less | 0 .../modules/infragistics.ui.upload.less | 0 .../modules/infragistics.ui.videoplayer.less | 0 .../bootstrap3/flatly/modules/modules.less | 0 .../bootstrap3/flatly/style-guide/style-guide | 0 .../flatly/style-guide/style-guide.css | 0 .../flatly/style-guide/style-guide.html | 0 .../themes/bootstrap3/flatly/variables.less | 0 .../css/themes/bootstrap3/yeti/framework.less | 0 .../themes/bootstrap3/yeti/icons-styles.css | 0 .../bootstrap3/yeti/ignite-ui-variables.less | 0 .../bootstrap3/yeti/images/icon_sprite.png | Bin .../images/igGrid/filter-icons-333333.png | Bin .../images/igGrid/filter-icons-FFFFFF.png | Bin .../yeti/images/igRating/ig-rating.png | Bin .../igSpreadsheet/spreadsheet-sprite.png | Bin .../images/igVideoPlayer/igVPBackground.png | Bin .../igVideoPlayer/igVPBookmarkSprite.png | Bin .../igVideoPlayer/igVideoPlayerIcons.png | Bin .../yeti/images/ui-anim_basic_16x16.gif | Bin .../yeti/images/ui-icons_222222_256x240.png | Bin .../yeti/images/ui-icons_888888_256x240.png | Bin .../yeti/images/ui-icons_ffffff_256x240.png | Bin .../bootstrap3/yeti/infragistics.theme.css | 0 .../bootstrap3/yeti/infragistics.theme.less | 0 .../css/themes/bootstrap3/yeti/mixins.less | 0 .../base/infragistics.ui.checkbox.less | 0 .../yeti/modules/infragistics.ui.chart.less | 0 .../infragistics.ui.chart.toolbar.less | 0 .../yeti/modules/infragistics.ui.combo.less | 0 .../yeti/modules/infragistics.ui.dialog.less | 0 .../yeti/modules/infragistics.ui.editors.less | 0 .../yeti/modules/infragistics.ui.grid.less | 0 .../modules/infragistics.ui.notifier.less | 0 .../yeti/modules/infragistics.ui.pivot.less | 0 .../yeti/modules/infragistics.ui.popover.less | 0 .../yeti/modules/infragistics.ui.rating.less | 0 .../modules/infragistics.ui.scheduler.less | 0 .../modules/infragistics.ui.splitter.less | 0 .../modules/infragistics.ui.spreadsheet.less | 0 .../modules/infragistics.ui.tilemanager.less | 0 .../yeti/modules/infragistics.ui.tree.less | 0 .../modules/infragistics.ui.treegrid.less | 0 .../yeti/modules/infragistics.ui.upload.less | 0 .../modules/infragistics.ui.videoplayer.less | 0 .../bootstrap3/yeti/modules/modules.less | 0 .../bootstrap3/yeti/style-guide/style-guide | 0 .../yeti/style-guide/style-guide.css | 0 .../yeti/style-guide/style-guide.html | 0 .../css/themes/bootstrap3/yeti/variables.less | 0 .../infragistics.datasource.knockoutjs.js | 0 ...fragistics.ui.combo.knockout-extensions.js | 0 ...istics.ui.datachart.knockout-extensions.js | 0 ...agistics.ui.editors.knockout-extensions.js | 0 ...nfragistics.ui.grid.knockout-extensions.js | 0 ...nfragistics.ui.tree.knockout-extensions.js | 0 .../igniteui/js/i18n/infragistics-bg.js | 0 .../igniteui/js/i18n/infragistics-de.js | 0 .../igniteui/js/i18n/infragistics-en.js | 0 .../igniteui/js/i18n/infragistics-es.js | 0 .../igniteui/js/i18n/infragistics-fr.js | 0 .../igniteui/js/i18n/infragistics-ja.js | 0 .../igniteui/js/i18n/infragistics-ru.js | 0 .../wwwroot/igniteui/js/infragistics.core.js | 0 .../wwwroot/igniteui/js/infragistics.dv.js | 0 .../igniteui/js/infragistics.excel-bundled.js | 0 .../igniteui/js/infragistics.loader.js | 0 .../wwwroot/igniteui/js/infragistics.lob.js | 0 .../js/infragistics.scheduler-bundled.js | 0 .../js/infragistics.spreadsheet-bundled.js | 0 .../encoding/infragistics.encoding.core.js | 0 .../encoding/infragistics.encoding_big5.js | 0 .../encoding/infragistics.encoding_cp437.js | 0 .../encoding/infragistics.encoding_gb2312.js | 0 .../infragistics.encoding_iso-8859-1.js | 0 .../infragistics.encoding_iso-8859-11.js | 0 .../infragistics.encoding_iso-8859-13.js | 0 .../infragistics.encoding_iso-8859-15.js | 0 .../infragistics.encoding_iso-8859-2.js | 0 .../infragistics.encoding_iso-8859-3.js | 0 .../infragistics.encoding_iso-8859-4.js | 0 .../infragistics.encoding_iso-8859-5.js | 0 .../infragistics.encoding_iso-8859-6.js | 0 .../infragistics.encoding_iso-8859-7.js | 0 .../infragistics.encoding_iso-8859-8.js | 0 .../infragistics.encoding_iso-8859-9.js | 0 .../infragistics.encoding_iso646-us.js | 0 .../encoding/infragistics.encoding_ksc5601.js | 0 .../infragistics.encoding_shift_jis.js | 0 .../infragistics.encoding_windows-1250.js | 0 .../infragistics.encoding_windows-1251.js | 0 .../infragistics.encoding_windows-1252.js | 0 .../infragistics.encoding_windows-1256.js | 0 .../i18n/infragistics.datasource-bg.js | 0 .../i18n/infragistics.datasource-de.js | 0 .../i18n/infragistics.datasource-en.js | 0 .../i18n/infragistics.datasource-es.js | 0 .../i18n/infragistics.datasource-fr.js | 0 .../i18n/infragistics.datasource-ja.js | 0 .../i18n/infragistics.datasource-ru.js | 0 .../infragistics.documents.core_core-bg.js | 0 .../infragistics.documents.core_core-de.js | 0 .../infragistics.documents.core_core-en.js | 0 .../infragistics.documents.core_core-es.js | 0 .../infragistics.documents.core_core-fr.js | 0 .../infragistics.documents.core_core-ja.js | 0 .../infragistics.documents.core_core-ru.js | 0 .../i18n/infragistics.dvcommonwidget-bg.js | 0 .../i18n/infragistics.dvcommonwidget-de.js | 0 .../i18n/infragistics.dvcommonwidget-en.js | 0 .../i18n/infragistics.dvcommonwidget-es.js | 0 .../i18n/infragistics.dvcommonwidget-fr.js | 0 .../i18n/infragistics.dvcommonwidget-ja.js | 0 .../i18n/infragistics.dvcommonwidget-ru.js | 0 .../i18n/infragistics.excel_core-bg.js | 0 .../i18n/infragistics.excel_core-de.js | 0 .../i18n/infragistics.excel_core-en.js | 0 .../i18n/infragistics.excel_core-es.js | 0 .../i18n/infragistics.excel_core-fr.js | 0 .../i18n/infragistics.excel_core-ja.js | 0 .../i18n/infragistics.excel_core-ru.js | 0 .../i18n/infragistics.scheduler.core-bg.js | 0 .../i18n/infragistics.scheduler.core-de.js | 0 .../i18n/infragistics.scheduler.core-en.js | 0 .../i18n/infragistics.scheduler.core-es.js | 0 .../i18n/infragistics.scheduler.core-fr.js | 0 .../i18n/infragistics.scheduler.core-ja.js | 0 .../i18n/infragistics.scheduler.core-ru.js | 0 .../js/modules/i18n/infragistics.shared-bg.js | 0 .../js/modules/i18n/infragistics.shared-de.js | 0 .../js/modules/i18n/infragistics.shared-en.js | 0 .../js/modules/i18n/infragistics.shared-es.js | 0 .../js/modules/i18n/infragistics.shared-fr.js | 0 .../js/modules/i18n/infragistics.shared-ja.js | 0 .../js/modules/i18n/infragistics.shared-ru.js | 0 .../i18n/infragistics.spreadsheet-bg.js | 0 .../i18n/infragistics.spreadsheet-de.js | 0 .../i18n/infragistics.spreadsheet-en.js | 0 .../i18n/infragistics.spreadsheet-es.js | 0 .../i18n/infragistics.spreadsheet-fr.js | 0 .../i18n/infragistics.spreadsheet-ja.js | 0 .../i18n/infragistics.spreadsheet-ru.js | 0 .../i18n/infragistics.templating-bg.js | 0 .../i18n/infragistics.templating-de.js | 0 .../i18n/infragistics.templating-en.js | 0 .../i18n/infragistics.templating-es.js | 0 .../i18n/infragistics.templating-fr.js | 0 .../i18n/infragistics.templating-ja.js | 0 .../i18n/infragistics.templating-ru.js | 0 .../i18n/infragistics.ui.barcode-bg.js | 0 .../i18n/infragistics.ui.barcode-de.js | 0 .../i18n/infragistics.ui.barcode-en.js | 0 .../i18n/infragistics.ui.barcode-es.js | 0 .../i18n/infragistics.ui.barcode-fr.js | 0 .../i18n/infragistics.ui.barcode-ja.js | 0 .../i18n/infragistics.ui.barcode-ru.js | 0 .../i18n/infragistics.ui.bulletgraph-bg.js | 0 .../i18n/infragistics.ui.bulletgraph-de.js | 0 .../i18n/infragistics.ui.bulletgraph-en.js | 0 .../i18n/infragistics.ui.bulletgraph-es.js | 0 .../i18n/infragistics.ui.bulletgraph-fr.js | 0 .../i18n/infragistics.ui.bulletgraph-ja.js | 0 .../i18n/infragistics.ui.bulletgraph-ru.js | 0 .../modules/i18n/infragistics.ui.combo-bg.js | 0 .../modules/i18n/infragistics.ui.combo-de.js | 0 .../modules/i18n/infragistics.ui.combo-en.js | 0 .../modules/i18n/infragistics.ui.combo-es.js | 0 .../modules/i18n/infragistics.ui.combo-fr.js | 0 .../modules/i18n/infragistics.ui.combo-ja.js | 0 .../modules/i18n/infragistics.ui.combo-ru.js | 0 .../modules/i18n/infragistics.ui.dialog-bg.js | 0 .../modules/i18n/infragistics.ui.dialog-de.js | 0 .../modules/i18n/infragistics.ui.dialog-en.js | 0 .../modules/i18n/infragistics.ui.dialog-es.js | 0 .../modules/i18n/infragistics.ui.dialog-fr.js | 0 .../modules/i18n/infragistics.ui.dialog-ja.js | 0 .../modules/i18n/infragistics.ui.dialog-ru.js | 0 .../i18n/infragistics.ui.doughnutchart-bg.js | 0 .../i18n/infragistics.ui.doughnutchart-de.js | 0 .../i18n/infragistics.ui.doughnutchart-en.js | 0 .../i18n/infragistics.ui.doughnutchart-es.js | 0 .../i18n/infragistics.ui.doughnutchart-fr.js | 0 .../i18n/infragistics.ui.doughnutchart-ja.js | 0 .../i18n/infragistics.ui.doughnutchart-ru.js | 0 .../i18n/infragistics.ui.editors-bg.js | 0 .../i18n/infragistics.ui.editors-de.js | 0 .../i18n/infragistics.ui.editors-en.js | 0 .../i18n/infragistics.ui.editors-es.js | 0 .../i18n/infragistics.ui.editors-fr.js | 0 .../i18n/infragistics.ui.editors-ja.js | 0 .../i18n/infragistics.ui.editors-ru.js | 0 .../modules/i18n/infragistics.ui.grid-bg.js | 0 .../modules/i18n/infragistics.ui.grid-de.js | 0 .../modules/i18n/infragistics.ui.grid-en.js | 0 .../modules/i18n/infragistics.ui.grid-es.js | 0 .../modules/i18n/infragistics.ui.grid-fr.js | 0 .../modules/i18n/infragistics.ui.grid-ja.js | 0 .../modules/i18n/infragistics.ui.grid-ru.js | 0 .../i18n/infragistics.ui.htmleditor-bg.js | 0 .../i18n/infragistics.ui.htmleditor-de.js | 0 .../i18n/infragistics.ui.htmleditor-en.js | 0 .../i18n/infragistics.ui.htmleditor-es.js | 0 .../i18n/infragistics.ui.htmleditor-fr.js | 0 .../i18n/infragistics.ui.htmleditor-ja.js | 0 .../i18n/infragistics.ui.htmleditor-ru.js | 0 .../i18n/infragistics.ui.lineargauge-bg.js | 0 .../i18n/infragistics.ui.lineargauge-de.js | 0 .../i18n/infragistics.ui.lineargauge-en.js | 0 .../i18n/infragistics.ui.lineargauge-es.js | 0 .../i18n/infragistics.ui.lineargauge-fr.js | 0 .../i18n/infragistics.ui.lineargauge-ja.js | 0 .../i18n/infragistics.ui.lineargauge-ru.js | 0 .../i18n/infragistics.ui.notifier-bg.js | 0 .../i18n/infragistics.ui.notifier-de.js | 0 .../i18n/infragistics.ui.notifier-en.js | 0 .../i18n/infragistics.ui.notifier-es.js | 0 .../i18n/infragistics.ui.notifier-fr.js | 0 .../i18n/infragistics.ui.notifier-ja.js | 0 .../i18n/infragistics.ui.notifier-ru.js | 0 .../i18n/infragistics.ui.pivot.shared-bg.js | 0 .../i18n/infragistics.ui.pivot.shared-de.js | 0 .../i18n/infragistics.ui.pivot.shared-en.js | 0 .../i18n/infragistics.ui.pivot.shared-es.js | 0 .../i18n/infragistics.ui.pivot.shared-fr.js | 0 .../i18n/infragistics.ui.pivot.shared-ja.js | 0 .../i18n/infragistics.ui.pivot.shared-ru.js | 0 .../infragistics.ui.pivotdataselector-bg.js | 0 .../infragistics.ui.pivotdataselector-de.js | 0 .../infragistics.ui.pivotdataselector-en.js | 0 .../infragistics.ui.pivotdataselector-es.js | 0 .../infragistics.ui.pivotdataselector-fr.js | 0 .../infragistics.ui.pivotdataselector-ja.js | 0 .../infragistics.ui.pivotdataselector-ru.js | 0 .../i18n/infragistics.ui.pivotgrid-bg.js | 0 .../i18n/infragistics.ui.pivotgrid-de.js | 0 .../i18n/infragistics.ui.pivotgrid-en.js | 0 .../i18n/infragistics.ui.pivotgrid-es.js | 0 .../i18n/infragistics.ui.pivotgrid-fr.js | 0 .../i18n/infragistics.ui.pivotgrid-ja.js | 0 .../i18n/infragistics.ui.pivotgrid-ru.js | 0 .../i18n/infragistics.ui.popover-bg.js | 0 .../i18n/infragistics.ui.popover-de.js | 0 .../i18n/infragistics.ui.popover-en.js | 0 .../i18n/infragistics.ui.popover-es.js | 0 .../i18n/infragistics.ui.popover-fr.js | 0 .../i18n/infragistics.ui.popover-ja.js | 0 .../i18n/infragistics.ui.popover-ru.js | 0 .../i18n/infragistics.ui.radialgauge-bg.js | 0 .../i18n/infragistics.ui.radialgauge-de.js | 0 .../i18n/infragistics.ui.radialgauge-en.js | 0 .../i18n/infragistics.ui.radialgauge-es.js | 0 .../i18n/infragistics.ui.radialgauge-fr.js | 0 .../i18n/infragistics.ui.radialgauge-ja.js | 0 .../i18n/infragistics.ui.radialgauge-ru.js | 0 .../i18n/infragistics.ui.radialmenu-bg.js | 0 .../i18n/infragistics.ui.radialmenu-de.js | 0 .../i18n/infragistics.ui.radialmenu-en.js | 0 .../i18n/infragistics.ui.radialmenu-es.js | 0 .../i18n/infragistics.ui.radialmenu-fr.js | 0 .../i18n/infragistics.ui.radialmenu-ja.js | 0 .../i18n/infragistics.ui.radialmenu-ru.js | 0 .../modules/i18n/infragistics.ui.rating-bg.js | 0 .../modules/i18n/infragistics.ui.rating-de.js | 0 .../modules/i18n/infragistics.ui.rating-en.js | 0 .../modules/i18n/infragistics.ui.rating-es.js | 0 .../modules/i18n/infragistics.ui.rating-fr.js | 0 .../modules/i18n/infragistics.ui.rating-ja.js | 0 .../modules/i18n/infragistics.ui.rating-ru.js | 0 .../i18n/infragistics.ui.scheduler-bg.js | 0 .../i18n/infragistics.ui.scheduler-de.js | 0 .../i18n/infragistics.ui.scheduler-en.js | 0 .../i18n/infragistics.ui.scheduler-es.js | 0 .../i18n/infragistics.ui.scheduler-fr.js | 0 .../i18n/infragistics.ui.scheduler-ja.js | 0 .../i18n/infragistics.ui.scheduler-ru.js | 0 .../modules/i18n/infragistics.ui.scroll-bg.js | 0 .../modules/i18n/infragistics.ui.scroll-de.js | 0 .../modules/i18n/infragistics.ui.scroll-en.js | 0 .../modules/i18n/infragistics.ui.scroll-es.js | 0 .../modules/i18n/infragistics.ui.scroll-fr.js | 0 .../modules/i18n/infragistics.ui.scroll-ja.js | 0 .../modules/i18n/infragistics.ui.scroll-ru.js | 0 .../i18n/infragistics.ui.splitter-bg.js | 0 .../i18n/infragistics.ui.splitter-de.js | 0 .../i18n/infragistics.ui.splitter-en.js | 0 .../i18n/infragistics.ui.splitter-es.js | 0 .../i18n/infragistics.ui.splitter-fr.js | 0 .../i18n/infragistics.ui.splitter-ja.js | 0 .../i18n/infragistics.ui.splitter-ru.js | 0 .../i18n/infragistics.ui.tilemanager-bg.js | 0 .../i18n/infragistics.ui.tilemanager-de.js | 0 .../i18n/infragistics.ui.tilemanager-en.js | 0 .../i18n/infragistics.ui.tilemanager-es.js | 0 .../i18n/infragistics.ui.tilemanager-fr.js | 0 .../i18n/infragistics.ui.tilemanager-ja.js | 0 .../i18n/infragistics.ui.tilemanager-ru.js | 0 .../i18n/infragistics.ui.toolbar-bg.js | 0 .../i18n/infragistics.ui.toolbar-de.js | 0 .../i18n/infragistics.ui.toolbar-en.js | 0 .../i18n/infragistics.ui.toolbar-es.js | 0 .../i18n/infragistics.ui.toolbar-fr.js | 0 .../i18n/infragistics.ui.toolbar-ja.js | 0 .../i18n/infragistics.ui.toolbar-ru.js | 0 .../modules/i18n/infragistics.ui.tree-bg.js | 0 .../modules/i18n/infragistics.ui.tree-de.js | 0 .../modules/i18n/infragistics.ui.tree-en.js | 0 .../modules/i18n/infragistics.ui.tree-es.js | 0 .../modules/i18n/infragistics.ui.tree-fr.js | 0 .../modules/i18n/infragistics.ui.tree-ja.js | 0 .../modules/i18n/infragistics.ui.tree-ru.js | 0 .../i18n/infragistics.ui.treegrid-bg.js | 0 .../i18n/infragistics.ui.treegrid-de.js | 0 .../i18n/infragistics.ui.treegrid-en.js | 0 .../i18n/infragistics.ui.treegrid-es.js | 0 .../i18n/infragistics.ui.treegrid-fr.js | 0 .../i18n/infragistics.ui.treegrid-ja.js | 0 .../i18n/infragistics.ui.treegrid-ru.js | 0 .../modules/i18n/infragistics.ui.upload-bg.js | 0 .../modules/i18n/infragistics.ui.upload-de.js | 0 .../modules/i18n/infragistics.ui.upload-en.js | 0 .../modules/i18n/infragistics.ui.upload-es.js | 0 .../modules/i18n/infragistics.ui.upload-fr.js | 0 .../modules/i18n/infragistics.ui.upload-ja.js | 0 .../modules/i18n/infragistics.ui.upload-ru.js | 0 .../i18n/infragistics.ui.validator-bg.js | 0 .../i18n/infragistics.ui.validator-de.js | 0 .../i18n/infragistics.ui.validator-en.js | 0 .../i18n/infragistics.ui.validator-es.js | 0 .../i18n/infragistics.ui.validator-fr.js | 0 .../i18n/infragistics.ui.validator-ja.js | 0 .../i18n/infragistics.ui.validator-ru.js | 0 .../i18n/infragistics.ui.videoplayer-bg.js | 0 .../i18n/infragistics.ui.videoplayer-de.js | 0 .../i18n/infragistics.ui.videoplayer-en.js | 0 .../i18n/infragistics.ui.videoplayer-es.js | 0 .../i18n/infragistics.ui.videoplayer-fr.js | 0 .../i18n/infragistics.ui.videoplayer-ja.js | 0 .../i18n/infragistics.ui.videoplayer-ru.js | 0 .../i18n/infragistics.ui.zoombar-bg.js | 0 .../i18n/infragistics.ui.zoombar-de.js | 0 .../i18n/infragistics.ui.zoombar-en.js | 0 .../i18n/infragistics.ui.zoombar-es.js | 0 .../i18n/infragistics.ui.zoombar-fr.js | 0 .../i18n/infragistics.ui.zoombar-ja.js | 0 .../i18n/infragistics.ui.zoombar-ru.js | 0 .../js/modules/i18n/infragistics.undo-bg.js | 0 .../js/modules/i18n/infragistics.undo-de.js | 0 .../js/modules/i18n/infragistics.undo-en.js | 0 .../js/modules/i18n/infragistics.undo-es.js | 0 .../js/modules/i18n/infragistics.undo-fr.js | 0 .../js/modules/i18n/infragistics.undo-ja.js | 0 .../js/modules/i18n/infragistics.undo-ru.js | 0 .../js/modules/i18n/infragistics.util-bg.js | 0 .../js/modules/i18n/infragistics.util-de.js | 0 .../js/modules/i18n/infragistics.util-en.js | 0 .../js/modules/i18n/infragistics.util-es.js | 0 .../js/modules/i18n/infragistics.util-fr.js | 0 .../js/modules/i18n/infragistics.util-ja.js | 0 .../js/modules/i18n/infragistics.util-ru.js | 0 .../regional/infragistics.ui.regional-af.js | 0 .../regional/infragistics.ui.regional-ar.js | 0 .../regional/infragistics.ui.regional-az.js | 0 .../regional/infragistics.ui.regional-bg.js | 0 .../regional/infragistics.ui.regional-bs.js | 0 .../regional/infragistics.ui.regional-ca.js | 0 .../regional/infragistics.ui.regional-cs.js | 0 .../regional/infragistics.ui.regional-da.js | 0 .../regional/infragistics.ui.regional-de.js | 0 .../regional/infragistics.ui.regional-el.js | 0 .../infragistics.ui.regional-en-GB.js | 0 .../regional/infragistics.ui.regional-en.js | 0 .../infragistics.ui.regional-es-419.js | 0 .../infragistics.ui.regional-es-MX.js | 0 .../regional/infragistics.ui.regional-es.js | 0 .../regional/infragistics.ui.regional-et.js | 0 .../regional/infragistics.ui.regional-fa.js | 0 .../regional/infragistics.ui.regional-fi.js | 0 .../regional/infragistics.ui.regional-fo.js | 0 .../infragistics.ui.regional-fr-CH.js | 0 .../regional/infragistics.ui.regional-fr.js | 0 .../regional/infragistics.ui.regional-he.js | 0 .../regional/infragistics.ui.regional-hr.js | 0 .../regional/infragistics.ui.regional-hu.js | 0 .../regional/infragistics.ui.regional-hy.js | 0 .../regional/infragistics.ui.regional-i18n.js | 0 .../regional/infragistics.ui.regional-id.js | 0 .../regional/infragistics.ui.regional-is.js | 0 .../regional/infragistics.ui.regional-it.js | 0 .../regional/infragistics.ui.regional-ja.js | 0 .../regional/infragistics.ui.regional-ko.js | 0 .../regional/infragistics.ui.regional-lt.js | 0 .../regional/infragistics.ui.regional-lv.js | 0 .../regional/infragistics.ui.regional-ms.js | 0 .../regional/infragistics.ui.regional-nl.js | 0 .../regional/infragistics.ui.regional-no.js | 0 .../regional/infragistics.ui.regional-pl.js | 0 .../infragistics.ui.regional-pt-BR.js | 0 .../regional/infragistics.ui.regional-ro.js | 0 .../regional/infragistics.ui.regional-ru.js | 0 .../regional/infragistics.ui.regional-sk.js | 0 .../regional/infragistics.ui.regional-sl.js | 0 .../regional/infragistics.ui.regional-sq.js | 0 .../infragistics.ui.regional-sr-SR.js | 0 .../regional/infragistics.ui.regional-sr.js | 0 .../regional/infragistics.ui.regional-sv.js | 0 .../regional/infragistics.ui.regional-ta.js | 0 .../regional/infragistics.ui.regional-th.js | 0 .../regional/infragistics.ui.regional-tr.js | 0 .../regional/infragistics.ui.regional-uk.js | 0 .../regional/infragistics.ui.regional-vi.js | 0 .../infragistics.ui.regional-zh-CN.js | 0 .../infragistics.ui.regional-zh-HK.js | 0 .../infragistics.ui.regional-zh-TW.js | 0 .../js/modules/infragistics.barcode_core.js | 0 .../infragistics.barcode_qrcodebarcode.js | 0 .../js/modules/infragistics.bulletgraph.js | 0 .../js/modules/infragistics.categorychart.js | 0 .../infragistics.datachart_annotation.js | 0 .../infragistics.datachart_category.js | 0 .../infragistics.datachart_categorycore.js | 0 .../js/modules/infragistics.datachart_core.js | 0 .../infragistics.datachart_domainChart.js | 0 .../infragistics.datachart_extendedaxes.js | 0 ...nfragistics.datachart_extendedfinancial.js | 0 .../infragistics.datachart_financial.js | 0 .../infragistics.datachart_interactivity.js | 0 .../modules/infragistics.datachart_polar.js | 0 .../modules/infragistics.datachart_radial.js | 0 .../infragistics.datachart_rangecategory.js | 0 .../modules/infragistics.datachart_scatter.js | 0 .../modules/infragistics.datachart_shape.js | 0 .../modules/infragistics.datachart_stacked.js | 0 ...infragistics.datachart_verticalcategory.js | 0 .../infragistics.datachart_visualdata.js | 0 .../js/modules/infragistics.datasource.js | 0 .../infragistics.documents.core_core.js | 0 .../infragistics.documents.core_openxml.js | 0 .../js/modules/infragistics.doughnutchart.js | 0 .../js/modules/infragistics.dv_core.js | 0 .../infragistics.dv_dataseriesadapter.js | 0 .../js/modules/infragistics.dv_datasource.js | 0 .../js/modules/infragistics.dv_description.js | 0 .../js/modules/infragistics.dv_geo.js | 0 .../js/modules/infragistics.dv_geometry.js | 0 .../modules/infragistics.dv_interactivity.js | 0 .../js/modules/infragistics.dv_jquerydom.js | 0 .../js/modules/infragistics.dv_opd.js | 0 .../js/modules/infragistics.dv_visualdata.js | 0 .../js/modules/infragistics.dvcommonwidget.js | 0 .../js/modules/infragistics.excel_core.js | 0 .../modules/infragistics.excel_functions.js | 0 .../infragistics.excel_serialization_biff8.js | 0 ...nfragistics.excel_serialization_openxml.js | 0 .../modules/infragistics.ext_collections.js | 0 .../infragistics.ext_collectionsextended.js | 0 .../js/modules/infragistics.ext_core.js | 0 .../js/modules/infragistics.ext_io.js | 0 .../js/modules/infragistics.ext_text.js | 0 .../js/modules/infragistics.ext_threading.js | 0 .../js/modules/infragistics.ext_ui.js | 0 .../js/modules/infragistics.ext_web.js | 0 .../js/modules/infragistics.ext_xml.js | 0 .../js/modules/infragistics.financialchart.js | 0 .../js/modules/infragistics.funnelchart.js | 0 .../infragistics.geographicmap_core.js | 0 .../modules/infragistics.gridexcelexporter.js | 0 .../js/modules/infragistics.legend.js | 0 .../js/modules/infragistics.lineargauge.js | 0 .../igniteui/js/modules/infragistics.olap.js | 0 .../infragistics.olapdatasource.doc.js | 0 .../infragistics.olapflatdatasource.js | 0 .../infragistics.olapxmladatasource.js | 0 .../js/modules/infragistics.piechart.js | 0 .../js/modules/infragistics.radialgauge.js | 0 .../js/modules/infragistics.radialmenu.js | 0 .../js/modules/infragistics.scheduler.core.js | 0 .../js/modules/infragistics.shapechart.js | 0 .../js/modules/infragistics.sparkline.js | 0 .../js/modules/infragistics.spreadsheet.js | 0 .../js/modules/infragistics.templating.js | 0 .../js/modules/infragistics.ui.barcode.js | 0 .../js/modules/infragistics.ui.basechart.js | 0 .../js/modules/infragistics.ui.bulletgraph.js | 0 .../modules/infragistics.ui.categorychart.js | 0 .../js/modules/infragistics.ui.chart.js | 0 .../modules/infragistics.ui.chart.template.js | 0 .../js/modules/infragistics.ui.chartlegend.js | 0 .../js/modules/infragistics.ui.colorpicker.js | 0 .../infragistics.ui.colorpickersplitbutton.js | 0 .../js/modules/infragistics.ui.combo.js | 0 .../js/modules/infragistics.ui.dialog.js | 0 .../modules/infragistics.ui.doughnutchart.js | 0 .../js/modules/infragistics.ui.editors.js | 0 .../modules/infragistics.ui.financialchart.js | 0 .../js/modules/infragistics.ui.funnelchart.js | 0 ...infragistics.ui.grid.appendrowsondemand.js | 0 .../infragistics.ui.grid.cellmerging.js | 0 .../infragistics.ui.grid.columnfixing.js | 0 .../infragistics.ui.grid.columnmoving.js | 0 .../infragistics.ui.grid.featurechooser.js | 0 .../modules/infragistics.ui.grid.filtering.js | 0 .../modules/infragistics.ui.grid.framework.js | 0 .../modules/infragistics.ui.grid.groupby.js | 0 .../js/modules/infragistics.ui.grid.hiding.js | 0 .../infragistics.ui.grid.hierarchical.js | 0 ...infragistics.ui.grid.multicolumnheaders.js | 0 .../js/modules/infragistics.ui.grid.paging.js | 0 .../modules/infragistics.ui.grid.resizing.js | 0 .../infragistics.ui.grid.responsive.js | 0 .../infragistics.ui.grid.rowselectors.js | 0 .../modules/infragistics.ui.grid.selection.js | 0 .../js/modules/infragistics.ui.grid.shared.js | 0 .../modules/infragistics.ui.grid.sorting.js | 0 .../modules/infragistics.ui.grid.summaries.js | 0 .../modules/infragistics.ui.grid.tooltips.js | 0 .../modules/infragistics.ui.grid.updating.js | 0 .../js/modules/infragistics.ui.htmleditor.js | 0 .../modules/infragistics.ui.layoutmanager.js | 0 .../js/modules/infragistics.ui.lineargauge.js | 0 .../js/modules/infragistics.ui.map.js | 0 .../modules/infragistics.ui.map.template.js | 0 .../js/modules/infragistics.ui.notifier.js | 0 .../modules/infragistics.ui.pivot.shared.js | 0 .../infragistics.ui.pivotdataselector.js | 0 .../js/modules/infragistics.ui.pivotgrid.js | 0 .../js/modules/infragistics.ui.pivotview.js | 0 .../js/modules/infragistics.ui.popover.js | 0 .../modules/infragistics.ui.qrcodebarcode.js | 0 .../js/modules/infragistics.ui.radialgauge.js | 0 .../js/modules/infragistics.ui.radialmenu.js | 0 .../js/modules/infragistics.ui.rating.js | 0 .../modules/infragistics.ui.scheduler.core.js | 0 .../js/modules/infragistics.ui.scheduler.js | 0 .../js/modules/infragistics.ui.scroll.js | 0 .../js/modules/infragistics.ui.shapechart.js | 0 .../js/modules/infragistics.ui.shared.js | 0 .../js/modules/infragistics.ui.sparkline.js | 0 .../js/modules/infragistics.ui.splitbutton.js | 0 .../js/modules/infragistics.ui.splitter.js | 0 .../js/modules/infragistics.ui.spreadsheet.js | 0 .../js/modules/infragistics.ui.tilemanager.js | 0 .../js/modules/infragistics.ui.toolbar.js | 0 .../modules/infragistics.ui.toolbarbutton.js | 0 .../js/modules/infragistics.ui.tree.js | 0 .../infragistics.ui.treegrid.columnfixing.js | 0 .../infragistics.ui.treegrid.columnmoving.js | 0 .../infragistics.ui.treegrid.filtering.js | 0 .../infragistics.ui.treegrid.hiding.js | 0 .../js/modules/infragistics.ui.treegrid.js | 0 ...agistics.ui.treegrid.multicolumnheaders.js | 0 .../infragistics.ui.treegrid.paging.js | 0 .../infragistics.ui.treegrid.resizing.js | 0 .../infragistics.ui.treegrid.rowselectors.js | 0 .../infragistics.ui.treegrid.selection.js | 0 .../infragistics.ui.treegrid.sorting.js | 0 .../infragistics.ui.treegrid.tooltips.js | 0 .../infragistics.ui.treegrid.updating.js | 0 .../js/modules/infragistics.ui.upload.js | 0 .../js/modules/infragistics.ui.validator.js | 0 .../js/modules/infragistics.ui.videoplayer.js | 0 .../js/modules/infragistics.ui.widget.js | 0 .../js/modules/infragistics.ui.zoombar.js | 0 .../js/modules/infragistics.ui.zoomslider.js | 0 .../igniteui/js/modules/infragistics.undo.js | 0 .../js/modules/infragistics.util.jquery.js | 0 .../igniteui/js/modules/infragistics.util.js | 0 .../igniteui/js/modules/infragistics.xml.js | 0 .../modules/infragistics.zoomslider_core.js | 0 .../wwwroot/images/IFX_LOGO_RGB.png | Bin .../wwwroot/images/print-icon.gif | Bin .../images/ui-icons_444444_256x240.png | Bin .../images/ui-icons_555555_256x240.png | Bin .../images/ui-icons_777620_256x240.png | Bin .../images/ui-icons_777777_256x240.png | Bin .../images/ui-icons_cc0000_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin {Viewer => Server}/wwwroot/js/bootstrap.js | 0 .../wwwroot/js/bootstrap.min.js | 0 {Viewer => Server}/wwwroot/js/common.js | 12 +- .../wwwroot/js/jquery-3.2.1.minbackup.js | 0 .../wwwroot/js/jquery-3.6.0.min.js | 0 .../wwwroot/js/jquery-ui.min.js | 0 {Viewer => Server}/wwwroot/js/jquery.min.js | 0 {Viewer => Server}/wwwroot/js/jquery.min.map | 0 .../wwwroot/js/modernizr-3.6.0-custom.js | 0 {Viewer => Server}/wwwroot/js/respond.js | 0 {Viewer => Server}/wwwroot/js/respond.min.js | 0 Server/wwwroot/js/site.js | 637 ++ Server/wwwroot/styles/Site.css | 134 + .../wwwroot/styles/bootstrap.css | 0 .../wwwroot/styles/bootstrap.min.css | 0 .../wwwroot/styles/jquery-ui.min.css | 0 .../styles/jquery-ui.structure.min.css | 0 .../wwwroot/styles/jquery-ui.theme.min.css | 0 Shared/DataModels/AwaitingDisposition.cs | 18 + Shared/DataModels/ColumnValue.cs | 9 + Shared/DataModels/HeaderCommon.cs | 23 +- Shared/DataModels/Pinned.cs | 47 + Shared/DataModels/Result.cs | 7 + Shared/DataModels/ToolTypeMetadataResult.cs | 18 + Shared/DataModels/ToolTypeNameId.cs | 9 + .../Infineon/Monitoring/MonA/ExtWebClient.cs | 2 +- Shared/Models/AdditionalData.cs | 7 + Shared/Models/AllowedActions.cs | 9 + Shared/Models/Booking.cs | 18 + Shared/Models/Catalog.cs | 9 + Shared/Models/DataResponse.cs | 19 + Shared/Models/Order.cs | 26 + Shared/Models/Price.cs | 7 + Shared/Models/Service.cs | 20 + Shared/Models/ServiceShop.cs | 8 + .../Stateless/IAppSettingsController.cs | 15 + .../Stateless/IAppSettingsRepository.cs | 9 + .../Stateless/IAwaitingDispoController.cs | 18 + .../Stateless/IClientSettingsController.cs | 16 + .../Stateless/IClientSettingsRepository.cs | 11 + Shared/Models/Stateless/IInboundController.cs | 17 + Shared/Models/Stateless/IInboundRepository.cs | 14 + Shared/Models/Stateless/IMethodName.cs | 10 + .../Stateless/IMetrologyRepository.cs} | 13 +- Shared/Models/Stateless/IPinController.cs | 16 + Shared/Models/Stateless/IPinRepository.cs | 11 + Shared/Models/Stateless/IServiceShopOrder.cs | 11 + .../Stateless/IServiceShopOrderController.cs | 15 + .../Stateless/IServiceShopOrderRepository.cs | 9 + .../Models/Stateless/IToolTypesController.cs | 21 + .../Models/Stateless/IToolTypesRepository.cs | 20 + Shared/Models/Stateless/ServiceShopOrder.cs | 16 + Shared/Models/TencorRunHeaders.cs | 5 - ...ared.csproj => OI.Metrology.Shared.csproj} | 7 +- Shared/ViewModels/ServiceShopOrder.cs | 37 + Tests/.vscode/settings.json | 3 + Tests/Models/Binder/AppSettings.cs | 4 +- ...Tests.csproj => OI.Metrology.Tests.csproj} | 32 +- Tests/UnitAwaitingDispoController.cs | 104 + Tests/UnitInboundController.cs | 57 + Tests/UnitTestAppSettingsController.cs | 102 + Tests/UnitTestArchive.cs | 158 +- Tests/UnitTestClientSettingsController.cs | 92 + Tests/UnitTestExample.cs | 52 - Tests/UnitTestPinController.cs | 63 + Tests/UnitTestReactorController.cs | 109 + Tests/UnitTestServiceShopOrderController.cs | 78 + Tests/UnitTestToolTypesController.cs | 282 + View/App.razor | 18 + View/App.razor.cs | 10 + View/Models/AppSettings.cs | 21 + View/Models/Binder/AppSettings.cs | 70 + View/OI.Metrology.View.csproj | 23 + View/Pages/AwaitingDisposition.razor | 23 + View/Pages/AwaitingDisposition.razor.cs | 45 + View/Pages/AwaitingDisposition.razor.css | 1 + View/Pages/Counter.razor | 13 + View/Pages/Counter.razor.cs | 21 + View/Pages/Export.razor | 42 + View/Pages/Export.razor.cs | 80 + View/Pages/Export.razor.css | 4 + View/Pages/Index.razor | 15 + View/Pages/Index.razor.cs | 32 + View/Pages/RunHeaders.razor | 40 + View/Pages/RunHeaders.razor.cs | 34 + View/Pages/RunHeaders.razor.css | 17 + View/Pages/RunInfo.razor | 69 + View/Pages/RunInfo.razor.cs | 41 + View/Pages/RunInfo.razor.css | 8 + View/Shared/MainLayout.razor | 58 + View/Shared/MainLayout.razor.cs | 48 + View/Shared/MainLayout.razor.css | 70 + View/Shared/NavMenu.razor | 44 + View/Shared/NavMenu.razor.cs | 4 + View/Shared/NavMenu.razor.css | 68 + Viewer/.vscode/tasks.json | 41 - Viewer/ApiControllers/InboundController.cs | 168 - Viewer/ApiControllers/ToolTypesController.cs | 249 - Viewer/Models/AppSettings.cs | 65 - Viewer/Models/Binder/AppSettings.cs | 66 - Viewer/Viewer.csproj | 68 - Viewer/Views/Pages/AwaitingDispo.cshtml | 76 - Viewer/Views/Pages/RunHeaders.cshtml | 134 - Viewer/wwwroot/styles/Site.css | 102 - azure-pipelines-server-development.yml | 137 + azure-pipelines-server.yml | 117 + 968 files changed, 16395 insertions(+), 2385 deletions(-) delete mode 100644 .groovy create mode 100644 Archive/.editorconfig create mode 100644 Archive/ApiControllers/ReactorsController.cs rename Archive/{Archive.csproj => OI.Metrology.Archive.csproj} (83%) rename Viewer/Views/Pages/RunInfo.cshtml => Archive/Views/Pages/Reactor.cshtml (51%) delete mode 100644 Jenkinsfile rename {Viewer => Server}/.vscode/launch.json (84%) rename Viewer/wwwroot/igniteui/js/modules/infragistics.ui.barcode.js => Server/.vscode/settings.json (100%) create mode 100644 Server/.vscode/tasks.json create mode 100644 Server/ApiControllers/AppSettingsController.cs rename {Viewer => Server}/ApiControllers/AttachmentsController.cs (64%) rename {Viewer => Server}/ApiControllers/AwaitingDispoController.cs (55%) create mode 100644 Server/ApiControllers/ClientSettingsController.cs create mode 100644 Server/ApiControllers/InboundController.cs create mode 100644 Server/ApiControllers/PinController.cs create mode 100644 Server/ApiControllers/ServiceShopOrderController.cs create mode 100644 Server/ApiControllers/ToolTypesController.cs rename {Viewer => Server}/ApiLoggingMiddleware.cs (93%) rename {Viewer => Server}/Controllers/ErrorHandlerController.cs (68%) rename {Viewer => Server}/Controllers/ExportController.cs (75%) rename {Viewer => Server}/Controllers/PagesController.cs (58%) create mode 100644 Server/Data/Mike/service-shop.json create mode 100644 Server/Data/Tests/GetAllServiceShopOrdersApi.json create mode 100644 Server/Data/Tests/GetAppSettingsApi.json create mode 100644 Server/Data/Tests/GetAwaitingDispositionApi.json create mode 100644 Server/Data/Tests/GetBuildNumberAndGitCommitSevenApi.json create mode 100644 Server/Data/Tests/GetClientSettingsApi.json create mode 100644 Server/Data/Tests/GetDataApi.json create mode 100644 Server/Data/Tests/GetExportDataApi.json create mode 100644 Server/Data/Tests/GetHeaderFieldsApi.json create mode 100644 Server/Data/Tests/GetHeaderTitlesApi.json create mode 100644 Server/Data/Tests/GetHeadersApi.json create mode 100644 Server/Data/Tests/GetIpAddressApi.json create mode 100644 Server/Data/Tests/GetPinnedTableApi.json create mode 100644 Server/Data/Tests/GetToolTypeMetadataApi.json create mode 100644 Server/Data/Tests/IndexApi.json create mode 100644 Server/Models/AppSettings.cs create mode 100644 Server/Models/Binder/AppSettings.cs create mode 100644 Server/OI.Metrology.Server.csproj rename {Viewer => Server}/Program.cs (75%) create mode 100644 Server/Properties/launchSettings.json create mode 100644 Server/Repositories/AppSettingsRepository.cs create mode 100644 Server/Repositories/ClientSettingsRepository.cs create mode 100644 Server/Repositories/InboundRepository.cs rename Viewer/Repositories/MetrologyRepo.cs => Server/Repositories/MetrologyRepository.cs (70%) create mode 100644 Server/Repositories/PinRepository.cs create mode 100644 Server/Repositories/ServiceShopOrderRepository.cs create mode 100644 Server/Repositories/ToolTypesRepository.cs rename {Viewer => Server}/Services/AttachmentsService.cs (70%) rename {Viewer => Server}/Services/InboundDataService.cs (91%) rename {Viewer/Repositories => Server/Services}/SQLDbConnectionFactory.cs (80%) rename {Viewer => Server}/Views/Export/Index.cshtml (96%) create mode 100644 Server/Views/Pages/AwaitingDispo.cshtml rename {Viewer => Server}/Views/Pages/Home.cshtml (100%) create mode 100644 Server/Views/Pages/RunHeaders.cshtml create mode 100644 Server/Views/Pages/RunInfo.cshtml rename {Viewer => Server}/Views/Shared/_Layout.cshtml (96%) rename {Viewer => Server}/Views/_ViewImports.cshtml (100%) rename {Viewer => Server}/Views/_ViewStart.cshtml (100%) rename {Viewer => Server}/appsettings.Development.json (52%) rename {Viewer => Server}/appsettings.json (94%) rename {Viewer => Server}/compilerconfig.json (100%) rename {Viewer => Server}/compilerconfig.json.defaults (100%) rename {Viewer => Server}/wwwroot/igniteui/css/README.ja.md (100%) rename {Viewer => Server}/wwwroot/igniteui/css/README.md (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/fonts/jquery-ui.eot (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/fonts/jquery-ui.svg (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/fonts/jquery-ui.ttf (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/fonts/jquery-ui.woff (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/icon_sprite.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igBrowserLogos.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igGrid/blank.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igGrid/diagonals-medium.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igGrid/filter-icons-333333.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igGrid/filter-icons-FFFFFF.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igGrid/group-by-label-right-edge.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igGrid/indicators-icon-on.svg (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igGrid/indicators-icon.svg (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igGrid/overlay-icon-on.svg (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igGrid/overlay-icon.svg (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igGrid/touch-icons.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igGrid/touch-icons.svg (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/arrow_collapse.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/arrow_expand.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/arrow_redo.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/arrow_undo.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/background_color.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/check.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/cut.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/decrease-font-size.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/html-editor-sprite.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/html.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/html_add.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/html_delete.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/html_go.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/html_valid.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/image_add.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/increase-font-size.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/link.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/link_add.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/link_break.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/page_copy.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/page_paste.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/table-delete-column-icon.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/table-insert-column-icon.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/table.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/table_row_delete.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/table_row_insert.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_align_center.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_align_justify.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_align_left.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_align_right.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_bold.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_color.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_horizontalrule.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_indent.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_indent_remove.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_italic.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_list_bullets.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_list_numbers.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_strikethrough.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igHtmlEditor/text_underline.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igLoadingSmall.gif (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igPivot/dataselector-sprite.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igPivot/kpi-icons.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igPivot/pivot-header-icons.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igPopover/igPopoverArrowBottom.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igPopover/igPopoverArrowLeft.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igPopover/igPopoverArrowRight.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igPopover/igPopoverArrowTop.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igPopover/igPopoverArrows.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igRating/ig-rating-touch.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igRating/ig-rating-touchx2.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igScroll/up.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igScroll/up_active.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igVideoPlayer/igBigPauseButton.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igVideoPlayer/igBigPlayButton.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igVideoPlayer/igLoadingSmall.gif (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igVideoPlayer/igPlayButton24.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igVideoPlayer/igPlayButton32.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igVideoPlayer/igPlayButton48.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igVideoPlayer/igVPBackground.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igVideoPlayer/igVPBookmarkSprite.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/igVideoPlayer/igWarningIcon.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/trial.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/images/ui-anim_basic_16x16.gif (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/infragistics.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.barcode.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.bulletgraph.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.categorychart.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.chart.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.chart.legacy.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.colorpicker.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.combo.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.dialog.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.editors.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.financialchart.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.grid.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.html5.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.htmleditor.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.layout.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.lineargauge.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.map.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.notifier.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.pivot.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.popover.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.radialgauge.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.radialmenu.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.rating.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.scheduler.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.scroll.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.shapechart.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.shared.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.sparkline.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.splitbutton.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.splitter.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.spreadsheet.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.tilemanager.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.toolbar.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.toolbarbutton.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.tree.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.treegrid.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.upload.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.validator.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.videoplayer.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/infragistics.ui.zoombar.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/structure/modules/licensing.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/README.ja.md (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/README.md (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/README.ja.md (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/README.md (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/framework.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/icons-styles.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/ignite-ui-variables.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/icon_sprite.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/igGrid/filter-icons-333333.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/igGrid/filter-icons-FFFFFF.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/igRating/ig-rating.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/igSpreadsheet/ig-Spreadsheet.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/igVideoPlayer/igVPBackground.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/igVideoPlayer/igVPBookmarkSprite.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/igVideoPlayer/igVideoPlayerIcons.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/ui-anim_basic_16x16.gif (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/ui-icons_222222_256x240.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/ui-icons_888888_256x240.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/images/ui-icons_ffffff_256x240.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/infragistics.theme.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/infragistics.theme.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/infragistics.theme.min.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/mixins.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/base/infragistics.ui.checkbox.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.chart.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.chart.toolbar.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.combo.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.dialog.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.editors.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.grid.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.notifier.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.pivot.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.popover.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.rating.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.scheduler.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.splitter.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.spreadsheet.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.tilemanager.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.tree.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.treegrid.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.upload.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/infragistics.ui.videoplayer.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/modules/modules.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/style-guide/style-guide (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/style-guide/style-guide.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/style-guide/style-guide.html (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/default/variables.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/framework.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/icons-styles.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/ignite-ui-variables.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/icon_sprite.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/igGrid/filter-icons-333333.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/igGrid/filter-icons-FFFFFF.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/igRating/ig-rating.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/igSpreadsheet/ig-Spreadsheet.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/igVideoPlayer/igVPBackground.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/igVideoPlayer/igVPBookmarkSprite.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/igVideoPlayer/igVideoPlayerIcons.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/ui-anim_basic_16x16.gif (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/ui-icons_222222_256x240.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/ui-icons_888888_256x240.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/images/ui-icons_ffffff_256x240.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/infragistics.theme.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/infragistics.theme.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/mixins.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/base/infragistics.ui.checkbox.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.chart.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.chart.toolbar.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.combo.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.dialog.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.editors.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.grid.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.notifier.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.pivot.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.popover.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.rating.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.scheduler.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.splitter.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.spreadsheet.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.tilemanager.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.tree.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.treegrid.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.upload.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/infragistics.ui.videoplayer.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/modules/modules.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/style-guide/style-guide (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/style-guide/style-guide.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/style-guide/style-guide.html (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/flatly/variables.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/framework.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/icons-styles.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/ignite-ui-variables.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/icon_sprite.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/igGrid/filter-icons-333333.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/igGrid/filter-icons-FFFFFF.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/igRating/ig-rating.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/igSpreadsheet/spreadsheet-sprite.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/igVideoPlayer/igVPBackground.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/igVideoPlayer/igVPBookmarkSprite.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/igVideoPlayer/igVideoPlayerIcons.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/ui-anim_basic_16x16.gif (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/ui-icons_222222_256x240.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/ui-icons_888888_256x240.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/images/ui-icons_ffffff_256x240.png (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/infragistics.theme.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/infragistics.theme.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/mixins.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/base/infragistics.ui.checkbox.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.chart.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.chart.toolbar.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.combo.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.dialog.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.editors.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.grid.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.notifier.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.pivot.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.popover.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.rating.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.scheduler.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.splitter.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.spreadsheet.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.tilemanager.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.tree.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.treegrid.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.upload.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/infragistics.ui.videoplayer.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/modules/modules.less (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/style-guide/style-guide (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/style-guide/style-guide.css (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/style-guide/style-guide.html (100%) rename {Viewer => Server}/wwwroot/igniteui/css/themes/bootstrap3/yeti/variables.less (100%) rename {Viewer => Server}/wwwroot/igniteui/js/extensions/infragistics.datasource.knockoutjs.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/extensions/infragistics.ui.combo.knockout-extensions.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/extensions/infragistics.ui.datachart.knockout-extensions.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/extensions/infragistics.ui.editors.knockout-extensions.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/extensions/infragistics.ui.grid.knockout-extensions.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/extensions/infragistics.ui.tree.knockout-extensions.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/i18n/infragistics-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/i18n/infragistics-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/i18n/infragistics-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/i18n/infragistics-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/i18n/infragistics-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/i18n/infragistics-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/i18n/infragistics-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/infragistics.core.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/infragistics.dv.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/infragistics.excel-bundled.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/infragistics.loader.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/infragistics.lob.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/infragistics.scheduler-bundled.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/infragistics.spreadsheet-bundled.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding.core.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_big5.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_cp437.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_gb2312.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-1.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-11.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-13.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-15.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-2.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-3.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-4.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-5.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-6.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-7.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-8.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso-8859-9.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_iso646-us.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_ksc5601.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_shift_jis.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_windows-1250.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_windows-1251.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_windows-1252.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/encoding/infragistics.encoding_windows-1256.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.datasource-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.datasource-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.datasource-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.datasource-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.datasource-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.datasource-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.datasource-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.documents.core_core-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.documents.core_core-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.documents.core_core-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.documents.core_core-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.documents.core_core-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.documents.core_core-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.documents.core_core-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.dvcommonwidget-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.dvcommonwidget-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.dvcommonwidget-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.dvcommonwidget-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.dvcommonwidget-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.dvcommonwidget-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.dvcommonwidget-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.excel_core-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.excel_core-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.excel_core-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.excel_core-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.excel_core-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.excel_core-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.excel_core-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.scheduler.core-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.scheduler.core-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.scheduler.core-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.scheduler.core-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.scheduler.core-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.scheduler.core-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.scheduler.core-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.shared-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.shared-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.shared-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.shared-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.shared-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.shared-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.shared-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.spreadsheet-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.spreadsheet-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.spreadsheet-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.spreadsheet-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.spreadsheet-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.spreadsheet-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.spreadsheet-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.templating-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.templating-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.templating-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.templating-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.templating-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.templating-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.templating-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.barcode-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.barcode-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.barcode-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.barcode-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.barcode-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.barcode-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.barcode-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.bulletgraph-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.bulletgraph-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.bulletgraph-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.bulletgraph-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.bulletgraph-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.bulletgraph-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.bulletgraph-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.combo-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.combo-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.combo-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.combo-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.combo-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.combo-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.combo-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.dialog-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.dialog-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.dialog-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.dialog-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.dialog-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.dialog-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.dialog-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.doughnutchart-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.doughnutchart-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.doughnutchart-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.doughnutchart-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.doughnutchart-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.doughnutchart-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.doughnutchart-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.editors-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.editors-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.editors-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.editors-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.editors-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.editors-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.editors-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.grid-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.grid-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.grid-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.grid-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.grid-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.grid-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.grid-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.htmleditor-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.htmleditor-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.htmleditor-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.htmleditor-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.htmleditor-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.htmleditor-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.htmleditor-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.lineargauge-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.lineargauge-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.lineargauge-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.lineargauge-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.lineargauge-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.lineargauge-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.lineargauge-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.notifier-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.notifier-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.notifier-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.notifier-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.notifier-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.notifier-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.notifier-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivot.shared-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivot.shared-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivot.shared-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivot.shared-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivot.shared-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivot.shared-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivot.shared-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotdataselector-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotdataselector-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotdataselector-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotdataselector-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotdataselector-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotdataselector-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotdataselector-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotgrid-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotgrid-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotgrid-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotgrid-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotgrid-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotgrid-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.pivotgrid-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.popover-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.popover-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.popover-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.popover-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.popover-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.popover-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.popover-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialgauge-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialgauge-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialgauge-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialgauge-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialgauge-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialgauge-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialgauge-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialmenu-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialmenu-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialmenu-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialmenu-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialmenu-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialmenu-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.radialmenu-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.rating-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.rating-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.rating-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.rating-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.rating-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.rating-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.rating-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scheduler-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scheduler-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scheduler-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scheduler-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scheduler-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scheduler-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scheduler-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scroll-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scroll-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scroll-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scroll-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scroll-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scroll-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.scroll-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.splitter-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.splitter-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.splitter-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.splitter-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.splitter-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.splitter-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.splitter-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tilemanager-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tilemanager-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tilemanager-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tilemanager-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tilemanager-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tilemanager-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tilemanager-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.toolbar-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.toolbar-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.toolbar-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.toolbar-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.toolbar-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.toolbar-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.toolbar-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tree-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tree-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tree-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tree-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tree-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tree-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.tree-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.treegrid-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.treegrid-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.treegrid-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.treegrid-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.treegrid-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.treegrid-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.treegrid-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.upload-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.upload-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.upload-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.upload-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.upload-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.upload-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.upload-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.validator-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.validator-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.validator-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.validator-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.validator-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.validator-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.validator-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.videoplayer-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.videoplayer-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.videoplayer-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.videoplayer-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.videoplayer-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.videoplayer-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.videoplayer-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.zoombar-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.zoombar-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.zoombar-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.zoombar-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.zoombar-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.zoombar-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.ui.zoombar-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.undo-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.undo-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.undo-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.undo-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.undo-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.undo-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.undo-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.util-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.util-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.util-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.util-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.util-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.util-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/infragistics.util-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-af.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-ar.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-az.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-bg.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-bs.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-ca.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-cs.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-da.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-de.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-el.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-en-GB.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-en.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-es-419.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-es-MX.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-es.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-et.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-fa.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-fi.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-fo.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-fr-CH.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-fr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-he.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-hr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-hu.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-hy.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-i18n.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-id.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-is.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-it.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-ja.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-ko.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-lt.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-lv.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-ms.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-nl.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-no.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-pl.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-pt-BR.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-ro.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-ru.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-sk.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-sl.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-sq.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-sr-SR.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-sr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-sv.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-ta.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-th.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-tr.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-uk.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-vi.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-zh-CN.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-zh-HK.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/i18n/regional/infragistics.ui.regional-zh-TW.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.barcode_core.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.barcode_qrcodebarcode.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.bulletgraph.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.categorychart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_annotation.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_category.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_categorycore.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_core.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_domainChart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_extendedaxes.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_extendedfinancial.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_financial.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_interactivity.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_polar.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_radial.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_rangecategory.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_scatter.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_shape.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_stacked.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_verticalcategory.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datachart_visualdata.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.datasource.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.documents.core_core.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.documents.core_openxml.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.doughnutchart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.dv_core.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.dv_dataseriesadapter.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.dv_datasource.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.dv_description.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.dv_geo.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.dv_geometry.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.dv_interactivity.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.dv_jquerydom.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.dv_opd.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.dv_visualdata.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.dvcommonwidget.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.excel_core.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.excel_functions.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.excel_serialization_biff8.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.excel_serialization_openxml.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ext_collections.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ext_collectionsextended.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ext_core.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ext_io.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ext_text.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ext_threading.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ext_ui.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ext_web.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ext_xml.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.financialchart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.funnelchart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.geographicmap_core.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.gridexcelexporter.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.legend.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.lineargauge.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.olap.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.olapdatasource.doc.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.olapflatdatasource.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.olapxmladatasource.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.piechart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.radialgauge.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.radialmenu.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.scheduler.core.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.shapechart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.sparkline.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.spreadsheet.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.templating.js (100%) create mode 100644 Server/wwwroot/igniteui/js/modules/infragistics.ui.barcode.js rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.basechart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.bulletgraph.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.categorychart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.chart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.chart.template.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.chartlegend.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.colorpicker.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.colorpickersplitbutton.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.combo.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.dialog.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.doughnutchart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.editors.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.financialchart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.funnelchart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.appendrowsondemand.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.cellmerging.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.columnfixing.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.columnmoving.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.featurechooser.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.filtering.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.framework.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.groupby.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.hiding.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.hierarchical.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.multicolumnheaders.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.paging.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.resizing.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.responsive.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.rowselectors.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.selection.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.shared.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.sorting.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.summaries.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.tooltips.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.grid.updating.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.htmleditor.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.layoutmanager.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.lineargauge.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.map.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.map.template.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.notifier.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.pivot.shared.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.pivotdataselector.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.pivotgrid.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.pivotview.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.popover.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.qrcodebarcode.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.radialgauge.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.radialmenu.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.rating.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.scheduler.core.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.scheduler.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.scroll.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.shapechart.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.shared.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.sparkline.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.splitbutton.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.splitter.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.spreadsheet.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.tilemanager.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.toolbar.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.toolbarbutton.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.tree.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.columnfixing.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.columnmoving.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.filtering.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.hiding.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.multicolumnheaders.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.paging.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.resizing.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.rowselectors.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.selection.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.sorting.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.tooltips.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.treegrid.updating.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.upload.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.validator.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.videoplayer.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.widget.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.zoombar.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.ui.zoomslider.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.undo.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.util.jquery.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.util.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.xml.js (100%) rename {Viewer => Server}/wwwroot/igniteui/js/modules/infragistics.zoomslider_core.js (100%) rename {Viewer => Server}/wwwroot/images/IFX_LOGO_RGB.png (100%) rename {Viewer => Server}/wwwroot/images/print-icon.gif (100%) rename {Viewer => Server}/wwwroot/images/ui-icons_444444_256x240.png (100%) rename {Viewer => Server}/wwwroot/images/ui-icons_555555_256x240.png (100%) rename {Viewer => Server}/wwwroot/images/ui-icons_777620_256x240.png (100%) rename {Viewer => Server}/wwwroot/images/ui-icons_777777_256x240.png (100%) rename {Viewer => Server}/wwwroot/images/ui-icons_cc0000_256x240.png (100%) rename {Viewer => Server}/wwwroot/images/ui-icons_ffffff_256x240.png (100%) rename {Viewer => Server}/wwwroot/js/bootstrap.js (100%) rename {Viewer => Server}/wwwroot/js/bootstrap.min.js (100%) rename {Viewer => Server}/wwwroot/js/common.js (86%) rename {Viewer => Server}/wwwroot/js/jquery-3.2.1.minbackup.js (100%) rename {Viewer => Server}/wwwroot/js/jquery-3.6.0.min.js (100%) rename {Viewer => Server}/wwwroot/js/jquery-ui.min.js (100%) rename {Viewer => Server}/wwwroot/js/jquery.min.js (100%) rename {Viewer => Server}/wwwroot/js/jquery.min.map (100%) rename {Viewer => Server}/wwwroot/js/modernizr-3.6.0-custom.js (100%) rename {Viewer => Server}/wwwroot/js/respond.js (100%) rename {Viewer => Server}/wwwroot/js/respond.min.js (100%) create mode 100644 Server/wwwroot/js/site.js create mode 100644 Server/wwwroot/styles/Site.css rename {Viewer => Server}/wwwroot/styles/bootstrap.css (100%) rename {Viewer => Server}/wwwroot/styles/bootstrap.min.css (100%) rename {Viewer => Server}/wwwroot/styles/jquery-ui.min.css (100%) rename {Viewer => Server}/wwwroot/styles/jquery-ui.structure.min.css (100%) rename {Viewer => Server}/wwwroot/styles/jquery-ui.theme.min.css (100%) create mode 100644 Shared/DataModels/AwaitingDisposition.cs create mode 100644 Shared/DataModels/ColumnValue.cs create mode 100644 Shared/DataModels/Pinned.cs create mode 100644 Shared/DataModels/Result.cs create mode 100644 Shared/DataModels/ToolTypeMetadataResult.cs create mode 100644 Shared/DataModels/ToolTypeNameId.cs create mode 100644 Shared/Models/AdditionalData.cs create mode 100644 Shared/Models/AllowedActions.cs create mode 100644 Shared/Models/Booking.cs create mode 100644 Shared/Models/Catalog.cs create mode 100644 Shared/Models/DataResponse.cs create mode 100644 Shared/Models/Order.cs create mode 100644 Shared/Models/Price.cs create mode 100644 Shared/Models/Service.cs create mode 100644 Shared/Models/ServiceShop.cs create mode 100644 Shared/Models/Stateless/IAppSettingsController.cs create mode 100644 Shared/Models/Stateless/IAppSettingsRepository.cs create mode 100644 Shared/Models/Stateless/IAwaitingDispoController.cs create mode 100644 Shared/Models/Stateless/IClientSettingsController.cs create mode 100644 Shared/Models/Stateless/IClientSettingsRepository.cs create mode 100644 Shared/Models/Stateless/IInboundController.cs create mode 100644 Shared/Models/Stateless/IInboundRepository.cs create mode 100644 Shared/Models/Stateless/IMethodName.cs rename Shared/{Repositories/IMetrologyRepo.cs => Models/Stateless/IMetrologyRepository.cs} (85%) create mode 100644 Shared/Models/Stateless/IPinController.cs create mode 100644 Shared/Models/Stateless/IPinRepository.cs create mode 100644 Shared/Models/Stateless/IServiceShopOrder.cs create mode 100644 Shared/Models/Stateless/IServiceShopOrderController.cs create mode 100644 Shared/Models/Stateless/IServiceShopOrderRepository.cs create mode 100644 Shared/Models/Stateless/IToolTypesController.cs create mode 100644 Shared/Models/Stateless/IToolTypesRepository.cs create mode 100644 Shared/Models/Stateless/ServiceShopOrder.cs delete mode 100644 Shared/Models/TencorRunHeaders.cs rename Shared/{Shared.csproj => OI.Metrology.Shared.csproj} (89%) create mode 100644 Shared/ViewModels/ServiceShopOrder.cs create mode 100644 Tests/.vscode/settings.json rename Tests/{Tests.csproj => OI.Metrology.Tests.csproj} (77%) create mode 100644 Tests/UnitAwaitingDispoController.cs create mode 100644 Tests/UnitInboundController.cs create mode 100644 Tests/UnitTestAppSettingsController.cs create mode 100644 Tests/UnitTestClientSettingsController.cs delete mode 100644 Tests/UnitTestExample.cs create mode 100644 Tests/UnitTestPinController.cs create mode 100644 Tests/UnitTestReactorController.cs create mode 100644 Tests/UnitTestServiceShopOrderController.cs create mode 100644 Tests/UnitTestToolTypesController.cs create mode 100644 View/App.razor create mode 100644 View/App.razor.cs create mode 100644 View/Models/AppSettings.cs create mode 100644 View/Models/Binder/AppSettings.cs create mode 100644 View/OI.Metrology.View.csproj create mode 100644 View/Pages/AwaitingDisposition.razor create mode 100644 View/Pages/AwaitingDisposition.razor.cs create mode 100644 View/Pages/AwaitingDisposition.razor.css create mode 100644 View/Pages/Counter.razor create mode 100644 View/Pages/Counter.razor.cs create mode 100644 View/Pages/Export.razor create mode 100644 View/Pages/Export.razor.cs create mode 100644 View/Pages/Export.razor.css create mode 100644 View/Pages/Index.razor create mode 100644 View/Pages/Index.razor.cs create mode 100644 View/Pages/RunHeaders.razor create mode 100644 View/Pages/RunHeaders.razor.cs create mode 100644 View/Pages/RunHeaders.razor.css create mode 100644 View/Pages/RunInfo.razor create mode 100644 View/Pages/RunInfo.razor.cs create mode 100644 View/Pages/RunInfo.razor.css create mode 100644 View/Shared/MainLayout.razor create mode 100644 View/Shared/MainLayout.razor.cs create mode 100644 View/Shared/MainLayout.razor.css create mode 100644 View/Shared/NavMenu.razor create mode 100644 View/Shared/NavMenu.razor.cs create mode 100644 View/Shared/NavMenu.razor.css delete mode 100644 Viewer/.vscode/tasks.json delete mode 100644 Viewer/ApiControllers/InboundController.cs delete mode 100644 Viewer/ApiControllers/ToolTypesController.cs delete mode 100644 Viewer/Models/AppSettings.cs delete mode 100644 Viewer/Models/Binder/AppSettings.cs delete mode 100644 Viewer/Viewer.csproj delete mode 100644 Viewer/Views/Pages/AwaitingDispo.cshtml delete mode 100644 Viewer/Views/Pages/RunHeaders.cshtml delete mode 100644 Viewer/wwwroot/styles/Site.css create mode 100644 azure-pipelines-server-development.yml create mode 100644 azure-pipelines-server.yml diff --git a/.editorconfig b/.editorconfig index 3856cdf..56b46ef 100644 --- a/.editorconfig +++ b/.editorconfig @@ -83,6 +83,7 @@ dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant. dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2"); dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary +dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031) dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed dotnet_diagnostic.IDE0049.severity = warning # Use language keywords instead of framework type names for type references (IDE0049) dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter diff --git a/.gitignore b/.gitignore index 8d70223..6a9176c 100644 --- a/.gitignore +++ b/.gitignore @@ -52,7 +52,7 @@ BenchmarkDotNet.Artifacts/ project.lock.json project.fragment.lock.json artifacts/ -**/Properties/launchSettings.json +# **/Properties/launchSettings.json # StyleCop StyleCopReport.xml diff --git a/.groovy b/.groovy deleted file mode 100644 index a15596c..0000000 --- a/.groovy +++ /dev/null @@ -1,266 +0,0 @@ -#!/usr/bin/env groovy -/* groovylint-disable CompileStatic, ConsecutiveStringConcatenation, DuplicateNumberLiteral, DuplicateStringLiteral, LineLength, NestedBlockDepth, NoDef, VariableTypeRequired */ -import groovy.transform.Field - -@Field String _DDrive = 'D:/' -@Field String _ExePath = '...' -@Field String _NGINXFile = '...' -@Field String _PortNumber = '...' -@Field String _AssemblyName = '...' -@Field String _AgentDevelopment = '' -@Field String _NetVersion = 'net6.0' -@Field String _GitCommitSeven = '...' -@Field String _TargetLocation = '...' -@Field String _FirstBeforePlus = '5000' -@Field String _GitName = 'OI-Metrology' -@Field String _MonARessource = 'OI_Metrology' -@Field String _WorkingDirectoryName = 'IFXApps' -@Field String _DDriveNet = "${_DDrive}${_NetVersion}" -@Field String _AgentStaging = 'messa010ec-ecfisysadmin' -@Field String _AgentProduction = 'messa010ec-ecfisysadmin' -@Field String _CredentialsId = 'Metrology-Username-Password' -@Field String _Company = 'Infineon Technologies Americas Corp.' -@Field String _ProgramFilesDotnet = 'C:/program files/dotnet/dotnet.exe' - -pipeline { - agent { - label env.JENKINS_ENVIRONMENT == 'Development' ? _AgentDevelopment : env.JENKINS_ENVIRONMENT == 'Staging' ? _AgentStaging : env.JENKINS_ENVIRONMENT == 'Production' ? _AgentProduction : 'Else' - } - parameters { - string(name: 'MONA_SUFFIX', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? '_IFX' : '_EC', description: 'MonA Suffix') - string(name: 'GIT_SERVER', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? 'mestsa003.infineon.com' : 'mestsa07ec.ec.local', description: 'git server') - string(name: 'DEFAULT_FILE_SERVER', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? 'messv02ecc1_ec_local' : 'messv02ecc1.ec.local', description: 'Default file server...') - string(name: 'PROJECT_DIRECTORY', defaultValue: 'Archive', description: 'Archive|Viewer') - } - stages { - stage('Git') { - steps { - bat(returnStatus: true, script: 'git init') - bat(returnStatus: true, script: 'git remote add origin \\\\' + params.GIT_SERVER + '\\Git\\' + _GitName + '.git') - bat(returnStatus: true, script: 'git pull origin master') - } - } - stage('Setup') { - steps { - script { - _AssemblyName = "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}" - _GitCommitSeven = '1234567' - // _GitCommitSeven = env.GIT_COMMIT.substring(0, 7) - dir(env.PROJECT_DIRECTORY) { - def files = findFiles(glob: '*.csproj') - if (files.length != 1) { - error("Build failed because couldn't find a *.csproj file") - } - echo """ - ${files[0].name} - ${files[0].path} - ${files[0].directory} - ${files[0].length} - ${files[0].lastModified} - """ - _AssemblyName = files[0].name.split('[.]csproj')[0] - } - _TargetLocation = "\\\\${params.DEFAULT_FILE_SERVER}\\EC_EAFRepository\\${env.JENKINS_ENVIRONMENT}\\DeploymentStorage\\Adaptation_${_AssemblyName}" - withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) { - dir("C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1/conf/includes") { - _NGINXFile = "C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1/conf/includes/${_AssemblyName}.conf" - def files = findFiles(glob: "${_AssemblyName}.conf") - if (files.length != 1) { - writeFile(file: _NGINXFile, text: "location / { proxy_pass http://localhost:${_FirstBeforePlus}; }") - } - } - } - } - } - } - stage('Read NGINX') { - steps { - script { - String text = readFile(file: _NGINXFile) - String check = text == null ? _FirstBeforePlus : text.split(';')[0] - String[] segments = check.split(':') - if (segments.length != 3) { - _PortNumber = check - } - else { - _PortNumber = (segments[2].toInteger() + 2).toString() - } - _ExePath = "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}/${_AssemblyName}.exe" - } - } - } - stage('Info') { - steps { - // echo "GIT_URL_N - ${env.GIT_URL_N}" - // echo "BRANCH_NAME ${env.BRANCH_NAME}" - // echo "DEPLOY_VERSION ${env.DEPLOY_VERSION}" - // echo "GIT_AUTHOR_NAME ${env.GIT_AUTHOR_NAME}" - // echo "GIT_LOCAL_BRANCH ${env.GIT_LOCAL_BRANCH}" - // echo "GIT_COMMITTER_EMAIL ${env.GIT_COMMITTER_EMAIL}" - // echo "GIT_PREVIOUS_COMMIT ${env.GIT_PREVIOUS_COMMIT}" - // echo "GIT_PREVIOUS_SUCCESSFUL_COMMIT ${env.GIT_PREVIOUS_SUCCESSFUL_COMMIT}" - echo "_AssemblyName ${_AssemblyName}" // ... - echo "_ExePath ${_ExePath}" // ... - echo "_PortNumber ${_PortNumber}" // ... - echo "BUILD_NUMBER ${env.BUILD_NUMBER}" // 11 - echo "DEFAULT_FILE_SERVER ${params.DEFAULT_FILE_SERVER}" // 11 - echo "GIT_BRANCH ${env.GIT_BRANCH}" // origin/master - echo "GIT_COMMIT ${env.GIT_COMMIT}" // 73b814069f2cf0173a62a8228815a9bc9ba93c41 - echo "GIT_SERVER ${params.GIT_SERVER}" // ... - echo "GIT_URL ${env.GIT_URL}" // D:\ProgramData\Git\....git - echo "JENKINS_ENVIRONMENT ${env.JENKINS_ENVIRONMENT}" // 11 - echo "JENKINS_URL ${env.JENKINS_URL}" // http://localhost:8080/ - echo "JOB_NAME ${env.JOB_NAME}" // ... - echo "PROJECT_DIRECTORY ${env.PROJECT_DIRECTORY}" // ... - echo "WORKSPACE ${env.WORKSPACE}" // D:\.jenkins\_\... - } - } - // stage('Restore') { - // steps { - // bat(returnStatus: true, script: 'dotnet --info') - // } - // } - stage('Safe storage of app secrets') { - steps { - withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) { - dir(env.PROJECT_DIRECTORY) { - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets init') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "Company" "' + _Company + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "ServiceUser" "' + username + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "BuildNumber" "' + env.BUILD_NUMBER + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "GitCommitSeven" "' + _GitCommitSeven + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "Server" "' + params.DEFAULT_FILE_SERVER + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "URLs" "' + 'http://localhost:' + _PortNumber) - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "WorkingDirectoryName" "' + _WorkingDirectoryName + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "MonARessource" "' + _MonARessource + '_' + env.PROJECT_DIRECTORY + env.MONA_SUFFIX + '"') - } - } - } - } - // stage('Core Build (packagemanagement.eu.infineon.com)') { - // steps { - // echo "Build number is ${currentBuild.number}" - // dir(env.PROJECT_DIRECTORY) { - // bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - // 'build --runtime win-x64 --self-contained --verbosity quiet --source ' + - // 'https://packagemanagement.eu.infineon.com:4430/api/v2/') - // } - // } - // } - stage('Core Build') { - steps { - echo "Build number is ${currentBuild.number}" - dir(env.PROJECT_DIRECTORY) { - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'build --runtime win-x64 --self-contained --verbosity quiet') - } - } - } - stage('Commit Id') { - steps { - dir(env.PROJECT_DIRECTORY) { - writeFile(file: 'bin/Debug/' + _NetVersion + "/win-x64/${env.GIT_COMMIT}-${env.BUILD_NUMBER}.txt", text: "${env.GIT_URL}") - } - } - } - // stage('Test') { - // options { - // timeout(time: 10, unit: 'MINUTES') - // } - // steps { - // dir(env.PROJECT_DIRECTORY) { - // bat('dotnet --info') - // } - // } - // } - // stage('Version') { - // steps { - // bat('dotnet --info') - // } - // } - stage('Package') { - steps { - dir(env.PROJECT_DIRECTORY) { - fileOperations([fileZipOperation(folderPath: 'bin/Debug/' + _NetVersion + '/win-x64', outputFolderPath: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-Debug")]) - fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*", renameFiles: false, sourceCaptureExpression: '', targetLocation: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-Debug", targetNameExpression: '')]) - } - } - } - stage('Publish') { - steps { - dir(env.PROJECT_DIRECTORY) { - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'publish --configuration Release --runtime win-x64 --verbosity quiet ' + - "--self-contained true --p:Version=6.0.202-${_GitCommitSeven}-${env.BUILD_NUMBER} -o " + - '"' + "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}" + '"') - } - } - } - stage('Service') { - steps { - withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) { - bat(returnStatus: true, script: 'sc create "' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '" ' + - 'start= delayed-auto DisplayName="' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '" ' + - 'binPath= "' + _ExePath + '" ' + - 'obj= "' + "${env.USERDOMAIN}\\${username}" + '" password= "' + password + '"') - bat(returnStatus: true, script: 'sc start "' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '"') - } - } - } - stage('Upadate NGINX') { - steps { - writeFile(file: _NGINXFile, text: "location / { proxy_pass http://localhost:${_PortNumber}; }") - } - } - stage('NGINX Test and Reload') { - steps { - withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) { - dir("C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1") { - script { - int returnStatus = bat(returnStatus: true, script: 'nginx.exe -t') - println("returnStatus ################ ${returnStatus} ####################") - if (returnStatus == 0) { - bat(returnStatus: true, script: 'nginx.exe -s reload') - } - } - } - } - } - } - // stage('Force Fail') { - // steps { - // error("Build failed because of this and that..") - // } - // } - // stage('Copy Files to: file-share') { - // steps { - // dir(env.PROJECT_DIRECTORY + '/bin/Debug/' + _NetVersion + '/win-x64') { - // fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.txt", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')]) - // fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.dll", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')]) - // fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.exe", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')]) - // fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.pdb", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')]) - // } - // } - // } - } - post { - always { - dir(env.PROJECT_DIRECTORY + '/bin') { - deleteDir() - } - dir(env.PROJECT_DIRECTORY + '/obj') { - deleteDir() - } - // cleanWs() - } - } -} diff --git a/.vscode/launch.json b/.vscode/launch.json index c94566d..3495e20 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,27 +5,68 @@ // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md - "name": ".NET Core Launch (web)", + "name": ".NET Core Launch (web) - Server", "type": "coreclr", "request": "launch", - "preLaunchTask": "build", + "preLaunchTask": "buildServer", // If you have changed target frameworks, make sure to update the program path. - "program": "${workspaceFolder}/Archive/bin/Debug/net6.0/win-x64/Archive.dll", + "program": "${workspaceFolder}/Server/bin/Debug/net7.0/win-x64/OI.Metrology.Server.dll", "args": [], - "cwd": "${workspaceFolder}", + "cwd": "${workspaceFolder}/Server", "stopAtEntry": false, // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser "serverReadyAction": { "action": "openExternally", - "pattern": "\\bNow listening on:\\s+(https?://\\S+)" + "pattern": "\\bNow listening on:\\s+(https?://\\S+)", + "uriFormat": "%s/swagger/index.html" }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { - "/Views": "${workspaceFolder}/Archive/Views" + "/Views": "${workspaceFolder}/Server/Views" } }, + { + "name": ".NET Core Attach - Server", + "type": "coreclr", + "request": "attach", + "preLaunchTask": "watchServer", + "processName": "OI.Metrology.Server.exe" + }, + { + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "name": ".NET Core Launch (web) - ClientHub", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "buildClientHub", + // If you have changed target frameworks, make sure to update the program path. + "program": "${workspaceFolder}/ClientHub/bin/Debug/net7.0/win-x64/OI.Metrology.ClientHub.dll", + "args": [], + "cwd": "${workspaceFolder}/ClientHub", + "stopAtEntry": false, + // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser + "serverReadyAction": { + "action": "openExternally", + "pattern": "\\bNow listening on:\\s+(https?://\\S+)", + "uriFormat": "%s/swagger/index.html" + }, + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "sourceFileMap": { + "/Views": "${workspaceFolder}/ClientHub/Views" + } + }, + { + "name": ".NET Core Attach - ClientHub", + "type": "coreclr", + "request": "attach", + "preLaunchTask": "watchClientHub", + "processName": "OI.Metrology.ClientHub.exe" + }, { "name": ".NET Core Attach", "type": "coreclr", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 8d5f54c..b530ca9 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -2,40 +2,132 @@ "version": "2.0.0", "tasks": [ { - "label": "build", + "label": "buildServer", "command": "dotnet", "type": "process", "args": [ "build", - "${workspaceFolder}/Archive/Archive.csproj", + "${workspaceFolder}/Server/OI.Metrology.Server.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "problemMatcher": "$msCompile" }, { - "label": "publish", + "label": "publishServer", "command": "dotnet", "type": "process", "args": [ "publish", - "${workspaceFolder}/Archive/Archive.csproj", + "${workspaceFolder}/Server/OI.Metrology.Server.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "problemMatcher": "$msCompile" }, { - "label": "watch", + "label": "old-watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "--project", - "${workspaceFolder}/Archive/Archive.csproj" + "${workspaceFolder}/Server/OI.Metrology.Server.csproj" ], "problemMatcher": "$msCompile" + }, + { + "label": "watchServer", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "--launch-profile", + "http", + "run", + "--project", + "${workspaceFolder}/Server/OI.Metrology.Server.csproj", + "--verbose" + ], + "isBackground": true, + "dependsOn": [ + "build" + ], + "problemMatcher": { + "fileLocation": "relative", + "pattern": { + "regexp": "^([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s*:\\s*(.*)$", + "file": 1, + "location": 2, + "severity": 3, + "code": 4, + "message": 5 + }, + "background": { + "activeOnStart": true, + "beginsPattern": "^.*Shutdown requested.*", + "endsPattern": "^.*Application started.*" + } + } + }, + { + "label": "buildClientHub", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/ClientHub/OI.Metrology.ClientHub.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publishClientHub", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/ClientHub/OI.Metrology.ClientHub.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watchClientHub", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "--launch-profile", + "http", + "run", + "--project", + "${workspaceFolder}/ClientHub/OI.Metrology.ClientHub.csproj", + "--verbose" + ], + "isBackground": true, + "dependsOn": [ + "build" + ], + "problemMatcher": { + "fileLocation": "relative", + "pattern": { + "regexp": "^([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s*:\\s*(.*)$", + "file": 1, + "location": 2, + "severity": 3, + "code": 4, + "message": 5 + }, + "background": { + "activeOnStart": true, + "beginsPattern": "^.*Shutdown requested.*", + "endsPattern": "^.*Application started.*" + } + } } ] } \ No newline at end of file diff --git a/Archive/.editorconfig b/Archive/.editorconfig new file mode 100644 index 0000000..2220133 --- /dev/null +++ b/Archive/.editorconfig @@ -0,0 +1,243 @@ +[*.cs] +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = all +csharp_new_line_between_query_expression_clauses = true +csharp_prefer_braces = false +csharp_prefer_simple_default_expression = true:warning +csharp_prefer_simple_using_statement = true:warning +csharp_prefer_static_local_function = true:warning +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = false +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true +csharp_style_allow_embedded_statements_on_same_line_experimental = true +csharp_style_conditional_delegate_call = true +csharp_style_deconstructed_variable_declaration = false +csharp_style_expression_bodied_accessors = when_on_single_line:warning +csharp_style_expression_bodied_constructors = when_on_single_line:warning +csharp_style_expression_bodied_indexers = when_on_single_line:warning +csharp_style_expression_bodied_lambdas = when_on_single_line:warning +csharp_style_expression_bodied_local_functions = when_on_single_line:warning +csharp_style_expression_bodied_methods = when_on_single_line:warning +csharp_style_expression_bodied_operators = when_on_single_line:warning +csharp_style_expression_bodied_properties = when_on_single_line:warning +csharp_style_implicit_object_creation_when_type_is_apparent = true:warning +csharp_style_inlined_variable_declaration = false +csharp_style_namespace_declarations = file_scoped:warning +csharp_style_pattern_local_over_anonymous_function = true:warning +csharp_style_pattern_matching_over_as_with_null_check = true:warning +csharp_style_pattern_matching_over_is_with_cast_check = true:warning +csharp_style_prefer_index_operator = false:warning +csharp_style_prefer_not_pattern = true:warning +csharp_style_prefer_null_check_over_type_check = true +csharp_style_prefer_pattern_matching = true:warning +csharp_style_prefer_range_operator = false:warning +csharp_style_prefer_switch_expression = true:warning +csharp_style_throw_expression = true +csharp_style_unused_value_assignment_preference = discard_variable:warning +csharp_style_unused_value_expression_statement_preference = discard_variable:warning +csharp_style_var_elsewhere = false:warning +csharp_style_var_for_built_in_types = false:warning +csharp_style_var_when_type_is_apparent = false:warning +csharp_using_directive_placement = outside_namespace +dotnet_code_quality_unused_parameters = all +dotnet_code_quality_unused_parameters = non_public # IDE0060: Remove unused parameter +dotnet_code_quality.CAXXXX.api_surface = private, internal +dotnet_diagnostic.CA1825.severity = warning # CA1823: Avoid zero-length array allocations +dotnet_diagnostic.CA1829.severity = warning # CA1829: Use Length/Count property instead of Count() when available +dotnet_diagnostic.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable +dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name +dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2"); +dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary +dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed +dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter +dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning +dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method +dotnet_naming_rule.class_should_be_pascal_case.severity = warning +dotnet_naming_rule.class_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.class_should_be_pascal_case.symbols = class +dotnet_naming_rule.delegate_should_be_pascal_case.severity = warning +dotnet_naming_rule.delegate_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.delegate_should_be_pascal_case.symbols = delegate +dotnet_naming_rule.enum_should_be_pascal_case.severity = warning +dotnet_naming_rule.enum_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.enum_should_be_pascal_case.symbols = enum +dotnet_naming_rule.event_should_be_pascal_case.severity = warning +dotnet_naming_rule.event_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.event_should_be_pascal_case.symbols = event +dotnet_naming_rule.interface_should_be_begins_with_i.severity = warning +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.method_should_be_pascal_case.severity = warning +dotnet_naming_rule.method_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.method_should_be_pascal_case.symbols = method +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = warning +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.private_method_should_be_pascal_case.severity = warning +dotnet_naming_rule.private_method_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.private_method_should_be_pascal_case.symbols = private_method +dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.severity = warning +dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.style = private_of_internal_field +dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.symbols = private_or_internal_field +dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.severity = warning +dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.style = private_of_internal_field +dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.symbols = private_or_internal_static_field +dotnet_naming_rule.property_should_be_pascal_case.severity = warning +dotnet_naming_rule.property_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.property_should_be_pascal_case.symbols = property +dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.severity = warning +dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.style = private_of_internal_field +dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.symbols = public_or_protected_field +dotnet_naming_rule.static_field_should_be_pascal_case.severity = warning +dotnet_naming_rule.static_field_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.static_field_should_be_pascal_case.symbols = static_field +dotnet_naming_rule.static_method_should_be_pascal_case.severity = warning +dotnet_naming_rule.static_method_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.static_method_should_be_pascal_case.symbols = static_method +dotnet_naming_rule.struct_should_be_pascal_case.severity = warning +dotnet_naming_rule.struct_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.struct_should_be_pascal_case.symbols = struct +dotnet_naming_rule.types_should_be_pascal_case.severity = warning +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_style.begins_with_i.capitalization = pascal_case +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.private_of_internal_field.capitalization = pascal_case +dotnet_naming_style.private_of_internal_field.required_prefix = _ +dotnet_naming_style.private_of_internal_field.required_suffix = +dotnet_naming_style.private_of_internal_field.word_separator = +dotnet_naming_symbols.abstract_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.abstract_method.applicable_kinds = method +dotnet_naming_symbols.abstract_method.required_modifiers = abstract +dotnet_naming_symbols.class.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.class.applicable_kinds = class +dotnet_naming_symbols.class.required_modifiers = +dotnet_naming_symbols.delegate.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.delegate.applicable_kinds = delegate +dotnet_naming_symbols.delegate.required_modifiers = +dotnet_naming_symbols.enum.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.enum.applicable_kinds = enum +dotnet_naming_symbols.enum.required_modifiers = +dotnet_naming_symbols.event.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.event.applicable_kinds = event +dotnet_naming_symbols.event.required_modifiers = +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.required_modifiers = +dotnet_naming_symbols.method.applicable_accessibilities = public +dotnet_naming_symbols.method.applicable_kinds = method +dotnet_naming_symbols.method.required_modifiers = +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.required_modifiers = +dotnet_naming_symbols.private_method.applicable_accessibilities = private +dotnet_naming_symbols.private_method.applicable_kinds = method +dotnet_naming_symbols.private_method.required_modifiers = +dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected +dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field +dotnet_naming_symbols.private_or_internal_field.required_modifiers = +dotnet_naming_symbols.private_or_internal_static_field.applicable_accessibilities = internal, private, private_protected +dotnet_naming_symbols.private_or_internal_static_field.applicable_kinds = field +dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = static +dotnet_naming_symbols.property.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.property.applicable_kinds = property +dotnet_naming_symbols.property.required_modifiers = +dotnet_naming_symbols.public_or_protected_field.applicable_accessibilities = public, protected +dotnet_naming_symbols.public_or_protected_field.applicable_kinds = field +dotnet_naming_symbols.public_or_protected_field.required_modifiers = +dotnet_naming_symbols.static_field.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.static_field.applicable_kinds = field +dotnet_naming_symbols.static_field.required_modifiers = static +dotnet_naming_symbols.static_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.static_method.applicable_kinds = method +dotnet_naming_symbols.static_method.required_modifiers = static +dotnet_naming_symbols.struct.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.struct.applicable_kinds = struct +dotnet_naming_symbols.struct.required_modifiers = +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.required_modifiers = +dotnet_remove_unnecessary_suppression_exclusions = 0 +dotnet_separate_import_directive_groups = false +dotnet_sort_system_directives_first = false +dotnet_style_allow_multiple_blank_lines_experimental = false:warning +dotnet_style_allow_statement_immediately_after_block_experimental = true +dotnet_style_coalesce_expression = true +dotnet_style_collection_initializer = true:warning +dotnet_style_explicit_tuple_names = true:warning +dotnet_style_namespace_match_folder = true +dotnet_style_null_propagation = true:warning +dotnet_style_object_initializer = true:warning +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity +dotnet_style_parentheses_in_other_operators = never_if_unnecessary +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity +dotnet_style_predefined_type_for_locals_parameters_members = true +dotnet_style_predefined_type_for_member_access = true +dotnet_style_prefer_auto_properties = true:warning +dotnet_style_prefer_compound_assignment = true:warning +dotnet_style_prefer_conditional_expression_over_assignment = false +dotnet_style_prefer_conditional_expression_over_return = false +dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning +dotnet_style_prefer_inferred_tuple_names = true:warning +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning +dotnet_style_prefer_simplified_boolean_expressions = true:warning +dotnet_style_prefer_simplified_interpolation = true +dotnet_style_qualification_for_event = false:error +dotnet_style_qualification_for_field = false +dotnet_style_qualification_for_method = false:error +dotnet_style_qualification_for_property = false:error +dotnet_style_readonly_field = true:warning +dotnet_style_require_accessibility_modifiers = for_non_interface_members +end_of_line = crlf +file_header_template = unset +indent_size = 4 +indent_style = space +insert_final_newline = false +root = true +tab_width = 4 +# https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1822 +# https://github.com/dotnet/aspnetcore/blob/main/.editorconfig +# https://github.com/dotnet/project-system/blob/main/.editorconfig \ No newline at end of file diff --git a/Archive/ApiControllers/AttachmentsController.cs b/Archive/ApiControllers/AttachmentsController.cs index 9a23955..1d4a7d4 100644 --- a/Archive/ApiControllers/AttachmentsController.cs +++ b/Archive/ApiControllers/AttachmentsController.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Mvc; using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Services; using System; using System.IO; @@ -8,13 +8,13 @@ using System.IO; namespace OI.Metrology.Archive.ApiControllers; public class AttachmentsController : Controller { - private readonly IMetrologyRepo _Repo; private readonly IAttachmentsService _AttachmentsService; + private readonly IMetrologyRepository _MetrologyRepository; - public AttachmentsController(IMetrologyRepo repo, IAttachmentsService attachmentsService) + public AttachmentsController(IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService) { - _Repo = repo; _AttachmentsService = attachmentsService; + _MetrologyRepository = metrologyRepository; } // this endpoint was created in hope that it would make retrieving attachments to display in OpenInsight easier @@ -27,7 +27,7 @@ public class AttachmentsController : Controller string title, string filename) { - ToolType tt = _Repo.GetToolTypeByName(toolTypeName); + ToolType tt = _MetrologyRepository.GetToolTypeByName(toolTypeName); bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase); diff --git a/Archive/ApiControllers/AwaitingDispoController.cs b/Archive/ApiControllers/AwaitingDispoController.cs index 73ca5a3..f8aba96 100644 --- a/Archive/ApiControllers/AwaitingDispoController.cs +++ b/Archive/ApiControllers/AwaitingDispoController.cs @@ -1,17 +1,17 @@ using Microsoft.AspNetCore.Mvc; -namespace OI.Metrology.Archive.ApiContollers; +namespace OI.Metrology.Archive.ApiControllers; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using System.Text.Json; // this controller is for the Awaiting Dispo functionality public class AwaitingDispoController : Controller { - private readonly IMetrologyRepo _Repo; + private readonly IMetrologyRepository _MetrologyRepository; - public AwaitingDispoController(IMetrologyRepo repo) => _Repo = repo; + public AwaitingDispoController(IMetrologyRepository metrologyRepository) => _MetrologyRepository = metrologyRepository; // returns the data to show in the Awaiting Dispo grid // marked no-cache, just-in-case since igniteUI automatically adds a query string parameter to prevent caching @@ -21,7 +21,7 @@ public class AwaitingDispoController : Controller { var r = new { - Results = _Repo.GetAwaitingDispo() + Results = _MetrologyRepository.GetAwaitingDisposition() }; return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); } @@ -30,7 +30,7 @@ public class AwaitingDispoController : Controller [HttpPost("/api/awaitingdispo/markasreviewed")] public IActionResult MarkAsReviewed([FromQuery] long headerid, [FromQuery] int tooltypeid) { - _ = _Repo.UpdateReviewDate(tooltypeid, headerid, false); + _ = _MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, false); return Ok(); } @@ -38,7 +38,7 @@ public class AwaitingDispoController : Controller [HttpPost("/api/awaitingdispo/markasawaiting")] public IActionResult MarkAsAwaiting([FromQuery] long headerid, [FromQuery] int tooltypeid) { - if (_Repo.UpdateReviewDate(tooltypeid, headerid, true) <= 1) + if (_MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, true) <= 1) return Ok(); else return StatusCode(444); diff --git a/Archive/ApiControllers/InboundController.cs b/Archive/ApiControllers/InboundController.cs index a89ff44..51d947a 100644 --- a/Archive/ApiControllers/InboundController.cs +++ b/Archive/ApiControllers/InboundController.cs @@ -4,30 +4,30 @@ using Microsoft.Extensions.Logging; using Newtonsoft.Json.Linq; using OI.Metrology.Archive.Models; using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Services; using System; using System.Collections.Generic; using System.Linq; -namespace OI.Metrology.Archive.ApiContollers; +namespace OI.Metrology.Archive.ApiControllers; [ApiController] public class InboundController : ControllerBase { private readonly ILogger _Logger; - private readonly IMetrologyRepo _Repo; private readonly AppSettings _AppSettings; private readonly IAttachmentsService _AttachmentService; private readonly IInboundDataService _InboundDataService; + private readonly IMetrologyRepository _MetrologyRepository; - public InboundController(AppSettings appSettings, ILogger logger, IMetrologyRepo repo, IInboundDataService inboundDataService, IAttachmentsService attachmentService) + public InboundController(AppSettings appSettings, ILogger logger, IMetrologyRepository metrologyRepository, IInboundDataService inboundDataService, IAttachmentsService attachmentService) { - _Repo = repo; _Logger = logger; _AppSettings = appSettings; _AttachmentService = attachmentService; _InboundDataService = inboundDataService; + _MetrologyRepository = metrologyRepository; } // this class represents the API response back to the client @@ -61,9 +61,9 @@ public class InboundController : ControllerBase return Unauthorized(r); } - ToolType toolType = _Repo.GetToolTypeByName(tooltype); + ToolType toolType = _MetrologyRepository.GetToolTypeByName(tooltype); - if (toolType == null) + if (toolType is null) { r.Errors.Add("Invalid tool type: " + tooltype); return BadRequest(r); @@ -71,9 +71,9 @@ public class InboundController : ControllerBase // get metadata - List metaData = _Repo.GetToolTypeMetadataByToolTypeID(toolType.ID).ToList(); + List metaData = _MetrologyRepository.GetToolTypeMetadataByToolTypeID(toolType.ID).ToList(); - if (metaData == null) + if (metaData is null) { r.Errors.Add("Invalid metadata for tool type: " + tooltype); return BadRequest(r); @@ -81,7 +81,7 @@ public class InboundController : ControllerBase // validate fields - if (jsonbody != null) + if (jsonbody is not null) _InboundDataService.ValidateJSONFields(jsonbody, 0, metaData, r.Errors, r.Warnings); else r.Errors.Add("Invalid json"); @@ -118,12 +118,12 @@ public class InboundController : ControllerBase return Unauthorized("Remote IP is not on allowed list"); } - ToolType toolType = _Repo.GetToolTypeByName(tooltype); + ToolType toolType = _MetrologyRepository.GetToolTypeByName(tooltype); - if (toolType == null) + if (toolType is null) return BadRequest($"Invalid tool type: {tooltype}"); - if (Request.Form == null) + if (Request.Form is null) return BadRequest($"Invalid form"); if (Request.Form.Files.Count != 1) diff --git a/Archive/ApiControllers/ReactorsController.cs b/Archive/ApiControllers/ReactorsController.cs new file mode 100644 index 0000000..9309292 --- /dev/null +++ b/Archive/ApiControllers/ReactorsController.cs @@ -0,0 +1,99 @@ +using Microsoft.AspNetCore.Mvc; +using System.Linq; + +namespace OI.Metrology.Archive.ApiControllers; + +using OI.Metrology.Archive.Models; +using OI.Metrology.Shared.Models.Stateless; +using System.Text.Json; + +public class ReactorsController : Controller +{ + + private readonly AppSettings _AppSettings; + private readonly IMetrologyRepository _MetrologyRepository; + + public ReactorsController(AppSettings appSettings, IMetrologyRepository metrologyRepository) + { + _AppSettings = appSettings; + _MetrologyRepository = metrologyRepository; + } + + private static int[] EvenReactors() + { + int[] results = new int[] { + 20, + 22, + 24, + 26, + 28, + 30, + 32, + 34, + 36, + 38, + 40, + 42, + 44, + 46, + 48, + 50, + 52, + 54, + 56, + 58, + 60, + 62, + 64, + 66, + 68, + 70, + 72, + 74 + }; + return results; + } + + private static int[] OddReactors() + { + int[] results = new int[] { + 21, + 23, + 25, + 27, + 29, + 31, + 33, + 35, + 37, + 39, + 41, + 43, + 45, + 47, + 49, + 51, + 53, + 55, + 57, + 59, + 61, + 63, + 65, + 73, + 75, + 77, + 79 + }; + return results; + } + + [HttpGet("/api/reactors/{even}")] + public IActionResult Index(bool even) + { + int[] n = even ? EvenReactors() : OddReactors(); + var r = n.Select(l => new { Name = $"R{l}", Id = l }); + return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); + } + +} \ No newline at end of file diff --git a/Archive/ApiControllers/ToolTypesController.cs b/Archive/ApiControllers/ToolTypesController.cs index fc3491f..33bfc36 100644 --- a/Archive/ApiControllers/ToolTypesController.cs +++ b/Archive/ApiControllers/ToolTypesController.cs @@ -4,11 +4,11 @@ using System; using System.IO; using System.Linq; -namespace OI.Metrology.Archive.ApiContollers; +namespace OI.Metrology.Archive.ApiControllers; using OI.Metrology.Archive.Models; using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Services; using System.Collections.Generic; using System.Text.Json; @@ -21,15 +21,15 @@ public class ToolTypesController : Controller // it is named after the /api/tooltypes prefix // the URL pattern is RESTful and the tool type is the root of every request - private readonly IMetrologyRepo _Repo; private readonly AppSettings _AppSettings; private readonly IAttachmentsService _AttachmentsService; + private readonly IMetrologyRepository _MetrologyRepository; - public ToolTypesController(AppSettings appSettings, IMetrologyRepo repo, IAttachmentsService attachmentsService) + public ToolTypesController(AppSettings appSettings, IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService) { - _Repo = repo; _AppSettings = appSettings; _AttachmentsService = attachmentsService; + _MetrologyRepository = metrologyRepository; } // Get a list of tooltypes, returns just Name and ID @@ -38,7 +38,7 @@ public class ToolTypesController : Controller { var r = new { - Results = _Repo.GetToolTypes().Select(tt => new { tt.ToolTypeName, tt.ID }) + Results = _MetrologyRepository.GetToolTypes().Select(tt => new { tt.ToolTypeName, tt.ID }) }; return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); } @@ -48,8 +48,8 @@ public class ToolTypesController : Controller [HttpGet("/api/tooltypes/{id}")] public IActionResult GetToolTypeMetadata(int id, string sortby = "") { - ToolType tt = _Repo.GetToolTypeByID(id); - IEnumerable md = _Repo.GetToolTypeMetadataByToolTypeID(id); + ToolType tt = _MetrologyRepository.GetToolTypeByID(id); + IEnumerable md = _MetrologyRepository.GetToolTypeMetadataByToolTypeID(id); if (string.Equals(sortby, "grid", StringComparison.OrdinalIgnoreCase)) md = md.OrderBy(f => f.GridDisplayOrder).ToList(); @@ -80,7 +80,7 @@ public class ToolTypesController : Controller { long totalRecs; - System.Data.DataTable dt = _Repo.GetHeaders(id, datebegin, dateend, page, pagesize, headerid, out totalRecs); + System.Data.DataTable dt = _MetrologyRepository.GetHeaders(id, datebegin, dateend, page, pagesize, headerid, out totalRecs); var r = new { @@ -101,7 +101,7 @@ public class ToolTypesController : Controller { long totalRecs; - IEnumerable dt = _Repo.GetHeaderTitles(id, page, pagesize, out totalRecs); + IEnumerable dt = _MetrologyRepository.GetHeaderTitles(id, page, pagesize, out totalRecs); var r = new { @@ -121,7 +121,7 @@ public class ToolTypesController : Controller { var r = new { - Results = _Repo.GetHeaderFields(id, headerid).Select(x => new { Column = x.Key, x.Value }).ToList() + Results = _MetrologyRepository.GetHeaderFields(id, headerid).Select(x => new { Column = x.Key, x.Value }).ToList() }; string json = JsonConvert.SerializeObject(r); @@ -137,7 +137,7 @@ public class ToolTypesController : Controller var r = new { - Results = _Repo.GetDataSharePoint(id, title) + Results = _MetrologyRepository.GetDataSharePoint(id, title) }; string json = JsonConvert.SerializeObject(r); @@ -152,7 +152,7 @@ public class ToolTypesController : Controller var r = new { - Results = _Repo.GetData(id, headerid) + Results = _MetrologyRepository.GetData(id, headerid) }; string json = JsonConvert.SerializeObject(r); @@ -168,7 +168,7 @@ public class ToolTypesController : Controller string filename) { - ToolType tt = _Repo.GetToolTypeByID(toolTypeId); + ToolType tt = _MetrologyRepository.GetToolTypeByID(toolTypeId); bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase); @@ -191,7 +191,7 @@ public class ToolTypesController : Controller public IActionResult OIExport(int toolTypeId, long headerid) { // Call the export stored procedure - System.Data.DataSet ds = _Repo.GetOIExportData(toolTypeId, headerid); + System.Data.DataSet ds = _MetrologyRepository.GetOIExportData(toolTypeId, headerid); try { @@ -213,7 +213,7 @@ public class ToolTypesController : Controller foreach (object o in ds.Tables[1].Rows[0].ItemArray) { - if ((o != null) && (!Convert.IsDBNull(o))) + if ((o is not null) && (!Convert.IsDBNull(o))) _ = sb.Append(Convert.ToString(o)); _ = sb.Append('\t'); } @@ -223,7 +223,7 @@ public class ToolTypesController : Controller { foreach (object o in dr.ItemArray) { - if ((o != null) && (!Convert.IsDBNull(o))) + if ((o is not null) && (!Convert.IsDBNull(o))) _ = sb.Append(Convert.ToString(o)); _ = sb.Append('\t'); } diff --git a/Archive/Controllers/ErrorHandlerController.cs b/Archive/Controllers/ErrorHandlerController.cs index 8c3ba6c..ea1ed91 100644 --- a/Archive/Controllers/ErrorHandlerController.cs +++ b/Archive/Controllers/ErrorHandlerController.cs @@ -15,7 +15,7 @@ public class ErrorHandlerController : Controller public IActionResult Index() { IExceptionHandlerFeature error = HttpContext.Features.Get(); - if (error == null) + if (error is null) { return Redirect("~/"); } @@ -24,7 +24,7 @@ public class ErrorHandlerController : Controller _Logger.LogError("Unhandled exception: " + error.Error.ToString()); dynamic r = new { - Message = error.Error == null ? "Error" : error.Error.Message + Message = error.Error is null ? "Error" : error.Error.Message }; return StatusCode(StatusCodes.Status500InternalServerError, r); } diff --git a/Archive/Controllers/ExportController.cs b/Archive/Controllers/ExportController.cs index ad59eca..f2bd78f 100644 --- a/Archive/Controllers/ExportController.cs +++ b/Archive/Controllers/ExportController.cs @@ -4,7 +4,7 @@ using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.Logging; using OI.Metrology.Archive.Models; using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.ViewModels; using System; using System.Collections.Generic; @@ -17,14 +17,14 @@ public class ExportController : Controller { private readonly ILogger _Logger; private readonly bool _IsTestDatabase; - private readonly IMetrologyRepo _Repo; private readonly AppSettings _AppSettings; + private readonly IMetrologyRepository _MetrologyRepository; - public ExportController(AppSettings appSettings, ILogger logger, IMetrologyRepo repo) + public ExportController(AppSettings appSettings, ILogger logger, IMetrologyRepository metrologyRepository) { - _Repo = repo; _Logger = logger; _AppSettings = appSettings; + _MetrologyRepository = metrologyRepository; _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase); } @@ -40,7 +40,6 @@ public class ExportController : Controller { Export model = new() { - ToolType = "", StartTime = DateTime.Now.AddMonths(-1), EndTime = DateTime.Now }; @@ -60,7 +59,7 @@ public class ExportController : Controller { if (model.StartTime > model.EndTime) ModelState.AddModelError("EndTime", "End time must be after start time"); - IEnumerable toolTypes = _Repo.GetToolTypes(); + IEnumerable toolTypes = _MetrologyRepository.GetToolTypes(); toolType = toolTypes.Where(tt => tt.ID.ToString() == model.ToolType).SingleOrDefault(); if (toolType is null) ModelState.AddModelError("ToolType", "Invalid selection"); @@ -94,7 +93,7 @@ public class ExportController : Controller string fileName = string.Format("Export_{0}_{1:yyyyMMddHHmm}_to_{2:yyyyMMddHHmm}.csv", toolTypeName, startTime, endTime); StringBuilder sb = new(); - System.Data.DataTable dt = _Repo.ExportData(spName, startTime, endTime); + System.Data.DataTable dt = _MetrologyRepository.ExportData(spName, startTime, endTime); _ = sb.AppendLine(GetColumnHeaders(dt)); diff --git a/Archive/Controllers/PagesController.cs b/Archive/Controllers/PagesController.cs index fcf25ad..a8fe79c 100644 --- a/Archive/Controllers/PagesController.cs +++ b/Archive/Controllers/PagesController.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using OI.Metrology.Archive.Models; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Repositories; using OI.Metrology.Shared.ViewModels; using System; @@ -13,12 +14,12 @@ public class PagesController : Controller { private readonly bool _IsTestDatabase; private readonly IRdsMaxRepo _RdsMaxRepo; - private readonly IMetrologyRepo _MetrologyRepo; + private readonly IMetrologyRepository _MetrologyRepo; - public PagesController(AppSettings appSettings, IMetrologyRepo metrologyRepo, IRdsMaxRepo rdsMaxRepo) + public PagesController(AppSettings appSettings, IMetrologyRepository metrologyRepository, IRdsMaxRepo rdsMaxRepo) { _RdsMaxRepo = rdsMaxRepo; - _MetrologyRepo = metrologyRepo; + _MetrologyRepo = metrologyRepository; _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase); } @@ -122,4 +123,9 @@ public class PagesController : Controller return View(results); } + [HttpGet] + [Route("/Reactor")] + [Route("/Metrology/Reactor")] + public IActionResult Reactor() => View(new RunInfo()); + } \ No newline at end of file diff --git a/Archive/Models/AppSettings.cs b/Archive/Models/AppSettings.cs index a5a06b6..2f45100 100644 --- a/Archive/Models/AppSettings.cs +++ b/Archive/Models/AppSettings.cs @@ -1,61 +1,24 @@ using System.Text.Json; -using System.Text.Json.Serialization; namespace OI.Metrology.Archive.Models; -public class AppSettings +public record AppSettings(string ApiLoggingContentTypes, + string ApiLoggingPathPrefixes, + string ApiLogPath, + string AttachmentPath, + string BuildNumber, + string Company, + string ConnectionString, + string GitCommitSeven, + string InboundApiAllowedIPList, + string MonAResource, + string MonASite, + string Oi2SqlConnectionString, + string OIExportPath, + string URLs, + string WorkingDirectoryName) { - public string ApiLoggingContentTypes { init; get; } - public string ApiLoggingPathPrefixes { init; get; } - public string ApiLogPath { init; get; } - public string AttachmentPath { init; get; } - public string BuildNumber { init; get; } - public string Company { init; get; } - public string ConnectionString { init; get; } - public string GitCommitSeven { init; get; } - public string InboundApiAllowedIPList { init; get; } - public string MonAResource { init; get; } - public string MonASite { init; get; } - public string OIExportPath { init; get; } - public string Oi2SqlConnectionString { init; get; } - public string URLs { init; get; } - public string WorkingDirectoryName { init; get; } - - [JsonConstructor] - public AppSettings(string apiLoggingContentTypes, - string apiLoggingPathPrefixes, - string apiLogPath, - string attachmentPath, - string buildNumber, - string company, - string connectionString, - string gitCommitSeven, - string inboundApiAllowedIPList, - string monAResource, - string monASite, - string oi2SqlConnectionString, - string oiExportPath, - string urls, - string workingDirectoryName) - { - ApiLoggingContentTypes = apiLoggingContentTypes; - ApiLoggingPathPrefixes = apiLoggingPathPrefixes; - ApiLogPath = apiLogPath; - AttachmentPath = attachmentPath; - BuildNumber = buildNumber; - Company = company; - ConnectionString = connectionString; - GitCommitSeven = gitCommitSeven; - InboundApiAllowedIPList = inboundApiAllowedIPList; - MonAResource = monAResource; - MonASite = monASite; - Oi2SqlConnectionString = oi2SqlConnectionString; - OIExportPath = oiExportPath; - URLs = urls; - WorkingDirectoryName = workingDirectoryName; - } - public override string ToString() { string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); diff --git a/Archive/Models/Binder/AppSettings.cs b/Archive/Models/Binder/AppSettings.cs index 5b416de..aa6a0ca 100644 --- a/Archive/Models/Binder/AppSettings.cs +++ b/Archive/Models/Binder/AppSettings.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Configuration; +using System; using System.ComponentModel.DataAnnotations; using System.Text.Json; @@ -36,6 +37,38 @@ public class AppSettings private static Models.AppSettings Get(AppSettings appSettings) { Models.AppSettings result; + if (appSettings is null) + throw new NullReferenceException(nameof(appSettings)); + if (appSettings.ApiLoggingContentTypes is null) + throw new NullReferenceException(nameof(ApiLoggingContentTypes)); + if (appSettings.ApiLoggingPathPrefixes is null) + throw new NullReferenceException(nameof(ApiLoggingPathPrefixes)); + if (appSettings.ApiLogPath is null) + throw new NullReferenceException(nameof(ApiLogPath)); + if (appSettings.AttachmentPath is null) + throw new NullReferenceException(nameof(AttachmentPath)); + if (appSettings.BuildNumber is null) + throw new NullReferenceException(nameof(BuildNumber)); + if (appSettings.Company is null) + throw new NullReferenceException(nameof(Company)); + if (appSettings.ConnectionString is null) + throw new NullReferenceException(nameof(ConnectionString)); + if (appSettings.GitCommitSeven is null) + throw new NullReferenceException(nameof(GitCommitSeven)); + if (appSettings.InboundApiAllowedIPList is null) + throw new NullReferenceException(nameof(InboundApiAllowedIPList)); + if (appSettings.MonAResource is null) + throw new NullReferenceException(nameof(MonAResource)); + if (appSettings.MonASite is null) + throw new NullReferenceException(nameof(MonASite)); + if (appSettings.Oi2SqlConnectionString is null) + throw new NullReferenceException(nameof(Oi2SqlConnectionString)); + if (appSettings.OIExportPath is null) + throw new NullReferenceException(nameof(OIExportPath)); + if (appSettings.URLs is null) + throw new NullReferenceException(nameof(URLs)); + if (appSettings.WorkingDirectoryName is null) + throw new NullReferenceException(nameof(WorkingDirectoryName)); result = new( appSettings.ApiLoggingContentTypes, appSettings.ApiLoggingPathPrefixes, diff --git a/Archive/Archive.csproj b/Archive/OI.Metrology.Archive.csproj similarity index 83% rename from Archive/Archive.csproj rename to Archive/OI.Metrology.Archive.csproj index 7baedc6..c417e75 100644 --- a/Archive/Archive.csproj +++ b/Archive/OI.Metrology.Archive.csproj @@ -12,8 +12,11 @@ disable Exe win-x64 - net6.0 + net7.0 + + + @@ -26,28 +29,22 @@ - - - - - - - - - - - - - - + + + + + + + + + + - + + - - - - + diff --git a/Archive/Program.cs b/Archive/Program.cs index 9cb14c0..0475682 100644 --- a/Archive/Program.cs +++ b/Archive/Program.cs @@ -9,6 +9,7 @@ using OI.Metrology.Archive.Models; using OI.Metrology.Archive.Repositories; using OI.Metrology.Archive.Services; using OI.Metrology.Shared.Models; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Repositories; using OI.Metrology.Shared.Services; using Serilog; @@ -21,6 +22,8 @@ namespace OI.Metrology.Archive; public class Program { + internal readonly AppSettings _AppSettings; + private static (string, WebApplicationOptions) Get(string[] args) { string webRootPath; @@ -50,10 +53,10 @@ public class Program (string assemblyName, WebApplicationOptions _) = Get(args); WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args); _ = webApplicationBuilder.Configuration.AddUserSecrets(); - AppSettings appSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration); - if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName)) + AppSettings _AppSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration); + if (string.IsNullOrEmpty(_AppSettings.WorkingDirectoryName)) throw new Exception("Working directory name must have a value!"); - string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assemblyName, appSettings.WorkingDirectoryName); + string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assemblyName, _AppSettings.WorkingDirectoryName); Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, webApplicationBuilder.Configuration); _ = SerilogHostBuilderExtensions.UseSerilog(webApplicationBuilder.Host); @@ -63,13 +66,13 @@ public class Program { _ = webApplicationBuilder.Services.Configure(options => options.SuppressModelStateInvalidFilter = true); _ = webApplicationBuilder.Services.AddControllersWithViews(); - _ = new MetrologyRepo(new SQLDbConnectionFactory(appSettings), null); + _ = new MetrologyRepository(new SQLDbConnectionFactory(_AppSettings), null); _ = webApplicationBuilder.Services.AddDistributedMemoryCache(); _ = webApplicationBuilder.Services.AddMemoryCache(); - _ = webApplicationBuilder.Services.AddSingleton(_ => appSettings); + _ = webApplicationBuilder.Services.AddSingleton(_ => _AppSettings); _ = webApplicationBuilder.Services.AddScoped(); _ = webApplicationBuilder.Services.AddScoped(); - _ = webApplicationBuilder.Services.AddScoped(); + _ = webApplicationBuilder.Services.AddScoped(); _ = webApplicationBuilder.Services.AddScoped(); _ = webApplicationBuilder.Services.AddSingleton(); _ = webApplicationBuilder.Services.AddSwaggerGen(); @@ -85,8 +88,10 @@ public class Program _ = webApplicationBuilder.Services.AddSingleton(); _ = webApplicationBuilder.Logging.AddEventLog(settings => { +#pragma warning disable CA1416 if (string.IsNullOrEmpty(settings.SourceName)) settings.SourceName = webApplicationBuilder.Environment.ApplicationName; +#pragma warning restore }); } WebApplication webApplication = webApplicationBuilder.Build(); @@ -97,7 +102,7 @@ public class Program } else { - if (string.IsNullOrEmpty(appSettings.URLs)) + if (string.IsNullOrEmpty(_AppSettings.URLs)) { Environment.ExitCode = -1; webApplication.Lifetime.StopApplication(); diff --git a/Archive/Repositories/MetrologyRepo.cs b/Archive/Repositories/MetrologyRepo.cs index 78ce1d9..d043406 100644 --- a/Archive/Repositories/MetrologyRepo.cs +++ b/Archive/Repositories/MetrologyRepo.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.Caching.Memory; using Newtonsoft.Json.Linq; using OI.Metrology.Shared.DataModels; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Repositories; using System; using System.Collections.Generic; @@ -12,12 +13,12 @@ using System.Transactions; namespace OI.Metrology.Archive.Repositories; -public class MetrologyRepo : IMetrologyRepo +public class MetrologyRepository : IMetrologyRepository { private readonly IDbConnectionFactory _DBConnectionFactory; private readonly IMemoryCache _Cache; - public MetrologyRepo(IDbConnectionFactory dbConnectionFactory, IMemoryCache memoryCache) + public MetrologyRepository(IDbConnectionFactory dbConnectionFactory, IMemoryCache memoryCache) { _DBConnectionFactory = dbConnectionFactory; _Cache = memoryCache; @@ -28,20 +29,6 @@ public class MetrologyRepo : IMetrologyRepo protected DbProviderFactory GetDbProviderFactory(IDbConnection conn) => DbProviderFactories.GetFactory(conn.GetType().Namespace); - public bool IsTestDatabase() - { - int c = 0; - using (DbConnection conn = GetDbConnection()) - { - c = conn.Query( - "SELECT COUNT(*) " + - "FROM Configuration " + - "WHERE KeyName = 'TestDatabase' " + - "AND ValueString = '1'").FirstOrDefault(); - } - return c > 0; - } - public TransactionScope StartTransaction() => new(); protected void CacheItem(string key, object v) @@ -136,10 +123,10 @@ public class MetrologyRepo : IMetrologyRepo // build field map foreach (ToolTypeMetadata f in fields) { - if ((f.ApiName != null) && f.ApiName.Contains('\\')) + if ((f.ApiName is not null) && f.ApiName.Contains('\\')) { string n = f.ApiName.Split('\\')[0].Trim().ToUpper(); - if (containerField == null) + if (containerField is null) containerField = n; else if (!string.Equals(containerField, n)) throw new Exception("Only one container field is allowed"); @@ -153,7 +140,7 @@ public class MetrologyRepo : IMetrologyRepo } } - if (containerField == null) + if (containerField is null) { // No container field, just insert a single row @@ -164,7 +151,7 @@ public class MetrologyRepo : IMetrologyRepo // Find the container field in the json JProperty contJP = jsonrow.Children().Where(c => string.Equals(c.Name.Trim(), containerField, StringComparison.OrdinalIgnoreCase)).SingleOrDefault(); - if ((contJP != null) && (contJP.Value is JArray array)) + if ((contJP is not null) && (contJP.Value is JArray array)) { JArray contRows = array; @@ -227,14 +214,13 @@ public class MetrologyRepo : IMetrologyRepo parmnumber += 1; object sqlValue = ((JValue)jp.Value).Value; - if (sqlValue == null) - sqlValue = DBNull.Value; + sqlValue ??= DBNull.Value; AddParameter(cmd, parmname, sqlValue); } } - if ((containerrow != null) && (containerFieldmap != null)) + if ((containerrow is not null) && (containerFieldmap is not null)) { foreach (JProperty jp in containerrow.Children()) @@ -251,8 +237,7 @@ public class MetrologyRepo : IMetrologyRepo parmnumber += 1; object sqlValue = ((JValue)jp.Value).Value; - if (sqlValue == null) - sqlValue = DBNull.Value; + sqlValue ??= DBNull.Value; AddParameter(cmd, parmname, sqlValue); } @@ -266,7 +251,7 @@ public class MetrologyRepo : IMetrologyRepo cmd.CommandText = columns.TrimEnd(',') + parms.TrimEnd(',') + ";SELECT SCOPE_IDENTITY();"; object o = cmd.ExecuteScalar(); - if ((o == null) || Convert.IsDBNull(o)) + if ((o is null) || Convert.IsDBNull(o)) throw new Exception("Unexpected query result"); return Convert.ToInt64(o); } @@ -306,7 +291,7 @@ public class MetrologyRepo : IMetrologyRepo { if (!firstField) _ = sb.Append(','); - if (f.GridAttributes != null && f.GridAttributes.Contains("isNull")) + if (f.GridAttributes is not null && f.GridAttributes.Contains("isNull")) { _ = sb.AppendFormat("{0}", "ISNULL(" + f.ColumnName + ", '')[" + f.ColumnName + "]"); } @@ -324,11 +309,11 @@ public class MetrologyRepo : IMetrologyRepo public DataTable GetHeaders(int toolTypeId, DateTime? startTime, DateTime? endTime, int? pageNo, int? pageSize, long? headerId, out long totalRecords) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); IEnumerable md = GetToolTypeMetadataByToolTypeID(toolTypeId); - if (md == null) + if (md is null) throw new Exception("Invalid tool type metadata"); DataTable dt = new(); @@ -420,11 +405,11 @@ public class MetrologyRepo : IMetrologyRepo public DataTable GetData(int toolTypeId, long headerid) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); IEnumerable md = GetToolTypeMetadataByToolTypeID(toolTypeId); - if (md == null) + if (md is null) throw new Exception("Invalid tool type metadata"); DataTable dt = new(); @@ -531,11 +516,11 @@ public class MetrologyRepo : IMetrologyRepo public DataTable GetDataSharePoint(int toolTypeId, string headerid) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); IEnumerable md = GetToolTypeMetadataByToolTypeID(toolTypeId); - if (md == null) + if (md is null) throw new Exception("Invalid tool type metadata"); DataTable dt = new(); @@ -626,7 +611,7 @@ public class MetrologyRepo : IMetrologyRepo public Guid GetHeaderAttachmentID(int toolTypeId, long headerId) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -639,7 +624,7 @@ public class MetrologyRepo : IMetrologyRepo public Guid GetDataAttachmentID(int toolTypeId, long headerId, string title) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -658,7 +643,7 @@ public class MetrologyRepo : IMetrologyRepo public DataSet GetOIExportData(int toolTypeId, long headerid) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); if (string.IsNullOrWhiteSpace(tt.OIExportSPName)) @@ -684,10 +669,13 @@ public class MetrologyRepo : IMetrologyRepo return ds; } - public IEnumerable GetHeaderTitles(int toolTypeId, int? pageNo, int? pageSize, out long totalRecords) + public HeaderCommon[] GetHeaderTitles(int? toolTypeId, int? pageNo, int? pageSize, out long totalRecords) { - ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (toolTypeId is null) + throw new Exception("Invalid tool type ID"); + + ToolType tt = GetToolTypeByID(toolTypeId.Value); + if (tt is null) throw new Exception("Invalid tool type ID"); DbConnection conn = GetDbConnection(); @@ -695,17 +683,17 @@ public class MetrologyRepo : IMetrologyRepo { string sql = $"SELECT ID, InsertDate, AttachmentID, Title, [Date] FROM {tt.HeaderTableName} ORDER BY [Date] DESC "; - IEnumerable headers; + HeaderCommon[] headers; if (pageNo.HasValue && pageSize.HasValue) { sql += "OFFSET @PageNum * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY"; - headers = conn.Query(sql, param: new { PageNum = pageNo.Value, PageSize = pageSize.Value }).ToList(); + headers = conn.Query(sql, param: new { PageNum = pageNo.Value, PageSize = pageSize.Value }).ToArray(); } else { - headers = conn.Query(sql).ToList(); + headers = conn.Query(sql).ToArray(); } sql = $"SELECT COUNT(*) FROM [{tt.HeaderTableName}] "; @@ -719,11 +707,11 @@ public class MetrologyRepo : IMetrologyRepo public IEnumerable> GetHeaderFields(int toolTypeId, long headerid) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); IEnumerable md = GetToolTypeMetadataByToolTypeID(toolTypeId); - if (md == null) + if (md is null) throw new Exception("Invalid tool type metadata"); List> r = new(); @@ -751,10 +739,10 @@ public class MetrologyRepo : IMetrologyRepo foreach (ToolTypeMetadata m in md.Where(m => m.Header == true && m.TableDisplayOrder > 0).OrderBy(m => m.TableDisplayOrder)) { string v = ""; - if (dr != null) + if (dr is not null) { object o = dr[m.ColumnName]; - if (o != null && !Convert.IsDBNull(o)) + if (o is not null && !Convert.IsDBNull(o)) v = Convert.ToString(o); } KeyValuePair kvp = new(m.DisplayTitle, v); @@ -764,16 +752,16 @@ public class MetrologyRepo : IMetrologyRepo return r; } - public IEnumerable GetAwaitingDispo() + public IEnumerable GetAwaitingDisposition() { using DbConnection conn = GetDbConnection(); - return conn.Query("GetAwaitingDispo", commandType: CommandType.StoredProcedure); + return conn.Query("GetAwaitingDispo", commandType: CommandType.StoredProcedure); } // Jonathan changed this to remove the reviewDate update on the database. public int UpdateReviewDate(int toolTypeId, long headerId, bool clearDate) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -794,7 +782,7 @@ public class MetrologyRepo : IMetrologyRepo public Guid GetHeaderAttachmentIDByTitle(int toolTypeId, string title) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -806,7 +794,7 @@ public class MetrologyRepo : IMetrologyRepo public Guid GetDataAttachmentIDByTitle(int toolTypeId, string title) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -815,8 +803,8 @@ public class MetrologyRepo : IMetrologyRepo return conn.ExecuteScalar(sql, param: new { Title = title }); } - string IMetrologyRepo.GetHeaderInsertDate(int toolTypeId, long headerId) => throw new NotImplementedException(); - void IMetrologyRepo.SetHeaderDirName(string tableName, long headerId, string dateDir) => throw new NotImplementedException(); - string IMetrologyRepo.GetDataInsertDate(int toolTypeId, long headerId, string title) => throw new NotImplementedException(); - void IMetrologyRepo.SetDataDirName(string tableName, long headerId, string title, string dateDir) => throw new NotImplementedException(); + string IMetrologyRepository.GetHeaderInsertDate(int toolTypeId, long headerId) => throw new NotImplementedException(); + void IMetrologyRepository.SetHeaderDirName(string tableName, long headerId, string dateDir) => throw new NotImplementedException(); + string IMetrologyRepository.GetDataInsertDate(int toolTypeId, long headerId, string title) => throw new NotImplementedException(); + void IMetrologyRepository.SetDataDirName(string tableName, long headerId, string title, string dateDir) => throw new NotImplementedException(); } \ No newline at end of file diff --git a/Archive/Services/AttachmentsService.cs b/Archive/Services/AttachmentsService.cs index 8412c45..f4113fe 100644 --- a/Archive/Services/AttachmentsService.cs +++ b/Archive/Services/AttachmentsService.cs @@ -6,27 +6,27 @@ namespace OI.Metrology.Archive.Services; using OI.Metrology.Archive.Models; using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Services; using System.Data.SqlClient; public class AttachmentsService : IAttachmentsService { - private readonly IMetrologyRepo _Repo; private readonly AppSettings _AppSettings; + private readonly IMetrologyRepository _MetrologyRepository; - public AttachmentsService(AppSettings appSettings, IMetrologyRepo repo) + public AttachmentsService(AppSettings appSettings, IMetrologyRepository metrologyRepository) { - _Repo = repo; _AppSettings = appSettings; + _MetrologyRepository = metrologyRepository; } protected Stream GetAttachmentStream(string tableName, Guid attachmentId, string filename) { if (attachmentId.Equals(Guid.Empty)) throw new Exception("No attachments found"); - DateTime insertDate = Convert.ToDateTime(_Repo.GetAttachmentInsertDateByGUID(tableName, attachmentId)); + DateTime insertDate = Convert.ToDateTime(_MetrologyRepository.GetAttachmentInsertDateByGUID(tableName, attachmentId)); int year = insertDate.Year; DateTime d = insertDate; CultureInfo cul = CultureInfo.CurrentCulture; @@ -63,7 +63,7 @@ public class AttachmentsService : IAttachmentsService public Stream GetAttachmentStreamByTitle(ToolType toolType, bool header, string title, string filename) { - if (toolType == null) + if (toolType is null) throw new Exception("Invalid tool type"); string queryString = "SELECT * FROM " + toolType.DataTableName + " WHERE AttachmentId = @attachmentId"; @@ -103,19 +103,19 @@ public class AttachmentsService : IAttachmentsService if (header) { tableName = toolType.HeaderTableName; - attachmentId = _Repo.GetHeaderAttachmentIDByTitle(toolType.ID, title); + attachmentId = _MetrologyRepository.GetHeaderAttachmentIDByTitle(toolType.ID, title); } else { tableName = toolType.DataTableName; - attachmentId = _Repo.GetDataAttachmentIDByTitle(toolType.ID, title); + attachmentId = _MetrologyRepository.GetDataAttachmentIDByTitle(toolType.ID, title); } return GetAttachmentStream(tableName, attachmentId, filename); } public Stream GetAttachmentStreamByAttachmentId(ToolType toolType, bool header, Guid attachmentId, string filename) { - if (toolType == null) + if (toolType is null) throw new Exception("Invalid tool type"); string tableName; if (header) @@ -126,7 +126,7 @@ public class AttachmentsService : IAttachmentsService } public Stream GetAttachmentStreamByAttachmentIdArchive(ToolType toolType, bool header, Guid attachmentId, string filename) { - if (toolType == null) + if (toolType is null) throw new Exception("Invalid tool type"); string tableName; if (header) @@ -139,21 +139,21 @@ public class AttachmentsService : IAttachmentsService private void SaveAttachment(ToolType toolType, long headerId, string dataUniqueId, string filename, Microsoft.AspNetCore.Http.IFormFile uploadedFile) { - if (toolType == null) + if (toolType is null) throw new Exception("Invalid tool type"); - using System.Transactions.TransactionScope trans = _Repo.StartTransaction(); + using System.Transactions.TransactionScope trans = _MetrologyRepository.StartTransaction(); Guid attachmentId = Guid.Empty; string tableName = ""; if (string.IsNullOrWhiteSpace(dataUniqueId)) { - attachmentId = _Repo.GetHeaderAttachmentID(toolType.ID, headerId); + attachmentId = _MetrologyRepository.GetHeaderAttachmentID(toolType.ID, headerId); tableName = toolType.HeaderTableName; } else { - attachmentId = _Repo.GetDataAttachmentID(toolType.ID, headerId, dataUniqueId); + attachmentId = _MetrologyRepository.GetDataAttachmentID(toolType.ID, headerId, dataUniqueId); tableName = toolType.DataTableName; } if (Equals(attachmentId, Guid.Empty)) diff --git a/Archive/Services/InboundDataService.cs b/Archive/Services/InboundDataService.cs index ef03278..576fd3f 100644 --- a/Archive/Services/InboundDataService.cs +++ b/Archive/Services/InboundDataService.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json.Linq; using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Services; using System; using System.Collections.Generic; @@ -10,9 +10,9 @@ namespace OI.Metrology.Archive.Services; public class InboundDataService : IInboundDataService { - private readonly IMetrologyRepo _Repo; + private readonly IMetrologyRepository _MetrologyRepository; - public InboundDataService(IMetrologyRepo repo) => _Repo = repo; + public InboundDataService(IMetrologyRepository metrologyRepository) => _MetrologyRepository = metrologyRepository; public long DoSQLInsert(JToken jsonbody, ToolType toolType, List metaData) { @@ -37,11 +37,11 @@ public class InboundDataService : IInboundDataService long headerId = 0; - using (System.Transactions.TransactionScope transScope = _Repo.StartTransaction()) + using (System.Transactions.TransactionScope transScope = _MetrologyRepository.StartTransaction()) { try { - _Repo.PurgeExistingData(toolType.ID, uniqueId); + _MetrologyRepository.PurgeExistingData(toolType.ID, uniqueId); } catch (Exception ex) { @@ -50,7 +50,7 @@ public class InboundDataService : IInboundDataService try { - headerId = _Repo.InsertToolDataJSON(jsonbody, -1, metaData, toolType.HeaderTableName); + headerId = _MetrologyRepository.InsertToolDataJSON(jsonbody, -1, metaData, toolType.HeaderTableName); } catch (Exception ex) { @@ -60,11 +60,11 @@ public class InboundDataService : IInboundDataService int detailrow = 1; try { - if (detailsArray != null) + if (detailsArray is not null) { foreach (JToken detail in detailsArray) { - _ = _Repo.InsertToolDataJSON(detail, headerId, metaData, toolType.DataTableName); + _ = _MetrologyRepository.InsertToolDataJSON(detail, headerId, metaData, toolType.DataTableName); detailrow += 1; } } @@ -133,7 +133,7 @@ public class InboundDataService : IInboundDataService if (jp.First is JArray array) detailsArray = array; - else if ((jp.First is JValue value) && (value.Value == null)) + else if ((jp.First is JValue value) && (value.Value is null)) detailsArray = null; else errors.Add("Invalid details field"); @@ -169,7 +169,7 @@ public class InboundDataService : IInboundDataService } // if a Details container if found, process it by recursion - if (detailsArray != null) + if (detailsArray is not null) { int i = 1; foreach (JToken detail in detailsArray) @@ -189,7 +189,7 @@ public class InboundDataService : IInboundDataService { // get the json data for this container field, ex: Points JProperty contJP = jsonbody.Children().Where(jp => string.Equals(jp.Name, containerField, StringComparison.OrdinalIgnoreCase)).SingleOrDefault(); - if ((contJP != null) && (contJP.Value is JArray array)) + if ((contJP is not null) && (contJP.Value is JArray array)) { JArray contJPArray = array; diff --git a/Viewer/Views/Pages/RunInfo.cshtml b/Archive/Views/Pages/Reactor.cshtml similarity index 51% rename from Viewer/Views/Pages/RunInfo.cshtml rename to Archive/Views/Pages/Reactor.cshtml index d993c9b..5fcf203 100644 --- a/Viewer/Views/Pages/RunInfo.cshtml +++ b/Archive/Views/Pages/Reactor.cshtml @@ -1,111 +1,81 @@ @model OI.Metrology.Shared.ViewModels.RunInfo @{ - ViewData["Title"] = "Run Information"; + ViewData["Title"] = "Reactor"; } -

Run Information

+

Reactor

-
- -
+
+ + +
-
- -
-
-
-
- -
-
+
+ + +
  
- +
   -
- - -
-
- -
+
+ + +
-
- -
-
- - \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index fcec827..0000000 --- a/Jenkinsfile +++ /dev/null @@ -1,266 +0,0 @@ -#!/usr/bin/env groovy -/* groovylint-disable CompileStatic, ConsecutiveStringConcatenation, DuplicateNumberLiteral, DuplicateStringLiteral, LineLength, NestedBlockDepth, NoDef, VariableTypeRequired */ -import groovy.transform.Field - -@Field String _DDrive = 'D:/' -@Field String _ExePath = '...' -@Field String _NGINXFile = '...' -@Field String _PortNumber = '...' -@Field String _AssemblyName = '...' -@Field String _AgentDevelopment = '' -@Field String _NetVersion = 'net6.0' -@Field String _GitCommitSeven = '...' -@Field String _TargetLocation = '...' -@Field String _FirstBeforePlus = '5000' -@Field String _GitName = 'OI-Metrology' -@Field String _MonARessource = 'OI_Metrology' -@Field String _WorkingDirectoryName = 'IFXApps' -@Field String _DDriveNet = "${_DDrive}${_NetVersion}" -@Field String _AgentStaging = 'messa010ec-ecfisysadmin' -@Field String _AgentProduction = 'messa010ec-ecfisysadmin' -@Field String _CredentialsId = 'Metrology-Username-Password' -@Field String _Company = 'Infineon Technologies Americas Corp.' -@Field String _ProgramFilesDotnet = 'C:/program files/dotnet/dotnet.exe' - -pipeline { - agent { - label env.JENKINS_ENVIRONMENT == 'Development' ? _AgentDevelopment : env.JENKINS_ENVIRONMENT == 'Staging' ? _AgentStaging : env.JENKINS_ENVIRONMENT == 'Production' ? _AgentProduction : 'Else' - } - parameters { - string(name: 'MONA_SUFFIX', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? '_IFX' : '_EC', description: 'MonA Suffix') - string(name: 'GIT_SERVER', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? 'mestsa003.infineon.com' : 'mestsa07ec.ec.local', description: 'git server') - string(name: 'DEFAULT_FILE_SERVER', defaultValue: env.JENKINS_ENVIRONMENT == 'Development' ? 'messv02ecc1_ec_local' : 'messv02ecc1.ec.local', description: 'Default file server...') - string(name: 'PROJECT_DIRECTORY', defaultValue: 'Archive', description: 'Archive|Viewer') - } - stages { - // stage('Git') { - // steps { - // bat(returnStatus: true, script: 'git init') - // bat(returnStatus: true, script: 'git remote add origin \\\\' + params.GIT_SERVER + '\\Git\\' + _GitName + '.git') - // bat(returnStatus: true, script: 'git pull origin master') - // } - // } - stage('Setup') { - steps { - script { - _AssemblyName = "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}" - // _GitCommitSeven = '1234567' - _GitCommitSeven = env.GIT_COMMIT.substring(0, 7) - dir(env.PROJECT_DIRECTORY) { - def files = findFiles(glob: '*.csproj') - if (files.length != 1) { - error("Build failed because couldn't find a *.csproj file") - } - echo """ - ${files[0].name} - ${files[0].path} - ${files[0].directory} - ${files[0].length} - ${files[0].lastModified} - """ - _AssemblyName = files[0].name.split('[.]csproj')[0] - } - _TargetLocation = "\\\\${params.DEFAULT_FILE_SERVER}\\EC_EAFRepository\\${env.JENKINS_ENVIRONMENT}\\DeploymentStorage\\Adaptation_${_AssemblyName}" - withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) { - dir("C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1/conf/includes") { - _NGINXFile = "C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1/conf/includes/${_AssemblyName}.conf" - def files = findFiles(glob: "${_AssemblyName}.conf") - if (files.length != 1) { - writeFile(file: _NGINXFile, text: "location / { proxy_pass http://localhost:${_FirstBeforePlus}; }") - } - } - } - } - } - } - stage('Read NGINX') { - steps { - script { - String text = readFile(file: _NGINXFile) - String check = text == null ? _FirstBeforePlus : text.split(';')[0] - String[] segments = check.split(':') - if (segments.length != 3) { - _PortNumber = check - } - else { - _PortNumber = (segments[2].toInteger() + 2).toString() - } - _ExePath = "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}/${_AssemblyName}.exe" - } - } - } - stage('Info') { - steps { - // echo "GIT_URL_N - ${env.GIT_URL_N}" - // echo "BRANCH_NAME ${env.BRANCH_NAME}" - // echo "DEPLOY_VERSION ${env.DEPLOY_VERSION}" - // echo "GIT_AUTHOR_NAME ${env.GIT_AUTHOR_NAME}" - // echo "GIT_LOCAL_BRANCH ${env.GIT_LOCAL_BRANCH}" - // echo "GIT_COMMITTER_EMAIL ${env.GIT_COMMITTER_EMAIL}" - // echo "GIT_PREVIOUS_COMMIT ${env.GIT_PREVIOUS_COMMIT}" - // echo "GIT_PREVIOUS_SUCCESSFUL_COMMIT ${env.GIT_PREVIOUS_SUCCESSFUL_COMMIT}" - echo "_AssemblyName ${_AssemblyName}" // ... - echo "_ExePath ${_ExePath}" // ... - echo "_PortNumber ${_PortNumber}" // ... - echo "BUILD_NUMBER ${env.BUILD_NUMBER}" // 11 - echo "DEFAULT_FILE_SERVER ${params.DEFAULT_FILE_SERVER}" // 11 - echo "GIT_BRANCH ${env.GIT_BRANCH}" // origin/master - echo "GIT_COMMIT ${env.GIT_COMMIT}" // 73b814069f2cf0173a62a8228815a9bc9ba93c41 - echo "GIT_SERVER ${params.GIT_SERVER}" // ... - echo "GIT_URL ${env.GIT_URL}" // D:\ProgramData\Git\....git - echo "JENKINS_ENVIRONMENT ${env.JENKINS_ENVIRONMENT}" // 11 - echo "JENKINS_URL ${env.JENKINS_URL}" // http://localhost:8080/ - echo "JOB_NAME ${env.JOB_NAME}" // ... - echo "PROJECT_DIRECTORY ${env.PROJECT_DIRECTORY}" // ... - echo "WORKSPACE ${env.WORKSPACE}" // D:\.jenkins\_\... - } - } - // stage('Restore') { - // steps { - // bat(returnStatus: true, script: 'dotnet --info') - // } - // } - stage('Safe storage of app secrets') { - steps { - withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) { - dir(env.PROJECT_DIRECTORY) { - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets init') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "Company" "' + _Company + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "ServiceUser" "' + username + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "BuildNumber" "' + env.BUILD_NUMBER + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "GitCommitSeven" "' + _GitCommitSeven + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "Server" "' + params.DEFAULT_FILE_SERVER + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "URLs" "' + 'http://localhost:' + _PortNumber) - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "WorkingDirectoryName" "' + _WorkingDirectoryName + '"') - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'user-secrets set "MonARessource" "' + _MonARessource + '_' + env.PROJECT_DIRECTORY + env.MONA_SUFFIX + '"') - } - } - } - } - // stage('Core Build (packagemanagement.eu.infineon.com)') { - // steps { - // echo "Build number is ${currentBuild.number}" - // dir(env.PROJECT_DIRECTORY) { - // bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - // 'build --runtime win-x64 --self-contained --verbosity quiet --source ' + - // 'https://packagemanagement.eu.infineon.com:4430/api/v2/') - // } - // } - // } - stage('Core Build') { - steps { - echo "Build number is ${currentBuild.number}" - dir(env.PROJECT_DIRECTORY) { - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'build --runtime win-x64 --self-contained --verbosity quiet') - } - } - } - stage('Commit Id') { - steps { - dir(env.PROJECT_DIRECTORY) { - writeFile(file: 'bin/Debug/' + _NetVersion + "/win-x64/${env.GIT_COMMIT}-${env.BUILD_NUMBER}.txt", text: "${env.GIT_URL}") - } - } - } - // stage('Test') { - // options { - // timeout(time: 10, unit: 'MINUTES') - // } - // steps { - // dir(env.PROJECT_DIRECTORY) { - // bat('dotnet --info') - // } - // } - // } - // stage('Version') { - // steps { - // bat('dotnet --info') - // } - // } - stage('Package') { - steps { - dir(env.PROJECT_DIRECTORY) { - fileOperations([fileZipOperation(folderPath: 'bin/Debug/' + _NetVersion + '/win-x64', outputFolderPath: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-Debug")]) - fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*", renameFiles: false, sourceCaptureExpression: '', targetLocation: "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-Debug", targetNameExpression: '')]) - } - } - } - stage('Publish') { - steps { - dir(env.PROJECT_DIRECTORY) { - bat(returnStatus: true, script: '"' + _ProgramFilesDotnet + '" ' + - 'publish --configuration Release --runtime win-x64 --verbosity quiet ' + - "--self-contained true --p:Version=6.0.202-${_GitCommitSeven}-${env.BUILD_NUMBER} -o " + - '"' + "${_DDriveNet}/${_GitCommitSeven}-${env.BUILD_NUMBER}-${_PortNumber}-${env.JOB_NAME}-${env.PROJECT_DIRECTORY}" + '"') - } - } - } - stage('Service') { - steps { - withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) { - bat(returnStatus: true, script: 'sc create "' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '" ' + - 'start= delayed-auto DisplayName="' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '" ' + - 'binPath= "' + _ExePath + '" ' + - 'obj= "' + "${env.USERDOMAIN}\\${username}" + '" password= "' + password + '"') - bat(returnStatus: true, script: 'sc start "' + "${env.JOB_NAME}-${env.PROJECT_DIRECTORY}-${_PortNumber}" + '"') - } - } - } - stage('Upadate NGINX') { - steps { - writeFile(file: _NGINXFile, text: "location / { proxy_pass http://localhost:${_PortNumber}; }") - } - } - stage('NGINX Test and Reload') { - steps { - withCredentials([usernamePassword(credentialsId: _CredentialsId, passwordVariable: 'password', usernameVariable: 'username')]) { - dir("C:/Users/${username}/AppData/Local/IFXApps/nginx-1.20.1") { - script { - int returnStatus = bat(returnStatus: true, script: 'nginx.exe -t') - println("returnStatus ################ ${returnStatus} ####################") - if (returnStatus == 0) { - bat(returnStatus: true, script: 'nginx.exe -s reload') - } - } - } - } - } - } - // stage('Force Fail') { - // steps { - // error("Build failed because of this and that..") - // } - // } - // stage('Copy Files to: file-share') { - // steps { - // dir(env.PROJECT_DIRECTORY + '/bin/Debug/' + _NetVersion + '/win-x64') { - // fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.txt", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')]) - // fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.dll", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')]) - // fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.exe", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')]) - // fileOperations([fileCopyOperation(excludes: '', flattenFiles: true, includes: "${_AssemblyName}*.pdb", renameFiles: false, sourceCaptureExpression: '', targetLocation: _TargetLocation, targetNameExpression: '')]) - // } - // } - // } - } - post { - always { - dir(env.PROJECT_DIRECTORY + '/bin') { - deleteDir() - } - dir(env.PROJECT_DIRECTORY + '/obj') { - deleteDir() - } - cleanWs() - } - } -} diff --git a/OI-Metrology.sln b/OI-Metrology.sln index a37fb8b..3ecee65 100644 --- a/OI-Metrology.sln +++ b/OI-Metrology.sln @@ -3,13 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.30114.105 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archive", "Archive\Archive.csproj", "{D02BA20E-0ACE-4D1C-9132-90773AF3CF5A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archive", "Archive\OI.Metrology.Archive.csproj", "{D02BA20E-0ACE-4D1C-9132-90773AF3CF5A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "Shared\Shared.csproj", "{A807EAE3-7DCB-4E5E-BE54-0D7410D18B3E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "Shared\OI.Metrology.Shared.csproj", "{A807EAE3-7DCB-4E5E-BE54-0D7410D18B3E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Viewer", "Viewer\Viewer.csproj", "{25C86DF8-EC1A-4D4B-AD4E-6561174824B9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "Server\OI.Metrology.Server.csproj", "{25C86DF8-EC1A-4D4B-AD4E-6561174824B9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{B67FB8C4-402E-4D53-90A6-90F6FDB9D082}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\OI.Metrology.Tests.csproj", "{B67FB8C4-402E-4D53-90A6-90F6FDB9D082}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Viewer/.vscode/launch.json b/Server/.vscode/launch.json similarity index 84% rename from Viewer/.vscode/launch.json rename to Server/.vscode/launch.json index 4986154..eff4e55 100644 --- a/Viewer/.vscode/launch.json +++ b/Server/.vscode/launch.json @@ -10,14 +10,15 @@ "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. - "program": "${workspaceFolder}/bin/Debug/net6.0/win-x64/Archive.dll", + "program": "${workspaceFolder}/bin/Debug/net7.0/win-x64/OI.Metrology.Server.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser "serverReadyAction": { "action": "openExternally", - "pattern": "\\bNow listening on:\\s+(https?://\\S+)" + "pattern": "\\bNow listening on:\\s+(https?://\\S+)", + "uriFormat": "%s/swagger/index.html" }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" @@ -30,7 +31,8 @@ "name": ".NET Core Attach", "type": "coreclr", "request": "attach", - "processName": "Archive" + "preLaunchTask": "watch", + "processName": "OI.Metrology.Server.exe" } ] } \ No newline at end of file diff --git a/Viewer/wwwroot/igniteui/js/modules/infragistics.ui.barcode.js b/Server/.vscode/settings.json similarity index 100% rename from Viewer/wwwroot/igniteui/js/modules/infragistics.ui.barcode.js rename to Server/.vscode/settings.json diff --git a/Server/.vscode/tasks.json b/Server/.vscode/tasks.json new file mode 100644 index 0000000..82dead4 --- /dev/null +++ b/Server/.vscode/tasks.json @@ -0,0 +1,75 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/OI.Metrology.Server.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/OI.Metrology.Server.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "old-watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/OI.Metrology.Server.csproj" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "--launch-profile", + "http", + "run", + "--project", + "${workspaceFolder}/OI.Metrology.Server.csproj", + "--verbose" + ], + "isBackground": true, + "dependsOn": [ + "build" + ], + "problemMatcher": { + "fileLocation": "relative", + "pattern": { + "regexp": "^([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s*:\\s*(.*)$", + "file": 1, + "location": 2, + "severity": 3, + "code": 4, + "message": 5 + }, + "background": { + "activeOnStart": true, + "beginsPattern": "^.*Shutdown requested.*", + "endsPattern": "^.*Application started.*" + } + } + } + ] +} \ No newline at end of file diff --git a/Server/ApiControllers/AppSettingsController.cs b/Server/ApiControllers/AppSettingsController.cs new file mode 100644 index 0000000..ce0bf8f --- /dev/null +++ b/Server/ApiControllers/AppSettingsController.cs @@ -0,0 +1,23 @@ +using Microsoft.AspNetCore.Mvc; +using OI.Metrology.Shared.Models.Stateless; + +namespace OI.Metrology.Server.ApiControllers; + +[ApiController] +[Route("api/[controller]")] +public class AppSettingsController : ControllerBase, IAppSettingsController +{ + + private readonly IAppSettingsRepository _AppSettingsRepository; + + public AppSettingsController(IAppSettingsRepository AppSettingsRepository) => _AppSettingsRepository = AppSettingsRepository; + + [HttpGet(nameof(IAppSettingsController.Action.App))] + public ActionResult GetAppSettings() => + Ok(_AppSettingsRepository.GetAppSettings()); + + [HttpGet(nameof(IAppSettingsController.Action.DevOps))] + public ActionResult GetBuildNumberAndGitCommitSeven() => + Ok(_AppSettingsRepository.GetBuildNumberAndGitCommitSeven()); + +} \ No newline at end of file diff --git a/Viewer/ApiControllers/AttachmentsController.cs b/Server/ApiControllers/AttachmentsController.cs similarity index 64% rename from Viewer/ApiControllers/AttachmentsController.cs rename to Server/ApiControllers/AttachmentsController.cs index aae1a81..adfdbf5 100644 --- a/Viewer/ApiControllers/AttachmentsController.cs +++ b/Server/ApiControllers/AttachmentsController.cs @@ -1,50 +1,39 @@ using Microsoft.AspNetCore.Mvc; using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Services; -using System; -using System.IO; -namespace OI.Metrology.Viewer.ApiControllers; +namespace OI.Metrology.Server.ApiControllers; + public class AttachmentsController : Controller { - private readonly IMetrologyRepo _Repo; - private readonly IAttachmentsService _AttachmentsService; - public AttachmentsController(IMetrologyRepo repo, IAttachmentsService attachmentsService) + private readonly IAttachmentsService _AttachmentsService; + private readonly IMetrologyRepository _MetrologyRepository; + + public AttachmentsController(IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService) { - _Repo = repo; _AttachmentsService = attachmentsService; + _MetrologyRepository = metrologyRepository; } // this endpoint was created in hope that it would make retrieving attachments to display in OpenInsight easier // url would be like /api/attachments/mercuryprobe/header/HgProbe_66-232268-4329_20180620052640032/data.pdf [HttpGet("/api/attachments/{toolTypeName}/{tabletype}/{title}/{filename}")] - public IActionResult GetAttachment( - string toolTypeName, - string tabletype, - string title, - string filename) + public IActionResult GetAttachment(string toolTypeName, string tabletype, string title, string filename) { - ToolType tt = _Repo.GetToolTypeByName(toolTypeName); - + ToolType tt = _MetrologyRepository.GetToolTypeByName(toolTypeName); bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase); - try { string contenttype = "application/pdf"; if (filename.ToLower().TrimEnd().EndsWith(".txt")) contenttype = "text/plain"; - Stream fs = _AttachmentsService.GetAttachmentStreamByTitle(tt, header, title, filename); return File(fs, contenttype); } - catch (Exception ex) - { - return Content(ex.Message); - } - + catch (Exception ex) { return Content(ex.Message); } } } \ No newline at end of file diff --git a/Viewer/ApiControllers/AwaitingDispoController.cs b/Server/ApiControllers/AwaitingDispoController.cs similarity index 55% rename from Viewer/ApiControllers/AwaitingDispoController.cs rename to Server/ApiControllers/AwaitingDispoController.cs index eb2e5ba..711018b 100644 --- a/Viewer/ApiControllers/AwaitingDispoController.cs +++ b/Server/ApiControllers/AwaitingDispoController.cs @@ -1,37 +1,31 @@ using Microsoft.AspNetCore.Mvc; -namespace OI.Metrology.Viewer.ApiContollers; +namespace OI.Metrology.Server.ApiControllers; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using System.Text.Json; // this controller is for the Awaiting Dispo functionality -public class AwaitingDispoController : Controller +[Route("api/[controller]")] +public class AwaitingDispoController : Controller, IAwaitingDispoController { - private readonly IMetrologyRepo _Repo; - - public AwaitingDispoController(IMetrologyRepo repo) => _Repo = repo; + private readonly IMetrologyRepository _MetrologyRepository; + public AwaitingDispoController(IMetrologyRepository metrologyRepository) => + _MetrologyRepository = metrologyRepository; // returns the data to show in the Awaiting Dispo grid // marked no-cache, just-in-case since igniteUI automatically adds a query string parameter to prevent caching - [HttpGet("/api/awaitingdispo")] + [HttpGet] [ResponseCache(NoStore = true)] - public IActionResult Index() - { - - var r = new - { - Results = _Repo.GetAwaitingDispo() - }; - return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); - } + public IActionResult Index() => + Json(_MetrologyRepository.GetAwaitingDisposition(), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); // this endpoint is used to set the ReviewDate column, causing the header to no longer show in Awaiting Dispo [HttpPost("/api/awaitingdispo/markasreviewed")] public IActionResult MarkAsReviewed([FromQuery] long headerid, [FromQuery] int tooltypeid) { - _ = _Repo.UpdateReviewDate(tooltypeid, headerid, false); + _ = _MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, false); return Ok(); } @@ -39,7 +33,7 @@ public class AwaitingDispoController : Controller [HttpPost("/api/awaitingdispo/markasawaiting")] public IActionResult MarkAsAwaiting([FromQuery] long headerid, [FromQuery] int tooltypeid) { - if (_Repo.UpdateReviewDate(tooltypeid, headerid, true) <= 1) + if (_MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, true) <= 1) return Ok(); else return StatusCode(444); diff --git a/Server/ApiControllers/ClientSettingsController.cs b/Server/ApiControllers/ClientSettingsController.cs new file mode 100644 index 0000000..2a5ec6a --- /dev/null +++ b/Server/ApiControllers/ClientSettingsController.cs @@ -0,0 +1,29 @@ +using Microsoft.AspNetCore.Mvc; +using OI.Metrology.Shared.Models.Stateless; + +namespace OI.Metrology.Server.ApiControllers; + +[ApiController] +[Route("api/[controller]")] +public class ClientSettingsController : ControllerBase, IClientSettingsController +{ + + private readonly IClientSettingsRepository _ClientSettingsRepository; + + public ClientSettingsController(IClientSettingsRepository clientSettingsRepository) => _ClientSettingsRepository = clientSettingsRepository; + + [HttpGet(nameof(IClientSettingsController.Action.Client))] + public ActionResult GetClientSettings() + { + List results = _ClientSettingsRepository.GetClientSettings(Request.HttpContext.Connection?.RemoteIpAddress); + return Ok(results); + } + + [HttpGet(nameof(IClientSettingsController.Action.IP))] + public ActionResult GetIpAddress() + { + string result = _ClientSettingsRepository.GetIpAddress(Request.HttpContext.Connection?.RemoteIpAddress); + return Ok(result); + } + +} \ No newline at end of file diff --git a/Server/ApiControllers/InboundController.cs b/Server/ApiControllers/InboundController.cs new file mode 100644 index 0000000..ce08469 --- /dev/null +++ b/Server/ApiControllers/InboundController.cs @@ -0,0 +1,78 @@ +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json.Linq; +using OI.Metrology.Server.Models; +using OI.Metrology.Shared.Models; +using OI.Metrology.Shared.Models.Stateless; +using OI.Metrology.Shared.Services; +using System.Net; + +namespace OI.Metrology.Server.ApiControllers; + +[ApiController] +[Route("api/[controller]")] +public partial class InboundController : ControllerBase, IInboundController +{ + + private readonly ILogger _Logger; + private readonly AppSettings _AppSettings; + private readonly IInboundRepository _InboundRepository; + private readonly IAttachmentsService _AttachmentsService; + private readonly IInboundDataService _InboundDataService; + private readonly IMetrologyRepository _MetrologyRepository; + + public InboundController(AppSettings appSettings, ILogger logger, IMetrologyRepository metrologyRepository, IInboundRepository inboundRepository, IInboundDataService inboundDataService, IAttachmentsService attachmentsService) + { + _Logger = logger; + _AppSettings = appSettings; + _InboundRepository = inboundRepository; + _AttachmentsService = attachmentsService; + _InboundDataService = inboundDataService; + _MetrologyRepository = metrologyRepository; + } + + [HttpPost] + [Route("{tooltype}")] + public IActionResult Data(string tooltype, [FromBody] JToken jsonbody) + { + IPAddress? remoteIP = HttpContext.Connection.RemoteIpAddress; + if (!_InboundRepository.IsIPAddressAllowed(_AppSettings.InboundApiAllowedIPList, remoteIP)) + { + _Logger.LogInformation($"Rejected remote IP: {remoteIP}"); + return Unauthorized("Remote IP is not on allowed list"); + } + else + { + DataResponse dataResponse = _InboundRepository.Data(_MetrologyRepository, _InboundDataService, tooltype, jsonbody); + if (!dataResponse.Errors.Any()) + return Ok(dataResponse); + else + return BadRequest(dataResponse); + } + } + + [HttpPost] + [Route("{tooltype}/attachment")] + public IActionResult AttachFile(string tooltype, [FromQuery] long headerid, [FromQuery] string datauniqueid = "") + { + IPAddress? remoteIP = HttpContext.Connection.RemoteIpAddress; + if (!_InboundRepository.IsIPAddressAllowed(_AppSettings.InboundApiAllowedIPList, remoteIP)) + { + _Logger.LogInformation($"Rejected remote IP: {remoteIP}"); + return Unauthorized("Remote IP is not on allowed list"); + } + else + { + if (Request.Form is null) + return BadRequest($"Invalid form"); + if (Request.Form.Files.Count != 1) + return BadRequest($"Invalid file count"); + IFormFile formFile = Request.Form.Files[0]; + string? message = _InboundRepository.AttachFile(_MetrologyRepository, _AttachmentsService, tooltype, headerid, datauniqueid, formFile.FileName, formFile); + if (message is null) + return Ok(); + else + return BadRequest(message); + } + } + +} \ No newline at end of file diff --git a/Server/ApiControllers/PinController.cs b/Server/ApiControllers/PinController.cs new file mode 100644 index 0000000..c403959 --- /dev/null +++ b/Server/ApiControllers/PinController.cs @@ -0,0 +1,33 @@ +using Microsoft.AspNetCore.Mvc; + +namespace OI.Metrology.Server.ApiControllers; + +using OI.Metrology.Shared.Models.Stateless; +using System.Text.Json; + +[Route("api/[controller]")] +public class PinController : Controller, IPinController +{ + + private readonly IPinRepository _PinRepository; + private readonly IMetrologyRepository _MetrologyRepository; + + public PinController(ILogger logger, IMetrologyRepository metrologyRepository, IPinRepository pinRepository) + { + _MetrologyRepository = metrologyRepository; + _PinRepository = pinRepository; + } + + [HttpPost("{toolTypeId}/markAsPinned")] + public IActionResult MarkAsPinned(Shared.DataModels.HeaderCommon headerCommon) + { + _PinRepository.SetPinnedTable(headerCommon); + return Ok(); + } + + [HttpGet] + [Route("{toolTypeId}/pinned")] + public IActionResult GetPinnedTable(int toolTypeId, string? biorad_id = null, string? cde_id = null, string? rds = null) => + Json(_PinRepository.GetPinnedTable(_MetrologyRepository, toolTypeId, biorad_id, cde_id, rds), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); + +} \ No newline at end of file diff --git a/Server/ApiControllers/ServiceShopOrderController.cs b/Server/ApiControllers/ServiceShopOrderController.cs new file mode 100644 index 0000000..7cf0a50 --- /dev/null +++ b/Server/ApiControllers/ServiceShopOrderController.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Mvc; +using OI.Metrology.Shared.Models.Stateless; + +namespace OI.Metrology.Server.ApiControllers; + +[ApiController] +[Route("api/[controller]")] +public class ServiceShopOrderController : ControllerBase, IServiceShopOrderController +{ + + private readonly IServiceShopOrderRepository _ServiceShopOrderRepository; + + public ServiceShopOrderController(IServiceShopOrderRepository ServiceShopOrderRepository) => _ServiceShopOrderRepository = ServiceShopOrderRepository; + + [HttpGet(nameof(IServiceShopOrderController.Action.All))] + public async Task GetAllServiceShopOrders() + { + try + { + Shared.ViewModels.ServiceShopOrder[] results = await _ServiceShopOrderRepository.GetAllServiceShopOrders(); + return Ok(results); + } + catch (Exception) + { + return StatusCode(StatusCodes.Status500InternalServerError, + "Error retrieving data from the database"); + } + } + + [HttpGet] + [Route("{id}")] + public async Task GetServiceShopOrders(string id) + { + try + { + Shared.ViewModels.ServiceShopOrder[] results = await _ServiceShopOrderRepository.GetServiceShopOrders(id); + return Ok(results); + } + catch (Exception) + { + return StatusCode(StatusCodes.Status500InternalServerError, + "Error retrieving data from the database"); + } + } + +} \ No newline at end of file diff --git a/Server/ApiControllers/ToolTypesController.cs b/Server/ApiControllers/ToolTypesController.cs new file mode 100644 index 0000000..3f33de1 --- /dev/null +++ b/Server/ApiControllers/ToolTypesController.cs @@ -0,0 +1,110 @@ +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; + +namespace OI.Metrology.Server.ApiControllers; + +using OI.Metrology.Server.Models; +using OI.Metrology.Shared.Models.Stateless; +using OI.Metrology.Shared.Services; +using System.Data; +using System.Text.Json; + +[Route("api/[controller]")] +public class ToolTypesController : Controller, IToolTypesController +{ + // this controller powers the bulk of the UI + // it is named after the /api/tooltypes prefix + // the URL pattern is RESTful and the tool type is the root of every request + + private readonly AppSettings _AppSettings; + private readonly IMetrologyRepository _MetrologyRepo; + private readonly IAttachmentsService _AttachmentsService; + private readonly IToolTypesRepository _ToolTypesRepository; + + public ToolTypesController(AppSettings appSettings, IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService, IToolTypesRepository toolTypesRepository) + { + _AppSettings = appSettings; + _MetrologyRepo = metrologyRepository; + _AttachmentsService = attachmentsService; + _ToolTypesRepository = toolTypesRepository; + } + + [HttpGet] + public IActionResult Index() => + Json(_ToolTypesRepository.Index(_MetrologyRepo), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); + + [HttpGet] + [Route("{id}")] + public IActionResult GetToolTypeMetadata(int id, string sortby = "") => + Json(_ToolTypesRepository.GetToolTypeMetadata(_MetrologyRepo, id, sortby), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); + + [HttpGet] + [Route("{id}/headers")] + public IActionResult GetHeaders(int id, [FromQuery] DateTime? datebegin, [FromQuery] DateTime? dateend, [FromQuery] int? page, [FromQuery] int? pagesize, [FromQuery] long? headerid) + { + Shared.DataModels.Result r = _ToolTypesRepository.GetHeaders(_MetrologyRepo, id, datebegin, dateend, page, pagesize, headerid); + string json = JsonConvert.SerializeObject(r); + return Content(json); + } + + [HttpGet] + [Route("{id}/headertitles")] + public IActionResult GetHeaderTitles(int id, [FromQuery] int? page, [FromQuery] int? pagesize) => + Json(_ToolTypesRepository.GetHeaderTitles(_MetrologyRepo, id, page, pagesize), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); + + [HttpGet] + [Route("{id}/headers/{headerid}/fields")] + public IActionResult GetHeaderFields(int id, long headerid) => + Json(_ToolTypesRepository.GetHeaderFields(_MetrologyRepo, id, headerid), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); + + [HttpGet] + [Route("{id}/headers/{headerid}/data")] + public IActionResult GetData(int id, long headerid) + { + Shared.DataModels.Result r = _ToolTypesRepository.GetData(_MetrologyRepo, id, headerid); + string json = JsonConvert.SerializeObject(r); + return Content(json); + } + + [HttpGet] + [Route("{toolTypeId}/export")] + public IActionResult GetExportData(int toolTypeId, [FromQuery] DateTime? datebegin, [FromQuery] DateTime? dateend) + { + Shared.DataModels.Result r = _ToolTypesRepository.GetExportData(_MetrologyRepo, toolTypeId, datebegin, dateend); + string json = JsonConvert.SerializeObject(r); + return Content(json); + } + + [HttpGet] + [Route("{toolTypeId}/csv")] + public IActionResult GetCSVExport(int toolTypeId, [FromQuery] DateTime? datebegin, [FromQuery] DateTime? dateend, [FromQuery] string? filename) + { + byte[] r = _ToolTypesRepository.GetCSVExport(_MetrologyRepo, toolTypeId, datebegin, dateend); + return File(r, "application/octet-stream", filename); + } + + [HttpGet] + [Route("{toolTypeId}/{tabletype}/files/{attachmentId}/{filename}")] + public IActionResult GetAttachment(int toolTypeId, string tabletype, string attachmentId, string filename) + { + (string? message, string? contenttype, Stream? stream) = _ToolTypesRepository.GetAttachment(_MetrologyRepo, _AttachmentsService, toolTypeId, tabletype, attachmentId, filename); + if (message is not null) + return Content(message); + else if (contenttype is not null && stream is not null) + return File(stream, contenttype); + else + throw new Exception(); + } + + [HttpPost] + [Route("{toolTypeId}/headers/{headerid}/oiexport")] + public IActionResult OIExport(int toolTypeId, long headerid) + { + Exception? exception = _ToolTypesRepository.OIExport(_MetrologyRepo, _AppSettings.OIExportPath, toolTypeId, headerid); + if (exception is null) + return Ok(new { Message = "OK" }); + else + return BadRequest(JsonConvert.SerializeObject(new { exception.Message })); + } + +} \ No newline at end of file diff --git a/Viewer/ApiLoggingMiddleware.cs b/Server/ApiLoggingMiddleware.cs similarity index 93% rename from Viewer/ApiLoggingMiddleware.cs rename to Server/ApiLoggingMiddleware.cs index 8ee7c9e..e1cefd7 100644 --- a/Viewer/ApiLoggingMiddleware.cs +++ b/Server/ApiLoggingMiddleware.cs @@ -1,13 +1,7 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Http; -using OI.Metrology.Viewer.Models; -using System; -using System.IO; -using System.Linq; +using OI.Metrology.Server.Models; using System.Text; -using System.Threading.Tasks; -namespace OI.Metrology.Viewer; +namespace OI.Metrology.Server; // You may need to install the Microsoft.AspNetCore.Http.Abstractions package into your project public class ApiLoggingMiddleware @@ -43,7 +37,8 @@ public class ApiLoggingMiddleware else { // if there are content type filters configured, only log is the request begins with one of them - doLogging = _AppSettings.ApiLoggingContentTypes.Split(';').Any(ct => httpContext.Request.ContentType.StartsWith(ct)); + string? contentType = httpContext.Request.ContentType; + doLogging = contentType is not null && _AppSettings.ApiLoggingContentTypes.Split(';').Any(ct => contentType.StartsWith(ct)); } } } diff --git a/Viewer/Controllers/ErrorHandlerController.cs b/Server/Controllers/ErrorHandlerController.cs similarity index 68% rename from Viewer/Controllers/ErrorHandlerController.cs rename to Server/Controllers/ErrorHandlerController.cs index aba090f..f456e17 100644 --- a/Viewer/Controllers/ErrorHandlerController.cs +++ b/Server/Controllers/ErrorHandlerController.cs @@ -1,9 +1,7 @@ using Microsoft.AspNetCore.Diagnostics; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; -namespace OI.Metrology.Viewer.Controllers; +namespace OI.Metrology.Server.Controllers; [Route("/error")] public class ErrorHandlerController : Controller @@ -14,8 +12,8 @@ public class ErrorHandlerController : Controller public IActionResult Index() { - IExceptionHandlerFeature error = HttpContext.Features.Get(); - if (error == null) + IExceptionHandlerFeature? error = HttpContext.Features.Get(); + if (error is null) { return Redirect("~/"); } @@ -24,7 +22,7 @@ public class ErrorHandlerController : Controller _Logger.LogError("Unhandled exception: " + error.Error.ToString()); dynamic r = new { - Message = error.Error == null ? "Error" : error.Error.Message + Message = error.Error is null ? "Error" : error.Error.Message }; return StatusCode(StatusCodes.Status500InternalServerError, r); } diff --git a/Viewer/Controllers/ExportController.cs b/Server/Controllers/ExportController.cs similarity index 75% rename from Viewer/Controllers/ExportController.cs rename to Server/Controllers/ExportController.cs index d932450..b242f8b 100644 --- a/Viewer/Controllers/ExportController.cs +++ b/Server/Controllers/ExportController.cs @@ -1,31 +1,30 @@ using Infineon.Monitoring.MonA; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; -using Microsoft.Extensions.Logging; +using OI.Metrology.Server.Models; using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.ViewModels; -using OI.Metrology.Viewer.Models; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -namespace OI.Metrology.Viewer.Controllers; +namespace OI.Metrology.Server.Controllers; public class ExportController : Controller { + + private readonly string _ApiUrl; private readonly ILogger _Logger; private readonly bool _IsTestDatabase; - private readonly IMetrologyRepo _Repo; private readonly AppSettings _AppSettings; + private readonly IMetrologyRepository _MetrologyRepository; - public ExportController(AppSettings appSettings, ILogger logger, IMetrologyRepo repo) + public ExportController(AppSettings appSettings, ILogger logger, IMetrologyRepository metrologyRepository) { - _Repo = repo; _Logger = logger; _AppSettings = appSettings; + _MetrologyRepository = metrologyRepository; _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase); + _ApiUrl = string.IsNullOrEmpty(appSettings.ApiUrl) ? Url.Content("~/") : appSettings.ApiUrl[0] == '~' ? Url.Content(appSettings.ApiUrl) : appSettings.ApiUrl; } public override void OnActionExecuted(ActionExecutedContext context) @@ -33,18 +32,19 @@ public class ExportController : Controller base.OnActionExecuted(context); ViewBag.IsTestDatabase = _IsTestDatabase; } + [HttpGet] [Route("/Export")] public ActionResult Index() { Export model = new() { - ToolType = "", StartTime = DateTime.Now.AddMonths(-1), EndTime = DateTime.Now }; MonIn monIn = MonIn.GetInstance(); _ = monIn.SendStatus(_AppSettings.MonASite, _AppSettings.MonAResource, "Heartbeat", State.Up); + ViewBag.ApiUrl = _ApiUrl; return View(model); } @@ -52,14 +52,14 @@ public class ExportController : Controller [Route("/ExportData")] public ActionResult ExportData(Export model) { - ToolType toolType = null; + ToolType? toolType = null; if (string.IsNullOrEmpty(model.ToolType)) ModelState.AddModelError("Exception", "Invalid selection"); else { if (model.StartTime > model.EndTime) ModelState.AddModelError("EndTime", "End time must be after start time"); - IEnumerable toolTypes = _Repo.GetToolTypes(); + IEnumerable toolTypes = _MetrologyRepository.GetToolTypes(); toolType = toolTypes.Where(tt => tt.ID.ToString() == model.ToolType).SingleOrDefault(); if (toolType is null) ModelState.AddModelError("ToolType", "Invalid selection"); @@ -73,7 +73,7 @@ public class ExportController : Controller DateTime startDT = model.StartDate.Date.Add(model.StartTime.TimeOfDay); DateTime endDT = model.EndDate.Date.Add(model.EndTime.TimeOfDay); - return DoCSVExport(toolType.ToolTypeName, toolType.ExportSPName, startDT, endDT); + return DoCSVExport(toolType?.ToolTypeName, toolType?.ExportSPName, startDT, endDT); } catch (Exception ex) { @@ -81,27 +81,25 @@ public class ExportController : Controller ModelState.AddModelError("Exception", ex.Message); string errorMessage = $"Error exporting: {ex}"; _Logger.LogError(message: errorMessage); + MonIn monIn = MonIn.GetInstance(); + _ = monIn.SendStatus(_AppSettings.MonASite, _AppSettings.MonAResource, "Heartbeat", State.Warning); } } + ViewBag.ApiUrl = _ApiUrl; return View("Index", model); } - protected ActionResult DoCSVExport(string toolTypeName, string spName, DateTime startTime, DateTime endTime) + protected ActionResult DoCSVExport(string? toolTypeName, string? spName, DateTime startTime, DateTime endTime) { string fileName = string.Format("Export_{0}_{1:yyyyMMddHHmm}_to_{2:yyyyMMddHHmm}.csv", toolTypeName, startTime, endTime); StringBuilder sb = new(); - - System.Data.DataTable dt = _Repo.ExportData(spName, startTime, endTime); - + if (spName is null) + throw new NullReferenceException(nameof(spName)); + System.Data.DataTable dt = _MetrologyRepository.ExportData(spName, startTime, endTime); _ = sb.AppendLine(GetColumnHeaders(dt)); - foreach (System.Data.DataRow dr in dt.Rows) - { _ = sb.AppendLine(GetRowData(dr)); - } - byte[] contents = Encoding.UTF8.GetBytes(sb.ToString()); - return File(contents, "application/octet-stream", fileName); } @@ -112,10 +110,13 @@ public class ExportController : Controller { if (i > 0) _ = r.Append(','); - object v = dr[i]; if (!Convert.IsDBNull(v)) - _ = r.Append(FormatForCSV(Convert.ToString(v))); + { + string? c = Convert.ToString(v); + if (c is not null) + _ = r.Append(FormatForCSV(c)); + } } return r.ToString(); } @@ -135,16 +136,13 @@ public class ExportController : Controller protected static string FormatForCSV(string v) { - StringBuilder r = new(v.Length + 2); - bool doubleQuoted = false; - + StringBuilder r = new(v.Length + 2); if (v.StartsWith(' ') || v.EndsWith(' ') || v.Contains(',') || v.Contains('"')) { _ = r.Append('"'); doubleQuoted = true; } - foreach (char c in v) { _ = c switch @@ -154,10 +152,8 @@ public class ExportController : Controller _ => r.Append(c), }; } - if (doubleQuoted) _ = r.Append('"'); - return r.ToString(); } diff --git a/Viewer/Controllers/PagesController.cs b/Server/Controllers/PagesController.cs similarity index 58% rename from Viewer/Controllers/PagesController.cs rename to Server/Controllers/PagesController.cs index 0b7b21c..01c1f5f 100644 --- a/Viewer/Controllers/PagesController.cs +++ b/Server/Controllers/PagesController.cs @@ -1,21 +1,23 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Server.Models; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.ViewModels; -using OI.Metrology.Viewer.Models; -using System; -namespace OI.Metrology.Viewer.Controllers; +namespace OI.Metrology.Server.Controllers; public class PagesController : Controller { - private readonly IMetrologyRepo _Repo; - private readonly bool _IsTestDatabase; - public PagesController(AppSettings appSettings, IMetrologyRepo repo) + private readonly string _ApiUrl; + private readonly bool _IsTestDatabase; + private readonly IMetrologyRepository _MetrologyRepository; + + public PagesController(AppSettings appSettings, IMetrologyRepository metrologyRepository) { - _Repo = repo; + _MetrologyRepository = metrologyRepository; _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase); + _ApiUrl = string.IsNullOrEmpty(appSettings.ApiUrl) ? Url.Content("~/") : appSettings.ApiUrl[0] == '~' ? Url.Content(appSettings.ApiUrl) : appSettings.ApiUrl; } public override void OnActionExecuted(ActionExecutedContext context) @@ -26,14 +28,20 @@ public class PagesController : Controller [HttpGet] [Route("/")] - public IActionResult Index() => - View("AwaitingDispo"); + public IActionResult Index() + { + ViewBag.ApiUrl = _ApiUrl; + return View("AwaitingDispo"); + } [HttpGet] [Route("/AwaitingDispo")] [Route("/Metrology/AwaitingDispo")] - public IActionResult AwaitingDispo() => - View(); + public IActionResult AwaitingDispo() + { + ViewBag.ApiUrl = _ApiUrl; + return View(); + } [HttpGet] [Route("/RunInfo")] @@ -48,16 +56,20 @@ public class PagesController : Controller }; if (headerid > 0) { - m.HeaderAttachmentID = _Repo.GetHeaderAttachmentID(tooltypeid, headerid); + m.HeaderAttachmentID = _MetrologyRepository.GetHeaderAttachmentID(tooltypeid, headerid); } + ViewBag.ApiUrl = _ApiUrl; return View(m); } [HttpGet] [Route("/RunHeaders")] [Route("/Metrology/RunHeaders")] - public IActionResult RunHeaders() => - View(); + public IActionResult RunHeaders() + { + ViewBag.ApiUrl = _ApiUrl; + return View(); + } [HttpGet] [Route("/Crash")] diff --git a/Server/Data/Mike/service-shop.json b/Server/Data/Mike/service-shop.json new file mode 100644 index 0000000..498c6bc --- /dev/null +++ b/Server/Data/Mike/service-shop.json @@ -0,0 +1,8035 @@ +{ + "Orders": [ + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Hybrid Infineon Cloud Platform Consulting [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "656fde79-22c1-ec11-a88b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "2bae1bb2-351f-c1ca-def2-08da2345fc63", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1f3a5ab3-23c1-ec11-a88b-0050568f2fc3", + "CustomFormEntityName": "Ud_CF_IFX_HybridIFXCloudPlatfConType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "23188d3d-9b75-ed11-ab8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "27188d3d-9b75-ed11-ab8b-0050568f2fc3", + "Id": "2c188d3d-9b75-ed11-ab8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "656fde79-22c1-ec11-a88b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Accept": true, + "Reorder": true + }, + "Id": "23188d3d-9b75-ed11-ab8b-0050568f2fc3", + "ObjectId": "1b188d3d-9b75-ed11-ab8b-0050568f2fc3", + "Name": "ORD2491814-Install", + "Type": "Install", + "TypeId": 10, + "State": "Provisioned", + "StateId": 1045, + "StateIcon": "settings", + "StateColor": "0xFF6734BA", + "ItemNumber": "ORD2491814", + "CreatedDate": "2022-12-06T19:21:55.767Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "LAN Port [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17318ff5-57b0-4123-92e7-370bcf0306b0", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1fdf77e9-155a-e611-72ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_LAN_PortType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "0d21afd1-ea74-ed11-ab8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "1121afd1-ea74-ed11-ab8b-0050568f2fc3", + "Id": "1621afd1-ea74-ed11-ab8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d" + } + } + ], + "AllowedActions": { + "Accept": true, + "Reorder": true + }, + "Id": "0d21afd1-ea74-ed11-ab8b-0050568f2fc3", + "ObjectId": "0521afd1-ea74-ed11-ab8b-0050568f2fc3", + "Name": "ORD2490311-Install", + "Type": "Install", + "TypeId": 10, + "State": "Provisioned", + "StateId": 1045, + "StateIcon": "settings", + "StateColor": "0xFF6734BA", + "ItemNumber": "ORD2490311", + "CreatedDate": "2022-12-05T22:19:06.703Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "ICP Project - New [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "049aa605-76de-e911-978b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "fa99a605-76de-e911-978b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "cd2051f5-0c72-ed11-ab8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "d12051f5-0c72-ed11-ab8b-0050568f2fc3", + "Id": "d62051f5-0c72-ed11-ab8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "049aa605-76de-e911-978b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "cd2051f5-0c72-ed11-ab8b-0050568f2fc3", + "ObjectId": "c52051f5-0c72-ed11-ab8b-0050568f2fc3", + "Name": "ORD2487507-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2487507", + "CreatedDate": "2022-12-02T06:45:55.123Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Unix Account Deletion (Urania) pharesl [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "2d769ba1-145c-e011-a482-005056b1201d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17769ba1-145c-e011-a482-005056b1201d", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "e81a8625-dc70-ed11-ab8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "ec1a8625-dc70-ed11-ab8b-0050568f2fc3", + "Id": "f11a8625-dc70-ed11-ab8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "2d769ba1-145c-e011-a482-005056b1201d" + } + } + ], + "AllowedActions": {}, + "Id": "e81a8625-dc70-ed11-ab8b-0050568f2fc3", + "ObjectId": "e01a8625-dc70-ed11-ab8b-0050568f2fc3", + "Name": "ORD2485441-Install", + "Type": "Install", + "TypeId": 10, + "State": "Approved", + "StateId": 1042, + "StateIcon": "supervisor_account", + "StateColor": "0xFF689F38", + "ItemNumber": "ORD2485441", + "CreatedDate": "2022-11-30T18:24:03.653Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Unix Personal Account Deletion (R&D and Business Unix) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "83c65e6d-155c-e011-a482-005056b1201d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "6dc65e6d-155c-e011-a482-005056b1201d", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "5735c925-dc70-ed11-ab8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "5b35c925-dc70-ed11-ab8b-0050568f2fc3", + "Id": "6035c925-dc70-ed11-ab8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "83c65e6d-155c-e011-a482-005056b1201d" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "5735c925-dc70-ed11-ab8b-0050568f2fc3", + "ObjectId": "4f35c925-dc70-ed11-ab8b-0050568f2fc3", + "Name": "ORD2485440-Install", + "Type": "Install", + "TypeId": 10, + "State": "Approved", + "StateId": 1042, + "StateIcon": "supervisor_account", + "StateColor": "0xFF689F38", + "ItemNumber": "ORD2485440", + "CreatedDate": "2022-11-30T18:24:00.41Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Unix Personal Account pharesl [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "2d769ba1-145c-e011-a482-005056b1201d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17769ba1-145c-e011-a482-005056b1201d", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "d5c0bbe7-1070-ed11-ab8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 2, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "d9c0bbe7-1070-ed11-ab8b-0050568f2fc3", + "Id": "dec0bbe7-1070-ed11-ab8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "2d769ba1-145c-e011-a482-005056b1201d" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Add Location to Unix Personal Account in Mesa (BUX) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "2d769ba1-145c-e011-a482-005056b1201d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17769ba1-145c-e011-a482-005056b1201d", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "d5c0bbe7-1070-ed11-ab8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 4, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "e0c0bbe7-1070-ed11-ab8b-0050568f2fc3", + "Id": "e5c0bbe7-1070-ed11-ab8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "2d769ba1-145c-e011-a482-005056b1201d" + } + } + ], + "AllowedActions": {}, + "Id": "d5c0bbe7-1070-ed11-ab8b-0050568f2fc3", + "ObjectId": "cdc0bbe7-1070-ed11-ab8b-0050568f2fc3", + "Name": "ORD2483773-Install", + "Type": "Install", + "TypeId": 10, + "State": "Canceled", + "StateId": 1052, + "StateIcon": "remove_circle", + "StateColor": "0xFFFF5722", + "ItemNumber": "ORD2483773", + "CreatedDate": "2022-11-29T18:09:10.93Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Unix Personal Account [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "6fdf4e80-b894-e811-66ba-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "65df4e80-b894-e811-66ba-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "5dc33de3-1070-ed11-ab8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 4, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "61c33de3-1070-ed11-ab8b-0050568f2fc3", + "Id": "66c33de3-1070-ed11-ab8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "6fdf4e80-b894-e811-66ba-0050568f7353" + } + } + ], + "AllowedActions": {}, + "Id": "5dc33de3-1070-ed11-ab8b-0050568f2fc3", + "ObjectId": "55c33de3-1070-ed11-ab8b-0050568f2fc3", + "Name": "ORD2483772-Install", + "Type": "Install", + "TypeId": 10, + "State": "Canceled", + "StateId": 1052, + "StateIcon": "remove_circle", + "StateColor": "0xFFFF5722", + "ItemNumber": "ORD2483772", + "CreatedDate": "2022-11-29T18:09:04.08Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Add Location to Unix Personal Account in El Segundo [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "2d769ba1-145c-e011-a482-005056b1201d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17769ba1-145c-e011-a482-005056b1201d", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "e7b5d4a9-0670-ed11-ab8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "ebb5d4a9-0670-ed11-ab8b-0050568f2fc3", + "Id": "f0b5d4a9-0670-ed11-ab8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "2d769ba1-145c-e011-a482-005056b1201d" + } + } + ], + "AllowedActions": {}, + "Id": "e7b5d4a9-0670-ed11-ab8b-0050568f2fc3", + "ObjectId": "dfb5d4a9-0670-ed11-ab8b-0050568f2fc3", + "Name": "ORD2483739-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2483739", + "CreatedDate": "2022-11-29T16:55:52.247Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Add Location to Unix Personal Account [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "cae494ac-b994-e811-66ba-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "c0e494ac-b994-e811-66ba-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "4d73eda6-0670-ed11-ab8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "8673eda6-0670-ed11-ab8b-0050568f2fc3", + "Id": "9673eda6-0670-ed11-ab8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "cae494ac-b994-e811-66ba-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "4d73eda6-0670-ed11-ab8b-0050568f2fc3", + "ObjectId": "4573eda6-0670-ed11-ab8b-0050568f2fc3", + "Name": "ORD2483738-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2483738", + "CreatedDate": "2022-11-29T16:55:47.6Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Special Account - Modification [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "d6b86b22-e776-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "ccb86b22-e776-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "64063dc6-df75-e911-938b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_SpecialAccount_ModificationType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "ff5a8f70-1b6a-ed11-ab8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "035b8f70-1b6a-ed11-ab8b-0050568f2fc3", + "Id": "085b8f70-1b6a-ed11-ab8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "d6b86b22-e776-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "ff5a8f70-1b6a-ed11-ab8b-0050568f2fc3", + "ObjectId": "f75a8f70-1b6a-ed11-ab8b-0050568f2fc3", + "Name": "ORD2475200-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2475200", + "CreatedDate": "2022-11-22T04:09:22.097Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Add Location to Unix Personal Account in Mesa (BUX) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "2d769ba1-145c-e011-a482-005056b1201d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17769ba1-145c-e011-a482-005056b1201d", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "06fe1087-b224-ed11-aa8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "0afe1087-b224-ed11-aa8b-0050568f2fc3", + "Id": "0ffe1087-b224-ed11-aa8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "2d769ba1-145c-e011-a482-005056b1201d" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Unix Personal Account phares [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "2d769ba1-145c-e011-a482-005056b1201d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17769ba1-145c-e011-a482-005056b1201d", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "06fe1087-b224-ed11-aa8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "11fe1087-b224-ed11-aa8b-0050568f2fc3", + "Id": "16fe1087-b224-ed11-aa8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "2d769ba1-145c-e011-a482-005056b1201d" + } + } + ], + "AllowedActions": {}, + "Id": "06fe1087-b224-ed11-aa8b-0050568f2fc3", + "ObjectId": "fefd1087-b224-ed11-aa8b-0050568f2fc3", + "Name": "ORD2377575-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2377575", + "CreatedDate": "2022-08-25T20:14:41.11Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Unix Personal Account [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "6fdf4e80-b894-e811-66ba-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "65df4e80-b894-e811-66ba-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "98d04385-b224-ed11-aa8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "9cd04385-b224-ed11-aa8b-0050568f2fc3", + "Id": "a1d04385-b224-ed11-aa8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "6fdf4e80-b894-e811-66ba-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "98d04385-b224-ed11-aa8b-0050568f2fc3", + "ObjectId": "90d04385-b224-ed11-aa8b-0050568f2fc3", + "Name": "ORD2377574-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2377574", + "CreatedDate": "2022-08-25T20:14:33.35Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "04801f7b-6f1e-ed11-aa8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "08801f7b-6f1e-ed11-aa8b-0050568f2fc3", + "Id": "0d801f7b-6f1e-ed11-aa8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "04801f7b-6f1e-ed11-aa8b-0050568f2fc3", + "ObjectId": "fc7f1f7b-6f1e-ed11-aa8b-0050568f2fc3", + "Name": "ORD2369036-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2369036", + "CreatedDate": "2022-08-17T20:59:29.737Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "EC File Share Access [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "ab947991-e806-eb11-9f8b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "cde90390-f2d6-c61e-9e94-08d8690bfe71", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "b5a8fd36-d219-ed11-aa8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "2da9fd36-d219-ed11-aa8b-0050568f2fc3", + "Id": "32a9fd36-d219-ed11-aa8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "ab947991-e806-eb11-9f8b-0050568f2fc3" + } + } + ], + "AllowedActions": {}, + "Id": "b5a8fd36-d219-ed11-aa8b-0050568f2fc3", + "ObjectId": "a3a8fd36-d219-ed11-aa8b-0050568f2fc3", + "Name": "ORD2363429-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2363429", + "CreatedDate": "2022-08-12T00:03:41.62Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "EC File Share Access [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "92d52cbc-e606-eb11-9f8b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "b16dfcae-a617-cbb4-50f8-08d86909f7c6", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "5e057130-d219-ed11-aa8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "62057130-d219-ed11-aa8b-0050568f2fc3", + "Id": "67057130-d219-ed11-aa8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "92d52cbc-e606-eb11-9f8b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "5e057130-d219-ed11-aa8b-0050568f2fc3", + "ObjectId": "56057130-d219-ed11-aa8b-0050568f2fc3", + "Name": "ORD2363428-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2363428", + "CreatedDate": "2022-08-12T00:03:36.77Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "File Share Access [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "38fc32a1-1362-e711-039e-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "2efc32a1-1362-e711-039e-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "08befe50-b819-ed11-aa8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 2, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "0cbefe50-b819-ed11-aa8b-0050568f2fc3", + "Id": "11befe50-b819-ed11-aa8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "38fc32a1-1362-e711-039e-0050568f7353" + } + } + ], + "AllowedActions": {}, + "Id": "08befe50-b819-ed11-aa8b-0050568f2fc3", + "ObjectId": "00befe50-b819-ed11-aa8b-0050568f2fc3", + "Name": "ORD2363373-Install", + "Type": "Install", + "TypeId": 10, + "State": "Declined", + "StateId": 1043, + "StateIcon": "highlight_off", + "StateColor": "0xFFC02E1D", + "ItemNumber": "ORD2363373", + "CreatedDate": "2022-08-11T20:58:23.757Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Terminal Server Software Rollout [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "9cde3a09-1806-4e62-8238-9b72d3c12981", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "73939178-8bdb-47c2-91da-496f8608531a", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "32aeb796-edfc-4b96-996c-f6131e82bea7", + "CustomFormEntityName": "Ud_CF_IFX_TerminalServerSoftwareRolloutiAppsPortalType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "570dd46e-e70c-ed11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "5b0dd46e-e70c-ed11-a98b-0050568f2fc3", + "Id": "600dd46e-e70c-ed11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "9cde3a09-1806-4e62-8238-9b72d3c12981" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "570dd46e-e70c-ed11-a98b-0050568f2fc3", + "ObjectId": "4f0dd46e-e70c-ed11-a98b-0050568f2fc3", + "Name": "ORD2344051-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2344051", + "CreatedDate": "2022-07-26T13:32:46.613Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "LAN Port [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17318ff5-57b0-4123-92e7-370bcf0306b0", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1fdf77e9-155a-e611-72ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_LAN_PortType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "c6b50145-0109-ed11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "cab50145-0109-ed11-a98b-0050568f2fc3", + "Id": "cfb50145-0109-ed11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "LAN Port [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17318ff5-57b0-4123-92e7-370bcf0306b0", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1fdf77e9-155a-e611-72ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_LAN_PortType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "c6b50145-0109-ed11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "d1b50145-0109-ed11-a98b-0050568f2fc3", + "Id": "d6b50145-0109-ed11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "c6b50145-0109-ed11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "d8b50145-0109-ed11-a98b-0050568f2fc3", + "Id": "ddb50145-0109-ed11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "c6b50145-0109-ed11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "dfb50145-0109-ed11-a98b-0050568f2fc3", + "Id": "e4b50145-0109-ed11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "c6b50145-0109-ed11-a98b-0050568f2fc3", + "ObjectId": "beb50145-0109-ed11-a98b-0050568f2fc3", + "Name": "ORD2339561-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2339561", + "CreatedDate": "2022-07-21T14:27:43.987Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "LAN Port [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17318ff5-57b0-4123-92e7-370bcf0306b0", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1fdf77e9-155a-e611-72ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_LAN_PortType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "e49d8c25-5afd-ec11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "e89d8c25-5afd-ec11-a98b-0050568f2fc3", + "Id": "ed9d8c25-5afd-ec11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "e49d8c25-5afd-ec11-a98b-0050568f2fc3", + "ObjectId": "dc9d8c25-5afd-ec11-a98b-0050568f2fc3", + "Name": "ORD2322650-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2322650", + "CreatedDate": "2022-07-06T18:33:38.41Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "LAN Port [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17318ff5-57b0-4123-92e7-370bcf0306b0", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1fdf77e9-155a-e611-72ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_LAN_PortType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "8de5db48-85fc-ec11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "9be5db48-85fc-ec11-a98b-0050568f2fc3", + "Id": "a0e5db48-85fc-ec11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "8de5db48-85fc-ec11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "a2e5db48-85fc-ec11-a98b-0050568f2fc3", + "Id": "a7e5db48-85fc-ec11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "8de5db48-85fc-ec11-a98b-0050568f2fc3", + "ObjectId": "85e5db48-85fc-ec11-a98b-0050568f2fc3", + "Name": "ORD2320980-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2320980", + "CreatedDate": "2022-07-05T17:09:56.557Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "51ed1363-41f6-ec11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "55ed1363-41f6-ec11-a98b-0050568f2fc3", + "Id": "5aed1363-41f6-ec11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Network Integration of Custom Endpoint [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "678eb1f3-e79d-e311-f6bc-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "448eb1f3-e79d-e311-f6bc-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "51ed1363-41f6-ec11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "5ced1363-41f6-ec11-a98b-0050568f2fc3", + "Id": "61ed1363-41f6-ec11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "678eb1f3-e79d-e311-f6bc-0050568f7353" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "LAN Port [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17318ff5-57b0-4123-92e7-370bcf0306b0", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1fdf77e9-155a-e611-72ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_LAN_PortType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "51ed1363-41f6-ec11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "63ed1363-41f6-ec11-a98b-0050568f2fc3", + "Id": "68ed1363-41f6-ec11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "51ed1363-41f6-ec11-a98b-0050568f2fc3", + "ObjectId": "49ed1363-41f6-ec11-a98b-0050568f2fc3", + "Name": "ORD2311296-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2311296", + "CreatedDate": "2022-06-27T17:48:48.4Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "FAB Client - Windows 10 [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "1acac122-ef6a-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "10cac122-ef6a-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "3097505e-6c65-e911-938b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_FABClientType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "af167202-2bdd-ec11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "b3167202-2bdd-ec11-a98b-0050568f2fc3", + "Id": "b8167202-2bdd-ec11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "1acac122-ef6a-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "af167202-2bdd-ec11-a98b-0050568f2fc3", + "ObjectId": "a7167202-2bdd-ec11-a98b-0050568f2fc3", + "Name": "ORD2279358-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2279358", + "CreatedDate": "2022-05-26T19:35:40.003Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Special Account - Modification [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "d6b86b22-e776-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "ccb86b22-e776-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "64063dc6-df75-e911-938b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_SpecialAccount_ModificationType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "cc433463-bbcf-ec11-a98b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "d0433463-bbcf-ec11-a98b-0050568f2fc3", + "Id": "d5433463-bbcf-ec11-a98b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "d6b86b22-e776-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "cc433463-bbcf-ec11-a98b-0050568f2fc3", + "ObjectId": "c4433463-bbcf-ec11-a98b-0050568f2fc3", + "Name": "ORD2261245-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2261245", + "CreatedDate": "2022-05-09T17:13:48.483Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Special Account for Clients & Applications [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "55a2cc5f-ff67-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "4ba2cc5f-ff67-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "bcbfe962-1e28-e911-928b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_SpecialAccForClientsAndAppsType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "97e87cd2-8eb6-ec11-a88b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "9de87cd2-8eb6-ec11-a88b-0050568f2fc3", + "Id": "a2e87cd2-8eb6-ec11-a88b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "55a2cc5f-ff67-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "97e87cd2-8eb6-ec11-a88b-0050568f2fc3", + "ObjectId": "8fe87cd2-8eb6-ec11-a88b-0050568f2fc3", + "Name": "ORD2231674-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2231674", + "CreatedDate": "2022-04-07T16:21:56.127Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "Company iOS Smartphone [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "193cc116-bed9-e911-978b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "0f3cc116-bed9-e911-978b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "5654e295-83b9-e911-968b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_iPhone_NA_ObjPickerType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "f667356f-38a6-ec11-a88b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "fa67356f-38a6-ec11-a88b-0050568f2fc3", + "Id": "ff67356f-38a6-ec11-a88b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "193cc116-bed9-e911-978b-0050568f2fc3" + } + } + ], + "AllowedActions": {}, + "Id": "f667356f-38a6-ec11-a88b-0050568f2fc3", + "ObjectId": "ee67356f-38a6-ec11-a88b-0050568f2fc3", + "Name": "ORD2210129-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2210129", + "CreatedDate": "2022-03-17T21:23:07.677Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "LAN Port [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17318ff5-57b0-4123-92e7-370bcf0306b0", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1fdf77e9-155a-e611-72ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_LAN_PortType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "e5802345-0e99-ec11-a88b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "e9802345-0e99-ec11-a88b-0050568f2fc3", + "Id": "ee802345-0e99-ec11-a88b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "e5802345-0e99-ec11-a88b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "f0802345-0e99-ec11-a88b-0050568f2fc3", + "Id": "f5802345-0e99-ec11-a88b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Network Integration of Custom Endpoint [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "678eb1f3-e79d-e311-f6bc-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "448eb1f3-e79d-e311-f6bc-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "e5802345-0e99-ec11-a88b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "f7802345-0e99-ec11-a88b-0050568f2fc3", + "Id": "fc802345-0e99-ec11-a88b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "678eb1f3-e79d-e311-f6bc-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "e5802345-0e99-ec11-a88b-0050568f2fc3", + "ObjectId": "dd802345-0e99-ec11-a88b-0050568f2fc3", + "Name": "ORD2191816-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2191816", + "CreatedDate": "2022-03-01T03:18:35.263Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": " Software Installation Permission [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "c556e104-3003-e711-5da5-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "bb56e104-3003-e711-5da5-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "81b212d8-3003-e711-5da5-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_GenSoftwareType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "7b28de97-b679-ec11-a68b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "7f28de97-b679-ec11-a68b-0050568f2fc3", + "Id": "8428de97-b679-ec11-a68b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "c556e104-3003-e711-5da5-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "7b28de97-b679-ec11-a68b-0050568f2fc3", + "ObjectId": "7328de97-b679-ec11-a68b-0050568f2fc3", + "Name": "ORD2153849-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2153849", + "CreatedDate": "2022-01-20T06:02:54.303Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Notebook/Desktop Refresh [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "23f223d1-4a2b-e811-25a9-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "19f223d1-4a2b-e811-25a9-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "96e74bb2-4d2b-e811-25a9-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_NotebookDesktopRefreshType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "66911360-2574-ec11-a68b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "6a911360-2574-ec11-a68b-0050568f2fc3", + "Id": "6f911360-2574-ec11-a68b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "23f223d1-4a2b-e811-25a9-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "66911360-2574-ec11-a68b-0050568f2fc3", + "ObjectId": "5e911360-2574-ec11-a68b-0050568f2fc3", + "Name": "ORD2146469-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2146469", + "CreatedDate": "2022-01-13T04:00:50.16Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Network Integration of Custom Endpoint [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "678eb1f3-e79d-e311-f6bc-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "448eb1f3-e79d-e311-f6bc-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "70686107-be1f-ec11-a58b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "74686107-be1f-ec11-a58b-0050568f2fc3", + "Id": "79686107-be1f-ec11-a58b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "678eb1f3-e79d-e311-f6bc-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "70686107-be1f-ec11-a58b-0050568f2fc3", + "ObjectId": "68686107-be1f-ec11-a58b-0050568f2fc3", + "Name": "ORD2054518-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2054518", + "CreatedDate": "2021-09-27T18:09:26.67Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "b19f781a-bd1f-ec11-a58b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "b79f781a-bd1f-ec11-a58b-0050568f2fc3", + "Id": "bc9f781a-bd1f-ec11-a58b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "b19f781a-bd1f-ec11-a58b-0050568f2fc3", + "ObjectId": "a99f781a-bd1f-ec11-a58b-0050568f2fc3", + "Name": "ORD2054514-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2054514", + "CreatedDate": "2021-09-27T18:02:41.113Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Network Integration of Custom Endpoint [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "678eb1f3-e79d-e311-f6bc-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "448eb1f3-e79d-e311-f6bc-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "617418af-e604-ec11-a58b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "657418af-e604-ec11-a58b-0050568f2fc3", + "Id": "6a7418af-e604-ec11-a58b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "678eb1f3-e79d-e311-f6bc-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "617418af-e604-ec11-a58b-0050568f2fc3", + "ObjectId": "597418af-e604-ec11-a58b-0050568f2fc3", + "Name": "ORD2024785-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2024785", + "CreatedDate": "2021-08-24T14:22:21.323Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "2db141b1-e504-ec11-a58b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "34b141b1-e504-ec11-a58b-0050568f2fc3", + "Id": "3fb141b1-e504-ec11-a58b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "2db141b1-e504-ec11-a58b-0050568f2fc3", + "ObjectId": "25b141b1-e504-ec11-a58b-0050568f2fc3", + "Name": "ORD2024775-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2024775", + "CreatedDate": "2021-08-24T14:15:17.09Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Carrier Todd (IFEPI NPI SQ)", + "RecipientId": "4d9ecb96-51be-47bb-977e-c6c6ab7b9c52", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "LAN Port [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17318ff5-57b0-4123-92e7-370bcf0306b0", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1fdf77e9-155a-e611-72ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_LAN_PortType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "bdf16315-78ff-eb11-a58b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "c1f16315-78ff-eb11-a58b-0050568f2fc3", + "Id": "c6f16315-78ff-eb11-a58b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "bdf16315-78ff-eb11-a58b-0050568f2fc3", + "ObjectId": "b5f16315-78ff-eb11-a58b-0050568f2fc3", + "Name": "ORD2019789-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2019789", + "CreatedDate": "2021-08-17T16:28:09.08Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Network Integration of Custom Endpoint [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "678eb1f3-e79d-e311-f6bc-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "448eb1f3-e79d-e311-f6bc-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "d95ab8d0-77ff-eb11-a58b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "dd5ab8d0-77ff-eb11-a58b-0050568f2fc3", + "Id": "e25ab8d0-77ff-eb11-a58b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "678eb1f3-e79d-e311-f6bc-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "d95ab8d0-77ff-eb11-a58b-0050568f2fc3", + "ObjectId": "d15ab8d0-77ff-eb11-a58b-0050568f2fc3", + "Name": "ORD2019788-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2019788", + "CreatedDate": "2021-08-17T16:26:13.04Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "0b2b876a-76ff-eb11-a58b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "0f2b876a-76ff-eb11-a58b-0050568f2fc3", + "Id": "142b876a-76ff-eb11-a58b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "0b2b876a-76ff-eb11-a58b-0050568f2fc3", + "ObjectId": "032b876a-76ff-eb11-a58b-0050568f2fc3", + "Name": "ORD2019782-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2019782", + "CreatedDate": "2021-08-17T16:16:03.98Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "EC Windows File Share - Modification [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "ce38d49b-cd73-e511-688d-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "b838d49b-cd73-e511-688d-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "f855f875-b573-e511-688d-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_CCL_FileShare_ModType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "4e9e4915-79fc-eb11-a58b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "529e4915-79fc-eb11-a58b-0050568f2fc3", + "Id": "579e4915-79fc-eb11-a58b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "ce38d49b-cd73-e511-688d-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "4e9e4915-79fc-eb11-a58b-0050568f2fc3", + "ObjectId": "469e4915-79fc-eb11-a58b-0050568f2fc3", + "Name": "ORD2017280-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2017280", + "CreatedDate": "2021-08-13T20:57:38.22Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Access to IDMS-Admin Application [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "a95158b7-f5cc-eb11-a38b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "5ec0f520-71ec-cf90-c1e7-08d92f198c86", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "de736491-facc-eb11-a38b-0050568f2fc3", + "CustomFormEntityName": "Ud_CF_IFX_Access2IDMS_Admin_AppType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "0a5e45ab-e0f3-eb11-a58b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "125e45ab-e0f3-eb11-a58b-0050568f2fc3", + "Id": "175e45ab-e0f3-eb11-a58b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "a95158b7-f5cc-eb11-a38b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "0a5e45ab-e0f3-eb11-a58b-0050568f2fc3", + "ObjectId": "025e45ab-e0f3-eb11-a58b-0050568f2fc3", + "Name": "ORD2007190-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD2007190", + "CreatedDate": "2021-08-02T22:26:27.567Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "480a6c78-4aea-eb11-a38b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "4c0a6c78-4aea-eb11-a38b-0050568f2fc3", + "Id": "510a6c78-4aea-eb11-a38b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "480a6c78-4aea-eb11-a38b-0050568f2fc3", + "ObjectId": "400a6c78-4aea-eb11-a38b-0050568f2fc3", + "Name": "ORD1997545-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1997545", + "CreatedDate": "2021-07-21T17:38:43.797Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Network Integration of Custom Endpoint [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "678eb1f3-e79d-e311-f6bc-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "448eb1f3-e79d-e311-f6bc-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "4e7617ec-49ea-eb11-a38b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "527617ec-49ea-eb11-a38b-0050568f2fc3", + "Id": "577617ec-49ea-eb11-a38b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "678eb1f3-e79d-e311-f6bc-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "4e7617ec-49ea-eb11-a38b-0050568f2fc3", + "ObjectId": "467617ec-49ea-eb11-a38b-0050568f2fc3", + "Name": "ORD1997544-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1997544", + "CreatedDate": "2021-07-21T17:34:45.517Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Network Integration of Custom Endpoint [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "678eb1f3-e79d-e311-f6bc-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "448eb1f3-e79d-e311-f6bc-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "e2364a1b-e5e8-eb11-a38b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "e6364a1b-e5e8-eb11-a38b-0050568f2fc3", + "Id": "eb364a1b-e5e8-eb11-a38b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "678eb1f3-e79d-e311-f6bc-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "e2364a1b-e5e8-eb11-a38b-0050568f2fc3", + "ObjectId": "da364a1b-e5e8-eb11-a38b-0050568f2fc3", + "Name": "ORD1995549-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1995549", + "CreatedDate": "2021-07-19T23:00:31.723Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Special Account - Modification [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "d6b86b22-e776-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "ccb86b22-e776-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "64063dc6-df75-e911-938b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_SpecialAccount_ModificationType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "c1ef96f6-ebd2-eb11-a38b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "cfef96f6-ebd2-eb11-a38b-0050568f2fc3", + "Id": "d4ef96f6-ebd2-eb11-a38b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "d6b86b22-e776-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "c1ef96f6-ebd2-eb11-a38b-0050568f2fc3", + "ObjectId": "b9ef96f6-ebd2-eb11-a38b-0050568f2fc3", + "Name": "ORD1971080-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1971080", + "CreatedDate": "2021-06-21T23:54:11.04Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "FAB Client - Windows 10 [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "1acac122-ef6a-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "10cac122-ef6a-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "3097505e-6c65-e911-938b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_FABClientType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "f4d2c4a3-9cc8-eb11-a38b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "02d3c4a3-9cc8-eb11-a38b-0050568f2fc3", + "Id": "07d3c4a3-9cc8-eb11-a38b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "1acac122-ef6a-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "f4d2c4a3-9cc8-eb11-a38b-0050568f2fc3", + "ObjectId": "ecd2c4a3-9cc8-eb11-a38b-0050568f2fc3", + "Name": "ORD1960613-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1960613", + "CreatedDate": "2021-06-08T21:01:06.327Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Special Account - Modification [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "d6b86b22-e776-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "ccb86b22-e776-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "64063dc6-df75-e911-938b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_SpecialAccount_ModificationType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "840fa35b-aeb2-eb11-a38b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "920fa35b-aeb2-eb11-a38b-0050568f2fc3", + "Id": "970fa35b-aeb2-eb11-a38b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "d6b86b22-e776-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "840fa35b-aeb2-eb11-a38b-0050568f2fc3", + "ObjectId": "7c0fa35b-aeb2-eb11-a38b-0050568f2fc3", + "Name": "ORD1940441-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1940441", + "CreatedDate": "2021-05-11T23:12:34.803Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "e9d8b8cf-d0a2-eb11-a38b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "f9d8b8cf-d0a2-eb11-a38b-0050568f2fc3", + "Id": "fed8b8cf-d0a2-eb11-a38b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "e9d8b8cf-d0a2-eb11-a38b-0050568f2fc3", + "ObjectId": "e1d8b8cf-d0a2-eb11-a38b-0050568f2fc3", + "Name": "ORD1924069-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1924069", + "CreatedDate": "2021-04-21T18:38:49.7Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": " Software Installation Permission [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "c556e104-3003-e711-5da5-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "bb56e104-3003-e711-5da5-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "81b212d8-3003-e711-5da5-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_GenSoftwareType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "9195f81c-3092-eb11-a28b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "9f95f81c-3092-eb11-a28b-0050568f2fc3", + "Id": "a495f81c-3092-eb11-a28b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "c556e104-3003-e711-5da5-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "9195f81c-3092-eb11-a28b-0050568f2fc3", + "ObjectId": "8995f81c-3092-eb11-a28b-0050568f2fc3", + "Name": "ORD1907380-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1907380", + "CreatedDate": "2021-03-31T14:48:14.21Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "MailRelay - Internal Registration [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "aad73ca7-eb78-e811-f1b8-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "a0d73ca7-eb78-e811-f1b8-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "3106e15b-ea78-e811-f1b8-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_InternalMailRelayRegType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "a870de41-e090-eb11-a28b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "b670de41-e090-eb11-a28b-0050568f2fc3", + "Id": "bb70de41-e090-eb11-a28b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "aad73ca7-eb78-e811-f1b8-0050568f7353" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": " Software Installation Permission [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "c556e104-3003-e711-5da5-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "bb56e104-3003-e711-5da5-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "81b212d8-3003-e711-5da5-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_GenSoftwareType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "a870de41-e090-eb11-a28b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 2, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "c170de41-e090-eb11-a28b-0050568f2fc3", + "Id": "c670de41-e090-eb11-a28b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "c556e104-3003-e711-5da5-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "a870de41-e090-eb11-a28b-0050568f2fc3", + "ObjectId": "a070de41-e090-eb11-a28b-0050568f2fc3", + "Name": "ORD1905467-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1905467", + "CreatedDate": "2021-03-29T22:44:02.82Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Functional Mailbox - Modification [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "360e2f29-eeaf-4a59-a6cb-ee58d57e590a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "e3b93c5c-a484-4404-98b1-f0c411f1fefa", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "5d0d9521-c2f6-e311-29b1-0050568f7355", + "CustomFormEntityName": "Ud_CF_IFX_FunctionalMailboxModification2Type", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "a9917a8c-2681-eb11-a28b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "b7917a8c-2681-eb11-a28b-0050568f2fc3", + "Id": "bc917a8c-2681-eb11-a28b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "360e2f29-eeaf-4a59-a6cb-ee58d57e590a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "a9917a8c-2681-eb11-a28b-0050568f2fc3", + "ObjectId": "a1917a8c-2681-eb11-a28b-0050568f2fc3", + "Name": "ORD1890453-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1890453", + "CreatedDate": "2021-03-09T22:27:01.43Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "LAN Port [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17318ff5-57b0-4123-92e7-370bcf0306b0", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1fdf77e9-155a-e611-72ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_LAN_PortType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "ff7a50b0-506d-eb11-a28b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "0d7b50b0-506d-eb11-a28b-0050568f2fc3", + "Id": "127b50b0-506d-eb11-a28b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "ff7a50b0-506d-eb11-a28b-0050568f2fc3", + "ObjectId": "f77a50b0-506d-eb11-a28b-0050568f2fc3", + "Name": "ORD1870543-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1870543", + "CreatedDate": "2021-02-12T16:38:17.58Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "1b1eff04-8961-eb11-a28b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "291eff04-8961-eb11-a28b-0050568f2fc3", + "Id": "2e1eff04-8961-eb11-a28b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "1b1eff04-8961-eb11-a28b-0050568f2fc3", + "ObjectId": "131eff04-8961-eb11-a28b-0050568f2fc3", + "Name": "ORD1858252-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1858252", + "CreatedDate": "2021-01-28T16:51:17.703Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "LAN Port [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17318ff5-57b0-4123-92e7-370bcf0306b0", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1fdf77e9-155a-e611-72ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_LAN_PortType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "6345b2a5-333b-eb11-a18b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "7145b2a5-333b-eb11-a18b-0050568f2fc3", + "Id": "7645b2a5-333b-eb11-a18b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "6345b2a5-333b-eb11-a18b-0050568f2fc3", + "ObjectId": "5b45b2a5-333b-eb11-a18b-0050568f2fc3", + "Name": "ORD1827432-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1827432", + "CreatedDate": "2020-12-10T22:04:24.003Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "5793b421-663a-eb11-a18b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "6593b421-663a-eb11-a18b-0050568f2fc3", + "Id": "6a93b421-663a-eb11-a18b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "5793b421-663a-eb11-a18b-0050568f2fc3", + "ObjectId": "4f93b421-663a-eb11-a18b-0050568f2fc3", + "Name": "ORD1826546-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1826546", + "CreatedDate": "2020-12-09T21:33:15.243Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "LAN Port [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "17318ff5-57b0-4123-92e7-370bcf0306b0", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "1fdf77e9-155a-e611-72ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_LAN_PortType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "eafc2cbf-6133-eb11-a18b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "fbfc2cbf-6133-eb11-a18b-0050568f2fc3", + "Id": "00fd2cbf-6133-eb11-a18b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "3c930fd1-08e5-45b3-ae92-994f5e7c4d7d" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "eafc2cbf-6133-eb11-a18b-0050568f2fc3", + "ObjectId": "e2fc2cbf-6133-eb11-a18b-0050568f2fc3", + "Name": "ORD1819354-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1819354", + "CreatedDate": "2020-11-30T23:14:08.87Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Network Integration of Custom Endpoint [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "678eb1f3-e79d-e311-f6bc-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "448eb1f3-e79d-e311-f6bc-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "b0201b60-8f2a-eb11-a18b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "be201b60-8f2a-eb11-a18b-0050568f2fc3", + "Id": "c3201b60-8f2a-eb11-a18b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "678eb1f3-e79d-e311-f6bc-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "b0201b60-8f2a-eb11-a18b-0050568f2fc3", + "ObjectId": "a8201b60-8f2a-eb11-a18b-0050568f2fc3", + "Name": "ORD1812452-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1812452", + "CreatedDate": "2020-11-19T17:48:11.447Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "606120c4-cf1a-eb11-a18b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "6e6120c4-cf1a-eb11-a18b-0050568f2fc3", + "Id": "736120c4-cf1a-eb11-a18b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "606120c4-cf1a-eb11-a18b-0050568f2fc3", + "ObjectId": "586120c4-cf1a-eb11-a18b-0050568f2fc3", + "Name": "ORD1797948-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1797948", + "CreatedDate": "2020-10-30T16:48:44.377Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Account Validation - Change Owner for meseaf [Klagenfurt]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "455b722f-cb62-ea11-998b-aa59a9db3b67", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "50376aff-334f-ca09-8417-08d7c4eed1fb", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "2acf189e-8a5f-ea11-9b8b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_ITValidation_ChangeOwnerType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "6a39e246-189f-ea11-9d8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 2, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "9539e246-189f-ea11-9d8b-0050568f2fc3", + "Id": "9a39e246-189f-ea11-9d8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "455b722f-cb62-ea11-998b-aa59a9db3b67" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Account Validation - Change Owner for ifxeafadmin [Klagenfurt]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "455b722f-cb62-ea11-998b-aa59a9db3b67", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "50376aff-334f-ca09-8417-08d7c4eed1fb", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "2acf189e-8a5f-ea11-9b8b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_ITValidation_ChangeOwnerType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "6a39e246-189f-ea11-9d8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 2, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "a039e246-189f-ea11-9d8b-0050568f2fc3", + "Id": "a539e246-189f-ea11-9d8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "455b722f-cb62-ea11-998b-aa59a9db3b67" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Account Validation - Change Owner for ifxedaadmin [Klagenfurt]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "455b722f-cb62-ea11-998b-aa59a9db3b67", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "50376aff-334f-ca09-8417-08d7c4eed1fb", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "2acf189e-8a5f-ea11-9b8b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_ITValidation_ChangeOwnerType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "6a39e246-189f-ea11-9d8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 2, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "ab39e246-189f-ea11-9d8b-0050568f2fc3", + "Id": "b039e246-189f-ea11-9d8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "455b722f-cb62-ea11-998b-aa59a9db3b67" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Account Validation - Change Owner for ECMESCEPEAFSVC [Klagenfurt]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "455b722f-cb62-ea11-998b-aa59a9db3b67", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "50376aff-334f-ca09-8417-08d7c4eed1fb", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "2acf189e-8a5f-ea11-9b8b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_ITValidation_ChangeOwnerType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "6a39e246-189f-ea11-9d8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 2, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "b639e246-189f-ea11-9d8b-0050568f2fc3", + "Id": "bb39e246-189f-ea11-9d8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "455b722f-cb62-ea11-998b-aa59a9db3b67" + } + }, + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Account Validation - Change Owner for ECMESEAF [Klagenfurt]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "455b722f-cb62-ea11-998b-aa59a9db3b67", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "50376aff-334f-ca09-8417-08d7c4eed1fb", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "2acf189e-8a5f-ea11-9b8b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_ITValidation_ChangeOwnerType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "6a39e246-189f-ea11-9d8b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 2, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "c139e246-189f-ea11-9d8b-0050568f2fc3", + "Id": "c639e246-189f-ea11-9d8b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "455b722f-cb62-ea11-998b-aa59a9db3b67" + } + } + ], + "AllowedActions": {}, + "Id": "6a39e246-189f-ea11-9d8b-0050568f2fc3", + "ObjectId": "6039e246-189f-ea11-9d8b-0050568f2fc3", + "Name": "ORD1692639-Install", + "Type": "Install", + "TypeId": 10, + "State": "Declined", + "StateId": 1043, + "StateIcon": "highlight_off", + "StateColor": "0xFFC02E1D", + "ItemNumber": "ORD1692639", + "CreatedDate": "2020-05-26T06:15:23.167Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Francois Rivard (IFAM IT FI MES)", + "RequestorId": "324d7aa5-07dd-44f6-9f67-089bac5909f3" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "File Share Modification - Create/Delete Permission Group [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "35403322-f025-e811-25a9-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "2b403322-f025-e811-25a9-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "f638c336-8c7a-ea11-998b-aa59a9db3b67", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "0439c336-8c7a-ea11-998b-aa59a9db3b67", + "Id": "0939c336-8c7a-ea11-998b-aa59a9db3b67", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "35403322-f025-e811-25a9-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "f638c336-8c7a-ea11-998b-aa59a9db3b67", + "ObjectId": "ee38c336-8c7a-ea11-998b-aa59a9db3b67", + "Name": "ORD1671916-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1671916", + "CreatedDate": "2020-04-09T18:02:09.323Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Documentum (User Permission) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "ebc9bd06-851e-4e66-b844-ae610b25ff35", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "ac259ed0-a32e-4735-941a-b42fbc64d5ad", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "ab78a786-afb7-4a99-871f-385d988a598b", + "CustomFormEntityName": "Ud_CF_IFX_DocumentumUserPermissionType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "bd2de2f7-016a-ea11-998b-aa59a9db3b67", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "cb2de2f7-016a-ea11-998b-aa59a9db3b67", + "Id": "d02de2f7-016a-ea11-998b-aa59a9db3b67", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "ebc9bd06-851e-4e66-b844-ae610b25ff35" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "bd2de2f7-016a-ea11-998b-aa59a9db3b67", + "ObjectId": "b52de2f7-016a-ea11-998b-aa59a9db3b67", + "Name": "ORD1661220-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1661220", + "CreatedDate": "2020-03-19T16:52:09.27Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "McIntyre Juanita (IFEPI QM)", + "RequestorId": "c6cf962c-3eb1-44b5-aa44-7166ae2403ff" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "db2390fe-5668-ea11-998b-aa59a9db3b67", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "e92390fe-5668-ea11-998b-aa59a9db3b67", + "Id": "ee2390fe-5668-ea11-998b-aa59a9db3b67", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "db2390fe-5668-ea11-998b-aa59a9db3b67", + "ObjectId": "d32390fe-5668-ea11-998b-aa59a9db3b67", + "Name": "ORD1659112-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1659112", + "CreatedDate": "2020-03-17T13:55:49.147Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "CCL Windows File Share - Access/Modification [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "ce38d49b-cd73-e511-688d-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "b838d49b-cd73-e511-688d-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "f855f875-b573-e511-688d-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_CCL_FileShare_ModType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "ba5b74be-1f3e-ea11-998b-aa59a9db3b67", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "c85b74be-1f3e-ea11-998b-aa59a9db3b67", + "Id": "cd5b74be-1f3e-ea11-998b-aa59a9db3b67", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "ce38d49b-cd73-e511-688d-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "ba5b74be-1f3e-ea11-998b-aa59a9db3b67", + "ObjectId": "b25b74be-1f3e-ea11-998b-aa59a9db3b67", + "Name": "ORD1627366-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1627366", + "CreatedDate": "2020-01-23T20:34:31.33Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "CCL Windows File Share - Access/Modification [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "ce38d49b-cd73-e511-688d-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "b838d49b-cd73-e511-688d-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "f855f875-b573-e511-688d-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_CCL_FileShare_ModType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "29cb357a-1f3e-ea11-998b-aa59a9db3b67", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "37cb357a-1f3e-ea11-998b-aa59a9db3b67", + "Id": "3ccb357a-1f3e-ea11-998b-aa59a9db3b67", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "ce38d49b-cd73-e511-688d-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "29cb357a-1f3e-ea11-998b-aa59a9db3b67", + "ObjectId": "21cb357a-1f3e-ea11-998b-aa59a9db3b67", + "Name": "ORD1627365-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1627365", + "CreatedDate": "2020-01-23T20:32:31.427Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Becker Chad (IFEPI QM)", + "RecipientId": "2930c6c8-6447-4273-a3d0-32c40b1e946c", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "SPaCe Account (Villach) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "5c113cc6-f420-e311-3eb9-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "44113cc6-f420-e311-3eb9-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "4fdf30f4-a863-e311-5282-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_SPaCe_Account_Villach_2Type", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "08ff0d43-931e-ea11-988b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "16ff0d43-931e-ea11-988b-0050568f2fc3", + "Id": "1bff0d43-931e-ea11-988b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "5c113cc6-f420-e311-3eb9-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "08ff0d43-931e-ea11-988b-0050568f2fc3", + "ObjectId": "00ff0d43-931e-ea11-988b-0050568f2fc3", + "Name": "ORD1609447-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1609447", + "CreatedDate": "2019-12-14T17:00:52.803Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Hector Gutierrez (IFEPI GaN OP)", + "RecipientId": "971c2276-1132-4762-a4a1-0b367c0f71b5", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "SPaCe Account (Villach) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "5c113cc6-f420-e311-3eb9-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "44113cc6-f420-e311-3eb9-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "4fdf30f4-a863-e311-5282-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_SPaCe_Account_Villach_2Type", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "4b26a917-931e-ea11-988b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "5926a917-931e-ea11-988b-0050568f2fc3", + "Id": "5e26a917-931e-ea11-988b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "5c113cc6-f420-e311-3eb9-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "4b26a917-931e-ea11-988b-0050568f2fc3", + "ObjectId": "4326a917-931e-ea11-988b-0050568f2fc3", + "Name": "ORD1609446-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1609446", + "CreatedDate": "2019-12-14T16:59:35.527Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Tungare Mihir (IFAM PSS TIE GTD DFR)", + "RecipientId": "be7df190-f48a-4e47-9670-2b90ceb7cf82", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "SPaCe Account (Villach) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "5c113cc6-f420-e311-3eb9-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "44113cc6-f420-e311-3eb9-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "4fdf30f4-a863-e311-5282-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_SPaCe_Account_Villach_2Type", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "9d20f9ef-921e-ea11-988b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "ab20f9ef-921e-ea11-988b-0050568f2fc3", + "Id": "b020f9ef-921e-ea11-988b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "5c113cc6-f420-e311-3eb9-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "9d20f9ef-921e-ea11-988b-0050568f2fc3", + "ObjectId": "9520f9ef-921e-ea11-988b-0050568f2fc3", + "Name": "ORD1609445-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1609445", + "CreatedDate": "2019-12-14T16:58:23.867Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Kannan Srinivasan (IRHIR R&D GaN)", + "RecipientId": "722995d5-7323-44e2-8386-7f9af522c135", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "SPaCe Account (Villach) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "5c113cc6-f420-e311-3eb9-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "44113cc6-f420-e311-3eb9-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "4fdf30f4-a863-e311-5282-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_SPaCe_Account_Villach_2Type", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "38d76b8a-921e-ea11-988b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "4ad76b8a-921e-ea11-988b-0050568f2fc3", + "Id": "4fd76b8a-921e-ea11-988b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "5c113cc6-f420-e311-3eb9-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "38d76b8a-921e-ea11-988b-0050568f2fc3", + "ObjectId": "30d76b8a-921e-ea11-988b-0050568f2fc3", + "Name": "ORD1609444-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1609444", + "CreatedDate": "2019-12-14T16:55:42.96Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Brian Gruver (IFEPI GaN OP)", + "RecipientId": "bf4b43af-e762-47f2-af34-d1d040ee11ba", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "SPaCe Account (Villach) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "5c113cc6-f420-e311-3eb9-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "44113cc6-f420-e311-3eb9-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "4fdf30f4-a863-e311-5282-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_SPaCe_Account_Villach_2Type", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "537f2962-921e-ea11-988b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "617f2962-921e-ea11-988b-0050568f2fc3", + "Id": "667f2962-921e-ea11-988b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "5c113cc6-f420-e311-3eb9-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "537f2962-921e-ea11-988b-0050568f2fc3", + "ObjectId": "4b7f2962-921e-ea11-988b-0050568f2fc3", + "Name": "ORD1609443-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1609443", + "CreatedDate": "2019-12-14T16:54:33.647Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Priscila Spagnol (IFEPI GaN OP)", + "RecipientId": "7969bd64-6c38-405f-8456-5b38cbe935b2", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "SPaCe Account (Villach) [Temecula]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "5c113cc6-f420-e311-3eb9-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "44113cc6-f420-e311-3eb9-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "4fdf30f4-a863-e311-5282-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_SPaCe_Account_Villach_2Type", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "5d456958-e11d-ea11-988b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "6b456958-e11d-ea11-988b-0050568f2fc3", + "Id": "70456958-e11d-ea11-988b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "5c113cc6-f420-e311-3eb9-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "5d456958-e11d-ea11-988b-0050568f2fc3", + "ObjectId": "55456958-e11d-ea11-988b-0050568f2fc3", + "Name": "ORD1609404-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1609404", + "CreatedDate": "2019-12-13T19:47:13.427Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Smith Brad (IFAM FE IR TEM P UPS)", + "RecipientId": "61827cb6-4a0f-4a43-89c6-32532253b86f", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "SPaCe Account (Villach) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "5c113cc6-f420-e311-3eb9-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "44113cc6-f420-e311-3eb9-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "4fdf30f4-a863-e311-5282-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_SPaCe_Account_Villach_2Type", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "afa42128-e11d-ea11-988b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "bda42128-e11d-ea11-988b-0050568f2fc3", + "Id": "c2a42128-e11d-ea11-988b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "5c113cc6-f420-e311-3eb9-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "afa42128-e11d-ea11-988b-0050568f2fc3", + "ObjectId": "a7a42128-e11d-ea11-988b-0050568f2fc3", + "Name": "ORD1609403-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1609403", + "CreatedDate": "2019-12-13T19:45:55.557Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Becker Chad (IFEPI QM)", + "RecipientId": "2930c6c8-6447-4273-a3d0-32c40b1e946c", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "92b47764-690c-ea11-988b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "a0b47764-690c-ea11-988b-0050568f2fc3", + "Id": "a5b47764-690c-ea11-988b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "92b47764-690c-ea11-988b-0050568f2fc3", + "ObjectId": "8ab47764-690c-ea11-988b-0050568f2fc3", + "Name": "ORD1596798-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1596798", + "CreatedDate": "2019-11-21T14:15:47.75Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "83c8b4ec-bbfc-e911-988b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "93c8b4ec-bbfc-e911-988b-0050568f2fc3", + "Id": "98c8b4ec-bbfc-e911-988b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "83c8b4ec-bbfc-e911-988b-0050568f2fc3", + "ObjectId": "7bc8b4ec-bbfc-e911-988b-0050568f2fc3", + "Name": "ORD1584798-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1584798", + "CreatedDate": "2019-11-01T15:26:17.39Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "CCL Windows File Share - Access/Modification [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "ce38d49b-cd73-e511-688d-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "b838d49b-cd73-e511-688d-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "f855f875-b573-e511-688d-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_CCL_FileShare_ModType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "74273a1b-02f1-e911-978b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "82273a1b-02f1-e911-978b-0050568f2fc3", + "Id": "87273a1b-02f1-e911-978b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "ce38d49b-cd73-e511-688d-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "74273a1b-02f1-e911-978b-0050568f2fc3", + "ObjectId": "6c273a1b-02f1-e911-978b-0050568f2fc3", + "Name": "ORD1575853-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1575853", + "CreatedDate": "2019-10-17T17:18:22.427Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "CCL Windows File Share - Access/Modification [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "ce38d49b-cd73-e511-688d-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "b838d49b-cd73-e511-688d-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "f855f875-b573-e511-688d-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_CCL_FileShare_ModType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "a679cecf-01f1-e911-978b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "5abbc5d5-01f1-e911-978b-0050568f2fc3", + "Id": "5fbbc5d5-01f1-e911-978b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "ce38d49b-cd73-e511-688d-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "a679cecf-01f1-e911-978b-0050568f2fc3", + "ObjectId": "9e79cecf-01f1-e911-978b-0050568f2fc3", + "Name": "ORD1575852-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1575852", + "CreatedDate": "2019-10-17T17:16:20.513Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + }, + "Name": "Active Directory Group - modify [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "990749a0-e665-406d-a3f7-e09b46519dd3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "1c97fe9a-8698-4331-b8ee-8988f344f218", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "862593e9-19e6-e911-978b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "942593e9-19e6-e911-978b-0050568f2fc3", + "Id": "992593e9-19e6-e911-978b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "990749a0-e665-406d-a3f7-e09b46519dd3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "862593e9-19e6-e911-978b-0050568f2fc3", + "ObjectId": "7e2593e9-19e6-e911-978b-0050568f2fc3", + "Name": "ORD1564852-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1564852", + "CreatedDate": "2019-10-03T20:11:06.563Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": " Software Installation Permission [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "c556e104-3003-e711-5da5-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "bb56e104-3003-e711-5da5-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "81b212d8-3003-e711-5da5-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_GenSoftwareType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "089eb0d6-aee0-e911-978b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "189eb0d6-aee0-e911-978b-0050568f2fc3", + "Id": "1d9eb0d6-aee0-e911-978b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "c556e104-3003-e711-5da5-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "089eb0d6-aee0-e911-978b-0050568f2fc3", + "ObjectId": "009eb0d6-aee0-e911-978b-0050568f2fc3", + "Name": "ORD1559459-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1559459", + "CreatedDate": "2019-09-26T22:41:56.327Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "41d8b6f3-0bdb-e911-978b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "4fd8b6f3-0bdb-e911-978b-0050568f2fc3", + "Id": "54d8b6f3-0bdb-e911-978b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "41d8b6f3-0bdb-e911-978b-0050568f2fc3", + "ObjectId": "39d8b6f3-0bdb-e911-978b-0050568f2fc3", + "Name": "ORD1554599-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1554599", + "CreatedDate": "2019-09-19T18:33:26.35Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "f1cf7485-03db-e911-978b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "ffcf7485-03db-e911-978b-0050568f2fc3", + "Id": "04d07485-03db-e911-978b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "f1cf7485-03db-e911-978b-0050568f2fc3", + "ObjectId": "e9cf7485-03db-e911-978b-0050568f2fc3", + "Name": "ORD1554593-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1554593", + "CreatedDate": "2019-09-19T17:33:00.97Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "c937c7c3-feda-e911-978b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "d737c7c3-feda-e911-978b-0050568f2fc3", + "Id": "dc37c7c3-feda-e911-978b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "c937c7c3-feda-e911-978b-0050568f2fc3", + "ObjectId": "c137c7c3-feda-e911-978b-0050568f2fc3", + "Name": "ORD1554581-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1554581", + "CreatedDate": "2019-09-19T16:59:01.803Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "MailRelay - Internal Registration [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "aad73ca7-eb78-e811-f1b8-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "a0d73ca7-eb78-e811-f1b8-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "3106e15b-ea78-e811-f1b8-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_InternalMailRelayRegType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "fd04875f-73ce-e911-978b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "0b05875f-73ce-e911-978b-0050568f2fc3", + "Id": "1005875f-73ce-e911-978b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "aad73ca7-eb78-e811-f1b8-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "fd04875f-73ce-e911-978b-0050568f2fc3", + "ObjectId": "f504875f-73ce-e911-978b-0050568f2fc3", + "Name": "ORD1541808-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1541808", + "CreatedDate": "2019-09-03T17:50:55.427Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "f6035489-37c8-e911-958b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "04045489-37c8-e911-958b-0050568f2fc3", + "Id": "09045489-37c8-e911-958b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "f6035489-37c8-e911-958b-0050568f2fc3", + "ObjectId": "ee035489-37c8-e911-958b-0050568f2fc3", + "Name": "ORD1536037-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1536037", + "CreatedDate": "2019-08-26T19:27:29.5Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Functional Mailbox - New [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "c9c1844f-950e-45a9-b0c3-9d9ab81208f2", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "7548fb5f-10f4-4b17-a6e5-efd2e8c9112b", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "cbba908e-7f76-41d0-876d-5bb35a5e81ea", + "CustomFormEntityName": "Ud_CF_IFX_FunctionalMailboxNewType", + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "733d3551-e9c4-e911-958b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "813d3551-e9c4-e911-958b-0050568f2fc3", + "Id": "863d3551-e9c4-e911-958b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "c9c1844f-950e-45a9-b0c3-9d9ab81208f2" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "733d3551-e9c4-e911-958b-0050568f2fc3", + "ObjectId": "6b3d3551-e9c4-e911-958b-0050568f2fc3", + "Name": "ORD1534246-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1534246", + "CreatedDate": "2019-08-22T14:30:08.507Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Functional Mailbox - New [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "c9c1844f-950e-45a9-b0c3-9d9ab81208f2", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "7548fb5f-10f4-4b17-a6e5-efd2e8c9112b", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "cbba908e-7f76-41d0-876d-5bb35a5e81ea", + "CustomFormEntityName": "Ud_CF_IFX_FunctionalMailboxNewType", + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "6e22d51b-e9c4-e911-958b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "7c22d51b-e9c4-e911-958b-0050568f2fc3", + "Id": "8122d51b-e9c4-e911-958b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "c9c1844f-950e-45a9-b0c3-9d9ab81208f2" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "6e22d51b-e9c4-e911-958b-0050568f2fc3", + "ObjectId": "6622d51b-e9c4-e911-958b-0050568f2fc3", + "Name": "ORD1534244-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1534244", + "CreatedDate": "2019-08-22T14:28:37.577Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Functional Mailbox - New [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "c9c1844f-950e-45a9-b0c3-9d9ab81208f2", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "7548fb5f-10f4-4b17-a6e5-efd2e8c9112b", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "cbba908e-7f76-41d0-876d-5bb35a5e81ea", + "CustomFormEntityName": "Ud_CF_IFX_FunctionalMailboxNewType", + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "427d674f-b8be-e911-958b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "507d674f-b8be-e911-958b-0050568f2fc3", + "Id": "557d674f-b8be-e911-958b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "c9c1844f-950e-45a9-b0c3-9d9ab81208f2" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "427d674f-b8be-e911-958b-0050568f2fc3", + "ObjectId": "3a7d674f-b8be-e911-958b-0050568f2fc3", + "Name": "ORD1528792-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1528792", + "CreatedDate": "2019-08-14T17:24:10.833Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Functional Mailbox - New [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "c9c1844f-950e-45a9-b0c3-9d9ab81208f2", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "7548fb5f-10f4-4b17-a6e5-efd2e8c9112b", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "cbba908e-7f76-41d0-876d-5bb35a5e81ea", + "CustomFormEntityName": "Ud_CF_IFX_FunctionalMailboxNewType", + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "8cdaccf9-b7be-e911-958b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "9cdaccf9-b7be-e911-958b-0050568f2fc3", + "Id": "a1daccf9-b7be-e911-958b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "c9c1844f-950e-45a9-b0c3-9d9ab81208f2" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "8cdaccf9-b7be-e911-958b-0050568f2fc3", + "ObjectId": "84daccf9-b7be-e911-958b-0050568f2fc3", + "Name": "ORD1528790-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1528790", + "CreatedDate": "2019-08-14T17:21:42.447Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "File Share - New [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "0829c82c-f0e4-44e3-9fac-75795f279550", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "742b4a3e-c6ad-41c5-b377-a4eed3989129", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "af42b9c3-7c22-e611-b887-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_FileShare1_4_5NewType", + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "12a3d948-b7be-e911-958b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "20a3d948-b7be-e911-958b-0050568f2fc3", + "Id": "25a3d948-b7be-e911-958b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "0829c82c-f0e4-44e3-9fac-75795f279550" + } + } + ], + "AllowedActions": {}, + "Id": "12a3d948-b7be-e911-958b-0050568f2fc3", + "ObjectId": "0aa3d948-b7be-e911-958b-0050568f2fc3", + "Name": "ORD1528789-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1528789", + "CreatedDate": "2019-08-14T17:16:52.2Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "CCL Windows File Share - New [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "ee3191f8-d273-e511-688d-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "d83191f8-d273-e511-688d-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "21f914b8-d273-e511-688d-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_CCL_FileShare_NewType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "796e0367-b6be-e911-958b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "876e0367-b6be-e911-958b-0050568f2fc3", + "Id": "8c6e0367-b6be-e911-958b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "ee3191f8-d273-e511-688d-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "796e0367-b6be-e911-958b-0050568f2fc3", + "ObjectId": "716e0367-b6be-e911-958b-0050568f2fc3", + "Name": "ORD1528787-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1528787", + "CreatedDate": "2019-08-14T17:10:26.67Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Fixed IP Address [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "e276f137-ed1b-4415-8811-d53e4233a33a", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "29eb418d-3558-4b61-98eb-53679898e921", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "a7d5d01e-88b8-e711-a99e-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Fixed_IP_AddressType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "412e013d-a7b7-e911-958b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "4f2e013d-a7b7-e911-958b-0050568f2fc3", + "Id": "542e013d-a7b7-e911-958b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "e276f137-ed1b-4415-8811-d53e4233a33a" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "412e013d-a7b7-e911-958b-0050568f2fc3", + "ObjectId": "392e013d-a7b7-e911-958b-0050568f2fc3", + "Name": "ORD1522953-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1522953", + "CreatedDate": "2019-08-05T17:34:22.73Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Administration Account for Custom Endpoint (CEP) Environment [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "52af1796-35b6-e811-66ba-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "48af1796-35b6-e811-66ba-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "24056054-37b6-e811-66ba-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_CEP_AdminType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "1056d1f7-5daa-e911-938b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "1e56d1f7-5daa-e911-938b-0050568f2fc3", + "Id": "2356d1f7-5daa-e911-938b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "52af1796-35b6-e811-66ba-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "1056d1f7-5daa-e911-938b-0050568f2fc3", + "ObjectId": "0856d1f7-5daa-e911-938b-0050568f2fc3", + "Name": "ORD1512426-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1512426", + "CreatedDate": "2019-07-19T19:47:00.903Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "CCL Windows File Share - New [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "ee3191f8-d273-e511-688d-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "d83191f8-d273-e511-688d-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "21f914b8-d273-e511-688d-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_CCL_FileShare_NewType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "eb92652e-fea3-e911-938b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "f992652e-fea3-e911-938b-0050568f2fc3", + "Id": "fe92652e-fea3-e911-938b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "ee3191f8-d273-e511-688d-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "eb92652e-fea3-e911-938b-0050568f2fc3", + "ObjectId": "e392652e-fea3-e911-938b-0050568f2fc3", + "Name": "ORD1507355-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1507355", + "CreatedDate": "2019-07-11T17:06:13.68Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Special Account for Clients & Applications [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "55a2cc5f-ff67-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "4ba2cc5f-ff67-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "bcbfe962-1e28-e911-928b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_SpecialAccForClientsAndAppsType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "25dc8e63-229c-e911-938b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "33dc8e63-229c-e911-938b-0050568f2fc3", + "Id": "38dc8e63-229c-e911-938b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "55a2cc5f-ff67-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "25dc8e63-229c-e911-938b-0050568f2fc3", + "ObjectId": "1ddc8e63-229c-e911-938b-0050568f2fc3", + "Name": "ORD1499496-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1499496", + "CreatedDate": "2019-07-01T17:05:15.61Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Special Account for Clients & Applications [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "55a2cc5f-ff67-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "4ba2cc5f-ff67-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "bcbfe962-1e28-e911-928b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_SpecialAccForClientsAndAppsType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "d6ae0d1f-8292-e911-938b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "e4ae0d1f-8292-e911-938b-0050568f2fc3", + "Id": "e9ae0d1f-8292-e911-938b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "55a2cc5f-ff67-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "d6ae0d1f-8292-e911-938b-0050568f2fc3", + "ObjectId": "ceae0d1f-8292-e911-938b-0050568f2fc3", + "Name": "ORD1492221-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1492221", + "CreatedDate": "2019-06-19T11:05:24.197Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Special Account for Clients & Applications [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "55a2cc5f-ff67-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "4ba2cc5f-ff67-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "bcbfe962-1e28-e911-928b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_SpecialAccForClientsAndAppsType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "1b44cc5c-8192-e911-938b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "2944cc5c-8192-e911-938b-0050568f2fc3", + "Id": "2e44cc5c-8192-e911-938b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "55a2cc5f-ff67-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "1b44cc5c-8192-e911-938b-0050568f2fc3", + "ObjectId": "1344cc5c-8192-e911-938b-0050568f2fc3", + "Name": "ORD1492214-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1492214", + "CreatedDate": "2019-06-19T11:00:00.29Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Active Directory Group - new [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "a3c9a5f9-0c5c-4f91-84a8-2946326024c5", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "da4c35cb-ce5a-41f0-85e4-5936e2e205bc", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "acf8d5b4-c982-e511-a7b9-0050568f7353", + "CustomFormEntityName": "Ud_InfineonDefaultEmbeddedCustomFormNEWType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "71ee5bb6-5489-e911-938b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "7fee5bb6-5489-e911-938b-0050568f2fc3", + "Id": "84ee5bb6-5489-e911-938b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "a3c9a5f9-0c5c-4f91-84a8-2946326024c5" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "71ee5bb6-5489-e911-938b-0050568f2fc3", + "ObjectId": "69ee5bb6-5489-e911-938b-0050568f2fc3", + "Name": "ORD1485405-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1485405", + "CreatedDate": "2019-06-07T18:47:36.613Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Special Account for Clients & Applications [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "55a2cc5f-ff67-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "4ba2cc5f-ff67-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "bcbfe962-1e28-e911-928b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_SpecialAccForClientsAndAppsType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "056a57ee-3e89-e911-938b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "136a57ee-3e89-e911-938b-0050568f2fc3", + "Id": "186a57ee-3e89-e911-938b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "55a2cc5f-ff67-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "056a57ee-3e89-e911-938b-0050568f2fc3", + "ObjectId": "fd6957ee-3e89-e911-938b-0050568f2fc3", + "Name": "ORD1485381-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1485381", + "CreatedDate": "2019-06-07T16:11:43.687Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Special Account for Clients & Applications [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "55a2cc5f-ff67-e911-938b-0050568f2fc3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "4ba2cc5f-ff67-e911-938b-0050568f2fc3", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "bcbfe962-1e28-e911-928b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_SpecialAccForClientsAndAppsType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "1a315a2e-387e-e911-938b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "28315a2e-387e-e911-938b-0050568f2fc3", + "Id": "2d315a2e-387e-e911-938b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "55a2cc5f-ff67-e911-938b-0050568f2fc3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "1a315a2e-387e-e911-938b-0050568f2fc3", + "ObjectId": "12315a2e-387e-e911-938b-0050568f2fc3", + "Name": "ORD1477029-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1477029", + "CreatedDate": "2019-05-24T15:25:39.64Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "iSpot - Internet access for mobile devices [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "cec51564-93a0-e111-b9b4-005056b1201d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "b8c51564-93a0-e111-b9b4-005056b1201d", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "2379c632-7db6-e411-7c90-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_iSpot_1Type", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "39197f4c-d86f-e911-938b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "47197f4c-d86f-e911-938b-0050568f2fc3", + "Id": "4c197f4c-d86f-e911-938b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "cec51564-93a0-e111-b9b4-005056b1201d" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "39197f4c-d86f-e911-938b-0050568f2fc3", + "ObjectId": "31197f4c-d86f-e911-938b-0050568f2fc3", + "Name": "ORD1462927-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1462927", + "CreatedDate": "2019-05-06T08:24:05.037Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Port Replicator [Regensburg]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "10d41f80-c03f-491d-9949-7f19d0fc7140", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "c18e08bd-ae06-4712-a8f6-98e56b6b33e5", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "f9a2a9f2-7d46-4767-85b2-c2aeb784e10b", + "CustomFormEntityName": "Ud_CF_IFX_AccessoryType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "0a553995-536a-e911-938b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "18553995-536a-e911-938b-0050568f2fc3", + "Id": "1d553995-536a-e911-938b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "10d41f80-c03f-491d-9949-7f19d0fc7140" + } + }, + { + "Name": "AC Adapter/Power Supply for Notebooks [Regensburg]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "7fb05d12-ef22-40fb-9a2e-19e958a46cc8", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "afe7f726-f45e-41d9-bca6-8b03db40bbbb", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "f9a2a9f2-7d46-4767-85b2-c2aeb784e10b", + "CustomFormEntityName": "Ud_CF_IFX_AccessoryType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "0a553995-536a-e911-938b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "23553995-536a-e911-938b-0050568f2fc3", + "Id": "28553995-536a-e911-938b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "7fb05d12-ef22-40fb-9a2e-19e958a46cc8" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "0a553995-536a-e911-938b-0050568f2fc3", + "ObjectId": "02553995-536a-e911-938b-0050568f2fc3", + "Name": "ORD1458830-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1458830", + "CreatedDate": "2019-04-29T07:51:24.443Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Grimmer Andrea (IFAG CSC FI FE PCS FDC)", + "RequestorId": "e982416b-f02e-447f-945e-c331bd9062ab" + }, + { + "Bookings": [ + { + "Name": "Teamcenter (Account) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "8275a466-8f88-41b0-bb66-16a898adb3b3", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "f951951a-bfab-4035-b6af-99c66d598e59", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "37d0f898-ec63-48f8-8385-6c4f0ac3c6b5", + "CustomFormEntityName": "Ud_CF_IFX_TeamcenterAccountType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "42937a1d-4452-e911-928b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "50937a1d-4452-e911-928b-0050568f2fc3", + "Id": "55937a1d-4452-e911-928b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "8275a466-8f88-41b0-bb66-16a898adb3b3" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "42937a1d-4452-e911-928b-0050568f2fc3", + "ObjectId": "3a937a1d-4452-e911-928b-0050568f2fc3", + "Name": "ORD1438897-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1438897", + "CreatedDate": "2019-03-29T17:00:21.117Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Enterprise Architect - Project and User Management [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "9b5db7b5-b092-e211-6485-005056b1201d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "855db7b5-b092-e211-6485-005056b1201d", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "3ac0ca81-9892-e211-6485-005056b1201d", + "CustomFormEntityName": "Ud_CF_IFX_EnterpriseArchitect_ProjectUser_ManagementType", + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "480724f3-564f-e911-928b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "560724f3-564f-e911-928b-0050568f2fc3", + "Id": "5b0724f3-564f-e911-928b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "9b5db7b5-b092-e211-6485-005056b1201d" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "480724f3-564f-e911-928b-0050568f2fc3", + "ObjectId": "400724f3-564f-e911-928b-0050568f2fc3", + "Name": "ORD1435311-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1435311", + "CreatedDate": "2019-03-25T23:37:30.203Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Enterprise Architect - Others [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "2a9c2cb0-fc68-42f2-97eb-6f38b2ee6f9d", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "cdcaa203-c2e4-4bf3-a8e6-b3254f7083d7", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "92bd5880-9592-e211-6485-005056b1201d", + "CustomFormEntityName": "Ud_CF_IFX_EnterpriseArchitect_OthersType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "e228221f-754a-e911-928b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "f028221f-754a-e911-928b-0050568f2fc3", + "Id": "f528221f-754a-e911-928b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "2a9c2cb0-fc68-42f2-97eb-6f38b2ee6f9d" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "e228221f-754a-e911-928b-0050568f2fc3", + "ObjectId": "da28221f-754a-e911-928b-0050568f2fc3", + "Name": "ORD1430675-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1430675", + "CreatedDate": "2019-03-19T18:30:55.35Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "Monitor [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "33220ecd-5444-4dcd-a9ea-c048aead0052", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "ebb4992b-eecb-44b6-9c26-18d41d692eed", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "e8d47cb2-b880-4546-a1bb-6325b4d90144", + "CustomFormEntityName": "Ud_CF_IFX_MonitorScannerType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "45354e30-a749-e911-928b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 4, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "55354e30-a749-e911-928b-0050568f2fc3", + "Id": "5a354e30-a749-e911-928b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "33220ecd-5444-4dcd-a9ea-c048aead0052" + } + } + ], + "AllowedActions": {}, + "Id": "45354e30-a749-e911-928b-0050568f2fc3", + "ObjectId": "3d354e30-a749-e911-928b-0050568f2fc3", + "Name": "ORD1429632-Install", + "Type": "Install", + "TypeId": 10, + "State": "Canceled", + "StateId": 1052, + "StateIcon": "remove_circle", + "StateColor": "0xFFFF5722", + "ItemNumber": "ORD1429632", + "CreatedDate": "2019-03-18T17:56:45.213Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": " Software Installation Permission [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "c556e104-3003-e711-5da5-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "bb56e104-3003-e711-5da5-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "81b212d8-3003-e711-5da5-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_GenSoftwareType", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "b84f2aec-6d47-e911-928b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "c64f2aec-6d47-e911-928b-0050568f2fc3", + "Id": "cb4f2aec-6d47-e911-928b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "c556e104-3003-e711-5da5-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "b84f2aec-6d47-e911-928b-0050568f2fc3", + "ObjectId": "b04f2aec-6d47-e911-928b-0050568f2fc3", + "Name": "ORD1428279-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1428279", + "CreatedDate": "2019-03-15T22:01:47.48Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + }, + { + "Bookings": [ + { + "Name": "Documentum (User Permission) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "ebc9bd06-851e-4e66-b844-ae610b25ff35", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "ac259ed0-a32e-4735-941a-b42fbc64d5ad", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "ab78a786-afb7-4a99-871f-385d988a598b", + "CustomFormEntityName": "Ud_CF_IFX_DocumentumUserPermissionType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "89c5a9e7-4147-e911-928b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "97c5a9e7-4147-e911-928b-0050568f2fc3", + "Id": "9cc5a9e7-4147-e911-928b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "ebc9bd06-851e-4e66-b844-ae610b25ff35" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "89c5a9e7-4147-e911-928b-0050568f2fc3", + "ObjectId": "81c5a9e7-4147-e911-928b-0050568f2fc3", + "Name": "ORD1428228-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1428228", + "CreatedDate": "2019-03-15T16:46:42.26Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "McIntyre Juanita (IFEPI QM)", + "RequestorId": "c6cf962c-3eb1-44b5-aa44-7166ae2403ff" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "Access to IFAM Application: OpenInsight (Mesa) [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "641bd511-fb32-e811-25a9-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "5a1bd511-fb32-e811-25a9-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "ad69acaa-6747-e811-25a9-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_Openinsight_1Type", + "CreateMultipleBookings": true, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "36f039ba-d4a2-4e43-a072-10a25393c171", + "Name": "Global", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "bfa1a3db-9e46-e911-928b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "cda1a3db-9e46-e911-928b-0050568f2fc3", + "Id": "d2a1a3db-9e46-e911-928b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "641bd511-fb32-e811-25a9-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "bfa1a3db-9e46-e911-928b-0050568f2fc3", + "ObjectId": "b7a1a3db-9e46-e911-928b-0050568f2fc3", + "Name": "ORD1427384-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1427384", + "CreatedDate": "2019-03-14T21:19:38.487Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Francois Rivard (IFAM IT FI MES)", + "RequestorId": "324d7aa5-07dd-44f6-9f67-089bac5909f3" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "Access to GaN-MESA US originated [3E001] File Share [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "c7838a58-2742-e511-688d-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "b1838a58-2742-e511-688d-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "40f317e0-6a1e-e611-b887-0050568f7353", + "CustomFormEntityName": "Ud_CF_IFX_FileShare_GaNEPIAccess2Type", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "e608ada1-9e46-e911-928b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 4, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "f408ada1-9e46-e911-928b-0050568f2fc3", + "Id": "f908ada1-9e46-e911-928b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "c7838a58-2742-e511-688d-0050568f7353" + } + } + ], + "AllowedActions": {}, + "Id": "e608ada1-9e46-e911-928b-0050568f2fc3", + "ObjectId": "de08ada1-9e46-e911-928b-0050568f2fc3", + "Name": "ORD1427383-Install", + "Type": "Install", + "TypeId": 10, + "State": "Canceled", + "StateId": 1052, + "StateIcon": "remove_circle", + "StateColor": "0xFFFF5722", + "ItemNumber": "ORD1427383", + "CreatedDate": "2019-03-14T21:18:04.82Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Francois Rivard (IFAM IT FI MES)", + "RequestorId": "324d7aa5-07dd-44f6-9f67-089bac5909f3" + }, + { + "Bookings": [ + { + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + }, + "Name": "Request to Access EC Domain – EC ISC Configuration [Mesa]", + "Description": "", + "PaymentMethod": 2, + "Service": { + "Id": "86eab50f-dea8-e711-a99e-0050568f7353", + "Quantity": 1, + "PaymentMethod": 2, + "Price": { + "CC": "EUR" + }, + "ObjectId": "7ceab50f-dea8-e711-a99e-0050568f7353", + "ConfigurationItemType": 0, + "ConfigurationItemTypeName": "SPSArticleTypeService", + "ServiceType": 4, + "CustomFormEntityId": "64b11ef9-6e23-e911-928b-0050568fcd3c", + "CustomFormEntityName": "Ud_CF_IFX_ECdomain_EC_NewType", + "CreateMultipleBookings": true, + "UninstallationMode": 1, + "AllowIdenticalInstances": true, + "Catalog": { + "Id": "d0bab435-0d8b-4813-b9d7-2b871d565765", + "Name": "Mesa", + "CurrencyCode": "EUR" + } + }, + "Order": { + "Id": "234fcd55-7a46-e911-928b-0050568f2fc3", + "Name": "-", + "TypeId": 10 + }, + "ApprovalStatus": 1, + "AllowedActions": { + "Incident": true + }, + "ObjectId": "314fcd55-7a46-e911-928b-0050568f2fc3", + "Id": "364fcd55-7a46-e911-928b-0050568f2fc3", + "Quantity": 1, + "AdditionalData": { + "ServiceId": "86eab50f-dea8-e711-a99e-0050568f7353" + } + } + ], + "AllowedActions": { + "Reorder": true + }, + "Id": "234fcd55-7a46-e911-928b-0050568f2fc3", + "ObjectId": "1b4fcd55-7a46-e911-928b-0050568f2fc3", + "Name": "ORD1427337-Install", + "Type": "Install", + "TypeId": 10, + "State": "Fulfilled", + "StateId": 1049, + "StateIcon": "done_all", + "StateColor": "0xFFAEAEAE", + "ItemNumber": "ORD1427337", + "CreatedDate": "2019-03-14T16:58:07.337Z", + "DecidedDate": "1970-01-01T00:00:00Z", + "CostCenterId": "816361e3-13e6-4b44-96a9-fb44c63a8e36", + "CostCenterName": "Global", + "Recipient": "Phares Mike (IFAM IT FI MES)", + "RecipientId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85", + "Requestor": "Phares Mike (IFAM IT FI MES)", + "RequestorId": "a85f1011-9b51-4273-96d5-86c2a4d2fe85" + } + ], + "Total": 104 +} \ No newline at end of file diff --git a/Server/Data/Tests/GetAllServiceShopOrdersApi.json b/Server/Data/Tests/GetAllServiceShopOrdersApi.json new file mode 100644 index 0000000..e68a134 --- /dev/null +++ b/Server/Data/Tests/GetAllServiceShopOrdersApi.json @@ -0,0 +1 @@ +[{"id":"23188d3d-9b75-ed11-ab8b-0050568f2fc3","name":"ORD2491814-Install","bookingNames":["Hybrid Infineon Cloud Platform Consulting [Mesa]"],"type":"Install","state":"Provisioned","itemNumber":"ORD2491814","createdDate":"2022-12-06T19:21:55.767Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"0d21afd1-ea74-ed11-ab8b-0050568f2fc3","name":"ORD2490311-Install","bookingNames":["LAN Port [Mesa]"],"type":"Install","state":"Provisioned","itemNumber":"ORD2490311","createdDate":"2022-12-05T22:19:06.703Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"cd2051f5-0c72-ed11-ab8b-0050568f2fc3","name":"ORD2487507-Install","bookingNames":["ICP Project - New [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2487507","createdDate":"2022-12-02T06:45:55.123Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"e81a8625-dc70-ed11-ab8b-0050568f2fc3","name":"ORD2485441-Install","bookingNames":["Unix Account Deletion (Urania) pharesl [Mesa]"],"type":"Install","state":"Approved","itemNumber":"ORD2485441","createdDate":"2022-11-30T18:24:03.653Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"5735c925-dc70-ed11-ab8b-0050568f2fc3","name":"ORD2485440-Install","bookingNames":["Unix Personal Account Deletion (R&D and Business Unix) [Mesa]"],"type":"Install","state":"Approved","itemNumber":"ORD2485440","createdDate":"2022-11-30T18:24:00.41Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"d5c0bbe7-1070-ed11-ab8b-0050568f2fc3","name":"ORD2483773-Install","bookingNames":["Unix Personal Account pharesl [Mesa]","Add Location to Unix Personal Account in Mesa (BUX) [Mesa]"],"type":"Install","state":"Canceled","itemNumber":"ORD2483773","createdDate":"2022-11-29T18:09:10.93Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"5dc33de3-1070-ed11-ab8b-0050568f2fc3","name":"ORD2483772-Install","bookingNames":["Unix Personal Account [Mesa]"],"type":"Install","state":"Canceled","itemNumber":"ORD2483772","createdDate":"2022-11-29T18:09:04.08Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"e7b5d4a9-0670-ed11-ab8b-0050568f2fc3","name":"ORD2483739-Install","bookingNames":["Add Location to Unix Personal Account in El Segundo [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2483739","createdDate":"2022-11-29T16:55:52.247Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"4d73eda6-0670-ed11-ab8b-0050568f2fc3","name":"ORD2483738-Install","bookingNames":["Add Location to Unix Personal Account [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2483738","createdDate":"2022-11-29T16:55:47.6Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"ff5a8f70-1b6a-ed11-ab8b-0050568f2fc3","name":"ORD2475200-Install","bookingNames":["Special Account - Modification [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2475200","createdDate":"2022-11-22T04:09:22.097Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"06fe1087-b224-ed11-aa8b-0050568f2fc3","name":"ORD2377575-Install","bookingNames":["Add Location to Unix Personal Account in Mesa (BUX) [Mesa]","Unix Personal Account phares [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2377575","createdDate":"2022-08-25T20:14:41.11Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"98d04385-b224-ed11-aa8b-0050568f2fc3","name":"ORD2377574-Install","bookingNames":["Unix Personal Account [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2377574","createdDate":"2022-08-25T20:14:33.35Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"04801f7b-6f1e-ed11-aa8b-0050568f2fc3","name":"ORD2369036-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2369036","createdDate":"2022-08-17T20:59:29.737Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"b5a8fd36-d219-ed11-aa8b-0050568f2fc3","name":"ORD2363429-Install","bookingNames":["EC File Share Access [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2363429","createdDate":"2022-08-12T00:03:41.62Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"5e057130-d219-ed11-aa8b-0050568f2fc3","name":"ORD2363428-Install","bookingNames":["EC File Share Access [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2363428","createdDate":"2022-08-12T00:03:36.77Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"08befe50-b819-ed11-aa8b-0050568f2fc3","name":"ORD2363373-Install","bookingNames":["File Share Access [Mesa]"],"type":"Install","state":"Declined","itemNumber":"ORD2363373","createdDate":"2022-08-11T20:58:23.757Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"570dd46e-e70c-ed11-a98b-0050568f2fc3","name":"ORD2344051-Install","bookingNames":["Terminal Server Software Rollout [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2344051","createdDate":"2022-07-26T13:32:46.613Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"c6b50145-0109-ed11-a98b-0050568f2fc3","name":"ORD2339561-Install","bookingNames":["LAN Port [Mesa]","LAN Port [Mesa]","Fixed IP Address [Mesa]","Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2339561","createdDate":"2022-07-21T14:27:43.987Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"e49d8c25-5afd-ec11-a98b-0050568f2fc3","name":"ORD2322650-Install","bookingNames":["LAN Port [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2322650","createdDate":"2022-07-06T18:33:38.41Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"8de5db48-85fc-ec11-a98b-0050568f2fc3","name":"ORD2320980-Install","bookingNames":["LAN Port [Mesa]","Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2320980","createdDate":"2022-07-05T17:09:56.557Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"51ed1363-41f6-ec11-a98b-0050568f2fc3","name":"ORD2311296-Install","bookingNames":["Fixed IP Address [Mesa]","Network Integration of Custom Endpoint [Mesa]","LAN Port [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2311296","createdDate":"2022-06-27T17:48:48.4Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"af167202-2bdd-ec11-a98b-0050568f2fc3","name":"ORD2279358-Install","bookingNames":["FAB Client - Windows 10 [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2279358","createdDate":"2022-05-26T19:35:40.003Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"cc433463-bbcf-ec11-a98b-0050568f2fc3","name":"ORD2261245-Install","bookingNames":["Special Account - Modification [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2261245","createdDate":"2022-05-09T17:13:48.483Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"97e87cd2-8eb6-ec11-a88b-0050568f2fc3","name":"ORD2231674-Install","bookingNames":["Special Account for Clients & Applications [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2231674","createdDate":"2022-04-07T16:21:56.127Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"f667356f-38a6-ec11-a88b-0050568f2fc3","name":"ORD2210129-Install","bookingNames":["Company iOS Smartphone [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2210129","createdDate":"2022-03-17T21:23:07.677Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"e5802345-0e99-ec11-a88b-0050568f2fc3","name":"ORD2191816-Install","bookingNames":["LAN Port [Mesa]","Fixed IP Address [Mesa]","Network Integration of Custom Endpoint [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2191816","createdDate":"2022-03-01T03:18:35.263Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"7b28de97-b679-ec11-a68b-0050568f2fc3","name":"ORD2153849-Install","bookingNames":[" Software Installation Permission [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2153849","createdDate":"2022-01-20T06:02:54.303Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"66911360-2574-ec11-a68b-0050568f2fc3","name":"ORD2146469-Install","bookingNames":["Notebook/Desktop Refresh [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2146469","createdDate":"2022-01-13T04:00:50.16Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"70686107-be1f-ec11-a58b-0050568f2fc3","name":"ORD2054518-Install","bookingNames":["Network Integration of Custom Endpoint [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2054518","createdDate":"2021-09-27T18:09:26.67Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"b19f781a-bd1f-ec11-a58b-0050568f2fc3","name":"ORD2054514-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2054514","createdDate":"2021-09-27T18:02:41.113Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"617418af-e604-ec11-a58b-0050568f2fc3","name":"ORD2024785-Install","bookingNames":["Network Integration of Custom Endpoint [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2024785","createdDate":"2021-08-24T14:22:21.323Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"2db141b1-e504-ec11-a58b-0050568f2fc3","name":"ORD2024775-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2024775","createdDate":"2021-08-24T14:15:17.09Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Carrier Todd (IFEPI NPI SQ)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"bdf16315-78ff-eb11-a58b-0050568f2fc3","name":"ORD2019789-Install","bookingNames":["LAN Port [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2019789","createdDate":"2021-08-17T16:28:09.08Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"d95ab8d0-77ff-eb11-a58b-0050568f2fc3","name":"ORD2019788-Install","bookingNames":["Network Integration of Custom Endpoint [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2019788","createdDate":"2021-08-17T16:26:13.04Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"0b2b876a-76ff-eb11-a58b-0050568f2fc3","name":"ORD2019782-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2019782","createdDate":"2021-08-17T16:16:03.98Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"4e9e4915-79fc-eb11-a58b-0050568f2fc3","name":"ORD2017280-Install","bookingNames":["EC Windows File Share - Modification [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2017280","createdDate":"2021-08-13T20:57:38.22Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"0a5e45ab-e0f3-eb11-a58b-0050568f2fc3","name":"ORD2007190-Install","bookingNames":["Access to IDMS-Admin Application [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD2007190","createdDate":"2021-08-02T22:26:27.567Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"480a6c78-4aea-eb11-a38b-0050568f2fc3","name":"ORD1997545-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1997545","createdDate":"2021-07-21T17:38:43.797Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"4e7617ec-49ea-eb11-a38b-0050568f2fc3","name":"ORD1997544-Install","bookingNames":["Network Integration of Custom Endpoint [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1997544","createdDate":"2021-07-21T17:34:45.517Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"e2364a1b-e5e8-eb11-a38b-0050568f2fc3","name":"ORD1995549-Install","bookingNames":["Network Integration of Custom Endpoint [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1995549","createdDate":"2021-07-19T23:00:31.723Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"c1ef96f6-ebd2-eb11-a38b-0050568f2fc3","name":"ORD1971080-Install","bookingNames":["Special Account - Modification [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1971080","createdDate":"2021-06-21T23:54:11.04Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"f4d2c4a3-9cc8-eb11-a38b-0050568f2fc3","name":"ORD1960613-Install","bookingNames":["FAB Client - Windows 10 [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1960613","createdDate":"2021-06-08T21:01:06.327Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"840fa35b-aeb2-eb11-a38b-0050568f2fc3","name":"ORD1940441-Install","bookingNames":["Special Account - Modification [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1940441","createdDate":"2021-05-11T23:12:34.803Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"e9d8b8cf-d0a2-eb11-a38b-0050568f2fc3","name":"ORD1924069-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1924069","createdDate":"2021-04-21T18:38:49.7Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"9195f81c-3092-eb11-a28b-0050568f2fc3","name":"ORD1907380-Install","bookingNames":[" Software Installation Permission [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1907380","createdDate":"2021-03-31T14:48:14.21Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"a870de41-e090-eb11-a28b-0050568f2fc3","name":"ORD1905467-Install","bookingNames":["MailRelay - Internal Registration [Mesa]"," Software Installation Permission [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1905467","createdDate":"2021-03-29T22:44:02.82Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"a9917a8c-2681-eb11-a28b-0050568f2fc3","name":"ORD1890453-Install","bookingNames":["Functional Mailbox - Modification [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1890453","createdDate":"2021-03-09T22:27:01.43Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"ff7a50b0-506d-eb11-a28b-0050568f2fc3","name":"ORD1870543-Install","bookingNames":["LAN Port [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1870543","createdDate":"2021-02-12T16:38:17.58Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"1b1eff04-8961-eb11-a28b-0050568f2fc3","name":"ORD1858252-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1858252","createdDate":"2021-01-28T16:51:17.703Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"6345b2a5-333b-eb11-a18b-0050568f2fc3","name":"ORD1827432-Install","bookingNames":["LAN Port [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1827432","createdDate":"2020-12-10T22:04:24.003Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"5793b421-663a-eb11-a18b-0050568f2fc3","name":"ORD1826546-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1826546","createdDate":"2020-12-09T21:33:15.243Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"eafc2cbf-6133-eb11-a18b-0050568f2fc3","name":"ORD1819354-Install","bookingNames":["LAN Port [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1819354","createdDate":"2020-11-30T23:14:08.87Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"b0201b60-8f2a-eb11-a18b-0050568f2fc3","name":"ORD1812452-Install","bookingNames":["Network Integration of Custom Endpoint [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1812452","createdDate":"2020-11-19T17:48:11.447Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"606120c4-cf1a-eb11-a18b-0050568f2fc3","name":"ORD1797948-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1797948","createdDate":"2020-10-30T16:48:44.377Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"6a39e246-189f-ea11-9d8b-0050568f2fc3","name":"ORD1692639-Install","bookingNames":["Account Validation - Change Owner for meseaf [Klagenfurt]","Account Validation - Change Owner for ifxeafadmin [Klagenfurt]","Account Validation - Change Owner for ifxedaadmin [Klagenfurt]","Account Validation - Change Owner for ECMESCEPEAFSVC [Klagenfurt]","Account Validation - Change Owner for ECMESEAF [Klagenfurt]"],"type":"Install","state":"Declined","itemNumber":"ORD1692639","createdDate":"2020-05-26T06:15:23.167Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Francois Rivard (IFAM IT FI MES)"},{"id":"f638c336-8c7a-ea11-998b-aa59a9db3b67","name":"ORD1671916-Install","bookingNames":["File Share Modification - Create/Delete Permission Group [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1671916","createdDate":"2020-04-09T18:02:09.323Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"bd2de2f7-016a-ea11-998b-aa59a9db3b67","name":"ORD1661220-Install","bookingNames":["Documentum (User Permission) [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1661220","createdDate":"2020-03-19T16:52:09.27Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"McIntyre Juanita (IFEPI QM)"},{"id":"db2390fe-5668-ea11-998b-aa59a9db3b67","name":"ORD1659112-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1659112","createdDate":"2020-03-17T13:55:49.147Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"ba5b74be-1f3e-ea11-998b-aa59a9db3b67","name":"ORD1627366-Install","bookingNames":["CCL Windows File Share - Access/Modification [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1627366","createdDate":"2020-01-23T20:34:31.33Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"29cb357a-1f3e-ea11-998b-aa59a9db3b67","name":"ORD1627365-Install","bookingNames":["CCL Windows File Share - Access/Modification [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1627365","createdDate":"2020-01-23T20:32:31.427Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Becker Chad (IFEPI QM)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"08ff0d43-931e-ea11-988b-0050568f2fc3","name":"ORD1609447-Install","bookingNames":["SPaCe Account (Villach) [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1609447","createdDate":"2019-12-14T17:00:52.803Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Hector Gutierrez (IFEPI GaN OP)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"4b26a917-931e-ea11-988b-0050568f2fc3","name":"ORD1609446-Install","bookingNames":["SPaCe Account (Villach) [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1609446","createdDate":"2019-12-14T16:59:35.527Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Tungare Mihir (IFAM PSS TIE GTD DFR)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"9d20f9ef-921e-ea11-988b-0050568f2fc3","name":"ORD1609445-Install","bookingNames":["SPaCe Account (Villach) [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1609445","createdDate":"2019-12-14T16:58:23.867Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Kannan Srinivasan (IRHIR R&D GaN)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"38d76b8a-921e-ea11-988b-0050568f2fc3","name":"ORD1609444-Install","bookingNames":["SPaCe Account (Villach) [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1609444","createdDate":"2019-12-14T16:55:42.96Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Brian Gruver (IFEPI GaN OP)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"537f2962-921e-ea11-988b-0050568f2fc3","name":"ORD1609443-Install","bookingNames":["SPaCe Account (Villach) [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1609443","createdDate":"2019-12-14T16:54:33.647Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Priscila Spagnol (IFEPI GaN OP)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"5d456958-e11d-ea11-988b-0050568f2fc3","name":"ORD1609404-Install","bookingNames":["SPaCe Account (Villach) [Temecula]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1609404","createdDate":"2019-12-13T19:47:13.427Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Smith Brad (IFAM FE IR TEM P UPS)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"afa42128-e11d-ea11-988b-0050568f2fc3","name":"ORD1609403-Install","bookingNames":["SPaCe Account (Villach) [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1609403","createdDate":"2019-12-13T19:45:55.557Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Becker Chad (IFEPI QM)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"92b47764-690c-ea11-988b-0050568f2fc3","name":"ORD1596798-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1596798","createdDate":"2019-11-21T14:15:47.75Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"83c8b4ec-bbfc-e911-988b-0050568f2fc3","name":"ORD1584798-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1584798","createdDate":"2019-11-01T15:26:17.39Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"74273a1b-02f1-e911-978b-0050568f2fc3","name":"ORD1575853-Install","bookingNames":["CCL Windows File Share - Access/Modification [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1575853","createdDate":"2019-10-17T17:18:22.427Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"a679cecf-01f1-e911-978b-0050568f2fc3","name":"ORD1575852-Install","bookingNames":["CCL Windows File Share - Access/Modification [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1575852","createdDate":"2019-10-17T17:16:20.513Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"862593e9-19e6-e911-978b-0050568f2fc3","name":"ORD1564852-Install","bookingNames":["Active Directory Group - modify [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1564852","createdDate":"2019-10-03T20:11:06.563Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"089eb0d6-aee0-e911-978b-0050568f2fc3","name":"ORD1559459-Install","bookingNames":[" Software Installation Permission [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1559459","createdDate":"2019-09-26T22:41:56.327Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"41d8b6f3-0bdb-e911-978b-0050568f2fc3","name":"ORD1554599-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1554599","createdDate":"2019-09-19T18:33:26.35Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"f1cf7485-03db-e911-978b-0050568f2fc3","name":"ORD1554593-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1554593","createdDate":"2019-09-19T17:33:00.97Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"c937c7c3-feda-e911-978b-0050568f2fc3","name":"ORD1554581-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1554581","createdDate":"2019-09-19T16:59:01.803Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"fd04875f-73ce-e911-978b-0050568f2fc3","name":"ORD1541808-Install","bookingNames":["MailRelay - Internal Registration [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1541808","createdDate":"2019-09-03T17:50:55.427Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"f6035489-37c8-e911-958b-0050568f2fc3","name":"ORD1536037-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1536037","createdDate":"2019-08-26T19:27:29.5Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"733d3551-e9c4-e911-958b-0050568f2fc3","name":"ORD1534246-Install","bookingNames":["Functional Mailbox - New [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1534246","createdDate":"2019-08-22T14:30:08.507Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"6e22d51b-e9c4-e911-958b-0050568f2fc3","name":"ORD1534244-Install","bookingNames":["Functional Mailbox - New [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1534244","createdDate":"2019-08-22T14:28:37.577Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"427d674f-b8be-e911-958b-0050568f2fc3","name":"ORD1528792-Install","bookingNames":["Functional Mailbox - New [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1528792","createdDate":"2019-08-14T17:24:10.833Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"8cdaccf9-b7be-e911-958b-0050568f2fc3","name":"ORD1528790-Install","bookingNames":["Functional Mailbox - New [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1528790","createdDate":"2019-08-14T17:21:42.447Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"12a3d948-b7be-e911-958b-0050568f2fc3","name":"ORD1528789-Install","bookingNames":["File Share - New [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1528789","createdDate":"2019-08-14T17:16:52.2Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"796e0367-b6be-e911-958b-0050568f2fc3","name":"ORD1528787-Install","bookingNames":["CCL Windows File Share - New [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1528787","createdDate":"2019-08-14T17:10:26.67Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"412e013d-a7b7-e911-958b-0050568f2fc3","name":"ORD1522953-Install","bookingNames":["Fixed IP Address [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1522953","createdDate":"2019-08-05T17:34:22.73Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"1056d1f7-5daa-e911-938b-0050568f2fc3","name":"ORD1512426-Install","bookingNames":["Administration Account for Custom Endpoint (CEP) Environment [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1512426","createdDate":"2019-07-19T19:47:00.903Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"eb92652e-fea3-e911-938b-0050568f2fc3","name":"ORD1507355-Install","bookingNames":["CCL Windows File Share - New [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1507355","createdDate":"2019-07-11T17:06:13.68Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"25dc8e63-229c-e911-938b-0050568f2fc3","name":"ORD1499496-Install","bookingNames":["Special Account for Clients & Applications [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1499496","createdDate":"2019-07-01T17:05:15.61Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"d6ae0d1f-8292-e911-938b-0050568f2fc3","name":"ORD1492221-Install","bookingNames":["Special Account for Clients & Applications [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1492221","createdDate":"2019-06-19T11:05:24.197Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"1b44cc5c-8192-e911-938b-0050568f2fc3","name":"ORD1492214-Install","bookingNames":["Special Account for Clients & Applications [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1492214","createdDate":"2019-06-19T11:00:00.29Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"71ee5bb6-5489-e911-938b-0050568f2fc3","name":"ORD1485405-Install","bookingNames":["Active Directory Group - new [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1485405","createdDate":"2019-06-07T18:47:36.613Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"056a57ee-3e89-e911-938b-0050568f2fc3","name":"ORD1485381-Install","bookingNames":["Special Account for Clients & Applications [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1485381","createdDate":"2019-06-07T16:11:43.687Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"1a315a2e-387e-e911-938b-0050568f2fc3","name":"ORD1477029-Install","bookingNames":["Special Account for Clients & Applications [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1477029","createdDate":"2019-05-24T15:25:39.64Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"39197f4c-d86f-e911-938b-0050568f2fc3","name":"ORD1462927-Install","bookingNames":["iSpot - Internet access for mobile devices [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1462927","createdDate":"2019-05-06T08:24:05.037Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"0a553995-536a-e911-938b-0050568f2fc3","name":"ORD1458830-Install","bookingNames":["Port Replicator [Regensburg]","AC Adapter/Power Supply for Notebooks [Regensburg]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1458830","createdDate":"2019-04-29T07:51:24.443Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Grimmer Andrea (IFAG CSC FI FE PCS FDC)"},{"id":"42937a1d-4452-e911-928b-0050568f2fc3","name":"ORD1438897-Install","bookingNames":["Teamcenter (Account) [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1438897","createdDate":"2019-03-29T17:00:21.117Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"480724f3-564f-e911-928b-0050568f2fc3","name":"ORD1435311-Install","bookingNames":["Enterprise Architect - Project and User Management [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1435311","createdDate":"2019-03-25T23:37:30.203Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"e228221f-754a-e911-928b-0050568f2fc3","name":"ORD1430675-Install","bookingNames":["Enterprise Architect - Others [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1430675","createdDate":"2019-03-19T18:30:55.35Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"45354e30-a749-e911-928b-0050568f2fc3","name":"ORD1429632-Install","bookingNames":["Monitor [Mesa]"],"type":"Install","state":"Canceled","itemNumber":"ORD1429632","createdDate":"2019-03-18T17:56:45.213Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"b84f2aec-6d47-e911-928b-0050568f2fc3","name":"ORD1428279-Install","bookingNames":[" Software Installation Permission [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1428279","createdDate":"2019-03-15T22:01:47.48Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"},{"id":"89c5a9e7-4147-e911-928b-0050568f2fc3","name":"ORD1428228-Install","bookingNames":["Documentum (User Permission) [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1428228","createdDate":"2019-03-15T16:46:42.26Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"McIntyre Juanita (IFEPI QM)"},{"id":"bfa1a3db-9e46-e911-928b-0050568f2fc3","name":"ORD1427384-Install","bookingNames":["Access to IFAM Application: OpenInsight (Mesa) [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1427384","createdDate":"2019-03-14T21:19:38.487Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Francois Rivard (IFAM IT FI MES)"},{"id":"e608ada1-9e46-e911-928b-0050568f2fc3","name":"ORD1427383-Install","bookingNames":["Access to GaN-MESA US originated [3E001] File Share [Mesa]"],"type":"Install","state":"Canceled","itemNumber":"ORD1427383","createdDate":"2019-03-14T21:18:04.82Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Francois Rivard (IFAM IT FI MES)"},{"id":"234fcd55-7a46-e911-928b-0050568f2fc3","name":"ORD1427337-Install","bookingNames":["Request to Access EC Domain – EC ISC Configuration [Mesa]"],"type":"Install","state":"Fulfilled","itemNumber":"ORD1427337","createdDate":"2019-03-14T16:58:07.337Z","decidedDate":"1970-01-01T00:00:00Z","recipient":"Phares Mike (IFAM IT FI MES)","requestor":"Phares Mike (IFAM IT FI MES)"}] \ No newline at end of file diff --git a/Server/Data/Tests/GetAppSettingsApi.json b/Server/Data/Tests/GetAppSettingsApi.json new file mode 100644 index 0000000..d7b0280 --- /dev/null +++ b/Server/Data/Tests/GetAppSettingsApi.json @@ -0,0 +1 @@ +["application/json","/api/inbound","D:\\Metrology\\MetrologyAPILogs","\\\\messv02ecc1.ec.local\\EC_Metrology_Si\\MetrologyAttachments","1","Infineon Technologies Americas Corp.","Data Source=MESSAD1001\\TEST1,59583;Integrated Security=True;Initial Catalog=Metrology;","1234567","","True","False","OI_Metrology_Viewer_IFX","auc","Data Source=MESSAD1001\\TEST1,59583;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;","\\\\openinsight-db-srv.na.infineon.com\\apps\\Metrology\\Data","https://localhost:7130;http://localhost:5126","IFXApps"] \ No newline at end of file diff --git a/Server/Data/Tests/GetAwaitingDispositionApi.json b/Server/Data/Tests/GetAwaitingDispositionApi.json new file mode 100644 index 0000000..882da38 --- /dev/null +++ b/Server/Data/Tests/GetAwaitingDispositionApi.json @@ -0,0 +1,1742 @@ +[ + { + "PK": "6_SP101_20-569514-5008_8IN_IFX_ROTR_20230116_1605_2023-01-16_16;16;20;943_25", + "Title": "SP101_20-569514-5008_8IN_IFX_ROTR_20230116_1605_2023-01-16_16;16;20;943_25", + "ID": 9558, + "ToolTypeID": 6, + "ToolType": "TencorSP1", + "Tool": null, + "Reactor": "20", + "RDS": "569514", + "PSN": "5008", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T16:16:52.617", + "Expiration": "2023-01-16T22:16:52.617" + }, + { + "PK": "3_TENCOR2_64-568840-4327_202301161616165376_1", + "Title": "TENCOR2_64-568840-4327_202301161616165376_1", + "ID": 373004, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "64", + "RDS": "568840", + "PSN": "4327", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T16:16:38.46", + "Expiration": "2023-01-16T22:16:38.46" + }, + { + "PK": "3_TENCOR3_33-570228-5117_202301161610096624_1", + "Title": "TENCOR3_33-570228-5117_202301161610096624_1", + "ID": 373003, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "33", + "RDS": "570228", + "PSN": "5117", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T16:10:24.847", + "Expiration": "2023-01-16T22:10:24.847" + }, + { + "PK": "3_TENCOR2_32-569874-4830_202301161608473837_1", + "Title": "TENCOR2_32-569874-4830_202301161608473837_1", + "ID": 373002, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "32", + "RDS": "569874", + "PSN": "4830", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T16:09:03.797", + "Expiration": "2023-01-16T22:09:03.797" + }, + { + "PK": "5_StratusBioRad__569249__202301161602577165_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569249__202301161602577165_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250994, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "49", + "RDS": "569249", + "PSN": "4542", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T16:03:10.617", + "Expiration": "2023-01-16T22:03:10.617" + }, + { + "PK": "3_TENCOR2_59-567487-4678_202301161600268720_1", + "Title": "TENCOR2_59-567487-4678_202301161600268720_1", + "ID": 373001, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "59", + "RDS": "567487", + "PSN": "4678", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T16:00:42.403", + "Expiration": "2023-01-16T22:00:42.403" + }, + { + "PK": "3_TENCOR1_21-569937-4626_202301161559472691_1", + "Title": "TENCOR1_21-569937-4626_202301161559472691_1", + "ID": 373000, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "21", + "RDS": "569937", + "PSN": "4626", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T16:00:07.6", + "Expiration": "2023-01-16T22:00:07.6" + }, + { + "PK": "5_StratusBioRad__567958__202301161559093298_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__567958__202301161559093298_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250993, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "60", + "RDS": "567958", + "PSN": "4812", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:59:23.233", + "Expiration": "2023-01-16T21:59:23.233" + }, + { + "PK": "3_TENCOR2_61-569360-4634_202301161551386272_1", + "Title": "TENCOR2_61-569360-4634_202301161551386272_1", + "ID": 372999, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "61", + "RDS": "569360", + "PSN": "4634", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T15:52:00.317", + "Expiration": "2023-01-16T21:52:00.317" + }, + { + "PK": "5_StratusBioRad__569997__202301161548214641_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569997__202301161548214641_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250992, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "77", + "RDS": "569997", + "PSN": "5008", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:48:33.493", + "Expiration": "2023-01-16T21:48:33.493" + }, + { + "PK": "5_StratusBioRad__570217__202301161545395447_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570217__202301161545395447_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250991, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "55", + "RDS": "570217", + "PSN": "5117", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:45:51.067", + "Expiration": "2023-01-16T21:45:51.067" + }, + { + "PK": "1_Bio-Rad QS400MEPI_74-570286-5117.1_202301161544206480_3.4466096_Point-1", + "Title": "Bio-Rad QS400MEPI_74-570286-5117.1_202301161544206480_3.4466096_Point-1", + "ID": 314922, + "ToolTypeID": 1, + "ToolType": "BioRad", + "Tool": "BIORAD3", + "Reactor": "74", + "RDS": "570286", + "PSN": "5117", + "Layer": "1", + "Zone": "", + "InsertDate": "2023-01-16T15:44:40.533", + "Expiration": "2023-01-16T21:44:40.533" + }, + { + "PK": "5_StratusBioRad__569995__202301161541122144_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569995__202301161541122144_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250990, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "72", + "RDS": "569995", + "PSN": "4830", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:41:31.187", + "Expiration": "2023-01-16T21:41:31.187" + }, + { + "PK": "3_TENCOR3_39-570180-4789_202301161540188352_25", + "Title": "TENCOR3_39-570180-4789_202301161540188352_25", + "ID": 372998, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "39", + "RDS": "570180", + "PSN": "4789", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T15:40:38.25", + "Expiration": "2023-01-16T21:40:38.25" + }, + { + "PK": "5_StratusBioRad__570206__202301161538455382_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570206__202301161538455382_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250989, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "30", + "RDS": "570206", + "PSN": "5117", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:39:05.063", + "Expiration": "2023-01-16T21:39:05.063" + }, + { + "PK": "5_StratusBioRad__570328__202301161537148745_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570328__202301161537148745_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250988, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "35", + "RDS": "570328", + "PSN": "5117", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:37:27.61", + "Expiration": "2023-01-16T21:37:27.61" + }, + { + "PK": "5_StratusBioRad__570473__202301161534543714_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570473__202301161534543714_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250987, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "41", + "RDS": "570473", + "PSN": "5065", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:35:17.613", + "Expiration": "2023-01-16T21:35:17.613" + }, + { + "PK": "5_StratusBioRad__569437__202301161531120617_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569437__202301161531120617_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250986, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "70", + "RDS": "569437", + "PSN": "5095", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:31:30.033", + "Expiration": "2023-01-16T21:31:30.033" + }, + { + "PK": "2_204.01;1;0.0;2290.5140;-1.2_Point-1", + "Title": "204.01;1;0.0;2290.5140;-1.2_Point-1", + "ID": 192786, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T15:29:42.38", + "Expiration": "2023-01-16T21:29:42.38" + }, + { + "PK": "5_StratusBioRad__570520__202301161529273860_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570520__202301161529273860_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250985, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "68", + "RDS": "570520", + "PSN": "4848", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:29:36.33", + "Expiration": "2023-01-16T21:29:36.33" + }, + { + "PK": "3_TENCOR3_72-569995-4830_202301161528351284_1", + "Title": "TENCOR3_72-569995-4830_202301161528351284_1", + "ID": 372997, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "72", + "RDS": "569995", + "PSN": "4830", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T15:28:59.73", + "Expiration": "2023-01-16T21:28:59.73" + }, + { + "PK": "2_293.58;1;0.0;2751.1800;1.9_Point-1", + "Title": "293.58;1;0.0;2751.1800;1.9_Point-1", + "ID": 192785, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T15:28:21.197", + "Expiration": "2023-01-16T21:28:21.197" + }, + { + "PK": "5_StratusBioRad__570284__202301161527561636_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570284__202301161527561636_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250984, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "74", + "RDS": "570284", + "PSN": "5117", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:28:15.12", + "Expiration": "2023-01-16T21:28:15.12" + }, + { + "PK": "2_150.69;1;0.0;1854.0030;1.3_Point-1", + "Title": "150.69;1;0.0;1854.0030;1.3_Point-1", + "ID": 192784, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T15:27:16.18", + "Expiration": "2023-01-16T21:27:16.18" + }, + { + "PK": "5_StratusBioRad__570336__202301161526247256_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570336__202301161526247256_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250983, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "36", + "RDS": "570336", + "PSN": "5117", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:26:37.653", + "Expiration": "2023-01-16T21:26:37.653" + }, + { + "PK": "2_125.12;1;0.0;1630.5160;0.0_Point-1", + "Title": "125.12;1;0.0;1630.5160;0.0_Point-1", + "ID": 192783, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T15:26:11.2", + "Expiration": "2023-01-16T21:26:11.2" + }, + { + "PK": "2_129.12;1;0.0;1671.8390;-0.4_Point-1", + "Title": "129.12;1;0.0;1671.8390;-0.4_Point-1", + "ID": 192782, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T15:25:11.953", + "Expiration": "2023-01-16T21:25:11.953" + }, + { + "PK": "2_61.15;1;0.0;1073.2020;-1.3_Point-1", + "Title": "61.15;1;0.0;1073.2020;-1.3_Point-1", + "ID": 192781, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T15:24:22.23", + "Expiration": "2023-01-16T21:24:22.23" + }, + { + "PK": "2_142.75;1;0.0;1778.5370;-0.3_Point-1", + "Title": "142.75;1;0.0;1778.5370;-0.3_Point-1", + "ID": 192780, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T15:23:12.453", + "Expiration": "2023-01-16T21:23:12.453" + }, + { + "PK": "5_StratusBioRad__569551__202301161521008079_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569551__202301161521008079_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250982, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "25", + "RDS": "569551", + "PSN": "4626", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T15:21:13.003", + "Expiration": "2023-01-16T21:21:13.003" + }, + { + "PK": "2_334.81;1;0.0;3724.1880;1.4_Point-1", + "Title": "334.81;1;0.0;3724.1880;1.4_Point-1", + "ID": 192779, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T15:21:02.5", + "Expiration": "2023-01-16T21:21:02.5" + }, + { + "PK": "2_183.03;1;0.0;2137.4030;-0.9_Point-1", + "Title": "183.03;1;0.0;2137.4030;-0.9_Point-1", + "ID": 192778, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T15:20:13.797", + "Expiration": "2023-01-16T21:20:13.797" + }, + { + "PK": "2_281.58;1;0.0;2707.3310;1.5_Point-1", + "Title": "281.58;1;0.0;2707.3310;1.5_Point-1", + "ID": 192777, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T15:19:08.81", + "Expiration": "2023-01-16T21:19:08.81" + }, + { + "PK": "3_TENCOR2_77-569997-5008_202301161500266955_1", + "Title": "TENCOR2_77-569997-5008_202301161500266955_1", + "ID": 372992, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "77", + "RDS": "569997", + "PSN": "5008", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T15:00:50.38", + "Expiration": "2023-01-16T21:00:50.38" + }, + { + "PK": "4_17.075;0.063_Point-1", + "Title": "17.075;0.063_Point-1", + "ID": 142041, + "ToolTypeID": 4, + "ToolType": "MercuryProbe", + "Tool": "HGCV2", + "Reactor": "44", + "RDS": "570835", + "PSN": "5159", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T14:51:35.7", + "Expiration": "2023-01-16T20:51:35.7" + }, + { + "PK": "3_TENCOR3_55-570217-5117_202301161450477986_1", + "Title": "TENCOR3_55-570217-5117_202301161450477986_1", + "ID": 372991, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "55", + "RDS": "570217", + "PSN": "5117", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T14:51:05.56", + "Expiration": "2023-01-16T20:51:05.56" + }, + { + "PK": "3_TENCOR1_25-569552-4626_202301161449528957_1", + "Title": "TENCOR1_25-569552-4626_202301161449528957_1", + "ID": 372990, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "25", + "RDS": "569552", + "PSN": "4626", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T14:50:16.923", + "Expiration": "2023-01-16T20:50:16.923" + }, + { + "PK": "3_TENCOR3_68-570520-4848_202301161438008794_1", + "Title": "TENCOR3_68-570520-4848_202301161438008794_1", + "ID": 372988, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "68", + "RDS": "570520", + "PSN": "4848", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T14:38:22.053", + "Expiration": "2023-01-16T20:38:22.053" + }, + { + "PK": "3_TENCOR3_74-570284-5117_202301161432283765_1", + "Title": "TENCOR3_74-570284-5117_202301161432283765_1", + "ID": 372987, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "74", + "RDS": "570284", + "PSN": "5117", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T14:32:57.237", + "Expiration": "2023-01-16T20:32:57.237" + }, + { + "PK": "3_TENCOR1_30-570206-5117_202301161419062921_1", + "Title": "TENCOR1_30-570206-5117_202301161419062921_1", + "ID": 372985, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "30", + "RDS": "570206", + "PSN": "5117", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T14:20:05.84", + "Expiration": "2023-01-16T20:20:05.84" + }, + { + "PK": "3_TENCOR3_70-569437-5095_202301161419092720_1", + "Title": "TENCOR3_70-569437-5095_202301161419092720_1", + "ID": 372984, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "70", + "RDS": "569437", + "PSN": "5095", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T14:19:25.037", + "Expiration": "2023-01-16T20:19:25.037" + }, + { + "PK": "3_TENCOR3_46-570833-5159_202301161415555962_1", + "Title": "TENCOR3_46-570833-5159_202301161415555962_1", + "ID": 372983, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "46", + "RDS": "570833", + "PSN": "5159", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T14:16:10.093", + "Expiration": "2023-01-16T20:16:10.093" + }, + { + "PK": "5_StratusBioRad__570031__202301161414390407_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570031__202301161414390407_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250981, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "73", + "RDS": "570031", + "PSN": "5117", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T14:14:53.287", + "Expiration": "2023-01-16T20:14:53.287" + }, + { + "PK": "3_TENCOR3_42-570834-5159_202301161411262177_1", + "Title": "TENCOR3_42-570834-5159_202301161411262177_1", + "ID": 372982, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "42", + "RDS": "570834", + "PSN": "5159", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T14:11:50.31", + "Expiration": "2023-01-16T20:11:50.31" + }, + { + "PK": "3_TENCOR1_35-570328-5117_202301161406154857_1", + "Title": "TENCOR1_35-570328-5117_202301161406154857_1", + "ID": 372981, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "35", + "RDS": "570328", + "PSN": "5117", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T14:06:41.693", + "Expiration": "2023-01-16T20:06:41.693" + }, + { + "PK": "5_StratusBioRad__569202__202301161403196642_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569202__202301161403196642_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250980, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "23", + "RDS": "569202", + "PSN": "4628", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T14:03:31.04", + "Expiration": "2023-01-16T20:03:31.04" + }, + { + "PK": "5_StratusBioRad__569622__202301161400570344_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569622__202301161400570344_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250979, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "38", + "RDS": "569622", + "PSN": "4774", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T14:01:21.09", + "Expiration": "2023-01-16T20:01:21.09" + }, + { + "PK": "5_StratusBioRad__569936__202301161357181538_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569936__202301161357181538_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250978, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "21", + "RDS": "569936", + "PSN": "4626", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:57:33.677", + "Expiration": "2023-01-16T19:57:33.677" + }, + { + "PK": "1_Bio-Rad QS400MEPI_28-FQA1_202301161355080965_3.3093704_Point-1", + "Title": "Bio-Rad QS400MEPI_28-FQA1_202301161355080965_3.3093704_Point-1", + "ID": 314907, + "ToolTypeID": 1, + "ToolType": "BioRad", + "Tool": "BIORAD3", + "Reactor": "28", + "RDS": "0", + "PSN": "", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:55:18.293", + "Expiration": "2023-01-16T19:55:18.293" + }, + { + "PK": "1_Bio-Rad QS400MEPI_28-FQA_202301161354351593_3.325218_Point-1", + "Title": "Bio-Rad QS400MEPI_28-FQA_202301161354351593_3.325218_Point-1", + "ID": 314906, + "ToolTypeID": 1, + "ToolType": "BioRad", + "Tool": "BIORAD3", + "Reactor": "28", + "RDS": "0", + "PSN": "", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:54:45.817", + "Expiration": "2023-01-16T19:54:45.817" + }, + { + "PK": "5_StratusBioRad__567328__202301161354068094_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__567328__202301161354068094_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250977, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "75", + "RDS": "567328", + "PSN": "5130", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:54:18.74", + "Expiration": "2023-01-16T19:54:18.74" + }, + { + "PK": "5_StratusBioRad__568991__202301161352336760_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__568991__202301161352336760_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250976, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "31", + "RDS": "568991", + "PSN": "5296", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:52:57.49", + "Expiration": "2023-01-16T19:52:57.49" + }, + { + "PK": "6_SP101_75-567328-5130_8IN_MISFIT_20230116_1332_2023-01-16_13;42;38;100_01", + "Title": "SP101_75-567328-5130_8IN_MISFIT_20230116_1332_2023-01-16_13;42;38;100_01", + "ID": 9557, + "ToolTypeID": 6, + "ToolType": "TencorSP1", + "Tool": null, + "Reactor": "75", + "RDS": "567328", + "PSN": "5130", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:43:06.673", + "Expiration": "2023-01-16T19:43:06.673" + }, + { + "PK": "5_StratusBioRad__569723__202301161342011385_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569723__202301161342011385_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250975, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "45", + "RDS": "569723", + "PSN": "5117", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:42:24.03", + "Expiration": "2023-01-16T19:42:24.03" + }, + { + "PK": "3_TENCOR1_31-568991-5296_202301161337421409_1", + "Title": "TENCOR1_31-568991-5296_202301161337421409_1", + "ID": 372978, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "31", + "RDS": "568991", + "PSN": "5296", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T13:37:59.77", + "Expiration": "2023-01-16T19:37:59.77" + }, + { + "PK": "5_StratusBioRad__560261__202301161336050802_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__560261__202301161336050802_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250974, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "65", + "RDS": "560261", + "PSN": "5227", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:36:26.61", + "Expiration": "2023-01-16T19:36:26.61" + }, + { + "PK": "3_TENCOR2_41-570473-5065_202301161336003133_1", + "Title": "TENCOR2_41-570473-5065_202301161336003133_1", + "ID": 372977, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "41", + "RDS": "570473", + "PSN": "5065", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T13:36:22.357", + "Expiration": "2023-01-16T19:36:22.357" + }, + { + "PK": "3_TENCOR1_36-570336-5117_202301161332130828_1", + "Title": "TENCOR1_36-570336-5117_202301161332130828_1", + "ID": 372975, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "36", + "RDS": "570336", + "PSN": "5117", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T13:32:34.947", + "Expiration": "2023-01-16T19:32:34.947" + }, + { + "PK": "5_StratusBioRad__569436__202301161328566182_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569436__202301161328566182_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250973, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "70", + "RDS": "569436", + "PSN": "5095", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:29:08", + "Expiration": "2023-01-16T19:29:08" + }, + { + "PK": "5_StratusBioRad__570519__202301161327198038_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570519__202301161327198038_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250972, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "68", + "RDS": "570519", + "PSN": "4848", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:27:30.5", + "Expiration": "2023-01-16T19:27:30.5" + }, + { + "PK": "5_StratusBioRad__570227__202301161325497643_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570227__202301161325497643_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250971, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "33", + "RDS": "570227", + "PSN": "5117", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:26:09.213", + "Expiration": "2023-01-16T19:26:09.213" + }, + { + "PK": "3_TENCOR2_65-560261-5227_202301161325356267_7", + "Title": "TENCOR2_65-560261-5227_202301161325356267_7", + "ID": 372974, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "65", + "RDS": "560261", + "PSN": "5227", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T13:25:48.867", + "Expiration": "2023-01-16T19:25:48.867" + }, + { + "PK": "5_StratusBioRad__569873__202301161324180082_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569873__202301161324180082_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250970, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "32", + "RDS": "569873", + "PSN": "4830", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:24:31.777", + "Expiration": "2023-01-16T19:24:31.777" + }, + { + "PK": "5_StratusBioRad__O171722.1.8__202301161322371715_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__O171722.1.8__202301161322371715_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250969, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "54", + "RDS": "570791", + "PSN": "4445", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:22:54.363", + "Expiration": "2023-01-16T19:22:54.363" + }, + { + "PK": "5_StratusBioRad__570205__202301161321078725_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570205__202301161321078725_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250968, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "30", + "RDS": "570205", + "PSN": "5117", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:21:16.887", + "Expiration": "2023-01-16T19:21:16.887" + }, + { + "PK": "5_StratusBioRad__569672__202301161319376247_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569672__202301161319376247_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250967, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "56", + "RDS": "569672", + "PSN": "5008", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:19:55.697", + "Expiration": "2023-01-16T19:19:55.697" + }, + { + "PK": "5_StratusBioRad__569656__202301161317281365_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569656__202301161317281365_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250966, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "53", + "RDS": "569656", + "PSN": "4812", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:17:45.74", + "Expiration": "2023-01-16T19:17:45.74" + }, + { + "PK": "5_StratusBioRad__568835__202301161315567097_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__568835__202301161315567097_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250965, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "43", + "RDS": "568835", + "PSN": "4622", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:16:08.267", + "Expiration": "2023-01-16T19:16:08.267" + }, + { + "PK": "5_StratusBioRad__569994__202301161314089001_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569994__202301161314089001_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250964, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "72", + "RDS": "569994", + "PSN": "4830", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:14:30.77", + "Expiration": "2023-01-16T19:14:30.77" + }, + { + "PK": "5_StratusBioRad__567959__202301161312315569_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__567959__202301161312315569_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250963, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "60", + "RDS": "567959", + "PSN": "4812", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:12:53.24", + "Expiration": "2023-01-16T19:12:53.24" + }, + { + "PK": "3_TENCOR2_40-570832-5159_202301161310598695_1", + "Title": "TENCOR2_40-570832-5159_202301161310598695_1", + "ID": 372971, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "40", + "RDS": "570832", + "PSN": "5159", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T13:11:40.86", + "Expiration": "2023-01-16T19:11:40.86" + }, + { + "PK": "3_TENCOR3_45-569723-5117_202301161310355743_10", + "Title": "TENCOR3_45-569723-5117_202301161310355743_10", + "ID": 372970, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "45", + "RDS": "569723", + "PSN": "5117", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T13:10:55.523", + "Expiration": "2023-01-16T19:10:55.523" + }, + { + "PK": "5_StratusBioRad__569513__202301161308396566_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569513__202301161308396566_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250962, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "20", + "RDS": "569513", + "PSN": "5008", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T13:08:49.557", + "Expiration": "2023-01-16T19:08:49.557" + }, + { + "PK": "5_StratusBioRad__569670__202301161255412935_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569670__202301161255412935_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250961, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "56", + "RDS": "569670", + "PSN": "5008", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T12:56:06.15", + "Expiration": "2023-01-16T18:56:06.15" + }, + { + "PK": "2_142.44;1;0.0;1776.4080;1.2_Point-1", + "Title": "142.44;1;0.0;1776.4080;1.2_Point-1", + "ID": 192758, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:49:42.77", + "Expiration": "2023-01-16T18:49:42.77" + }, + { + "PK": "2_130.56;1;0.0;1672.7360;1.5_Point-1", + "Title": "130.56;1;0.0;1672.7360;1.5_Point-1", + "ID": 192757, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:48:37.833", + "Expiration": "2023-01-16T18:48:37.833" + }, + { + "PK": "2_279.45;1;0.0;2704.5370;-1.4_Point-1", + "Title": "279.45;1;0.0;2704.5370;-1.4_Point-1", + "ID": 192756, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:47:16.59", + "Expiration": "2023-01-16T18:47:16.59" + }, + { + "PK": "2_181.19;1;0.0;2136.5350;-0.1_Point-1", + "Title": "181.19;1;0.0;2136.5350;-0.1_Point-1", + "ID": 192755, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:46:11.53", + "Expiration": "2023-01-16T18:46:11.53" + }, + { + "PK": "2_340.74;1;0.0;3714.6980;0.1_Point-1", + "Title": "340.74;1;0.0;3714.6980;0.1_Point-1", + "ID": 192754, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:44:50.373", + "Expiration": "2023-01-16T18:44:50.373" + }, + { + "PK": "2_200.27;1;0.0;2291.9900;-0.5_Point-1", + "Title": "200.27;1;0.0;2291.9900;-0.5_Point-1", + "ID": 192753, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:43:45.33", + "Expiration": "2023-01-16T18:43:45.33" + }, + { + "PK": "2_146.22;1;0.0;1856.1270;-0.4_Point-1", + "Title": "146.22;1;0.0;1856.1270;-0.4_Point-1", + "ID": 192751, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:41:35.397", + "Expiration": "2023-01-16T18:41:35.397" + }, + { + "PK": "2_123.99;1;0.0;1630.9990;-0.6_Point-1", + "Title": "123.99;1;0.0;1630.9990;-0.6_Point-1", + "ID": 192750, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:40:46.647", + "Expiration": "2023-01-16T18:40:46.647" + }, + { + "PK": "2_61.25;1;0.0;1073.6690;-0.2_Point-1", + "Title": "61.25;1;0.0;1073.6690;-0.2_Point-1", + "ID": 192749, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:39:41.64", + "Expiration": "2023-01-16T18:39:41.64" + }, + { + "PK": "2_290.90;1;0.0;2754.6210;-0.4_Point-1", + "Title": "290.90;1;0.0;2754.6210;-0.4_Point-1", + "ID": 192748, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:38:04.173", + "Expiration": "2023-01-16T18:38:04.173" + }, + { + "PK": "2_130.39;1;0.0;1673.3280;1.7_Point-1", + "Title": "130.39;1;0.0;1673.3280;1.7_Point-1", + "ID": 192747, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:36:10.473", + "Expiration": "2023-01-16T18:36:10.473" + }, + { + "PK": "2_302.16;1;0.0;3715.6910;-1.4_Point-1", + "Title": "302.16;1;0.0;3715.6910;-1.4_Point-1", + "ID": 192746, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:35:05.47", + "Expiration": "2023-01-16T18:35:05.47" + }, + { + "PK": "2_202.56;1;0.0;2289.6090;-1.8_Point-1", + "Title": "202.56;1;0.0;2289.6090;-1.8_Point-1", + "ID": 192745, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:34:16.77", + "Expiration": "2023-01-16T18:34:16.77" + }, + { + "PK": "2_149.53;1;0.0;1855.6760;-0.6_Point-1", + "Title": "149.53;1;0.0;1855.6760;-0.6_Point-1", + "ID": 192744, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:33:44.267", + "Expiration": "2023-01-16T18:33:44.267" + }, + { + "PK": "2_124.81;1;0.0;1630.6560;-0.2_Point-1", + "Title": "124.81;1;0.0;1630.6560;-0.2_Point-1", + "ID": 192743, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:32:39.267", + "Expiration": "2023-01-16T18:32:39.267" + }, + { + "PK": "1_Bio-Rad QS400MEPI_62-568108-5040_202301161232074358_3.2886743_Point-1", + "Title": "Bio-Rad QS400MEPI_62-568108-5040_202301161232074358_3.2886743_Point-1", + "ID": 314892, + "ToolTypeID": 1, + "ToolType": "BioRad", + "Tool": "BIORAD3", + "Reactor": "62", + "RDS": "568108", + "PSN": "5040", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T12:32:27.787", + "Expiration": "2023-01-16T18:32:27.787" + }, + { + "PK": "2_62.09;1;0.0;1073.2930;-0.8_Point-1", + "Title": "62.09;1;0.0;1073.2930;-0.8_Point-1", + "ID": 192742, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:31:34.28", + "Expiration": "2023-01-16T18:31:34.28" + }, + { + "PK": "2_288.27;1;0.0;2755.0530;-1.9_Point-1", + "Title": "288.27;1;0.0;2755.0530;-1.9_Point-1", + "ID": 192741, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "", + "RDS": "Special", + "PSN": "", + "Layer": "", + "Zone": null, + "InsertDate": "2023-01-16T12:30:45.61", + "Expiration": "2023-01-16T18:30:45.61" + }, + { + "PK": "1_Bio-Rad QS400MEPI_62-568108-5040_202301161229395054_3.2742103_Point-1", + "Title": "Bio-Rad QS400MEPI_62-568108-5040_202301161229395054_3.2742103_Point-1", + "ID": 314891, + "ToolTypeID": 1, + "ToolType": "BioRad", + "Tool": "BIORAD2", + "Reactor": "62", + "RDS": "568108", + "PSN": "5040", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T12:30:01.64", + "Expiration": "2023-01-16T18:30:01.64" + }, + { + "PK": "1_Bio-Rad QS400MEPI_62-568108-5040_202301161227485778_3.2955959_Point-1", + "Title": "Bio-Rad QS400MEPI_62-568108-5040_202301161227485778_3.2955959_Point-1", + "ID": 314890, + "ToolTypeID": 1, + "ToolType": "BioRad", + "Tool": "BIORAD2", + "Reactor": "62", + "RDS": "568108", + "PSN": "5040", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T12:28:07.977", + "Expiration": "2023-01-16T18:28:07.977" + }, + { + "PK": "1_Bio-Rad QS400MEPI_62-568108-5040_202301161225566213_3.2831467_Point-1", + "Title": "Bio-Rad QS400MEPI_62-568108-5040_202301161225566213_3.2831467_Point-1", + "ID": 314889, + "ToolTypeID": 1, + "ToolType": "BioRad", + "Tool": "BIORAD2", + "Reactor": "62", + "RDS": "568108", + "PSN": "5040", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T12:26:14.277", + "Expiration": "2023-01-16T18:26:14.277" + }, + { + "PK": "1_Bio-Rad QS400MEPI_62-568108-5040_202301161224066571_3.2977094_Point-1", + "Title": "Bio-Rad QS400MEPI_62-568108-5040_202301161224066571_3.2977094_Point-1", + "ID": 314888, + "ToolTypeID": 1, + "ToolType": "BioRad", + "Tool": "BIORAD2", + "Reactor": "62", + "RDS": "568108", + "PSN": "5040", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T12:24:20.63", + "Expiration": "2023-01-16T18:24:20.63" + }, + { + "PK": "3_TENCOR1_33-570227-5117_202301161218130056_1", + "Title": "TENCOR1_33-570227-5117_202301161218130056_1", + "ID": 372966, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "33", + "RDS": "570227", + "PSN": "5117", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T12:18:40.777", + "Expiration": "2023-01-16T18:18:40.777" + }, + { + "PK": "3_TENCOR2_62-567720-5040_202301161210544621_1", + "Title": "TENCOR2_62-567720-5040_202301161210544621_1", + "ID": 372965, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "62", + "RDS": "567720", + "PSN": "5040", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T12:11:41.627", + "Expiration": "2023-01-16T18:11:41.627" + }, + { + "PK": "3_TENCOR3_79-569449-5038_202301161210473386_1", + "Title": "TENCOR3_79-569449-5038_202301161210473386_1", + "ID": 372964, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "79", + "RDS": "569449", + "PSN": "5038", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T12:11:05.89", + "Expiration": "2023-01-16T18:11:05.89" + }, + { + "PK": "3_TENCOR1_32-569873-4830_202301161147552648_25", + "Title": "TENCOR1_32-569873-4830_202301161147552648_25", + "ID": 372961, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "32", + "RDS": "569873", + "PSN": "4830", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T11:48:21.47", + "Expiration": "2023-01-16T17:48:21.47" + }, + { + "PK": "3_TENCOR3_70-569436-5095_202301161142075472_1", + "Title": "TENCOR3_70-569436-5095_202301161142075472_1", + "ID": 372960, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "70", + "RDS": "569436", + "PSN": "5095", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T11:42:24.1", + "Expiration": "2023-01-16T17:42:24.1" + }, + { + "PK": "3_TENCOR1_68-570519-4848_202301161134598699_1", + "Title": "TENCOR1_68-570519-4848_202301161134598699_1", + "ID": 372959, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "68", + "RDS": "570519", + "PSN": "4848", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T11:36:10.057", + "Expiration": "2023-01-16T17:36:10.057" + }, + { + "PK": "3_TENCOR2_72-569994-4830_202301161121347260_1", + "Title": "TENCOR2_72-569994-4830_202301161121347260_1", + "ID": 372957, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "72", + "RDS": "569994", + "PSN": "4830", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T11:21:49.55", + "Expiration": "2023-01-16T17:21:49.55" + }, + { + "PK": "6_SP101_21-569936-4626_8IN_THIN ROTR_20230116_1050_2023-01-16_10;59;54;436_25", + "Title": "SP101_21-569936-4626_8IN_THIN ROTR_20230116_1050_2023-01-16_10;59;54;436_25", + "ID": 9556, + "ToolTypeID": 6, + "ToolType": "TencorSP1", + "Tool": null, + "Reactor": "21", + "RDS": "569936", + "PSN": "4626", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T11:00:24.803", + "Expiration": "2023-01-16T17:00:24.803" + }, + { + "PK": "3_TENCOR3_54-570815-4445_202301161059481509_11", + "Title": "TENCOR3_54-570815-4445_202301161059481509_11", + "ID": 372954, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "54", + "RDS": "570815", + "PSN": "4445", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T11:00:10.267", + "Expiration": "2023-01-16T17:00:10.267" + }, + { + "PK": "3_TENCOR3_43-568835-4622_202301161052377334_1", + "Title": "TENCOR3_43-568835-4622_202301161052377334_1", + "ID": 372952, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "43", + "RDS": "568835", + "PSN": "4622", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T10:52:51.503", + "Expiration": "2023-01-16T16:52:51.503" + }, + { + "PK": "3_TENCOR2_30-570205-5117_202301161048114805_1", + "Title": "TENCOR2_30-570205-5117_202301161048114805_1", + "ID": 372951, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "30", + "RDS": "570205", + "PSN": "5117", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T10:48:31.633", + "Expiration": "2023-01-16T16:48:31.633" + }, + { + "PK": "3_TENCOR2_56-569672-5008_202301161036569631_1", + "Title": "TENCOR2_56-569672-5008_202301161036569631_1", + "ID": 372950, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "56", + "RDS": "569672", + "PSN": "5008", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T10:37:09.407", + "Expiration": "2023-01-16T16:37:09.407" + }, + { + "PK": "2_4.05;1;95.0;2384.8500;270.0_Point-1", + "Title": "4.05;1;95.0;2384.8500;270.0_Point-1", + "ID": 192734, + "ToolTypeID": 2, + "ToolType": "CDE", + "Tool": null, + "Reactor": "22", + "RDS": "569245", + "PSN": "4458", + "Layer": "1", + "Zone": null, + "InsertDate": "2023-01-16T10:34:53.68", + "Expiration": "2023-01-16T16:34:53.68" + }, + { + "PK": "3_TENCOR3_53-569656-4812_202301161034029072_1", + "Title": "TENCOR3_53-569656-4812_202301161034029072_1", + "ID": 372949, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "53", + "RDS": "569656", + "PSN": "4812", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T10:34:27.02", + "Expiration": "2023-01-16T16:34:27.02" + }, + { + "PK": "5_StratusBioRad__569356__202301161033367179_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__569356__202301161033367179_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250960, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "58", + "RDS": "569356", + "PSN": "5008", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T10:33:58.767", + "Expiration": "2023-01-16T16:33:58.767" + }, + { + "PK": "3_TENCOR1_20-569513-5008_202301161032418327_1", + "Title": "TENCOR1_20-569513-5008_202301161032418327_1", + "ID": 372948, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "20", + "RDS": "569513", + "PSN": "5008", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T10:33:05.797", + "Expiration": "2023-01-16T16:33:05.797" + }, + { + "PK": "5_StratusBioRad__570247__202301161031413897_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570247__202301161031413897_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250959, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "68", + "RDS": "570247", + "PSN": "4848", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T10:32:05.083", + "Expiration": "2023-01-16T16:32:05.083" + }, + { + "PK": "5_StratusBioRad__570216__202301161019572769_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__570216__202301161019572769_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250958, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "55", + "RDS": "570216", + "PSN": "5117", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T10:20:10.42", + "Expiration": "2023-01-16T16:20:10.42" + }, + { + "PK": "3_TENCOR1_22-569551-4626_202301161018257907_1", + "Title": "TENCOR1_22-569551-4626_202301161018257907_1", + "ID": 372947, + "ToolTypeID": 3, + "ToolType": "Tencor", + "Tool": null, + "Reactor": "22", + "RDS": "569551", + "PSN": "4626", + "Layer": null, + "Zone": null, + "InsertDate": "2023-01-16T10:18:44.943", + "Expiration": "2023-01-16T16:18:44.943" + }, + { + "PK": "5_StratusBioRad__568695__202301161017569770_Wafer-Wafer 1_Slot-1_Point-", + "Title": "StratusBioRad__568695__202301161017569770_Wafer-Wafer 1_Slot-1_Point-", + "ID": 250957, + "ToolTypeID": 5, + "ToolType": "StratusBioRad", + "Tool": null, + "Reactor": "64", + "RDS": "568695", + "PSN": "4327", + "Layer": "", + "Zone": "", + "InsertDate": "2023-01-16T10:18:16.7", + "Expiration": "2023-01-16T16:18:16.7" + } +] \ No newline at end of file diff --git a/Server/Data/Tests/GetBuildNumberAndGitCommitSevenApi.json b/Server/Data/Tests/GetBuildNumberAndGitCommitSevenApi.json new file mode 100644 index 0000000..100d6fb --- /dev/null +++ b/Server/Data/Tests/GetBuildNumberAndGitCommitSevenApi.json @@ -0,0 +1 @@ +1-1234567 \ No newline at end of file diff --git a/Server/Data/Tests/GetClientSettingsApi.json b/Server/Data/Tests/GetClientSettingsApi.json new file mode 100644 index 0000000..1bc592b --- /dev/null +++ b/Server/Data/Tests/GetClientSettingsApi.json @@ -0,0 +1 @@ +["remoteIpAddress"] \ No newline at end of file diff --git a/Server/Data/Tests/GetDataApi.json b/Server/Data/Tests/GetDataApi.json new file mode 100644 index 0000000..73d505c --- /dev/null +++ b/Server/Data/Tests/GetDataApi.json @@ -0,0 +1 @@ +{"Results":[{"InsertDate":"2019-09-12T16:02:17.297","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-10","AttachmentID":null,"Position":null,"Thickness":null,"ID":10},{"InsertDate":"2019-09-12T16:02:17.297","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-11","AttachmentID":null,"Position":null,"Thickness":null,"ID":11},{"InsertDate":"2019-09-12T16:02:17.3","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-12","AttachmentID":null,"Position":null,"Thickness":null,"ID":12},{"InsertDate":"2019-09-12T16:02:17.3","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-13","AttachmentID":null,"Position":null,"Thickness":null,"ID":13},{"InsertDate":"2019-09-12T16:02:17.3","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-14","AttachmentID":null,"Position":null,"Thickness":null,"ID":14},{"InsertDate":"2019-09-12T16:02:17.3","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-15","AttachmentID":null,"Position":null,"Thickness":null,"ID":15},{"InsertDate":"2019-09-12T16:02:17.3","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-16","AttachmentID":null,"Position":null,"Thickness":null,"ID":16},{"InsertDate":"2019-09-12T16:02:17.3","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-17","AttachmentID":null,"Position":null,"Thickness":null,"ID":17},{"InsertDate":"2019-09-12T16:02:17.3","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-18","AttachmentID":null,"Position":null,"Thickness":null,"ID":18},{"InsertDate":"2019-09-12T16:02:17.3","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-19","AttachmentID":null,"Position":null,"Thickness":null,"ID":19},{"InsertDate":"2019-09-12T16:02:17.303","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-20","AttachmentID":null,"Position":null,"Thickness":null,"ID":20},{"InsertDate":"2019-09-12T16:02:17.303","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-21","AttachmentID":null,"Position":null,"Thickness":null,"ID":21},{"InsertDate":"2019-09-12T16:02:17.303","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-22","AttachmentID":null,"Position":null,"Thickness":null,"ID":22},{"InsertDate":"2019-09-12T16:02:17.303","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-23","AttachmentID":null,"Position":null,"Thickness":null,"ID":23},{"InsertDate":"2019-09-12T16:02:17.303","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-24","AttachmentID":null,"Position":null,"Thickness":null,"ID":24},{"InsertDate":"2019-09-12T16:02:17.303","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-25","AttachmentID":null,"Position":null,"Thickness":null,"ID":25},{"InsertDate":"2019-09-12T16:02:17.303","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-26","AttachmentID":null,"Position":null,"Thickness":null,"ID":26},{"InsertDate":"2019-09-12T16:02:17.29","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-1","AttachmentID":null,"Position":"1","Thickness":"113.634","ID":1},{"InsertDate":"2019-09-12T16:02:17.29","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-2","AttachmentID":null,"Position":"2","Thickness":"113.849","ID":2},{"InsertDate":"2019-09-12T16:02:17.293","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-3","AttachmentID":null,"Position":"3","Thickness":"113.249","ID":3},{"InsertDate":"2019-09-12T16:02:17.293","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-4","AttachmentID":null,"Position":"4","Thickness":"114.618","ID":4},{"InsertDate":"2019-09-12T16:02:17.293","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-5","AttachmentID":null,"Position":"5","Thickness":"114.623","ID":5},{"InsertDate":"2019-09-12T16:02:17.293","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-6","AttachmentID":null,"Position":"6","Thickness":"116.469","ID":6},{"InsertDate":"2019-09-12T16:02:17.293","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-7","AttachmentID":null,"Position":"7","Thickness":"115.847","ID":7},{"InsertDate":"2019-09-12T16:02:17.297","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-8","AttachmentID":null,"Position":"8","Thickness":"114.904","ID":8},{"InsertDate":"2019-09-12T16:02:17.297","Run Header":"http://10.95.128.128/Lists/bioRad%20Run%20Header/DispForm.aspx?Title=Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648_Point-9","AttachmentID":null,"Position":"9","Thickness":"115.868","ID":9},{"InsertDate":null,"Run Header":null,"Title":null,"AttachmentID":null,"Position":"Average","Thickness":"39.7331","ID":-1},{"InsertDate":null,"Run Header":null,"Title":null,"AttachmentID":null,"Position":"Std Dev","Thickness":"55.6929","ID":-2}],"TotalRows":28} \ No newline at end of file diff --git a/Server/Data/Tests/GetExportDataApi.json b/Server/Data/Tests/GetExportDataApi.json new file mode 100644 index 0000000..a60dc1c --- /dev/null +++ b/Server/Data/Tests/GetExportDataApi.json @@ -0,0 +1 @@ +{"Results":[],"TotalRows":0} \ No newline at end of file diff --git a/Server/Data/Tests/GetHeaderFieldsApi.json b/Server/Data/Tests/GetHeaderFieldsApi.json new file mode 100644 index 0000000..bb8d5be --- /dev/null +++ b/Server/Data/Tests/GetHeaderFieldsApi.json @@ -0,0 +1,89 @@ +{ + "Results": [ + { + "Column": "ID", + "Value": "1" + }, + { + "Column": "InsertDate", + "Value": "9/12/2019 4:02:17 PM" + }, + { + "Column": "Title", + "Value": "Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648" + }, + { + "Column": "Recipe", + "Value": "6in_thick" + }, + { + "Column": "Date", + "Value": "9/12/2019 3:59:05 PM" + }, + { + "Column": "Operator", + "Value": "" + }, + { + "Column": "Batch", + "Value": "BIORAD #4" + }, + { + "Column": "Cassette", + "Value": "" + }, + { + "Column": "Wafer", + "Value": "99-999999-9999.1" + }, + { + "Column": "Mean Thickness", + "Value": "114.785" + }, + { + "Column": "RV Thickness", + "Value": "0.0000" + }, + { + "Column": "Status", + "Value": "PASS" + }, + { + "Column": "Std Dev", + "Value": "1.1047" + }, + { + "Column": "SentToMetrology", + "Value": "True" + }, + { + "Column": "SentToSPC", + "Value": "False" + }, + { + "Column": "Reactor", + "Value": "99" + }, + { + "Column": "RDS", + "Value": "999999" + }, + { + "Column": "PSN", + "Value": "9999" + }, + { + "Column": "Path", + "Value": "" + }, + { + "Column": "Layer", + "Value": "1" + }, + { + "Column": "Zone", + "Value": "" + } + ], + "TotalRows": 21 +} \ No newline at end of file diff --git a/Server/Data/Tests/GetHeaderTitlesApi.json b/Server/Data/Tests/GetHeaderTitlesApi.json new file mode 100644 index 0000000..af68671 --- /dev/null +++ b/Server/Data/Tests/GetHeaderTitlesApi.json @@ -0,0 +1,21 @@ +{ + "Results": [ + { + "ID": 2, + "InsertDate": "2019-09-12T16:24:18.617", + "AttachmentID": "00000000-0000-0000-0000-000000000000", + "Title": "Bio-RadQS400MEPI_99-999999-9999.1_201909121623333616", + "Recipe": null, + "Date": "2019-09-12T16:23:43" + }, + { + "ID": 1, + "InsertDate": "2019-09-12T16:02:17.253", + "AttachmentID": "00000000-0000-0000-0000-000000000000", + "Title": "Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648", + "Recipe": null, + "Date": "2019-09-12T15:59:05" + } + ], + "TotalRows": 2 +} \ No newline at end of file diff --git a/Server/Data/Tests/GetHeadersApi.json b/Server/Data/Tests/GetHeadersApi.json new file mode 100644 index 0000000..08b9090 --- /dev/null +++ b/Server/Data/Tests/GetHeadersApi.json @@ -0,0 +1 @@ +{"Results":[{"Batch":"BIORAD #4","Cassette":"","Date":"2019-09-12T16:23:43","ID":2,"InsertDate":"2019-09-12T16:24:18.617","Layer":"1","Mean Thickness":"114.785","Operator":"","Path":null,"PSN":"9999","RDS":"999999","Reactor":"99","Recipe":"6in_thick","RV Thickness":"0.0000","SentToMetrology":false,"SentToSPC":false,"Status":"PASS","Std Dev":"1.1047","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121623333616","Wafer":"99-999999-9999.1","Zone":null,"AttachmentID":null},{"Batch":"BIORAD #4","Cassette":"","Date":"2019-09-12T15:59:05","ID":1,"InsertDate":"2019-09-12T16:02:17.253","Layer":"1","Mean Thickness":"114.785","Operator":"","Path":null,"PSN":"9999","RDS":"999999","Reactor":"99","Recipe":"6in_thick","RV Thickness":"0.0000","SentToMetrology":true,"SentToSPC":false,"Status":"PASS","Std Dev":"1.1047","Title":"Bio-RadQS400MEPI_99-999999-9999.1_201909121559040648","Wafer":"99-999999-9999.1","Zone":null,"AttachmentID":null}],"TotalRows":2} \ No newline at end of file diff --git a/Server/Data/Tests/GetIpAddressApi.json b/Server/Data/Tests/GetIpAddressApi.json new file mode 100644 index 0000000..e69de29 diff --git a/Server/Data/Tests/GetPinnedTableApi.json b/Server/Data/Tests/GetPinnedTableApi.json new file mode 100644 index 0000000..5a54c25 --- /dev/null +++ b/Server/Data/Tests/GetPinnedTableApi.json @@ -0,0 +1,6 @@ +{ + { + "Results": [], + "TotalRows": 0 + } +} \ No newline at end of file diff --git a/Server/Data/Tests/GetToolTypeMetadataApi.json b/Server/Data/Tests/GetToolTypeMetadataApi.json new file mode 100644 index 0000000..72d6b0b --- /dev/null +++ b/Server/Data/Tests/GetToolTypeMetadataApi.json @@ -0,0 +1,334 @@ +{ + "Results": { + "ToolType": { + "ID": 1, + "ToolTypeName": "BioRad", + "HasHeaderAttachments": false, + "HasDataAttachments": false, + "HeaderTableName": "BioRadRunHeader", + "DataTableName": "BioRadRunData", + "ExportSPName": "Export_BioRad", + "HeaderGridAttributes": null, + "DataGridAttributes": null, + "DataGridSortBy": "LEN(Position), Position", + "DataGridStatsColumn": "Thickness", + "DataGridStatsStdDevType": " ", + "DisplayHeaderAttachment": null, + "DisplayDataAttachment": null, + "OIExportSPName": "OIExport_BioRad" + }, + "Metadata": [ + { + "ToolTypeID": 1, + "Header": false, + "ApiName": null, + "ColumnName": "ID", + "DisplayTitle": "ID", + "GridDisplayOrder": 3, + "GridAttributes": "{ \u0022dataType\u0022: \u0022number\u0022, \u0022hidden\u0022: \u0022true\u0022 }", + "TableDisplayOrder": 1 + }, + { + "ToolTypeID": 1, + "Header": false, + "ApiName": null, + "ColumnName": "InsertDate", + "DisplayTitle": "InsertDate", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 2 + }, + { + "ToolTypeID": 1, + "Header": false, + "ApiName": "Position", + "ColumnName": "Position", + "DisplayTitle": "Position", + "GridDisplayOrder": 1, + "GridAttributes": null, + "TableDisplayOrder": 4 + }, + { + "ToolTypeID": 1, + "Header": false, + "ApiName": "HeaderUniqueId", + "ColumnName": "Run Header", + "DisplayTitle": "Run Header", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 6 + }, + { + "ToolTypeID": 1, + "Header": false, + "ApiName": "Thickness", + "ColumnName": "Thickness", + "DisplayTitle": "Thickness", + "GridDisplayOrder": 2, + "GridAttributes": null, + "TableDisplayOrder": 5 + }, + { + "ToolTypeID": 1, + "Header": false, + "ApiName": "UniqueId", + "ColumnName": "Title", + "DisplayTitle": "Title", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 3 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "Batch", + "ColumnName": "Batch", + "DisplayTitle": "Batch", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 7 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "Cassette", + "ColumnName": "Cassette", + "DisplayTitle": "Cassette", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 8 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "Date", + "ColumnName": "Date", + "DisplayTitle": "Date", + "GridDisplayOrder": 1, + "GridAttributes": "{ \u0022dataType\u0022: \u0022date\u0022, \u0022format\u0022: \u0022dateTime\u0022 }", + "TableDisplayOrder": 5 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": null, + "ColumnName": "ID", + "DisplayTitle": "ID", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 1 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": null, + "ColumnName": "InsertDate", + "DisplayTitle": "InsertDate", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 2 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "Layer", + "ColumnName": "Layer", + "DisplayTitle": "Layer", + "GridDisplayOrder": 5, + "GridAttributes": null, + "TableDisplayOrder": 20 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "MeanThickness", + "ColumnName": "Mean Thickness", + "DisplayTitle": "Mean Thickness", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 10 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "Op", + "ColumnName": "Operator", + "DisplayTitle": "Operator", + "GridDisplayOrder": 8, + "GridAttributes": null, + "TableDisplayOrder": 6 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "FilePath", + "ColumnName": "Path", + "DisplayTitle": "Path", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 19 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "PSN", + "ColumnName": "PSN", + "DisplayTitle": "PSN", + "GridDisplayOrder": 4, + "GridAttributes": null, + "TableDisplayOrder": 18 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "RDS", + "ColumnName": "RDS", + "DisplayTitle": "RDS", + "GridDisplayOrder": 3, + "GridAttributes": null, + "TableDisplayOrder": 17 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "Reactor", + "ColumnName": "Reactor", + "DisplayTitle": "Reactor", + "GridDisplayOrder": 2, + "GridAttributes": null, + "TableDisplayOrder": 16 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "Recipe", + "ColumnName": "Recipe", + "DisplayTitle": "Recipe", + "GridDisplayOrder": 7, + "GridAttributes": null, + "TableDisplayOrder": 4 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "RVThickness", + "ColumnName": "RV Thickness", + "DisplayTitle": "RV Thickness", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 11 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "SentToMetrology", + "ColumnName": "SentToMetrology", + "DisplayTitle": "SentToMetrology", + "GridDisplayOrder": 9, + "GridAttributes": "{ \u0022dataType:\u0022: \u0022bool\u0022, \u0022formatter\u0022: \u0022boolToYesNo\u0022 }", + "TableDisplayOrder": 14 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "SentToSPC", + "ColumnName": "SentToSPC", + "DisplayTitle": "SentToSPC", + "GridDisplayOrder": 10, + "GridAttributes": "{ \u0022dataType:\u0022: \u0022bool\u0022, \u0022formatter\u0022: \u0022boolToYesNo\u0022 }", + "TableDisplayOrder": 15 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "PassFail", + "ColumnName": "Status", + "DisplayTitle": "Status", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 12 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "StdDev", + "ColumnName": "Std Dev", + "DisplayTitle": "Std Dev", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 13 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "UniqueId", + "ColumnName": "Title", + "DisplayTitle": "Title", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 3 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "Wafer", + "ColumnName": "Wafer", + "DisplayTitle": "Wafer", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 9 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "Zone", + "ColumnName": "Zone", + "DisplayTitle": "Zone", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 21 + }, + { + "ToolTypeID": 1, + "Header": false, + "ApiName": null, + "ColumnName": "AttachmentID", + "DisplayTitle": "AttachmentID", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 0 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": null, + "ColumnName": "AttachmentID", + "DisplayTitle": "AttachmentID", + "GridDisplayOrder": 0, + "GridAttributes": null, + "TableDisplayOrder": 0 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "Id", + "ColumnName": null, + "DisplayTitle": "Ignore", + "GridDisplayOrder": -1, + "GridAttributes": null, + "TableDisplayOrder": -1 + }, + { + "ToolTypeID": 1, + "Header": true, + "ApiName": "Title", + "ColumnName": null, + "DisplayTitle": "Ignore", + "GridDisplayOrder": -1, + "GridAttributes": null, + "TableDisplayOrder": -1 + } + ] + }, + "TotalRows": 31 +} \ No newline at end of file diff --git a/Server/Data/Tests/IndexApi.json b/Server/Data/Tests/IndexApi.json new file mode 100644 index 0000000..cb1368c --- /dev/null +++ b/Server/Data/Tests/IndexApi.json @@ -0,0 +1,29 @@ +{ + "Results": [ + { + "ToolTypeName": "BioRad", + "ID": 1 + }, + { + "ToolTypeName": "CDE", + "ID": 2 + }, + { + "ToolTypeName": "Tencor", + "ID": 3 + }, + { + "ToolTypeName": "MercuryProbe", + "ID": 4 + }, + { + "ToolTypeName": "StratusBioRad", + "ID": 5 + }, + { + "ToolTypeName": "TencorSP1", + "ID": 6 + } + ], + "TotalRows": 6 +} \ No newline at end of file diff --git a/Server/Models/AppSettings.cs b/Server/Models/AppSettings.cs new file mode 100644 index 0000000..bc7fd0d --- /dev/null +++ b/Server/Models/AppSettings.cs @@ -0,0 +1,32 @@ +using System.Text.Json; + +namespace OI.Metrology.Server.Models; + +public record AppSettings(string ApiLoggingContentTypes, + string ApiLoggingPathPrefixes, + string ApiLogPath, + string ApiUrl, + string AttachmentPath, + string BuildNumber, + string Company, + string ConnectionString, + string GitCommitSeven, + string InboundApiAllowedIPList, + bool IsDevelopment, + bool IsStaging, + string MockRoot, + string MonAResource, + string MonASite, + string OI2SqlConnectionString, + string OIExportPath, + string URLs, + string WorkingDirectoryName) +{ + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); + return result; + } + +} \ No newline at end of file diff --git a/Server/Models/Binder/AppSettings.cs b/Server/Models/Binder/AppSettings.cs new file mode 100644 index 0000000..b41e669 --- /dev/null +++ b/Server/Models/Binder/AppSettings.cs @@ -0,0 +1,113 @@ +using System.ComponentModel.DataAnnotations; +using System.Text.Json; + +namespace OI.Metrology.Server.Models.Binder; + +public class AppSettings +{ + +#nullable disable + + [Display(Name = "Api Logging Content Types"), Required] public string ApiLoggingContentTypes { get; set; } + [Display(Name = "Api Logging Path Prefixes"), Required] public string ApiLoggingPathPrefixes { get; set; } + [Display(Name = "Api Log Path"), Required] public string ApiLogPath { get; set; } + [Display(Name = "Api URL"), Required] public string ApiUrl { get; set; } + [Display(Name = "Attachment Path"), Required] public string AttachmentPath { get; set; } + [Display(Name = "Build Number"), Required] public string BuildNumber { get; set; } + [Display(Name = "Company"), Required] public string Company { get; set; } + [Display(Name = "Connection String"), Required] public string ConnectionString { get; set; } + [Display(Name = "Git Commit Seven"), Required] public string GitCommitSeven { get; set; } + [Display(Name = "Inbound Api Allowed IP List"), Required] public string InboundApiAllowedIPList { get; set; } + [Display(Name = "Is Development"), Required] public bool? IsDevelopment { get; set; } + [Display(Name = "Is Staging"), Required] public bool? IsStaging { get; set; } + [Display(Name = "Mock Root"), Required] public string MockRoot { get; set; } + [Display(Name = "MonA Resource"), Required] public string MonAResource { get; set; } + [Display(Name = "MonA Site"), Required] public string MonASite { get; set; } + [Display(Name = "Oi 2 Sql Connection String"), Required] public string Oi2SqlConnectionString { get; set; } + [Display(Name = "OI Export Path"), Required] public string OIExportPath { get; set; } + [Display(Name = "URLs"), Required] public string URLs { get; set; } + [Display(Name = "Working Directory Name"), Required] public string WorkingDirectoryName { get; set; } + +#nullable restore + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); + return result; + } + + private static Models.AppSettings Get(AppSettings? appSettings) + { + Models.AppSettings result; + if (appSettings is null) + throw new NullReferenceException(nameof(appSettings)); + if (appSettings.ApiLoggingContentTypes is null) + throw new NullReferenceException(nameof(ApiLoggingContentTypes)); + if (appSettings.ApiLoggingPathPrefixes is null) + throw new NullReferenceException(nameof(ApiLoggingPathPrefixes)); + if (appSettings.ApiLogPath is null) + throw new NullReferenceException(nameof(ApiLogPath)); + if (appSettings.ApiUrl is null) + throw new NullReferenceException(nameof(ApiUrl)); + if (appSettings.AttachmentPath is null) + throw new NullReferenceException(nameof(AttachmentPath)); + if (appSettings.BuildNumber is null) + throw new NullReferenceException(nameof(BuildNumber)); + if (appSettings.Company is null) + throw new NullReferenceException(nameof(Company)); + if (appSettings.ConnectionString is null) + throw new NullReferenceException(nameof(ConnectionString)); + if (appSettings.GitCommitSeven is null) + throw new NullReferenceException(nameof(GitCommitSeven)); + if (appSettings.InboundApiAllowedIPList is null) + throw new NullReferenceException(nameof(InboundApiAllowedIPList)); + if (appSettings.IsDevelopment is null) + throw new NullReferenceException(nameof(IsDevelopment)); + if (appSettings.IsStaging is null) + throw new NullReferenceException(nameof(IsStaging)); + if (appSettings.MockRoot is null) + throw new NullReferenceException(nameof(MockRoot)); + if (appSettings.MonAResource is null) + throw new NullReferenceException(nameof(MonAResource)); + if (appSettings.MonASite is null) + throw new NullReferenceException(nameof(MonASite)); + if (appSettings.Oi2SqlConnectionString is null) + throw new NullReferenceException(nameof(Oi2SqlConnectionString)); + if (appSettings.OIExportPath is null) + throw new NullReferenceException(nameof(OIExportPath)); + if (appSettings.URLs is null) + throw new NullReferenceException(nameof(URLs)); + if (appSettings.WorkingDirectoryName is null) + throw new NullReferenceException(nameof(WorkingDirectoryName)); + result = new( + appSettings.ApiLoggingContentTypes, + appSettings.ApiLoggingPathPrefixes, + appSettings.ApiLogPath, + appSettings.ApiUrl, + appSettings.AttachmentPath, + appSettings.BuildNumber, + appSettings.Company, + appSettings.ConnectionString, + appSettings.GitCommitSeven, + appSettings.InboundApiAllowedIPList, + appSettings.IsDevelopment.Value, + appSettings.IsStaging.Value, + appSettings.MockRoot, + appSettings.MonAResource, + appSettings.MonASite, + appSettings.Oi2SqlConnectionString, + appSettings.OIExportPath, + appSettings.URLs, + appSettings.WorkingDirectoryName); + return result; + } + + public static Models.AppSettings Get(IConfigurationRoot configurationRoot) + { + Models.AppSettings result; + AppSettings? appSettings = configurationRoot.Get(); + result = Get(appSettings); + return result; + } + +} \ No newline at end of file diff --git a/Server/OI.Metrology.Server.csproj b/Server/OI.Metrology.Server.csproj new file mode 100644 index 0000000..eff4565 --- /dev/null +++ b/Server/OI.Metrology.Server.csproj @@ -0,0 +1,110 @@ + + + SAK + SAK + SAK + SAK + + + enable + false + 10.0 + enable + Exe + win-x64 + net7.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + \ No newline at end of file diff --git a/Viewer/Program.cs b/Server/Program.cs similarity index 75% rename from Viewer/Program.cs rename to Server/Program.cs index 2a0c2ac..9daf05b 100644 --- a/Viewer/Program.cs +++ b/Server/Program.cs @@ -1,22 +1,17 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; +using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Hosting.WindowsServices; -using Microsoft.Extensions.Logging; +using OI.Metrology.Server.Models; +using OI.Metrology.Server.Repositories; +using OI.Metrology.Server.Repository; +using OI.Metrology.Server.Services; using OI.Metrology.Shared.Models; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Repositories; using OI.Metrology.Shared.Services; -using OI.Metrology.Viewer.Models; -using OI.Metrology.Viewer.Repositories; -using OI.Metrology.Viewer.Services; using Serilog; -using System; -using System.IO; using System.Reflection; -namespace OI.Metrology.Viewer; +namespace OI.Metrology.Server; public class Program { @@ -25,7 +20,7 @@ public class Program { string webRootPath; Assembly assembly = Assembly.GetExecutingAssembly(); - string assemblyName = assembly.GetName()?.Name; + string? assemblyName = assembly.GetName()?.Name; if (string.IsNullOrEmpty(assemblyName)) throw new Exception(); string baseAssemblyName = assemblyName.Split('.')[0]; @@ -63,14 +58,26 @@ public class Program { _ = webApplicationBuilder.Services.Configure(options => options.SuppressModelStateInvalidFilter = true); _ = webApplicationBuilder.Services.AddControllersWithViews(); - _ = new MetrologyRepo(new SQLDbConnectionFactory(appSettings), null); _ = webApplicationBuilder.Services.AddDistributedMemoryCache(); _ = webApplicationBuilder.Services.AddMemoryCache(); - _ = webApplicationBuilder.Services.AddSingleton(_ => appSettings); + + AppSettingsRepository appSettingsRepository = new(appSettings); + SQLDbConnectionFactory sqlDbConnectionFactory = new(appSettings); + ClientSettingsRepository clientSettingsRepository = new(appSettings); + + _ = webApplicationBuilder.Services.AddSingleton(_ => appSettings); + _ = webApplicationBuilder.Services.AddSingleton(); + _ = webApplicationBuilder.Services.AddSingleton(_ => clientSettingsRepository); + _ = webApplicationBuilder.Services.AddSingleton(); + _ = webApplicationBuilder.Services.AddSingleton(_ => new(appSettings.MockRoot)); + _ = webApplicationBuilder.Services.AddSingleton(_ => sqlDbConnectionFactory); + _ = webApplicationBuilder.Services.AddSingleton(_ => new(appSettings.MockRoot)); + _ = webApplicationBuilder.Services.AddSingleton>(_ => appSettingsRepository); + _ = webApplicationBuilder.Services.AddScoped(); _ = webApplicationBuilder.Services.AddScoped(); - _ = webApplicationBuilder.Services.AddScoped(); - _ = webApplicationBuilder.Services.AddSingleton(); + _ = webApplicationBuilder.Services.AddScoped(); + _ = webApplicationBuilder.Services.AddSwaggerGen(); _ = webApplicationBuilder.Services.AddSession(sessionOptions => { @@ -84,14 +91,18 @@ public class Program _ = webApplicationBuilder.Services.AddSingleton(); _ = webApplicationBuilder.Logging.AddEventLog(settings => { +#pragma warning disable CA1416 if (string.IsNullOrEmpty(settings.SourceName)) settings.SourceName = webApplicationBuilder.Environment.ApplicationName; +#pragma warning restore }); } WebApplication webApplication = webApplicationBuilder.Build(); + _ = webApplication.UseCors(corsPolicyBuilder => corsPolicyBuilder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()); if (!webApplicationBuilder.Environment.IsDevelopment()) { _ = webApplication.UseExceptionHandler("/Error"); + _ = webApplication.UseHttpsRedirection(); _ = webApplication.UseHsts(); } else @@ -102,7 +113,7 @@ public class Program webApplication.Lifetime.StopApplication(); } _ = webApplication.UseSwagger(); - _ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Viewer V1")); + _ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Server V1")); } _ = webApplication.Lifetime.ApplicationStopped.Register(Log.CloseAndFlush); _ = ApplicationBuilderSerilogClientExtensions.UseSerilogIngestion(webApplication); @@ -110,7 +121,6 @@ public class Program _ = webApplication.UseFileServer(enableDirectoryBrowsing: true); _ = webApplication.UseStaticFiles(); _ = webApplication.UseSession(); - _ = webApplication.UseHttpsRedirection(); _ = webApplication.UseMiddleware(); _ = webApplication.MapControllers(); log.Information("Starting Web Application"); diff --git a/Server/Properties/launchSettings.json b/Server/Properties/launchSettings.json new file mode 100644 index 0000000..96ca44f --- /dev/null +++ b/Server/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://localhost:5126", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "https://localhost:7130;http://localhost:5126", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https-prod": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "https://localhost:7130;http://localhost:5126", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Production" + } + } + } +} diff --git a/Server/Repositories/AppSettingsRepository.cs b/Server/Repositories/AppSettingsRepository.cs new file mode 100644 index 0000000..8a215f5 --- /dev/null +++ b/Server/Repositories/AppSettingsRepository.cs @@ -0,0 +1,36 @@ +using OI.Metrology.Server.Models; +using OI.Metrology.Shared.Models.Stateless; + +namespace OI.Metrology.Server.Repository; + +public class AppSettingsRepository : IAppSettingsRepository +{ + + private readonly AppSettings _AppSettings; + + public AppSettingsRepository(AppSettings appSettings) => _AppSettings = appSettings; + + internal Models.Binder.AppSettings GetAppSettings() + { + Models.Binder.AppSettings result = new() + { + BuildNumber = _AppSettings.BuildNumber, + Company = _AppSettings.Company, + GitCommitSeven = _AppSettings.GitCommitSeven, + IsDevelopment = _AppSettings.IsDevelopment, + IsStaging = _AppSettings.IsStaging, + }; + return result; + } + + Models.Binder.AppSettings IAppSettingsRepository.GetAppSettings() => GetAppSettings(); + + internal string GetBuildNumberAndGitCommitSeven() + { + string result = string.Concat(_AppSettings.BuildNumber, '-', _AppSettings.GitCommitSeven); + return result; + } + + string IAppSettingsRepository.GetBuildNumberAndGitCommitSeven() => GetBuildNumberAndGitCommitSeven(); + +} \ No newline at end of file diff --git a/Server/Repositories/ClientSettingsRepository.cs b/Server/Repositories/ClientSettingsRepository.cs new file mode 100644 index 0000000..cf88ffd --- /dev/null +++ b/Server/Repositories/ClientSettingsRepository.cs @@ -0,0 +1,36 @@ +using OI.Metrology.Server.Models; +using OI.Metrology.Shared.Models.Stateless; +using System.Net; + +namespace OI.Metrology.Server.Repository; + +public class ClientSettingsRepository : IClientSettingsRepository +{ + + private readonly AppSettings _AppSettings; + + public ClientSettingsRepository(AppSettings appSettings) => _AppSettings = appSettings; + + internal List GetClientSettings(IPAddress? remoteIpAddress) + { + List results = new(); + if (remoteIpAddress is null) + results.Add(nameof(remoteIpAddress)); + else + results.Add(remoteIpAddress.ToString()); + if (!_AppSettings.IsDevelopment) + throw new Exception("Shouldn't expose!"); + return results; + } + + List IClientSettingsRepository.GetClientSettings(IPAddress? remoteIpAddress) => GetClientSettings(remoteIpAddress); + + internal static string GetIpAddress(IPAddress? remoteIpAddress) + { + string result = remoteIpAddress is null ? string.Empty : remoteIpAddress.ToString(); + return result; + } + + string IClientSettingsRepository.GetIpAddress(IPAddress? remoteIpAddress) => GetIpAddress(remoteIpAddress); + +} \ No newline at end of file diff --git a/Server/Repositories/InboundRepository.cs b/Server/Repositories/InboundRepository.cs new file mode 100644 index 0000000..6e36fb2 --- /dev/null +++ b/Server/Repositories/InboundRepository.cs @@ -0,0 +1,88 @@ +using Newtonsoft.Json.Linq; +using OI.Metrology.Shared.DataModels; +using OI.Metrology.Shared.Models; +using OI.Metrology.Shared.Models.Stateless; +using OI.Metrology.Shared.Services; +using System.Net; + +namespace OI.Metrology.Server.Repository; + +public class InboundRepository : IInboundRepository +{ + + private readonly Serilog.ILogger _Log; + + public InboundRepository() => _Log = Serilog.Log.ForContext(); + + bool IInboundRepository.IsIPAddressAllowed(string inboundApiAllowedIPList, IPAddress? remoteIP) + { + if (string.IsNullOrWhiteSpace(inboundApiAllowedIPList)) + return true; + if (remoteIP is null) + return false; + byte[] remoteIPBytes = remoteIP.GetAddressBytes(); + string[] allowedIPs = inboundApiAllowedIPList.Split(';'); + foreach (string ip in allowedIPs) + { + IPAddress? parsedIP; + if (IPAddress.TryParse(ip, out parsedIP)) + { + if (parsedIP.GetAddressBytes().SequenceEqual(remoteIPBytes)) + return true; + } + } + return false; + } + + // this is the main endpoint, it accepts a JSON message that contains both the header and data records together + // tooltype is the ToolTypeName column from the ToolType table + // JToken is how you can accept a JSON message without deserialization. + // Using "string" doesn't work because ASP.NET Core will expect a json encoded string, not give you the actual string. + DataResponse IInboundRepository.Data(IMetrologyRepository metrologyRepository, IInboundDataService inboundDataService, string tooltype, JToken jsonbody) + { + DataResponse result = new(); + ToolType? toolType = metrologyRepository.GetToolTypeByName(tooltype); + if (toolType is null) + result.Errors.Add("Invalid tool type: " + tooltype); + else + { + List metaData = metrologyRepository.GetToolTypeMetadataByToolTypeID(toolType.ID).ToList(); + if (metaData is null) + result.Errors.Add("Invalid metadata for tool type: " + tooltype); + else if (jsonbody is null) + result.Errors.Add("Invalid json"); + else + inboundDataService.ValidateJSONFields(jsonbody, 0, metaData, result.Errors, result.Warnings); + if (metaData is not null && jsonbody is not null && !result.Errors.Any()) + { + try + { + result.HeaderID = inboundDataService.DoSQLInsert(jsonbody, toolType, metaData); + result.Success = result.HeaderID > 0; + } + catch (Exception ex) { result.Errors.Add(ex.Message); } + } + } + return result; + } + + // this is the endpoint for attaching a field. It is not JSON, it is form-data/multipart like an HTML form because that's the normal way. + // header ID is the ID value from the Header table + // datauniqueid is the Title value from the Data/Detail table + string? IInboundRepository.AttachFile(IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService, string tooltype, long headerid, string datauniqueid, string fileName, object uploadedFile) + { + string? result = null; + ToolType toolType = metrologyRepository.GetToolTypeByName(tooltype); + if (toolType is null) + result = $"Invalid tool type: {tooltype}"; + string filename = Path.GetFileName(fileName); + if (string.IsNullOrWhiteSpace(filename)) + result = "Empty filename"; + if (filename.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0) + result = "Invalid filename"; + if (result is null && toolType is not null) + attachmentsService.SaveAttachment(toolType, headerid, datauniqueid, filename, uploadedFile); + return result; + } + +} \ No newline at end of file diff --git a/Viewer/Repositories/MetrologyRepo.cs b/Server/Repositories/MetrologyRepository.cs similarity index 70% rename from Viewer/Repositories/MetrologyRepo.cs rename to Server/Repositories/MetrologyRepository.cs index fc46dc9..99542ad 100644 --- a/Viewer/Repositories/MetrologyRepo.cs +++ b/Server/Repositories/MetrologyRepository.cs @@ -1,25 +1,29 @@ using Dapper; using Microsoft.Extensions.Caching.Memory; using Newtonsoft.Json.Linq; +using OI.Metrology.Server.Models; using OI.Metrology.Shared.DataModels; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Repositories; -using System; -using System.Collections.Generic; using System.Data; using System.Data.Common; -using System.Linq; +using System.Text; using System.Transactions; -namespace OI.Metrology.Viewer.Repositories; +#pragma warning disable CS8600, CS8602, CS8603, CS8604, CS8625 -public class MetrologyRepo : IMetrologyRepo +namespace OI.Metrology.Server.Repositories; + +public class MetrologyRepository : IMetrologyRepository { + private readonly string _MockRoot; private readonly IMemoryCache _Cache; private readonly IDbConnectionFactory _DBConnectionFactory; - public MetrologyRepo(IDbConnectionFactory dbConnectionFactory, IMemoryCache memoryCache) + public MetrologyRepository(AppSettings appSettings, IDbConnectionFactory dbConnectionFactory, IMemoryCache memoryCache) { _Cache = memoryCache; + _MockRoot = appSettings.MockRoot; _DBConnectionFactory = dbConnectionFactory; } @@ -28,21 +32,7 @@ public class MetrologyRepo : IMetrologyRepo protected DbProviderFactory GetDbProviderFactory(IDbConnection conn) => DbProviderFactories.GetFactory(conn.GetType().Namespace); - public bool IsTestDatabase() - { - int c = 0; - using (DbConnection conn = GetDbConnection()) - { - c = conn.Query( - "SELECT COUNT(*) " + - "FROM Configuration " + - "WHERE KeyName = 'TestDatabase' " + - "AND ValueString = '1'").FirstOrDefault(); - } - return c > 0; - } - - public TransactionScope StartTransaction() => new(); + internal static TransactionScope StartTransaction() => new(); protected void CacheItem(string key, object v) { @@ -51,7 +41,7 @@ public class MetrologyRepo : IMetrologyRepo _ = _Cache.Set(key, v, new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromHours(1))); } - public IEnumerable GetToolTypes() + internal IEnumerable GetToolTypes() { IEnumerable cached; string cacheKey = "GetToolTypes"; @@ -66,7 +56,7 @@ public class MetrologyRepo : IMetrologyRepo return r; } - public ToolType GetToolTypeByName(string name) + internal ToolType GetToolTypeByName(string name) { ToolType cached; string cacheKey = "GetToolTypeByName_" + name; @@ -83,7 +73,7 @@ public class MetrologyRepo : IMetrologyRepo return r; } - public ToolType GetToolTypeByID(int id) + internal ToolType GetToolTypeByID(int id) { ToolType cached; string cacheKey = "GetToolTypeByID_" + id.ToString(); @@ -100,7 +90,7 @@ public class MetrologyRepo : IMetrologyRepo return r; } - public IEnumerable GetToolTypeMetadataByToolTypeID(int id) + internal IEnumerable GetToolTypeMetadataByToolTypeID(int id) { IEnumerable cached; string cacheKey = "GetToolTypeMetadataByToolTypeID_" + id.ToString(); @@ -117,7 +107,7 @@ public class MetrologyRepo : IMetrologyRepo return r; } - public long InsertToolDataJSON(JToken jsonrow, long headerId, List metaData, string tableName) + internal long InsertToolDataJSON(JToken jsonrow, long headerId, List metaData, string tableName) { long r = -1; using (DbConnection conn = GetDbConnection()) @@ -139,10 +129,10 @@ public class MetrologyRepo : IMetrologyRepo // build field map foreach (ToolTypeMetadata f in fields) { - if ((f.ApiName != null) && f.ApiName.Contains('\\')) + if ((f.ApiName is not null) && f.ApiName.Contains('\\')) { string n = f.ApiName.Split('\\')[0].Trim().ToUpper(); - if (containerField == null) + if (containerField is null) containerField = n; else if (!string.Equals(containerField, n)) throw new Exception("Only one container field is allowed"); @@ -156,7 +146,7 @@ public class MetrologyRepo : IMetrologyRepo } } - if (containerField == null) + if (containerField is null) { // No container field, just insert a single row @@ -167,7 +157,7 @@ public class MetrologyRepo : IMetrologyRepo // Find the container field in the json JProperty contJP = jsonrow.Children().Where(c => string.Equals(c.Name.Trim(), containerField, StringComparison.OrdinalIgnoreCase)).SingleOrDefault(); - if ((contJP != null) && (contJP.Value is JArray array)) + if ((contJP is not null) && (contJP.Value is JArray array)) { JArray contRows = array; @@ -220,42 +210,40 @@ public class MetrologyRepo : IMetrologyRepo { string apifield = jp.Name.Trim().ToUpper(); - if (fieldmap.ContainsKey(apifield)) + if (fieldmap.TryGetValue(apifield, out string value)) { string parmname = string.Format("@p{0}", parmnumber); - columns += string.Format("[{0}],", fieldmap[apifield]); + columns += string.Format("[{0}],", value); parms += parmname; parms += ","; parmnumber += 1; object sqlValue = ((JValue)jp.Value).Value; - if (sqlValue == null) - sqlValue = DBNull.Value; + sqlValue ??= DBNull.Value; AddParameter(cmd, parmname, sqlValue); } } - if ((containerrow != null) && (containerFieldmap != null)) + if ((containerrow is not null) && (containerFieldmap is not null)) { foreach (JProperty jp in containerrow.Children()) { string apifield = jp.Name.Trim().ToUpper(); - if (containerFieldmap.ContainsKey(apifield)) + if (containerFieldmap.TryGetValue(apifield, out string value)) { string parmname = string.Format("@p{0}", parmnumber); - columns += string.Format("[{0}],", containerFieldmap[apifield]); + columns += string.Format("[{0}],", value); parms += parmname; parms += ","; parmnumber += 1; object sqlValue = ((JValue)jp.Value).Value; - if (sqlValue == null) - sqlValue = DBNull.Value; + sqlValue ??= DBNull.Value; AddParameter(cmd, parmname, sqlValue); } @@ -269,12 +257,12 @@ public class MetrologyRepo : IMetrologyRepo cmd.CommandText = columns.TrimEnd(',') + parms.TrimEnd(',') + ";SELECT SCOPE_IDENTITY();"; object o = cmd.ExecuteScalar(); - if ((o == null) || Convert.IsDBNull(o)) + if ((o is null) || Convert.IsDBNull(o)) throw new Exception("Unexpected query result"); return Convert.ToInt64(o); } - public DataTable ExportData(string spName, DateTime startTime, DateTime endTime) + internal DataTable ExportData(string spName, DateTime startTime, DateTime endTime) { DataTable dt = new(); DateTime endTimeLocal = endTime.ToLocalTime(); @@ -300,7 +288,7 @@ public class MetrologyRepo : IMetrologyRepo protected string FormDynamicSelectQuery(IEnumerable fields, string tableName) { - System.Text.StringBuilder sb = new(); + StringBuilder sb = new(); _ = sb.Append("SELECT "); bool firstField = true; foreach (ToolTypeMetadata f in fields) @@ -309,7 +297,7 @@ public class MetrologyRepo : IMetrologyRepo { if (!firstField) _ = sb.Append(','); - if (f.GridAttributes != null && f.GridAttributes.Contains("isNull")) + if (f.GridAttributes is not null && f.GridAttributes.Contains("isNull")) { _ = sb.AppendFormat("{0}", "ISNULL(" + f.ColumnName + ", '')[" + f.ColumnName + "]"); } @@ -324,20 +312,20 @@ public class MetrologyRepo : IMetrologyRepo return sb.ToString(); } - public DataTable GetHeaders(int toolTypeId, DateTime? startTime, DateTime? endTime, int? pageNo, int? pageSize, long? headerId, out long totalRecords) + internal DataTable GetHeaders(int toolTypeId, DateTime? startTime, DateTime? endTime, int? pageNo, int? pageSize, long? headerId, out long totalRecords) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); IEnumerable md = GetToolTypeMetadataByToolTypeID(toolTypeId); - if (md == null) + if (md is null) throw new Exception("Invalid tool type metadata"); DataTable dt = new(); using (DbConnection conn = GetDbConnection()) { - System.Text.StringBuilder sb = new(); + StringBuilder sb = new(); _ = sb.Append( FormDynamicSelectQuery( md.Where(m => m.Header == true).ToList(), @@ -417,20 +405,20 @@ public class MetrologyRepo : IMetrologyRepo return dt; } - public DataTable GetData(int toolTypeId, long headerid) + internal DataTable GetData(int toolTypeId, long headerid) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); IEnumerable md = GetToolTypeMetadataByToolTypeID(toolTypeId); - if (md == null) + if (md is null) throw new Exception("Invalid tool type metadata"); DataTable dt = new(); using (DbConnection conn = GetDbConnection()) { - System.Text.StringBuilder sb = new(); + StringBuilder sb = new(); _ = sb.Append( FormDynamicSelectQuery( md.Where(m => m.Header == false).OrderBy(m => m.GridDisplayOrder).ToList(), @@ -512,10 +500,10 @@ public class MetrologyRepo : IMetrologyRepo return dt; } - public Guid GetHeaderAttachmentID(int toolTypeId, long headerId) + internal Guid GetHeaderAttachmentID(int toolTypeId, long headerId) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -524,10 +512,10 @@ public class MetrologyRepo : IMetrologyRepo $"SELECT AttachmentID FROM [{tt.HeaderTableName}] WHERE ID = @HeaderID"; return conn.ExecuteScalar(sql, param: new { HeaderID = headerId }); } - public string GetHeaderInsertDate(int toolTypeId, long headerId) + internal string GetHeaderInsertDate(int toolTypeId, long headerId) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -535,7 +523,7 @@ public class MetrologyRepo : IMetrologyRepo $"SELECT CONVERT(varchar, case when [InsertDate] < [Date] or [Date] is null then [InsertDate] else [Date] end, 120) d FROM[{tt.HeaderTableName}] where ID = @HeaderID"; return conn.ExecuteScalar(sql, param: new { HeaderID = headerId }); } - public string GetAttachmentInsertDateByGUID(string tableName, Guid attachmentId) + internal string GetAttachmentInsertDateByGUID(string tableName, Guid attachmentId) { using DbConnection conn = GetDbConnection(); string sql = ""; @@ -550,16 +538,16 @@ public class MetrologyRepo : IMetrologyRepo return conn.ExecuteScalar(sql, param: new { AttachmentID = attachmentId }); } - public void SetHeaderDirName(string tableName, long headerId, string dateDir) + internal void SetHeaderDirName(string tableName, long headerId, string dateDir) { using DbConnection conn = GetDbConnection(); _ = conn.Execute($"UPDATE [{tableName}] SET AttachDirName = @AttachDirName WHERE ID = @HeaderID;", new { HeaderID = headerId, AttachDirName = dateDir }); } - public Guid GetDataAttachmentID(int toolTypeId, long headerId, string title) + internal Guid GetDataAttachmentID(int toolTypeId, long headerId, string title) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -569,10 +557,10 @@ public class MetrologyRepo : IMetrologyRepo return conn.ExecuteScalar(sql, param: new { HeaderID = headerId, Title = title }); } // J Ouellette Added - public string GetDataInsertDate(int toolTypeId, long headerId, string title) + internal string GetDataInsertDate(int toolTypeId, long headerId, string title) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -588,7 +576,7 @@ public class MetrologyRepo : IMetrologyRepo return conn.ExecuteScalar(sql, param: new { HeaderID = headerId, Title = title }); } - public void SetDataDirName(string tableName, long headerId, string title, string dateDir) + internal void SetDataDirName(string tableName, long headerId, string title, string dateDir) { using DbConnection conn = GetDbConnection(); string sql = @@ -596,16 +584,16 @@ public class MetrologyRepo : IMetrologyRepo _ = conn.Execute(sql, param: new { HeaderID = headerId, Title = title, AttachDirName = dateDir }); } - public void PurgeExistingData(int toolTypeId, string title) + internal void PurgeExistingData(int toolTypeId, string title) { using DbConnection conn = GetDbConnection(); _ = conn.Execute("PurgeExistingData", param: new { ToolTypeID = toolTypeId, Title = title }, commandType: CommandType.StoredProcedure); } - public DataSet GetOIExportData(int toolTypeId, long headerid) + internal DataSet GetOIExportData(int toolTypeId, long headerid) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); if (string.IsNullOrWhiteSpace(tt.OIExportSPName)) @@ -631,26 +619,60 @@ public class MetrologyRepo : IMetrologyRepo return ds; } - public IEnumerable GetHeaderTitles(int toolTypeId, int? pageNo, int? pageSize, out long totalRecords) + private HeaderCommon[] GetHeaderTitles() { - ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + IEnumerable results; + ToolType[] toolTypes = GetToolTypes().ToArray(); + + if (!toolTypes.Any() || toolTypes.FirstOrDefault() is null) + throw new Exception("Invalid tool type ID"); + + ToolType tt; + StringBuilder stringBuilder = new(); + using DbConnection conn = GetDbConnection(); + _ = stringBuilder.Append(" SELECT * FROM ( "); + for (int i = 0; i < toolTypes.Length; i++) + { + tt = toolTypes[i]; + _ = stringBuilder.Append($" SELECT ID, InsertDate, AttachmentID, Title, [Date], {tt.ID} AS ToolTypeID, '{tt.ToolTypeName}' AS ToolTypeName, Reactor, RDS, PSN FROM {tt.HeaderTableName} "); + if (i != toolTypes.Length - 1) + _ = stringBuilder.Append(" UNION ALL "); + } + _ = stringBuilder.Append(" ) AS A ORDER BY A.[Date] DESC "); + results = conn.Query(stringBuilder.ToString()).ToArray(); + + return results.ToArray(); + } + + internal HeaderCommon[] GetHeaderTitles(int? toolTypeId, int? pageNo, int? pageSize, out long totalRecords) + { + HeaderCommon[] headers; + if (toolTypeId is not null && (pageNo is not null || pageSize is not null)) + throw new Exception(); + + if (toolTypeId is null) + { + headers = GetHeaderTitles(); + totalRecords = headers.Length; + return headers; + } + + ToolType tt = GetToolTypeByID(toolTypeId.Value); + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); - string sql = $"SELECT ID, InsertDate, AttachmentID, Title, [Date] FROM {tt.HeaderTableName} ORDER BY [Date] DESC "; - - IEnumerable headers; + string sql = $"SELECT ID, InsertDate, AttachmentID, Title, [Date], {tt.ID} AS ToolTypeID, '{tt.ToolTypeName}' AS ToolTypeName, Reactor, RDS, PSN FROM {tt.HeaderTableName} ORDER BY [Date] DESC "; if (pageNo.HasValue && pageSize.HasValue) { sql += "OFFSET @PageNum * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY"; - headers = conn.Query(sql, param: new { PageNum = pageNo.Value, PageSize = pageSize.Value }).ToList(); + headers = conn.Query(sql, param: new { PageNum = pageNo.Value, PageSize = pageSize.Value }).ToArray(); } else { - headers = conn.Query(sql).ToList(); + headers = conn.Query(sql).ToArray(); } sql = $"SELECT COUNT(*) FROM [{tt.HeaderTableName}] "; @@ -660,14 +682,14 @@ public class MetrologyRepo : IMetrologyRepo return headers; } - public IEnumerable> GetHeaderFields(int toolTypeId, long headerid) + internal IEnumerable> GetHeaderFields(int toolTypeId, long headerid) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); IEnumerable md = GetToolTypeMetadataByToolTypeID(toolTypeId); - if (md == null) + if (md is null) throw new Exception("Invalid tool type metadata"); List> r = new(); @@ -694,10 +716,10 @@ public class MetrologyRepo : IMetrologyRepo foreach (ToolTypeMetadata m in md.Where(m => m.Header == true && m.TableDisplayOrder > 0).OrderBy(m => m.TableDisplayOrder)) { string v = ""; - if (dr != null) + if (dr is not null) { object o = dr[m.ColumnName]; - if (o != null && !Convert.IsDBNull(o)) + if (o is not null && !Convert.IsDBNull(o)) v = Convert.ToString(o); } KeyValuePair kvp = new(m.DisplayTitle, v); @@ -707,16 +729,28 @@ public class MetrologyRepo : IMetrologyRepo return r; } - public IEnumerable GetAwaitingDispo() + internal IEnumerable GetAwaitingDisposition() { - using DbConnection conn = GetDbConnection(); - return conn.Query("GetAwaitingDispo", commandType: CommandType.StoredProcedure); + IEnumerable? r; + if (!string.IsNullOrEmpty(_MockRoot)) + { + string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), "GetAwaitingDispositionApi.json")); + r = System.Text.Json.JsonSerializer.Deserialize>(json); + if (r is null) + throw new NullReferenceException(nameof(r)); + } + else + { + using DbConnection conn = GetDbConnection(); + r = conn.Query("GetAwaitingDispo", commandType: CommandType.StoredProcedure); + } + return r; } - public int UpdateReviewDate(int toolTypeId, long headerId, bool clearDate) + internal int UpdateReviewDate(int toolTypeId, long headerId, bool clearDate) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -735,10 +769,10 @@ public class MetrologyRepo : IMetrologyRepo } } - public Guid GetHeaderAttachmentIDByTitle(int toolTypeId, string title) + internal Guid GetHeaderAttachmentIDByTitle(int toolTypeId, string title) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -747,10 +781,10 @@ public class MetrologyRepo : IMetrologyRepo return conn.ExecuteScalar(sql, param: new { Title = title }); } - public Guid GetDataAttachmentIDByTitle(int toolTypeId, string title) + internal Guid GetDataAttachmentIDByTitle(int toolTypeId, string title) { ToolType tt = GetToolTypeByID(toolTypeId); - if (tt == null) + if (tt is null) throw new Exception("Invalid tool type ID"); using DbConnection conn = GetDbConnection(); @@ -759,5 +793,31 @@ public class MetrologyRepo : IMetrologyRepo return conn.ExecuteScalar(sql, param: new { Title = title }); } - DataTable IMetrologyRepo.GetDataSharePoint(int toolTypeId, string headerId) => throw new NotImplementedException(); + DataTable IMetrologyRepository.GetDataSharePoint(int toolTypeId, string headerId) => throw new NotImplementedException(); + + IEnumerable IMetrologyRepository.GetToolTypes() => GetToolTypes(); + ToolType IMetrologyRepository.GetToolTypeByName(string name) => GetToolTypeByName(name); + ToolType IMetrologyRepository.GetToolTypeByID(int id) => GetToolTypeByID(id); + IEnumerable IMetrologyRepository.GetToolTypeMetadataByToolTypeID(int id) => GetToolTypeMetadataByToolTypeID(id); + TransactionScope IMetrologyRepository.StartTransaction() => StartTransaction(); + void IMetrologyRepository.PurgeExistingData(int toolTypeId, string title) => PurgeExistingData(toolTypeId, title); + long IMetrologyRepository.InsertToolDataJSON(JToken jsonbody, long headerId, List metaData, string tableName) => InsertToolDataJSON(jsonbody, headerId, metaData, tableName); + DataTable IMetrologyRepository.ExportData(string spName, DateTime startTime, DateTime endTime) => ExportData(spName, startTime, endTime); + DataTable IMetrologyRepository.GetHeaders(int toolTypeId, DateTime? startTime, DateTime? endTime, int? pageNo, int? pageSize, long? headerid, out long totalRecords) => GetHeaders(toolTypeId, startTime, endTime, pageNo, pageSize, headerid, out totalRecords); + DataTable IMetrologyRepository.GetData(int toolTypeId, long headerId) => GetData(toolTypeId, headerId); + HeaderCommon[] IMetrologyRepository.GetHeaderTitles(int? toolTypeId, int? pageNo, int? pageSize, out long totalRecords) => GetHeaderTitles(toolTypeId, pageNo, pageSize, out totalRecords); + Guid IMetrologyRepository.GetHeaderAttachmentIDByTitle(int toolTypeId, string title) => GetHeaderAttachmentIDByTitle(toolTypeId, title); + Guid IMetrologyRepository.GetDataAttachmentIDByTitle(int toolTypeId, string title) => GetDataAttachmentIDByTitle(toolTypeId, title); + Guid IMetrologyRepository.GetHeaderAttachmentID(int toolTypeId, long headerId) => GetHeaderAttachmentID(toolTypeId, headerId); + string IMetrologyRepository.GetHeaderInsertDate(int toolTypeId, long headerId) => GetHeaderInsertDate(toolTypeId, headerId); + string IMetrologyRepository.GetAttachmentInsertDateByGUID(string tableName, Guid attachmentId) => GetAttachmentInsertDateByGUID(tableName, attachmentId); + void IMetrologyRepository.SetHeaderDirName(string tableName, long headerId, string dateDir) => SetHeaderDirName(tableName, headerId, dateDir); + Guid IMetrologyRepository.GetDataAttachmentID(int toolTypeId, long headerId, string title) => GetDataAttachmentID(toolTypeId, headerId, title); + string IMetrologyRepository.GetDataInsertDate(int toolTypeId, long headerId, string title) => GetDataInsertDate(toolTypeId, headerId, title); + void IMetrologyRepository.SetDataDirName(string tableName, long headerId, string title, string dateDir) => SetDataDirName(tableName, headerId, title, dateDir); + DataSet IMetrologyRepository.GetOIExportData(int toolTypeId, long headerid) => GetOIExportData(toolTypeId, headerid); + IEnumerable> IMetrologyRepository.GetHeaderFields(int toolTypeId, long headerid) => GetHeaderFields(toolTypeId, headerid); + IEnumerable IMetrologyRepository.GetAwaitingDisposition() => GetAwaitingDisposition(); + int IMetrologyRepository.UpdateReviewDate(int toolTypeId, long headerId, bool clearDate) => UpdateReviewDate(toolTypeId, headerId, clearDate); + } \ No newline at end of file diff --git a/Server/Repositories/PinRepository.cs b/Server/Repositories/PinRepository.cs new file mode 100644 index 0000000..288f6ed --- /dev/null +++ b/Server/Repositories/PinRepository.cs @@ -0,0 +1,120 @@ +using OI.Metrology.Shared.DataModels; +using OI.Metrology.Shared.Models.Stateless; +using System.Text.Json; + +namespace OI.Metrology.Server.Repository; + +public class PinRepository : IPinRepository +{ + + private readonly string _MockRoot; + private readonly Serilog.ILogger _Log; + private readonly Dictionary> _RdsToHeaderCommonCollection; + + public PinRepository(string mockRoot) + { + _MockRoot = mockRoot; + _RdsToHeaderCommonCollection = new(); + _Log = Serilog.Log.ForContext(); + } + + void IPinRepository.SetPinnedTable(HeaderCommon headerCommon) + { + Dictionary? toolIdToHeader; + if (!string.IsNullOrEmpty(headerCommon.RDS)) + { + if (!_RdsToHeaderCommonCollection.TryGetValue(headerCommon.RDS, out toolIdToHeader)) + { + _RdsToHeaderCommonCollection.Add(headerCommon.RDS, new()); + if (!_RdsToHeaderCommonCollection.TryGetValue(headerCommon.RDS, out toolIdToHeader)) + throw new Exception(); + } + if (toolIdToHeader.ContainsKey(headerCommon.ToolTypeID)) + toolIdToHeader[headerCommon.ToolTypeID] = headerCommon; + else + toolIdToHeader.Add(headerCommon.ToolTypeID, headerCommon); + } + } + + private (HeaderCommon?, HeaderCommon?) GetBoth(string rds, long bioRadId, long cdeId) + { + Dictionary? toolIdToHeader; + if (!_RdsToHeaderCommonCollection.TryGetValue(rds, out toolIdToHeader)) + { + _RdsToHeaderCommonCollection.Add(rds, new()); + if (!_RdsToHeaderCommonCollection.TryGetValue(rds, out toolIdToHeader)) + throw new Exception(); + } + _ = toolIdToHeader.TryGetValue(cdeId, out HeaderCommon? cdeHeader); + _ = toolIdToHeader.TryGetValue(bioRadId, out HeaderCommon? bioRadHeader); + return new(bioRadHeader, cdeHeader); + } + + private static Pinned? GetPinned(IMetrologyRepository metrologyRepository, HeaderCommon headerCommon, int points, int column) + { + Pinned? result; + List values; + System.Data.DataTable dataTable = metrologyRepository.GetData((int)headerCommon.ToolTypeID, headerCommon.ID); + if (dataTable.Rows.Count <= points || dataTable.Columns.Count <= column) + result = null; + else + { + values = new(); + for (int i = 0; i < dataTable.Rows.Count - 1; i++) + { + if (dataTable.Rows[i]?.ItemArray[column] is null) + break; + values.Add(string.Concat(dataTable.Rows[i].ItemArray[column])); + } + if (values.Count <= points) + result = null; + else + result = new(headerCommon, values); + } + return result; + } + + Result IPinRepository.GetPinnedTable(IMetrologyRepository metrologyRepository, int id, string? biorad_id, string? cde_id, string? rds) + { + Result? r; + if (!string.IsNullOrEmpty(_MockRoot)) + { + string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), "GetPinnedTableApi.json")); + r = JsonSerializer.Deserialize>(json); + if (r is null) + throw new NullReferenceException(nameof(r)); + } + else + { + if (string.IsNullOrEmpty(rds) || !long.TryParse(biorad_id, out long bioRadId) || !long.TryParse(cde_id, out long cdeId)) + r = new() { Results = Array.Empty(), TotalRows = 0 }; + else + { + const int points = 9; + List results = new(); + (HeaderCommon? bioRadHeader, HeaderCommon? cdeHeader) = GetBoth(rds, bioRadId, cdeId); + if (bioRadHeader is not null) + { + const int thickness = 5; + Pinned? pinned = GetPinned(metrologyRepository, bioRadHeader, points, column: thickness); + if (pinned is not null) + results.Add(pinned); + } + if (cdeHeader is not null) + { + const int rs = 6; + Pinned? pinned = GetPinned(metrologyRepository, cdeHeader, points, column: rs); + if (pinned is not null) + results.Add(pinned); + } + r = new() + { + Results = results.ToArray(), + TotalRows = results.Count, + }; + } + } + return r; + } + +} \ No newline at end of file diff --git a/Server/Repositories/ServiceShopOrderRepository.cs b/Server/Repositories/ServiceShopOrderRepository.cs new file mode 100644 index 0000000..3267236 --- /dev/null +++ b/Server/Repositories/ServiceShopOrderRepository.cs @@ -0,0 +1,56 @@ +using OI.Metrology.Shared.Models.Stateless; +using OI.Metrology.Shared.ViewModels; +using Serilog.Context; +using System.Text.Json; + +namespace OI.Metrology.Server.Repository; + +public class ServiceShopOrderRepository : IServiceShopOrderRepository +{ + + private readonly Serilog.ILogger _Log; + + public ServiceShopOrderRepository() => _Log = Serilog.Log.ForContext(); + + private static ServiceShopOrder[] GetServiceShopOrders(Shared.Models.ServiceShop? serviceShop) + { + ServiceShopOrder[] result = IServiceShopOrder.GetServiceShopOrders(serviceShop); + return result; + } + + private static Shared.Models.ServiceShop? GetServiceShopOrders() + { + Shared.Models.ServiceShop? result; + string jsonFile; + string checkDirectory = Path.Combine(AppContext.BaseDirectory, "Data/Mike"); + if (Directory.Exists(checkDirectory)) + jsonFile = Path.Combine(checkDirectory, "service-shop.json"); + else + jsonFile = Path.Combine(AppContext.BaseDirectory, "service-shop.json"); + string json = File.ReadAllText(jsonFile); + result = JsonSerializer.Deserialize(json); + return result; + } + + async Task IServiceShopOrderRepository.GetAllServiceShopOrders() + { + ServiceShopOrder[] results; + string? methodName = IMethodName.GetActualAsyncMethodName(); + using (LogContext.PushProperty("MethodName", methodName)) + { + _Log.Debug("() => ..."); + Shared.Models.ServiceShop? serviceShop = await Task.Run(GetServiceShopOrders); + results = GetServiceShopOrders(serviceShop); + } + return results.ToArray(); + } + + async Task IServiceShopOrderRepository.GetServiceShopOrders(string id) + { + ServiceShopOrder[] results; + Shared.Models.ServiceShop? serviceShop = await Task.Run(GetServiceShopOrders); + results = GetServiceShopOrders(serviceShop).Where(l => l.Id == id).ToArray(); + return results; + } + +} \ No newline at end of file diff --git a/Server/Repositories/ToolTypesRepository.cs b/Server/Repositories/ToolTypesRepository.cs new file mode 100644 index 0000000..916113c --- /dev/null +++ b/Server/Repositories/ToolTypesRepository.cs @@ -0,0 +1,340 @@ +using OI.Metrology.Shared.DataModels; +using OI.Metrology.Shared.Models.Stateless; +using OI.Metrology.Shared.Services; +using System.Data; +using System.Text; +using System.Text.Json; + +namespace OI.Metrology.Server.Repository; + +public class ToolTypesRepository : IToolTypesRepository +{ + + private readonly string _MockRoot; + private readonly Serilog.ILogger _Log; + + public ToolTypesRepository(string mockRoot) + { + _MockRoot = mockRoot; + _Log = Serilog.Log.ForContext(); + } + + // Get a list of tooltypes, returns just Name and ID + Result IToolTypesRepository.Index(IMetrologyRepository metrologyRepository) + { + Result? r; + if (!string.IsNullOrEmpty(_MockRoot)) + { + string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), "IndexApi.json")); + r = JsonSerializer.Deserialize>(json); + if (r is null) + throw new NullReferenceException(nameof(r)); + } + else + { + ToolTypeNameId[] toolTypeNameIdCollection = metrologyRepository.GetToolTypes().Select(tt => new ToolTypeNameId() { ToolTypeName = tt.ToolTypeName, ID = tt.ID }).ToArray(); + r = new() + { + Results = toolTypeNameIdCollection, + TotalRows = toolTypeNameIdCollection.Length, + }; + } + return r; + } + + // Gets the metadata for a tooltype, accepts a parameter which sorts the results + // This is used to setup the grid displays on the UI + Result IToolTypesRepository.GetToolTypeMetadata(IMetrologyRepository metrologyRepository, int id, string sortby) + { + Result? r; + if (!string.IsNullOrEmpty(_MockRoot)) + { + string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), "GetToolTypeMetadataApi.json")); + r = JsonSerializer.Deserialize>(json); + if (r is null) + throw new NullReferenceException(nameof(r)); + } + else + { + ToolType tt = metrologyRepository.GetToolTypeByID(id); + IEnumerable md = metrologyRepository.GetToolTypeMetadataByToolTypeID(id); + + if (string.Equals(sortby, "grid", StringComparison.OrdinalIgnoreCase)) + md = md.OrderBy(f => f.GridDisplayOrder).ToList(); + if (string.Equals(sortby, "table", StringComparison.OrdinalIgnoreCase)) + md = md.OrderBy(f => f.GridDisplayOrder).ToList(); + + ToolTypeMetadataResult toolTypeMetadataResult = new(tt, md.ToArray()); + int totalRows = toolTypeMetadataResult.Metadata is not null ? toolTypeMetadataResult.Metadata.Length : 0; + r = new() + { + Results = toolTypeMetadataResult, + TotalRows = totalRows, + }; + } + return r; + } + + // Gets headers, request/response format is to allow paging with igniteUI + // The headerid parameter is used for navigating directly to a header, when the button is clicked in Awaiting Dispo + Result IToolTypesRepository.GetHeaders(IMetrologyRepository metrologyRepository, int id, DateTime? datebegin, DateTime? dateend, int? page, int? pagesize, long? headerid) + { + Result? r; + if (!string.IsNullOrEmpty(_MockRoot)) + { + string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), "GetHeadersApi.json")); + r = Newtonsoft.Json.JsonConvert.DeserializeObject>(json); + if (r is null) + throw new NullReferenceException(nameof(r)); + } + else + { + long totalRecs; + DataTable dataTable = metrologyRepository.GetHeaders(id, datebegin, dateend, page, pagesize, headerid, out totalRecs); + r = new() + { + Results = dataTable, + TotalRows = totalRecs, + }; + } + return r; + } + + // Gets header titles, used in the Run Headers UI + Result IToolTypesRepository.GetHeaderTitles(IMetrologyRepository metrologyRepository, int id, int? page, int? pagesize) + { + Result? r; + if (!string.IsNullOrEmpty(_MockRoot)) + { + string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), "GetHeaderTitlesApi.json")); + r = JsonSerializer.Deserialize>(json); + if (r is null) + throw new NullReferenceException(nameof(r)); + } + else + { + long totalRecs; + int? toolTypeId = id > -1 ? id : null; + HeaderCommon[] headerCommonCollection = metrologyRepository.GetHeaderTitles(toolTypeId, page, pagesize, out totalRecs).ToArray(); + r = new() + { + Results = headerCommonCollection, + TotalRows = totalRecs, + }; + } + return r; + } + + // Get all of the fields for a header, used with the Run Header UI + Result IToolTypesRepository.GetHeaderFields(IMetrologyRepository metrologyRepository, int id, long headerid) + { + Result? r; + if (!string.IsNullOrEmpty(_MockRoot)) + { + string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), "GetHeaderFieldsApi.json")); + r = JsonSerializer.Deserialize>(json); + if (r is null) + throw new NullReferenceException(nameof(r)); + } + else + { + ColumnValue[] columnValueCollection = metrologyRepository.GetHeaderFields(id, headerid).Select(x => new ColumnValue() { Column = x.Key, Value = x.Value }).ToArray(); + r = new() + { + Results = columnValueCollection, + TotalRows = columnValueCollection.Length, + }; + } + return r; + } + + // Get the data for a header, used with the Run Info UI + Result IToolTypesRepository.GetData(IMetrologyRepository metrologyRepository, int id, long headerid) + { + Result? r; + if (!string.IsNullOrEmpty(_MockRoot)) + { + string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), "GetDataApi.json")); + r = Newtonsoft.Json.JsonConvert.DeserializeObject>(json); + if (r is null) + throw new NullReferenceException(nameof(r)); + } + else + { + DataTable dataTable = metrologyRepository.GetData(id, headerid); + r = new() + { + Results = dataTable, + TotalRows = dataTable.Rows.Count, + }; + } + return r; + } + + // Display an attachment, used for Run Info - note it is by tool type ID and attachment GUID, so it is best for internal use + (string?, string?, Stream?) IToolTypesRepository.GetAttachment(IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService, int toolTypeId, string tabletype, string attachmentId, string filename) + { + Stream? stream = null; + string? message = null; + Guid attachmentIdParsed; + string? contenttype = null; + ToolType tt = metrologyRepository.GetToolTypeByID(toolTypeId); + bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase); + if (!Guid.TryParse(attachmentId, out attachmentIdParsed)) + message = "Invalid attachment id"; + else + { + try + { + // figure out what content type to use. this is very simple because there are only two types being used + contenttype = "application/pdf"; + if (filename.ToLower().TrimEnd().EndsWith(".txt")) + contenttype = "text/plain"; + // Get attachment stream and feed it to the client + stream = attachmentsService.GetAttachmentStreamByAttachmentId(tt, header, attachmentIdParsed, filename); + } + catch (Exception ex) { message = ex.Message; } + } + return new(message, contenttype, stream); + } + + // This endpoint triggers writing of the OI Export file + Exception? IToolTypesRepository.OIExport(IMetrologyRepository metrologyRepository, string oiExportPath, int toolTypeId, long headerid) + { + Exception? result = null; + // Call the export stored procedure + _Log.Debug($"Exporting to <{oiExportPath}>"); + DataSet ds = metrologyRepository.GetOIExportData(toolTypeId, headerid); + try + { + // The SP must return 3 result tables + if (ds.Tables.Count != 3) + throw new Exception("Error exporting, invalid results"); + // The first table has just one row, which is the export filename + if (ds.Tables[0].Rows.Count != 1) + throw new Exception("Error exporting, invalid filename"); + string? filename = Convert.ToString(ds.Tables[0].Rows[0][0]); + // The second table has the header data + if (ds.Tables[1].Rows.Count != 1) + throw new Exception("Error exporting, invalid header data"); + StringBuilder sb = new(); + foreach (object? o in ds.Tables[1].Rows[0].ItemArray) + { + if ((o is not null) && (!Convert.IsDBNull(o))) + _ = sb.Append(Convert.ToString(o)); + _ = sb.Append('\t'); + } + // The third table has the detail data + foreach (DataRow dr in ds.Tables[2].Rows) + { + foreach (object? o in dr.ItemArray) + { + if ((o is not null) && (!Convert.IsDBNull(o))) + _ = sb.Append(Convert.ToString(o)); + _ = sb.Append('\t'); + } + } + _ = sb.AppendLine(); + // The output file will only have one line, the header columns are output first + // Then each detail rows has it's columns appended + // H1, H2, H3, D1.1, D1.2, D1.3, D2.1, D2.2, D2.3, etc + // Write the file + File.WriteAllText(Path.Join(oiExportPath, filename), sb.ToString()); + } + catch (Exception ex) { result = ex; } + return result; + } + + Result IToolTypesRepository.GetExportData(IMetrologyRepository metrologyRepository, int toolTypeId, DateTime? datebegin, DateTime? dateend) + { + Result? r; + if (!string.IsNullOrEmpty(_MockRoot)) + { + string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), "GetExportDataApi.json")); + r = Newtonsoft.Json.JsonConvert.DeserializeObject>(json); + if (r is null) + throw new NullReferenceException(nameof(r)); + } + else + { + dateend ??= DateTime.Now; + datebegin ??= dateend.Value.AddMonths(-1); + ToolType tt = metrologyRepository.GetToolTypeByID(toolTypeId); + if (string.IsNullOrEmpty(tt.ExportSPName)) + throw new NullReferenceException(nameof(tt.ExportSPName)); + DataTable dataTable = metrologyRepository.ExportData(tt.ExportSPName, datebegin.Value, dateend.Value); + r = new() + { + Results = dataTable, + TotalRows = dataTable.Rows.Count, + }; + } + return r; + } + + protected static string GetRowData(DataRow dr) + { + StringBuilder result = new(); + for (int i = 0; i < dr.Table.Columns.Count; i++) + { + if (i > 0) + _ = result.Append(','); + object v = dr[i]; + if (v is not null && !Convert.IsDBNull(v)) + _ = result.Append(FormatForCSV(string.Concat(Convert.ToString(v)))); + } + return result.ToString(); + } + + protected static string GetColumnHeaders(DataTable dataTable) + { + StringBuilder result = new(); + for (int i = 0; i < dataTable.Columns.Count; i++) + { + if (i > 0) + _ = result.Append(','); + _ = result.Append(FormatForCSV(dataTable.Columns[i].ColumnName.TrimEnd('_'))); + } + return result.ToString(); + } + + protected static string FormatForCSV(string v) + { + StringBuilder result = new(v.Length + 2); + bool doubleQuoted = false; + if (v.StartsWith(' ') || v.EndsWith(' ') || v.Contains(',') || v.Contains('"')) + { + _ = result.Append('"'); + doubleQuoted = true; + } + foreach (char c in v) + { + _ = c switch + { + '\r' or '\n' => result.Append(' '), + '"' => result.Append("\"\""), + _ => result.Append(c), + }; + } + if (doubleQuoted) + _ = result.Append('"'); + return result.ToString(); + } + + byte[] IToolTypesRepository.GetCSVExport(IMetrologyRepository metrologyRepository, int toolTypeId, DateTime? datebegin, DateTime? dateend) + { + byte[] results; + Result result; + IToolTypesRepository repository = this; + result = repository.GetExportData(metrologyRepository, toolTypeId, datebegin, dateend); + if (result.Results is null) + throw new NullReferenceException(nameof(result.Results)); + StringBuilder stringBuilder = new(); + _ = stringBuilder.AppendLine(GetColumnHeaders(result.Results)); + foreach (DataRow dr in result.Results.Rows) + _ = stringBuilder.AppendLine(GetRowData(dr)); + results = Encoding.UTF8.GetBytes(stringBuilder.ToString()); + return results; + } + +} \ No newline at end of file diff --git a/Viewer/Services/AttachmentsService.cs b/Server/Services/AttachmentsService.cs similarity index 70% rename from Viewer/Services/AttachmentsService.cs rename to Server/Services/AttachmentsService.cs index cb5f4bc..e6baeff 100644 --- a/Viewer/Services/AttachmentsService.cs +++ b/Server/Services/AttachmentsService.cs @@ -1,32 +1,32 @@ -using System; -using System.Globalization; -using System.IO; +using System.Globalization; -namespace OI.Metrology.Viewer.Services; +namespace OI.Metrology.Server.Services; +using OI.Metrology.Server.Models; using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Services; -using OI.Metrology.Viewer.Models; public class AttachmentsService : IAttachmentsService { private readonly AppSettings _AppSettings; + private readonly IMetrologyRepository _MetrologyRepository; - private readonly IMetrologyRepo _Repo; - - public AttachmentsService(AppSettings appSettings, IMetrologyRepo repo) + public AttachmentsService(AppSettings appSettings, IMetrologyRepository metrologyRepository) { _AppSettings = appSettings; - _Repo = repo; + _MetrologyRepository = metrologyRepository; } - protected Stream GetAttachmentStream(string tableName, Guid attachmentId, string filename) + protected Stream GetAttachmentStream(string? tableName, Guid attachmentId, string filename) { if (attachmentId.Equals(Guid.Empty)) throw new Exception("No attachments found"); - DateTime insertDate = Convert.ToDateTime(_Repo.GetAttachmentInsertDateByGUID(tableName, attachmentId)); + if (tableName is null) + throw new NullReferenceException(nameof(tableName)); + + DateTime insertDate = Convert.ToDateTime(_MetrologyRepository.GetAttachmentInsertDateByGUID(tableName, attachmentId)); int year = insertDate.Year; DateTime d = insertDate; CultureInfo cul = CultureInfo.CurrentCulture; @@ -50,28 +50,28 @@ public class AttachmentsService : IAttachmentsService public Stream GetAttachmentStreamByTitle(ToolType toolType, bool header, string title, string filename) { - if (toolType == null) + if (toolType is null) throw new Exception("Invalid tool type"); Guid attachmentId; - string tableName; + string? tableName; if (header) { tableName = toolType.HeaderTableName; - attachmentId = _Repo.GetHeaderAttachmentIDByTitle(toolType.ID, title); + attachmentId = _MetrologyRepository.GetHeaderAttachmentIDByTitle(toolType.ID, title); } else { tableName = toolType.DataTableName; - attachmentId = _Repo.GetDataAttachmentIDByTitle(toolType.ID, title); + attachmentId = _MetrologyRepository.GetDataAttachmentIDByTitle(toolType.ID, title); } return GetAttachmentStream(tableName, attachmentId, filename); } public Stream GetAttachmentStreamByAttachmentId(ToolType toolType, bool header, Guid attachmentId, string filename) { - if (toolType == null) + if (toolType is null) throw new Exception("Invalid tool type"); - string tableName; + string? tableName; if (header) tableName = toolType.HeaderTableName; else @@ -79,27 +79,27 @@ public class AttachmentsService : IAttachmentsService return GetAttachmentStream(tableName, attachmentId, filename); } - private void SaveAttachment(ToolType toolType, long headerId, string dataUniqueId, string filename, Microsoft.AspNetCore.Http.IFormFile uploadedFile) + private void SaveAttachment(ToolType toolType, long headerId, string dataUniqueId, string filename, IFormFile uploadedFile) { - if (toolType == null) + if (toolType is null) throw new Exception("Invalid tool type"); - using System.Transactions.TransactionScope trans = _Repo.StartTransaction(); + using System.Transactions.TransactionScope trans = _MetrologyRepository.StartTransaction(); Guid attachmentId = Guid.Empty; DateTime insertDate = new(); - string tableName = ""; + string? tableName = ""; if (string.IsNullOrWhiteSpace(dataUniqueId)) { - attachmentId = _Repo.GetHeaderAttachmentID(toolType.ID, headerId); - insertDate = Convert.ToDateTime(_Repo.GetHeaderInsertDate(toolType.ID, headerId)); + attachmentId = _MetrologyRepository.GetHeaderAttachmentID(toolType.ID, headerId); + insertDate = Convert.ToDateTime(_MetrologyRepository.GetHeaderInsertDate(toolType.ID, headerId)); tableName = toolType.HeaderTableName; } else { - attachmentId = _Repo.GetDataAttachmentID(toolType.ID, headerId, dataUniqueId); - insertDate = Convert.ToDateTime(_Repo.GetDataInsertDate(toolType.ID, headerId, dataUniqueId)); + attachmentId = _MetrologyRepository.GetDataAttachmentID(toolType.ID, headerId, dataUniqueId); + insertDate = Convert.ToDateTime(_MetrologyRepository.GetDataInsertDate(toolType.ID, headerId, dataUniqueId)); // Get Date for new directory name tableName = toolType.DataTableName; @@ -131,7 +131,7 @@ public class AttachmentsService : IAttachmentsService public void SaveAttachment(ToolType toolType, long headerId, string dataUniqueId, string filename, object uploadedFile) { - Microsoft.AspNetCore.Http.IFormFile formFile = (Microsoft.AspNetCore.Http.IFormFile)uploadedFile; + IFormFile formFile = (IFormFile)uploadedFile; SaveAttachment(toolType, headerId, dataUniqueId, filename, formFile); } diff --git a/Viewer/Services/InboundDataService.cs b/Server/Services/InboundDataService.cs similarity index 91% rename from Viewer/Services/InboundDataService.cs rename to Server/Services/InboundDataService.cs index 92ede9b..ba53b4e 100644 --- a/Viewer/Services/InboundDataService.cs +++ b/Server/Services/InboundDataService.cs @@ -1,18 +1,17 @@ using Newtonsoft.Json.Linq; using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; +using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Services; -using System; -using System.Collections.Generic; -using System.Linq; -namespace OI.Metrology.Viewer.Services; +#pragma warning disable CS8600, CS8602, CS8603, CS8604, CS8625 + +namespace OI.Metrology.Server.Services; public class InboundDataService : IInboundDataService { - private readonly IMetrologyRepo _Repo; + private readonly IMetrologyRepository _MetrologyRepository; - public InboundDataService(IMetrologyRepo repo) => _Repo = repo; + public InboundDataService(IMetrologyRepository metrologyRepository) => _MetrologyRepository = metrologyRepository; public long DoSQLInsert(JToken jsonbody, ToolType toolType, List metaData) { @@ -37,11 +36,11 @@ public class InboundDataService : IInboundDataService long headerId = 0; - using (System.Transactions.TransactionScope transScope = _Repo.StartTransaction()) + using (System.Transactions.TransactionScope transScope = _MetrologyRepository.StartTransaction()) { try { - _Repo.PurgeExistingData(toolType.ID, uniqueId); + _MetrologyRepository.PurgeExistingData(toolType.ID, uniqueId); } catch (Exception ex) { @@ -50,7 +49,7 @@ public class InboundDataService : IInboundDataService try { - headerId = _Repo.InsertToolDataJSON(jsonbody, -1, metaData, toolType.HeaderTableName); + headerId = _MetrologyRepository.InsertToolDataJSON(jsonbody, -1, metaData, toolType.HeaderTableName); } catch (Exception ex) { @@ -60,11 +59,11 @@ public class InboundDataService : IInboundDataService int detailrow = 1; try { - if (detailsArray != null) + if (detailsArray is not null) { foreach (JToken detail in detailsArray) { - _ = _Repo.InsertToolDataJSON(detail, headerId, metaData, toolType.DataTableName); + _ = _MetrologyRepository.InsertToolDataJSON(detail, headerId, metaData, toolType.DataTableName); detailrow += 1; } } @@ -133,7 +132,7 @@ public class InboundDataService : IInboundDataService if (jp.First is JArray array) detailsArray = array; - else if ((jp.First is JValue value) && (value.Value == null)) + else if ((jp.First is JValue value) && (value.Value is null)) detailsArray = null; else errors.Add("Invalid details field"); @@ -169,7 +168,7 @@ public class InboundDataService : IInboundDataService } // if a Details container if found, process it by recursion - if (detailsArray != null) + if (detailsArray is not null) { int i = 1; foreach (JToken detail in detailsArray) @@ -189,7 +188,7 @@ public class InboundDataService : IInboundDataService { // get the json data for this container field, ex: Points JProperty contJP = jsonbody.Children().Where(jp => string.Equals(jp.Name, containerField, StringComparison.OrdinalIgnoreCase)).SingleOrDefault(); - if ((contJP != null) && (contJP.Value is JArray array)) + if ((contJP is not null) && (contJP.Value is JArray array)) { JArray contJPArray = array; diff --git a/Viewer/Repositories/SQLDbConnectionFactory.cs b/Server/Services/SQLDbConnectionFactory.cs similarity index 80% rename from Viewer/Repositories/SQLDbConnectionFactory.cs rename to Server/Services/SQLDbConnectionFactory.cs index c69ebb3..ee12b97 100644 --- a/Viewer/Repositories/SQLDbConnectionFactory.cs +++ b/Server/Services/SQLDbConnectionFactory.cs @@ -1,10 +1,11 @@ -using OI.Metrology.Shared.Repositories; -using OI.Metrology.Viewer.Models; -using System; +using OI.Metrology.Server.Models; +using OI.Metrology.Shared.Repositories; using System.Data.Common; using System.Data.SqlClient; -namespace OI.Metrology.Viewer.Repositories; +#pragma warning disable CS8600, CS8602, CS8603, CS8604, CS8625 + +namespace OI.Metrology.Server.Services; public class SQLDbConnectionFactory : IDbConnectionFactory { diff --git a/Viewer/Views/Export/Index.cshtml b/Server/Views/Export/Index.cshtml similarity index 96% rename from Viewer/Views/Export/Index.cshtml rename to Server/Views/Export/Index.cshtml index 5e0263b..1dd8b82 100644 --- a/Viewer/Views/Export/Index.cshtml +++ b/Server/Views/Export/Index.cshtml @@ -47,9 +47,11 @@ diff --git a/Viewer/Views/Pages/Home.cshtml b/Server/Views/Pages/Home.cshtml similarity index 100% rename from Viewer/Views/Pages/Home.cshtml rename to Server/Views/Pages/Home.cshtml diff --git a/Server/Views/Pages/RunHeaders.cshtml b/Server/Views/Pages/RunHeaders.cshtml new file mode 100644 index 0000000..0cc4cac --- /dev/null +++ b/Server/Views/Pages/RunHeaders.cshtml @@ -0,0 +1,57 @@ +@{ + ViewData["Title"] = "Run Headers"; +} + + + +

Run Headers

+ + + + + + +
+ + +
+
+ + + + + + +
+
+
+
+
+ + diff --git a/Server/Views/Pages/RunInfo.cshtml b/Server/Views/Pages/RunInfo.cshtml new file mode 100644 index 0000000..234cfb8 --- /dev/null +++ b/Server/Views/Pages/RunInfo.cshtml @@ -0,0 +1,85 @@ +@model OI.Metrology.Shared.ViewModels.RunInfo +@{ + ViewData["Title"] = "Run Information"; +} + + +

Run Information

+ +
+
+ +
+
+
+ +
+
+
+
+ +
+
+
   +
+ +
   +
+ + +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + + + \ No newline at end of file diff --git a/Viewer/Views/Shared/_Layout.cshtml b/Server/Views/Shared/_Layout.cshtml similarity index 96% rename from Viewer/Views/Shared/_Layout.cshtml rename to Server/Views/Shared/_Layout.cshtml index 871f765..6d02b57 100644 --- a/Viewer/Views/Shared/_Layout.cshtml +++ b/Server/Views/Shared/_Layout.cshtml @@ -21,6 +21,7 @@ + \ No newline at end of file diff --git a/View/Pages/AwaitingDisposition.razor.cs b/View/Pages/AwaitingDisposition.razor.cs new file mode 100644 index 0000000..8b50a60 --- /dev/null +++ b/View/Pages/AwaitingDisposition.razor.cs @@ -0,0 +1,45 @@ +// using IgniteUI.Blazor.Controls; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Logging; +using Microsoft.JSInterop; +using OI.Metrology.View.Models; + +namespace OI.Metrology.View; + +public partial class AwaitingDisposition +{ + + // protected IgbIcon? OpenIconRef { get; set; } + // protected IgbIcon? RefreshIconRef { get; set; } + + [Inject] protected IJSRuntime? JSRuntime { get; set; } + [Inject] protected HttpClient? HttpClient { get; set; } + [Inject] protected AppSettings? AppSettings { get; set; } + [Inject] protected ILogger? Logger { get; set; } + + protected override Task OnAfterRenderAsync(bool firstRender) + { + // if (firstRender && OpenIconRef is not null) + // { + // const string svg = "Jump Down IconA picture showing a bent arrow pointing down towards a line."; + // _ = OpenIconRef.EnsureReady().ContinueWith(new Action((e) => + // OpenIconRef.RegisterIconFromTextAsync("jump-down", svg, "material"))); + // } + // if (firstRender && RefreshIconRef is not null) + // { + // const string svg = "System Update IconA picture depicting a computer screen with a reload symbol in the middle."; + // _ = RefreshIconRef.EnsureReady().ContinueWith(new Action((e) => + // RefreshIconRef.RegisterIconFromTextAsync("system-update", svg, "material"))); + // } + if (firstRender) + { + if (JSRuntime is null) + throw new NullReferenceException(nameof(JSRuntime)); + if (AppSettings is null) + throw new NullReferenceException(nameof(AppSettings)); + return JSRuntime.InvokeVoidAsync("initAwaitingDisposition", AppSettings.ApiUrl).AsTask(); + } + return Task.CompletedTask; + } + +} \ No newline at end of file diff --git a/View/Pages/AwaitingDisposition.razor.css b/View/Pages/AwaitingDisposition.razor.css new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/View/Pages/AwaitingDisposition.razor.css @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/View/Pages/Counter.razor b/View/Pages/Counter.razor new file mode 100644 index 0000000..08b9e8a --- /dev/null +++ b/View/Pages/Counter.razor @@ -0,0 +1,13 @@ +@page "/counter" + +@using Microsoft.AspNetCore.Components.Web + +@namespace OI.Metrology.View.Pages + +Counter + +

Counter - Bye

+ +

Current count: @_CurrentCount

+ + diff --git a/View/Pages/Counter.razor.cs b/View/Pages/Counter.razor.cs new file mode 100644 index 0000000..219f0e5 --- /dev/null +++ b/View/Pages/Counter.razor.cs @@ -0,0 +1,21 @@ +using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Components; + +namespace OI.Metrology.View.Pages; + +public partial class Counter +{ + + [Inject] protected ILogger? Logger { get; set; } + + private int _CurrentCount = 0; + + private void IncrementCount() + { + if (Logger is null) + throw new NullReferenceException(nameof(Logger)); + Logger.LogWarning("Someone has clicked me!"); + _CurrentCount++; + } + +} \ No newline at end of file diff --git a/View/Pages/Export.razor b/View/Pages/Export.razor new file mode 100644 index 0000000..31d7080 --- /dev/null +++ b/View/Pages/Export.razor @@ -0,0 +1,42 @@ +@page "/Export" + +@using MudBlazor +@using Microsoft.AspNetCore.Components.Web +@using OI.Metrology.Shared.DataModels + +@namespace OI.Metrology.View + +Export Data + +

Export Data

+ +
+ +@if (_TimeSpan is null || _DateRange is null || _ToolTypeNameId is null || _ToolTypeNameIdCollection is null) +{ +

Loading...

+} +else +{ + + + + + + + +
+ + @foreach (ToolTypeNameId toolTypeNameId in _ToolTypeNameIdCollection) + { + + } + + + + + + + Download +
+} diff --git a/View/Pages/Export.razor.cs b/View/Pages/Export.razor.cs new file mode 100644 index 0000000..6cd6b64 --- /dev/null +++ b/View/Pages/Export.razor.cs @@ -0,0 +1,80 @@ +using IgniteUI.Blazor.Controls; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Logging; +using Microsoft.JSInterop; +using MudBlazor; +using OI.Metrology.Shared.DataModels; +using OI.Metrology.Shared.Models.Stateless; +using System.Net; +using System.Net.Http.Json; + +namespace OI.Metrology.View; + +public partial class Export +{ + + protected TimeSpan? _TimeSpan; + protected DateRange? _DateRange; + protected ToolTypeNameId? _ToolTypeNameId; + protected ToolTypeNameId[]? _ToolTypeNameIdCollection; + + [Inject] protected HttpClient? HttpClient { get; set; } + [Inject] protected IJSRuntime? JSRuntime { get; set; } + [Inject] protected Models.AppSettings? AppSettings { get; set; } + [Inject] protected ILogger? Logger { get; set; } + + protected Func _ConvertFunc = toolTypeNameId => string.Concat(toolTypeNameId?.ToolTypeName); + + protected override Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + if (JSRuntime is null) + throw new NullReferenceException(nameof(JSRuntime)); + if (AppSettings is null) + throw new NullReferenceException(nameof(AppSettings)); + return JSRuntime.InvokeVoidAsync("initExport", AppSettings.ApiUrl, DateTime.Now.AddMonths(-1), DateTime.Now).AsTask(); + } + return Task.CompletedTask; + } + + protected override async Task OnInitializedAsync() + { + _ToolTypeNameId ??= new(); + _TimeSpan ??= new TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, 00); + _DateRange ??= new DateRange(DateTime.Now.AddMonths(-1).Date, DateTime.Now.Date); + if (Logger is null) + throw new NullReferenceException(nameof(Logger)); + if (HttpClient is null) + throw new NullReferenceException(nameof(HttpClient)); + string controllerName = IToolTypesController.GetRouteName(); + try + { + Result? result = await HttpClient.GetFromJsonAsync>($"api/{controllerName}"); + if (result is not null) + _ToolTypeNameIdCollection = result.Results; + } + catch (Exception) + { + string json = await HttpClient.GetStringAsync($"api/{controllerName}"); + Logger.LogInformation(message: json); + } + } + + protected async Task DownloadAsync() + { + if (JSRuntime is null) + throw new NullReferenceException(nameof(JSRuntime)); + if (HttpClient is null) + throw new NullReferenceException(nameof(HttpClient)); + if (_TimeSpan is null || _DateRange is null || _ToolTypeNameId is null || _ToolTypeNameIdCollection is null || _ToolTypeNameId.ToolTypeName is null || _DateRange.Start is null || _DateRange.End is null) + return; + string controllerName = IToolTypesController.GetRouteName(); + string endTime = _DateRange.End.Value.AddTicks(_TimeSpan.Value.Ticks).ToString(); + string startTime = _DateRange.Start.Value.AddTicks(_TimeSpan.Value.Ticks).ToString(); + string fileName = $"Export_{_ToolTypeNameId.ToolTypeName}_{startTime:yyyyMMddHHmm}_to_{endTime:yyyyMMddHHmm}.csv"; + string query = $"datebegin={startTime:MM/dd/yyyy hh:mm tt}&dateend={endTime:MM/dd/yyyy hh:mm tt}&filename={WebUtility.UrlEncode(fileName)}"; + await JSRuntime.InvokeVoidAsync("triggerFileDownload", fileName, $"{HttpClient.BaseAddress}api/{controllerName}/{_ToolTypeNameId.ID}/csv?{query}"); + } + +} \ No newline at end of file diff --git a/View/Pages/Export.razor.css b/View/Pages/Export.razor.css new file mode 100644 index 0000000..70cadcc --- /dev/null +++ b/View/Pages/Export.razor.css @@ -0,0 +1,4 @@ +td { + padding-bottom: 2em; + padding-right: 1em; +} diff --git a/View/Pages/Index.razor b/View/Pages/Index.razor new file mode 100644 index 0000000..6f73a56 --- /dev/null +++ b/View/Pages/Index.razor @@ -0,0 +1,15 @@ +@page "/index" + +@using Microsoft.AspNetCore.Components.Web +@using IgniteUI.Blazor.Controls + +@namespace OI.Metrology.View + +Index + + + + + + Start Slot + diff --git a/View/Pages/Index.razor.cs b/View/Pages/Index.razor.cs new file mode 100644 index 0000000..60d6342 --- /dev/null +++ b/View/Pages/Index.razor.cs @@ -0,0 +1,32 @@ +using IgniteUI.Blazor.Controls; +using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; + +namespace OI.Metrology.View; + +public partial class Index +{ + + [Inject] protected IJSRuntime? JSRuntime { get; set; } + + protected IgbIcon? BrushIconRef { get; set; } + + protected override Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender && BrushIconRef is not null) + { + string refreshIcon = ""; + string brushIcon = "Brush IconA picture showing a painting brush."; + _ = BrushIconRef.EnsureReady().ContinueWith(new Action((e) => + BrushIconRef.RegisterIconFromTextAsync("brush", brushIcon, "material"))); + } + if (firstRender) + { + if (JSRuntime is null) + throw new NullReferenceException(nameof(JSRuntime)); + return JSRuntime.InvokeVoidAsync("initIndex").AsTask(); + } + return Task.CompletedTask; + } + +} \ No newline at end of file diff --git a/View/Pages/RunHeaders.razor b/View/Pages/RunHeaders.razor new file mode 100644 index 0000000..02fda83 --- /dev/null +++ b/View/Pages/RunHeaders.razor @@ -0,0 +1,40 @@ +@page "/RunHeaders" + +@using Microsoft.AspNetCore.Components.Web + +@namespace OI.Metrology.View + +Run Headers + +

Run Headers

+ + + + + + +
+ + +
+
+ + + + + + +
+
+
+
+
+ +
+
+ +
+
+ +
+
\ No newline at end of file diff --git a/View/Pages/RunHeaders.razor.cs b/View/Pages/RunHeaders.razor.cs new file mode 100644 index 0000000..412adfc --- /dev/null +++ b/View/Pages/RunHeaders.razor.cs @@ -0,0 +1,34 @@ +using IgniteUI.Blazor.Controls; +using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; + +namespace OI.Metrology.View; + +public partial class RunHeaders +{ + + protected IgbIcon? IconRef { get; set; } + + [Inject] protected IJSRuntime? JSRuntime { get; set; } + [Inject] protected Models.AppSettings? AppSettings { get; set; } + + protected override Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender && IconRef is not null) + { + const string buildIcon = ""; + _ = IconRef.EnsureReady().ContinueWith(new Action((e) => + IconRef.RegisterIconFromTextAsync("build", buildIcon, "material"))); + } + if (firstRender) + { + if (JSRuntime is null) + throw new NullReferenceException(nameof(JSRuntime)); + if (AppSettings is null) + throw new NullReferenceException(nameof(AppSettings)); + return JSRuntime.InvokeVoidAsync("initRunHeaders", AppSettings.ApiUrl).AsTask(); + } + return Task.CompletedTask; + } + +} \ No newline at end of file diff --git a/View/Pages/RunHeaders.razor.css b/View/Pages/RunHeaders.razor.css new file mode 100644 index 0000000..90731f1 --- /dev/null +++ b/View/Pages/RunHeaders.razor.css @@ -0,0 +1,17 @@ +html, +body { + height: 100%; +} + +div.container-fluid { + height: 90%; +} + +#HeaderGrid, +#FieldsGrid { + font-size: 12px; +} + +.FieldTitle { + font-weight: bold; +} diff --git a/View/Pages/RunInfo.razor b/View/Pages/RunInfo.razor new file mode 100644 index 0000000..9b71385 --- /dev/null +++ b/View/Pages/RunInfo.razor @@ -0,0 +1,69 @@ +@page "/RunInfo/{ToolTypeId:int?}/{HeaderId:int?}" + +@using Microsoft.AspNetCore.Components.Web + +@namespace OI.Metrology.View + +Run Info + +

Run Information

+ +
+
+ +
+
+
+ +
+
+
+
+ +
+
+
   +
+ +
   +
+ + +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ + \ No newline at end of file diff --git a/View/Pages/RunInfo.razor.cs b/View/Pages/RunInfo.razor.cs new file mode 100644 index 0000000..6d0d817 --- /dev/null +++ b/View/Pages/RunInfo.razor.cs @@ -0,0 +1,41 @@ +using IgniteUI.Blazor.Controls; +using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; + +namespace OI.Metrology.View; + +public partial class RunInfo +{ + + protected IgbIcon? IconRef { get; set; } + + [Parameter] public int? HeaderId { get; set; } + [Parameter] public int? ToolTypeId { get; set; } + + [Inject] protected IJSRuntime? JSRuntime { get; set; } + [Inject] protected Models.AppSettings? AppSettings { get; set; } + + protected override Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender && IconRef is not null) + { + const string buildIcon = ""; + _ = IconRef.EnsureReady().ContinueWith(new Action((e) => + IconRef.RegisterIconFromTextAsync("build", buildIcon, "material"))); + } + if (firstRender) + { + if (JSRuntime is null) + throw new NullReferenceException(nameof(JSRuntime)); + if (AppSettings is null) + throw new NullReferenceException(nameof(AppSettings)); + Metrology.Shared.ViewModels.RunInfo? model = null; + int initialHeaderId = model is not null ? model.HeaderID : HeaderId is not null ? HeaderId.Value : 0; + string initialHeaderAttachmentId = model is not null ? model.HeaderAttachmentID.ToString() : string.Empty; + int initialToolTypeID = model is not null ? model.ToolTypeID : ToolTypeId is not null ? ToolTypeId.Value : 1; + return JSRuntime.InvokeVoidAsync("initRunInfo", AppSettings.ApiUrl, initialToolTypeID, initialHeaderId, initialHeaderAttachmentId).AsTask(); + } + return Task.CompletedTask; + } + +} \ No newline at end of file diff --git a/View/Pages/RunInfo.razor.css b/View/Pages/RunInfo.razor.css new file mode 100644 index 0000000..97214de --- /dev/null +++ b/View/Pages/RunInfo.razor.css @@ -0,0 +1,8 @@ +#HeaderGridDiv, +#DetailsGridDiv { + font-size: 12px; +} +p { + color: red; + background-color: aqua; +} \ No newline at end of file diff --git a/View/Shared/MainLayout.razor b/View/Shared/MainLayout.razor new file mode 100644 index 0000000..665dbdb --- /dev/null +++ b/View/Shared/MainLayout.razor @@ -0,0 +1,58 @@ +@inherits LayoutComponentBase +@namespace OI.Metrology.View.Shared +@using MudBlazor + + + + + + + + +
+ @Body +
+
+ @if (AppSettings is not null && AppSettings.IsDevelopment) + { + + } +

© @DateTime.Now.Year - Infineon Technologies

+ @if (AppSettings is not null && AppSettings.IsDevelopment) + { +

Request ID:@_RequestId

+ } +
+
+
+ +
diff --git a/View/Shared/MainLayout.razor.cs b/View/Shared/MainLayout.razor.cs new file mode 100644 index 0000000..7d7bdf7 --- /dev/null +++ b/View/Shared/MainLayout.razor.cs @@ -0,0 +1,48 @@ +using Microsoft.AspNetCore.Components; +using MudBlazor; +using System.Diagnostics; + +namespace OI.Metrology.View.Shared; + +public partial class MainLayout +{ + + private bool _IsDarkMode; + private string? _Database; + private string? _RequestId; + private MudTheme? _MyCustomTheme; + private MudThemeProvider? _MudThemeProvider; + + [Inject] protected Models.AppSettings? AppSettings { get; set; } + // [Inject] protected IHttpContextAccessor? HttpContextAccessor { get; set; } + + protected override void OnParametersSet() + { + base.OnParametersSet(); + _Database = AppSettings is not null && !AppSettings.IsDevelopment ? "test-database" : "prod-database"; + _RequestId = Activity.Current?.Id ?? string.Empty; // HttpContextAccessor?.HttpContext?.TraceIdentifier; + _MyCustomTheme = new MudTheme() + { + Palette = new Palette() + { + Primary = "#478f7c", + Secondary = "#AB377A", + Success = "#AEC067", + Info = "#928285", + Warning = "#F07F3C", + Error = "#E30034", + AppbarBackground = "#478f7c", + }, + }; + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender && _MudThemeProvider is not null && _MyCustomTheme is not null) + { + _IsDarkMode = await _MudThemeProvider.GetSystemPreference(); + StateHasChanged(); + } + } + +} \ No newline at end of file diff --git a/View/Shared/MainLayout.razor.css b/View/Shared/MainLayout.razor.css new file mode 100644 index 0000000..551e4b2 --- /dev/null +++ b/View/Shared/MainLayout.razor.css @@ -0,0 +1,70 @@ +.page { + position: relative; + display: flex; + flex-direction: column; +} + +main { + flex: 1; +} + +.sidebar { + background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); +} + +.top-row { + background-color: #f7f7f7; + border-bottom: 1px solid #d6d5d5; + justify-content: flex-end; + height: 3.5rem; + display: flex; + align-items: center; +} + + .top-row ::deep a, .top-row .btn-link { + white-space: nowrap; + margin-left: 1.5rem; + } + + .top-row a:first-child { + overflow: hidden; + text-overflow: ellipsis; + } + +@media (max-width: 640.98px) { + .top-row:not(.auth) { + display: none; + } + + .top-row.auth { + justify-content: space-between; + } + + .top-row a, .top-row .btn-link { + margin-left: 0; + } +} + +@media (min-width: 641px) { + .page { + flex-direction: row; + } + + .sidebar { + width: 250px; + height: 100vh; + position: sticky; + top: 0; + } + + .top-row { + position: sticky; + top: 0; + z-index: 1; + } + + .top-row, article { + padding-left: 2rem !important; + padding-right: 1.5rem !important; + } +} diff --git a/View/Shared/NavMenu.razor b/View/Shared/NavMenu.razor new file mode 100644 index 0000000..c430c72 --- /dev/null +++ b/View/Shared/NavMenu.razor @@ -0,0 +1,44 @@ +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Routing + +@namespace OI.Metrology.View.Shared + + + + + +@code { + private bool collapseNavMenu = true; + + private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null; + + private void ToggleNavMenu() + { + collapseNavMenu = !collapseNavMenu; + } +} diff --git a/View/Shared/NavMenu.razor.cs b/View/Shared/NavMenu.razor.cs new file mode 100644 index 0000000..3d92244 --- /dev/null +++ b/View/Shared/NavMenu.razor.cs @@ -0,0 +1,4 @@ +namespace OI.Metrology.View.Shared; + +public partial class NavMenu +{ } \ No newline at end of file diff --git a/View/Shared/NavMenu.razor.css b/View/Shared/NavMenu.razor.css new file mode 100644 index 0000000..604b7a1 --- /dev/null +++ b/View/Shared/NavMenu.razor.css @@ -0,0 +1,68 @@ +.navbar-toggler { + background-color: rgba(255, 255, 255, 0.1); +} + +.top-row { + height: 3.5rem; + background-color: rgba(0,0,0,0.4); +} + +.navbar-brand { + font-size: 1.1rem; +} + +.oi { + width: 2rem; + font-size: 1.1rem; + vertical-align: text-top; + top: -2px; +} + +.nav-item { + font-size: 0.9rem; + padding-bottom: 0.5rem; +} + + .nav-item:first-of-type { + padding-top: 1rem; + } + + .nav-item:last-of-type { + padding-bottom: 1rem; + } + + .nav-item ::deep a { + color: #d7d7d7; + border-radius: 4px; + height: 3rem; + display: flex; + align-items: center; + line-height: 3rem; + } + +.nav-item ::deep a.active { + background-color: rgba(255,255,255,0.25); + color: white; +} + +.nav-item ::deep a:hover { + background-color: rgba(255,255,255,0.1); + color: white; +} + +@media (min-width: 641px) { + .navbar-toggler { + display: none; + } + + .collapse { + /* Never collapse the sidebar for wide screens */ + display: block; + } + + .nav-scrollable { + /* Allow sidebar to scroll for tall menus */ + height: calc(100vh - 3.5rem); + overflow-y: auto; + } +} diff --git a/Viewer/.vscode/tasks.json b/Viewer/.vscode/tasks.json deleted file mode 100644 index ecc8e45..0000000 --- a/Viewer/.vscode/tasks.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/Archive.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/Archive.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "--project", - "${workspaceFolder}/Archive.csproj" - ], - "problemMatcher": "$msCompile" - } - ] -} \ No newline at end of file diff --git a/Viewer/ApiControllers/InboundController.cs b/Viewer/ApiControllers/InboundController.cs deleted file mode 100644 index 9bd3ca6..0000000 --- a/Viewer/ApiControllers/InboundController.cs +++ /dev/null @@ -1,168 +0,0 @@ -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; -using Newtonsoft.Json.Linq; -using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; -using OI.Metrology.Shared.Services; -using OI.Metrology.Viewer.Models; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace OI.Metrology.Viewer.ApiContollers; - -[ApiController] -public class InboundController : ControllerBase -{ - - private readonly ILogger _Logger; - private readonly IMetrologyRepo _Repo; - private readonly AppSettings _AppSettings; - private readonly IAttachmentsService _AttachmentService; - private readonly IInboundDataService _InboundDataService; - - public InboundController(AppSettings appSettings, ILogger logger, IMetrologyRepo repo, IInboundDataService inboundDataService, IAttachmentsService attachmentService) - { - _Repo = repo; - _Logger = logger; - _AppSettings = appSettings; - _AttachmentService = attachmentService; - _InboundDataService = inboundDataService; - } - - // this class represents the API response back to the client - public class DataResponse - { - public bool Success { get; set; } - public long HeaderID { get; set; } - public List Errors { get; set; } - public List Warnings { get; set; } - } - - // this is the main endpoint, it accepts a JSON message that contains both the header and data records together - // tooltype is the ToolTypeName column from the ToolType table - // JToken is how you can accept a JSON message without deserialization. - // Using "string" doesn't work because ASP.NET Core will expect a json encoded string, not give you the actual string. - [HttpPost("/api/inbound/{tooltype}")] - public IActionResult Data(string tooltype, [FromBody] JToken jsonbody) - { - DataResponse r = new() - { - Success = false, - HeaderID = -1, - Errors = new List(), - Warnings = new List() - }; - - if (!IsIPAddressAllowed()) - { - _Logger.LogInformation($"Rejected remote IP: {HttpContext.Connection.RemoteIpAddress}"); - r.Errors.Add("Remote IP is not on allowed list"); - return Unauthorized(r); - } - - ToolType toolType = _Repo.GetToolTypeByName(tooltype); - - if (toolType == null) - { - r.Errors.Add("Invalid tool type: " + tooltype); - return BadRequest(r); - } - - // get metadata - - List metaData = _Repo.GetToolTypeMetadataByToolTypeID(toolType.ID).ToList(); - - if (metaData == null) - { - r.Errors.Add("Invalid metadata for tool type: " + tooltype); - return BadRequest(r); - } - - // validate fields - - if (jsonbody != null) - _InboundDataService.ValidateJSONFields(jsonbody, 0, metaData, r.Errors, r.Warnings); - else - r.Errors.Add("Invalid json"); - - if (r.Errors.Count == 0) - { - try - { - r.HeaderID = _InboundDataService.DoSQLInsert(jsonbody, toolType, metaData); - r.Success = r.HeaderID > 0; - } - catch (Exception ex) - { - r.Errors.Add(ex.Message); - } - return Ok(r); - } - else - { - return BadRequest(r); - } - - } - - // this is the endpoint for attaching a field. It is not JSON, it is form-data/multipart like an HTML form because that's the normal way. - // header ID is the ID value from the Header table - // datauniqueid is the Title value from the Data/Detail table - [HttpPost("/api/inbound/{tooltype}/attachment")] - public IActionResult AttachFile(string tooltype, [FromQuery] long headerid, [FromQuery] string datauniqueid = "") - { - if (!IsIPAddressAllowed()) - { - _Logger.LogInformation($"Rejected remote IP: {HttpContext.Connection.RemoteIpAddress}"); - return Unauthorized("Remote IP is not on allowed list"); - } - - ToolType toolType = _Repo.GetToolTypeByName(tooltype); - - if (toolType == null) - return BadRequest($"Invalid tool type: {tooltype}"); - - if (Request.Form == null) - return BadRequest($"Invalid form"); - - if (Request.Form.Files.Count != 1) - return BadRequest($"Invalid file count"); - - string filename = System.IO.Path.GetFileName(Request.Form.Files[0].FileName); - - if (string.IsNullOrWhiteSpace(filename)) - return BadRequest("Empty filename"); - - if (filename.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) >= 0) - return BadRequest("Invalid filename"); - - _AttachmentService.SaveAttachment(toolType, headerid, datauniqueid, filename, Request.Form.Files[0]); - - return Ok(); - } - - protected bool IsIPAddressAllowed() - { - if (string.IsNullOrWhiteSpace(_AppSettings.InboundApiAllowedIPList)) - return true; - - System.Net.IPAddress remoteIP = HttpContext.Connection.RemoteIpAddress; - byte[] remoteIPBytes = remoteIP.GetAddressBytes(); - - string[] allowedIPs = _AppSettings.InboundApiAllowedIPList.Split(';'); - foreach (string ip in allowedIPs) - { - System.Net.IPAddress parsedIP; - if (System.Net.IPAddress.TryParse(ip, out parsedIP)) - { - if (parsedIP.GetAddressBytes().SequenceEqual(remoteIPBytes)) - return true; - } - } - - return false; - } - -} \ No newline at end of file diff --git a/Viewer/ApiControllers/ToolTypesController.cs b/Viewer/ApiControllers/ToolTypesController.cs deleted file mode 100644 index 6f26e22..0000000 --- a/Viewer/ApiControllers/ToolTypesController.cs +++ /dev/null @@ -1,249 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json; -using System; -using System.IO; -using System.Linq; - -namespace OI.Metrology.Viewer.ApiContollers; - -using OI.Metrology.Shared.DataModels; -using OI.Metrology.Shared.Repositories; -using OI.Metrology.Shared.Services; -using OI.Metrology.Viewer.Models; -using System.Collections.Generic; -using System.Text.Json; - -// using System.Data.Common; - -public class ToolTypesController : Controller -{ - // this controller powers the bulk of the UI - // it is named after the /api/tooltypes prefix - // the URL pattern is RESTful and the tool type is the root of every request - - private readonly IMetrologyRepo _Repo; - private readonly AppSettings _AppSettings; - private readonly IAttachmentsService _AttachmentsService; - - public ToolTypesController(AppSettings appSettings, IMetrologyRepo repo, IAttachmentsService attachmentsService) - { - _Repo = repo; - _AppSettings = appSettings; - _AttachmentsService = attachmentsService; - } - - // Get a list of tooltypes, returns just Name and ID - [HttpGet("/api/tooltypes")] - public IActionResult Index() - { - var r = new - { - Results = _Repo.GetToolTypes().Select(tt => new { tt.ToolTypeName, tt.ID }) - }; - return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); - } - - // Gets the metadata for a tooltype, accepts a parameter which sorts the results - // This is used to setup the grid displays on the UI - [HttpGet("/api/tooltypes/{id}")] - public IActionResult GetToolTypeMetadata(int id, string sortby = "") - { - ToolType tt = _Repo.GetToolTypeByID(id); - IEnumerable md = _Repo.GetToolTypeMetadataByToolTypeID(id); - - if (string.Equals(sortby, "grid", StringComparison.OrdinalIgnoreCase)) - md = md.OrderBy(f => f.GridDisplayOrder).ToList(); - if (string.Equals(sortby, "table", StringComparison.OrdinalIgnoreCase)) - md = md.OrderBy(f => f.GridDisplayOrder).ToList(); - - var r = new - { - Results = new - { - ToolType = tt, - Metadata = md - } - }; - return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); - } - - // Gets headers, request/response format is to allow paging with igniteUI - // The headerid parameter is used for navigating directly to a header, when the button is clicked in Awaiting Dispo - [HttpGet("/api/tooltypes/{id}/headers")] - public IActionResult GetHeaders( - int id, - [FromQuery] DateTime? datebegin, - [FromQuery] DateTime? dateend, - [FromQuery] int? page, - [FromQuery] int? pagesize, - [FromQuery] long? headerid) - { - long totalRecs; - - System.Data.DataTable dt = _Repo.GetHeaders(id, datebegin, dateend, page, pagesize, headerid, out totalRecs); - - var r = new - { - Results = dt, - TotalRows = totalRecs, - }; - string json = JsonConvert.SerializeObject(r); - - return Content(json); - } - - // Gets header titles, used in the Run Headers UI - [HttpGet("/api/tooltypes/{id}/headertitles")] - public IActionResult GetHeaderTitles( - int id, - [FromQuery] int? page, - [FromQuery] int? pagesize) - { - long totalRecs; - - IEnumerable dt = _Repo.GetHeaderTitles(id, page, pagesize, out totalRecs); - - var r = new - { - Results = dt, - TotalRows = totalRecs, - }; - string json = JsonConvert.SerializeObject(r); - - return Content(json); - } - - // Get all of the fields for a header, used with the Run Header UI - [HttpGet("/api/tooltypes/{id}/headers/{headerid}/fields")] - public IActionResult GetHeaderFields( - int id, - long headerid) - { - var r = new - { - Results = _Repo.GetHeaderFields(id, headerid).Select(x => new { Column = x.Key, x.Value }).ToList() - }; - string json = JsonConvert.SerializeObject(r); - - return Content(json); - } - - // Get the data for a header, used with the Run Info UI - [HttpGet("/api/tooltypes/{id}/headers/{headerid}/data")] - public IActionResult GetData( - int id, - long headerid) - { - var r = new - { - Results = _Repo.GetData(id, headerid) - }; - string json = JsonConvert.SerializeObject(r); - - return Content(json); - } - - // Display an attachment, used for Run Info - note it is by tool type ID and attachment GUID, so it is best for internal use - [HttpGet("/api/tooltypes/{toolTypeId}/{tabletype}/files/{attachmentId}/{filename}")] - public IActionResult GetAttachment( - int toolTypeId, - string tabletype, - string attachmentId, - string filename) - { - ToolType tt = _Repo.GetToolTypeByID(toolTypeId); - - bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase); - - Guid attachmentIdParsed; - if (!Guid.TryParse(attachmentId, out attachmentIdParsed)) - return Content("Invalid attachment id"); - - try - { - // figure out what content type to use. this is very simple because there are only two types being used - string contenttype = "application/pdf"; - if (filename.ToLower().TrimEnd().EndsWith(".txt")) - contenttype = "text/plain"; - - // Get attachment stream and feed it to the client - Stream fs = _AttachmentsService.GetAttachmentStreamByAttachmentId(tt, header, attachmentIdParsed, filename); - return File(fs, contenttype); - } - catch (Exception ex) - { - return Content(ex.Message); - } - } - - // This endpoint triggers writing of the OI Export file - [HttpPost("/api/tooltypes/{toolTypeId}/headers/{headerid}/oiexport")] - public IActionResult OIExport(int toolTypeId, long headerid) - { - // Call the export stored procedure - System.Data.DataSet ds = _Repo.GetOIExportData(toolTypeId, headerid); - - try - { - // The SP must return 3 result tables - if (ds.Tables.Count != 3) - throw new Exception("Error exporting, invalid results"); - - // The first table has just one row, which is the export filename - if (ds.Tables[0].Rows.Count != 1) - throw new Exception("Error exporting, invalid filename"); - - string filename = Convert.ToString(ds.Tables[0].Rows[0][0]); - - // The second table has the header data - if (ds.Tables[1].Rows.Count != 1) - throw new Exception("Error exporting, invalid header data"); - - System.Text.StringBuilder sb = new(); - - foreach (object o in ds.Tables[1].Rows[0].ItemArray) - { - if ((o != null) && (!Convert.IsDBNull(o))) - _ = sb.Append(Convert.ToString(o)); - _ = sb.Append('\t'); - } - - // The third table has the detail data - foreach (System.Data.DataRow dr in ds.Tables[2].Rows) - { - foreach (object o in dr.ItemArray) - { - if ((o != null) && (!Convert.IsDBNull(o))) - _ = sb.Append(Convert.ToString(o)); - _ = sb.Append('\t'); - } - } - _ = sb.AppendLine(); - - // The output file will only have one line, the header columns are output first - // Then each detail rows has it's columns appended - // H1, H2, H3, D1.1, D1.2, D1.3, D2.1, D2.2, D2.3, etc - - // Write the file - System.IO.File.WriteAllText( - Path.Join(_AppSettings.OIExportPath, filename), - sb.ToString()); - - } - catch (Exception ex) - { - string json = JsonConvert.SerializeObject(new - { - ex.Message, - }); - return BadRequest(json); - } - - var r = new - { - Message = "OK", - }; - return Ok(r); - } - -} \ No newline at end of file diff --git a/Viewer/Models/AppSettings.cs b/Viewer/Models/AppSettings.cs deleted file mode 100644 index e5ed6a1..0000000 --- a/Viewer/Models/AppSettings.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace OI.Metrology.Viewer.Models; - -public class AppSettings -{ - - public string ApiLoggingContentTypes { init; get; } - public string ApiLoggingPathPrefixes { init; get; } - public string ApiLogPath { init; get; } - public string AttachmentPath { init; get; } - public string BuildNumber { init; get; } - public string Company { init; get; } - public string ConnectionString { init; get; } - public string GitCommitSeven { init; get; } - public string InboundApiAllowedIPList { init; get; } - public string MonAResource { init; get; } - public string MonASite { init; get; } - public string Oi2SqlConnectionString { init; get; } - public string OIExportPath { init; get; } - public string URLs { init; get; } - public string WorkingDirectoryName { init; get; } - - [JsonConstructor] - public AppSettings(string apiLoggingContentTypes, - string apiLoggingPathPrefixes, - string apiLogPath, - string attachmentPath, - string buildNumber, - string company, - string connectionString, - string gitCommitSeven, - string inboundApiAllowedIPList, - string monAResource, - string monASite, - string oi2SqlConnectionString, - string oiExportPath, - string urls, - string workingDirectoryName) - { - ApiLoggingContentTypes = apiLoggingContentTypes; - ApiLoggingPathPrefixes = apiLoggingPathPrefixes; - ApiLogPath = apiLogPath; - AttachmentPath = attachmentPath; - BuildNumber = buildNumber; - Company = company; - ConnectionString = connectionString; - GitCommitSeven = gitCommitSeven; - InboundApiAllowedIPList = inboundApiAllowedIPList; - MonAResource = monAResource; - MonASite = monASite; - Oi2SqlConnectionString = oi2SqlConnectionString; - OIExportPath = oiExportPath; - URLs = urls; - WorkingDirectoryName = workingDirectoryName; - } - - public override string ToString() - { - string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); - return result; - } - -} \ No newline at end of file diff --git a/Viewer/Models/Binder/AppSettings.cs b/Viewer/Models/Binder/AppSettings.cs deleted file mode 100644 index ac05701..0000000 --- a/Viewer/Models/Binder/AppSettings.cs +++ /dev/null @@ -1,66 +0,0 @@ -using Microsoft.Extensions.Configuration; -using System.ComponentModel.DataAnnotations; -using System.Text.Json; - -namespace OI.Metrology.Viewer.Models.Binder; - -public class AppSettings -{ - -#nullable disable - - [Display(Name = "Api Logging Content Types"), Required] public string ApiLoggingContentTypes { get; set; } - [Display(Name = "Api Logging Path Prefixes"), Required] public string ApiLoggingPathPrefixes { get; set; } - [Display(Name = "Api Log Path"), Required] public string ApiLogPath { get; set; } - [Display(Name = "Attachment Path"), Required] public string AttachmentPath { get; set; } - [Display(Name = "Build Number"), Required] public string BuildNumber { get; set; } - [Display(Name = "Company"), Required] public string Company { get; set; } - [Display(Name = "Connection String"), Required] public string ConnectionString { get; set; } - [Display(Name = "Git Commit Seven"), Required] public string GitCommitSeven { get; set; } - [Display(Name = "Inbound Api Allowed IP List"), Required] public string InboundApiAllowedIPList { get; set; } - [Display(Name = "MonA Resource"), Required] public string MonAResource { get; set; } - [Display(Name = "MonA Site"), Required] public string MonASite { get; set; } - [Display(Name = "Oi 2 Sql Connection String"), Required] public string Oi2SqlConnectionString { get; set; } - [Display(Name = "OI Export Path"), Required] public string OIExportPath { get; set; } - [Display(Name = "URLs"), Required] public string URLs { get; set; } - [Display(Name = "Working Directory Name"), Required] public string WorkingDirectoryName { get; set; } - -#nullable restore - - public override string ToString() - { - string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); - return result; - } - - private static Models.AppSettings Get(AppSettings appSettings) - { - Models.AppSettings result; - result = new( - appSettings.ApiLoggingContentTypes, - appSettings.ApiLoggingPathPrefixes, - appSettings.ApiLogPath, - appSettings.AttachmentPath, - appSettings.BuildNumber, - appSettings.Company, - appSettings.ConnectionString, - appSettings.GitCommitSeven, - appSettings.InboundApiAllowedIPList, - appSettings.MonAResource, - appSettings.MonASite, - appSettings.Oi2SqlConnectionString, - appSettings.OIExportPath, - appSettings.URLs, - appSettings.WorkingDirectoryName); - return result; - } - - public static Models.AppSettings Get(IConfigurationRoot configurationRoot) - { - Models.AppSettings result; - AppSettings appSettings = configurationRoot.Get(); - result = Get(appSettings); - return result; - } - -} \ No newline at end of file diff --git a/Viewer/Viewer.csproj b/Viewer/Viewer.csproj deleted file mode 100644 index 7baedc6..0000000 --- a/Viewer/Viewer.csproj +++ /dev/null @@ -1,68 +0,0 @@ - - - SAK - SAK - SAK - SAK - - - disable - false - 10.0 - disable - Exe - win-x64 - net6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Always - - - Always - - - \ No newline at end of file diff --git a/Viewer/Views/Pages/AwaitingDispo.cshtml b/Viewer/Views/Pages/AwaitingDispo.cshtml deleted file mode 100644 index 4b4be73..0000000 --- a/Viewer/Views/Pages/AwaitingDispo.cshtml +++ /dev/null @@ -1,76 +0,0 @@ -@{ - ViewData["Title"] = "Awaiting Disposition"; -} - -

Awaiting Disposition

- -
-
-
- -
-
- -
-
- -
-
- - diff --git a/Viewer/Views/Pages/RunHeaders.cshtml b/Viewer/Views/Pages/RunHeaders.cshtml deleted file mode 100644 index ba1a5de..0000000 --- a/Viewer/Views/Pages/RunHeaders.cshtml +++ /dev/null @@ -1,134 +0,0 @@ -@{ - ViewData["Title"] = "Run Headers"; -} - - - -

Run Headers

- - - - - - -
- - -
-
- - - - - - -
-
-
-
-
- - diff --git a/Viewer/wwwroot/styles/Site.css b/Viewer/wwwroot/styles/Site.css deleted file mode 100644 index c3c986b..0000000 --- a/Viewer/wwwroot/styles/Site.css +++ /dev/null @@ -1,102 +0,0 @@ -body { - padding-top: 50px; - padding-bottom: 20px; - background-color: #FAFAFA; -} - -/* Set padding to keep content from hitting the edges */ -.body-content { - padding-left: 15px; - padding-right: 15px; -} - -/* Set width on the form input elements since they're 100% wide by default */ -input, -select, -textarea { - max-width: 280px; -} - -div.modal-content-error { - background-color: #9e2525; - color: #ffffff; -} - -div.modal-content-success { - background-color: #e5fbe5; - color: #000000; -} - -div.modal-content-info { - background-color: #5bc0de; - color: #000000; -} - -div.modal-content-warning { - background-color: yellow; - color: #000000; -} - -.changes-highlight { - background-color: yellow; -} - -.k-alt .changes-highlight { - background-color: #f0f050; -} - -.button-highlight { - background-color: yellow !important; -} - -.history-deleted { - background-color: #FFDDDD; -} - -.k-alt.history-deleted { - background-color: #EECCCC !important; -} - -.error-highlight { - color: red; - font-weight: bold; -} - -.checkbox-container { - max-height: 200px; - overflow: auto; -} - -.test-database { - background-color: red !important; -} - - .test-database .navbar-brand, - .test-database .navbar-text, - .test-database .navbar-nav > li > a { - color: white; - } - - .test-database .navbar-nav > li > a:hover, - .test-database .navbar-nav > li > a:focus { - color: black !important; - } - -.test-database-text { - font-weight: bold; - font-size: 20px; - line-height: 20px; -} - -.navbar { - border-bottom-color: black; - background-color: white; -} - -.navbar-nav > li > a { - font-weight: bold; -} - -.icon-bar { - background-color: black; -} \ No newline at end of file diff --git a/azure-pipelines-server-development.yml b/azure-pipelines-server-development.yml new file mode 100644 index 0000000..920ab21 --- /dev/null +++ b/azure-pipelines-server-development.yml @@ -0,0 +1,137 @@ +trigger: + branches: + include: + - Development + paths: + include: + - "Server/*" + - "Shared/*" + - "Tests/*" + exclude: + - "**/*.yaml" + - "**/*.yml" + - "Archive/*" + - "Client/*" + - "ClientHub/*" + +pool: + name: Mesa-IIS + demands: OI-Metrology-Server-Development + +steps: + - script: | + set coreVersion=net7.0 + echo %coreVersion% + echo ##vso[task.setvariable variable=CoreVersion;]%coreVersion% + echo $(CoreVersion) + displayName: CoreVersion + + - script: | + set configuration=Debug + echo %configuration% + echo ##vso[task.setvariable variable=Configuration;]%configuration% + echo ($Configuration) + displayName: Configuration + + - script: | + set nugetSource=https://messa017.infineon.com/v3/index.json + echo %nugetSource% + echo ##vso[task.setvariable variable=NugetSource;]%nugetSource% + echo $(NugetSource) + displayName: NugetSource + + - script: | + set gitCommit=$(Build.SourceVersion) + set gitCommitSeven=%gitCommit:~0,7% + echo %gitCommitSeven% + echo ##vso[task.setvariable variable=GitCommitSeven;]%gitCommitSeven% + echo $(GitCommitSeven) + displayName: GitCommitSeven + + - script: | + echo $(Build.BuildId) + echo $(Build.Reason) + echo $(Build.Repository.Id) + echo $(Build.Repository.Name) + echo $(Build.SourceVersion) + echo $(CoreVersion) + echo $(Configuration) + echo $(NugetSource) + echo $(GitCommitSeven) + REM echo $(pipelinePassword) + displayName: "Echo Check" + + - script: '"C:\program files\dotnet\dotnet.exe" nuget locals all --clear' + displayName: "Nuget Clear" + enabled: false + + - script: | + "C:\program files\dotnet\dotnet.exe" user-secrets init + "C:\program files\dotnet\dotnet.exe" user-secrets set "BuildNumber" "$(Build.BuildId)" + "C:\program files\dotnet\dotnet.exe" user-secrets set "GitCommitSeven" "$(GitCommitSeven)" + "C:\program files\dotnet\dotnet.exe" user-secrets list + workingDirectory: Server + displayName: "Safe storage of app secrets - Server" + + - script: '"C:\program files\dotnet\dotnet.exe" build --configuration $(Configuration) --source $(NugetSource)' + workingDirectory: Server + displayName: "Core Build - Server" + + - powershell: Get-ChildItem .\ -include TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse } + workingDirectory: "$(System.DefaultWorkingDirectory)/.vscode" + displayName: 'PowerShell Script' + + - script: "dotnet test --configuration $(Configuration)" + workingDirectory: Tests + displayName: "Core Test" + # enabled: false + + - script: '"C:\program files\dotnet\dotnet.exe" tool restore' + workingDirectory: Server + displayName: "Tool Restore" + enabled: false + + - script: '"C:\program files\dotnet\dotnet.exe" ReportGenerator -reports:.vscode/TestResults/*/coverage.cobertura.xml -targetDir:$(Build.ArtifactStagingDirectory)\Coverage -reportTypes:Html_Dark' + workingDirectory: Server + displayName: "Report Generator" + enabled: false + + - task: PublishTestResults@2 + displayName: "Publish Test Results **/*.trx" + inputs: + testResultsFormat: VSTest + testResultsFiles: "**/*.trx" + searchFolder: "$(System.DefaultWorkingDirectory)/.vscode" + + - task: mspremier.CreateWorkItem.CreateWorkItem-task.CreateWorkItem@1 + displayName: "Create work item" + inputs: + teamProject: "Mesa_FI" + workItemType: Bug + title: $(GitCommitSeven)-$(Build.BuildId)-$(Build.Repository.Name)-$(Configuration) + assignedTo: "$(Build.RequestedForId)" + enabled: false + + - script: '"C:\program files\dotnet\dotnet.exe" publish --configuration $(Configuration) --runtime win-x64 --self-contained -o $(Build.ArtifactStagingDirectory)\Server --source $(NugetSource)' + workingDirectory: Server + displayName: "Core Publish" + + - task: CopyFiles@2 + displayName: "Copy Files" + inputs: + SourceFolder: '$(Build.ArtifactStagingDirectory)\Server' + TargetFolder: 'D:\$(CoreVersion)\$(Build.Repository.Name)\$(GitCommitSeven)-$(Build.BuildId)-$(Build.Repository.Name)-$(Configuration)\Server' + + - task: PublishBuildArtifacts@1 + displayName: "Publish Artifact: drop" + enabled: false + + - script: | + "C:\program files\dotnet\dotnet.exe" clean --configuration $(Configuration) + workingDirectory: Tests + displayName: "Core Clean - Tests" + + - script: | + "C:\program files\dotnet\dotnet.exe" clean --configuration $(Configuration) + workingDirectory: Server + displayName: "Core Clean - Server" diff --git a/azure-pipelines-server.yml b/azure-pipelines-server.yml new file mode 100644 index 0000000..8adc99a --- /dev/null +++ b/azure-pipelines-server.yml @@ -0,0 +1,117 @@ +trigger: + branches: + include: + - master + paths: + include: + - "Server/*" + - "Shared/*" + - "Tests/*" + exclude: + - "**/*.yaml" + - "**/*.yml" + - "Archive/*" + - "Client/*" + - "ClientHub/*" + +pool: + name: Mesa-IIS + demands: OI-Metrology-Server + +steps: + - script: | + set coreVersion=net7.0 + echo %coreVersion% + echo ##vso[task.setvariable variable=CoreVersion;]%coreVersion% + echo $(CoreVersion) + displayName: CoreVersion + + - script: | + set configuration=Release + echo %configuration% + echo ##vso[task.setvariable variable=Configuration;]%configuration% + echo ($Configuration) + displayName: Configuration + + - script: | + set nugetSource=https://messa08ec.ec.local/v3/index.json + echo %nugetSource% + echo ##vso[task.setvariable variable=NugetSource;]%nugetSource% + echo $(NugetSource) + displayName: NugetSource + + - script: | + set gitCommit=$(Build.SourceVersion) + set gitCommitSeven=%gitCommit:~0,7% + echo %gitCommitSeven% + echo ##vso[task.setvariable variable=GitCommitSeven;]%gitCommitSeven% + echo $(GitCommitSeven) + displayName: GitCommitSeven + + - script: | + echo $(Build.BuildId) + echo $(Build.Reason) + echo $(Build.Repository.Id) + echo $(Build.Repository.Name) + echo $(Build.SourceVersion) + echo $(CoreVersion) + echo $(Configuration) + echo $(NugetSource) + echo $(GitCommitSeven) + REM echo $(pipelinePassword) + displayName: "Echo Check" + + - script: '"C:\program files\dotnet\dotnet.exe" nuget locals all --clear' + displayName: "Nuget Clear" + enabled: false + + - script: | + "C:\program files\dotnet\dotnet.exe" user-secrets init + "C:\program files\dotnet\dotnet.exe" user-secrets set "BuildNumber" "$(Build.BuildId)" + "C:\program files\dotnet\dotnet.exe" user-secrets set "GitCommitSeven" "$(GitCommitSeven)" + "C:\program files\dotnet\dotnet.exe" user-secrets list + workingDirectory: Server + displayName: "Safe storage of app secrets - Server" + + - script: '"C:\program files\dotnet\dotnet.exe" build --configuration $(Configuration) --source $(NugetSource)' + workingDirectory: Server + displayName: "Core Build - Server" + + - script: "dotnet test --configuration $(Configuration)" + workingDirectory: Tests + displayName: "Core Test" + enabled: false + + - script: '"C:\program files\dotnet\dotnet.exe" tool restore' + workingDirectory: Server + displayName: "Tool Restore" + enabled: false + + - script: '"C:\program files\dotnet\dotnet.exe" ReportGenerator -reports:.vscode/TestResults/*/coverage.cobertura.xml -targetDir:$(Build.ArtifactStagingDirectory)\Coverage -reportTypes:Html_Dark' + workingDirectory: Server + displayName: "Report Generator" + enabled: false + + - script: '"C:\program files\dotnet\dotnet.exe" publish --configuration $(Configuration) --runtime win-x64 --self-contained -o $(Build.ArtifactStagingDirectory)\Server --source $(NugetSource)' + workingDirectory: Server + displayName: "Core Publish" + + - task: CopyFiles@2 + displayName: "Copy Files" + inputs: + SourceFolder: '$(Build.ArtifactStagingDirectory)\Server' + TargetFolder: 'D:\$(CoreVersion)\$(Build.Repository.Name)\$(GitCommitSeven)-$(Build.BuildId)-$(Build.Repository.Name)-$(Configuration)\Server' + + - task: PublishBuildArtifacts@1 + displayName: "Publish Artifact: drop" + enabled: false + + - script: | + "C:\program files\dotnet\dotnet.exe" clean --configuration $(Configuration) + workingDirectory: Tests + displayName: "Core Clean - Tests" + + - script: | + "C:\program files\dotnet\dotnet.exe" clean --configuration $(Configuration) + workingDirectory: Server + displayName: "Core Clean - Server"