Compare commits
	
		
			29 Commits
		
	
	
		
			maybe-blaz
			...
			7e16ee7f98
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7e16ee7f98 | |||
| cff2e06f68 | |||
| 03bd20fc8c | |||
| 3dd4034a84 | |||
| f684c4b7ef | |||
| 4cc5219409 | |||
| 6668806432 | |||
| e084fdd58f | |||
| 6b409294e4 | |||
| 9774b0cc53 | |||
| c82a8790e7 | |||
| c68b853c64 | |||
| 2f3f1b7947 | |||
| c655ed5c6b | |||
| 70c1e1a52a | |||
| 72b648589e | |||
| 66f38fcf33 | |||
| 994556d453 | |||
| 8040a7c6b5 | |||
| de048b6842 | |||
| db44756142 | |||
| 66f9347223 | |||
| a0d0f33c83 | |||
| 1712743c46 | |||
| bff76a503a | |||
| 97c9c3c264 | |||
| 8e15b6a3a5 | |||
| f3d199cccb | |||
| a25dc93610 | 
@ -1,3 +1,19 @@
 | 
				
			|||||||
 | 
					[*.md]
 | 
				
			||||||
 | 
					end_of_line = crlf
 | 
				
			||||||
 | 
					file_header_template = unset
 | 
				
			||||||
 | 
					indent_size = 2
 | 
				
			||||||
 | 
					indent_style = space
 | 
				
			||||||
 | 
					insert_final_newline = false
 | 
				
			||||||
 | 
					root = true
 | 
				
			||||||
 | 
					tab_width = 2
 | 
				
			||||||
 | 
					[*.csproj]
 | 
				
			||||||
 | 
					end_of_line = crlf
 | 
				
			||||||
 | 
					file_header_template = unset
 | 
				
			||||||
 | 
					indent_size = 2
 | 
				
			||||||
 | 
					indent_style = space
 | 
				
			||||||
 | 
					insert_final_newline = false
 | 
				
			||||||
 | 
					root = true
 | 
				
			||||||
 | 
					tab_width = 2
 | 
				
			||||||
[*.cs]
 | 
					[*.cs]
 | 
				
			||||||
csharp_indent_block_contents = true
 | 
					csharp_indent_block_contents = true
 | 
				
			||||||
csharp_indent_braces = false
 | 
					csharp_indent_braces = false
 | 
				
			||||||
@ -13,6 +29,7 @@ csharp_new_line_before_members_in_object_initializers = true
 | 
				
			|||||||
csharp_new_line_before_open_brace = all
 | 
					csharp_new_line_before_open_brace = all
 | 
				
			||||||
csharp_new_line_between_query_expression_clauses = true
 | 
					csharp_new_line_between_query_expression_clauses = true
 | 
				
			||||||
csharp_prefer_braces = false
 | 
					csharp_prefer_braces = false
 | 
				
			||||||
 | 
					csharp_prefer_qualified_reference = true:error
 | 
				
			||||||
csharp_prefer_simple_default_expression = true:warning
 | 
					csharp_prefer_simple_default_expression = true:warning
 | 
				
			||||||
csharp_prefer_simple_using_statement = true:warning
 | 
					csharp_prefer_simple_using_statement = true:warning
 | 
				
			||||||
csharp_prefer_static_local_function = true:warning
 | 
					csharp_prefer_static_local_function = true:warning
 | 
				
			||||||
@ -79,13 +96,22 @@ dotnet_code_quality.CAXXXX.api_surface = private, internal
 | 
				
			|||||||
dotnet_diagnostic.CA1825.severity = warning # CA1823: Avoid zero-length array allocations
 | 
					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.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.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable
 | 
				
			||||||
 | 
					dotnet_diagnostic.CA1860.severity = error # CA1860: Prefer comparing 'Count' to 0 rather than using 'Any()', both for clarity and for performance
 | 
				
			||||||
 | 
					dotnet_diagnostic.CA1869.severity = none # CA1869: Avoid creating a new 'JsonSerializerOptions' instance for every serialization operation. Cache and reuse instances instead.
 | 
				
			||||||
 | 
					dotnet_diagnostic.CA2254.severity = none # CA2254: The logging message template should not vary between calls to 'LoggerExtensions.LogInformation(ILogger, string?, params object?[])'
 | 
				
			||||||
dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
 | 
					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.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
 | 
				
			||||||
 | 
					dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
 | 
				
			||||||
dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary
 | 
					dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary
 | 
				
			||||||
 | 
					dotnet_diagnostic.IDE0028.severity = error # IDE0028: Collection initialization can be simplified
 | 
				
			||||||
 | 
					dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031)
 | 
				
			||||||
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
 | 
					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.IDE0049.severity = warning # Use language keywords instead of framework type names for type references (IDE0049)
 | 
				
			||||||
dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter
 | 
					dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter
 | 
				
			||||||
 | 
					dotnet_diagnostic.IDE0290.severity = none # Use primary constructor [Distance]csharp(IDE0290)
 | 
				
			||||||
 | 
					dotnet_diagnostic.IDE0300.severity = error # IDE0300: Collection initialization can be simplified
 | 
				
			||||||
 | 
					dotnet_diagnostic.IDE0301.severity = error #IDE0301: Collection initialization can be simplified
 | 
				
			||||||
 | 
					dotnet_diagnostic.IDE0305.severity = none # IDE0305: Collection initialization can be simplified
 | 
				
			||||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
 | 
					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.style = pascal_case
 | 
				
			||||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method
 | 
					dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -52,7 +52,7 @@ BenchmarkDotNet.Artifacts/
 | 
				
			|||||||
project.lock.json
 | 
					project.lock.json
 | 
				
			||||||
project.fragment.lock.json
 | 
					project.fragment.lock.json
 | 
				
			||||||
artifacts/
 | 
					artifacts/
 | 
				
			||||||
**/Properties/launchSettings.json
 | 
					# **/Properties/launchSettings.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# StyleCop
 | 
					# StyleCop
 | 
				
			||||||
StyleCopReport.xml
 | 
					StyleCopReport.xml
 | 
				
			||||||
@ -337,6 +337,9 @@ ASALocalRun/
 | 
				
			|||||||
!.vscode/tasks.json
 | 
					!.vscode/tasks.json
 | 
				
			||||||
!.vscode/launch.json
 | 
					!.vscode/launch.json
 | 
				
			||||||
!.vscode/extensions.json
 | 
					!.vscode/extensions.json
 | 
				
			||||||
 | 
					!.vscode/thunder-tests/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Libman.json
 | 
					# Libman.json
 | 
				
			||||||
/wwwroot/lib/*
 | 
					/wwwroot/lib/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tests/.kanbn/**/*
 | 
				
			||||||
							
								
								
									
										266
									
								
								.groovy
									
									
									
									
									
								
							
							
						
						
									
										266
									
								
								.groovy
									
									
									
									
									
								
							@ -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()
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										53
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										53
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							@ -5,27 +5,68 @@
 | 
				
			|||||||
            // Use IntelliSense to find out which attributes exist for C# debugging
 | 
					            // Use IntelliSense to find out which attributes exist for C# debugging
 | 
				
			||||||
            // Use hover for the description of the existing attributes
 | 
					            // Use hover for the description of the existing attributes
 | 
				
			||||||
            // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
 | 
					            // 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",
 | 
					            "type": "coreclr",
 | 
				
			||||||
            "request": "launch",
 | 
					            "request": "launch",
 | 
				
			||||||
            "preLaunchTask": "build",
 | 
					            "preLaunchTask": "buildServer",
 | 
				
			||||||
            // If you have changed target frameworks, make sure to update the program path.
 | 
					            // 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": [],
 | 
					            "args": [],
 | 
				
			||||||
            "cwd": "${workspaceFolder}",
 | 
					            "cwd": "${workspaceFolder}/Server",
 | 
				
			||||||
            "stopAtEntry": false,
 | 
					            "stopAtEntry": false,
 | 
				
			||||||
            // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
 | 
					            // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
 | 
				
			||||||
            "serverReadyAction": {
 | 
					            "serverReadyAction": {
 | 
				
			||||||
                "action": "openExternally",
 | 
					                "action": "openExternally",
 | 
				
			||||||
                "pattern": "\\bNow listening on:\\s+(https?://\\S+)"
 | 
					                "pattern": "\\bNow listening on:\\s+(https?://\\S+)",
 | 
				
			||||||
 | 
					                "uriFormat": "%s/swagger/index.html"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "env": {
 | 
					            "env": {
 | 
				
			||||||
                "ASPNETCORE_ENVIRONMENT": "Development"
 | 
					                "ASPNETCORE_ENVIRONMENT": "Development"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "sourceFileMap": {
 | 
					            "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",
 | 
					            "name": ".NET Core Attach",
 | 
				
			||||||
            "type": "coreclr",
 | 
					            "type": "coreclr",
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							@ -3,5 +3,7 @@
 | 
				
			|||||||
    "files.exclude": {
 | 
					    "files.exclude": {
 | 
				
			||||||
        "**/.git": false
 | 
					        "**/.git": false
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "thunder-client.saveToWorkspace": false,
 | 
				
			||||||
 | 
					    "thunder-client.workspaceRelativePath": ".vscode",
 | 
				
			||||||
    "coverage-gutters.coverageBaseDir": "../.vscode/TestResults/*"
 | 
					    "coverage-gutters.coverageBaseDir": "../.vscode/TestResults/*"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										187
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										187
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							@ -2,40 +2,215 @@
 | 
				
			|||||||
    "version": "2.0.0",
 | 
					    "version": "2.0.0",
 | 
				
			||||||
    "tasks": [
 | 
					    "tasks": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "label": "build",
 | 
					            "label": "User Secrets Init",
 | 
				
			||||||
 | 
					            "command": "dotnet",
 | 
				
			||||||
 | 
					            "type": "process",
 | 
				
			||||||
 | 
					            "args": [
 | 
				
			||||||
 | 
					                "user-secrets",
 | 
				
			||||||
 | 
					                "-p",
 | 
				
			||||||
 | 
					                "${workspaceFolder}/Server/OI.Metrology.Server.csproj",
 | 
				
			||||||
 | 
					                "init"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "problemMatcher": "$msCompile"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "label": "User Secrets Set",
 | 
				
			||||||
 | 
					            "command": "dotnet",
 | 
				
			||||||
 | 
					            "type": "process",
 | 
				
			||||||
 | 
					            "args": [
 | 
				
			||||||
 | 
					                "user-secrets",
 | 
				
			||||||
 | 
					                "-p",
 | 
				
			||||||
 | 
					                "${workspaceFolder}/Server/OI.Metrology.Server.csproj",
 | 
				
			||||||
 | 
					                "set",
 | 
				
			||||||
 | 
					                "_Application",
 | 
				
			||||||
 | 
					                "oi-metrology-viewer.Server"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "problemMatcher": "$msCompile"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "label": "buildServer",
 | 
				
			||||||
            "command": "dotnet",
 | 
					            "command": "dotnet",
 | 
				
			||||||
            "type": "process",
 | 
					            "type": "process",
 | 
				
			||||||
            "args": [
 | 
					            "args": [
 | 
				
			||||||
                "build",
 | 
					                "build",
 | 
				
			||||||
                "${workspaceFolder}/Archive/Archive.csproj",
 | 
					                "${workspaceFolder}/Server/OI.Metrology.Server.csproj",
 | 
				
			||||||
                "/property:GenerateFullPaths=true",
 | 
					                "/property:GenerateFullPaths=true",
 | 
				
			||||||
                "/consoleloggerparameters:NoSummary"
 | 
					                "/consoleloggerparameters:NoSummary"
 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
            "problemMatcher": "$msCompile"
 | 
					            "problemMatcher": "$msCompile"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "label": "publish",
 | 
					            "label": "buildTests",
 | 
				
			||||||
 | 
					            "command": "dotnet",
 | 
				
			||||||
 | 
					            "type": "process",
 | 
				
			||||||
 | 
					            "args": [
 | 
				
			||||||
 | 
					                "build",
 | 
				
			||||||
 | 
					                "${workspaceFolder}/Tests/OI.Metrology.Tests.csproj",
 | 
				
			||||||
 | 
					                "/property:GenerateFullPaths=true",
 | 
				
			||||||
 | 
					                "/consoleloggerparameters:NoSummary"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "problemMatcher": "$msCompile"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "label": "publishServer",
 | 
				
			||||||
            "command": "dotnet",
 | 
					            "command": "dotnet",
 | 
				
			||||||
            "type": "process",
 | 
					            "type": "process",
 | 
				
			||||||
            "args": [
 | 
					            "args": [
 | 
				
			||||||
                "publish",
 | 
					                "publish",
 | 
				
			||||||
                "${workspaceFolder}/Archive/Archive.csproj",
 | 
					                "${workspaceFolder}/Server/OI.Metrology.Server.csproj",
 | 
				
			||||||
                "/property:GenerateFullPaths=true",
 | 
					                "/property:GenerateFullPaths=true",
 | 
				
			||||||
                "/consoleloggerparameters:NoSummary"
 | 
					                "/consoleloggerparameters:NoSummary"
 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
            "problemMatcher": "$msCompile"
 | 
					            "problemMatcher": "$msCompile"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "label": "watch",
 | 
					            "label": "testDebug",
 | 
				
			||||||
 | 
					            "command": "dotnet",
 | 
				
			||||||
 | 
					            "type": "process",
 | 
				
			||||||
 | 
					            "args": [
 | 
				
			||||||
 | 
					                "test",
 | 
				
			||||||
 | 
					                "/property:GenerateFullPaths=true",
 | 
				
			||||||
 | 
					                "/consoleloggerparameters:NoSummary"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "problemMatcher": "$msCompile"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "label": "testRelease",
 | 
				
			||||||
 | 
					            "command": "dotnet",
 | 
				
			||||||
 | 
					            "type": "process",
 | 
				
			||||||
 | 
					            "args": [
 | 
				
			||||||
 | 
					                "test",
 | 
				
			||||||
 | 
					                "/property:GenerateFullPaths=true",
 | 
				
			||||||
 | 
					                "/consoleloggerparameters:NoSummary",
 | 
				
			||||||
 | 
					                "-c",
 | 
				
			||||||
 | 
					                "Release"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "problemMatcher": "$msCompile"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "label": "Format",
 | 
				
			||||||
 | 
					            "command": "dotnet",
 | 
				
			||||||
 | 
					            "type": "process",
 | 
				
			||||||
 | 
					            "args": [
 | 
				
			||||||
 | 
					                "format",
 | 
				
			||||||
 | 
					                "--report",
 | 
				
			||||||
 | 
					                ".vscode",
 | 
				
			||||||
 | 
					                "--verbosity",
 | 
				
			||||||
 | 
					                "detailed",
 | 
				
			||||||
 | 
					                "--severity",
 | 
				
			||||||
 | 
					                "warn"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "problemMatcher": "$msCompile"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "label": "old-watch",
 | 
				
			||||||
            "command": "dotnet",
 | 
					            "command": "dotnet",
 | 
				
			||||||
            "type": "process",
 | 
					            "type": "process",
 | 
				
			||||||
            "args": [
 | 
					            "args": [
 | 
				
			||||||
                "watch",
 | 
					                "watch",
 | 
				
			||||||
                "run",
 | 
					                "run",
 | 
				
			||||||
                "--project",
 | 
					                "--project",
 | 
				
			||||||
                "${workspaceFolder}/Archive/Archive.csproj"
 | 
					                "${workspaceFolder}/Server/OI.Metrology.Server.csproj"
 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
            "problemMatcher": "$msCompile"
 | 
					            "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.*"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "label": "File-Folder-Helper AOT s M Self .Kanbn Tasks",
 | 
				
			||||||
 | 
					            "type": "shell",
 | 
				
			||||||
 | 
					            "command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s M '.kanbn/tasks'",
 | 
				
			||||||
 | 
					            "problemMatcher": []
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										198
									
								
								.vscode/thunder-tests/thunderActivity.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										198
									
								
								.vscode/thunder-tests/thunderActivity.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,198 @@
 | 
				
			|||||||
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "646e3a9b-8fe9-4eb3-a532-f94270f752ac",
 | 
				
			||||||
 | 
					    "colId": "history",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "http://localhost:5126/api/inbound/cde",
 | 
				
			||||||
 | 
					    "url": "http://localhost:5126/api/inbound/cde",
 | 
				
			||||||
 | 
					    "method": "POST",
 | 
				
			||||||
 | 
					    "sortNum": 0,
 | 
				
			||||||
 | 
					    "created": "2023-02-28T14:41:33.596Z",
 | 
				
			||||||
 | 
					    "modified": "2023-02-28T15:19:48.924Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"SentToMetrology\": false,\n  \"SentToSPC\": false,\n  \"AutoOptimizeGain\": \"YES\",\n  \"AutoProbeHeightSet\": \"NO\",\n  \"Avg\": \"1824.053\",\n  \"CellName\": \"CDE2\",\n  \"DLRatio\": \"0.9680\",\n  \"DataReject\": \"> 3.0Sigma\",\n  \"Date\": \"02/27/2023 03:03:00 AM\",\n  \"Engineer\": \"Engineer\",\n  \"EquipId\": \"CDE2\",\n  \"FileName\": \"0    C:\\\\4p_NT\\\\LSL8in.prj\\\\10PT_5mm.rcp\\\\3227D036.RsM     03:03 02/27/23\",\n  \"FilePath\": \"\",\n  \"Id\": \"-1\",\n  \"Layer\": \"\",\n  \"LotId\": \"LotID\",\n  \"Op\": \"Operator\",\n  \"PSN\": \"4628\",\n  \"RDS\": \"577845\",\n  \"Reactor\": \"20\",\n  \"Recipe\": \"LSL8in \\\\ 10PT_5mm\",\n  \"ResistivitySpec\": \"\",\n  \"Run\": \"20-577845-4628\",\n  \"SemiRadial\": \"1.55%\",\n  \"StDev\": \"1.33%\",\n  \"Temp\": \"19.2\",\n  \"UniqueId\": \"21.16;1;95.0;1803.847;270.0_Point-1\",\n  \"Zone\": null,\n  \"Details\": [\n    {\n      \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n      \"Merit\": \"21.16\",\n      \"Pt\": \"1\",\n      \"R\": \"95.0\",\n      \"Rs\": \"1803.847\",\n      \"T\": \"270.0\",\n      \"UniqueId\": \"21.16;1;95.0;1803.847;270.0_Point-1\"\n    },\n    {\n      \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n      \"Merit\": \"22.39\",\n      \"Pt\": \"2\",\n      \"R\": \"71.0\",\n      \"Rs\": \"1858.424\",\n      \"T\": \"270.0\",\n      \"UniqueId\": \"22.39;2;71.0;1858.424;270.0_Point-2\"\n    },\n    {\n      \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n      \"Merit\": \"21.07\",\n      \"Pt\": \"3\",\n      \"R\": \"47.0\",\n      \"Rs\": \"1834.141\",\n      \"T\": \"270.0\",\n      \"UniqueId\": \"21.07;3;47.0;1834.141;270.0_Point-3\"\n    },\n    {\n      \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n      \"Merit\": \"22.91\",\n      \"Pt\": \"4\",\n      \"R\": \"23.0\",\n      \"Rs\": \"1803.609\",\n      \"T\": \"270.0\",\n      \"UniqueId\": \"22.91;4;23.0;1803.609;270.0_Point-4\"\n    },\n    {\n      \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n      \"Merit\": \"21.94\",\n      \"Pt\": \"5\",\n      \"R\": \"0.0\",\n      \"Rs\": \"1801.623\",\n      \"T\": \"0.0\",\n      \"UniqueId\": \"21.94;5;0.0;1801.623;0.0_Point-5\"\n    },\n    {\n      \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n      \"Merit\": \"25.61\",\n      \"Pt\": \"6\",\n      \"R\": \"11.0\",\n      \"Rs\": \"1803.997\",\n      \"T\": \"90.0\",\n      \"UniqueId\": \"25.61;6;11.0;1803.997;90.0_Point-6\"\n    },\n    {\n      \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n      \"Merit\": \"24.73\",\n      \"Pt\": \"7\",\n      \"R\": \"35.0\",\n      \"Rs\": \"1819.854\",\n      \"T\": \"90.0\",\n      \"UniqueId\": \"24.73;7;35.0;1819.854;90.0_Point-7\"\n    },\n    {\n      \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n      \"Merit\": \"23.13\",\n      \"Pt\": \"8\",\n      \"R\": \"59.0\",\n      \"Rs\": \"1855.965\",\n      \"T\": \"90.0\",\n      \"UniqueId\": \"23.13;8;59.0;1855.965;90.0_Point-8\"\n    },\n    {\n      \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n      \"Merit\": \"23.44\",\n      \"Pt\": \"9\",\n      \"R\": \"83.0\",\n      \"Rs\": \"1853.631\",\n      \"T\": \"90.0\",\n      \"UniqueId\": \"23.44;9;83.0;1853.631;90.0_Point-9\"\n    },\n    {\n      \"HeaderUniqueId\": \"ResMap_20-577845-4628_20230227030723\",\n      \"Merit\": \"21.75\",\n      \"Pt\": \"10\",\n      \"R\": \"95.0\",\n      \"Rs\": \"1805.438\",\n      \"T\": \"90.0\",\n      \"UniqueId\": \"21.75;10;95.0;1805.438;90.0_Point-10\"\n    }\n  ]\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "7f723103-2cd6-4d09-b780-28afe34b3cd7",
 | 
				
			||||||
 | 
					    "colId": "history",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "Delete",
 | 
				
			||||||
 | 
					    "url": "https://tfs.intra.infineon.com/tfs/manufacturingit/APC%20Trend/_apis/test/runs/413094?api-version=6.0",
 | 
				
			||||||
 | 
					    "method": "DELETE",
 | 
				
			||||||
 | 
					    "sortNum": 0,
 | 
				
			||||||
 | 
					    "created": "2023-03-02T15:43:07.175Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-02T15:49:54.662Z",
 | 
				
			||||||
 | 
					    "headers": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "Authorization",
 | 
				
			||||||
 | 
					        "value": "Basic OmtzZHJveW9xMmJsdGI2N2xzN3NmZGhyYXlrY3l6cGlmemtkZjNndGs1bnl4ZnZmZHBqa2E="
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "params": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "api-version",
 | 
				
			||||||
 | 
					        "value": "6.0",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "2874b1ad-b298-48c1-8edb-6fd78ce7d2d9",
 | 
				
			||||||
 | 
					    "colId": "history",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "Get",
 | 
				
			||||||
 | 
					    "url": "https://tfs.intra.infineon.com/tfs/manufacturingit/Mesa_FI/_apis/test/runs?branchName=amaster&api-version=6.0",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 0,
 | 
				
			||||||
 | 
					    "created": "2023-03-02T15:53:18.138Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-02T16:12:27.892Z",
 | 
				
			||||||
 | 
					    "headers": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "Authorization",
 | 
				
			||||||
 | 
					        "value": "Basic OmtzZHJveW9xMmJsdGI2N2xzN3NmZGhyYXlrY3l6cGlmemtkZjNndGs1bnl4ZnZmZHBqa2E="
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "params": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "branchName",
 | 
				
			||||||
 | 
					        "value": "amaster",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "api-version",
 | 
				
			||||||
 | 
					        "value": "6.0",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "ed8728f5-9afa-4e69-bca3-9c059a9a831b",
 | 
				
			||||||
 | 
					    "colId": "history",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "Patch",
 | 
				
			||||||
 | 
					    "url": "https://tfs.intra.infineon.com/tfs/manufacturingit/Mesa_FI/_apis/test/runs/410737?api-version=6.0",
 | 
				
			||||||
 | 
					    "method": "PATCH",
 | 
				
			||||||
 | 
					    "sortNum": 0,
 | 
				
			||||||
 | 
					    "created": "2023-03-02T15:53:18.138Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-02T15:58:09.720Z",
 | 
				
			||||||
 | 
					    "headers": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "Authorization",
 | 
				
			||||||
 | 
					        "value": "Basic OmtzZHJveW9xMmJsdGI2N2xzN3NmZGhyYXlrY3l6cGlmemtkZjNndGs1bnl4ZnZmZHBqa2E="
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "params": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "api-version",
 | 
				
			||||||
 | 
					        "value": "6.0",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"name\": \"MET08RESIHGCV\",\n  \"comment\": \"40 passed\"\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "727621f0-63a3-4df2-9cfc-2610c532670d",
 | 
				
			||||||
 | 
					    "colId": "history",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "OI-RDS",
 | 
				
			||||||
 | 
					    "url": "http://messa020ec.ec.local/api/oiWizard/materials/rds/578941",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 0,
 | 
				
			||||||
 | 
					    "created": "2023-03-02T18:20:01.561Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-06T18:40:43.162Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "tests": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "json-query",
 | 
				
			||||||
 | 
					        "custom": "json.rds.rdsLayers",
 | 
				
			||||||
 | 
					        "action": "count",
 | 
				
			||||||
 | 
					        "value": "1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "4eafe190-e59e-4a3e-af76-356f62fde842",
 | 
				
			||||||
 | 
					    "colId": "history",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "https://oi-metrology-viewer-prod.mes.infineon.com/api/tooltypes",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/tooltypes",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 0,
 | 
				
			||||||
 | 
					    "created": "2023-03-07T17:20:54.044Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-07T17:20:54.044Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "280ea9be-50e3-4813-8eb0-ffff739fe196",
 | 
				
			||||||
 | 
					    "colId": "history",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetHeaders",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/export/headers",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 0,
 | 
				
			||||||
 | 
					    "created": "2023-03-07T17:21:05.219Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-07T19:35:11.146Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"PSN\": \"4698\",\n  \"RDS\": \"578824\",\n  \"Reactor\": \"62\",\n  \"ID\": 1678296039\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "6d8098aa-eb50-422e-b38d-32709d985e8e",
 | 
				
			||||||
 | 
					    "colId": "history",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetHeaders-Dev",
 | 
				
			||||||
 | 
					    "url": "http://mestsa008/api/export/headers",
 | 
				
			||||||
 | 
					    "method": "POST",
 | 
				
			||||||
 | 
					    "sortNum": 0,
 | 
				
			||||||
 | 
					    "created": "2023-03-07T17:21:05.219Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-08T18:18:04.054Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"PSN\": \"4698\",\n  \"RDS\": \"578824\",\n  \"Reactor\": \"62\",\n  \"ID\": 1678296039\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "61383ad6-ceb4-4d98-86c1-bf00c0e4204d",
 | 
				
			||||||
 | 
					    "colId": "history",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetHeaders-localhost",
 | 
				
			||||||
 | 
					    "url": "http://localhost:5126/api/export/headers",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 0,
 | 
				
			||||||
 | 
					    "created": "2023-03-07T17:21:05.219Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-08T19:05:54.744Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"PSN\": \"4698\",\n  \"RDS\": \"578824\",\n  \"Reactor\": \"62\",\n  \"ID\": -1678296039\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
							
								
								
									
										30
									
								
								.vscode/thunder-tests/thunderCollection.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								.vscode/thunder-tests/thunderCollection.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
 | 
				
			||||||
 | 
					    "colName": "InfinityQS EC Only",
 | 
				
			||||||
 | 
					    "created": "2023-02-27T20:07:11.913Z",
 | 
				
			||||||
 | 
					    "sortNum": 10000,
 | 
				
			||||||
 | 
					    "folders": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "fb96b15a-0cc4-48c7-8767-34f1242750e8",
 | 
				
			||||||
 | 
					    "colName": "Export EC",
 | 
				
			||||||
 | 
					    "created": "2023-03-08T17:16:29.420Z",
 | 
				
			||||||
 | 
					    "sortNum": 20000,
 | 
				
			||||||
 | 
					    "folders": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "5bfd00bc-b58c-49d3-9f27-5acadd060a51",
 | 
				
			||||||
 | 
					    "colName": "Export IFX",
 | 
				
			||||||
 | 
					    "created": "2023-03-08T17:31:19.468Z",
 | 
				
			||||||
 | 
					    "sortNum": 30000,
 | 
				
			||||||
 | 
					    "folders": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "9ebfb84d-fa73-4c00-a2e0-e9ec69a31a16",
 | 
				
			||||||
 | 
					    "colName": "LocalHost",
 | 
				
			||||||
 | 
					    "created": "2023-05-08T19:34:00.425Z",
 | 
				
			||||||
 | 
					    "sortNum": 40000,
 | 
				
			||||||
 | 
					    "folders": []
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
							
								
								
									
										1
									
								
								.vscode/thunder-tests/thunderEnvironment.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.vscode/thunder-tests/thunderEnvironment.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					[]
 | 
				
			||||||
							
								
								
									
										440
									
								
								.vscode/thunder-tests/thunderclient.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										440
									
								
								.vscode/thunder-tests/thunderclient.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,440 @@
 | 
				
			|||||||
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "acbbcc8d-3daf-43be-9081-f4be2f8a95b9",
 | 
				
			||||||
 | 
					    "colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetCommandText",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQS/commandText/?sub_group_id=1677273357&process=61&job=CDE5&part=5012&lot=575908&date_time=2023-02-24 14:15:00",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 20000,
 | 
				
			||||||
 | 
					    "created": "2023-02-27T20:07:11.921Z",
 | 
				
			||||||
 | 
					    "modified": "2023-02-27T20:07:11.921Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "sub_group_id",
 | 
				
			||||||
 | 
					        "value": "1677273357",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "process",
 | 
				
			||||||
 | 
					        "value": "61",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "job",
 | 
				
			||||||
 | 
					        "value": "CDE5",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "part",
 | 
				
			||||||
 | 
					        "value": "5012",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "lot",
 | 
				
			||||||
 | 
					        "value": "575908",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "date_time",
 | 
				
			||||||
 | 
					        "value": "2023-02-24 14:15:00",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "tests": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "Content-Length",
 | 
				
			||||||
 | 
					        "custom": "",
 | 
				
			||||||
 | 
					        "action": ">",
 | 
				
			||||||
 | 
					        "value": "100"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "29e56599-0093-481e-9386-9e6c1bb828a8",
 | 
				
			||||||
 | 
					    "colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetCommandTextV2",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV2/1677273357/commandText/?process=61&job=CDE5&part=5012&lot=575908&date_time=2023-02-24 14:15:00",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 30000,
 | 
				
			||||||
 | 
					    "created": "2023-02-27T20:07:11.923Z",
 | 
				
			||||||
 | 
					    "modified": "2023-02-27T20:07:11.923Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "process",
 | 
				
			||||||
 | 
					        "value": "61",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "job",
 | 
				
			||||||
 | 
					        "value": "CDE5",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "part",
 | 
				
			||||||
 | 
					        "value": "5012",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "lot",
 | 
				
			||||||
 | 
					        "value": "575908",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "name": "date_time",
 | 
				
			||||||
 | 
					        "value": "2023-02-24 14:15:00",
 | 
				
			||||||
 | 
					        "isPath": false
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "tests": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "Content-Length",
 | 
				
			||||||
 | 
					        "custom": "",
 | 
				
			||||||
 | 
					        "action": ">",
 | 
				
			||||||
 | 
					        "value": "100"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "2810520f-7a8b-4282-a593-92da3043e491",
 | 
				
			||||||
 | 
					    "colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetData",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQS/1677273357/data",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 40000,
 | 
				
			||||||
 | 
					    "created": "2023-02-27T20:07:11.924Z",
 | 
				
			||||||
 | 
					    "modified": "2023-02-27T20:07:11.924Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "tests": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "json-query",
 | 
				
			||||||
 | 
					        "custom": "json.",
 | 
				
			||||||
 | 
					        "action": "count",
 | 
				
			||||||
 | 
					        "value": "2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "8628d1b1-cedb-45e3-9958-0ba4e233a2ac",
 | 
				
			||||||
 | 
					    "colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetDataV2",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV2/1677273357/data",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 41250,
 | 
				
			||||||
 | 
					    "created": "2023-02-27T20:07:11.925Z",
 | 
				
			||||||
 | 
					    "modified": "2023-02-27T20:07:11.925Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "tests": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "json-query",
 | 
				
			||||||
 | 
					        "custom": "json.",
 | 
				
			||||||
 | 
					        "action": "count",
 | 
				
			||||||
 | 
					        "value": "2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "55c863ce-b828-4cdb-8a72-26da369c44ee",
 | 
				
			||||||
 | 
					    "colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetDescriptors",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQS/1677273357/descriptors",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 41875,
 | 
				
			||||||
 | 
					    "created": "2023-02-27T20:07:11.926Z",
 | 
				
			||||||
 | 
					    "modified": "2023-02-27T20:07:11.926Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "tests": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "json-query",
 | 
				
			||||||
 | 
					        "custom": "json.",
 | 
				
			||||||
 | 
					        "action": "count",
 | 
				
			||||||
 | 
					        "value": "2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "b25fade2-44b5-4897-94a6-e31062c27e58",
 | 
				
			||||||
 | 
					    "colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetDescriptorsV2",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV2/1677273357/descriptors",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 42187.5,
 | 
				
			||||||
 | 
					    "created": "2023-02-27T20:07:11.927Z",
 | 
				
			||||||
 | 
					    "modified": "2023-02-27T20:07:11.927Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "tests": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "json-query",
 | 
				
			||||||
 | 
					        "custom": "json.",
 | 
				
			||||||
 | 
					        "action": "count",
 | 
				
			||||||
 | 
					        "value": "2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "f24e826e-578c-45fe-a80a-ce31f0a13dfc",
 | 
				
			||||||
 | 
					    "colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetEvents",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQS/1677273357/events",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 42500,
 | 
				
			||||||
 | 
					    "created": "2023-02-27T20:07:11.928Z",
 | 
				
			||||||
 | 
					    "modified": "2023-02-27T20:07:11.928Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "tests": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "json-query",
 | 
				
			||||||
 | 
					        "custom": "json.",
 | 
				
			||||||
 | 
					        "action": "count",
 | 
				
			||||||
 | 
					        "value": "2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "81118bd8-5919-4501-aa34-eaa2f4baeabf",
 | 
				
			||||||
 | 
					    "colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetEventsV2",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV2/1677273357/events",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 43750,
 | 
				
			||||||
 | 
					    "created": "2023-02-27T20:07:11.929Z",
 | 
				
			||||||
 | 
					    "modified": "2023-02-27T20:07:11.929Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "tests": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "json-query",
 | 
				
			||||||
 | 
					        "custom": "json.",
 | 
				
			||||||
 | 
					        "action": "count",
 | 
				
			||||||
 | 
					        "value": "2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "26ded486-79ad-4fc8-b526-98187b8fde91",
 | 
				
			||||||
 | 
					    "colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetHeader",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQS/1677273357/header",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 45000,
 | 
				
			||||||
 | 
					    "created": "2023-02-27T20:07:11.930Z",
 | 
				
			||||||
 | 
					    "modified": "2023-02-27T20:07:11.930Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "tests": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "json-query",
 | 
				
			||||||
 | 
					        "custom": "json.",
 | 
				
			||||||
 | 
					        "action": "count",
 | 
				
			||||||
 | 
					        "value": "2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "b8ee8160-6ca2-4276-be91-d1f6f2dd90dc",
 | 
				
			||||||
 | 
					    "colId": "3743bec1-1f73-492a-9b9f-5889f239b5fc",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetHeaderV2",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV2/1677273357/header",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 55000,
 | 
				
			||||||
 | 
					    "created": "2023-02-27T20:07:11.931Z",
 | 
				
			||||||
 | 
					    "modified": "2023-02-27T20:07:11.931Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "tests": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "json-query",
 | 
				
			||||||
 | 
					        "custom": "json.",
 | 
				
			||||||
 | 
					        "action": "count",
 | 
				
			||||||
 | 
					        "value": "2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "0aafd6ed-26a6-4a07-825c-8c1fee603b6a",
 | 
				
			||||||
 | 
					    "colId": "fb96b15a-0cc4-48c7-8767-34f1242750e8",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetHeaders",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/export/headers",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 10000,
 | 
				
			||||||
 | 
					    "created": "2023-03-08T17:16:56.561Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-08T17:17:39.783Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"PSN\": \"4698\",\n  \"RDS\": \"578824\",\n  \"Reactor\": \"62\",\n  \"ID\": 1678296039\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "af298148-482d-4822-80ba-1abb86e1f9c2",
 | 
				
			||||||
 | 
					    "colId": "fb96b15a-0cc4-48c7-8767-34f1242750e8",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetExport",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/export/export",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 15000,
 | 
				
			||||||
 | 
					    "created": "2023-03-08T17:17:47.597Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-08T17:19:13.764Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"PSN\": \"4698\",\n  \"RDS\": \"578824\",\n  \"Reactor\": \"62\",\n  \"ID\": 1678296039\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "a787c81d-381e-451d-9d96-e607f06efdaf",
 | 
				
			||||||
 | 
					    "colId": "fb96b15a-0cc4-48c7-8767-34f1242750e8",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetLogistics",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/export/logistics",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 30000,
 | 
				
			||||||
 | 
					    "created": "2023-03-08T17:18:38.179Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-08T17:19:21.874Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"PSN\": \"4698\",\n  \"RDS\": \"578824\",\n  \"Reactor\": \"62\",\n  \"ID\": 1678296039\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "7e19c7d4-2d93-46e1-88fd-ba5312885713",
 | 
				
			||||||
 | 
					    "colId": "fb96b15a-0cc4-48c7-8767-34f1242750e8",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetProcessDataStandardFormat",
 | 
				
			||||||
 | 
					    "url": "https://oi-metrology-viewer-prod.mes.infineon.com/api/export/pdsf",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 40000,
 | 
				
			||||||
 | 
					    "created": "2023-03-08T17:18:49.042Z",
 | 
				
			||||||
 | 
					    "modified": "2023-03-08T17:19:27.119Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"PSN\": \"4698\",\n  \"RDS\": \"578824\",\n  \"Reactor\": \"62\",\n  \"ID\": 1678296039\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "25eb571f-064c-4b3f-8c20-666c66c1b123",
 | 
				
			||||||
 | 
					    "colId": "5bfd00bc-b58c-49d3-9f27-5acadd060a51",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetHeaders",
 | 
				
			||||||
 | 
					    "url": "https://messa017.infineon.com/api/export/headers",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 10000,
 | 
				
			||||||
 | 
					    "created": "2023-03-08T17:31:19.471Z",
 | 
				
			||||||
 | 
					    "modified": "2023-04-07T15:10:34.584Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"PSN\": \"4830\",\n  \"Reactor\": \"41\",\n  \"RDS\": \"584740\",\n  \"ID\": 1680657537,\n  \"Path\": \"\\\\\\\\messdv002.na.infineon.com\\\\Candela\\\\Archive\\\\API\\\\2023_Week_14\\\\-4830\\\\-41\\\\-584740\\\\-1680657537\\\\638162291037289598.json\"\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "f5feb8e3-0e82-4b47-a15e-97ef069a1539",
 | 
				
			||||||
 | 
					    "colId": "5bfd00bc-b58c-49d3-9f27-5acadd060a51",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetExport",
 | 
				
			||||||
 | 
					    "url": "https://messa017.infineon.com/api/export/export",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 15000,
 | 
				
			||||||
 | 
					    "created": "2023-03-08T17:31:19.472Z",
 | 
				
			||||||
 | 
					    "modified": "2023-04-07T15:10:45.402Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"PSN\": \"4830\",\n  \"Reactor\": \"41\",\n  \"RDS\": \"584740\",\n  \"ID\": 1680657537,\n  \"Path\": \"\\\\\\\\messdv002.na.infineon.com\\\\Candela\\\\Archive\\\\API\\\\2023_Week_14\\\\-4830\\\\-41\\\\-584740\\\\-1680657537\\\\638162291037289598.json\"\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "7fddba99-14a2-4c6a-bf4a-4b94391929cf",
 | 
				
			||||||
 | 
					    "colId": "5bfd00bc-b58c-49d3-9f27-5acadd060a51",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetLogistics",
 | 
				
			||||||
 | 
					    "url": "https://messa017.infineon.com/api/export/logistics",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 30000,
 | 
				
			||||||
 | 
					    "created": "2023-03-08T17:31:19.473Z",
 | 
				
			||||||
 | 
					    "modified": "2023-04-07T15:10:49.000Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"PSN\": \"4830\",\n  \"Reactor\": \"41\",\n  \"RDS\": \"584740\",\n  \"ID\": 1680657537,\n  \"Path\": \"\\\\\\\\messdv002.na.infineon.com\\\\Candela\\\\Archive\\\\API\\\\2023_Week_14\\\\-4830\\\\-41\\\\-584740\\\\-1680657537\\\\638162291037289598.json\"\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "07d5b0c3-684a-4cad-8a48-b164e8da87b0",
 | 
				
			||||||
 | 
					    "colId": "5bfd00bc-b58c-49d3-9f27-5acadd060a51",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "GetProcessDataStandardFormat",
 | 
				
			||||||
 | 
					    "url": "https://messa017.infineon.com/api/export/pdsf",
 | 
				
			||||||
 | 
					    "method": "GET",
 | 
				
			||||||
 | 
					    "sortNum": 40000,
 | 
				
			||||||
 | 
					    "created": "2023-03-08T17:31:19.474Z",
 | 
				
			||||||
 | 
					    "modified": "2023-04-07T15:10:53.080Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"PSN\": \"4830\",\n  \"Reactor\": \"41\",\n  \"RDS\": \"584740\",\n  \"ID\": 1680657537,\n  \"Path\": \"\\\\\\\\messdv002.na.infineon.com\\\\Candela\\\\Archive\\\\API\\\\2023_Week_14\\\\-4830\\\\-41\\\\-584740\\\\-1680657537\\\\638162291037289598.json\"\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "_id": "524e5261-69eb-4888-8818-608cde1ce506",
 | 
				
			||||||
 | 
					    "colId": "9ebfb84d-fa73-4c00-a2e0-e9ec69a31a16",
 | 
				
			||||||
 | 
					    "containerId": "",
 | 
				
			||||||
 | 
					    "name": "Inbound-SRP",
 | 
				
			||||||
 | 
					    "url": "http://localhost:5126/api/inbound/SRP",
 | 
				
			||||||
 | 
					    "method": "POST",
 | 
				
			||||||
 | 
					    "sortNum": 10000,
 | 
				
			||||||
 | 
					    "created": "2023-05-08T19:34:14.843Z",
 | 
				
			||||||
 | 
					    "modified": "2023-05-08T19:50:20.646Z",
 | 
				
			||||||
 | 
					    "headers": [],
 | 
				
			||||||
 | 
					    "params": [],
 | 
				
			||||||
 | 
					    "body": {
 | 
				
			||||||
 | 
					      "type": "json",
 | 
				
			||||||
 | 
					      "raw": "{\n  \"SentToMetrology\": false,\n  \"SentToSPC\": false,\n  \"Id\": 0,\n  \"Batch\": \"BIORAD#2\",\n  \"Cassette\": \"BIORAD2\",\n  \"CellName\": \"BIORAD2\",\n  \"Date\": \"05/08/2023 12:23:23 AM\",\n  \"FilePath\": \"\",\n  \"Layer\": \"1\",\n  \"MeanThickness\": \"21.8224\",\n  \"Op\": \"C\",\n  \"PSN\": \"5010\",\n  \"PassFail\": \"PASS\",\n  \"RDS\": \"588252\",\n  \"RVThickness\": \"2.0559\",\n  \"Reactor\": \"23\",\n  \"Recipe\": \"PROD_8inch\",\n  \"StdDev\": \"0.1483\",\n  \"Title\": \"Bio-RadQS400MEPI\",\n  \"UniqueId\": \"Bio-RadQS400MEPI_23-588252-5010.1_202305080023237034_5.4661928_Point-1\",\n  \"Wafer\": \"23-588252-5010.1\",\n  \"Zone\": \"-\",\n  \"Details\": []\n}",
 | 
				
			||||||
 | 
					      "form": []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "tests": []
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
							
								
								
									
										243
									
								
								Archive/.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								Archive/.editorconfig
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
				
			||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using OI.Metrology.Shared.DataModels;
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.Services;
 | 
					using OI.Metrology.Shared.Services;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
@ -8,13 +8,13 @@ using System.IO;
 | 
				
			|||||||
namespace OI.Metrology.Archive.ApiControllers;
 | 
					namespace OI.Metrology.Archive.ApiControllers;
 | 
				
			||||||
public class AttachmentsController : Controller
 | 
					public class AttachmentsController : Controller
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    private readonly IMetrologyRepo _Repo;
 | 
					 | 
				
			||||||
    private readonly IAttachmentsService _AttachmentsService;
 | 
					    private readonly IAttachmentsService _AttachmentsService;
 | 
				
			||||||
 | 
					    private readonly IMetrologyRepository _MetrologyRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public AttachmentsController(IMetrologyRepo repo, IAttachmentsService attachmentsService)
 | 
					    public AttachmentsController(IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        _Repo = repo;
 | 
					 | 
				
			||||||
        _AttachmentsService = attachmentsService;
 | 
					        _AttachmentsService = attachmentsService;
 | 
				
			||||||
 | 
					        _MetrologyRepository = metrologyRepository;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // this endpoint was created in hope that it would make retrieving attachments to display in OpenInsight easier
 | 
					    // 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 title,
 | 
				
			||||||
        string filename)
 | 
					        string filename)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = _Repo.GetToolTypeByName(toolTypeName);
 | 
					        ToolType tt = _MetrologyRepository.GetToolTypeByName(toolTypeName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase);
 | 
					        bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,17 +1,17 @@
 | 
				
			|||||||
using Microsoft.AspNetCore.Mvc;
 | 
					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;
 | 
					using System.Text.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// this controller is for the Awaiting Dispo functionality
 | 
					// this controller is for the Awaiting Dispo functionality
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class AwaitingDispoController : Controller
 | 
					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
 | 
					    // 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
 | 
					    // 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
 | 
					        var r = new
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Results = _Repo.GetAwaitingDispo()
 | 
					            Results = _MetrologyRepository.GetAwaitingDisposition()
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
					        return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -30,7 +30,7 @@ public class AwaitingDispoController : Controller
 | 
				
			|||||||
    [HttpPost("/api/awaitingdispo/markasreviewed")]
 | 
					    [HttpPost("/api/awaitingdispo/markasreviewed")]
 | 
				
			||||||
    public IActionResult MarkAsReviewed([FromQuery] long headerid, [FromQuery] int tooltypeid)
 | 
					    public IActionResult MarkAsReviewed([FromQuery] long headerid, [FromQuery] int tooltypeid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        _ = _Repo.UpdateReviewDate(tooltypeid, headerid, false);
 | 
					        _ = _MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, false);
 | 
				
			||||||
        return Ok();
 | 
					        return Ok();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -38,7 +38,7 @@ public class AwaitingDispoController : Controller
 | 
				
			|||||||
    [HttpPost("/api/awaitingdispo/markasawaiting")]
 | 
					    [HttpPost("/api/awaitingdispo/markasawaiting")]
 | 
				
			||||||
    public IActionResult MarkAsAwaiting([FromQuery] long headerid, [FromQuery] int tooltypeid)
 | 
					    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();
 | 
					            return Ok();
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            return StatusCode(444);
 | 
					            return StatusCode(444);
 | 
				
			||||||
 | 
				
			|||||||
@ -4,30 +4,30 @@ using Microsoft.Extensions.Logging;
 | 
				
			|||||||
using Newtonsoft.Json.Linq;
 | 
					using Newtonsoft.Json.Linq;
 | 
				
			||||||
using OI.Metrology.Archive.Models;
 | 
					using OI.Metrology.Archive.Models;
 | 
				
			||||||
using OI.Metrology.Shared.DataModels;
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.Services;
 | 
					using OI.Metrology.Shared.Services;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Archive.ApiContollers;
 | 
					namespace OI.Metrology.Archive.ApiControllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ApiController]
 | 
					[ApiController]
 | 
				
			||||||
public class InboundController : ControllerBase
 | 
					public class InboundController : ControllerBase
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    private readonly ILogger _Logger;
 | 
					    private readonly ILogger _Logger;
 | 
				
			||||||
    private readonly IMetrologyRepo _Repo;
 | 
					 | 
				
			||||||
    private readonly AppSettings _AppSettings;
 | 
					    private readonly AppSettings _AppSettings;
 | 
				
			||||||
    private readonly IAttachmentsService _AttachmentService;
 | 
					    private readonly IAttachmentsService _AttachmentService;
 | 
				
			||||||
    private readonly IInboundDataService _InboundDataService;
 | 
					    private readonly IInboundDataService _InboundDataService;
 | 
				
			||||||
 | 
					    private readonly IMetrologyRepository _MetrologyRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public InboundController(AppSettings appSettings, ILogger<InboundController> logger, IMetrologyRepo repo, IInboundDataService inboundDataService, IAttachmentsService attachmentService)
 | 
					    public InboundController(AppSettings appSettings, ILogger<InboundController> logger, IMetrologyRepository metrologyRepository, IInboundDataService inboundDataService, IAttachmentsService attachmentService)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        _Repo = repo;
 | 
					 | 
				
			||||||
        _Logger = logger;
 | 
					        _Logger = logger;
 | 
				
			||||||
        _AppSettings = appSettings;
 | 
					        _AppSettings = appSettings;
 | 
				
			||||||
        _AttachmentService = attachmentService;
 | 
					        _AttachmentService = attachmentService;
 | 
				
			||||||
        _InboundDataService = inboundDataService;
 | 
					        _InboundDataService = inboundDataService;
 | 
				
			||||||
 | 
					        _MetrologyRepository = metrologyRepository;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // this class represents the API response back to the client
 | 
					    // this class represents the API response back to the client
 | 
				
			||||||
@ -35,8 +35,8 @@ public class InboundController : ControllerBase
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        public bool Success { get; set; }
 | 
					        public bool Success { get; set; }
 | 
				
			||||||
        public long HeaderID { get; set; }
 | 
					        public long HeaderID { get; set; }
 | 
				
			||||||
        public List<string> Errors { get; set; }
 | 
					        public List<string>? Errors { get; set; }
 | 
				
			||||||
        public List<string> Warnings { get; set; }
 | 
					        public List<string>? Warnings { get; set; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // this is the main endpoint, it accepts a JSON message that contains both the header and data records together
 | 
					    // this is the main endpoint, it accepts a JSON message that contains both the header and data records together
 | 
				
			||||||
@ -61,9 +61,9 @@ public class InboundController : ControllerBase
 | 
				
			|||||||
            return Unauthorized(r);
 | 
					            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);
 | 
					            r.Errors.Add("Invalid tool type: " + tooltype);
 | 
				
			||||||
            return BadRequest(r);
 | 
					            return BadRequest(r);
 | 
				
			||||||
@ -71,9 +71,9 @@ public class InboundController : ControllerBase
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // get metadata
 | 
					        // get metadata
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        List<ToolTypeMetadata> metaData = _Repo.GetToolTypeMetadataByToolTypeID(toolType.ID).ToList();
 | 
					        List<ToolTypeMetadata> metaData = _MetrologyRepository.GetToolTypeMetadataByToolTypeID(toolType.ID).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (metaData == null)
 | 
					        if (metaData is null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            r.Errors.Add("Invalid metadata for tool type: " + tooltype);
 | 
					            r.Errors.Add("Invalid metadata for tool type: " + tooltype);
 | 
				
			||||||
            return BadRequest(r);
 | 
					            return BadRequest(r);
 | 
				
			||||||
@ -81,12 +81,12 @@ public class InboundController : ControllerBase
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // validate fields
 | 
					        // validate fields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (jsonbody != null)
 | 
					        if (jsonbody is not null)
 | 
				
			||||||
            _InboundDataService.ValidateJSONFields(jsonbody, 0, metaData, r.Errors, r.Warnings);
 | 
					            _InboundDataService.ValidateJSONFields(jsonbody, 0, metaData, r.Errors, r.Warnings);
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            r.Errors.Add("Invalid json");
 | 
					            r.Errors.Add("Invalid json");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (r.Errors.Count == 0)
 | 
					        if (r.Errors.Count == 0 && jsonbody is not null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -118,12 +118,12 @@ public class InboundController : ControllerBase
 | 
				
			|||||||
            return Unauthorized("Remote IP is not on allowed list");
 | 
					            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}");
 | 
					            return BadRequest($"Invalid tool type: {tooltype}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (Request.Form == null)
 | 
					        if (Request.Form is null)
 | 
				
			||||||
            return BadRequest($"Invalid form");
 | 
					            return BadRequest($"Invalid form");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (Request.Form.Files.Count != 1)
 | 
					        if (Request.Form.Files.Count != 1)
 | 
				
			||||||
@ -147,14 +147,14 @@ public class InboundController : ControllerBase
 | 
				
			|||||||
        if (string.IsNullOrWhiteSpace(_AppSettings.InboundApiAllowedIPList))
 | 
					        if (string.IsNullOrWhiteSpace(_AppSettings.InboundApiAllowedIPList))
 | 
				
			||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        System.Net.IPAddress remoteIP = HttpContext.Connection.RemoteIpAddress;
 | 
					        System.Net.IPAddress? remoteIP = HttpContext.Connection.RemoteIpAddress;
 | 
				
			||||||
        byte[] remoteIPBytes = remoteIP.GetAddressBytes();
 | 
					        byte[]? remoteIPBytes = remoteIP?.GetAddressBytes();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        string[] allowedIPs = _AppSettings.InboundApiAllowedIPList.Split(';');
 | 
					        string[] allowedIPs = _AppSettings.InboundApiAllowedIPList.Split(';');
 | 
				
			||||||
        foreach (string ip in allowedIPs)
 | 
					        foreach (string ip in allowedIPs)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            System.Net.IPAddress parsedIP;
 | 
					            System.Net.IPAddress? parsedIP;
 | 
				
			||||||
            if (System.Net.IPAddress.TryParse(ip, out parsedIP))
 | 
					            if (remoteIPBytes is not null && System.Net.IPAddress.TryParse(ip, out parsedIP))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (parsedIP.GetAddressBytes().SequenceEqual(remoteIPBytes))
 | 
					                if (parsedIP.GetAddressBytes().SequenceEqual(remoteIPBytes))
 | 
				
			||||||
                    return true;
 | 
					                    return true;
 | 
				
			||||||
 | 
				
			|||||||
@ -4,11 +4,11 @@ using System;
 | 
				
			|||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Archive.ApiContollers;
 | 
					namespace OI.Metrology.Archive.ApiControllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using OI.Metrology.Archive.Models;
 | 
					using OI.Metrology.Archive.Models;
 | 
				
			||||||
using OI.Metrology.Shared.DataModels;
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.Services;
 | 
					using OI.Metrology.Shared.Services;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Text.Json;
 | 
					using System.Text.Json;
 | 
				
			||||||
@ -21,15 +21,15 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
    // it is named after the /api/tooltypes prefix
 | 
					    // it is named after the /api/tooltypes prefix
 | 
				
			||||||
    // the URL pattern is RESTful and the tool type is the root of every request
 | 
					    // 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 AppSettings _AppSettings;
 | 
				
			||||||
    private readonly IAttachmentsService _AttachmentsService;
 | 
					    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;
 | 
					        _AppSettings = appSettings;
 | 
				
			||||||
        _AttachmentsService = attachmentsService;
 | 
					        _AttachmentsService = attachmentsService;
 | 
				
			||||||
 | 
					        _MetrologyRepository = metrologyRepository;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Get a list of tooltypes, returns just Name and ID
 | 
					    // Get a list of tooltypes, returns just Name and ID
 | 
				
			||||||
@ -38,7 +38,7 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        var r = new
 | 
					        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 });
 | 
					        return Json(r, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -48,8 +48,8 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
    [HttpGet("/api/tooltypes/{id}")]
 | 
					    [HttpGet("/api/tooltypes/{id}")]
 | 
				
			||||||
    public IActionResult GetToolTypeMetadata(int id, string sortby = "")
 | 
					    public IActionResult GetToolTypeMetadata(int id, string sortby = "")
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = _Repo.GetToolTypeByID(id);
 | 
					        ToolType tt = _MetrologyRepository.GetToolTypeByID(id);
 | 
				
			||||||
        IEnumerable<ToolTypeMetadata> md = _Repo.GetToolTypeMetadataByToolTypeID(id);
 | 
					        IEnumerable<ToolTypeMetadata> md = _MetrologyRepository.GetToolTypeMetadataByToolTypeID(id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (string.Equals(sortby, "grid", StringComparison.OrdinalIgnoreCase))
 | 
					        if (string.Equals(sortby, "grid", StringComparison.OrdinalIgnoreCase))
 | 
				
			||||||
            md = md.OrderBy(f => f.GridDisplayOrder).ToList();
 | 
					            md = md.OrderBy(f => f.GridDisplayOrder).ToList();
 | 
				
			||||||
@ -80,7 +80,7 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        long totalRecs;
 | 
					        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
 | 
					        var r = new
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -101,7 +101,7 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        long totalRecs;
 | 
					        long totalRecs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IEnumerable<HeaderCommon> dt = _Repo.GetHeaderTitles(id, page, pagesize, out totalRecs);
 | 
					        IEnumerable<HeaderCommon> dt = _MetrologyRepository.GetHeaderTitles(id, page, pagesize, out totalRecs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var r = new
 | 
					        var r = new
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -121,7 +121,7 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        var r = new
 | 
					        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);
 | 
					        string json = JsonConvert.SerializeObject(r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -137,7 +137,7 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        var r = new
 | 
					        var r = new
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Results = _Repo.GetDataSharePoint(id, title)
 | 
					            Results = _MetrologyRepository.GetDataSharePoint(id, title)
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        string json = JsonConvert.SerializeObject(r);
 | 
					        string json = JsonConvert.SerializeObject(r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -152,7 +152,7 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        var r = new
 | 
					        var r = new
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Results = _Repo.GetData(id, headerid)
 | 
					            Results = _MetrologyRepository.GetData(id, headerid)
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        string json = JsonConvert.SerializeObject(r);
 | 
					        string json = JsonConvert.SerializeObject(r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -168,7 +168,7 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
        string filename)
 | 
					        string filename)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ToolType tt = _Repo.GetToolTypeByID(toolTypeId);
 | 
					        ToolType tt = _MetrologyRepository.GetToolTypeByID(toolTypeId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase);
 | 
					        bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -191,7 +191,7 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
    public IActionResult OIExport(int toolTypeId, long headerid)
 | 
					    public IActionResult OIExport(int toolTypeId, long headerid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Call the export stored procedure
 | 
					        // Call the export stored procedure
 | 
				
			||||||
        System.Data.DataSet ds = _Repo.GetOIExportData(toolTypeId, headerid);
 | 
					        System.Data.DataSet ds = _MetrologyRepository.GetOIExportData(toolTypeId, headerid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try
 | 
					        try
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -203,7 +203,7 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
            if (ds.Tables[0].Rows.Count != 1)
 | 
					            if (ds.Tables[0].Rows.Count != 1)
 | 
				
			||||||
                throw new Exception("Error exporting, invalid filename");
 | 
					                throw new Exception("Error exporting, invalid filename");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            string filename = Convert.ToString(ds.Tables[0].Rows[0][0]);
 | 
					            string? filename = Convert.ToString(ds.Tables[0].Rows[0][0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // The second table has the header data
 | 
					            // The second table has the header data
 | 
				
			||||||
            if (ds.Tables[1].Rows.Count != 1)
 | 
					            if (ds.Tables[1].Rows.Count != 1)
 | 
				
			||||||
@ -211,9 +211,9 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            System.Text.StringBuilder sb = new();
 | 
					            System.Text.StringBuilder sb = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (object o in ds.Tables[1].Rows[0].ItemArray)
 | 
					            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(Convert.ToString(o));
 | 
				
			||||||
                _ = sb.Append('\t');
 | 
					                _ = sb.Append('\t');
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -221,9 +221,9 @@ public class ToolTypesController : Controller
 | 
				
			|||||||
            // The third table has the detail data
 | 
					            // The third table has the detail data
 | 
				
			||||||
            foreach (System.Data.DataRow dr in ds.Tables[2].Rows)
 | 
					            foreach (System.Data.DataRow dr in ds.Tables[2].Rows)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (object o in dr.ItemArray)
 | 
					                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(Convert.ToString(o));
 | 
				
			||||||
                    _ = sb.Append('\t');
 | 
					                    _ = sb.Append('\t');
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
				
			|||||||
@ -43,7 +43,8 @@ public class ApiLoggingMiddleware
 | 
				
			|||||||
                    else
 | 
					                    else
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        // if there are content type filters configured, only log is the request begins with one of them
 | 
					                        // 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));
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
				
			|||||||
@ -14,8 +14,8 @@ public class ErrorHandlerController : Controller
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public IActionResult Index()
 | 
					    public IActionResult Index()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        IExceptionHandlerFeature error = HttpContext.Features.Get<IExceptionHandlerFeature>();
 | 
					        IExceptionHandlerFeature? error = HttpContext.Features.Get<IExceptionHandlerFeature>();
 | 
				
			||||||
        if (error == null)
 | 
					        if (error is null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return Redirect("~/");
 | 
					            return Redirect("~/");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -24,7 +24,7 @@ public class ErrorHandlerController : Controller
 | 
				
			|||||||
            _Logger.LogError("Unhandled exception: " + error.Error.ToString());
 | 
					            _Logger.LogError("Unhandled exception: " + error.Error.ToString());
 | 
				
			||||||
            dynamic r = new
 | 
					            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);
 | 
					            return StatusCode(StatusCodes.Status500InternalServerError, r);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ using Microsoft.AspNetCore.Mvc.Filters;
 | 
				
			|||||||
using Microsoft.Extensions.Logging;
 | 
					using Microsoft.Extensions.Logging;
 | 
				
			||||||
using OI.Metrology.Archive.Models;
 | 
					using OI.Metrology.Archive.Models;
 | 
				
			||||||
using OI.Metrology.Shared.DataModels;
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.ViewModels;
 | 
					using OI.Metrology.Shared.ViewModels;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
@ -17,14 +17,14 @@ public class ExportController : Controller
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    private readonly ILogger _Logger;
 | 
					    private readonly ILogger _Logger;
 | 
				
			||||||
    private readonly bool _IsTestDatabase;
 | 
					    private readonly bool _IsTestDatabase;
 | 
				
			||||||
    private readonly IMetrologyRepo _Repo;
 | 
					 | 
				
			||||||
    private readonly AppSettings _AppSettings;
 | 
					    private readonly AppSettings _AppSettings;
 | 
				
			||||||
 | 
					    private readonly IMetrologyRepository _MetrologyRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public ExportController(AppSettings appSettings, ILogger<ExportController> logger, IMetrologyRepo repo)
 | 
					    public ExportController(AppSettings appSettings, ILogger<ExportController> logger, IMetrologyRepository metrologyRepository)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        _Repo = repo;
 | 
					 | 
				
			||||||
        _Logger = logger;
 | 
					        _Logger = logger;
 | 
				
			||||||
        _AppSettings = appSettings;
 | 
					        _AppSettings = appSettings;
 | 
				
			||||||
 | 
					        _MetrologyRepository = metrologyRepository;
 | 
				
			||||||
        _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
 | 
					        _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -40,7 +40,6 @@ public class ExportController : Controller
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        Export model = new()
 | 
					        Export model = new()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ToolType = "",
 | 
					 | 
				
			||||||
            StartTime = DateTime.Now.AddMonths(-1),
 | 
					            StartTime = DateTime.Now.AddMonths(-1),
 | 
				
			||||||
            EndTime = DateTime.Now
 | 
					            EndTime = DateTime.Now
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
@ -53,21 +52,21 @@ public class ExportController : Controller
 | 
				
			|||||||
    [Route("/ExportData")]
 | 
					    [Route("/ExportData")]
 | 
				
			||||||
    public ActionResult ExportData(Export model)
 | 
					    public ActionResult ExportData(Export model)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType toolType = null;
 | 
					        ToolType? toolType = null;
 | 
				
			||||||
        if (string.IsNullOrEmpty(model.ToolType))
 | 
					        if (string.IsNullOrEmpty(model.ToolType))
 | 
				
			||||||
            ModelState.AddModelError("Exception", "Invalid selection");
 | 
					            ModelState.AddModelError("Exception", "Invalid selection");
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (model.StartTime > model.EndTime)
 | 
					            if (model.StartTime > model.EndTime)
 | 
				
			||||||
                ModelState.AddModelError("EndTime", "End time must be after start time");
 | 
					                ModelState.AddModelError("EndTime", "End time must be after start time");
 | 
				
			||||||
            IEnumerable<ToolType> toolTypes = _Repo.GetToolTypes();
 | 
					            IEnumerable<ToolType> toolTypes = _MetrologyRepository.GetToolTypes();
 | 
				
			||||||
            toolType = toolTypes.Where(tt => tt.ID.ToString() == model.ToolType).SingleOrDefault();
 | 
					            toolType = toolTypes.Where(tt => tt.ID.ToString() == model.ToolType).SingleOrDefault();
 | 
				
			||||||
            if (toolType is null)
 | 
					            if (toolType is null)
 | 
				
			||||||
                ModelState.AddModelError("ToolType", "Invalid selection");
 | 
					                ModelState.AddModelError("ToolType", "Invalid selection");
 | 
				
			||||||
            else if (string.IsNullOrWhiteSpace(toolType.ExportSPName))
 | 
					            else if (string.IsNullOrWhiteSpace(toolType.ExportSPName))
 | 
				
			||||||
                ModelState.AddModelError("ToolType", "Tool type is not exportable");
 | 
					                ModelState.AddModelError("ToolType", "Tool type is not exportable");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (ModelState.IsValid)
 | 
					        if (ModelState.IsValid && toolType?.ToolTypeName is not null && toolType.ExportSPName is not null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -94,7 +93,7 @@ public class ExportController : Controller
 | 
				
			|||||||
        string fileName = string.Format("Export_{0}_{1:yyyyMMddHHmm}_to_{2:yyyyMMddHHmm}.csv", toolTypeName, startTime, endTime);
 | 
					        string fileName = string.Format("Export_{0}_{1:yyyyMMddHHmm}_to_{2:yyyyMMddHHmm}.csv", toolTypeName, startTime, endTime);
 | 
				
			||||||
        StringBuilder sb = new();
 | 
					        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));
 | 
					        _ = sb.AppendLine(GetColumnHeaders(dt));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -115,10 +114,13 @@ public class ExportController : Controller
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            if (i > 0)
 | 
					            if (i > 0)
 | 
				
			||||||
                _ = r.Append(',');
 | 
					                _ = r.Append(',');
 | 
				
			||||||
 | 
					 | 
				
			||||||
            object v = dr[i];
 | 
					            object v = dr[i];
 | 
				
			||||||
            if (!Convert.IsDBNull(v))
 | 
					            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();
 | 
					        return r.ToString();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -1,11 +1,11 @@
 | 
				
			|||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using Microsoft.AspNetCore.Mvc.Filters;
 | 
					using Microsoft.AspNetCore.Mvc.Filters;
 | 
				
			||||||
using OI.Metrology.Archive.Models;
 | 
					using OI.Metrology.Archive.Models;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Repositories;
 | 
				
			||||||
using OI.Metrology.Shared.ViewModels;
 | 
					using OI.Metrology.Shared.ViewModels;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using IO = System.IO;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Archive.Controllers;
 | 
					namespace OI.Metrology.Archive.Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -13,12 +13,12 @@ public class PagesController : Controller
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    private readonly bool _IsTestDatabase;
 | 
					    private readonly bool _IsTestDatabase;
 | 
				
			||||||
    private readonly IRdsMaxRepo _RdsMaxRepo;
 | 
					    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;
 | 
					        _RdsMaxRepo = rdsMaxRepo;
 | 
				
			||||||
        _MetrologyRepo = metrologyRepo;
 | 
					        _MetrologyRepo = metrologyRepository;
 | 
				
			||||||
        _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
 | 
					        _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -68,50 +68,6 @@ public class PagesController : Controller
 | 
				
			|||||||
    public IActionResult Crash() =>
 | 
					    public IActionResult Crash() =>
 | 
				
			||||||
        throw new Exception("Test unhandled exception");
 | 
					        throw new Exception("Test unhandled exception");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [HttpGet]
 | 
					 | 
				
			||||||
    [Route("/Step1")]
 | 
					 | 
				
			||||||
    [Route("/Metrology/Step1")]
 | 
					 | 
				
			||||||
    public IActionResult Step1(string mod = "", string equipment = "", string layer = "", string zone = "", string rds = "", string initials = "")
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        string directory = "D:/Tmp/Metrology";
 | 
					 | 
				
			||||||
        if (!IO.Directory.Exists(directory))
 | 
					 | 
				
			||||||
            _ = IO.Directory.CreateDirectory(directory);
 | 
					 | 
				
			||||||
        string[] model = new string[] { mod, equipment, layer, zone, rds, initials };
 | 
					 | 
				
			||||||
        if (!string.IsNullOrEmpty(initials))
 | 
					 | 
				
			||||||
            IO.File.WriteAllLines(IO.Path.Combine(directory, $"{DateTime.Now.Ticks}-{initials}.rsv"), model);
 | 
					 | 
				
			||||||
        return View(model);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    [HttpGet]
 | 
					 | 
				
			||||||
    [Route("/Step2")]
 | 
					 | 
				
			||||||
    [Route("/Metrology/Step2")]
 | 
					 | 
				
			||||||
    public IActionResult Step2(string mod) =>
 | 
					 | 
				
			||||||
        View(new string[] { mod });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    [HttpGet]
 | 
					 | 
				
			||||||
    [Route("/Step3")]
 | 
					 | 
				
			||||||
    [Route("/Metrology/Step3")]
 | 
					 | 
				
			||||||
    public IActionResult Step3(string mod, string equipment) =>
 | 
					 | 
				
			||||||
        View(new string[] { mod, equipment });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    [HttpGet]
 | 
					 | 
				
			||||||
    [Route("/Step4")]
 | 
					 | 
				
			||||||
    [Route("/Metrology/Step4")]
 | 
					 | 
				
			||||||
    public IActionResult Step4(string mod, string equipment, string layer) =>
 | 
					 | 
				
			||||||
        View(new string[] { mod, equipment, layer });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    [HttpGet]
 | 
					 | 
				
			||||||
    [Route("/Step5")]
 | 
					 | 
				
			||||||
    [Route("/Metrology/Step5")]
 | 
					 | 
				
			||||||
    public IActionResult Step5(string mod, string equipment, string layer, string zone) =>
 | 
					 | 
				
			||||||
        View(new string[] { mod, equipment, layer, zone });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    [HttpGet]
 | 
					 | 
				
			||||||
    [Route("/Step6")]
 | 
					 | 
				
			||||||
    [Route("/Metrology/Step6")]
 | 
					 | 
				
			||||||
    public IActionResult Step6(string mod, string equipment, string layer, string zone, string rds) =>
 | 
					 | 
				
			||||||
        View(new string[] { mod, equipment, layer, zone, rds });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    [HttpGet]
 | 
					    [HttpGet]
 | 
				
			||||||
    [Route("/RdsMax")]
 | 
					    [Route("/RdsMax")]
 | 
				
			||||||
    [Route("/Metrology/RdsMax")]
 | 
					    [Route("/Metrology/RdsMax")]
 | 
				
			||||||
 | 
				
			|||||||
@ -1,61 +1,24 @@
 | 
				
			|||||||
using System.Text.Json;
 | 
					using System.Text.Json;
 | 
				
			||||||
using System.Text.Json.Serialization;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Archive.Models;
 | 
					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()
 | 
					    public override string ToString()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
 | 
					        string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								Archive/Models/Binder/.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Archive/Models/Binder/.editorconfig
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					[*.cs]
 | 
				
			||||||
 | 
					csharp_preserve_single_line_statements = true
 | 
				
			||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
using Microsoft.Extensions.Configuration;
 | 
					using Microsoft.Extensions.Configuration;
 | 
				
			||||||
using System.ComponentModel.DataAnnotations;
 | 
					using System;
 | 
				
			||||||
using System.Text.Json;
 | 
					using System.Text.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Archive.Models.Binder;
 | 
					namespace OI.Metrology.Archive.Models.Binder;
 | 
				
			||||||
@ -7,25 +7,21 @@ namespace OI.Metrology.Archive.Models.Binder;
 | 
				
			|||||||
public class AppSettings
 | 
					public class AppSettings
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#nullable disable
 | 
					    public string? ApiLoggingContentTypes { get; set; }
 | 
				
			||||||
 | 
					    public string? ApiLoggingPathPrefixes { get; set; }
 | 
				
			||||||
    [Display(Name = "Api Logging Content Types"), Required] public string ApiLoggingContentTypes { get; set; }
 | 
					    public string? ApiLogPath { get; set; }
 | 
				
			||||||
    [Display(Name = "Api Logging Path Prefixes"), Required] public string ApiLoggingPathPrefixes { get; set; }
 | 
					    public string? AttachmentPath { get; set; }
 | 
				
			||||||
    [Display(Name = "Api Log Path"), Required] public string ApiLogPath { get; set; }
 | 
					    public string? BuildNumber { get; set; }
 | 
				
			||||||
    [Display(Name = "Attachment Path"), Required] public string AttachmentPath { get; set; }
 | 
					    public string? Company { get; set; }
 | 
				
			||||||
    [Display(Name = "Build Number"), Required] public string BuildNumber { get; set; }
 | 
					    public string? ConnectionString { get; set; }
 | 
				
			||||||
    [Display(Name = "Company"), Required] public string Company { get; set; }
 | 
					    public string? GitCommitSeven { get; set; }
 | 
				
			||||||
    [Display(Name = "Connection String"), Required] public string ConnectionString { get; set; }
 | 
					    public string? InboundApiAllowedIPList { get; set; }
 | 
				
			||||||
    [Display(Name = "Git Commit Seven"), Required] public string GitCommitSeven { get; set; }
 | 
					    public string? MonAResource { get; set; }
 | 
				
			||||||
    [Display(Name = "Inbound Api Allowed IP List"), Required] public string InboundApiAllowedIPList { get; set; }
 | 
					    public string? MonASite { get; set; }
 | 
				
			||||||
    [Display(Name = "MonA Resource"), Required] public string MonAResource { get; set; }
 | 
					    public string? Oi2SqlConnectionString { get; set; }
 | 
				
			||||||
    [Display(Name = "MonA Site"), Required] public string MonASite { get; set; }
 | 
					    public string? OIExportPath { get; set; }
 | 
				
			||||||
    [Display(Name = "Oi 2 Sql Connection String"), Required] public string Oi2SqlConnectionString { get; set; }
 | 
					    public string? URLs { get; set; }
 | 
				
			||||||
    [Display(Name = "OI Export Path"), Required] public string OIExportPath { get; set; }
 | 
					    public string? WorkingDirectoryName { 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()
 | 
					    public override string ToString()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@ -33,9 +29,25 @@ public class AppSettings
 | 
				
			|||||||
        return result;
 | 
					        return result;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static Models.AppSettings Get(AppSettings appSettings)
 | 
					    private static Models.AppSettings Get(AppSettings? appSettings)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Models.AppSettings result;
 | 
					        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(
 | 
					        result = new(
 | 
				
			||||||
            appSettings.ApiLoggingContentTypes,
 | 
					            appSettings.ApiLoggingContentTypes,
 | 
				
			||||||
            appSettings.ApiLoggingPathPrefixes,
 | 
					            appSettings.ApiLoggingPathPrefixes,
 | 
				
			||||||
@ -58,7 +70,23 @@ public class AppSettings
 | 
				
			|||||||
    public static Models.AppSettings Get(IConfigurationRoot configurationRoot)
 | 
					    public static Models.AppSettings Get(IConfigurationRoot configurationRoot)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Models.AppSettings result;
 | 
					        Models.AppSettings result;
 | 
				
			||||||
        AppSettings appSettings = configurationRoot.Get<AppSettings>();
 | 
					#pragma warning disable IL3050, IL2026
 | 
				
			||||||
 | 
					        AppSettings? appSettings = configurationRoot.Get<AppSettings>();
 | 
				
			||||||
 | 
					#pragma warning restore IL3050, IL2026
 | 
				
			||||||
 | 
					        if (appSettings?.ApiLoggingContentTypes is null)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider)
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider)
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                if (!physicalFileProvider.Root.Contains("UserSecrets"))
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                throw new NotSupportedException(physicalFileProvider.Root);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            throw new NotSupportedException("Not found!");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        result = Get(appSettings);
 | 
					        result = Get(appSettings);
 | 
				
			||||||
        return result;
 | 
					        return result;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -8,12 +8,14 @@
 | 
				
			|||||||
    <PropertyGroup>
 | 
					    <PropertyGroup>
 | 
				
			||||||
        <ImplicitUsings>disable</ImplicitUsings>
 | 
					        <ImplicitUsings>disable</ImplicitUsings>
 | 
				
			||||||
        <IsPackable>false</IsPackable>
 | 
					        <IsPackable>false</IsPackable>
 | 
				
			||||||
        <LangVersion>10.0</LangVersion>
 | 
					        <Nullable>enable</Nullable>
 | 
				
			||||||
        <Nullable>disable</Nullable>
 | 
					 | 
				
			||||||
        <OutputType>Exe</OutputType>
 | 
					        <OutputType>Exe</OutputType>
 | 
				
			||||||
        <RuntimeIdentifier>win-x64</RuntimeIdentifier>
 | 
					        <RuntimeIdentifier>win-x64</RuntimeIdentifier>
 | 
				
			||||||
        <TargetFramework>net6.0</TargetFramework>
 | 
					        <TargetFramework>net7.0</TargetFramework>
 | 
				
			||||||
    </PropertyGroup>
 | 
					    </PropertyGroup>
 | 
				
			||||||
 | 
					    <ItemGroup>
 | 
				
			||||||
 | 
					        <InternalsVisibleTo Include="Tests" />
 | 
				
			||||||
 | 
					    </ItemGroup>
 | 
				
			||||||
    <ItemGroup>
 | 
					    <ItemGroup>
 | 
				
			||||||
        <Compile Remove="logs\**" />
 | 
					        <Compile Remove="logs\**" />
 | 
				
			||||||
        <Content Remove="logs\**" />
 | 
					        <Content Remove="logs\**" />
 | 
				
			||||||
@ -24,30 +26,19 @@
 | 
				
			|||||||
        <Content Remove="compilerconfig.json" />
 | 
					        <Content Remove="compilerconfig.json" />
 | 
				
			||||||
    </ItemGroup>
 | 
					    </ItemGroup>
 | 
				
			||||||
    <ItemGroup>
 | 
					    <ItemGroup>
 | 
				
			||||||
        <PackageReference Include="Dapper" Version="2.0.123" />
 | 
					        <PackageReference Include="Dapper" Version="2.1.4" />
 | 
				
			||||||
        <PackageReference Include="EntityFramework" Version="6.4.4" />
 | 
					        <PackageReference Include="EntityFramework" Version="6.4.4" />
 | 
				
			||||||
        <PackageReference Include="jQuery" Version="3.6.0" />
 | 
					        <PackageReference Include="jQuery" Version="3.7.1" />
 | 
				
			||||||
        <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
 | 
					        <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
 | 
				
			||||||
    </ItemGroup>
 | 
					        <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.0" />
 | 
				
			||||||
    <ItemGroup>
 | 
					        <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.0" />
 | 
				
			||||||
        <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
 | 
					 | 
				
			||||||
        <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.1" />
 | 
					 | 
				
			||||||
        <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
 | 
					        <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
 | 
				
			||||||
        <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
 | 
					        <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
 | 
				
			||||||
 | 
					        <PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
 | 
				
			||||||
    </ItemGroup>
 | 
					    </ItemGroup>
 | 
				
			||||||
    <ItemGroup>
 | 
					    <ItemGroup>
 | 
				
			||||||
        <PackageReference Include="Serilog.AspNetCore" Version="5.0.0" />
 | 
					        <ProjectReference Include="..\Shared\OI.Metrology.Shared.csproj" />
 | 
				
			||||||
        <PackageReference Include="Serilog.AspNetCore.Ingestion" Version="1.0.0-dev-00021" />
 | 
					 | 
				
			||||||
        <PackageReference Include="Serilog.Settings.Configuration" Version="3.3.0" />
 | 
					 | 
				
			||||||
        <PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" />
 | 
					 | 
				
			||||||
        <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
 | 
					 | 
				
			||||||
        <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
 | 
					 | 
				
			||||||
    </ItemGroup>
 | 
					 | 
				
			||||||
    <ItemGroup>
 | 
					 | 
				
			||||||
        <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
 | 
					 | 
				
			||||||
    </ItemGroup>
 | 
					 | 
				
			||||||
    <ItemGroup>
 | 
					 | 
				
			||||||
        <ProjectReference Include="..\Shared\Shared.csproj" />
 | 
					 | 
				
			||||||
    </ItemGroup>
 | 
					    </ItemGroup>
 | 
				
			||||||
    <ItemGroup>
 | 
					    <ItemGroup>
 | 
				
			||||||
        <Folder Include="moves\" />
 | 
					        <Folder Include="moves\" />
 | 
				
			||||||
@ -9,9 +9,9 @@ using OI.Metrology.Archive.Models;
 | 
				
			|||||||
using OI.Metrology.Archive.Repositories;
 | 
					using OI.Metrology.Archive.Repositories;
 | 
				
			||||||
using OI.Metrology.Archive.Services;
 | 
					using OI.Metrology.Archive.Services;
 | 
				
			||||||
using OI.Metrology.Shared.Models;
 | 
					using OI.Metrology.Shared.Models;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Repositories;
 | 
				
			||||||
using OI.Metrology.Shared.Services;
 | 
					using OI.Metrology.Shared.Services;
 | 
				
			||||||
using Serilog;
 | 
					 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Reflection;
 | 
					using System.Reflection;
 | 
				
			||||||
@ -25,7 +25,7 @@ public class Program
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        string webRootPath;
 | 
					        string webRootPath;
 | 
				
			||||||
        Assembly assembly = Assembly.GetExecutingAssembly();
 | 
					        Assembly assembly = Assembly.GetExecutingAssembly();
 | 
				
			||||||
        string assemblyName = assembly.GetName()?.Name;
 | 
					        string? assemblyName = assembly.GetName()?.Name;
 | 
				
			||||||
        if (string.IsNullOrEmpty(assemblyName))
 | 
					        if (string.IsNullOrEmpty(assemblyName))
 | 
				
			||||||
            throw new Exception();
 | 
					            throw new Exception();
 | 
				
			||||||
        string baseAssemblyName = assemblyName.Split('.')[0];
 | 
					        string baseAssemblyName = assemblyName.Split('.')[0];
 | 
				
			||||||
@ -46,30 +46,26 @@ public class Program
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public static int Main(string[] args)
 | 
					    public static int Main(string[] args)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        LoggerConfiguration loggerConfiguration = new();
 | 
					        ILogger<Program>? logger = null;
 | 
				
			||||||
        (string assemblyName, WebApplicationOptions _) = Get(args);
 | 
					        (string assemblyName, WebApplicationOptions _) = Get(args);
 | 
				
			||||||
        WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
 | 
					        WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
 | 
				
			||||||
        _ = webApplicationBuilder.Configuration.AddUserSecrets<Program>();
 | 
					        _ = webApplicationBuilder.Configuration.AddUserSecrets<Program>();
 | 
				
			||||||
        AppSettings appSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration);
 | 
					        AppSettings _AppSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration);
 | 
				
			||||||
        if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName))
 | 
					        if (string.IsNullOrEmpty(_AppSettings.WorkingDirectoryName))
 | 
				
			||||||
            throw new Exception("Working directory name must have a value!");
 | 
					            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);
 | 
					        Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory);
 | 
				
			||||||
        _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, webApplicationBuilder.Configuration);
 | 
					 | 
				
			||||||
        _ = SerilogHostBuilderExtensions.UseSerilog(webApplicationBuilder.Host);
 | 
					 | 
				
			||||||
        Log.Logger = loggerConfiguration.CreateLogger();
 | 
					 | 
				
			||||||
        Serilog.ILogger log = Log.ForContext<Program>();
 | 
					 | 
				
			||||||
        try
 | 
					        try
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _ = webApplicationBuilder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);
 | 
					            _ = webApplicationBuilder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddControllersWithViews();
 | 
					            _ = webApplicationBuilder.Services.AddControllersWithViews();
 | 
				
			||||||
            _ = new MetrologyRepo(new SQLDbConnectionFactory(appSettings), null);
 | 
					            _ = new MetrologyRepository(new SQLDbConnectionFactory(_AppSettings), null);
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddDistributedMemoryCache();
 | 
					            _ = webApplicationBuilder.Services.AddDistributedMemoryCache();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddMemoryCache();
 | 
					            _ = webApplicationBuilder.Services.AddMemoryCache();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddSingleton<AppSettings, AppSettings>(_ => appSettings);
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<AppSettings, AppSettings>(_ => _AppSettings);
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddScoped<IAttachmentsService, AttachmentsService>();
 | 
					            _ = webApplicationBuilder.Services.AddScoped<IAttachmentsService, AttachmentsService>();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddScoped<IInboundDataService, InboundDataService>();
 | 
					            _ = webApplicationBuilder.Services.AddScoped<IInboundDataService, InboundDataService>();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddScoped<IMetrologyRepo, MetrologyRepo>();
 | 
					            _ = webApplicationBuilder.Services.AddScoped<IMetrologyRepository, MetrologyRepository>();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddScoped<IRdsMaxRepo, RdsMaxRepo>();
 | 
					            _ = webApplicationBuilder.Services.AddScoped<IRdsMaxRepo, RdsMaxRepo>();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddSingleton<IDbConnectionFactory, SQLDbConnectionFactory>();
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IDbConnectionFactory, SQLDbConnectionFactory>();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddSwaggerGen();
 | 
					            _ = webApplicationBuilder.Services.AddSwaggerGen();
 | 
				
			||||||
@ -83,13 +79,16 @@ public class Program
 | 
				
			|||||||
            if (WindowsServiceHelpers.IsWindowsService())
 | 
					            if (WindowsServiceHelpers.IsWindowsService())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
 | 
					                _ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
 | 
				
			||||||
 | 
					#pragma warning disable CA1416
 | 
				
			||||||
                _ = webApplicationBuilder.Logging.AddEventLog(settings =>
 | 
					                _ = webApplicationBuilder.Logging.AddEventLog(settings =>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (string.IsNullOrEmpty(settings.SourceName))
 | 
					                    if (string.IsNullOrEmpty(settings.SourceName))
 | 
				
			||||||
                        settings.SourceName = webApplicationBuilder.Environment.ApplicationName;
 | 
					                        settings.SourceName = webApplicationBuilder.Environment.ApplicationName;
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					#pragma warning restore
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            WebApplication webApplication = webApplicationBuilder.Build();
 | 
					            WebApplication webApplication = webApplicationBuilder.Build();
 | 
				
			||||||
 | 
					            logger = webApplication.Services.GetRequiredService<ILogger<Program>>();
 | 
				
			||||||
            if (!webApplicationBuilder.Environment.IsDevelopment())
 | 
					            if (!webApplicationBuilder.Environment.IsDevelopment())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _ = webApplication.UseExceptionHandler("/Error");
 | 
					                _ = webApplication.UseExceptionHandler("/Error");
 | 
				
			||||||
@ -97,7 +96,7 @@ public class Program
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (string.IsNullOrEmpty(appSettings.URLs))
 | 
					                if (string.IsNullOrEmpty(_AppSettings.URLs))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Environment.ExitCode = -1;
 | 
					                    Environment.ExitCode = -1;
 | 
				
			||||||
                    webApplication.Lifetime.StopApplication();
 | 
					                    webApplication.Lifetime.StopApplication();
 | 
				
			||||||
@ -105,27 +104,22 @@ public class Program
 | 
				
			|||||||
                _ = webApplication.UseSwagger();
 | 
					                _ = webApplication.UseSwagger();
 | 
				
			||||||
                _ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Archive V1"));
 | 
					                _ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Archive V1"));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            _ = webApplication.Lifetime.ApplicationStopped.Register(Log.CloseAndFlush);
 | 
					 | 
				
			||||||
            _ = ApplicationBuilderSerilogClientExtensions.UseSerilogIngestion(webApplication);
 | 
					 | 
				
			||||||
            _ = SerilogApplicationBuilderExtensions.UseSerilogRequestLogging(webApplication);
 | 
					 | 
				
			||||||
            _ = webApplication.UseFileServer(enableDirectoryBrowsing: true);
 | 
					            _ = webApplication.UseFileServer(enableDirectoryBrowsing: true);
 | 
				
			||||||
            _ = webApplication.UseStaticFiles();
 | 
					            _ = webApplication.UseStaticFiles();
 | 
				
			||||||
            _ = webApplication.UseSession();
 | 
					            _ = webApplication.UseSession();
 | 
				
			||||||
            _ = webApplication.UseHttpsRedirection();
 | 
					            _ = webApplication.UseHttpsRedirection();
 | 
				
			||||||
            _ = webApplication.UseMiddleware<ApiLoggingMiddleware>();
 | 
					            _ = webApplication.UseMiddleware<ApiLoggingMiddleware>();
 | 
				
			||||||
            _ = webApplication.MapControllers();
 | 
					            _ = webApplication.MapControllers();
 | 
				
			||||||
            log.Information("Starting Web Application");
 | 
					            logger.LogInformation("Starting Web Application");
 | 
				
			||||||
            webApplication.Run();
 | 
					            webApplication.Run();
 | 
				
			||||||
            return 0;
 | 
					            return 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        catch (Exception ex)
 | 
					        catch (Exception ex)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            log.Fatal(ex, "Host terminated unexpectedly");
 | 
					            try
 | 
				
			||||||
            return 1;
 | 
					            { logger?.LogCritical(ex, "Host terminated unexpectedly"); }
 | 
				
			||||||
        }
 | 
					            catch (Exception) { }
 | 
				
			||||||
        finally
 | 
					            throw;
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            Log.CloseAndFlush();
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@
 | 
				
			|||||||
using Microsoft.Extensions.Caching.Memory;
 | 
					using Microsoft.Extensions.Caching.Memory;
 | 
				
			||||||
using Newtonsoft.Json.Linq;
 | 
					using Newtonsoft.Json.Linq;
 | 
				
			||||||
using OI.Metrology.Shared.DataModels;
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Repositories;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
@ -12,12 +13,14 @@ using System.Transactions;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Archive.Repositories;
 | 
					namespace OI.Metrology.Archive.Repositories;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class MetrologyRepo : IMetrologyRepo
 | 
					#nullable disable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class MetrologyRepository : IMetrologyRepository
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    private readonly IDbConnectionFactory _DBConnectionFactory;
 | 
					    private readonly IDbConnectionFactory _DBConnectionFactory;
 | 
				
			||||||
    private readonly IMemoryCache _Cache;
 | 
					    private readonly IMemoryCache _Cache;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public MetrologyRepo(IDbConnectionFactory dbConnectionFactory, IMemoryCache memoryCache)
 | 
					    public MetrologyRepository(IDbConnectionFactory dbConnectionFactory, IMemoryCache memoryCache)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        _DBConnectionFactory = dbConnectionFactory;
 | 
					        _DBConnectionFactory = dbConnectionFactory;
 | 
				
			||||||
        _Cache = memoryCache;
 | 
					        _Cache = memoryCache;
 | 
				
			||||||
@ -28,20 +31,6 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
    protected DbProviderFactory GetDbProviderFactory(IDbConnection conn) =>
 | 
					    protected DbProviderFactory GetDbProviderFactory(IDbConnection conn) =>
 | 
				
			||||||
        DbProviderFactories.GetFactory(conn.GetType().Namespace);
 | 
					        DbProviderFactories.GetFactory(conn.GetType().Namespace);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public bool IsTestDatabase()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        int c = 0;
 | 
					 | 
				
			||||||
        using (DbConnection conn = GetDbConnection())
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            c = conn.Query<int>(
 | 
					 | 
				
			||||||
                "SELECT COUNT(*) " +
 | 
					 | 
				
			||||||
                "FROM Configuration " +
 | 
					 | 
				
			||||||
                "WHERE KeyName = 'TestDatabase' " +
 | 
					 | 
				
			||||||
                "AND ValueString = '1'").FirstOrDefault();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return c > 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public TransactionScope StartTransaction() => new();
 | 
					    public TransactionScope StartTransaction() => new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected void CacheItem(string key, object v)
 | 
					    protected void CacheItem(string key, object v)
 | 
				
			||||||
@ -136,10 +125,10 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
            // build field map
 | 
					            // build field map
 | 
				
			||||||
            foreach (ToolTypeMetadata f in fields)
 | 
					            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();
 | 
					                    string n = f.ApiName.Split('\\')[0].Trim().ToUpper();
 | 
				
			||||||
                    if (containerField == null)
 | 
					                    if (containerField is null)
 | 
				
			||||||
                        containerField = n;
 | 
					                        containerField = n;
 | 
				
			||||||
                    else if (!string.Equals(containerField, n))
 | 
					                    else if (!string.Equals(containerField, n))
 | 
				
			||||||
                        throw new Exception("Only one container field is allowed");
 | 
					                        throw new Exception("Only one container field is allowed");
 | 
				
			||||||
@ -153,7 +142,7 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (containerField == null)
 | 
					            if (containerField is null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                // No container field, just  insert a single row
 | 
					                // No container field, just  insert a single row
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -164,7 +153,7 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
                // Find the container field in the json
 | 
					                // Find the container field in the json
 | 
				
			||||||
                JProperty contJP = jsonrow.Children<JProperty>().Where(c => string.Equals(c.Name.Trim(), containerField, StringComparison.OrdinalIgnoreCase)).SingleOrDefault();
 | 
					                JProperty contJP = jsonrow.Children<JProperty>().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;
 | 
					                    JArray contRows = array;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -227,14 +216,13 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
                parmnumber += 1;
 | 
					                parmnumber += 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                object sqlValue = ((JValue)jp.Value).Value;
 | 
					                object sqlValue = ((JValue)jp.Value).Value;
 | 
				
			||||||
                if (sqlValue == null)
 | 
					                sqlValue ??= DBNull.Value;
 | 
				
			||||||
                    sqlValue = DBNull.Value;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                AddParameter(cmd, parmname, sqlValue);
 | 
					                AddParameter(cmd, parmname, sqlValue);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ((containerrow != null) && (containerFieldmap != null))
 | 
					        if ((containerrow is not null) && (containerFieldmap is not null))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (JProperty jp in containerrow.Children<JProperty>())
 | 
					            foreach (JProperty jp in containerrow.Children<JProperty>())
 | 
				
			||||||
@ -251,8 +239,7 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
                    parmnumber += 1;
 | 
					                    parmnumber += 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    object sqlValue = ((JValue)jp.Value).Value;
 | 
					                    object sqlValue = ((JValue)jp.Value).Value;
 | 
				
			||||||
                    if (sqlValue == null)
 | 
					                    sqlValue ??= DBNull.Value;
 | 
				
			||||||
                        sqlValue = DBNull.Value;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    AddParameter(cmd, parmname, sqlValue);
 | 
					                    AddParameter(cmd, parmname, sqlValue);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -266,7 +253,7 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
        cmd.CommandText = columns.TrimEnd(',') + parms.TrimEnd(',') + ";SELECT SCOPE_IDENTITY();";
 | 
					        cmd.CommandText = columns.TrimEnd(',') + parms.TrimEnd(',') + ";SELECT SCOPE_IDENTITY();";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        object o = cmd.ExecuteScalar();
 | 
					        object o = cmd.ExecuteScalar();
 | 
				
			||||||
        if ((o == null) || Convert.IsDBNull(o))
 | 
					        if ((o is null) || Convert.IsDBNull(o))
 | 
				
			||||||
            throw new Exception("Unexpected query result");
 | 
					            throw new Exception("Unexpected query result");
 | 
				
			||||||
        return Convert.ToInt64(o);
 | 
					        return Convert.ToInt64(o);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -306,7 +293,7 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (!firstField)
 | 
					                if (!firstField)
 | 
				
			||||||
                    _ = sb.Append(',');
 | 
					                    _ = 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 + "]");
 | 
					                    _ = sb.AppendFormat("{0}", "ISNULL(" + f.ColumnName + ", '')[" + f.ColumnName + "]");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -323,13 +310,9 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public DataTable GetHeaders(int toolTypeId, DateTime? startTime, DateTime? endTime, int? pageNo, int? pageSize, long? headerId, out long totalRecords)
 | 
					    public DataTable GetHeaders(int toolTypeId, DateTime? startTime, DateTime? endTime, int? pageNo, int? pageSize, long? headerId, out long totalRecords)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = GetToolTypeByID(toolTypeId);
 | 
					        ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
 | 
				
			||||||
        if (tt == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type ID");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId);
 | 
					        IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId) ?? throw new Exception("Invalid tool type metadata");
 | 
				
			||||||
        if (md == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type metadata");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        DataTable dt = new();
 | 
					        DataTable dt = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -419,13 +402,9 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
    // Go Here Next
 | 
					    // Go Here Next
 | 
				
			||||||
    public DataTable GetData(int toolTypeId, long headerid)
 | 
					    public DataTable GetData(int toolTypeId, long headerid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = GetToolTypeByID(toolTypeId);
 | 
					        ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
 | 
				
			||||||
        if (tt == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type ID");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId);
 | 
					        IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId) ?? throw new Exception("Invalid tool type metadata");
 | 
				
			||||||
        if (md == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type metadata");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        DataTable dt = new();
 | 
					        DataTable dt = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -530,13 +509,9 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    public DataTable GetDataSharePoint(int toolTypeId, string headerid)
 | 
					    public DataTable GetDataSharePoint(int toolTypeId, string headerid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = GetToolTypeByID(toolTypeId);
 | 
					        ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
 | 
				
			||||||
        if (tt == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type ID");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId);
 | 
					        IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId) ?? throw new Exception("Invalid tool type metadata");
 | 
				
			||||||
        if (md == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type metadata");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        DataTable dt = new();
 | 
					        DataTable dt = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -625,9 +600,7 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    public Guid GetHeaderAttachmentID(int toolTypeId, long headerId)
 | 
					    public Guid GetHeaderAttachmentID(int toolTypeId, long headerId)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = GetToolTypeByID(toolTypeId);
 | 
					        ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
 | 
				
			||||||
        if (tt == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type ID");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        using DbConnection conn = GetDbConnection();
 | 
					        using DbConnection conn = GetDbConnection();
 | 
				
			||||||
        string sql =
 | 
					        string sql =
 | 
				
			||||||
@ -638,9 +611,7 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public Guid GetDataAttachmentID(int toolTypeId, long headerId, string title)
 | 
					    public Guid GetDataAttachmentID(int toolTypeId, long headerId, string title)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = GetToolTypeByID(toolTypeId);
 | 
					        ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
 | 
				
			||||||
        if (tt == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type ID");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        using DbConnection conn = GetDbConnection();
 | 
					        using DbConnection conn = GetDbConnection();
 | 
				
			||||||
        string sql =
 | 
					        string sql =
 | 
				
			||||||
@ -657,9 +628,7 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public DataSet GetOIExportData(int toolTypeId, long headerid)
 | 
					    public DataSet GetOIExportData(int toolTypeId, long headerid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = GetToolTypeByID(toolTypeId);
 | 
					        ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
 | 
				
			||||||
        if (tt == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type ID");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (string.IsNullOrWhiteSpace(tt.OIExportSPName))
 | 
					        if (string.IsNullOrWhiteSpace(tt.OIExportSPName))
 | 
				
			||||||
            throw new Exception("OpenInsight export not available for " + tt.ToolTypeName);
 | 
					            throw new Exception("OpenInsight export not available for " + tt.ToolTypeName);
 | 
				
			||||||
@ -684,28 +653,29 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
        return ds;
 | 
					        return ds;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public IEnumerable<HeaderCommon> 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 (toolTypeId is null)
 | 
				
			||||||
        if (tt == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type ID");
 | 
					            throw new Exception("Invalid tool type ID");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ToolType tt = GetToolTypeByID(toolTypeId.Value) ?? throw new Exception("Invalid tool type ID");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        DbConnection conn = GetDbConnection();
 | 
					        DbConnection conn = GetDbConnection();
 | 
				
			||||||
        using (conn)
 | 
					        using (conn)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            string sql = $"SELECT ID, InsertDate, AttachmentID, Title, [Date] FROM {tt.HeaderTableName} ORDER BY [Date] DESC ";
 | 
					            string sql = $"SELECT ID, InsertDate, AttachmentID, Title, [Date] FROM {tt.HeaderTableName} ORDER BY [Date] DESC ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            IEnumerable<HeaderCommon> headers;
 | 
					            HeaderCommon[] headers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (pageNo.HasValue && pageSize.HasValue)
 | 
					            if (pageNo.HasValue && pageSize.HasValue)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                sql += "OFFSET @PageNum * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY";
 | 
					                sql += "OFFSET @PageNum * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                headers = conn.Query<HeaderCommon>(sql, param: new { PageNum = pageNo.Value, PageSize = pageSize.Value }).ToList();
 | 
					                headers = conn.Query<HeaderCommon>(sql, param: new { PageNum = pageNo.Value, PageSize = pageSize.Value }).ToArray();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                headers = conn.Query<HeaderCommon>(sql).ToList();
 | 
					                headers = conn.Query<HeaderCommon>(sql).ToArray();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            sql = $"SELECT COUNT(*) FROM [{tt.HeaderTableName}] ";
 | 
					            sql = $"SELECT COUNT(*) FROM [{tt.HeaderTableName}] ";
 | 
				
			||||||
@ -718,13 +688,9 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public IEnumerable<KeyValuePair<string, string>> GetHeaderFields(int toolTypeId, long headerid)
 | 
					    public IEnumerable<KeyValuePair<string, string>> GetHeaderFields(int toolTypeId, long headerid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = GetToolTypeByID(toolTypeId);
 | 
					        ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
 | 
				
			||||||
        if (tt == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type ID");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId);
 | 
					        IEnumerable<ToolTypeMetadata> md = GetToolTypeMetadataByToolTypeID(toolTypeId) ?? throw new Exception("Invalid tool type metadata");
 | 
				
			||||||
        if (md == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type metadata");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        List<KeyValuePair<string, string>> r = new();
 | 
					        List<KeyValuePair<string, string>> r = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -751,10 +717,10 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
            foreach (ToolTypeMetadata m in md.Where(m => m.Header == true && m.TableDisplayOrder > 0).OrderBy(m => m.TableDisplayOrder))
 | 
					            foreach (ToolTypeMetadata m in md.Where(m => m.Header == true && m.TableDisplayOrder > 0).OrderBy(m => m.TableDisplayOrder))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                string v = "";
 | 
					                string v = "";
 | 
				
			||||||
                if (dr != null)
 | 
					                if (dr is not null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    object o = dr[m.ColumnName];
 | 
					                    object o = dr[m.ColumnName];
 | 
				
			||||||
                    if (o != null && !Convert.IsDBNull(o))
 | 
					                    if (o is not null && !Convert.IsDBNull(o))
 | 
				
			||||||
                        v = Convert.ToString(o);
 | 
					                        v = Convert.ToString(o);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                KeyValuePair<string, string> kvp = new(m.DisplayTitle, v);
 | 
					                KeyValuePair<string, string> kvp = new(m.DisplayTitle, v);
 | 
				
			||||||
@ -764,17 +730,15 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
        return r;
 | 
					        return r;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public IEnumerable<AwaitingDispo> GetAwaitingDispo()
 | 
					    public IEnumerable<AwaitingDisposition> GetAwaitingDisposition()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        using DbConnection conn = GetDbConnection();
 | 
					        using DbConnection conn = GetDbConnection();
 | 
				
			||||||
        return conn.Query<AwaitingDispo>("GetAwaitingDispo", commandType: CommandType.StoredProcedure);
 | 
					        return conn.Query<AwaitingDisposition>("GetAwaitingDispo", commandType: CommandType.StoredProcedure);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // Jonathan changed this to remove the reviewDate update on the database.
 | 
					    // Jonathan changed this to remove the reviewDate update on the database.
 | 
				
			||||||
    public int UpdateReviewDate(int toolTypeId, long headerId, bool clearDate)
 | 
					    public int UpdateReviewDate(int toolTypeId, long headerId, bool clearDate)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = GetToolTypeByID(toolTypeId);
 | 
					        ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
 | 
				
			||||||
        if (tt == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type ID");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        using DbConnection conn = GetDbConnection();
 | 
					        using DbConnection conn = GetDbConnection();
 | 
				
			||||||
        if (clearDate)
 | 
					        if (clearDate)
 | 
				
			||||||
@ -793,9 +757,7 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public Guid GetHeaderAttachmentIDByTitle(int toolTypeId, string title)
 | 
					    public Guid GetHeaderAttachmentIDByTitle(int toolTypeId, string title)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = GetToolTypeByID(toolTypeId);
 | 
					        ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
 | 
				
			||||||
        if (tt == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type ID");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        using DbConnection conn = GetDbConnection();
 | 
					        using DbConnection conn = GetDbConnection();
 | 
				
			||||||
        string sql =
 | 
					        string sql =
 | 
				
			||||||
@ -805,9 +767,7 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public Guid GetDataAttachmentIDByTitle(int toolTypeId, string title)
 | 
					    public Guid GetDataAttachmentIDByTitle(int toolTypeId, string title)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType tt = GetToolTypeByID(toolTypeId);
 | 
					        ToolType tt = GetToolTypeByID(toolTypeId) ?? throw new Exception("Invalid tool type ID");
 | 
				
			||||||
        if (tt == null)
 | 
					 | 
				
			||||||
            throw new Exception("Invalid tool type ID");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        using DbConnection conn = GetDbConnection();
 | 
					        using DbConnection conn = GetDbConnection();
 | 
				
			||||||
        string sql =
 | 
					        string sql =
 | 
				
			||||||
@ -815,8 +775,8 @@ public class MetrologyRepo : IMetrologyRepo
 | 
				
			|||||||
        return conn.ExecuteScalar<Guid>(sql, param: new { Title = title });
 | 
					        return conn.ExecuteScalar<Guid>(sql, param: new { Title = title });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    string IMetrologyRepo.GetHeaderInsertDate(int toolTypeId, long headerId) => throw new NotImplementedException();
 | 
					    string IMetrologyRepository.GetHeaderInsertDate(int toolTypeId, long headerId) => throw new NotImplementedException();
 | 
				
			||||||
    void IMetrologyRepo.SetHeaderDirName(string tableName, long headerId, string dateDir) => throw new NotImplementedException();
 | 
					    void IMetrologyRepository.SetHeaderDirName(string tableName, long headerId, string dateDir) => throw new NotImplementedException();
 | 
				
			||||||
    string IMetrologyRepo.GetDataInsertDate(int toolTypeId, long headerId, string title) => throw new NotImplementedException();
 | 
					    string IMetrologyRepository.GetDataInsertDate(int toolTypeId, long headerId, string title) => throw new NotImplementedException();
 | 
				
			||||||
    void IMetrologyRepo.SetDataDirName(string tableName, long headerId, string title, string dateDir) => throw new NotImplementedException();
 | 
					    void IMetrologyRepository.SetDataDirName(string tableName, long headerId, string title, string dateDir) => throw new NotImplementedException();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -11,6 +11,8 @@ using System.Text;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Archive.Repositories;
 | 
					namespace OI.Metrology.Archive.Repositories;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#nullable disable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class RdsMaxRepo : IRdsMaxRepo
 | 
					public class RdsMaxRepo : IRdsMaxRepo
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -6,13 +6,15 @@ using System.Data.SqlClient;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Archive.Repositories;
 | 
					namespace OI.Metrology.Archive.Repositories;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#nullable disable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class SQLDbConnectionFactory : IDbConnectionFactory
 | 
					public class SQLDbConnectionFactory : IDbConnectionFactory
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    private readonly AppSettings _AppSettings;
 | 
					    private readonly AppSettings _AppSettings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public SQLDbConnectionFactory(AppSettings appSettings) => _AppSettings = appSettings;
 | 
					    public SQLDbConnectionFactory(AppSettings appSettings) => _AppSettings = appSettings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public DbConnection GetDbConnection()
 | 
					    public DbConnection GetDbConnection(bool? useOI2Sql = null)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        DbProviderFactories.RegisterFactory(
 | 
					        DbProviderFactories.RegisterFactory(
 | 
				
			||||||
            typeof(SqlConnection).Namespace,
 | 
					            typeof(SqlConnection).Namespace,
 | 
				
			||||||
 | 
				
			|||||||
@ -4,29 +4,31 @@ using System.IO;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Archive.Services;
 | 
					namespace OI.Metrology.Archive.Services;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#nullable disable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using OI.Metrology.Archive.Models;
 | 
					using OI.Metrology.Archive.Models;
 | 
				
			||||||
using OI.Metrology.Shared.DataModels;
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.Services;
 | 
					using OI.Metrology.Shared.Services;
 | 
				
			||||||
using System.Data.SqlClient;
 | 
					using System.Data.SqlClient;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class AttachmentsService : IAttachmentsService
 | 
					public class AttachmentsService : IAttachmentsService
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private readonly IMetrologyRepo _Repo;
 | 
					 | 
				
			||||||
    private readonly AppSettings _AppSettings;
 | 
					    private readonly AppSettings _AppSettings;
 | 
				
			||||||
 | 
					    private readonly IMetrologyRepository _MetrologyRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public AttachmentsService(AppSettings appSettings, IMetrologyRepo repo)
 | 
					    public AttachmentsService(AppSettings appSettings, IMetrologyRepository metrologyRepository)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        _Repo = repo;
 | 
					 | 
				
			||||||
        _AppSettings = appSettings;
 | 
					        _AppSettings = appSettings;
 | 
				
			||||||
 | 
					        _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))
 | 
					        if (attachmentId.Equals(Guid.Empty))
 | 
				
			||||||
            throw new Exception("No attachments found");
 | 
					            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;
 | 
					        int year = insertDate.Year;
 | 
				
			||||||
        DateTime d = insertDate;
 | 
					        DateTime d = insertDate;
 | 
				
			||||||
        CultureInfo cul = CultureInfo.CurrentCulture;
 | 
					        CultureInfo cul = CultureInfo.CurrentCulture;
 | 
				
			||||||
@ -63,7 +65,7 @@ public class AttachmentsService : IAttachmentsService
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public Stream GetAttachmentStreamByTitle(ToolType toolType, bool header, string title, string filename)
 | 
					    public Stream GetAttachmentStreamByTitle(ToolType toolType, bool header, string title, string filename)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (toolType == null)
 | 
					        if (toolType is null)
 | 
				
			||||||
            throw new Exception("Invalid tool type");
 | 
					            throw new Exception("Invalid tool type");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        string queryString = "SELECT * FROM " + toolType.DataTableName + " WHERE AttachmentId = @attachmentId";
 | 
					        string queryString = "SELECT * FROM " + toolType.DataTableName + " WHERE AttachmentId = @attachmentId";
 | 
				
			||||||
@ -72,7 +74,7 @@ public class AttachmentsService : IAttachmentsService
 | 
				
			|||||||
            queryString = "SELECT * FROM " + toolType.HeaderTableName + " WHERE AttachmentId = '" + title + "'";
 | 
					            queryString = "SELECT * FROM " + toolType.HeaderTableName + " WHERE AttachmentId = '" + title + "'";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        DateTime SearchDate = new();
 | 
					        DateTime SearchDate = new();
 | 
				
			||||||
        string connectionString = @"Server=messv01ec.ec.local\PROD1,53959;Database=Metrology_Archive;Integrated Security=True";
 | 
					        string connectionString = @"Server=messqlec1.infineon.com\PROD1,53959;Database=Metrology_Archive;Integrated Security=True";
 | 
				
			||||||
        using (SqlConnection connection = new(connectionString))
 | 
					        using (SqlConnection connection = new(connectionString))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            SqlCommand command = new(queryString, connection);
 | 
					            SqlCommand command = new(queryString, connection);
 | 
				
			||||||
@ -103,19 +105,19 @@ public class AttachmentsService : IAttachmentsService
 | 
				
			|||||||
        if (header)
 | 
					        if (header)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            tableName = toolType.HeaderTableName;
 | 
					            tableName = toolType.HeaderTableName;
 | 
				
			||||||
            attachmentId = _Repo.GetHeaderAttachmentIDByTitle(toolType.ID, title);
 | 
					            attachmentId = _MetrologyRepository.GetHeaderAttachmentIDByTitle(toolType.ID, title);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            tableName = toolType.DataTableName;
 | 
					            tableName = toolType.DataTableName;
 | 
				
			||||||
            attachmentId = _Repo.GetDataAttachmentIDByTitle(toolType.ID, title);
 | 
					            attachmentId = _MetrologyRepository.GetDataAttachmentIDByTitle(toolType.ID, title);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return GetAttachmentStream(tableName, attachmentId, filename);
 | 
					        return GetAttachmentStream(tableName, attachmentId, filename);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Stream GetAttachmentStreamByAttachmentId(ToolType toolType, bool header, Guid attachmentId, string 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");
 | 
					            throw new Exception("Invalid tool type");
 | 
				
			||||||
        string tableName;
 | 
					        string tableName;
 | 
				
			||||||
        if (header)
 | 
					        if (header)
 | 
				
			||||||
@ -126,7 +128,7 @@ public class AttachmentsService : IAttachmentsService
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    public Stream GetAttachmentStreamByAttachmentIdArchive(ToolType toolType, bool header, Guid attachmentId, string filename)
 | 
					    public Stream GetAttachmentStreamByAttachmentIdArchive(ToolType toolType, bool header, Guid attachmentId, string filename)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (toolType == null)
 | 
					        if (toolType is null)
 | 
				
			||||||
            throw new Exception("Invalid tool type");
 | 
					            throw new Exception("Invalid tool type");
 | 
				
			||||||
        string tableName;
 | 
					        string tableName;
 | 
				
			||||||
        if (header)
 | 
					        if (header)
 | 
				
			||||||
@ -139,21 +141,21 @@ public class AttachmentsService : IAttachmentsService
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    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, Microsoft.AspNetCore.Http.IFormFile uploadedFile)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (toolType == null)
 | 
					        if (toolType is null)
 | 
				
			||||||
            throw new Exception("Invalid tool type");
 | 
					            throw new Exception("Invalid tool type");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        using System.Transactions.TransactionScope trans = _Repo.StartTransaction();
 | 
					        using System.Transactions.TransactionScope trans = _MetrologyRepository.StartTransaction();
 | 
				
			||||||
        Guid attachmentId = Guid.Empty;
 | 
					        Guid attachmentId = Guid.Empty;
 | 
				
			||||||
        string tableName = "";
 | 
					        string tableName = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (string.IsNullOrWhiteSpace(dataUniqueId))
 | 
					        if (string.IsNullOrWhiteSpace(dataUniqueId))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            attachmentId = _Repo.GetHeaderAttachmentID(toolType.ID, headerId);
 | 
					            attachmentId = _MetrologyRepository.GetHeaderAttachmentID(toolType.ID, headerId);
 | 
				
			||||||
            tableName = toolType.HeaderTableName;
 | 
					            tableName = toolType.HeaderTableName;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            attachmentId = _Repo.GetDataAttachmentID(toolType.ID, headerId, dataUniqueId);
 | 
					            attachmentId = _MetrologyRepository.GetDataAttachmentID(toolType.ID, headerId, dataUniqueId);
 | 
				
			||||||
            tableName = toolType.DataTableName;
 | 
					            tableName = toolType.DataTableName;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (Equals(attachmentId, Guid.Empty))
 | 
					        if (Equals(attachmentId, Guid.Empty))
 | 
				
			||||||
@ -175,4 +177,7 @@ public class AttachmentsService : IAttachmentsService
 | 
				
			|||||||
        SaveAttachment(toolType, headerId, dataUniqueId, filename, formFile);
 | 
					        SaveAttachment(toolType, headerId, dataUniqueId, filename, formFile);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    string IAttachmentsService.GetProcessDataStandardFormat(IMetrologyRepository metrologyRepository, string attachmentPath, int toolTypeId, long headerId) =>
 | 
				
			||||||
 | 
					        throw new NotImplementedException();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
using Newtonsoft.Json.Linq;
 | 
					using Newtonsoft.Json.Linq;
 | 
				
			||||||
using OI.Metrology.Shared.DataModels;
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.Services;
 | 
					using OI.Metrology.Shared.Services;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
@ -8,11 +8,13 @@ using System.Linq;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Archive.Services;
 | 
					namespace OI.Metrology.Archive.Services;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#nullable disable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class InboundDataService : IInboundDataService
 | 
					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<ToolTypeMetadata> metaData)
 | 
					    public long DoSQLInsert(JToken jsonbody, ToolType toolType, List<ToolTypeMetadata> metaData)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@ -37,11 +39,11 @@ public class InboundDataService : IInboundDataService
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        long headerId = 0;
 | 
					        long headerId = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        using (System.Transactions.TransactionScope transScope = _Repo.StartTransaction())
 | 
					        using (System.Transactions.TransactionScope transScope = _MetrologyRepository.StartTransaction())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _Repo.PurgeExistingData(toolType.ID, uniqueId);
 | 
					                _MetrologyRepository.PurgeExistingData(toolType.ID, uniqueId);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception ex)
 | 
					            catch (Exception ex)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -50,7 +52,7 @@ public class InboundDataService : IInboundDataService
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                headerId = _Repo.InsertToolDataJSON(jsonbody, -1, metaData, toolType.HeaderTableName);
 | 
					                headerId = _MetrologyRepository.InsertToolDataJSON(jsonbody, -1, metaData, toolType.HeaderTableName);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception ex)
 | 
					            catch (Exception ex)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -60,11 +62,11 @@ public class InboundDataService : IInboundDataService
 | 
				
			|||||||
            int detailrow = 1;
 | 
					            int detailrow = 1;
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (detailsArray != null)
 | 
					                if (detailsArray is not null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    foreach (JToken detail in detailsArray)
 | 
					                    foreach (JToken detail in detailsArray)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        _ = _Repo.InsertToolDataJSON(detail, headerId, metaData, toolType.DataTableName);
 | 
					                        _ = _MetrologyRepository.InsertToolDataJSON(detail, headerId, metaData, toolType.DataTableName);
 | 
				
			||||||
                        detailrow += 1;
 | 
					                        detailrow += 1;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -133,7 +135,7 @@ public class InboundDataService : IInboundDataService
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    if (jp.First is JArray array)
 | 
					                    if (jp.First is JArray array)
 | 
				
			||||||
                        detailsArray = 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;
 | 
					                        detailsArray = null;
 | 
				
			||||||
                    else
 | 
					                    else
 | 
				
			||||||
                        errors.Add("Invalid details field");
 | 
					                        errors.Add("Invalid details field");
 | 
				
			||||||
@ -169,7 +171,7 @@ public class InboundDataService : IInboundDataService
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // if a Details container if found, process it by recursion
 | 
					        // if a Details container if found, process it by recursion
 | 
				
			||||||
        if (detailsArray != null)
 | 
					        if (detailsArray is not null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            int i = 1;
 | 
					            int i = 1;
 | 
				
			||||||
            foreach (JToken detail in detailsArray)
 | 
					            foreach (JToken detail in detailsArray)
 | 
				
			||||||
@ -189,7 +191,7 @@ public class InboundDataService : IInboundDataService
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            // get the json data for this container field, ex: Points
 | 
					            // get the json data for this container field, ex: Points
 | 
				
			||||||
            JProperty contJP = jsonbody.Children<JProperty>().Where(jp => string.Equals(jp.Name, containerField, StringComparison.OrdinalIgnoreCase)).SingleOrDefault();
 | 
					            JProperty contJP = jsonbody.Children<JProperty>().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;
 | 
					                JArray contJPArray = array;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -71,7 +71,7 @@
 | 
				
			|||||||
                    <li>@Html.ActionLink("Export", "Index", "Export", new { area = "" }, null)</li>
 | 
					                    <li>@Html.ActionLink("Export", "Index", "Export", new { area = "" }, null)</li>
 | 
				
			||||||
                </ul>
 | 
					                </ul>
 | 
				
			||||||
                <p class="navbar-text navbar-right">
 | 
					                <p class="navbar-text navbar-right">
 | 
				
			||||||
                    @User.Identity.Name
 | 
					                    @User.Identity?.Name
 | 
				
			||||||
                </p>
 | 
					                </p>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -3,10 +3,10 @@
 | 
				
			|||||||
  "ApiLoggingContentTypes": "application/json",
 | 
					  "ApiLoggingContentTypes": "application/json",
 | 
				
			||||||
  "ApiLoggingPathPrefixes": "/api/inbound",
 | 
					  "ApiLoggingPathPrefixes": "/api/inbound",
 | 
				
			||||||
  "ApiLogPath": "D:\\Metrology\\MetrologyAPILogs",
 | 
					  "ApiLogPath": "D:\\Metrology\\MetrologyAPILogs",
 | 
				
			||||||
  "AttachmentPath": "\\\\messv02ecc1.ec.local\\EC_Metrology_Si\\MetrologyAttachments",
 | 
					  "AttachmentPath": "\\\\mesfs.infineon.com\\EC_Metrology_Si\\MetrologyAttachments",
 | 
				
			||||||
  "BuildNumber": "1",  
 | 
					  "BuildNumber": "1",  
 | 
				
			||||||
  "Company": "Infineon Technologies Americas Corp.",
 | 
					  "Company": "Infineon Technologies Americas Corp.",
 | 
				
			||||||
  "ConnectionString": "Data Source=messv01ec.ec.local\\PROD1,53959;Integrated Security=True;Initial Catalog=Metrology_Archive;",
 | 
					  "ConnectionString": "Data Source=messqlec1.infineon.com\\PROD1,53959;Integrated Security=True;Initial Catalog=Metrology_Archive;",
 | 
				
			||||||
  "GitCommitSeven": "1234567",
 | 
					  "GitCommitSeven": "1234567",
 | 
				
			||||||
  "Logging": {
 | 
					  "Logging": {
 | 
				
			||||||
    "LogLevel": {
 | 
					    "LogLevel": {
 | 
				
			||||||
@ -19,7 +19,7 @@
 | 
				
			|||||||
  "InboundApiAllowedIPList": "",
 | 
					  "InboundApiAllowedIPList": "",
 | 
				
			||||||
  "MonAResource": "OI_Metrology_Archive_IFX",
 | 
					  "MonAResource": "OI_Metrology_Archive_IFX",
 | 
				
			||||||
  "MonASite": "auc",
 | 
					  "MonASite": "auc",
 | 
				
			||||||
  "Oi2SqlConnectionString": "Data Source=messv01ec.ec.local\\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;",
 | 
					  "Oi2SqlConnectionString": "Data Source=messqlec1.infineon.com\\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;",
 | 
				
			||||||
  "OIExportPath": "\\\\openinsight-db-srv.na.infineon.com\\apps\\Metrology\\Data",
 | 
					  "OIExportPath": "\\\\openinsight-db-srv.na.infineon.com\\apps\\Metrology\\Data",
 | 
				
			||||||
  "Serilog": {
 | 
					  "Serilog": {
 | 
				
			||||||
    "Using": [
 | 
					    "Using": [
 | 
				
			||||||
 | 
				
			|||||||
@ -3,10 +3,10 @@
 | 
				
			|||||||
  "ApiLoggingContentTypes": "application/json",
 | 
					  "ApiLoggingContentTypes": "application/json",
 | 
				
			||||||
  "ApiLoggingPathPrefixes": "/api/inbound",
 | 
					  "ApiLoggingPathPrefixes": "/api/inbound",
 | 
				
			||||||
  "ApiLogPath": "D:\\Metrology\\MetrologyAPILogs",
 | 
					  "ApiLogPath": "D:\\Metrology\\MetrologyAPILogs",
 | 
				
			||||||
  "AttachmentPath": "\\\\messv02ecc1.ec.local\\EC_Metrology_Si\\MetrologyAttachments",
 | 
					  "AttachmentPath": "\\\\mesfs.infineon.com\\EC_Metrology_Si\\MetrologyAttachments",
 | 
				
			||||||
  "BuildNumber": "1",  
 | 
					  "BuildNumber": "1",  
 | 
				
			||||||
  "Company": "Infineon Technologies Americas Corp.",
 | 
					  "Company": "Infineon Technologies Americas Corp.",
 | 
				
			||||||
  "ConnectionString": "Data Source=messv01ec.ec.local\\PROD1,53959;Integrated Security=True;Initial Catalog=Metrology_Archive;",
 | 
					  "ConnectionString": "Data Source=messqlec1.infineon.com\\PROD1,53959;Integrated Security=True;Initial Catalog=Metrology_Archive;",
 | 
				
			||||||
  "GitCommitSeven": "1234567",
 | 
					  "GitCommitSeven": "1234567",
 | 
				
			||||||
  "Logging": {
 | 
					  "Logging": {
 | 
				
			||||||
    "LogLevel": {
 | 
					    "LogLevel": {
 | 
				
			||||||
@ -19,7 +19,7 @@
 | 
				
			|||||||
  "InboundApiAllowedIPList": "",
 | 
					  "InboundApiAllowedIPList": "",
 | 
				
			||||||
  "MonAResource": "OI_Metrology_Archive_EC",
 | 
					  "MonAResource": "OI_Metrology_Archive_EC",
 | 
				
			||||||
  "MonASite": "auc",
 | 
					  "MonASite": "auc",
 | 
				
			||||||
  "Oi2SqlConnectionString": "Data Source=messv01ec.ec.local\\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;",
 | 
					  "Oi2SqlConnectionString": "Data Source=messqlec1.infineon.com\\PROD1,53959;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;",
 | 
				
			||||||
  "OIExportPath": "\\\\openinsight-db-srv.na.infineon.com\\apps\\Metrology\\Data",
 | 
					  "OIExportPath": "\\\\openinsight-db-srv.na.infineon.com\\apps\\Metrology\\Data",
 | 
				
			||||||
  "Serilog": {
 | 
					  "Serilog": {
 | 
				
			||||||
    "Using": [
 | 
					    "Using": [
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										266
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										266
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							@ -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()
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -3,13 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 | 
				
			|||||||
# Visual Studio Version 16
 | 
					# Visual Studio Version 16
 | 
				
			||||||
VisualStudioVersion = 16.0.30114.105
 | 
					VisualStudioVersion = 16.0.30114.105
 | 
				
			||||||
MinimumVisualStudioVersion = 10.0.40219.1
 | 
					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
 | 
					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
 | 
					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
 | 
					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
 | 
					EndProject
 | 
				
			||||||
Global
 | 
					Global
 | 
				
			||||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
						GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								Server/.vscode/format-report.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Server/.vscode/format-report.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					[]
 | 
				
			||||||
@ -10,14 +10,15 @@
 | 
				
			|||||||
            "request": "launch",
 | 
					            "request": "launch",
 | 
				
			||||||
            "preLaunchTask": "build",
 | 
					            "preLaunchTask": "build",
 | 
				
			||||||
            // If you have changed target frameworks, make sure to update the program path.
 | 
					            // 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": [],
 | 
					            "args": [],
 | 
				
			||||||
            "cwd": "${workspaceFolder}",
 | 
					            "cwd": "${workspaceFolder}",
 | 
				
			||||||
            "stopAtEntry": false,
 | 
					            "stopAtEntry": false,
 | 
				
			||||||
            // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
 | 
					            // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
 | 
				
			||||||
            "serverReadyAction": {
 | 
					            "serverReadyAction": {
 | 
				
			||||||
                "action": "openExternally",
 | 
					                "action": "openExternally",
 | 
				
			||||||
                "pattern": "\\bNow listening on:\\s+(https?://\\S+)"
 | 
					                "pattern": "\\bNow listening on:\\s+(https?://\\S+)",
 | 
				
			||||||
 | 
					                "uriFormat": "%s/swagger/index.html"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "env": {
 | 
					            "env": {
 | 
				
			||||||
                "ASPNETCORE_ENVIRONMENT": "Development"
 | 
					                "ASPNETCORE_ENVIRONMENT": "Development"
 | 
				
			||||||
@ -30,7 +31,8 @@
 | 
				
			|||||||
            "name": ".NET Core Attach",
 | 
					            "name": ".NET Core Attach",
 | 
				
			||||||
            "type": "coreclr",
 | 
					            "type": "coreclr",
 | 
				
			||||||
            "request": "attach",
 | 
					            "request": "attach",
 | 
				
			||||||
            "processName": "Archive"
 | 
					            "preLaunchTask": "watch",
 | 
				
			||||||
 | 
					            "processName": "OI.Metrology.Server.exe"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										81
									
								
								Server/.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								Server/.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,81 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "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.*"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "label": "File-Folder-Helper AOT s V Repositories",
 | 
				
			||||||
 | 
					            "type": "shell",
 | 
				
			||||||
 | 
					            "command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s V Repositories",
 | 
				
			||||||
 | 
					            "problemMatcher": []
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										23
									
								
								Server/ApiControllers/AppSettingsController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Server/ApiControllers/AppSettingsController.cs
									
									
									
									
									
										Normal file
									
								
							@ -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<ActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly IAppSettingsRepository<Models.Binder.AppSettings> _AppSettingsRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public AppSettingsController(IAppSettingsRepository<Models.Binder.AppSettings> AppSettingsRepository) => _AppSettingsRepository = AppSettingsRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet(nameof(IAppSettingsController<ActionResult>.Action.App))]
 | 
				
			||||||
 | 
					    public ActionResult GetAppSettings() =>
 | 
				
			||||||
 | 
					        Ok(_AppSettingsRepository.GetAppSettings());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet(nameof(IAppSettingsController<ActionResult>.Action.DevOps))]
 | 
				
			||||||
 | 
					    public ActionResult GetBuildNumberAndGitCommitSeven() =>
 | 
				
			||||||
 | 
					         Ok(_AppSettingsRepository.GetBuildNumberAndGitCommitSeven());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,50 +1,39 @@
 | 
				
			|||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using OI.Metrology.Shared.DataModels;
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.Services;
 | 
					using OI.Metrology.Shared.Services;
 | 
				
			||||||
using System;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Viewer.ApiControllers;
 | 
					namespace OI.Metrology.Server.ApiControllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class AttachmentsController : Controller
 | 
					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;
 | 
					        _AttachmentsService = attachmentsService;
 | 
				
			||||||
 | 
					        _MetrologyRepository = metrologyRepository;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // this endpoint was created in hope that it would make retrieving attachments to display in OpenInsight easier
 | 
					    // 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
 | 
					    // url would be like /api/attachments/mercuryprobe/header/HgProbe_66-232268-4329_20180620052640032/data.pdf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [HttpGet("/api/attachments/{toolTypeName}/{tabletype}/{title}/{filename}")]
 | 
					    [HttpGet("/api/attachments/{toolTypeName}/{tabletype}/{title}/{filename}")]
 | 
				
			||||||
    public IActionResult GetAttachment(
 | 
					    public IActionResult GetAttachment(string toolTypeName, string tabletype, string title, string filename)
 | 
				
			||||||
        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);
 | 
					        bool header = !string.Equals(tabletype.Trim(), "data", StringComparison.OrdinalIgnoreCase);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        try
 | 
					        try
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            string contenttype = "application/pdf";
 | 
					            string contenttype = "application/pdf";
 | 
				
			||||||
            if (filename.ToLower().TrimEnd().EndsWith(".txt"))
 | 
					            if (filename.ToLower().TrimEnd().EndsWith(".txt"))
 | 
				
			||||||
                contenttype = "text/plain";
 | 
					                contenttype = "text/plain";
 | 
				
			||||||
 | 
					 | 
				
			||||||
            Stream fs = _AttachmentsService.GetAttachmentStreamByTitle(tt, header, title, filename);
 | 
					            Stream fs = _AttachmentsService.GetAttachmentStreamByTitle(tt, header, title, filename);
 | 
				
			||||||
            return File(fs, contenttype);
 | 
					            return File(fs, contenttype);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        catch (Exception ex)
 | 
					        catch (Exception ex) { return Content(ex.Message); }
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            return Content(ex.Message);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1,37 +1,31 @@
 | 
				
			|||||||
using Microsoft.AspNetCore.Mvc;
 | 
					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;
 | 
					using System.Text.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// this controller is for the Awaiting Dispo functionality
 | 
					// this controller is for the Awaiting Dispo functionality
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class AwaitingDispoController : Controller
 | 
					[Route("api/[controller]")]
 | 
				
			||||||
 | 
					public class AwaitingDispoController : Controller, IAwaitingDispoController<IActionResult>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    private readonly IMetrologyRepo _Repo;
 | 
					    private readonly IMetrologyRepository _MetrologyRepository;
 | 
				
			||||||
 | 
					    public AwaitingDispoController(IMetrologyRepository metrologyRepository) =>
 | 
				
			||||||
    public AwaitingDispoController(IMetrologyRepo repo) => _Repo = repo;
 | 
					        _MetrologyRepository = metrologyRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // returns the data to show in the Awaiting Dispo grid
 | 
					    // 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
 | 
					    // marked no-cache, just-in-case since igniteUI automatically adds a query string parameter to prevent caching
 | 
				
			||||||
    [HttpGet("/api/awaitingdispo")]
 | 
					    [HttpGet]
 | 
				
			||||||
    [ResponseCache(NoStore = true)]
 | 
					    [ResponseCache(NoStore = true)]
 | 
				
			||||||
    public IActionResult Index()
 | 
					    public IActionResult Index() =>
 | 
				
			||||||
    {
 | 
					        Json(_MetrologyRepository.GetAwaitingDisposition(), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					 | 
				
			||||||
        var r = new
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            Results = _Repo.GetAwaitingDispo()
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        return Json(r, 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    
 | 
					    // this endpoint is used to set the ReviewDate column, causing the header to no longer show in Awaiting Dispo    
 | 
				
			||||||
    [HttpPost("/api/awaitingdispo/markasreviewed")]
 | 
					    [HttpPost("/api/awaitingdispo/markasreviewed")]
 | 
				
			||||||
    public IActionResult MarkAsReviewed([FromQuery] long headerid, [FromQuery] int tooltypeid)
 | 
					    public IActionResult MarkAsReviewed([FromQuery] long headerid, [FromQuery] int tooltypeid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        _ = _Repo.UpdateReviewDate(tooltypeid, headerid, false);
 | 
					        _ = _MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, false);
 | 
				
			||||||
        return Ok();
 | 
					        return Ok();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -39,7 +33,7 @@ public class AwaitingDispoController : Controller
 | 
				
			|||||||
    [HttpPost("/api/awaitingdispo/markasawaiting")]
 | 
					    [HttpPost("/api/awaitingdispo/markasawaiting")]
 | 
				
			||||||
    public IActionResult MarkAsAwaiting([FromQuery] long headerid, [FromQuery] int tooltypeid)
 | 
					    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();
 | 
					            return Ok();
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            return StatusCode(444);
 | 
					            return StatusCode(444);
 | 
				
			||||||
							
								
								
									
										29
									
								
								Server/ApiControllers/ClientSettingsController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								Server/ApiControllers/ClientSettingsController.cs
									
									
									
									
									
										Normal file
									
								
							@ -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<ActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly IClientSettingsRepository _ClientSettingsRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public ClientSettingsController(IClientSettingsRepository clientSettingsRepository) => _ClientSettingsRepository = clientSettingsRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet(nameof(IClientSettingsController<ActionResult>.Action.Client))]
 | 
				
			||||||
 | 
					    public ActionResult GetClientSettings()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        List<string> results = _ClientSettingsRepository.GetClientSettings(Request.HttpContext.Connection?.RemoteIpAddress);
 | 
				
			||||||
 | 
					        return Ok(results);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet(nameof(IClientSettingsController<ActionResult>.Action.IP))]
 | 
				
			||||||
 | 
					    public ActionResult GetIpAddress()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string result = _ClientSettingsRepository.GetIpAddress(Request.HttpContext.Connection?.RemoteIpAddress);
 | 
				
			||||||
 | 
					        return Ok(result);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										82
									
								
								Server/ApiControllers/ExportController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								Server/ApiControllers/ExportController.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OI.Metrology.Server.ApiControllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
 | 
					using System.Text.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Route("api/[controller]")]
 | 
				
			||||||
 | 
					public class ExportController : Controller, IExportController<IActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly IExportRepository _ExportRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public ExportController(IExportRepository exportRepository) =>
 | 
				
			||||||
 | 
					        _ExportRepository = exportRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static string? GetJson(Stream stream)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string? result;
 | 
				
			||||||
 | 
					        if (!stream.CanRead)
 | 
				
			||||||
 | 
					            result = null;
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Task<string> task = new StreamReader(stream).ReadToEndAsync();
 | 
				
			||||||
 | 
					            result = task.Result;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static HeaderCommon GetHeaderCommon(Stream stream)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        HeaderCommon? result;
 | 
				
			||||||
 | 
					        string? json = GetJson(stream);
 | 
				
			||||||
 | 
					        result = string.IsNullOrEmpty(json) ? null : JsonSerializer.Deserialize<HeaderCommon>(json);
 | 
				
			||||||
 | 
					        result ??= new();
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("export")]
 | 
				
			||||||
 | 
					    public IActionResult GetExport() =>
 | 
				
			||||||
 | 
					        Content(_ExportRepository.GetExport(GetHeaderCommon(Request.Body)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("headers")]
 | 
				
			||||||
 | 
					    public IActionResult GetHeaders() =>
 | 
				
			||||||
 | 
					        Json(_ExportRepository.GetHeaders(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("logistics")]
 | 
				
			||||||
 | 
					    public IActionResult GetLogistics() =>
 | 
				
			||||||
 | 
					        Json(_ExportRepository.GetLogistics(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("pdsf")]
 | 
				
			||||||
 | 
					    [Route("processDataStandardFormat")]
 | 
				
			||||||
 | 
					    public IActionResult GetProcessDataStandardFormat() =>
 | 
				
			||||||
 | 
					        Content(_ExportRepository.GetProcessDataStandardFormat(GetHeaderCommon(Request.Body)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpPost]
 | 
				
			||||||
 | 
					    [Route("export")]
 | 
				
			||||||
 | 
					    public IActionResult PostExport() =>
 | 
				
			||||||
 | 
					        Content(_ExportRepository.GetExport(GetHeaderCommon(Request.Body)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpPost]
 | 
				
			||||||
 | 
					    [Route("headers")]
 | 
				
			||||||
 | 
					    public IActionResult PostHeaders() =>
 | 
				
			||||||
 | 
					        Json(_ExportRepository.GetHeaders(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpPost]
 | 
				
			||||||
 | 
					    [Route("logistics")]
 | 
				
			||||||
 | 
					    public IActionResult PostLogistics() =>
 | 
				
			||||||
 | 
					        Json(_ExportRepository.GetLogistics(GetHeaderCommon(Request.Body)), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpPost]
 | 
				
			||||||
 | 
					    [Route("pdsf")]
 | 
				
			||||||
 | 
					    [Route("processDataStandardFormat")]
 | 
				
			||||||
 | 
					    public IActionResult PostProcessDataStandardFormat() =>
 | 
				
			||||||
 | 
					        Content(_ExportRepository.GetProcessDataStandardFormat(GetHeaderCommon(Request.Body)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										91
									
								
								Server/ApiControllers/InboundController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								Server/ApiControllers/InboundController.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,91 @@
 | 
				
			|||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					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<IActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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<InboundController> logger, IMetrologyRepository metrologyRepository, IInboundRepository inboundRepository, IInboundDataService inboundDataService, IAttachmentsService attachmentsService)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        _Logger = logger;
 | 
				
			||||||
 | 
					        _AppSettings = appSettings;
 | 
				
			||||||
 | 
					        _InboundRepository = inboundRepository;
 | 
				
			||||||
 | 
					        _AttachmentsService = attachmentsService;
 | 
				
			||||||
 | 
					        _InboundDataService = inboundDataService;
 | 
				
			||||||
 | 
					        _MetrologyRepository = metrologyRepository;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static string? GetJson(Stream stream)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string? result;
 | 
				
			||||||
 | 
					        if (!stream.CanRead)
 | 
				
			||||||
 | 
					            result = null;
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Task<string> task = new StreamReader(stream).ReadToEndAsync();
 | 
				
			||||||
 | 
					            result = task.Result;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpPost]
 | 
				
			||||||
 | 
					    [Route("{tooltype}")]
 | 
				
			||||||
 | 
					    public IActionResult Post(string tooltype)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        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
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            string? json = GetJson(Request.Body);
 | 
				
			||||||
 | 
					            DataResponse dataResponse = _InboundRepository.Data(_MetrologyRepository, _InboundDataService, tooltype, json);
 | 
				
			||||||
 | 
					            if (dataResponse.Errors.Count == 0)
 | 
				
			||||||
 | 
					                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);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										52
									
								
								Server/ApiControllers/InfinityQSController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								Server/ApiControllers/InfinityQSController.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OI.Metrology.Server.ApiControllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
 | 
					using System.Text.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Route("api/[controller]")]
 | 
				
			||||||
 | 
					public class InfinityQSController : Controller, IInfinityQSController<IActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly IInfinityQSRepository _InfinityQSRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public InfinityQSController(IInfinityQSRepository InfinityQSRepository) => _InfinityQSRepository = InfinityQSRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("commandText")]
 | 
				
			||||||
 | 
					    public IActionResult GetCommandText(string sub_group_id, string process, string job, string part, string lot, string date_time)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string commandText = _InfinityQSRepository.GetCommandText(sub_group_id, process, job, part, lot, date_time);
 | 
				
			||||||
 | 
					        return Content(commandText, "text/plain; charset=utf-8");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/data")]
 | 
				
			||||||
 | 
					    public IActionResult GetData(string sub_group_id)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Result<InfinityQSBase[]> result = _InfinityQSRepository.GetData(sub_group_id);
 | 
				
			||||||
 | 
					        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/descriptors")]
 | 
				
			||||||
 | 
					    public IActionResult GetDescriptors(string sub_group_id)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Result<InfinityQSDescriptor[]> result = _InfinityQSRepository.GetDescriptors(sub_group_id);
 | 
				
			||||||
 | 
					        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/events")]
 | 
				
			||||||
 | 
					    public IActionResult GetEvents(string sub_group_id)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Result<InfinityQSEvent[]> result = _InfinityQSRepository.GetEvents(sub_group_id);
 | 
				
			||||||
 | 
					        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/header")]
 | 
				
			||||||
 | 
					    public IActionResult GetHeader(string sub_group_id)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Result<InfinityQSBase[]> result = _InfinityQSRepository.GetHeader(sub_group_id);
 | 
				
			||||||
 | 
					        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										52
									
								
								Server/ApiControllers/InfinityQSV2Controller.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								Server/ApiControllers/InfinityQSV2Controller.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OI.Metrology.Server.ApiControllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
 | 
					using System.Text.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Route("api/[controller]")]
 | 
				
			||||||
 | 
					public class InfinityQSV2Controller : Controller, IInfinityQSV2Controller<IActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly IInfinityQSV2Repository _InfinityQSRepositoryV2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public InfinityQSV2Controller(IInfinityQSV2Repository InfinityQSRepositoryV2) => _InfinityQSRepositoryV2 = InfinityQSRepositoryV2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/commandText")]
 | 
				
			||||||
 | 
					    public IActionResult GetCommandText(string sub_group_id, string process, string job, string part, string lot, string date_time)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string commandText = _InfinityQSRepositoryV2.GetCommandText(sub_group_id, process, job, part, lot, date_time);
 | 
				
			||||||
 | 
					        return Content(commandText, "text/plain; charset=utf-8");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/data")]
 | 
				
			||||||
 | 
					    public IActionResult GetData(string sub_group_id)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Result<InfinityQSBaseV2[]> result = _InfinityQSRepositoryV2.GetData(sub_group_id);
 | 
				
			||||||
 | 
					        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/descriptors")]
 | 
				
			||||||
 | 
					    public IActionResult GetDescriptors(string sub_group_id)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Result<InfinityQSDescriptorV2[]> result = _InfinityQSRepositoryV2.GetDescriptors(sub_group_id);
 | 
				
			||||||
 | 
					        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/events")]
 | 
				
			||||||
 | 
					    public IActionResult GetEvents(string sub_group_id)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Result<InfinityQSEventV2[]> result = _InfinityQSRepositoryV2.GetEvents(sub_group_id);
 | 
				
			||||||
 | 
					        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/header")]
 | 
				
			||||||
 | 
					    public IActionResult GetHeader(string sub_group_id)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Result<InfinityQSBaseV2[]> result = _InfinityQSRepositoryV2.GetHeader(sub_group_id);
 | 
				
			||||||
 | 
					        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										70
									
								
								Server/ApiControllers/InfinityQSV3Controller.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								Server/ApiControllers/InfinityQSV3Controller.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
				
			|||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OI.Metrology.Server.ApiControllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
 | 
					using System.Text.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Route("api/[controller]")]
 | 
				
			||||||
 | 
					public class InfinityQSV3Controller : Controller, IInfinityQSV3Controller<IActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly IInfinityQSV3Repository _InfinityQSRepositoryV3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public InfinityQSV3Controller(IInfinityQSV3Repository InfinityQSRepositoryV3) => _InfinityQSRepositoryV3 = InfinityQSRepositoryV3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/commandText")]
 | 
				
			||||||
 | 
					    public IActionResult GetCommandText(string sub_group_id, string process, string job, string part, string lot, string date_time)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string commandText = _InfinityQSRepositoryV3.GetCommandText(sub_group_id, process, job, part, lot, date_time);
 | 
				
			||||||
 | 
					        return Content(commandText, "text/plain; charset=utf-8");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/data")]
 | 
				
			||||||
 | 
					    public IActionResult GetData(string sub_group_id)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Result<InfinityQSV3[]> result = _InfinityQSRepositoryV3.GetData(sub_group_id);
 | 
				
			||||||
 | 
					        string json = JsonSerializer.Serialize(result, ResultInfinityQSV3SourceGenerationContext.Default.ResultInfinityQSV3Array);
 | 
				
			||||||
 | 
					        return Content(json, "application/json", System.Text.Encoding.UTF8);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/descriptors")]
 | 
				
			||||||
 | 
					    public IActionResult GetDescriptors(string sub_group_id)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Result<InfinityQSDescriptorV3[]> result = _InfinityQSRepositoryV3.GetDescriptors(sub_group_id);
 | 
				
			||||||
 | 
					        string json = JsonSerializer.Serialize(result, ResultInfinityQSDescriptorV3SourceGenerationContext.Default.ResultInfinityQSDescriptorV3Array);
 | 
				
			||||||
 | 
					        return Content(json, "application/json", System.Text.Encoding.UTF8);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{sub_group_id}/header")]
 | 
				
			||||||
 | 
					    public IActionResult GetHeader(string sub_group_id)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Result<InfinityQSV3[]> result = _InfinityQSRepositoryV3.GetHeader(sub_group_id);
 | 
				
			||||||
 | 
					        string json = JsonSerializer.Serialize(result, ResultInfinityQSV3SourceGenerationContext.Default.ResultInfinityQSV3Array);
 | 
				
			||||||
 | 
					        return Content(json, "application/json", System.Text.Encoding.UTF8);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{process}/product-data-average-sum-of-defects-process-mean-process-sigma")]
 | 
				
			||||||
 | 
					    public IActionResult GetProductDataAverageSumOfDefectsProcessMeanProcessSigma(string process, string? recipe)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string result = _InfinityQSRepositoryV3.GetProductDataAverageSumOfDefectsProcessMeanProcessSigma(process, recipe);
 | 
				
			||||||
 | 
					        return Content(result, "application/json", System.Text.Encoding.UTF8);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("epi-pro-temp-verification")]
 | 
				
			||||||
 | 
					    public IActionResult GetEpiProTempVerification(int[] night)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string result = _InfinityQSRepositoryV3.GetEpiProTempVerification(night);
 | 
				
			||||||
 | 
					        return Content(result, "text/html", System.Text.Encoding.UTF8);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("epi-pro-temp-verification-rows")]
 | 
				
			||||||
 | 
					    public IActionResult GetEpiProTempVerificationRows(int[] night)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        List<string[]> results = _InfinityQSRepositoryV3.GetEpiProTempVerificationRows(night);
 | 
				
			||||||
 | 
					        string json = JsonSerializer.Serialize(results);
 | 
				
			||||||
 | 
					        return Content(json, "application/json", System.Text.Encoding.UTF8);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										24
									
								
								Server/ApiControllers/OpenInsightV1Controller.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Server/ApiControllers/OpenInsightV1Controller.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OI.Metrology.Server.ApiControllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Route("api/[controller]")]
 | 
				
			||||||
 | 
					public class OpenInsightV1Controller : Controller, IOpenInsightV1Controller<IActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly IOpenInsightV1Repository _OpenInsightRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public OpenInsightV1Controller(IOpenInsightV1Repository openInsightRepository) =>
 | 
				
			||||||
 | 
					        _OpenInsightRepository = openInsightRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("{rds}/tencor-run")]
 | 
				
			||||||
 | 
					    public IActionResult GetTencorRun(string rds, string? insert_date, string? recipe)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string result = _OpenInsightRepository.GetTencorRun(rds, insert_date, recipe);
 | 
				
			||||||
 | 
					        return Content(result, "application/json", System.Text.Encoding.UTF8);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										33
									
								
								Server/ApiControllers/PinController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Server/ApiControllers/PinController.cs
									
									
									
									
									
										Normal file
									
								
							@ -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<IActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly IPinRepository _PinRepository;
 | 
				
			||||||
 | 
					    private readonly IMetrologyRepository _MetrologyRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public PinController(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 });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										24
									
								
								Server/ApiControllers/ReactorsController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Server/ApiControllers/ReactorsController.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
 | 
					using System.Text.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OI.Metrology.Server.ApiControllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Route("api/[controller]")]
 | 
				
			||||||
 | 
					public class ReactorsController : Controller, IReactorsController<IActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly IReactorsRepository _ReactorsRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public ReactorsController(IReactorsRepository reactorsRepository) =>
 | 
				
			||||||
 | 
					        _ReactorsRepository = reactorsRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet("{even}")]
 | 
				
			||||||
 | 
					    public IActionResult Get(bool even) =>
 | 
				
			||||||
 | 
					        Json(even ? _ReactorsRepository.EvenReactors() : _ReactorsRepository.OddReactors(), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpPost()]
 | 
				
			||||||
 | 
					    public IActionResult Post(Shared.DataModels.WorkMaterialOut workMaterialOut) =>
 | 
				
			||||||
 | 
					        Ok(_ReactorsRepository.GetKey(workMaterialOut, save: true));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										46
									
								
								Server/ApiControllers/ServiceShopOrderController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								Server/ApiControllers/ServiceShopOrderController.cs
									
									
									
									
									
										Normal file
									
								
							@ -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<ActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly IServiceShopOrderRepository _ServiceShopOrderRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public ServiceShopOrderController(IServiceShopOrderRepository ServiceShopOrderRepository) => _ServiceShopOrderRepository = ServiceShopOrderRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet(nameof(IServiceShopOrderController<ActionResult>.Action.All))]
 | 
				
			||||||
 | 
					    public async Task<ActionResult> 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<ActionResult> 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");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Services;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OI.Metrology.Server.ApiControllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ApiController]
 | 
				
			||||||
 | 
					[Route("api/[controller]")]
 | 
				
			||||||
 | 
					public partial class SpreadingResistanceProfileController : ControllerBase, ISpreadingResistanceProfileController<IActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly IAttachmentsService _AttachmentsService;
 | 
				
			||||||
 | 
					    private readonly IMetrologyRepository _MetrologyRepository;
 | 
				
			||||||
 | 
					    private readonly IToolTypesRepository _ToolTypesRepository;
 | 
				
			||||||
 | 
					    private readonly ISpreadingResistanceProfileService _SpreadingResistanceProfileService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public SpreadingResistanceProfileController(IMetrologyRepository metrologyRepository, IAttachmentsService attachmentsService, IToolTypesRepository toolTypesRepository, ISpreadingResistanceProfileService spreadingResistanceProfileService)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        _MetrologyRepository = metrologyRepository;
 | 
				
			||||||
 | 
					        _AttachmentsService = attachmentsService;
 | 
				
			||||||
 | 
					        _ToolTypesRepository = toolTypesRepository;
 | 
				
			||||||
 | 
					        _SpreadingResistanceProfileService = spreadingResistanceProfileService;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [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(_MetrologyRepository, _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(_SpreadingResistanceProfileService.GetImageBytes(stream), "image/jpeg");
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            throw new Exception();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										110
									
								
								Server/ApiControllers/ToolTypesController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								Server/ApiControllers/ToolTypesController.cs
									
									
									
									
									
										Normal file
									
								
							@ -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<IActionResult>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // 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<DataTable> 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<DataTable> 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<DataTable> 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)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string? message = _ToolTypesRepository.OIExport(_MetrologyRepo, _AttachmentsService, _AppSettings.AttachmentPath, _AppSettings.TableToPath, toolTypeId, headerid);
 | 
				
			||||||
 | 
					        if (message is null)
 | 
				
			||||||
 | 
					            return Ok(new { Message = "OK" });
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            return BadRequest(JsonConvert.SerializeObject(new { message }));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,13 +1,7 @@
 | 
				
			|||||||
using Microsoft.AspNetCore.Builder;
 | 
					using OI.Metrology.Server.Models;
 | 
				
			||||||
using Microsoft.AspNetCore.Http;
 | 
					 | 
				
			||||||
using OI.Metrology.Viewer.Models;
 | 
					 | 
				
			||||||
using System;
 | 
					 | 
				
			||||||
using System.IO;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					 | 
				
			||||||
using System.Text;
 | 
					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
 | 
					// You may need to install the Microsoft.AspNetCore.Http.Abstractions package into your project
 | 
				
			||||||
public class ApiLoggingMiddleware
 | 
					public class ApiLoggingMiddleware
 | 
				
			||||||
@ -43,7 +37,8 @@ public class ApiLoggingMiddleware
 | 
				
			|||||||
                    else
 | 
					                    else
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        // if there are content type filters configured, only log is the request begins with one of them
 | 
					                        // 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));
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -1,9 +1,7 @@
 | 
				
			|||||||
using Microsoft.AspNetCore.Diagnostics;
 | 
					using Microsoft.AspNetCore.Diagnostics;
 | 
				
			||||||
using Microsoft.AspNetCore.Http;
 | 
					 | 
				
			||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using Microsoft.Extensions.Logging;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Viewer.Controllers;
 | 
					namespace OI.Metrology.Server.Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[Route("/error")]
 | 
					[Route("/error")]
 | 
				
			||||||
public class ErrorHandlerController : Controller
 | 
					public class ErrorHandlerController : Controller
 | 
				
			||||||
@ -14,8 +12,8 @@ public class ErrorHandlerController : Controller
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public IActionResult Index()
 | 
					    public IActionResult Index()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        IExceptionHandlerFeature error = HttpContext.Features.Get<IExceptionHandlerFeature>();
 | 
					        IExceptionHandlerFeature? error = HttpContext.Features.Get<IExceptionHandlerFeature>();
 | 
				
			||||||
        if (error == null)
 | 
					        if (error is null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return Redirect("~/");
 | 
					            return Redirect("~/");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -24,7 +22,7 @@ public class ErrorHandlerController : Controller
 | 
				
			|||||||
            _Logger.LogError("Unhandled exception: " + error.Error.ToString());
 | 
					            _Logger.LogError("Unhandled exception: " + error.Error.ToString());
 | 
				
			||||||
            dynamic r = new
 | 
					            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);
 | 
					            return StatusCode(StatusCodes.Status500InternalServerError, r);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -1,30 +1,27 @@
 | 
				
			|||||||
using Infineon.Monitoring.MonA;
 | 
					using Infineon.Monitoring.MonA;
 | 
				
			||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using Microsoft.AspNetCore.Mvc.Filters;
 | 
					using Microsoft.AspNetCore.Mvc.Filters;
 | 
				
			||||||
using Microsoft.Extensions.Logging;
 | 
					using OI.Metrology.Server.Models;
 | 
				
			||||||
using OI.Metrology.Shared.DataModels;
 | 
					using OI.Metrology.Shared.DataModels;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.ViewModels;
 | 
					using OI.Metrology.Shared.ViewModels;
 | 
				
			||||||
using OI.Metrology.Viewer.Models;
 | 
					 | 
				
			||||||
using System;
 | 
					 | 
				
			||||||
using System.Collections.Generic;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Viewer.Controllers;
 | 
					namespace OI.Metrology.Server.Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class ExportController : Controller
 | 
					public class ExportController : Controller
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    private readonly ILogger _Logger;
 | 
					 | 
				
			||||||
    private readonly bool _IsTestDatabase;
 | 
					 | 
				
			||||||
    private readonly IMetrologyRepo _Repo;
 | 
					 | 
				
			||||||
    private readonly AppSettings _AppSettings;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public ExportController(AppSettings appSettings, ILogger<ExportController> logger, IMetrologyRepo repo)
 | 
					    private readonly ILogger _Logger;
 | 
				
			||||||
 | 
					    private readonly AppSettings _AppSettings;
 | 
				
			||||||
 | 
					    private readonly bool _IsTestDatabase;
 | 
				
			||||||
 | 
					    private readonly IMetrologyRepository _MetrologyRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public ExportController(AppSettings appSettings, ILogger<ExportController> logger, IMetrologyRepository metrologyRepository)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        _Repo = repo;
 | 
					 | 
				
			||||||
        _Logger = logger;
 | 
					        _Logger = logger;
 | 
				
			||||||
        _AppSettings = appSettings;
 | 
					        _AppSettings = appSettings;
 | 
				
			||||||
 | 
					        _MetrologyRepository = metrologyRepository;
 | 
				
			||||||
        _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
 | 
					        _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -33,18 +30,21 @@ public class ExportController : Controller
 | 
				
			|||||||
        base.OnActionExecuted(context);
 | 
					        base.OnActionExecuted(context);
 | 
				
			||||||
        ViewBag.IsTestDatabase = _IsTestDatabase;
 | 
					        ViewBag.IsTestDatabase = _IsTestDatabase;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private string GetApiUrl() => string.IsNullOrEmpty(_AppSettings.ApiUrl) ? Url.Content("~/") : _AppSettings.ApiUrl[0] == '~' ? Url.Content(_AppSettings.ApiUrl) : _AppSettings.ApiUrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [HttpGet]
 | 
					    [HttpGet]
 | 
				
			||||||
    [Route("/Export")]
 | 
					    [Route("/Export")]
 | 
				
			||||||
    public ActionResult Index()
 | 
					    public ActionResult Index()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Export model = new()
 | 
					        Export model = new()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ToolType = "",
 | 
					 | 
				
			||||||
            StartTime = DateTime.Now.AddMonths(-1),
 | 
					            StartTime = DateTime.Now.AddMonths(-1),
 | 
				
			||||||
            EndTime = DateTime.Now
 | 
					            EndTime = DateTime.Now
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        MonIn monIn = MonIn.GetInstance();
 | 
					        MonIn monIn = MonIn.GetInstance();
 | 
				
			||||||
        _ = monIn.SendStatus(_AppSettings.MonASite, _AppSettings.MonAResource, "Heartbeat", State.Up);
 | 
					        _ = monIn.SendStatus(_AppSettings.MonASite, _AppSettings.MonAResource, "Heartbeat", State.Up);
 | 
				
			||||||
 | 
					        ViewBag.ApiUrl = GetApiUrl();
 | 
				
			||||||
        return View(model);
 | 
					        return View(model);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,14 +52,14 @@ public class ExportController : Controller
 | 
				
			|||||||
    [Route("/ExportData")]
 | 
					    [Route("/ExportData")]
 | 
				
			||||||
    public ActionResult ExportData(Export model)
 | 
					    public ActionResult ExportData(Export model)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ToolType toolType = null;
 | 
					        ToolType? toolType = null;
 | 
				
			||||||
        if (string.IsNullOrEmpty(model.ToolType))
 | 
					        if (string.IsNullOrEmpty(model.ToolType))
 | 
				
			||||||
            ModelState.AddModelError("Exception", "Invalid selection");
 | 
					            ModelState.AddModelError("Exception", "Invalid selection");
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (model.StartTime > model.EndTime)
 | 
					            if (model.StartTime > model.EndTime)
 | 
				
			||||||
                ModelState.AddModelError("EndTime", "End time must be after start time");
 | 
					                ModelState.AddModelError("EndTime", "End time must be after start time");
 | 
				
			||||||
            IEnumerable<ToolType> toolTypes = _Repo.GetToolTypes();
 | 
					            IEnumerable<ToolType> toolTypes = _MetrologyRepository.GetToolTypes();
 | 
				
			||||||
            toolType = toolTypes.Where(tt => tt.ID.ToString() == model.ToolType).SingleOrDefault();
 | 
					            toolType = toolTypes.Where(tt => tt.ID.ToString() == model.ToolType).SingleOrDefault();
 | 
				
			||||||
            if (toolType is null)
 | 
					            if (toolType is null)
 | 
				
			||||||
                ModelState.AddModelError("ToolType", "Invalid selection");
 | 
					                ModelState.AddModelError("ToolType", "Invalid selection");
 | 
				
			||||||
@ -73,7 +73,7 @@ public class ExportController : Controller
 | 
				
			|||||||
                DateTime startDT = model.StartDate.Date.Add(model.StartTime.TimeOfDay);
 | 
					                DateTime startDT = model.StartDate.Date.Add(model.StartTime.TimeOfDay);
 | 
				
			||||||
                DateTime endDT = model.EndDate.Date.Add(model.EndTime.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)
 | 
					            catch (Exception ex)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -81,27 +81,25 @@ public class ExportController : Controller
 | 
				
			|||||||
                ModelState.AddModelError("Exception", ex.Message);
 | 
					                ModelState.AddModelError("Exception", ex.Message);
 | 
				
			||||||
                string errorMessage = $"Error exporting: {ex}";
 | 
					                string errorMessage = $"Error exporting: {ex}";
 | 
				
			||||||
                _Logger.LogError(message: errorMessage);
 | 
					                _Logger.LogError(message: errorMessage);
 | 
				
			||||||
 | 
					                MonIn monIn = MonIn.GetInstance();
 | 
				
			||||||
 | 
					                _ = monIn.SendStatus(_AppSettings.MonASite, _AppSettings.MonAResource, "Heartbeat", State.Warning);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        ViewBag.ApiUrl = GetApiUrl();
 | 
				
			||||||
        return View("Index", model);
 | 
					        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);
 | 
					        string fileName = string.Format("Export_{0}_{1:yyyyMMddHHmm}_to_{2:yyyyMMddHHmm}.csv", toolTypeName, startTime, endTime);
 | 
				
			||||||
        StringBuilder sb = new();
 | 
					        StringBuilder sb = new();
 | 
				
			||||||
 | 
					        if (spName is null)
 | 
				
			||||||
        System.Data.DataTable dt = _Repo.ExportData(spName, startTime, endTime);
 | 
					            throw new NullReferenceException(nameof(spName));
 | 
				
			||||||
 | 
					        System.Data.DataTable dt = _MetrologyRepository.ExportData(spName, startTime, endTime);
 | 
				
			||||||
        _ = sb.AppendLine(GetColumnHeaders(dt));
 | 
					        _ = sb.AppendLine(GetColumnHeaders(dt));
 | 
				
			||||||
 | 
					 | 
				
			||||||
        foreach (System.Data.DataRow dr in dt.Rows)
 | 
					        foreach (System.Data.DataRow dr in dt.Rows)
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            _ = sb.AppendLine(GetRowData(dr));
 | 
					            _ = sb.AppendLine(GetRowData(dr));
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        byte[] contents = Encoding.UTF8.GetBytes(sb.ToString());
 | 
					        byte[] contents = Encoding.UTF8.GetBytes(sb.ToString());
 | 
				
			||||||
 | 
					 | 
				
			||||||
        return File(contents, "application/octet-stream", fileName);
 | 
					        return File(contents, "application/octet-stream", fileName);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -112,10 +110,13 @@ public class ExportController : Controller
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            if (i > 0)
 | 
					            if (i > 0)
 | 
				
			||||||
                _ = r.Append(',');
 | 
					                _ = r.Append(',');
 | 
				
			||||||
 | 
					 | 
				
			||||||
            object v = dr[i];
 | 
					            object v = dr[i];
 | 
				
			||||||
            if (!Convert.IsDBNull(v))
 | 
					            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();
 | 
					        return r.ToString();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -135,16 +136,13 @@ public class ExportController : Controller
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    protected static string FormatForCSV(string v)
 | 
					    protected static string FormatForCSV(string v)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        StringBuilder r = new(v.Length + 2);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        bool doubleQuoted = false;
 | 
					        bool doubleQuoted = false;
 | 
				
			||||||
 | 
					        StringBuilder r = new(v.Length + 2);
 | 
				
			||||||
        if (v.StartsWith(' ') || v.EndsWith(' ') || v.Contains(',') || v.Contains('"'))
 | 
					        if (v.StartsWith(' ') || v.EndsWith(' ') || v.Contains(',') || v.Contains('"'))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _ = r.Append('"');
 | 
					            _ = r.Append('"');
 | 
				
			||||||
            doubleQuoted = true;
 | 
					            doubleQuoted = true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        foreach (char c in v)
 | 
					        foreach (char c in v)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _ = c switch
 | 
					            _ = c switch
 | 
				
			||||||
@ -154,10 +152,8 @@ public class ExportController : Controller
 | 
				
			|||||||
                _ => r.Append(c),
 | 
					                _ => r.Append(c),
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (doubleQuoted)
 | 
					        if (doubleQuoted)
 | 
				
			||||||
            _ = r.Append('"');
 | 
					            _ = r.Append('"');
 | 
				
			||||||
 | 
					 | 
				
			||||||
        return r.ToString();
 | 
					        return r.ToString();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1,20 +1,22 @@
 | 
				
			|||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using Microsoft.AspNetCore.Mvc.Filters;
 | 
					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.Shared.ViewModels;
 | 
				
			||||||
using OI.Metrology.Viewer.Models;
 | 
					 | 
				
			||||||
using System;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Viewer.Controllers;
 | 
					namespace OI.Metrology.Server.Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class PagesController : Controller
 | 
					public class PagesController : Controller
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    private readonly IMetrologyRepo _Repo;
 | 
					 | 
				
			||||||
    private readonly bool _IsTestDatabase;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public PagesController(AppSettings appSettings, IMetrologyRepo repo)
 | 
					    private readonly bool _IsTestDatabase;
 | 
				
			||||||
 | 
					    private readonly AppSettings _AppSettings;
 | 
				
			||||||
 | 
					    private readonly IMetrologyRepository _MetrologyRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public PagesController(AppSettings appSettings, IMetrologyRepository metrologyRepository)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        _Repo = repo;
 | 
					        _AppSettings = appSettings;
 | 
				
			||||||
 | 
					        _MetrologyRepository = metrologyRepository;
 | 
				
			||||||
        _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
 | 
					        _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -24,16 +26,24 @@ public class PagesController : Controller
 | 
				
			|||||||
        ViewBag.IsTestDatabase = _IsTestDatabase;
 | 
					        ViewBag.IsTestDatabase = _IsTestDatabase;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private string GetApiUrl() => string.IsNullOrEmpty(_AppSettings.ApiUrl) ? Url.Content("~/") : _AppSettings.ApiUrl[0] == '~' ? Url.Content(_AppSettings.ApiUrl) : _AppSettings.ApiUrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [HttpGet]
 | 
					    [HttpGet]
 | 
				
			||||||
    [Route("/")]
 | 
					    [Route("/")]
 | 
				
			||||||
    public IActionResult Index() =>
 | 
					    public IActionResult Index()
 | 
				
			||||||
        View("AwaitingDispo");
 | 
					    {
 | 
				
			||||||
 | 
					        ViewBag.ApiUrl = GetApiUrl();
 | 
				
			||||||
 | 
					        return View("AwaitingDispo");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [HttpGet]
 | 
					    [HttpGet]
 | 
				
			||||||
    [Route("/AwaitingDispo")]
 | 
					    [Route("/AwaitingDispo")]
 | 
				
			||||||
    [Route("/Metrology/AwaitingDispo")]
 | 
					    [Route("/Metrology/AwaitingDispo")]
 | 
				
			||||||
    public IActionResult AwaitingDispo() =>
 | 
					    public IActionResult AwaitingDispo()
 | 
				
			||||||
        View();
 | 
					    {
 | 
				
			||||||
 | 
					        ViewBag.ApiUrl = GetApiUrl();
 | 
				
			||||||
 | 
					        return View();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [HttpGet]
 | 
					    [HttpGet]
 | 
				
			||||||
    [Route("/RunInfo")]
 | 
					    [Route("/RunInfo")]
 | 
				
			||||||
@ -48,16 +58,20 @@ public class PagesController : Controller
 | 
				
			|||||||
        };
 | 
					        };
 | 
				
			||||||
        if (headerid > 0)
 | 
					        if (headerid > 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            m.HeaderAttachmentID = _Repo.GetHeaderAttachmentID(tooltypeid, headerid);
 | 
					            m.HeaderAttachmentID = _MetrologyRepository.GetHeaderAttachmentID(tooltypeid, headerid);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        ViewBag.ApiUrl = GetApiUrl();
 | 
				
			||||||
        return View(m);
 | 
					        return View(m);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [HttpGet]
 | 
					    [HttpGet]
 | 
				
			||||||
    [Route("/RunHeaders")]
 | 
					    [Route("/RunHeaders")]
 | 
				
			||||||
    [Route("/Metrology/RunHeaders")]
 | 
					    [Route("/Metrology/RunHeaders")]
 | 
				
			||||||
    public IActionResult RunHeaders() =>
 | 
					    public IActionResult RunHeaders()
 | 
				
			||||||
        View();
 | 
					    {
 | 
				
			||||||
 | 
					        ViewBag.ApiUrl = GetApiUrl();
 | 
				
			||||||
 | 
					        return View();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [HttpGet]
 | 
					    [HttpGet]
 | 
				
			||||||
    [Route("/Crash")]
 | 
					    [Route("/Crash")]
 | 
				
			||||||
							
								
								
									
										82
									
								
								Server/Controllers/ReactorsController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								Server/Controllers/ReactorsController.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.Mvc.Filters;
 | 
				
			||||||
 | 
					using OI.Metrology.Server.Models;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.ViewModels;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OI.Metrology.Server.Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class ReactorsController : Controller
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private readonly bool _IsTestDatabase;
 | 
				
			||||||
 | 
					    private readonly AppSettings _AppSettings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public ReactorsController(AppSettings appSettings)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        _AppSettings = appSettings;
 | 
				
			||||||
 | 
					        _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public override void OnActionExecuted(ActionExecutedContext context)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        base.OnActionExecuted(context);
 | 
				
			||||||
 | 
					        ViewBag.IsTestDatabase = _IsTestDatabase;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private string GetApiUrl() => string.IsNullOrEmpty(_AppSettings.ApiUrl) ? Url.Content("~/") : _AppSettings.ApiUrl[0] == '~' ? Url.Content(_AppSettings.ApiUrl) : _AppSettings.ApiUrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("/Step1")]
 | 
				
			||||||
 | 
					    [Route("/Metrology/Step1")]
 | 
				
			||||||
 | 
					    public IActionResult Step1(string mod = "", string equipment = "", string layer = "", string zone = "", string rds = "", string initials = "")
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string directory = "D:/Tmp/Metrology";
 | 
				
			||||||
 | 
					        if (!Directory.Exists(directory))
 | 
				
			||||||
 | 
					            _ = Directory.CreateDirectory(directory);
 | 
				
			||||||
 | 
					        string[] model = new string[] { mod, equipment, layer, zone, rds, initials };
 | 
				
			||||||
 | 
					        if (!string.IsNullOrEmpty(initials))
 | 
				
			||||||
 | 
					            System.IO.File.WriteAllLines(Path.Combine(directory, $"{DateTime.Now.Ticks}-{initials}.rsv"), model);
 | 
				
			||||||
 | 
					        return View(model);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("/Step2")]
 | 
				
			||||||
 | 
					    [Route("/Metrology/Step2")]
 | 
				
			||||||
 | 
					    public IActionResult Step2(string mod) =>
 | 
				
			||||||
 | 
					        View(new string[] { mod });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("/Step3")]
 | 
				
			||||||
 | 
					    [Route("/Metrology/Step3")]
 | 
				
			||||||
 | 
					    public IActionResult Step3(string mod, string equipment) =>
 | 
				
			||||||
 | 
					        View(new string[] { mod, equipment });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("/Step4")]
 | 
				
			||||||
 | 
					    [Route("/Metrology/Step4")]
 | 
				
			||||||
 | 
					    public IActionResult Step4(string mod, string equipment, string layer) =>
 | 
				
			||||||
 | 
					        View(new string[] { mod, equipment, layer });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("/Step5")]
 | 
				
			||||||
 | 
					    [Route("/Metrology/Step5")]
 | 
				
			||||||
 | 
					    public IActionResult Step5(string mod, string equipment, string layer, string zone) =>
 | 
				
			||||||
 | 
					        View(new string[] { mod, equipment, layer, zone });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("/Step6")]
 | 
				
			||||||
 | 
					    [Route("/Metrology/Step6")]
 | 
				
			||||||
 | 
					    public IActionResult Step6(string mod, string equipment, string layer, string zone, string rds) =>
 | 
				
			||||||
 | 
					        View(new string[] { mod, equipment, layer, zone, rds });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("/Reactor")]
 | 
				
			||||||
 | 
					    [Route("/Metrology/Reactor")]
 | 
				
			||||||
 | 
					    public IActionResult Reactor() => View(new RunInfo());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [HttpGet]
 | 
				
			||||||
 | 
					    [Route("/WorkMaterial")]
 | 
				
			||||||
 | 
					    [Route("/Metrology/WorkMaterial")]
 | 
				
			||||||
 | 
					    public IActionResult WorkMaterial() => View();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										8035
									
								
								Server/Data/Mike/service-shop.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8035
									
								
								Server/Data/Mike/service-shop.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1
									
								
								Server/Data/Tests/AppSettings-GetAppSettings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Server/Data/Tests/AppSettings-GetAppSettings.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					{"apiExportPath":null,"apiLoggingContentTypes":null,"apiLoggingPathPrefixes":null,"apiLogPath":null,"apiUrl":null,"attachmentPath":null,"buildNumber":"1000014","company":"Infineon Technologies Americas Corp.","connectionString":null,"gitCommitSeven":"6bc0487","inboundApiAllowedIPList":null,"isDevelopment":false,"isStaging":false,"mockRoot":null,"monAResource":null,"monASite":null,"oi2SqlConnectionString":null,"tableToPath":null,"urLs":null,"workingDirectoryName":null}
 | 
				
			||||||
@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					1000014-6bc0487
 | 
				
			||||||
							
								
								
									
										1
									
								
								Server/Data/Tests/ClientSettings-GetClientSettings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Server/Data/Tests/ClientSettings-GetClientSettings.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					["remoteIpAddress"]
 | 
				
			||||||
							
								
								
									
										0
									
								
								Server/Data/Tests/ClientSettings-GetIpAddress.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								Server/Data/Tests/ClientSettings-GetIpAddress.json
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								Server/Data/Tests/Export-GetExport.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								Server/Data/Tests/Export-GetExport.txt
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										4
									
								
								Server/Data/Tests/Export-GetHeaders.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Server/Data/Tests/Export-GetHeaders.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [],
 | 
				
			||||||
 | 
					  "TotalRows": 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										90
									
								
								Server/Data/Tests/Export-GetLogistics.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								Server/Data/Tests/Export-GetLogistics.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,90 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "ID": 0,
 | 
				
			||||||
 | 
					      "InsertDate": "0001-01-01T00:00:00",
 | 
				
			||||||
 | 
					      "AttachmentID": "00000000-0000-0000-0000-000000000000",
 | 
				
			||||||
 | 
					      "Title": null,
 | 
				
			||||||
 | 
					      "Date": "0001-01-01T00:00:00",
 | 
				
			||||||
 | 
					      "ToolTypeID": 0,
 | 
				
			||||||
 | 
					      "ToolTypeName": null,
 | 
				
			||||||
 | 
					      "MesEntity": "TENCOR2",
 | 
				
			||||||
 | 
					      "Employee": "PRE",
 | 
				
			||||||
 | 
					      "Layer": null,
 | 
				
			||||||
 | 
					      "PSN": "",
 | 
				
			||||||
 | 
					      "RDS": "",
 | 
				
			||||||
 | 
					      "Reactor": "",
 | 
				
			||||||
 | 
					      "Recipe": "8IN.2QUAL",
 | 
				
			||||||
 | 
					      "Zone": null
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "ID": 0,
 | 
				
			||||||
 | 
					      "InsertDate": "0001-01-01T00:00:00",
 | 
				
			||||||
 | 
					      "AttachmentID": "00000000-0000-0000-0000-000000000000",
 | 
				
			||||||
 | 
					      "Title": null,
 | 
				
			||||||
 | 
					      "Date": "0001-01-01T00:00:00",
 | 
				
			||||||
 | 
					      "ToolTypeID": 0,
 | 
				
			||||||
 | 
					      "ToolTypeName": null,
 | 
				
			||||||
 | 
					      "MesEntity": "TENCOR3",
 | 
				
			||||||
 | 
					      "Employee": "",
 | 
				
			||||||
 | 
					      "Layer": null,
 | 
				
			||||||
 | 
					      "PSN": "",
 | 
				
			||||||
 | 
					      "RDS": "",
 | 
				
			||||||
 | 
					      "Reactor": "",
 | 
				
			||||||
 | 
					      "Recipe": "8INCLEAN",
 | 
				
			||||||
 | 
					      "Zone": null
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "ID": 0,
 | 
				
			||||||
 | 
					      "InsertDate": "0001-01-01T00:00:00",
 | 
				
			||||||
 | 
					      "AttachmentID": "00000000-0000-0000-0000-000000000000",
 | 
				
			||||||
 | 
					      "Title": null,
 | 
				
			||||||
 | 
					      "Date": "0001-01-01T00:00:00",
 | 
				
			||||||
 | 
					      "ToolTypeID": 0,
 | 
				
			||||||
 | 
					      "ToolTypeName": null,
 | 
				
			||||||
 | 
					      "MesEntity": "TENCOR3",
 | 
				
			||||||
 | 
					      "Employee": "",
 | 
				
			||||||
 | 
					      "Layer": null,
 | 
				
			||||||
 | 
					      "PSN": "",
 | 
				
			||||||
 | 
					      "RDS": "",
 | 
				
			||||||
 | 
					      "Reactor": "",
 | 
				
			||||||
 | 
					      "Recipe": "8IN_THIN ROTR",
 | 
				
			||||||
 | 
					      "Zone": null
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "ID": 0,
 | 
				
			||||||
 | 
					      "InsertDate": "0001-01-01T00:00:00",
 | 
				
			||||||
 | 
					      "AttachmentID": "00000000-0000-0000-0000-000000000000",
 | 
				
			||||||
 | 
					      "Title": null,
 | 
				
			||||||
 | 
					      "Date": "0001-01-01T00:00:00",
 | 
				
			||||||
 | 
					      "ToolTypeID": 0,
 | 
				
			||||||
 | 
					      "ToolTypeName": null,
 | 
				
			||||||
 | 
					      "MesEntity": "TENCOR3",
 | 
				
			||||||
 | 
					      "Employee": "",
 | 
				
			||||||
 | 
					      "Layer": null,
 | 
				
			||||||
 | 
					      "PSN": "",
 | 
				
			||||||
 | 
					      "RDS": "",
 | 
				
			||||||
 | 
					      "Reactor": "",
 | 
				
			||||||
 | 
					      "Recipe": "8IN_PTYPE_ROTR",
 | 
				
			||||||
 | 
					      "Zone": null
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "ID": 0,
 | 
				
			||||||
 | 
					      "InsertDate": "0001-01-01T00:00:00",
 | 
				
			||||||
 | 
					      "AttachmentID": "00000000-0000-0000-0000-000000000000",
 | 
				
			||||||
 | 
					      "Title": null,
 | 
				
			||||||
 | 
					      "Date": "0001-01-01T00:00:00",
 | 
				
			||||||
 | 
					      "ToolTypeID": 0,
 | 
				
			||||||
 | 
					      "ToolTypeName": null,
 | 
				
			||||||
 | 
					      "MesEntity": "TENCOR3",
 | 
				
			||||||
 | 
					      "Employee": "",
 | 
				
			||||||
 | 
					      "Layer": null,
 | 
				
			||||||
 | 
					      "PSN": "",
 | 
				
			||||||
 | 
					      "RDS": "",
 | 
				
			||||||
 | 
					      "Reactor": "",
 | 
				
			||||||
 | 
					      "Recipe": "AS_IFX_ROTR",
 | 
				
			||||||
 | 
					      "Zone": null
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 5
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					asdf
 | 
				
			||||||
							
								
								
									
										35
									
								
								Server/Data/Tests/InfinityQS-GetCommandText.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								Server/Data/Tests/InfinityQS-GetCommandText.sql
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					 select 
 | 
				
			||||||
 | 
					       se.f_sgrp se_sgrp, 
 | 
				
			||||||
 | 
					       se.f_sgtm se_sgtm, 
 | 
				
			||||||
 | 
					       se.f_tsno se_tsno, 
 | 
				
			||||||
 | 
					       se.f_val se_val, 
 | 
				
			||||||
 | 
					       rd.f_name rd_name, 
 | 
				
			||||||
 | 
					       jd.f_name jd_name, 
 | 
				
			||||||
 | 
					       pl.f_name pl_name, 
 | 
				
			||||||
 | 
					       pd.f_name pd_name, 
 | 
				
			||||||
 | 
					       td.f_test td_test, 
 | 
				
			||||||
 | 
					       td.f_name td_name, 
 | 
				
			||||||
 | 
					       (select count(ev.f_evnt) 
 | 
				
			||||||
 | 
					       from [spcepiworld].[dbo].[evnt_inf] ev 
 | 
				
			||||||
 | 
					       where ev.f_prcs = rd.f_prcs 
 | 
				
			||||||
 | 
					         and ev.f_part = pd.f_part 
 | 
				
			||||||
 | 
					         and ev.f_sgtm = se.f_sgtm) ev_count 
 | 
				
			||||||
 | 
					 from [spcepiworld].[dbo].[sgrp_ext] se 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[prcs_dat] rd 
 | 
				
			||||||
 | 
					   on se.f_prcs = rd.f_prcs 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[job_dat] jd 
 | 
				
			||||||
 | 
					   on se.f_job = jd.f_job 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[part_lot] pl 
 | 
				
			||||||
 | 
					   on se.f_lot = pl.f_lot 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[part_dat] pd 
 | 
				
			||||||
 | 
					   on se.f_part = pd.f_part 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[test_dat] td  
 | 
				
			||||||
 | 
					   on se.f_test = td.f_test 
 | 
				
			||||||
 | 
					 where se.f_flag = 0 
 | 
				
			||||||
 | 
					   and se.f_sgrp = 1677273357  
 | 
				
			||||||
 | 
					   and rd.f_name = '61' 
 | 
				
			||||||
 | 
					   and pd.f_name = '5012' 
 | 
				
			||||||
 | 
					   and jd.f_name = 'CDE5' 
 | 
				
			||||||
 | 
					   and pl.f_name = '575908' 
 | 
				
			||||||
 | 
					   and dateadd(HH, -7, (dateadd(SS, convert(bigint, se.f_sgtm), '19700101'))) = '2023-02-24 15:15:00' 
 | 
				
			||||||
 | 
					   for json path 
 | 
				
			||||||
							
								
								
									
										905
									
								
								Server/Data/Tests/InfinityQS-GetData.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										905
									
								
								Server/Data/Tests/InfinityQS-GetData.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,905 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 1,
 | 
				
			||||||
 | 
					      "TD_TEST": 1650647347,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "T",
 | 
				
			||||||
 | 
					      "SE_VAL": 270
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 1,
 | 
				
			||||||
 | 
					      "TD_TEST": 1654782546,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Merit",
 | 
				
			||||||
 | 
					      "SE_VAL": 1
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 1,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716039,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "R",
 | 
				
			||||||
 | 
					      "SE_VAL": 95
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 1,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716040,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Rs",
 | 
				
			||||||
 | 
					      "SE_VAL": 1399.703
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 1,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716248,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Avg",
 | 
				
			||||||
 | 
					      "SE_VAL": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 1,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716249,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Temp",
 | 
				
			||||||
 | 
					      "SE_VAL": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 2,
 | 
				
			||||||
 | 
					      "TD_TEST": 1650647347,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "T",
 | 
				
			||||||
 | 
					      "SE_VAL": 270
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 2,
 | 
				
			||||||
 | 
					      "TD_TEST": 1654782546,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Merit",
 | 
				
			||||||
 | 
					      "SE_VAL": 0.9
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 2,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716039,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "R",
 | 
				
			||||||
 | 
					      "SE_VAL": 71
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 2,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716040,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Rs",
 | 
				
			||||||
 | 
					      "SE_VAL": 1425.322
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 2,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716248,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Avg",
 | 
				
			||||||
 | 
					      "SE_VAL": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 2,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716249,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Temp",
 | 
				
			||||||
 | 
					      "SE_VAL": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 3,
 | 
				
			||||||
 | 
					      "TD_TEST": 1650647347,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "T",
 | 
				
			||||||
 | 
					      "SE_VAL": 270
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 3,
 | 
				
			||||||
 | 
					      "TD_TEST": 1654782546,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Merit",
 | 
				
			||||||
 | 
					      "SE_VAL": 0.92
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 3,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716039,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "R",
 | 
				
			||||||
 | 
					      "SE_VAL": 47
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 3,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716040,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Rs",
 | 
				
			||||||
 | 
					      "SE_VAL": 1439.78
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 3,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716248,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Avg",
 | 
				
			||||||
 | 
					      "SE_VAL": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 3,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716249,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Temp",
 | 
				
			||||||
 | 
					      "SE_VAL": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 4,
 | 
				
			||||||
 | 
					      "TD_TEST": 1650647347,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "T",
 | 
				
			||||||
 | 
					      "SE_VAL": 270
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 4,
 | 
				
			||||||
 | 
					      "TD_TEST": 1654782546,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Merit",
 | 
				
			||||||
 | 
					      "SE_VAL": 0.93
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 4,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716039,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "R",
 | 
				
			||||||
 | 
					      "SE_VAL": 23
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 4,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716040,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Rs",
 | 
				
			||||||
 | 
					      "SE_VAL": 1382.154
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 4,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716248,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Avg",
 | 
				
			||||||
 | 
					      "SE_VAL": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 4,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716249,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Temp",
 | 
				
			||||||
 | 
					      "SE_VAL": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 5,
 | 
				
			||||||
 | 
					      "TD_TEST": 1650647347,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "T",
 | 
				
			||||||
 | 
					      "SE_VAL": 0
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 5,
 | 
				
			||||||
 | 
					      "TD_TEST": 1654782546,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Merit",
 | 
				
			||||||
 | 
					      "SE_VAL": 0.87
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 5,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716039,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "R",
 | 
				
			||||||
 | 
					      "SE_VAL": 0
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 5,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716040,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Rs",
 | 
				
			||||||
 | 
					      "SE_VAL": 1406.158
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 5,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716248,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Avg",
 | 
				
			||||||
 | 
					      "SE_VAL": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 5,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716249,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Temp",
 | 
				
			||||||
 | 
					      "SE_VAL": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 6,
 | 
				
			||||||
 | 
					      "TD_TEST": 1650647347,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "T",
 | 
				
			||||||
 | 
					      "SE_VAL": 90
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 6,
 | 
				
			||||||
 | 
					      "TD_TEST": 1654782546,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Merit",
 | 
				
			||||||
 | 
					      "SE_VAL": 0.87
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 6,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716039,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "R",
 | 
				
			||||||
 | 
					      "SE_VAL": 11
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 6,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716040,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Rs",
 | 
				
			||||||
 | 
					      "SE_VAL": 1394.458
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 6,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716248,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Avg",
 | 
				
			||||||
 | 
					      "SE_VAL": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 6,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716249,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Temp",
 | 
				
			||||||
 | 
					      "SE_VAL": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 7,
 | 
				
			||||||
 | 
					      "TD_TEST": 1650647347,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "T",
 | 
				
			||||||
 | 
					      "SE_VAL": 90
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 7,
 | 
				
			||||||
 | 
					      "TD_TEST": 1654782546,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Merit",
 | 
				
			||||||
 | 
					      "SE_VAL": 0.85
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 7,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716039,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "R",
 | 
				
			||||||
 | 
					      "SE_VAL": 35
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 7,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716040,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Rs",
 | 
				
			||||||
 | 
					      "SE_VAL": 1387.965
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 7,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716248,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Avg",
 | 
				
			||||||
 | 
					      "SE_VAL": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 7,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716249,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Temp",
 | 
				
			||||||
 | 
					      "SE_VAL": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 8,
 | 
				
			||||||
 | 
					      "TD_TEST": 1650647347,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "T",
 | 
				
			||||||
 | 
					      "SE_VAL": 90
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 8,
 | 
				
			||||||
 | 
					      "TD_TEST": 1654782546,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Merit",
 | 
				
			||||||
 | 
					      "SE_VAL": 0.98
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 8,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716039,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "R",
 | 
				
			||||||
 | 
					      "SE_VAL": 59
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 8,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716040,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Rs",
 | 
				
			||||||
 | 
					      "SE_VAL": 1411.158
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 8,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716248,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Avg",
 | 
				
			||||||
 | 
					      "SE_VAL": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 8,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716249,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Temp",
 | 
				
			||||||
 | 
					      "SE_VAL": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 9,
 | 
				
			||||||
 | 
					      "TD_TEST": 1650647347,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "T",
 | 
				
			||||||
 | 
					      "SE_VAL": 90
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 9,
 | 
				
			||||||
 | 
					      "TD_TEST": 1654782546,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Merit",
 | 
				
			||||||
 | 
					      "SE_VAL": 0.88
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 9,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716039,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "R",
 | 
				
			||||||
 | 
					      "SE_VAL": 83
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 9,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716040,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Rs",
 | 
				
			||||||
 | 
					      "SE_VAL": 1413.722
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 9,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716248,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Avg",
 | 
				
			||||||
 | 
					      "SE_VAL": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 9,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716249,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Temp",
 | 
				
			||||||
 | 
					      "SE_VAL": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 10,
 | 
				
			||||||
 | 
					      "TD_TEST": 1650647347,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "T",
 | 
				
			||||||
 | 
					      "SE_VAL": 90
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 10,
 | 
				
			||||||
 | 
					      "TD_TEST": 1654782546,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Merit",
 | 
				
			||||||
 | 
					      "SE_VAL": 0.98
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 10,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716039,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "R",
 | 
				
			||||||
 | 
					      "SE_VAL": 95
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 10,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716040,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Rs",
 | 
				
			||||||
 | 
					      "SE_VAL": 1401.816
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 10,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716248,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Avg",
 | 
				
			||||||
 | 
					      "SE_VAL": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 10,
 | 
				
			||||||
 | 
					      "TD_TEST": 1656716249,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "Temp",
 | 
				
			||||||
 | 
					      "SE_VAL": 18.2
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 60
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										236
									
								
								Server/Data/Tests/InfinityQS-GetDescriptors.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								Server/Data/Tests/InfinityQS-GetDescriptors.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,236 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 0,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1655312695,
 | 
				
			||||||
 | 
					      "GD_NAME": "Recipe",
 | 
				
			||||||
 | 
					      "DD_NAME": "LSL8IN \\ 10PT_5mm"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 0,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656696777,
 | 
				
			||||||
 | 
					      "GD_NAME": "Layer",
 | 
				
			||||||
 | 
					      "DD_NAME": "1"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 0,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656696778,
 | 
				
			||||||
 | 
					      "GD_NAME": "Zone",
 | 
				
			||||||
 | 
					      "DD_NAME": "1"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 1,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716039,
 | 
				
			||||||
 | 
					      "GD_NAME": "DataReject",
 | 
				
			||||||
 | 
					      "DD_NAME": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 2,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716039,
 | 
				
			||||||
 | 
					      "GD_NAME": "DataReject",
 | 
				
			||||||
 | 
					      "DD_NAME": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 3,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716039,
 | 
				
			||||||
 | 
					      "GD_NAME": "DataReject",
 | 
				
			||||||
 | 
					      "DD_NAME": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 4,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716039,
 | 
				
			||||||
 | 
					      "GD_NAME": "DataReject",
 | 
				
			||||||
 | 
					      "DD_NAME": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 5,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716039,
 | 
				
			||||||
 | 
					      "GD_NAME": "DataReject",
 | 
				
			||||||
 | 
					      "DD_NAME": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 6,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716039,
 | 
				
			||||||
 | 
					      "GD_NAME": "DataReject",
 | 
				
			||||||
 | 
					      "DD_NAME": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 7,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716039,
 | 
				
			||||||
 | 
					      "GD_NAME": "DataReject",
 | 
				
			||||||
 | 
					      "DD_NAME": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 8,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716039,
 | 
				
			||||||
 | 
					      "GD_NAME": "DataReject",
 | 
				
			||||||
 | 
					      "DD_NAME": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 9,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716039,
 | 
				
			||||||
 | 
					      "GD_NAME": "DataReject",
 | 
				
			||||||
 | 
					      "DD_NAME": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 10,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716039,
 | 
				
			||||||
 | 
					      "GD_NAME": "DataReject",
 | 
				
			||||||
 | 
					      "DD_NAME": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 1,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716040,
 | 
				
			||||||
 | 
					      "GD_NAME": "Pt",
 | 
				
			||||||
 | 
					      "DD_NAME": "1"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 2,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716040,
 | 
				
			||||||
 | 
					      "GD_NAME": "Pt",
 | 
				
			||||||
 | 
					      "DD_NAME": "2"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 3,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716040,
 | 
				
			||||||
 | 
					      "GD_NAME": "Pt",
 | 
				
			||||||
 | 
					      "DD_NAME": "3"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 4,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716040,
 | 
				
			||||||
 | 
					      "GD_NAME": "Pt",
 | 
				
			||||||
 | 
					      "DD_NAME": "4"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 5,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716040,
 | 
				
			||||||
 | 
					      "GD_NAME": "Pt",
 | 
				
			||||||
 | 
					      "DD_NAME": "5"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 6,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716040,
 | 
				
			||||||
 | 
					      "GD_NAME": "Pt",
 | 
				
			||||||
 | 
					      "DD_NAME": "6"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 7,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716040,
 | 
				
			||||||
 | 
					      "GD_NAME": "Pt",
 | 
				
			||||||
 | 
					      "DD_NAME": "7"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 8,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716040,
 | 
				
			||||||
 | 
					      "GD_NAME": "Pt",
 | 
				
			||||||
 | 
					      "DD_NAME": "8"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 9,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716040,
 | 
				
			||||||
 | 
					      "GD_NAME": "Pt",
 | 
				
			||||||
 | 
					      "DD_NAME": "9"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 10,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716040,
 | 
				
			||||||
 | 
					      "GD_NAME": "Pt",
 | 
				
			||||||
 | 
					      "DD_NAME": "10"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 1,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716042,
 | 
				
			||||||
 | 
					      "GD_NAME": "StdDev",
 | 
				
			||||||
 | 
					      "DD_NAME": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 2,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716042,
 | 
				
			||||||
 | 
					      "GD_NAME": "StdDev",
 | 
				
			||||||
 | 
					      "DD_NAME": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 3,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716042,
 | 
				
			||||||
 | 
					      "GD_NAME": "StdDev",
 | 
				
			||||||
 | 
					      "DD_NAME": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 4,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716042,
 | 
				
			||||||
 | 
					      "GD_NAME": "StdDev",
 | 
				
			||||||
 | 
					      "DD_NAME": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 5,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716042,
 | 
				
			||||||
 | 
					      "GD_NAME": "StdDev",
 | 
				
			||||||
 | 
					      "DD_NAME": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 6,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716042,
 | 
				
			||||||
 | 
					      "GD_NAME": "StdDev",
 | 
				
			||||||
 | 
					      "DD_NAME": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 7,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716042,
 | 
				
			||||||
 | 
					      "GD_NAME": "StdDev",
 | 
				
			||||||
 | 
					      "DD_NAME": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 8,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716042,
 | 
				
			||||||
 | 
					      "GD_NAME": "StdDev",
 | 
				
			||||||
 | 
					      "DD_NAME": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 9,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716042,
 | 
				
			||||||
 | 
					      "GD_NAME": "StdDev",
 | 
				
			||||||
 | 
					      "DD_NAME": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SD_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SD_TSNO": 10,
 | 
				
			||||||
 | 
					      "DD_DSGP": 1656716042,
 | 
				
			||||||
 | 
					      "GD_NAME": "StdDev",
 | 
				
			||||||
 | 
					      "DD_NAME": "1.23%"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 33
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								Server/Data/Tests/InfinityQS-GetEvents.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Server/Data/Tests/InfinityQS-GetEvents.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [],
 | 
				
			||||||
 | 
					  "TotalRows": 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										20
									
								
								Server/Data/Tests/InfinityQS-GetHeader.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Server/Data/Tests/InfinityQS-GetHeader.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EV_COUNT": 0,
 | 
				
			||||||
 | 
					      "CL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SL_COUNT": 0,
 | 
				
			||||||
 | 
					      "SE_SGRP": 1677273357,
 | 
				
			||||||
 | 
					      "SE_SGTM": 1677273300,
 | 
				
			||||||
 | 
					      "SE_TSNO": 1,
 | 
				
			||||||
 | 
					      "TD_TEST": 1650647347,
 | 
				
			||||||
 | 
					      "PR_NAME": "61",
 | 
				
			||||||
 | 
					      "JD_NAME": "CDE5",
 | 
				
			||||||
 | 
					      "PL_NAME": "575908",
 | 
				
			||||||
 | 
					      "PD_NAME": "5012",
 | 
				
			||||||
 | 
					      "TD_NAME": "T",
 | 
				
			||||||
 | 
					      "SE_VAL": 270
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										50
									
								
								Server/Data/Tests/InfinityQSV2-GetCommandText.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								Server/Data/Tests/InfinityQSV2-GetCommandText.sql
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					 select iq.ev_count, iq.cl_count, iq.sl_count, iq.se_sgrp, iq.se_sgtm, iq.se_tsno, iq.td_test, iq.pr_name, iq.jd_name, iq.pl_name, iq.pd_name, iq.td_name, iq.se_val 
 | 
				
			||||||
 | 
					 from ( 
 | 
				
			||||||
 | 
					 select 
 | 
				
			||||||
 | 
					       se.f_sgrp se_sgrp, 
 | 
				
			||||||
 | 
					       se.f_sgtm se_sgtm, 
 | 
				
			||||||
 | 
					       se.f_tsno se_tsno, 
 | 
				
			||||||
 | 
					       se.f_val se_val, 
 | 
				
			||||||
 | 
					       pr.f_name pr_name, 
 | 
				
			||||||
 | 
					       jd.f_name jd_name, 
 | 
				
			||||||
 | 
					       pl.f_name pl_name, 
 | 
				
			||||||
 | 
					       pd.f_name pd_name, 
 | 
				
			||||||
 | 
					       td.f_test td_test, 
 | 
				
			||||||
 | 
					       td.f_name td_name, 
 | 
				
			||||||
 | 
					       (select count(cl.f_part) 
 | 
				
			||||||
 | 
					       from [spcepiworld].[dbo].[ctrl_lim] cl 
 | 
				
			||||||
 | 
					       where cl.f_part = pd.f_part 
 | 
				
			||||||
 | 
					         and cl.f_test = td.f_test 
 | 
				
			||||||
 | 
					       ) cl_count, 
 | 
				
			||||||
 | 
					       (select count(sl.f_part) 
 | 
				
			||||||
 | 
					       from [spcepiworld].[dbo].[spec_lim] sl 
 | 
				
			||||||
 | 
					       where sl.f_part = pd.f_part 
 | 
				
			||||||
 | 
					         and sl.f_test = td.f_test 
 | 
				
			||||||
 | 
					       ) sl_count, 
 | 
				
			||||||
 | 
					       (select count(ev.f_evnt) 
 | 
				
			||||||
 | 
					       from [spcepiworld].[dbo].[evnt_inf] ev 
 | 
				
			||||||
 | 
					       where ev.f_prcs = pr.f_prcs 
 | 
				
			||||||
 | 
					         and ev.f_part = pd.f_part 
 | 
				
			||||||
 | 
					         and ev.f_sgtm = se.f_sgtm 
 | 
				
			||||||
 | 
					       ) ev_count 
 | 
				
			||||||
 | 
					 from [spcepiworld].[dbo].[sgrp_ext] se 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[prcs_dat] pr 
 | 
				
			||||||
 | 
					   on se.f_prcs = pr.f_prcs 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[job_dat] jd 
 | 
				
			||||||
 | 
					   on se.f_job = jd.f_job 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[part_lot] pl 
 | 
				
			||||||
 | 
					   on se.f_lot = pl.f_lot 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[part_dat] pd 
 | 
				
			||||||
 | 
					   on se.f_part = pd.f_part 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[test_dat] td  
 | 
				
			||||||
 | 
					   on se.f_test = td.f_test 
 | 
				
			||||||
 | 
					 where se.f_flag = 0 
 | 
				
			||||||
 | 
					   and se.f_sgrp = 1677273357  
 | 
				
			||||||
 | 
					   and pr.f_name = '61' 
 | 
				
			||||||
 | 
					   and pd.f_name = '5012' 
 | 
				
			||||||
 | 
					   and jd.f_name = 'CDE5' 
 | 
				
			||||||
 | 
					   and pl.f_name = '575908' 
 | 
				
			||||||
 | 
					   and dateadd(HH, -7, (dateadd(SS, convert(bigint, se.f_sgtm), '19700101'))) = '2023-02-24 15:15:00' 
 | 
				
			||||||
 | 
					 ) as iq 
 | 
				
			||||||
 | 
					 order by iq.ev_count desc, iq.cl_count desc, iq.sl_count desc, iq.se_sgrp, iq.se_tsno, iq.td_test 
 | 
				
			||||||
 | 
					   for json path 
 | 
				
			||||||
							
								
								
									
										905
									
								
								Server/Data/Tests/InfinityQSV2-GetData.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										905
									
								
								Server/Data/Tests/InfinityQSV2-GetData.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,905 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 1,
 | 
				
			||||||
 | 
					      "VariableNumber": 1650647347,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "T",
 | 
				
			||||||
 | 
					      "Value": 270
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 1,
 | 
				
			||||||
 | 
					      "VariableNumber": 1654782546,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Merit",
 | 
				
			||||||
 | 
					      "Value": 1
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 1,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "R",
 | 
				
			||||||
 | 
					      "Value": 95
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 1,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Rs",
 | 
				
			||||||
 | 
					      "Value": 1399.703
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 1,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716248,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Avg",
 | 
				
			||||||
 | 
					      "Value": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 1,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716249,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Temp",
 | 
				
			||||||
 | 
					      "Value": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 2,
 | 
				
			||||||
 | 
					      "VariableNumber": 1650647347,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "T",
 | 
				
			||||||
 | 
					      "Value": 270
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 2,
 | 
				
			||||||
 | 
					      "VariableNumber": 1654782546,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Merit",
 | 
				
			||||||
 | 
					      "Value": 0.9
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 2,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "R",
 | 
				
			||||||
 | 
					      "Value": 71
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 2,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Rs",
 | 
				
			||||||
 | 
					      "Value": 1425.322
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 2,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716248,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Avg",
 | 
				
			||||||
 | 
					      "Value": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 2,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716249,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Temp",
 | 
				
			||||||
 | 
					      "Value": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 3,
 | 
				
			||||||
 | 
					      "VariableNumber": 1650647347,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "T",
 | 
				
			||||||
 | 
					      "Value": 270
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 3,
 | 
				
			||||||
 | 
					      "VariableNumber": 1654782546,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Merit",
 | 
				
			||||||
 | 
					      "Value": 0.92
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 3,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "R",
 | 
				
			||||||
 | 
					      "Value": 47
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 3,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Rs",
 | 
				
			||||||
 | 
					      "Value": 1439.78
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 3,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716248,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Avg",
 | 
				
			||||||
 | 
					      "Value": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 3,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716249,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Temp",
 | 
				
			||||||
 | 
					      "Value": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 4,
 | 
				
			||||||
 | 
					      "VariableNumber": 1650647347,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "T",
 | 
				
			||||||
 | 
					      "Value": 270
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 4,
 | 
				
			||||||
 | 
					      "VariableNumber": 1654782546,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Merit",
 | 
				
			||||||
 | 
					      "Value": 0.93
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 4,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "R",
 | 
				
			||||||
 | 
					      "Value": 23
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 4,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Rs",
 | 
				
			||||||
 | 
					      "Value": 1382.154
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 4,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716248,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Avg",
 | 
				
			||||||
 | 
					      "Value": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 4,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716249,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Temp",
 | 
				
			||||||
 | 
					      "Value": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 5,
 | 
				
			||||||
 | 
					      "VariableNumber": 1650647347,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "T",
 | 
				
			||||||
 | 
					      "Value": 0
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 5,
 | 
				
			||||||
 | 
					      "VariableNumber": 1654782546,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Merit",
 | 
				
			||||||
 | 
					      "Value": 0.87
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 5,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "R",
 | 
				
			||||||
 | 
					      "Value": 0
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 5,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Rs",
 | 
				
			||||||
 | 
					      "Value": 1406.158
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 5,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716248,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Avg",
 | 
				
			||||||
 | 
					      "Value": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 5,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716249,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Temp",
 | 
				
			||||||
 | 
					      "Value": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 6,
 | 
				
			||||||
 | 
					      "VariableNumber": 1650647347,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "T",
 | 
				
			||||||
 | 
					      "Value": 90
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 6,
 | 
				
			||||||
 | 
					      "VariableNumber": 1654782546,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Merit",
 | 
				
			||||||
 | 
					      "Value": 0.87
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 6,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "R",
 | 
				
			||||||
 | 
					      "Value": 11
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 6,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Rs",
 | 
				
			||||||
 | 
					      "Value": 1394.458
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 6,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716248,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Avg",
 | 
				
			||||||
 | 
					      "Value": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 6,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716249,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Temp",
 | 
				
			||||||
 | 
					      "Value": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 7,
 | 
				
			||||||
 | 
					      "VariableNumber": 1650647347,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "T",
 | 
				
			||||||
 | 
					      "Value": 90
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 7,
 | 
				
			||||||
 | 
					      "VariableNumber": 1654782546,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Merit",
 | 
				
			||||||
 | 
					      "Value": 0.85
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 7,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "R",
 | 
				
			||||||
 | 
					      "Value": 35
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 7,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Rs",
 | 
				
			||||||
 | 
					      "Value": 1387.965
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 7,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716248,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Avg",
 | 
				
			||||||
 | 
					      "Value": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 7,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716249,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Temp",
 | 
				
			||||||
 | 
					      "Value": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 8,
 | 
				
			||||||
 | 
					      "VariableNumber": 1650647347,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "T",
 | 
				
			||||||
 | 
					      "Value": 90
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 8,
 | 
				
			||||||
 | 
					      "VariableNumber": 1654782546,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Merit",
 | 
				
			||||||
 | 
					      "Value": 0.98
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 8,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "R",
 | 
				
			||||||
 | 
					      "Value": 59
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 8,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Rs",
 | 
				
			||||||
 | 
					      "Value": 1411.158
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 8,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716248,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Avg",
 | 
				
			||||||
 | 
					      "Value": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 8,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716249,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Temp",
 | 
				
			||||||
 | 
					      "Value": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 9,
 | 
				
			||||||
 | 
					      "VariableNumber": 1650647347,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "T",
 | 
				
			||||||
 | 
					      "Value": 90
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 9,
 | 
				
			||||||
 | 
					      "VariableNumber": 1654782546,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Merit",
 | 
				
			||||||
 | 
					      "Value": 0.88
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 9,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "R",
 | 
				
			||||||
 | 
					      "Value": 83
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 9,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Rs",
 | 
				
			||||||
 | 
					      "Value": 1413.722
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 9,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716248,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Avg",
 | 
				
			||||||
 | 
					      "Value": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 9,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716249,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Temp",
 | 
				
			||||||
 | 
					      "Value": 18.2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 10,
 | 
				
			||||||
 | 
					      "VariableNumber": 1650647347,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "T",
 | 
				
			||||||
 | 
					      "Value": 90
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 10,
 | 
				
			||||||
 | 
					      "VariableNumber": 1654782546,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Merit",
 | 
				
			||||||
 | 
					      "Value": 0.98
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 10,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "R",
 | 
				
			||||||
 | 
					      "Value": 95
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 10,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Rs",
 | 
				
			||||||
 | 
					      "Value": 1401.816
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 10,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716248,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Avg",
 | 
				
			||||||
 | 
					      "Value": 1406.22
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 10,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716249,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "Temp",
 | 
				
			||||||
 | 
					      "Value": 18.2
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 60
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										236
									
								
								Server/Data/Tests/InfinityQSV2-GetDescriptors.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								Server/Data/Tests/InfinityQSV2-GetDescriptors.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,236 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 0,
 | 
				
			||||||
 | 
					      "VariableNumber": 1655312695,
 | 
				
			||||||
 | 
					      "Variable": "Recipe",
 | 
				
			||||||
 | 
					      "Value": "LSL8IN \\ 10PT_5mm"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 0,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656696777,
 | 
				
			||||||
 | 
					      "Variable": "Layer",
 | 
				
			||||||
 | 
					      "Value": "1"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 0,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656696778,
 | 
				
			||||||
 | 
					      "Variable": "Zone",
 | 
				
			||||||
 | 
					      "Value": "1"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 1,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Variable": "DataReject",
 | 
				
			||||||
 | 
					      "Value": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 2,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Variable": "DataReject",
 | 
				
			||||||
 | 
					      "Value": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 3,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Variable": "DataReject",
 | 
				
			||||||
 | 
					      "Value": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 4,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Variable": "DataReject",
 | 
				
			||||||
 | 
					      "Value": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 5,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Variable": "DataReject",
 | 
				
			||||||
 | 
					      "Value": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 6,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Variable": "DataReject",
 | 
				
			||||||
 | 
					      "Value": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 7,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Variable": "DataReject",
 | 
				
			||||||
 | 
					      "Value": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 8,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Variable": "DataReject",
 | 
				
			||||||
 | 
					      "Value": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 9,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Variable": "DataReject",
 | 
				
			||||||
 | 
					      "Value": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 10,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716039,
 | 
				
			||||||
 | 
					      "Variable": "DataReject",
 | 
				
			||||||
 | 
					      "Value": "3.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 1,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Variable": "Pt",
 | 
				
			||||||
 | 
					      "Value": "1"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 2,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Variable": "Pt",
 | 
				
			||||||
 | 
					      "Value": "2"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 3,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Variable": "Pt",
 | 
				
			||||||
 | 
					      "Value": "3"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 4,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Variable": "Pt",
 | 
				
			||||||
 | 
					      "Value": "4"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 5,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Variable": "Pt",
 | 
				
			||||||
 | 
					      "Value": "5"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 6,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Variable": "Pt",
 | 
				
			||||||
 | 
					      "Value": "6"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 7,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Variable": "Pt",
 | 
				
			||||||
 | 
					      "Value": "7"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 8,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Variable": "Pt",
 | 
				
			||||||
 | 
					      "Value": "8"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 9,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Variable": "Pt",
 | 
				
			||||||
 | 
					      "Value": "9"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 10,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716040,
 | 
				
			||||||
 | 
					      "Variable": "Pt",
 | 
				
			||||||
 | 
					      "Value": "10"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 1,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716042,
 | 
				
			||||||
 | 
					      "Variable": "StdDev",
 | 
				
			||||||
 | 
					      "Value": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 2,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716042,
 | 
				
			||||||
 | 
					      "Variable": "StdDev",
 | 
				
			||||||
 | 
					      "Value": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 3,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716042,
 | 
				
			||||||
 | 
					      "Variable": "StdDev",
 | 
				
			||||||
 | 
					      "Value": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 4,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716042,
 | 
				
			||||||
 | 
					      "Variable": "StdDev",
 | 
				
			||||||
 | 
					      "Value": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 5,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716042,
 | 
				
			||||||
 | 
					      "Variable": "StdDev",
 | 
				
			||||||
 | 
					      "Value": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 6,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716042,
 | 
				
			||||||
 | 
					      "Variable": "StdDev",
 | 
				
			||||||
 | 
					      "Value": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 7,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716042,
 | 
				
			||||||
 | 
					      "Variable": "StdDev",
 | 
				
			||||||
 | 
					      "Value": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 8,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716042,
 | 
				
			||||||
 | 
					      "Variable": "StdDev",
 | 
				
			||||||
 | 
					      "Value": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 9,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716042,
 | 
				
			||||||
 | 
					      "Variable": "StdDev",
 | 
				
			||||||
 | 
					      "Value": "1.23%"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SiteNumber": 10,
 | 
				
			||||||
 | 
					      "VariableNumber": 1656716042,
 | 
				
			||||||
 | 
					      "Variable": "StdDev",
 | 
				
			||||||
 | 
					      "Value": "1.23%"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 33
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								Server/Data/Tests/InfinityQSV2-GetEvents.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Server/Data/Tests/InfinityQSV2-GetEvents.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [],
 | 
				
			||||||
 | 
					  "TotalRows": 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										20
									
								
								Server/Data/Tests/InfinityQSV2-GetHeader.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Server/Data/Tests/InfinityQSV2-GetHeader.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "EventCount": 0,
 | 
				
			||||||
 | 
					      "ControlLimitCount": 0,
 | 
				
			||||||
 | 
					      "SpecLimitCount": 0,
 | 
				
			||||||
 | 
					      "SubGroupId": 1677273357,
 | 
				
			||||||
 | 
					      "SubGroupDateTime": 1677273300,
 | 
				
			||||||
 | 
					      "SiteNumber": 1,
 | 
				
			||||||
 | 
					      "VariableNumber": 1650647347,
 | 
				
			||||||
 | 
					      "Process": "61",
 | 
				
			||||||
 | 
					      "Job": "CDE5",
 | 
				
			||||||
 | 
					      "Lot": "575908",
 | 
				
			||||||
 | 
					      "Part": "5012",
 | 
				
			||||||
 | 
					      "Variable": "T",
 | 
				
			||||||
 | 
					      "Value": 270
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										78
									
								
								Server/Data/Tests/InfinityQSV3-GetCommandText.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								Server/Data/Tests/InfinityQSV3-GetCommandText.sql
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,78 @@
 | 
				
			|||||||
 | 
					 select case when iq.sl_loos is null then 0 else iq.sl_loos end + 
 | 
				
			||||||
 | 
					        case when iq.sl_uoos is null then 0 else iq.sl_uoos end + 
 | 
				
			||||||
 | 
					        iq.ev_count as iq_sum, 
 | 
				
			||||||
 | 
					        iq.sl_aflag, 
 | 
				
			||||||
 | 
					        iq.sl_loos, 
 | 
				
			||||||
 | 
					        iq.sl_uoos, 
 | 
				
			||||||
 | 
					        iq.se_sgrp, 
 | 
				
			||||||
 | 
					        iq.se_sgtm, 
 | 
				
			||||||
 | 
					        iq.se_tsno, 
 | 
				
			||||||
 | 
					        iq.td_test, 
 | 
				
			||||||
 | 
					        iq.pr_name, 
 | 
				
			||||||
 | 
					        iq.jd_name, 
 | 
				
			||||||
 | 
					        iq.pl_name, 
 | 
				
			||||||
 | 
					        iq.pd_name, 
 | 
				
			||||||
 | 
					        iq.td_name, 
 | 
				
			||||||
 | 
					        iq.se_val, 
 | 
				
			||||||
 | 
					        iq.sl_eflag, 
 | 
				
			||||||
 | 
					        iq.sl_scal, 
 | 
				
			||||||
 | 
					        iq.sl_sls, 
 | 
				
			||||||
 | 
					        iq.sl_usl 
 | 
				
			||||||
 | 
					 from ( 
 | 
				
			||||||
 | 
					 select 
 | 
				
			||||||
 | 
					       se.f_sgrp se_sgrp, 
 | 
				
			||||||
 | 
					       se.f_sgtm se_sgtm, 
 | 
				
			||||||
 | 
					       se.f_tsno se_tsno, 
 | 
				
			||||||
 | 
					       se.f_val se_val, 
 | 
				
			||||||
 | 
					       pr.f_name pr_name, 
 | 
				
			||||||
 | 
					       jd.f_name jd_name, 
 | 
				
			||||||
 | 
					       pl.f_name pl_name, 
 | 
				
			||||||
 | 
					       pd.f_name pd_name, 
 | 
				
			||||||
 | 
					       td.f_test td_test, 
 | 
				
			||||||
 | 
					       td.f_name td_name, 
 | 
				
			||||||
 | 
					       sl.f_eflag sl_eflag, 
 | 
				
			||||||
 | 
					       sl.f_aflag sl_aflag, 
 | 
				
			||||||
 | 
					       sl.f_scal sl_scal, 
 | 
				
			||||||
 | 
					       sl.f_lsl sl_sls, 
 | 
				
			||||||
 | 
					       sl.f_usl sl_usl, 
 | 
				
			||||||
 | 
					       case when sl.f_aflag is null or sl.f_aflag = 0 then null else 
 | 
				
			||||||
 | 
					         case when round(se.f_val, sl.F_scal, 1) < sl.f_lsl then 1 else 0 end 
 | 
				
			||||||
 | 
					       end as sl_loos, 
 | 
				
			||||||
 | 
					       case when sl.f_aflag is null or sl.f_aflag = 0 then null else 
 | 
				
			||||||
 | 
					         case when round(se.f_val, sl.F_scal, 1) > sl.f_usl then 1 else 0 end 
 | 
				
			||||||
 | 
					       end as sl_uoos, 
 | 
				
			||||||
 | 
					       (select count(ev.f_evnt) 
 | 
				
			||||||
 | 
					       from [spcepiworld].[dbo].[evnt_inf] ev 
 | 
				
			||||||
 | 
					       where ev.f_prcs = pr.f_prcs 
 | 
				
			||||||
 | 
					         and ev.f_part = pd.f_part 
 | 
				
			||||||
 | 
					         and ev.f_sgtm = se.f_sgtm 
 | 
				
			||||||
 | 
					       ) ev_count 
 | 
				
			||||||
 | 
					 from [spcepiworld].[dbo].[sgrp_ext] se 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[prcs_dat] pr 
 | 
				
			||||||
 | 
					   on se.f_prcs = pr.f_prcs 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[job_dat] jd 
 | 
				
			||||||
 | 
					   on se.f_job = jd.f_job 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[part_lot] pl 
 | 
				
			||||||
 | 
					   on se.f_lot = pl.f_lot 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[part_dat] pd 
 | 
				
			||||||
 | 
					   on se.f_part = pd.f_part 
 | 
				
			||||||
 | 
					 join [spcepiworld].[dbo].[test_dat] td 
 | 
				
			||||||
 | 
					   on se.f_test = td.f_test 
 | 
				
			||||||
 | 
					 left join [spcepiworld].[dbo].[spec_lim] sl 
 | 
				
			||||||
 | 
					   on se.f_part = sl.f_part 
 | 
				
			||||||
 | 
					  and se.f_test = sl.f_test 
 | 
				
			||||||
 | 
					 where se.f_flag = 0 
 | 
				
			||||||
 | 
					   and (sl.f_prcs is null or se.f_prcs = sl.f_prcs or sl.f_prcs = 0) 
 | 
				
			||||||
 | 
					   and se.f_sgrp = 1698497987  
 | 
				
			||||||
 | 
					   and pr.f_name = '61' 
 | 
				
			||||||
 | 
					   and pd.f_name = '5012' 
 | 
				
			||||||
 | 
					   and jd.f_name = 'CDE5' 
 | 
				
			||||||
 | 
					   and pl.f_name = '575908' 
 | 
				
			||||||
 | 
					   and dateadd(HH, -7, (dateadd(SS, convert(bigint, se.f_sgtm), '19700101'))) = '2023-02-24 15:15:00' 
 | 
				
			||||||
 | 
					 ) as iq 
 | 
				
			||||||
 | 
					 order by iq.sl_loos + iq.sl_uoos + iq.ev_count desc, 
 | 
				
			||||||
 | 
					          iq.sl_aflag desc, 
 | 
				
			||||||
 | 
					          iq.se_sgrp, 
 | 
				
			||||||
 | 
					          iq.se_tsno, 
 | 
				
			||||||
 | 
					          iq.td_test 
 | 
				
			||||||
 | 
					   for json path 
 | 
				
			||||||
							
								
								
									
										1023
									
								
								Server/Data/Tests/InfinityQSV3-GetData.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1023
									
								
								Server/Data/Tests/InfinityQSV3-GetData.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										152
									
								
								Server/Data/Tests/InfinityQSV3-GetDescriptors.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								Server/Data/Tests/InfinityQSV3-GetDescriptors.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,152 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 1,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657291789,
 | 
				
			||||||
 | 
					      "gd_name": "CondType",
 | 
				
			||||||
 | 
					      "dd_name": "N"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 2,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657291789,
 | 
				
			||||||
 | 
					      "gd_name": "CondType",
 | 
				
			||||||
 | 
					      "dd_name": "N"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 1,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657291790,
 | 
				
			||||||
 | 
					      "gd_name": "GLimit",
 | 
				
			||||||
 | 
					      "dd_name": "2000.00 \u00B5"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 2,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657291790,
 | 
				
			||||||
 | 
					      "gd_name": "GLimit",
 | 
				
			||||||
 | 
					      "dd_name": "2000.00 \u00B5"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 1,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296863,
 | 
				
			||||||
 | 
					      "gd_name": "Model",
 | 
				
			||||||
 | 
					      "dd_name": "PARALLEL"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 2,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296863,
 | 
				
			||||||
 | 
					      "gd_name": "Model",
 | 
				
			||||||
 | 
					      "dd_name": "PARALLEL"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 0,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296864,
 | 
				
			||||||
 | 
					      "gd_name": "Pattern",
 | 
				
			||||||
 | 
					      "dd_name": "ONEPT.PAT"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 1,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296865,
 | 
				
			||||||
 | 
					      "gd_name": "Phase",
 | 
				
			||||||
 | 
					      "dd_name": "90.000"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 2,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296865,
 | 
				
			||||||
 | 
					      "gd_name": "Phase",
 | 
				
			||||||
 | 
					      "dd_name": "90.000"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 1,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296866,
 | 
				
			||||||
 | 
					      "gd_name": "Plan",
 | 
				
			||||||
 | 
					      "dd_name": "5PT MES"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 2,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296866,
 | 
				
			||||||
 | 
					      "gd_name": "Plan",
 | 
				
			||||||
 | 
					      "dd_name": "5PT MES"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 1,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296867,
 | 
				
			||||||
 | 
					      "gd_name": "RampRate",
 | 
				
			||||||
 | 
					      "dd_name": "2500"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 2,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296867,
 | 
				
			||||||
 | 
					      "gd_name": "RampRate",
 | 
				
			||||||
 | 
					      "dd_name": "2500"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 1,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296868,
 | 
				
			||||||
 | 
					      "gd_name": "RhoMethod",
 | 
				
			||||||
 | 
					      "dd_name": "ASTM: F723 - 82"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 2,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296868,
 | 
				
			||||||
 | 
					      "gd_name": "RhoMethod",
 | 
				
			||||||
 | 
					      "dd_name": "ASTM: F723 - 82"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 1,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296869,
 | 
				
			||||||
 | 
					      "gd_name": "StartVoltage",
 | 
				
			||||||
 | 
					      "dd_name": "-5.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 2,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296869,
 | 
				
			||||||
 | 
					      "gd_name": "StartVoltage",
 | 
				
			||||||
 | 
					      "dd_name": "-5.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 1,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296870,
 | 
				
			||||||
 | 
					      "gd_name": "StopVoltage",
 | 
				
			||||||
 | 
					      "dd_name": "-20.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 2,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296870,
 | 
				
			||||||
 | 
					      "gd_name": "StopVoltage",
 | 
				
			||||||
 | 
					      "dd_name": "-20.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 1,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296871,
 | 
				
			||||||
 | 
					      "gd_name": "WaferSize",
 | 
				
			||||||
 | 
					      "dd_name": "150.00"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "sd_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "sd_tsno": 2,
 | 
				
			||||||
 | 
					      "dd_dsgp": 1657296871,
 | 
				
			||||||
 | 
					      "gd_name": "WaferSize",
 | 
				
			||||||
 | 
					      "dd_name": "150.00"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 21
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					<tr><td>44</td><td class='Productive'>Productive</td><td class='LoadedRDSCount1'>616747</td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>50</td><td class='Productive'>Productive</td><td class='LoadedRDSCount0'></td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>48</td><td class='Unscheduled Down'>Unscheduled Down</td><td class='LoadedRDSCount0'></td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>42</td><td class='Scheduled Down'>Scheduled Down</td><td class='LoadedRDSCount1'>616741</td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>40</td><td class='Unscheduled Down'>Unscheduled Down</td><td class='LoadedRDSCount1'>616740</td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>46</td><td class='Productive'>Productive</td><td class='LoadedRDSCount0'></td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr><tr><td>54</td><td class='Non-Scheduled'>Non-Scheduled</td><td class='LoadedRDSCount0'></td><td>0</td><td>0</td><td>1/1/0001 12:00:00 AM</td></tr>
 | 
				
			||||||
@ -0,0 +1,70 @@
 | 
				
			|||||||
 | 
					[
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "40",
 | 
				
			||||||
 | 
					        "Unscheduled Down",
 | 
				
			||||||
 | 
					        "617354",
 | 
				
			||||||
 | 
					        "1090",
 | 
				
			||||||
 | 
					        "-3.25",
 | 
				
			||||||
 | 
					        "11/7/2023 9:53:35 AM",
 | 
				
			||||||
 | 
					        "168",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "44",
 | 
				
			||||||
 | 
					        "Productive",
 | 
				
			||||||
 | 
					        "617355",
 | 
				
			||||||
 | 
					        "1040",
 | 
				
			||||||
 | 
					        "-1.75",
 | 
				
			||||||
 | 
					        "11/14/2023 5:25:07 AM",
 | 
				
			||||||
 | 
					        "4"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "42",
 | 
				
			||||||
 | 
					        "Productive",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "1070",
 | 
				
			||||||
 | 
					        "2.5",
 | 
				
			||||||
 | 
					        "11/12/2023 10:38:41 AM",
 | 
				
			||||||
 | 
					        "47",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "46",
 | 
				
			||||||
 | 
					        "Productive",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "1069",
 | 
				
			||||||
 | 
					        "5",
 | 
				
			||||||
 | 
					        "11/14/2023 5:38:02 AM",
 | 
				
			||||||
 | 
					        "4"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "48",
 | 
				
			||||||
 | 
					        "Productive",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "1075",
 | 
				
			||||||
 | 
					        "-10.75",
 | 
				
			||||||
 | 
					        "11/11/2023 6:54:58 AM",
 | 
				
			||||||
 | 
					        "75",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "54",
 | 
				
			||||||
 | 
					        "Non-Scheduled",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "1067",
 | 
				
			||||||
 | 
					        "-5",
 | 
				
			||||||
 | 
					        "8/17/2023 4:12:20 AM",
 | 
				
			||||||
 | 
					        "2142"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        "50",
 | 
				
			||||||
 | 
					        "Productive",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "1078",
 | 
				
			||||||
 | 
					        "-11",
 | 
				
			||||||
 | 
					        "11/12/2023 6:47:21 AM",
 | 
				
			||||||
 | 
					        "51",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "\u0026nbsp;",
 | 
				
			||||||
 | 
					        "\u0026nbsp;"
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
							
								
								
									
										25
									
								
								Server/Data/Tests/InfinityQSV3-GetHeader.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Server/Data/Tests/InfinityQSV3-GetHeader.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "iq_sum": 1,
 | 
				
			||||||
 | 
					      "sl_aflag": 34,
 | 
				
			||||||
 | 
					      "sl_loos": 0,
 | 
				
			||||||
 | 
					      "sl_uoos": 1,
 | 
				
			||||||
 | 
					      "se_sgrp": 1698497987,
 | 
				
			||||||
 | 
					      "se_sgtm": 1698497973,
 | 
				
			||||||
 | 
					      "se_tsno": 1,
 | 
				
			||||||
 | 
					      "td_test": 1657240302,
 | 
				
			||||||
 | 
					      "pr_name": "HGCV2",
 | 
				
			||||||
 | 
					      "jd_name": "HGCV2",
 | 
				
			||||||
 | 
					      "pl_name": "-",
 | 
				
			||||||
 | 
					      "pd_name": "High",
 | 
				
			||||||
 | 
					      "td_name": "RhoAvgMean",
 | 
				
			||||||
 | 
					      "se_val": 12.66,
 | 
				
			||||||
 | 
					      "sl_eflag": 42,
 | 
				
			||||||
 | 
					      "sl_scal": 4,
 | 
				
			||||||
 | 
					      "sl_sls": 12.379,
 | 
				
			||||||
 | 
					      "sl_usl": 12.561
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					[{"ProcessMean":1.750000000000000e+001,"ProcessSigma":5.800000000000000e+000}]
 | 
				
			||||||
							
								
								
									
										1
									
								
								Server/Data/Tests/OpenInsightV1-GetTencorRun.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Server/Data/Tests/OpenInsightV1-GetTencorRun.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					[{"RDS":"615071","AttachmentId":"43CA162D-A04B-4A37-90D7-83BABAF2D3AB","Slot":"*01","SumOfDefects":"100","Sort":"FAIL","InsertDate":"2023-10-30T18:48:57.617"},{"RDS":"615071","AttachmentId":"706C7D0E-4EC1-4042-9DAA-3D141532B6E1","Slot":"*04","SumOfDefects":"12","Sort":"PASS","InsertDate":"2023-10-30T18:48:57.623"},{"RDS":"615071","AttachmentId":"4CECFAC9-745E-4235-BAD9-BE57D1FB450E","Slot":"*11","SumOfDefects":"22","Sort":"PASS","InsertDate":"2023-10-30T18:48:57.627"},{"RDS":"615071","AttachmentId":"B62DE99D-2060-4627-A006-C5FA0DC779BE","Slot":"*17","SumOfDefects":"279","Sort":"FAIL","InsertDate":"2023-10-30T18:48:57.630"}]
 | 
				
			||||||
							
								
								
									
										4
									
								
								Server/Data/Tests/Pin-GetPinnedTable.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Server/Data/Tests/Pin-GetPinnedTable.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [],
 | 
				
			||||||
 | 
					  "TotalRows": 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										33
									
								
								Server/Data/Tests/Reactors-GetReactors.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Server/Data/Tests/Reactors-GetReactors.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 28
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								Server/Data/Tests/ToolTypes-GetData.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Server/Data/Tests/ToolTypes-GetData.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					{"Results":[{"InsertDate":null,"Run Header":null,"Title":null,"AttachmentID":null,"Position":"Average","Thickness":"NaN","ID":-1},{"InsertDate":null,"Run Header":null,"Title":null,"AttachmentID":null,"Position":"Std Dev","Thickness":"NaN","ID":-2}],"TotalRows":2}
 | 
				
			||||||
							
								
								
									
										93
									
								
								Server/Data/Tests/ToolTypes-GetHeaderFields.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								Server/Data/Tests/ToolTypes-GetHeaderFields.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "ID",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "InsertDate",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Title",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Recipe",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Date",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Operator",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Batch",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Cassette",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Wafer",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Mean Thickness",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "RV Thickness",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Status",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Std Dev",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "SentToOI",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "SentToSPC",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Reactor",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "RDS",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "PSN",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Path",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Layer",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Zone",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Column": "Tool",
 | 
				
			||||||
 | 
					      "Value": ""
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 22
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										167982
									
								
								Server/Data/Tests/ToolTypes-GetHeaderTitles.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167982
									
								
								Server/Data/Tests/ToolTypes-GetHeaderTitles.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1
									
								
								Server/Data/Tests/ToolTypes-GetHeaders.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Server/Data/Tests/ToolTypes-GetHeaders.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										344
									
								
								Server/Data/Tests/ToolTypes-GetToolTypeMetadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										344
									
								
								Server/Data/Tests/ToolTypes-GetToolTypeMetadata.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,344 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Results": {
 | 
				
			||||||
 | 
					    "ToolType": {
 | 
				
			||||||
 | 
					      "ID": 1,
 | 
				
			||||||
 | 
					      "ToolTypeName": "BioRad",
 | 
				
			||||||
 | 
					      "HasHeaderAttachments": false,
 | 
				
			||||||
 | 
					      "HasDataAttachments": false,
 | 
				
			||||||
 | 
					      "HeaderTableName": "BioRadRunHeader",
 | 
				
			||||||
 | 
					      "DataTableName": "BioRadRunData",
 | 
				
			||||||
 | 
					      "ExportSPName": "Export_BioRad",
 | 
				
			||||||
 | 
					      "HeaderGridAttributes": null,
 | 
				
			||||||
 | 
					      "DataGridAttributes": "{ \u0022pinButton\u0022: true }",
 | 
				
			||||||
 | 
					      "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": 6,
 | 
				
			||||||
 | 
					        "GridAttributes": "{ \u0022formatter\u0022: \u0022isNull\u0022 }",
 | 
				
			||||||
 | 
					        "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": "{ \u0022formatter\u0022: \u0022isNull\u0022 }",
 | 
				
			||||||
 | 
					        "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": 5,
 | 
				
			||||||
 | 
					        "GridAttributes": "{ \u0022formatter\u0022: \u0022isNull\u0022 }",
 | 
				
			||||||
 | 
					        "TableDisplayOrder": 18
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "ToolTypeID": 1,
 | 
				
			||||||
 | 
					        "Header": true,
 | 
				
			||||||
 | 
					        "ApiName": "RDS",
 | 
				
			||||||
 | 
					        "ColumnName": "RDS",
 | 
				
			||||||
 | 
					        "DisplayTitle": "RDS",
 | 
				
			||||||
 | 
					        "GridDisplayOrder": 4,
 | 
				
			||||||
 | 
					        "GridAttributes": "{ \u0022formatter\u0022: \u0022isNull\u0022 }",
 | 
				
			||||||
 | 
					        "TableDisplayOrder": 17
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "ToolTypeID": 1,
 | 
				
			||||||
 | 
					        "Header": true,
 | 
				
			||||||
 | 
					        "ApiName": "Reactor",
 | 
				
			||||||
 | 
					        "ColumnName": "Reactor",
 | 
				
			||||||
 | 
					        "DisplayTitle": "Reactor",
 | 
				
			||||||
 | 
					        "GridDisplayOrder": 3,
 | 
				
			||||||
 | 
					        "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": "SentToOI",
 | 
				
			||||||
 | 
					        "GridDisplayOrder": 10,
 | 
				
			||||||
 | 
					        "GridAttributes": "{ \u0022dataType:\u0022: \u0022bool\u0022, \u0022formatter\u0022: \u0022boolToYesNo\u0022 }",
 | 
				
			||||||
 | 
					        "TableDisplayOrder": 14
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "ToolTypeID": 1,
 | 
				
			||||||
 | 
					        "Header": true,
 | 
				
			||||||
 | 
					        "ApiName": "SentToSPC",
 | 
				
			||||||
 | 
					        "ColumnName": "SentToSPC",
 | 
				
			||||||
 | 
					        "DisplayTitle": "SentToSPC",
 | 
				
			||||||
 | 
					        "GridDisplayOrder": 0,
 | 
				
			||||||
 | 
					        "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": 9,
 | 
				
			||||||
 | 
					        "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
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "ToolTypeID": 1,
 | 
				
			||||||
 | 
					        "Header": true,
 | 
				
			||||||
 | 
					        "ApiName": "CellName",
 | 
				
			||||||
 | 
					        "ColumnName": "Tool",
 | 
				
			||||||
 | 
					        "DisplayTitle": "Tool",
 | 
				
			||||||
 | 
					        "GridDisplayOrder": 2,
 | 
				
			||||||
 | 
					        "GridAttributes": null,
 | 
				
			||||||
 | 
					        "TableDisplayOrder": 22
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "TotalRows": 32
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										33
									
								
								Server/Data/Tests/ToolTypes-Index.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Server/Data/Tests/ToolTypes-Index.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "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
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "ToolTypeName": "SRP",
 | 
				
			||||||
 | 
					      "ID": 7
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "TotalRows": 7
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										34
									
								
								Server/Models/AppSettings.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								Server/Models/AppSettings.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					using System.Text.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OI.Metrology.Server.Models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public record AppSettings(string ApiExportPath,
 | 
				
			||||||
 | 
					                          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 OpenInsightApplicationProgrammingInterface,
 | 
				
			||||||
 | 
					                          Dictionary<string, string> TableToPath,
 | 
				
			||||||
 | 
					                          string URLs,
 | 
				
			||||||
 | 
					                          string WorkingDirectoryName)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public override string ToString()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										2
									
								
								Server/Models/Binder/.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Server/Models/Binder/.editorconfig
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					[*.cs]
 | 
				
			||||||
 | 
					csharp_preserve_single_line_statements = true
 | 
				
			||||||
							
								
								
									
										117
									
								
								Server/Models/Binder/AppSettings.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								Server/Models/Binder/AppSettings.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,117 @@
 | 
				
			|||||||
 | 
					using System.Text.Json;
 | 
				
			||||||
 | 
					using System.Text.Json.Serialization;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OI.Metrology.Server.Models.Binder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class AppSettings
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public string? ApiExportPath { get; set; }
 | 
				
			||||||
 | 
					    public string? ApiLoggingContentTypes { get; set; }
 | 
				
			||||||
 | 
					    public string? ApiLoggingPathPrefixes { get; set; }
 | 
				
			||||||
 | 
					    public string? ApiLogPath { get; set; }
 | 
				
			||||||
 | 
					    public string? ApiUrl { get; set; }
 | 
				
			||||||
 | 
					    public string? AttachmentPath { get; set; }
 | 
				
			||||||
 | 
					    public string? BuildNumber { get; set; }
 | 
				
			||||||
 | 
					    public string? Company { get; set; }
 | 
				
			||||||
 | 
					    public string? ConnectionString { get; set; }
 | 
				
			||||||
 | 
					    public string? GitCommitSeven { get; set; }
 | 
				
			||||||
 | 
					    public string? InboundApiAllowedIPList { get; set; }
 | 
				
			||||||
 | 
					    public bool? IsDevelopment { get; set; }
 | 
				
			||||||
 | 
					    public bool? IsStaging { get; set; }
 | 
				
			||||||
 | 
					    public string? MockRoot { get; set; }
 | 
				
			||||||
 | 
					    public string? MonAResource { get; set; }
 | 
				
			||||||
 | 
					    public string? MonASite { get; set; }
 | 
				
			||||||
 | 
					    public string? Oi2SqlConnectionString { get; set; }
 | 
				
			||||||
 | 
					    public string? OpenInsightApplicationProgrammingInterface { get; set; }
 | 
				
			||||||
 | 
					    public Dictionary<string, string>? TableToPath { get; set; }
 | 
				
			||||||
 | 
					    public string? URLs { get; set; }
 | 
				
			||||||
 | 
					    public string? WorkingDirectoryName { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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.ApiExportPath is null) throw new NullReferenceException(nameof(ApiExportPath));
 | 
				
			||||||
 | 
					        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.OpenInsightApplicationProgrammingInterface is null) throw new NullReferenceException(nameof(OpenInsightApplicationProgrammingInterface));
 | 
				
			||||||
 | 
					        if (appSettings.URLs is null) throw new NullReferenceException(nameof(URLs));
 | 
				
			||||||
 | 
					        if (appSettings.TableToPath is null) throw new NullReferenceException(nameof(TableToPath));
 | 
				
			||||||
 | 
					        if (appSettings.WorkingDirectoryName is null) throw new NullReferenceException(nameof(WorkingDirectoryName));
 | 
				
			||||||
 | 
					        result = new(
 | 
				
			||||||
 | 
					            appSettings.ApiExportPath,
 | 
				
			||||||
 | 
					            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.OpenInsightApplicationProgrammingInterface,
 | 
				
			||||||
 | 
					            appSettings.TableToPath,
 | 
				
			||||||
 | 
					            appSettings.URLs,
 | 
				
			||||||
 | 
					            appSettings.WorkingDirectoryName);
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static Models.AppSettings Get(IConfigurationRoot configurationRoot)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Models.AppSettings result;
 | 
				
			||||||
 | 
					#pragma warning disable IL3050, IL2026
 | 
				
			||||||
 | 
					        AppSettings? appSettings = configurationRoot.Get<AppSettings>();
 | 
				
			||||||
 | 
					#pragma warning restore IL3050, IL2026
 | 
				
			||||||
 | 
					        if (appSettings?.ApiExportPath is null)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider)
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider)
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                if (!physicalFileProvider.Root.Contains("UserSecrets"))
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                throw new NotSupportedException(physicalFileProvider.Root);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            throw new NotSupportedException("Not found!");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        result = Get(appSettings);
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[JsonSourceGenerationOptions(WriteIndented = true)]
 | 
				
			||||||
 | 
					[JsonSerializable(typeof(AppSettings))]
 | 
				
			||||||
 | 
					internal partial class BinderAppSettingsSourceGenerationContext : JsonSerializerContext
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										150
									
								
								Server/OI.Metrology.Server.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								Server/OI.Metrology.Server.csproj
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,150 @@
 | 
				
			|||||||
 | 
					<Project Sdk="Microsoft.NET.Sdk.Web">
 | 
				
			||||||
 | 
					    <PropertyGroup Label="Globals">
 | 
				
			||||||
 | 
					        <SccProjectName>SAK</SccProjectName>
 | 
				
			||||||
 | 
					        <SccProvider>SAK</SccProvider>
 | 
				
			||||||
 | 
					        <SccAuxPath>SAK</SccAuxPath>
 | 
				
			||||||
 | 
					        <SccLocalPath>SAK</SccLocalPath>
 | 
				
			||||||
 | 
					    </PropertyGroup>
 | 
				
			||||||
 | 
					    <PropertyGroup>
 | 
				
			||||||
 | 
					        <ImplicitUsings>enable</ImplicitUsings>
 | 
				
			||||||
 | 
					        <IsPackable>false</IsPackable>
 | 
				
			||||||
 | 
					        <Nullable>enable</Nullable>
 | 
				
			||||||
 | 
					        <OutputType>Exe</OutputType>
 | 
				
			||||||
 | 
					        <RuntimeIdentifier>win-x64</RuntimeIdentifier>
 | 
				
			||||||
 | 
					        <TargetFramework>net7.0</TargetFramework>
 | 
				
			||||||
 | 
					        <UserSecretsId>b0a3891c-b775-422c-80ee-63a2f385045d</UserSecretsId>
 | 
				
			||||||
 | 
					    </PropertyGroup>
 | 
				
			||||||
 | 
					    <ItemGroup>
 | 
				
			||||||
 | 
					        <Compile Remove="logs\**" />
 | 
				
			||||||
 | 
					        <Content Remove="logs\**" />
 | 
				
			||||||
 | 
					        <EmbeddedResource Remove="logs\**" />
 | 
				
			||||||
 | 
					        <None Remove="logs\**" />
 | 
				
			||||||
 | 
					    </ItemGroup>
 | 
				
			||||||
 | 
					    <ItemGroup>
 | 
				
			||||||
 | 
					        <Content Remove="compilerconfig.json" />
 | 
				
			||||||
 | 
					    </ItemGroup>
 | 
				
			||||||
 | 
					    <ItemGroup>
 | 
				
			||||||
 | 
					        <PackageReference Include="Dapper" Version="2.1.4" />
 | 
				
			||||||
 | 
					        <PackageReference Include="EntityFramework" Version="6.4.4" />
 | 
				
			||||||
 | 
					        <PackageReference Include="jQuery" Version="3.7.1" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="7.0.13" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="7.0.0" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.1" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="7.0.0" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
 | 
				
			||||||
 | 
					        <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
 | 
				
			||||||
 | 
					        <PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
 | 
				
			||||||
 | 
					        <PackageReference Include="System.Drawing.Common" Version="7.0.0" />
 | 
				
			||||||
 | 
					    </ItemGroup>
 | 
				
			||||||
 | 
					    <ItemGroup>
 | 
				
			||||||
 | 
					        <ProjectReference Include="..\Shared\OI.Metrology.Shared.csproj" />
 | 
				
			||||||
 | 
					    </ItemGroup>
 | 
				
			||||||
 | 
					    <ItemGroup>
 | 
				
			||||||
 | 
					        <Folder Include="moves\" />
 | 
				
			||||||
 | 
					        <Folder Include="wwwroot\images\" />
 | 
				
			||||||
 | 
					        <Folder Include="wwwroot\styles\" />
 | 
				
			||||||
 | 
					    </ItemGroup>
 | 
				
			||||||
 | 
					    <ItemGroup>
 | 
				
			||||||
 | 
					        <None Include="compilerconfig.json" />
 | 
				
			||||||
 | 
					    </ItemGroup>
 | 
				
			||||||
 | 
					    <ItemGroup>
 | 
				
			||||||
 | 
					        <None Include="Data\Mike\service-shop.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\AppSettings-GetAppSettings.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\AppSettings-GetBuildNumberAndGitCommitSeven.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\ClientSettings-GetClientSettings.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\ClientSettings-GetIpAddress.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\Export-GetExport.txt">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\Export-GetHeaders.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\Export-GetLogistics.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\Export-GetProcessDataStandardFormat.pdsf">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQS-GetCommandText.sql">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQSV2-GetCommandText.sql">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQSV2-GetData.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQSV2-GetDescriptors.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQSV2-GetEvents.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQSV2-GetHeader.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQSV3-GetData.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQSV3-GetDescriptors.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQSV3-GetEpiProTempVerification.html">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQSV3-GetEpiProTempVerificationRows.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQSV3-GetHeader.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\InfinityQSV3-GetProductDataAverageSumOfDefectsProcessMeanProcessSigma.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\OpenInsightV1-GetTencorRun.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\Pin-GetPinnedTable.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\Reactors-GetReactors.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\ServiceShopOrder-GetAllServiceShopOrders.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\ToolTypes-GetData.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\ToolTypes-GetHeaderFields.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\ToolTypes-GetHeaders.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\ToolTypes-GetHeaderTitles.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\ToolTypes-GetToolTypeMetadata.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					        <None Include="Data\Tests\ToolTypes-Index.json">
 | 
				
			||||||
 | 
					            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
				
			||||||
 | 
					        </None>
 | 
				
			||||||
 | 
					    </ItemGroup>
 | 
				
			||||||
 | 
					</Project>
 | 
				
			||||||
@ -1,22 +1,16 @@
 | 
				
			|||||||
using Microsoft.AspNetCore.Builder;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
using Microsoft.AspNetCore.Mvc;
 | 
					 | 
				
			||||||
using Microsoft.Extensions.Configuration;
 | 
					 | 
				
			||||||
using Microsoft.Extensions.DependencyInjection;
 | 
					 | 
				
			||||||
using Microsoft.Extensions.Hosting;
 | 
					 | 
				
			||||||
using Microsoft.Extensions.Hosting.WindowsServices;
 | 
					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;
 | 
				
			||||||
 | 
					using OI.Metrology.Shared.Models.Stateless;
 | 
				
			||||||
using OI.Metrology.Shared.Repositories;
 | 
					using OI.Metrology.Shared.Repositories;
 | 
				
			||||||
using OI.Metrology.Shared.Services;
 | 
					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;
 | 
					using System.Reflection;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OI.Metrology.Viewer;
 | 
					namespace OI.Metrology.Server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class Program
 | 
					public class Program
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -25,7 +19,7 @@ public class Program
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        string webRootPath;
 | 
					        string webRootPath;
 | 
				
			||||||
        Assembly assembly = Assembly.GetExecutingAssembly();
 | 
					        Assembly assembly = Assembly.GetExecutingAssembly();
 | 
				
			||||||
        string assemblyName = assembly.GetName()?.Name;
 | 
					        string? assemblyName = assembly.GetName()?.Name;
 | 
				
			||||||
        if (string.IsNullOrEmpty(assemblyName))
 | 
					        if (string.IsNullOrEmpty(assemblyName))
 | 
				
			||||||
            throw new Exception();
 | 
					            throw new Exception();
 | 
				
			||||||
        string baseAssemblyName = assemblyName.Split('.')[0];
 | 
					        string baseAssemblyName = assemblyName.Split('.')[0];
 | 
				
			||||||
@ -46,31 +40,48 @@ public class Program
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public static int Main(string[] args)
 | 
					    public static int Main(string[] args)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        LoggerConfiguration loggerConfiguration = new();
 | 
					        ILogger<Program>? logger = null;
 | 
				
			||||||
        (string assemblyName, WebApplicationOptions _) = Get(args);
 | 
					        (string assemblyName, WebApplicationOptions _) = Get(args);
 | 
				
			||||||
        WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
 | 
					        WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
 | 
				
			||||||
        _ = webApplicationBuilder.Configuration.AddUserSecrets<Program>();
 | 
					        _ = webApplicationBuilder.Configuration.AddUserSecrets<Program>();
 | 
				
			||||||
        AppSettings appSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration);
 | 
					        AppSettings appSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration);
 | 
				
			||||||
 | 
					        if (string.IsNullOrEmpty(appSettings.Company))
 | 
				
			||||||
 | 
					            throw new Exception("Company name must have a value!");
 | 
				
			||||||
        if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName))
 | 
					        if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName))
 | 
				
			||||||
            throw new Exception("Working directory name must have a value!");
 | 
					            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);
 | 
					        Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory);
 | 
				
			||||||
        _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, webApplicationBuilder.Configuration);
 | 
					 | 
				
			||||||
        _ = SerilogHostBuilderExtensions.UseSerilog(webApplicationBuilder.Host);
 | 
					 | 
				
			||||||
        Log.Logger = loggerConfiguration.CreateLogger();
 | 
					 | 
				
			||||||
        Serilog.ILogger log = Log.ForContext<Program>();
 | 
					 | 
				
			||||||
        try
 | 
					        try
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddMemoryCache();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);
 | 
					            _ = webApplicationBuilder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddControllersWithViews();
 | 
					            _ = webApplicationBuilder.Services.AddControllersWithViews();
 | 
				
			||||||
            _ = new MetrologyRepo(new SQLDbConnectionFactory(appSettings), null);
 | 
					 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddDistributedMemoryCache();
 | 
					            _ = webApplicationBuilder.Services.AddDistributedMemoryCache();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddMemoryCache();
 | 
					
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddSingleton<AppSettings, AppSettings>(_ => appSettings);
 | 
					            AppSettingsRepository appSettingsRepository = new(appSettings);
 | 
				
			||||||
 | 
					            SQLDbConnectionFactory sqlDbConnectionFactory = new(appSettings);
 | 
				
			||||||
 | 
					            ClientSettingsRepository clientSettingsRepository = new(appSettings);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddHttpClient();
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton(_ => appSettings);
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IPinRepository, PinRepository>();
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddScoped<IExportRepository, ExportRepository>();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddScoped<IAttachmentsService, AttachmentsService>();
 | 
					            _ = webApplicationBuilder.Services.AddScoped<IAttachmentsService, AttachmentsService>();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddScoped<IInboundDataService, InboundDataService>();
 | 
					            _ = webApplicationBuilder.Services.AddScoped<IInboundDataService, InboundDataService>();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddScoped<IMetrologyRepo, MetrologyRepo>();
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IInboundRepository, InboundRepository>();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddSingleton<IDbConnectionFactory, SQLDbConnectionFactory>();
 | 
					            _ = webApplicationBuilder.Services.AddScoped<IMetrologyRepository, MetrologyRepository>();
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IReactorsRepository, ReactorsRepository>();
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IToolTypesRepository, ToolTypesRepository>();
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IInfinityQSRepository, InfinityQSRepository>();
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddScoped<IOpenInsightV1Repository, OpenInsightV1Repository>();
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IInfinityQSV2Repository, InfinityQSV2Repository>();
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IInfinityQSV3Repository, InfinityQSV3Repository>();
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IClientSettingsRepository>(_ => clientSettingsRepository);
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IServiceShopOrderRepository, ServiceShopOrderRepository>();
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<ISpreadingResistanceProfileService, SpreadingResistanceProfileService>();
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IDbConnectionFactory, SQLDbConnectionFactory>(_ => sqlDbConnectionFactory);
 | 
				
			||||||
 | 
					            _ = webApplicationBuilder.Services.AddSingleton<IAppSettingsRepository<Models.Binder.AppSettings>>(_ => appSettingsRepository);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddSwaggerGen();
 | 
					            _ = webApplicationBuilder.Services.AddSwaggerGen();
 | 
				
			||||||
            _ = webApplicationBuilder.Services.AddSession(sessionOptions =>
 | 
					            _ = webApplicationBuilder.Services.AddSession(sessionOptions =>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@ -84,14 +95,19 @@ public class Program
 | 
				
			|||||||
                _ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
 | 
					                _ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
 | 
				
			||||||
                _ = webApplicationBuilder.Logging.AddEventLog(settings =>
 | 
					                _ = webApplicationBuilder.Logging.AddEventLog(settings =>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 | 
					#pragma warning disable CA1416
 | 
				
			||||||
                    if (string.IsNullOrEmpty(settings.SourceName))
 | 
					                    if (string.IsNullOrEmpty(settings.SourceName))
 | 
				
			||||||
                        settings.SourceName = webApplicationBuilder.Environment.ApplicationName;
 | 
					                        settings.SourceName = webApplicationBuilder.Environment.ApplicationName;
 | 
				
			||||||
 | 
					#pragma warning restore
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            WebApplication webApplication = webApplicationBuilder.Build();
 | 
					            WebApplication webApplication = webApplicationBuilder.Build();
 | 
				
			||||||
 | 
					            logger = webApplication.Services.GetRequiredService<ILogger<Program>>();
 | 
				
			||||||
 | 
					            _ = webApplication.UseCors(corsPolicyBuilder => corsPolicyBuilder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
 | 
				
			||||||
            if (!webApplicationBuilder.Environment.IsDevelopment())
 | 
					            if (!webApplicationBuilder.Environment.IsDevelopment())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _ = webApplication.UseExceptionHandler("/Error");
 | 
					                _ = webApplication.UseExceptionHandler("/Error");
 | 
				
			||||||
 | 
					                _ = webApplication.UseHttpsRedirection();
 | 
				
			||||||
                _ = webApplication.UseHsts();
 | 
					                _ = webApplication.UseHsts();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
@ -102,29 +118,23 @@ public class Program
 | 
				
			|||||||
                    webApplication.Lifetime.StopApplication();
 | 
					                    webApplication.Lifetime.StopApplication();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                _ = webApplication.UseSwagger();
 | 
					                _ = 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);
 | 
					 | 
				
			||||||
            _ = SerilogApplicationBuilderExtensions.UseSerilogRequestLogging(webApplication);
 | 
					 | 
				
			||||||
            _ = webApplication.UseFileServer(enableDirectoryBrowsing: true);
 | 
					            _ = webApplication.UseFileServer(enableDirectoryBrowsing: true);
 | 
				
			||||||
            _ = webApplication.UseStaticFiles();
 | 
					            _ = webApplication.UseStaticFiles();
 | 
				
			||||||
            _ = webApplication.UseSession();
 | 
					            _ = webApplication.UseSession();
 | 
				
			||||||
            _ = webApplication.UseHttpsRedirection();
 | 
					 | 
				
			||||||
            _ = webApplication.UseMiddleware<ApiLoggingMiddleware>();
 | 
					            _ = webApplication.UseMiddleware<ApiLoggingMiddleware>();
 | 
				
			||||||
            _ = webApplication.MapControllers();
 | 
					            _ = webApplication.MapControllers();
 | 
				
			||||||
            log.Information("Starting Web Application");
 | 
					            logger.LogInformation("Starting Web Application");
 | 
				
			||||||
            webApplication.Run();
 | 
					            webApplication.Run();
 | 
				
			||||||
            return 0;
 | 
					            return 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        catch (Exception ex)
 | 
					        catch (Exception ex)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            log.Fatal(ex, "Host terminated unexpectedly");
 | 
					            try
 | 
				
			||||||
            return 1;
 | 
					            { logger?.LogCritical(ex, "Host terminated unexpectedly"); }
 | 
				
			||||||
        }
 | 
					            catch (Exception) { }
 | 
				
			||||||
        finally
 | 
					            throw;
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            Log.CloseAndFlush();
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								Server/Properties/launchSettings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Server/Properties/launchSettings.json
									
									
									
									
									
										Normal file
									
								
							@ -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"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user